현재 위치 - 인적 자원 플랫폼망 - 미니프로그램 자료 - 1, c 언어 프로그램 서적 등록 관리자. 요구 사항은 다음과 같습니다!
1, c 언어 프로그램 서적 등록 관리자. 요구 사항은 다음과 같습니다!
# include & ltstdio.h & gt

# include & ltstring.h & gt

# include & ltstdlib.h & gt

//

#define MAXSIZE 100 // 최대값은 100 으로 정의됩니다.

# definelist _ init _ size 100//도서관 카드 최대 사용자 수는100 으로 정의됩니다.

//차용인의 구조

Typedef 구조 Boro// 대여 동작

{

Char bnum [20]; //빌린 도서의 책 번호

Char ret date [8]; //반환 날짜

Struct Boro * next

} Bor

Typedef 구조 링크 북

{

Bor * next// 이 도서관 카드 대출 행위

Char cnum [20]; //인증서 번호

Int Total// 대출 수량

} lend [list _ init _ size]; //차용자 배열

//책의 구조 정보

Typedef 구조 LNode

{

Char card num [20]; //라이브러리 ID 번호

Struct LNode * next

} 링크 목록; //차용인

Typedef 구조 책

각 책에 등록할 내용은 ISBN, 제목, 저자, 출판사, 총 재고 및 기존 재고입니다.

문자 번호 [20]; //도서 번호

차 이름 [20]; //제목

Char auth [20]; //저자

Char pub [20]; //누르기

Int TotNum// 총 재고

Int NowNum// 현재 재고

LinkList * next// 책을 빌린 사람

} ook [maxsize];

//

Int Retotal// 독자 수

Int total// 외부 변수를 정의합니다. 책의 수

//

//구조 초기화

Void init bo (ook & Boo) // 도서 정보 초기화

{

For(int I = 0;; 나 & ltMAXSIZEi++)

{

쉿 [나]. NowNum = 0;;

쉿 [나]. Totnum = 0;

쉿 [나]. Next = NULL

}

}

Void InitRe(lend & amp;; 린)//차용자 정보 초기화

{

For(int I = 0;; 나 & ltLIST _ INIT _ SIZEi++)

린 [나]. Next = NULL

}

//

Intmid = 0; //찾은 위치를 반환하는 외부 함수 mid 입니다.

부울 이분법 (OOkboo, Charsearchnum[])// 이분법은 비교 도서 번호를 찾습니다.

{//는 bool 함수를 사용하지만 함수는 두 개의 반환 값을 가질 수 없으므로 찾은 위치를 반환하도록 외부 변수 mid 를 설정합니다.

Int low=0, high = total-1;

Intfound = 0;

While(low & lt;; = 높음)

{

Mid= (낮음+높음)/2; //중간점

If (strcmp (boo [mid]) 입니다. Num, search num)= = 0)// 책 번호가 같습니다.

{

발견 =1;

True 를 반환합니다

}//검색이 성공했습니다.

If(strcmp(boo[mid]) 입니다. Num, SearchNum)! =0)// 책 번호가 다릅니다.

높음 = 보통1;

Else 낮음 = mid+1;

}

If (발견됨 ==0)

False// 검색 실패를 반환합니다.

}

무효 구매 (ook & ampboo, char BuyNum[])

편집 저장: 새 책을 구입하면 이미 도서 계정에 있는 경우 재고를 늘립니다 (포함

//총 재고 및 현재 재고 포함), 장부가 없는 경우 장부에 장부를 추가합니다. 총 재고 및 현재 재고는 모두 1 입니다.

If(BinarySearch(boo, BuyNum)) // 도서관에 이 책이 있다면.

{

쉿 [중]. Totnum++;+; //총 재고+1

쉿 [중]. Nownum++;+; //현재 재고와 1

Printf ("수신이 성공했습니다. \ n ");

Printf ("도서관에서이 책의 정보가 변경되었습니다. 번호 %s 의 책 %s 의 저자는 %s, 출판사는% s, 현재 총 재고는 %d, 현재 재고는% d, \n ",boo[mid] 입니다. Num, boo[mid]. 이름, boo[mid]. Auth, boo[mid]. 술집, 보 [mid]. 토트넘, 보 [mid]. Now num);

}

만약 (! BinarySearch(boo, BuyNum))

{

For(int I = total;; 나> 중기 및 중기. & amp 합계; I-)// 올바른 위치에 삽입하여 순서를 유지하십시오.

Boo [I] = boo [I-1]; //빈 삽입 위치

Printf ("도서관에는 이 책이 없습니다. 새로운 참고서 목록을 만들려면 전체 책의 세부 사항을 기입해 주세요. \ n ");

Strcpy(boo[i]. Num, buy num);

Printf ("도서 구매 수량:");

Scanf(" %d ",& 쉿 [나]. Now num);

쉿 [나]. TotNum=boo[i] 입니다. 노엄

Printf ("책의 이름은");

Scanf(" %s ",& 쉿 [나]. 이름);

Printf ("이 책의 저자는");

Scanf(" %s ",& 쉿 [나]. Auth);

Printf ("이 책의 출판사는");

Scanf(" %s ",& 쉿 [나]. Pub); //전체 정보

쉿 [나]. Next = NULL

합계++; //총액+1

Printf ("이 책 정보가 추가되었습니다. 번호 %s 의 책 %s 의 저자는 %s, 출판사는% s, 현재 총 재고는 %d, 현재 재고는% d, \n ",boo[i] 입니다. Num, boo[i]. 이름, 보 [I]. Auth, boo[i]. Pub, boo[i]. 토트넘, 쉿 [나]. Now num);

Printf ("수신이 성공했습니다. \ n ");

}

}

