C语言大作业之图书管理系统的实现详程
序
时间在流去,我们在长大。
嗨,这里是狐狸~~
今天是2022年的一月四日了,元旦小长假也过去了,新年新气象,新年新目标,我们要向前看,不要执意过去了,感谢过去,把握现在,展望未来,这是我们现在应该做的。好了,废话不多说,今天我们分享一个系统,确实也有许久没有分享过系统了,今天就给大家详细讲一下这个图书管理系统吧。
主要内容
开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:
(1)图书信息录入功能(图书信息用文件保存)--输入
(2)图书信息浏览功能--输出
(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):
①按书名查询
②按作者名查询 按照价钱排序 按出版时间排序等等
(4)图书信息的删除与修改
扩展功能:可以按照自己的程度进行扩展。比如
(1)简单的权限处理
(2)报表打印功能
(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。
(4)模糊查询
(5)综合查询
(6)统计功能 比如统计处某一类别的图书信息 或 筛选出小于指定数量库存的图书信息等等。
概要设计
1 图书录入可以录入图书名,作者,出版社,出版日期,价格!录入图书编号时函数就会判断此 编 号是否存在,若存在不能成功录入!
2 图书浏览可以浏览全部图书!
3 图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确 查询!模糊查询和关键字查询事通过比价字符串的相似度而实现的!
4 修改删除图书可以通过图书查询来查询操作的图书编号,通过编号操作!函数会提示用户是否调 用图书查询来找到自己想要操作的图书的编号。如果某一本图书已经被借阅那么用户就不能删 除 该图书!
5 借阅图书通过学号和图书编号进行借阅!如果该学号是第一次借阅那么会提示用户输入自己的姓 名,并存入student.txt,方便以后借阅与归还!
6 归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过编号归还!
7 借阅查询可查询某个学生已借但未归还的图书!
项目源码
结构体
先建立结构体,定义结构体成员
typedef struct book/*图书结构体*/ { char num[10]; /*书号*/ char name[10]; /*书名*/ char auth[10]; /*作者*/ int count; int sum; }Book; typedef struct borrow/*借书结构体*/ { char id[20]; char user[20]; char book[20]; char bookid[20]; struct borrow *next; }BBnode,*BBlink; struct user { char num[10];/* 学号 */ char pass[15]; char name[15]; char sex[10]; }; typedef struct unode { struct user data; struct unode *next; }Unode,*Ulink; Unode *os;
登录界面函数
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); /******************账号过滤*********************/ 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'; } /**********************密码过滤****************************/ 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'; } /*************把账号和密码进行对比验证**************/ if(!strcmp(User_id,"admin")&&!strcmp(password,"admin")) { return 2; } if(cmps(l,User_id,password)) { return 1; } } }
选择界面函数
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; } } }
操作界面函数
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)) /* 将文件的内容放入接点中 */ { p->next=NULL; r->next=p; r=p; /* 将该接点挂入连中 */ 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; } } }
添加函数
图书的添加,包括用户添加以及管理员添加
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); }
查找函数
用户查找以及管理员查找
/*******管理员查找图书*******/ 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)) /* 将文件的内容放入接点中 */ { P->next=NULL; bookcount=bookcount+P->data.count; booksum=booksum+P->data.sum; r->next=P; r=P; /* 将该接点挂入连中 */ count++; } } fclose(fp); /* 关闭文件 */ 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; } }
删除函数
图书的删除
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); }
借书管理函数
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)) /* 将文件的内容放入接点中 */ { p->next=NULL; r->next=p; r=p; /* 将该接点挂入连中 */ 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; } } } }
信息储存函数
图书信息的储存
*******借书信息保存*******/ 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);**调试的时候用的*/ } fclose(fp); }
还书函数
/* 还书的操作 */ 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)) /* 将文件的内容放入接点中 */ { P->next=NULL; R->next=P; R=P; /* 将该接点挂入连中 */ } } fclose(fp); /* 关闭文件 */ 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); }
修改函数
也分为用户和管理员两种情况
/* ****用于管理员修改用户资料 ***/ 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(); } }
添加借书函数
/*******添加借书*******/ 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)) /* 将文件的内容放入接点中 */ { P->next=NULL; bookcount=bookcount+P->data.count; R->next=P; R=P; /* 将该接点挂入连中 */ } } fclose(FP); /* 关闭文件 */ 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)) /* 将文件的内容放入接点中 */ { Q->next=NULL; T->next=Q; T=Q; /* 将该接点挂入连中 */ } } 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); }
查找借书函数
查找自己借了哪些书
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)) /* 将文件的内容放入接点中 */ { 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; /* 将该接点挂入连中 */ 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(); }
借书管理函数
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)) /* 将文件的内容放入接点中 */ { p->next=NULL; r->next=p; r=p; /* 将该接点挂入连中 */ 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; } } } }
主函数
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)) /* 将文件的内容放入接点中 */ { p->next=NULL; r->next=p; r=p; /* 将该接点挂入连中 */ } } 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; } } }
总结
今天的代码量有点小多,难度也不小,用了大量的链表来储存数据,还有一些功能因为篇幅的问题没有放上来,总的来说,这个图书管理系统的功能是很全面的,无论从哪个角度来看。当然啦。有兴趣的同学可以进群领取完整的源码看看,绝对是一个不错的机会,可以说,你要是学会了这个系统,你的C语言在我看来就完全没有问题了,而且在数据结构一块,你也算是小成了,所以希望大家可以认真学习,争取早日掌握。
这也是2022年的第一篇文章了,希望2022继续加油,向大家分享更多有趣的、有用的知识,十分感谢大家的一路支持,后续我还会发布更多的项目源或者学习资料,希望大家可以持续关注。
上一篇:详解C语言初阶基础
栏 目:C代码
下一篇:C语言用递归函数实现汉诺塔
本文标题:C语言大作业之图书管理系统的实现详程
本文地址:http://www.codeinn.net/misctech/202803.html