C語(yǔ)言大作業(yè)之圖書管理系統(tǒng)的實(shí)現(xiàn)詳程
序
時(shí)間在流去,我們?cè)陂L(zhǎng)大。
嗨,這里是狐貍~~
今天是2022年的一月四日了,元旦小長(zhǎng)假也過(guò)去了,新年新氣象,新年新目標(biāo),我們要向前看,不要執(zhí)意過(guò)去了,感謝過(guò)去,把握現(xiàn)在,展望未來(lái),這是我們現(xiàn)在應(yīng)該做的。好了,廢話不多說(shuō),今天我們分享一個(gè)系統(tǒng),確實(shí)也有許久沒(méi)有分享過(guò)系統(tǒng)了,今天就給大家詳細(xì)講一下這個(gè)圖書管理系統(tǒng)吧。
主要內(nèi)容
開(kāi)發(fā)一個(gè)圖書信息管理系統(tǒng),圖書信息包括:圖書編號(hào)、書名、作者、出版社、類別、出版時(shí)間、價(jià)格等基本信息(也可以根據(jù)自己情況進(jìn)行擴(kuò)充,比如是否借出、庫(kù)存量等)。使之能提供以下基本功能:
(1)圖書信息錄入功能(圖書信息用文件保存)--輸入
(2)圖書信息瀏覽功能--輸出
(3)查詢功能(至少一種查詢方式)、排序功能(至少一種排序方式):
①按書名查詢
②按作者名查詢 按照價(jià)錢排序 按出版時(shí)間排序等等
(4)圖書信息的刪除與修改
擴(kuò)展功能:可以按照自己的程度進(jìn)行擴(kuò)展。比如
(1)簡(jiǎn)單的權(quán)限處理
(2)報(bào)表打印功能
(3)甚至根據(jù)自己情況,可以加上學(xué)生信息,并擴(kuò)充為圖書借閱系統(tǒng)。
(4)模糊查詢
(5)綜合查詢
(6)統(tǒng)計(jì)功能 比如統(tǒng)計(jì)處某一類別的圖書信息 或 篩選出小于指定數(shù)量庫(kù)存的圖書信息等等。
概要設(shè)計(jì)
1 圖書錄入可以錄入圖書名,作者,出版社,出版日期,價(jià)格!錄入圖書編號(hào)時(shí)函數(shù)就會(huì)判斷此 編 號(hào)是否存在,若存在不能成功錄入!
2 圖書瀏覽可以瀏覽全部圖書!
3 圖書查詢提供按圖書編號(hào)模糊查詢,按圖書名關(guān)鍵字查詢,按圖書編號(hào)精確查詢,按圖書名精確 查詢!模糊查詢和關(guān)鍵字查詢事通過(guò)比價(jià)字符串的相似度而實(shí)現(xiàn)的!
4 修改刪除圖書可以通過(guò)圖書查詢來(lái)查詢操作的圖書編號(hào),通過(guò)編號(hào)操作!函數(shù)會(huì)提示用戶是否調(diào) 用圖書查詢來(lái)找到自己想要操作的圖書的編號(hào)。如果某一本圖書已經(jīng)被借閱那么用戶就不能刪 除 該圖書!
5 借閱圖書通過(guò)學(xué)號(hào)和圖書編號(hào)進(jìn)行借閱!如果該學(xué)號(hào)是第一次借閱那么會(huì)提示用戶輸入自己的姓 名,并存入student.txt,方便以后借閱與歸還!
6 歸還圖書先提供學(xué)號(hào),然后程序會(huì)輸出該學(xué)號(hào)借閱的所有圖書,然后再通過(guò)編號(hào)歸還!
7 借閱查詢可查詢某個(gè)學(xué)生已借但未歸還的圖書!
項(xiàng)目源碼
結(jié)構(gòu)體
先建立結(jié)構(gòu)體,定義結(jié)構(gòu)體成員
typedef struct book/*圖書結(jié)構(gòu)體*/ { char num[10]; /*書號(hào)*/ char name[10]; /*書名*/ char auth[10]; /*作者*/ int count; int sum; }Book; typedef struct borrow/*借書結(jié)構(gòu)體*/ { char id[20]; char user[20]; char book[20]; char bookid[20]; struct borrow *next; }BBnode,*BBlink; struct user { char num[10];/* 學(xué)號(hào) */ char pass[15]; char name[15]; char sex[10]; }; typedef struct unode { struct user data; struct unode *next; }Unode,*Ulink; Unode *os;
登錄界面函數(shù)
int login(Ulink l) { /*****************登陸窗口初始化****************************/ while(!flag) { char User_id[10],password[10],tmp; int i=0; User_id[0]='\0'; password[0]='\0'; textbackground(179); clrscr(); gotoxy(33,23); textcolor(YELLOW); cputs("ESC = EXIT"); textcolor(WHITE); textbackground(179); box(1,1,80,24); h_line(2,3,78); gotoxy(15,2); cputs("Login now please input the User__ID and Password"); bar_(30,10,23,5,5); /******************賬號(hào)過(guò)濾*********************/ while(User_id[0]=='\0') { gotoxy(31,11); textcolor(YELLOW); textbackground(5); cputs("User__ID:"); gotoxy(31,13); cputs("Password:"); textbackground(179); textcolor(WHITE); gotoxy(28,7); cputs("please input the User__ID!"); textbackground(179); textcolor(YELLOW); gotoxy(27,11); putch(272); gotoxy(27,13); putch(' '); gotoxy(40,11); tmp=getch(); if(tmp==27) { flg=27; return 0; } while(tmp!='\r'&&i<=9&&(tmp>=64&&tmp<=90)||(tmp>=97&&tmp<=122||(tmp>=48&&tmp<=57))) { textcolor(YELLOW); textbackground(5); putch(tmp); User_id[i]=tmp; i++; tmp=getch(); if(tmp==27) { flg=27; return 0; } } User_id[i]='\0'; } /**********************密碼過(guò)濾****************************/ while(password[0]=='\0') { gotoxy(28,7); textbackground(179); textcolor(WHITE); cputs(" input the password now "); textbackground(179); textcolor(YELLOW); gotoxy(27,13); putch(272); gotoxy(27,11); putch(' '); gotoxy(40,13); i=0; tmp=getch(); if(tmp==27) { flg=27; return 0; } while(tmp!='\r'&&i<=10&&(tmp>=64&&tmp<=90)||(tmp>=97&&tmp<=122||(tmp>=48&&tmp<=57))) { textbackground(5); putch('*'); password[i]=tmp; i++; tmp=getch(); if(tmp==27) { flg=27; return 0; } } password[i]='\0'; } /*************把賬號(hào)和密碼進(jìn)行對(duì)比驗(yàn)證**************/ if(!strcmp(User_id,"admin")&&!strcmp(password,"admin")) { return 2; } if(cmps(l,User_id,password)) { return 1; } } }
選擇界面函數(shù)
void choose() { while(1) { textbackground(179); clrscr(); gotoxy(33,2); textcolor(WHITE); cputs("Administrastor"); textcolor(YELLOW); box(1,1,80,24); h_line(2,3,78); gotoxy(3,6); cputs(">>>-------------------------1.User Management----------------------------<<<"); gotoxy(3,10); cputs(">>>-------------------------2.Book Management----------------------------<<<"); gotoxy(3,14); cputs(">>>-------------------------3.Borrow Books-------------------------------<<<"); gotoxy(30,22); textcolor(RED); cputs("Please Select!!!"); flg=getch(); if(flg=='2') bookss(); if(flg=='1') users(); if(flg=='3') borrow(); if(flg==27) { flg=-1; return; } } } void admin() { while(1) { choose(); if(flg=='1') bookss(); if(flg=='2') users(); if(flg=='3') borrow(); if(flg==27) { return; } } }
操作界面函數(shù)
void user(Ulink h) { int flag; BBlink l,p,r;/* 連表 */ FILE *fp; /* 文件指針 */ int count=0; l=(BBnode*)malloc(sizeof(BBnode)); l->next=NULL; r=l; fp=fopen(bfile,"rb"); if(fp==NULL) { fp=fopen(bfile,"wb"); } while(!feof(fp)) { p=(BBnode*)malloc(sizeof(BBnode)); if(fread(p,sizeof(BBnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */ { p->next=NULL; r->next=p; r=p; /* 將該接點(diǎn)掛入連中 */ count++; } } while(1) { textbackground(179); clrscr(); textcolor(YELLOW); box(1,1,80,24); h_line(2,3,78); gotoxy(3,2); textcolor(RED); cputs("A."); textcolor(BLUE); cputs("my message "); textcolor(RED); cputs("B."); textcolor(BLUE); cputs("modyfy my message "); textcolor(RED); cputs("C."); textcolor(BLUE); cputs("my borrow "); textcolor(RED); cputs("D."); textcolor(BLUE); cputs("search book"); textcolor(YELLOW); gotoxy(50,50); flag=getch(); switch(flag) { case 'a': show(os); break; /*************添加用戶**********/ case 'b': Modify_user(h); Save(h); break;/*************刪除用戶**********/ case 'c': Myborrow(); break; case 'd': usersearch(); break; case 27: return; } } }
添加函數(shù)
圖書的添加,包括用戶添加以及管理員添加
void add(blink l) { Bnode *p,*r,*s; char num[10]; r=l; s=l->next; while(r->next!=NULL) r=r->next; textcolor(RED); gotoxy(25,4); cputs("INPUT THE MESSAGE ABOUT BOOK"); gotoxy(31,10); textcolor(YELLOW); cputs("Book ID:"); scanf("%s",num); p=(Bnode *)malloc(sizeof(Bnode)); while(s) { if(strcmp(s->data.num,num)==0) { textcolor(WHITE); gotoxy(25,15); cputs("This ID:"); printf("'%s'",num); cputs("is exist!"); gotoxy(25,22); cputs("please Press any key to continue..."); gotoxy(255,252); getch(); return; } s=s->next; } strcpy(p->data.num,num); gotoxy(31,12); textcolor(YELLOW); cputs("Input Book name:"); scanf("%s",p->data.name); gotoxy(31,14); cputs("input your Book auth:"); scanf("%s",p->data.auth); gotoxy(31,16); cputs("input your Book count:"); scanf("%d",&p->data.count); bookcount=p->data.count+bookcount; p->data.sum=0; p->next=NULL; r->next=p; r=p; gotoxy(30,22); textcolor(RED); cputs("Add Book Success !!!"); getch(); textcolor(YELLOW); } /*******管理員添加用戶*******/ void Add(Ulink l) { Unode *p,*r,*s; char num[10]; r=l; s=l->next; while(r->next!=NULL) r=r->next; textcolor(RED); gotoxy(25,4); cputs("INPUT THE MESSAGE ABOUT BOOK"); gotoxy(31,10); textcolor(YELLOW); cputs("User ID:"); scanf("%s",num); p=(Unode *)malloc(sizeof(Unode)); while(s) { if(strcmp(s->data.num,num)==0) { gotoxy(25,15); cputs("This ID:"); printf("'%s'",num); cputs("is exist!"); gotoxy(25,22); textcolor(RED); cputs("please Press any key to continue..."); gotoxy(255,252); getch(); return; } s=s->next; } strcpy(p->data.num,num); gotoxy(31,12); textcolor(YELLOW); cputs("Input Password:"); scanf("%s",p->data.pass); gotoxy(31,14); cputs("input your name:"); scanf("%s",p->data.name); gotoxy(31,16); cputs("input the sex:"); scanf("%s",p->data.sex); p->next=NULL; r->next=p; r=p; gotoxy(30,22); cputs("Add User Success !!!"); usercount++; getch(); textcolor(YELLOW); }
查找函數(shù)
用戶查找以及管理員查找
/*******管理員查找圖書*******/ void qur(blink l) { int sel; char findmess[20]; Bnode *p; if(!l->next) { gotoxy(30,4); textcolor(WHITE); cputs("Not Find Bookdata!!!"); getch(); return; } textcolor(RED); gotoxy(25,4); cputs("Please Select Search Type !"); gotoxy(10,8); textcolor(WHITE); cputs("1.Search by ID"); gotoxy(10,10); cputs("2.Search by Name"); gotoxy(10,12); cputs("Please Select 1 or 2:"); scanf("%d",&sel); if(sel==1) { gotoxy(36,8); textcolor(YELLOW); cputs("Input the search ID:"); scanf("%s",findmess); p=locate(l,findmess,"num"); if(p) { gotoxy(36,12); textcolor(WHITE); cputs("Book ID:"); printf("%s",p->data.num); gotoxy(36,14); textcolor(WHITE); cputs("Book Name:"); printf("%s",p->data.name); gotoxy(36,16); textcolor(WHITE); cputs("Book author:"); printf("%s",p->data.auth); gotoxy(36,18); textcolor(WHITE); cputs("Book count:"); printf("%d",p->data.count); getch(); textcolor(YELLOW); gotoxy(30,21); cputs("Search Success !!"); } else { gotoxy(30,22); textcolor(RED); cputs("Not finde !!!"); getch(); } } else if(sel==2) /* 姓名 */ { gotoxy(36,8); textcolor(YELLOW); cputs("Input the search name:"); scanf("%s",findmess); p=locate(l,findmess,"name"); if(p) { gotoxy(36,12); textcolor(WHITE); cputs("Book ID:"); printf("%s",p->data.num); gotoxy(36,14); textcolor(WHITE); cputs("Book Name:"); printf("%s",p->data.name); gotoxy(36,16); textcolor(WHITE); cputs("Book author:"); printf("%s",p->data.auth); gotoxy(36,18); textcolor(WHITE); cputs("Book count:"); printf("%d",p->data.count); getch(); textcolor(YELLOW); } else { textcolor(RED); gotoxy(30,22); cputs("Not finde !!!"); } } else { textcolor(RED); gotoxy(30,22); cputs("Error !!"); getch(); } } /*******用戶查找圖書*******/ void usersearch() { int sel; char findmess[20]; Bnode *p; blink l;/* 連表 */ FILE *fp; /* 文件指針 */ int count=0; Bnode *P,*r; l=(Bnode*)malloc(sizeof(Bnode)); l->next=NULL; r=l; fp=fopen(file,"rb"); if(fp==NULL) { fp=fopen(file,"wb"); } while(!feof(fp)) { P=(Bnode*)malloc(sizeof(Bnode)); if(fread(P,sizeof(Bnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */ { P->next=NULL; bookcount=bookcount+P->data.count; booksum=booksum+P->data.sum; r->next=P; r=P; /* 將該接點(diǎn)掛入連中 */ count++; } } fclose(fp); /* 關(guān)閉文件 */ if(!l->next) { gotoxy(30,4); textcolor(WHITE); cputs("Not Find Bookdata!!!"); getch(); return; } textcolor(RED); gotoxy(25,4); cputs("Please Select Delete Type !"); gotoxy(10,8); textcolor(WHITE); cputs("1.Search by ID"); gotoxy(10,10); cputs("2.Search by Name"); gotoxy(10,12); cputs("Please Select 1 or 2:"); scanf("%d",&sel); if(sel==1) { gotoxy(36,8); textcolor(YELLOW); cputs("Input the search ID:"); scanf("%s",findmess); p=locate(l,findmess,"num"); if(p) { gotoxy(36,12); textcolor(WHITE); cputs("Book ID:"); printf("%s",p->data.num); gotoxy(36,14); textcolor(WHITE); cputs("Book Name:"); printf("%s",p->data.name); gotoxy(36,16); textcolor(WHITE); cputs("Book author:"); printf("%s",p->data.auth); gotoxy(36,18); textcolor(WHITE); cputs("Book count:"); printf("%d",p->data.count-p->data.sum); getch(); textcolor(YELLOW); } else { gotoxy(30,22); textcolor(RED); cputs("Not finde !!!"); getch(); } } else if(sel==2) { gotoxy(36,8); textcolor(YELLOW); cputs("Input the search name:"); scanf("%s",findmess); p=locate(l,findmess,"name"); if(p) { gotoxy(36,12); textcolor(WHITE); cputs("Book ID:"); printf("%s",p->data.num); gotoxy(36,14); textcolor(WHITE); cputs("Book Name:"); printf("%s",p->data.name); gotoxy(36,16); textcolor(WHITE); cputs("Book author:"); printf("%s",p->data.auth); gotoxy(36,18); textcolor(WHITE); cputs("Book count:"); printf("%d",(p->data.count-p->data.sum)); getch(); textcolor(YELLOW); } else { textcolor(RED); gotoxy(30,22); cputs("Not finde !!!"); } } else { textcolor(RED); gotoxy(30,22); cputs("Error !!"); getch(); } } /*******圖書查找*******/ int cmpbook(blink l,char id[],char na[]) { char findm[20]; Bnode *p; if(!l->next) { gotoxy(25,4); textcolor(RED); cputs("Not Find Book!!!"); getch(); return 0; } strcpy(findm,id); p=locate(l,findm,"num"); if(p) { strcpy(findm,na); p=locate(l,findm,"name"); if(p) { return 1; } else { textcolor(RED); gotoxy(30,22); cputs("Book name is NULL !!!"); getch(); return 0; } } else { gotoxy(30,22); textcolor(RED); cputs("Book id is NULL !!!"); getch(); return 0; } }
刪除函數(shù)
圖書的刪除
void del(blink l) { int sel; Bnode *p,*r; char findmess[20]; if(!l->next) { gotoxy(25,4); textcolor(RED); cputs("=====>not thing could delete!\n"); getch(); return; } textcolor(RED); gotoxy(25,4); puts("Please Select Delete Type !"); gotoxy(10,8); textcolor(WHITE); cputs("1.Delete by Book ID"); gotoxy(10,10); cputs("2.Delete by Book Name"); gotoxy(10,12); cputs("Please Select 1 or 2:"); scanf("%d",&sel); if(sel==1) { gotoxy(36,8); textcolor(YELLOW); cputs("Input the delete ID:"); scanf("%s",findmess); p=locate(l,findmess,"num"); if(p) { bookcount=bookcount-p->data.count; r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); gotoxy(30,22); textcolor(RED); cputs("Delete success!\n"); textcolor(YELLOW); } else { textcolor(RED); gotoxy(30,22); cputs("Error !!"); } } else if(sel==2) { gotoxy(36,8); textcolor(YELLOW); cputs("Input the delete name:"); scanf("%s",findmess); p=locate(l,findmess,"name"); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); gotoxy(30,22); textcolor(RED); cputs("Delete success!\n"); bookcount--; textcolor(YELLOW); } else { gotoxy(25,18); cputs("Not find!!"); } } else { textcolor(RED); gotoxy(30,22); cputs("Error !!"); } getch(); textcolor(YELLOW); }
借書管理函數(shù)
void borrow() { while(1) { int flag; BBlink l,p,r;/* 連表 */ FILE *fp; /* 文件指針 */ int count=0; l=(BBnode*)malloc(sizeof(BBnode)); l->next=NULL; r=l; fp=fopen(bfile,"rb"); if(fp==NULL) { fp=fopen(bfile,"wb"); } while(!feof(fp)) { p=(BBnode*)malloc(sizeof(BBnode)); if(fread(p,sizeof(BBnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */ { p->next=NULL; r->next=p; r=p; /* 將該接點(diǎn)掛入連中 */ count++; } borrowcount=count; } while(1) { textbackground(179); clrscr(); textcolor(YELLOW); box(1,1,80,24); h_line(2,3,78); gotoxy(3,2); textcolor(RED); cputs("B"); textcolor(BLUE); cputs("orrow book "); textcolor(RED); cputs("R"); textcolor(BLUE); cputs("eturn book "); textcolor(RED); cputs("S"); textcolor(BLUE); cputs("earch borrow "); textcolor(YELLOW); printf("count: (borrow=%d)",borrowcount); textcolor(RED); gotoxy(50,50); flag=getch(); switch(flag) { case 'b': Add_borrow(l); break; /*************添加用戶**********/ case 'r': Del_borrow(l); Save_borrow(l); break; case 's': Qur_borrow(l); break; case 27: return; } } } }
信息儲(chǔ)存函數(shù)
圖書信息的儲(chǔ)存
*******借書信息保存*******/ void Save_borrow(BBlink l) { FILE* fp; BBnode *p; int flag=1,count=0; fp=fopen(bfile,"wb"); if(fp==NULL) { gotoxy(35,12); textcolor(RED); cputs("open error!"); exit(1); } p=l->next; while(p) { if(fwrite(p,sizeof(BBnode),1,fp)==1) { p=p->next; count++; } else { flag=0; break; } } if(flag) { textcolor(RED); gotoxy(30,24); /*** printf("save success.(saved%d.)",count);**調(diào)試的時(shí)候用的*/ } fclose(fp); }
還書函數(shù)
/* 還書的操作 */ void Del_borrow(BBlink l) { int sel; BBnode *p,*r; Bnode *L; char findmess[20]; FILE *fp; /* 文件指針 */ Bnode *P,*R,*Q; L=(Bnode*)malloc(sizeof(Bnode)); L->next=NULL; R=L; fp=fopen(file,"rb"); if(fp==NULL) { fp=fopen(file,"wb"); } while(!feof(fp)) { P=(Bnode*)malloc(sizeof(Bnode)); if(fread(P,sizeof(Bnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */ { P->next=NULL; R->next=P; R=P; /* 將該接點(diǎn)掛入連中 */ } } fclose(fp); /* 關(guān)閉文件 */ if(!l->next) { gotoxy(30,4); textcolor(RED); cputs("not Book could Return!\n"); getch(); return; } textcolor(RED); gotoxy(25,4); puts("Please Select Return Type !"); gotoxy(10,8); textcolor(WHITE); cputs("1.Return by Borrow ID"); gotoxy(10,10); cputs("2.Return by book name"); gotoxy(10,12); cputs("Please Select 1 or 2:"); scanf("%d",&sel); if(sel==1) { gotoxy(36,8); textcolor(YELLOW); cputs("Input the Borrow ID:"); scanf("%s",findmess); p=Locate_borrow(l,findmess,"num"); if(p) { Q=locate(L,findmess,"num"); if(Q) { Q->data.sum=Q->data.sum-1; save(L); } r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); gotoxy(30,22); textcolor(RED); cputs("Return success!\n"); borrowcount--; getch(); textcolor(YELLOW); } else { gotoxy(30,22); textcolor(RED); cputs("Note find !!"); getch(); } } else if(sel==2) { gotoxy(36,8); textcolor(YELLOW); cputs("Input the Book name:"); scanf("%s",findmess); p=Locate_borrow(l,findmess,"book"); if(p) { Q=locate(L,findmess,"name"); if(Q) { Q->data.sum=Q->data.sum-1; save(L); } r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); gotoxy(30,22); textcolor(RED); cputs("Borrow success!\n"); borrowcount--; getch(); textcolor(YELLOW); } else { gotoxy(30,18); textcolor(RED); cputs("Not find!!"); getch(); } } else { gotoxy(30,22); textcolor(RED); cputs("Not finde !!"); getch(); } textcolor(YELLOW); }
修改函數(shù)
也分為用戶和管理員兩種情況
/* ****用于管理員修改用戶資料 ***/ void Modify(Ulink l) { Unode *p; char findmess[20]; if(!l->next) { gotoxy(30,4); textcolor(RED); cputs("not thing could modify!"); getch(); return; } gotoxy(30,4); textcolor(RED); cputs("Modify User Message"); gotoxy(25,8); textcolor(YELLOW); cputs("input the User Id:"); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { textcolor(YELLOW); gotoxy(25,10); printf("Inpute The New ID(old:%s):",p->data.num); scanf("%s",p->data.num); gotoxy(25,12); printf("Input The New Password(old:%s):",p->data.pass); scanf("%s",p->data.pass); gotoxy(25,14); printf("Input The New Name(old:%s):",p->data.name); scanf("%s",p->data.name); gotoxy(25,16); printf("Input The New Sex(old:%s):",p->data.sex); scanf("%s",p->data.sex); gotoxy(30,20); textcolor(RED); cputs("Modify Success !!!"); getch(); textcolor(YELLOW); } else { gotoxy(30,16); textcolor(RED); cputs("Not Finde !!!"); getch(); } } /****供用戶修改用戶自己資料 */ void Modify_user(Ulink l) { Unode *p; char findmess[20]; if(!l->next) { gotoxy(30,4); textcolor(RED); cputs("not thing could modify!"); getch(); return; } gotoxy(30,4); textcolor(RED); cputs("Modify User Message"); gotoxy(33,8); textcolor(YELLOW); strcpy(findmess,os->data.num); printf("your id:%s",findmess); p=Locate(l,findmess,"num"); if(p) { textcolor(YELLOW); gotoxy(24,10); printf("Input The New Password(old:%s):",p->data.pass); scanf("%s",p->data.pass); gotoxy(24,12); printf("Input The New Name(old:%s):",p->data.name); scanf("%s",p->data.name); gotoxy(24,14); printf("Input The New Sex(old:%s):",p->data.sex); scanf("%s",p->data.sex); gotoxy(31,18); textcolor(RED); cputs("Modify Success !!!"); getch(); textcolor(YELLOW); } else { gotoxy(30,16); textcolor(RED); cputs("Not Finde !!!"); getch(); } }
添加借書函數(shù)
/*******添加借書*******/ void Add_borrow(BBlink l) { Ulink H;/* 連表 */ FILE *Fp; /* 文件指針 */ Unode *Q,*T; blink L;/* 連表 */ FILE *FP; /* 文件指針 */ int ttl; Bnode *P,*R; char bookid[20]; char bookname[20]; char userid[20]; BBnode *p,*r,*s; char num[10]; r=l; s=l->next; while(r->next!=NULL) r=r->next; L=(Bnode*)malloc(sizeof(Bnode)); L->next=NULL; R=L; FP=fopen(file,"rb"); if(FP==NULL) { FP=fopen(file,"wb"); } while(!feof(FP)) { P=(Bnode*)malloc(sizeof(Bnode)); if(fread(P,sizeof(Bnode),1,FP)) /* 將文件的內(nèi)容放入接點(diǎn)中 */ { P->next=NULL; bookcount=bookcount+P->data.count; R->next=P; R=P; /* 將該接點(diǎn)掛入連中 */ } } fclose(FP); /* 關(guān)閉文件 */ H=(Unode*)malloc(sizeof(Unode)); H->next=NULL; T=H; Fp=fopen(ufile,"rb"); if(Fp==NULL) { Fp=fopen(ufile,"wb"); } while(!feof(Fp)) { Q=(Unode*)malloc(sizeof(Unode)); if(fread(Q,sizeof(Unode),1,Fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */ { Q->next=NULL; T->next=Q; T=Q; /* 將該接點(diǎn)掛入連中 */ } } fclose(Fp); textcolor(RED); gotoxy(25,4); cputs("Please input thease message"); gotoxy(30,10); textcolor(YELLOW); cputs("Input Borrow ID:"); scanf("%d",&ttl); itoa(ttl,num,10) ; p=(BBnode *)malloc(sizeof(BBnode)); while(s) { if(strcmp(s->id,num)==0) { gotoxy(30,15); cputs("Borrow ID:"); printf("'%s'",num); cputs("is exist!"); gotoxy(26,22); textcolor(RED); cputs("please Press any key to continue..."); gotoxy(255,252); getch(); return; } s=s->next; } strcpy(p->id,num); gotoxy(31,12); textcolor(YELLOW); cputs("Input book id:"); scanf("%s",bookid); gotoxy(31,14); textcolor(YELLOW); cputs("Input book name:"); scanf("%s",bookname);/***************************************圖書判斷在否***************************************/ if(cmpbook(L,bookid,bookname)) { strcpy(p->bookid,bookid); strcpy(p->book,bookname); gotoxy(31,16); cputs("input your ID:"); scanf("%s",userid); /**************************************用戶判斷在否********************************/ if(cmpuser(H,userid)) { strcpy(p->user,userid); p->next=NULL; r->next=p; r=p; if(changeb(L,bookid)) { gotoxy(30,22); cputs("Borrow Success !!!"); Save_borrow(l); borrowcount++; getch(); } } } textcolor(YELLOW); }
查找借書函數(shù)
查找自己借了哪些書
void Myborrow() { int i; BBlink l,p,r;/* 連表 */ FILE *fp; /* 文件指針 */ int count=0; l=(BBnode*)malloc(sizeof(BBnode)); l->next=NULL; r=l; fp=fopen(bfile,"rb"); if(fp==NULL) { fp=fopen(bfile,"wb"); } i=6; while(!feof(fp)) { p=(BBnode*)malloc(sizeof(BBnode)); if(fread(p,sizeof(BBnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */ { textcolor(WHITE); gotoxy(30,4); cputs("Your borrow book"); if(strcmp(p->user,os->data.num)==0) { textcolor(YELLOW); gotoxy(20,i); printf("Borrow ID:%s\tBook id:%s\tBook name:%s",p->id,p->bookid,p->book); i++; p->next=NULL; r->next=p; r=p; /* 將該接點(diǎn)掛入連中 */ count++; } } myborrow=count; if(myborrow==0) { textcolor(YELLOW); gotoxy(30,13); cputs("You no borrow !!"); } } fclose(fp); textcolor(YELLOW); gotoxy(65,2); printf("(borrow=%d)",myborrow); getch(); }
借書管理函數(shù)
void borrow() { while(1) { int flag; BBlink l,p,r;/* 連表 */ FILE *fp; /* 文件指針 */ int count=0; l=(BBnode*)malloc(sizeof(BBnode)); l->next=NULL; r=l; fp=fopen(bfile,"rb"); if(fp==NULL) { fp=fopen(bfile,"wb"); } while(!feof(fp)) { p=(BBnode*)malloc(sizeof(BBnode)); if(fread(p,sizeof(BBnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */ { p->next=NULL; r->next=p; r=p; /* 將該接點(diǎn)掛入連中 */ count++; } borrowcount=count; } while(1) { textbackground(179); clrscr(); textcolor(YELLOW); box(1,1,80,24); h_line(2,3,78); gotoxy(3,2); textcolor(RED); cputs("B"); textcolor(BLUE); cputs("orrow book "); textcolor(RED); cputs("R"); textcolor(BLUE); cputs("eturn book "); textcolor(RED); cputs("S"); textcolor(BLUE); cputs("earch borrow "); textcolor(YELLOW); printf("count: (borrow=%d)",borrowcount); textcolor(RED); gotoxy(50,50); flag=getch(); switch(flag) { case 'b': Add_borrow(l); break; /*************添加用戶**********/ case 'r': Del_borrow(l); Save_borrow(l); break; case 's': Qur_borrow(l); break; case 27: return; } } } }
主函數(shù)
main() { Ulink h,os;/* 連表 */ FILE *fp; /* 文件指針 */ Unode *p,*r; h=(Unode*)malloc(sizeof(Unode)); h->next=NULL; r=h; fp=fopen(ufile,"rb"); if(fp==NULL) { fp=fopen(ufile,"wb"); } while(!feof(fp)) { p=(Unode*)malloc(sizeof(Unode)); if(fread(p,sizeof(Unode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */ { p->next=NULL; r->next=p; r=p; /* 將該接點(diǎn)掛入連中 */ } } fclose(fp); system("wellcome"); if(flg==27) { flg=-1; return; } while(1) { flag=login(h); if(flg==27) { flg=-1; break; } if(flag==2) { choose(); flag=0; } if(flag==1) { user(h); flag=0; } } }
總結(jié)
今天的代碼量有點(diǎn)小多,難度也不小,用了大量的鏈表來(lái)儲(chǔ)存數(shù)據(jù),還有一些功能因?yàn)槠膯?wèn)題沒(méi)有放上來(lái),總的來(lái)說(shuō),這個(gè)圖書管理系統(tǒng)的功能是很全面的,無(wú)論從哪個(gè)角度來(lái)看。當(dāng)然啦。有興趣的同學(xué)可以進(jìn)群領(lǐng)取完整的源碼看看,絕對(duì)是一個(gè)不錯(cuò)的機(jī)會(huì),可以說(shuō),你要是學(xué)會(huì)了這個(gè)系統(tǒng),你的C語(yǔ)言在我看來(lái)就完全沒(méi)有問(wèn)題了,而且在數(shù)據(jù)結(jié)構(gòu)一塊,你也算是小成了,所以希望大家可以認(rèn)真學(xué)習(xí),爭(zhēng)取早日掌握。
這也是2022年的第一篇文章了,希望2022繼續(xù)加油,向大家分享更多有趣的、有用的知識(shí),十分感謝大家的一路支持,后續(xù)我還會(huì)發(fā)布更多的項(xiàng)目源或者學(xué)習(xí)資料,希望大家可以持續(xù)關(guān)注。
到此這篇關(guān)于C語(yǔ)言大作業(yè)之圖書管理系統(tǒng)的實(shí)現(xiàn)詳程的文章就介紹到這了,更多相關(guān)C語(yǔ)言 圖書管理系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言實(shí)現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫(kù))
- C語(yǔ)言實(shí)現(xiàn)圖書館管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的圖書管理系統(tǒng)
- C語(yǔ)言鏈表實(shí)現(xiàn)圖書管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)圖書管理系統(tǒng)
- C語(yǔ)言圖書管理系統(tǒng)簡(jiǎn)潔版
- C語(yǔ)言圖書管理系統(tǒng)課程設(shè)計(jì)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單圖書管理系統(tǒng)
- C語(yǔ)言設(shè)計(jì)圖書登記系統(tǒng)與停車場(chǎng)管理系統(tǒng)的實(shí)例分享
- C語(yǔ)言實(shí)現(xiàn)圖書管理系統(tǒng)課程設(shè)計(jì)
相關(guān)文章
利用C++實(shí)現(xiàn)最長(zhǎng)公共子序列與最長(zhǎng)公共子串
這篇文章主要給大家介紹了如何利用C++實(shí)現(xiàn)最長(zhǎng)公共子序列與最長(zhǎng)公共子串,文章一開(kāi)始就給大家簡(jiǎn)單的介紹了什么是子序列,子串應(yīng)該比較好理解就不用多介紹了,人后通過(guò)算法及示例代碼詳細(xì)介紹了C++實(shí)現(xiàn)的方法,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-12-12C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解
這篇文章主要介紹了C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解的相關(guān)資料,atoi函數(shù),主要功能是將一個(gè)字符串轉(zhuǎn)變?yōu)檎麛?shù),這里就實(shí)現(xiàn)這樣的函數(shù),需要的朋友可以參考下2017-08-08c++元編程模板函數(shù)重載匹配規(guī)則示例詳解
這篇文章主要為大家介紹了c++元編程模板函數(shù)重載匹配規(guī)則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01深入C++四種強(qiáng)制類型轉(zhuǎn)換的總結(jié)
本篇文章是對(duì)C++中四種強(qiáng)制類型轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05基于C語(yǔ)言實(shí)現(xiàn)三子棋游戲的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言數(shù)組實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07C語(yǔ)言實(shí)例梳理講解常用關(guān)鍵字的用法
關(guān)鍵字是C語(yǔ)言非常重要的一部分,熟練的掌握和使用關(guān)鍵字有助于我們更加熟悉了解C語(yǔ)言,同時(shí)C語(yǔ)言的關(guān)鍵字也是面試筆試中??嫉膬?nèi)容。C語(yǔ)言的關(guān)鍵字共有32個(gè),但并不是每個(gè)關(guān)鍵字都有坑,本篇文章將通過(guò)理論聯(lián)系實(shí)際的方式為大家講解C語(yǔ)言中易混易錯(cuò)以及??嫉囊恍╆P(guān)鍵字2022-05-05C語(yǔ)言靜態(tài)與動(dòng)態(tài)通訊錄的實(shí)現(xiàn)流程詳解
這篇文章主要為大家介紹了C語(yǔ)言分別實(shí)現(xiàn)靜態(tài)與動(dòng)態(tài)的通訊錄示例代碼教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11