유효하지 않은 삭제 (ook & ampboo, char DeleteNum[])

{//2. 재고 정리: 어떤 책은 예약가치가 없어서 장부에서 로그아웃한다.

If (이진 검색법 (boo, delete num)= = false | | total = = 0)// 책이 없는 경우

Printf ("책은 도서관에 없습니다. \ n ");

If (이진 검색법 (boo, num 제거))//그렇다면.

{

만약 (! 쉿 [중]. 다음)

{

For(int j = mid;; J< 합계; J++)

Boo [j] = boo [j+1];

Strcpy(boo[j].num, boo[j+ 1]. Num);

Strcpy(boo[j]. 이름, boo[j+ 1]. 이름);

Strcpy(boo[j].auth, boo[j+ 1]. Auth);

Strcpy(boo[j].pub, boo[j+ 1]. Pub);

Boo[j]. TotNum=boo[j+ 1]. TotNum

Boo[j]. NowNum=boo[j+ 1]. 노엄

Printf ("이 책은 성공적으로 삭제되었습니다. \ n ");

}

Else printf ("이 책은 대출자가 있어서 삭제할 수 없습니다. \ n ");

}

}

무효 대여 (ook & ampboo, lend & amp 포리스트, char BorrowNum[], char CaNum[])

차용: 한 책의 기존 재고가 0 보다 크면 책 한 권을 빌려 기존 재고를 줄이십시오 1.

//그리고 대출자의 도서 번호와 반환 기한을 등록하다.

Bor *p, * q;;

체인 테이블 *m, * n;;

만약 (! 이진 검색법 (boo, borrownum)| | Total = = 0)// 이 책을 찾을 수 없는 경우

Printf ("이 책은 도서관에 없습니다. \ n "); //만약 당신이 이 책을 가지고 있다면,

If (이분 검색법)//도서관에 몇 가지가 있습니다.

{

If(boo[mid]. NowNum & gt0) // 현재 재고가 0 보다 큰지 확인합니다.

{

쉿 [중]. Now num-; //책 한 권 빌려, 1 적다.

If(boo[mid]. Next==NULL) // 도서 정보에 이 책이 대여되지 않았다고 표시되는 경우.

{

M = (linklist *) malloc (sizeof (lnode)); //분포

쉿 [중]. Next = m;; //도서 정보에서 연결된 목록의 첫 번째 노드입니다.

Strcpy (m-> CardNum, canum);

M-> Next = NULL// 마지막 노드가 비어 있습니다.

}

Else // 누군가가 이미 이 책을 빌리고 있다면.

{

M=boo[mid] 입니다. 다음으로,

While (m->; 다음)//마지막 노드로 이동

M = m-& gt;; 다음으로,

N = (linklist *) malloc (sizeof (lnode)); //공간 할당, 1 개 노드 추가.

M-> Next = n;;

Strcpy (n-> CardNum, canum); //인증서 번호 기록

N->; Next = NULL

}

Int I = 0;;

For(I = 0;; 나 & ltRetotali++)//

{

만약 (! 린 [i].CNum, CaNum))// 이미 이 도서관 카드에 대한 정보가 있다면,

{

P = 린 [나]. 다음으로,

While (p->; 다음) p = p-& gt;; 다음으로, //마지막 노드로 이동

Q = (bor *) malloc (sizeof (boro)); //공간 할당

P->; Next = q;;

Strcpy (q-> BNum, borrow num); //책 번호 기록

Printf ("반환 날짜 입력:");

Scanf("%s ",& ampq->; Ret date);

Q->; Next = NULL

Printf ("대출이 성공했습니다. \ n ");

깨뜨리다 //인증서를 찾으면 루프에서 벗어납니다.

}

}

If(i==Retotal)// 이 인증서에 대한 정보가 없는 경우 ,

{

숲 [1]. CNum, canum); //인증서 번호 기록

P = (bor *) malloc (sizeof (boro)); //공간 할당

린 [나]. Next = p;;

Strcpy (p-> BNum, borrow num);

Printf ("반환 날짜 입력:");

Scanf(" %s ",& ampp->; Ret date);

P->; Next = NULL

Retotal++;+; //도서 카드 번호 총 정보 플러스 1.

Printf ("대출이 성공했습니다. \ n ");

}

}

Else printf ("대출에 실패했습니다. 이 책은 현재 0 파운드의 재고가 있다. \ n ");

}

}

무효 반품 (ook & ampboo, lend & ampLin, char ReturnNum[], char BorrowerNum[])

반환: 차용인 등록을 취소하고 기존 도서 수를 변경합니다.

Bor *p, * q;;

체인 테이블 *m, * n;;

Intflag = 0; //매개 변수 설정

만약 (! BinarySearch(boo, ReturnNum)||! 합계)//책 없음.

Printf ("도서관에 책이 없습니다. \ n ");

If (이분검색법 (boo, return num))// 책이 있다.

{

M=boo[mid] 입니다. 다음으로,

만약 (! Strcmp (m-> Cardnum, borrowernum)// 첫 번째 차용인이 반납한 경우.

{

쉿 [중]. Nownum++;+; //현재 재고와 1

쉿 [중]. Next = m-& gt;; 다음으로, //노드 제거

무료 (m); //이 노드의 공간을 확보하십시오.

}

기타

{

While (m->; 다음)//반환자의 차용자 노드를 찾습니다.

{

만약 (! Strcmp (m-> 다음-> CardNum, BorrowerNum)) // 발견된 경우 ,

{

N = m-& gt;; 다음으로, //n 은 차용인의 대출 노드입니다.

M-> Next = n-& gt;; 다음으로, //m 차용자 대출 노드의 다음 노드를 가리킵니다.

무료 (n); //공간 확보

쉿 [중]. Nownum++;+; //현재 재고와 1

깨뜨리다

}

M = m-& gt;; 다음으로,

}

}

}

//차용자 테이블에서 차용자 정보를 찾습니다.

For(int I = 0;; 나 & ltRetotali++)

{

만약 (! 임 [I].cnum, borrowernum))// 대출자를 찾으면

{

P = 린 [나]. 다음으로,

만약 (! Strcmp (p-> BNum, return num))/// 반납하면 빌린 첫 번째 책이다.

{

린 [나]. Next = p-& gt;; 다음으로, //다음 대여 노드를 가리킵니다

무료 (p); //노드 공간 확보

Printf ("책이 성공적으로 반환되었습니다. \ n ");

Flag =1;

깨뜨리다

}

Else // 찾을 수 없습니다.

{

While (p->; 다음)//책을 반납할 대출 노드를 찾습니다.

{

만약 (! Strcmp (p-> 다음-> BNum, ReturnNum)) // 발견된 경우.

{

Q = p->; 다음으로, //q 는 책을 반납하는 대출 노드입니다.

P->; Next = q-& gt;; 다음으로, //p 는 다음 대여 노드를 가리킵니다.

무료 (q); //공간 확보

Printf ("책이 성공적으로 반환되었습니다. \ n ");

Flag =1;

깨뜨리다

}

P = p-& gt;; 다음으로,

}

}

}

}

For(int k = 0;; K & ltRetotalk++)

만약 (! 린 [k]. 다음)

{

For(int j = k;; J & ltRetotalj++)

Lin [j] = Lin [j+1]; //이후 모두 한 명 앞으로 나아가 현재 정보를 덮어씁니다.

린 [j].CNum, ""; //도서 번호 삭제

Retotal-; //도서관 카드 수 감소 1

}//현재 상태에서 책을 빌리지 않은 도서관 카드 정보를 삭제하여 공간을 절약합니다.

If(flag==0) printf ("이 인증서에 대한 정보가 없습니다. \ n ");

}

//5. 검색: 세 가지 질의 기준 중 하나로 검색: 책 번호별 검색,

//제목과 작성자별로 검색합니다. 주: 조합 검색, 즉 여러 조건의 조합 검색은 구현되지 않을 수 있습니다.

Void search bynum(ook & amp;; Boo, char SeaNum[])

Bynum 은 책 번호로 검색합니다.

링크 목록 * p;

P=boo[mid] 입니다. 다음으로,

If (이진 검색법 (boo, seanum) = = false) printf ("죄송합니다. 찾으시는 책을 찾을 수 없습니다. \ n "); //이진 검색법을 찾을 수 없습니다

Else// 찾으면.

{

{

Printf ("Ⓖ" Ⓖ Ⓖ Ⓖ Ⓖ-

Printf ("책 번호" 제목 "저자" 출판사 "현재 재고" 총 재고 \ n ");

Printf ("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Printf ("%14s"%14s "%16s"%/kloc-" 이름, boo[mid]. Auth, boo[mid]. 술집, 보 [mid]. 노엄, 쉿 [mid]. To tnum);

Printf ("Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ

If(boo[mid]. 다음! = 비어 있음)

{

Printf ("Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ \ n");

Printf ("빌린 책의 \ n");

Printf ("\" 도서관 번호 \ n ");

While(p)

{

Printf ("⓱ ⓱ ⓱ 945e ⓮ ⓱ \ n");

Printf ("%14s \ \ n", p-> Card num);

P = p-& gt;; 다음으로,

}

Printf ("Ⓖ Ⓖ Ⓖ Ⓖ Ⓖ Ⓘ \ n");

}

}

While(p)

{

Printf(" %s ",p-> Card num); //책 번호로 찾는 기능에도 차용인의 카드 번호가 표시됩니다.

P = p-& gt;; 다음으로,

}

Printf ("\ n");

}//검색한 책에 대한 정보를 표시합니다.

}

Void search by name(ook & amp;; 보)

{//제목별로 이름을 기준으로 검색합니다.

Char seaname [20];

Printf ("찾고 있는 책의 제목을 입력하십시오: \ n");

Scanf(" %s ",& ampseaname);

Printf ("이 책의 제목을 찾는 책의 세부 사항은 다음과 같습니다. \ n");

For(int I = 0;; 나< 합계; I++)

{

If (strcmp (seaname, boo [i]). Name)= = 0)// 제목이 같은 경우.

{

Printf ("책 번호:% s \ n 제목:% s \ n 작성자:% s \ n 출판사:% s \ n 총 재고:% d \ n 재고:% d \ n \ n Num, boo [i]. 이름, boo [

}//정보와 일치하는 모든 책에 대한 정보를 표시합니다.

}

}

Void search by auth(ook & amp;; 보)

작성자별 검색 승인 {//

Char sea auth [20];

Printf ("찾고 있는 책의 저자 입력: \ n");

Scanf(" %s ",& ampsea auth);

Printf ("저자와 일치하는 책 찾기 세부 사항은 다음과 같습니다. \ n");

For(int I = 0;; 나< 합계; I++)

{

If (strcmp (seaauth, boo [i]). Auth)= = 0)// 작성자가 같은 경우.

{

Printf ("책 번호:% s \ n 제목:% s \ n 작성자:% s \ n 출판사:% s \ n 총 재고:% d \ n 재고:% d \ n \ n Num, boo [i]. 이름, boo [

}//정보와 일치하는 모든 책에 대한 정보를 표시합니다.

}

}

//6. 보기: 차용자가 한 도서 번호로 빌린 모든 책과 기한이 지난 모든 책을 볼 수 있습니다.

유효하지 않은 뷰 카드 (ook & ampboo, lend & amp 포리스트)

차용자가 차용증 번호로 빌린 모든 책을 확인하십시오.

문자 번호 [20];

Printf ("보려는 도서증 번호 입력: \ n");

Scanf(" %s ",& ampnum);

Bor * p;;

Intqqq = 0;

For(int I = 0;; 나 & ltRetotali++)

{

If (strcmp (Lin [I].cnum, num)= = 0)// 인증서 찾기.

{

Printf ("이 증명서가 빌린 책은: \ n");

P = 린 [나]. 다음으로,

While(p)

{

Printf(" %s ",p-> Bnum); //도서 번호

P = p-& gt;; 다음으로,

}

Printf ("\ n");

Qqq =1;

깨뜨리다

}

}

(qqq==0) 인 경우

Printf ("이 인증서는 존재하지 않습니다. \ n ");

}

Void viewbook (ook & Boo, lend & amp 숲)

만료 된 모든 책을 확인하십시오.

Char date [8];

Bor * p;;

Printf ("날짜를 입력하십시오 (20060605 형식으로 입력하십시오): \ n");

Scanf(" %s ",& 날짜);

Printf ("모든 연체 도서는: \ n");

For(int I = 0;; 나 & ltRetotali++)

{

P = 린 [나]. 다음으로,

While(p)// p 가 비어 있지 않을 때

{

If (strcmp (p-> RetDate, date)& lt;; 0) // 만료됨

{

Printf ("책 번호 %s, 인증서 번호 %s, 만료 날짜 %s \n", p-> 린 [나]. CNum, p-> Ret date);

}//기한이 지난 모든 도서에 대한 정보를 표시합니다.

P = p-& gt;; 다음으로,

}

}

}

Void Menu() // 메뉴

{

Printf ("ⓣ-------m e n u----

Printf ("│ \ n");

Printf("│ 1. 편집 저장: 새 책 구입, 도서 계좌에 이미 있다면 Ⓦ │\ n”);;

Printf("│ ") 는 자체 재고 (총 재고 및 현재 재고 포함) 를 증가시킵니다. │ \ n ");

Printf("│ "책이 없으면 책 계정에 책 한 권, │ \ n");

Printf("│ "총 재고 및 기존 재고는 모두 입력 수치입니다. │ \ n ");

Printf("│ 2). 재고 정리: 어떤 책은 예약가치가 없어 장부에서 로그아웃한다. │ \ n ");

Printf("│ 3. 대출: 한 권의 책이 재고품이 0 보다 크면, 책 한 권을 빌려 재고재고 1, │ \ n) 을 줄인다.

Printf("│ ") 는 대출자의 도서증 번호와 반환 기한을 등록한다. │ \ n ");

Printf("│ 4. 반환: 차용인 등록을 취소하고 책의 기존 수량을 변경합니다. │ \ n ");

Printf("│ 5. ISBN 별로 검색합니다. │ \ n ");

Printf("│ 6. 제목별로 검색하다. │ \ n ");

Printf("│ 7. 작성자별로 검색합니다. │ \ n ");

Printf("│ 8. 도서관 카드 번호를 빌린 차용자가 빌린 모든 책을 확인하십시오. │ \ n ");

Printf("│ 9. 기한이 지난 모든 도서를 살펴보다. │ \ n ");

Printf("│ 0) 입니다. 도서 관리 시스템을 퇴출하다. │ \ n ");

Printf ("│ \ n");

Printf ("┖------┘ \ n-필요한 운동을 선택하십시오---\ n");

}

Void main ()

{

Ook Bo

임에게 빌려주다

Char bnum [20];

Char cnum [20];

Printf ("-도서관 관리 시스템에 오신 것을 환영합니다! -\ n \ n ");

Intchoice =10;

Int SearchCho= 10, view CHO =10;

그리고 (선택! =0)

{

메뉴 (); //메뉴 표시

Scanf(" %d ",& 선택);

스위치 (선택)

{

사례 1:// 편집 및 체크 인

Printf ("책 입고의 책 번호를 입력하십시오:");

Scanf(" %s ",bnum);

매입 (보, bnum);

깨뜨리다

시나리오 2:// 재고 삭제

Printf ("지우려는 책의 책 번호 입력:");

Scanf(" %s ",bnum);

삭제 (Bo, bnum);

깨뜨리다

사례 3://대출

Printf ("빌리고 싶은 책의 책 번호를 입력하십시오: \ n");

Scanf(" %s ",& ampbnum);

Printf ("라이브러리 번호 입력:");

Scanf(" %s ",& ampcnum);

차용 (Bo, Lin, BNum, cnum);

깨뜨리다

시나리오 4:// Return

Printf ("반환할 책의 책 번호 입력: \ n");

Scanf(" %s ",& ampbnum);

Printf ("라이브러리 번호 입력:");

Scanf(" %s ",& ampcnum);

Return(Bo, Lin, BNum, cnum) :

깨뜨리다

사례 5://검색//책 번호별 검색

Printf ("ISBN 입력:"); //찾으려는 책 번호를 입력합니다.

Scanf(" %s ",& ampbnum);

SearchByNum(Bo, bnum);

깨뜨리다

사례 6:// 제목별로 검색합니다.

Search by name (bo);

깨뜨리다

사례 7:// 작성자별 검색

Searchbyauth (bo);

깨뜨리다

사례 8://도서관 카드가 빌린 모든 책을 확인하십시오.

비디오 카드 (보, 린);

깨뜨리다

사례 9://모든 연체 도서를 확인하십시오.

ViewBook (보, 린);

깨뜨리다

상황 0:// 시스템을 종료합니다.

종료 (0); 깨뜨리다

기본값: printf ("입력 오류! \ n "); 종료 (0); 깨뜨리다

}

}

}