1、图书管理系统代码C语言#include#include#includestruct book int num; char bname50; char wname20; char press50; char sort50; int time; float price; struct book *next;struct book *creatbook(); /创建链表struct book *addbook(struct book *head); /添加图书int yanzheng(struct book *head,int m); /验证新添加的图书编码是否已存在void deletebook(
2、struct book *head); /删除图书void fprint(struct book *head); /将链表写入文件struct book *load(); /从文件中读取信息并建成链表void print_book(struct book *head); /将链表信息输出void chaxun(struct book *head); /查询图书信息void num_chaxun(struct book *head); /按图书编号查询图书void wname_chaxun(struct book *head); /按作者名查询图书void sort_chaxun(struct
3、book *head); /按类别查询图书void time_chaxun(struct book *head); /按出版时间查询图书void bname_chaxun(struct book *head); /按图书名查询图书void xiugai(struct book *head); /修改图书信息void paixu(struct book *head); /对图书进行排序void num_paixu(struct book *head); /按图书编号排序void time_paixu(struct book *head); /按图书出版时间排序void price_paixu(s
4、truct book *head); /按图书价格排序void bname_paixu(struct book *head); /按图书名排序void wname_paixu(struct book *head); /按作者名排序int main() int choice,n,x,y=1,c,c1=123456; char a,d,b10,b110=201102520116; struct book *head=NULL; while(y) system(cls); printf(nnnnnnn); printf( * 欢迎光临 *nn); printf( * 图书信息管理系统 *nnn);
5、printf(nn); printf( =1-用户登录=n); printf( =0-退出系统=n); printf( 请输入您的选择:); scanf(%d,&n); printf(n); getchar(); switch(n) case 0: y=0; break; case 1: printf( 请输入您的用户名:); gets(b); printf(n); printf( 请输入您的密码:); scanf(%d,&c); printf(n); if(strcmp(b,b1)!=0|c!=c1) printf( 验证失败,请重新输入!n); scanf(%c,&d); getchar(
6、); system(cls); else printf( 验证通过!请按Enter键进入!n); scanf(%c,&d); getchar(); x=1; while(x) system(cls); printf( -n); printf( *图书信息管理系统*n); printf( -nn); printf( *nn); printf( *nn); printf( | 1-添加图书 2-删除图书 |nn); printf( | 3-图书列表 4-图书排序 |nn); printf( | 5-查询图书 6-修改图书 |nn); printf( | 7-录入数据 0-退出系统 |nn); pr
7、intf( *nn); printf( *nn); printf(请输入所选择的序号:); scanf(%d,&choice); getchar(); system(cls); switch(choice) case 0: x=0;break; case 1: head=load(); if(head=NULL) printf(文件为空,请先录入数据!n); getchar(); break; else head=addbook(head); printf(添加成功!n); printf(是否将新信息保存到文件?(y/n)n); scanf(%c,&a); getchar(); switch(
8、a) case n: break; case y: fprint(head); printf(保存成功!n); getchar(); break; break; case 2: head=load(); if(head=NULL) printf(文件为空,请先录入数据!n); getchar(); break; else deletebook(head); getchar(); break; break; case 3: head=load(); if(head=NULL) printf(文件为空,请先录入数据!n); getchar(); break; else print_book(hea
9、d); getchar(); break; case 4: head=load(); if(head=NULL) printf(文件为空,请先录入数据!n); getchar(); break; else paixu(head); getchar(); break; case 5: head=load(); if(head=NULL) printf(文件为空,请先录入数据!n); getchar(); break; else chaxun(head); getchar(); break; case 6: head=load(); if(head=NULL) printf(文件为空,请先录入数据
10、!n); getchar(); break; else xiugai(head); getchar(); break; break; case 7: printf(注意:输入图书编码为0时结束!n); head=creatbook(); printf(是否将输入的信息保存到文件以覆盖文件中已存在的信息?(y/n)n); getchar(); scanf(%c,&a); getchar(); switch(a) case n: break; case y: fprint(head); printf(保存成功!n); getchar(); break; break; default: printf
11、(您的输入有误,请重新输入!n); getchar(); break; break; default: printf( 您的输入有误! 请重新输入!n); getchar(); break; /录入数据并形成链表struct book *creatbook() struct book *head,*tail,*p; int num,time,n; char bname50,wname20,press50,sort50; float price; int size=sizeof(struct book); head=tail=NULL; printf(请输入图书编号:); scanf(%d,&n
12、um); printf(请输入图书名:); scanf(%s,bname); getchar(); printf(请输入作者名:); scanf(%s,wname); getchar(); printf(请输入出版社:); scanf(%s,press); getchar(); printf(请输入类别:); scanf(%s,sort); getchar(); printf(请输入出版时间:); scanf(%d,&time); getchar(); printf(请输入价格:); scanf(%f,&price); getchar(); while(1) p=(struct book *)
13、malloc(size); p-num=num; strcpy(p-bname,bname); strcpy(p-wname,wname); strcpy(p-press,press); strcpy(p-sort,sort); p-time=time; p-price=price; p-next=NULL; if(head=NULL) head=p; else tail-next=p; tail=p; do printf(请输入图书编号:); scanf(%d,&num); n=yanzheng(head,num); if(n=0) break; else printf(您输入的编号已存在,
14、请重新输入!n); while(1); if(num=0) break; else printf(请输入图书名:); scanf(%s,bname); getchar(); printf(请输入作者名:); scanf(%s,wname); getchar(); printf(请输入出版社:); scanf(%s,press); getchar(); printf(请输入类别:); scanf(%s,sort); getchar(); printf(请输入出版时间:); scanf(%d,&time); getchar(); printf(请输入价格:); scanf(%f,&price);
15、getchar(); return head;/插入结点,并且插入后仍按一定顺序struct book *addbook(struct book *head) struct book *ptr,*p1,*p2,*p; char bname50,wname20,press50,sort50; int size=sizeof(struct book); int num,time,n=1; float price; do printf(请输入图书编号:); scanf(%d,&num); n=yanzheng(head,num); if(n=0) break; else printf(您输入的编号已
16、存在,请重新输入!n); while(1); printf(请输入图书名:); scanf(%s,bname); getchar(); printf(请输入作者名:); scanf(%s,wname); getchar(); printf(请输入出版社:); scanf(%s,press); getchar(); printf(请输入类别:); scanf(%s,sort); getchar(); printf(请输入出版时间:); scanf(%d,&time); getchar(); printf(请输入价格:); scanf(%f,&price); getchar(); p=(struc
17、t book *)malloc(size); p-num=num; strcpy(p-bname,bname); strcpy(p-wname,wname); strcpy(p-press,press); strcpy(p-sort,sort); p-time=time; p-price=price; p2=head; ptr=p; while(ptr-nump2-num)&(p2-next!=NULL) p1=p2; p2=p2-next; if(ptr-numnum) if(head=p2) head=ptr; else p1-next=ptr; p-next=p2; else p2-ne
18、xt=ptr; p-next=NULL; return head;/验证添加的图书编号是否已存在int yanzheng(struct book *head,int m) struct book *p; p=head; while(p!=NULL) if(p-num=m) break; p=p-next; if(p=NULL) return 0; else return 1;/将新链表写入文件中void fprint(struct book *head) FILE *fp; char ch=1; struct book *p1; if(fp=fopen(f1.txt,w)=NULL) prin
19、tf(File open error!n); exit(0); fputc(ch,fp); for(p1=head;p1;p1=p1-next) fprintf(fp,%d %s %s %s %s %d %fn,p1-num,p1-bname,p1-wname,p1-press,p1-sort,p1-time,p1-price); fclose(fp);/从文件中读取图书信息struct book *load() FILE *fp; char ch; struct book *head,*tail,*p1; head=tail=NULL; if(fp=fopen(f1.txt,r)=NULL)
20、 printf(File open error!n); exit(0); ch=fgetc(fp); if(ch=1) while(!feof(fp) p1=(struct book *)malloc(sizeof(struct book); fscanf(fp,%d%s%s%s%s%d%fn,&p1-num,p1-bname,p1-wname,p1-press,p1-sort,&p1-time,&p1-price); if(head=NULL) head=p1; else tail-next=p1; tail=p1; tail-next=NULL; fclose(fp); return he
21、ad; else return NULL; /将整个链表的信息输出void print_book(struct book *head) struct book *ptr; if(head=NULL) printf(n没有信息!n); return; printf( 图书信息列表如下n); printf( =n); printf( 编号 图书名 作者名 出版社 类别 出版时间 价格n); for(ptr=head;ptr;ptr=ptr-next) printf( %d %s %s %s %s %d %.2fn,ptr-num,ptr-bname,ptr-wname,ptr-press,ptr-
22、sort,ptr-time,ptr-price); printf( =n);/删除图书信息void deletebook(struct book *head) int a; char b,ch=1; struct book *p1,*p2; FILE *fp; printf(请输入要删除的图书编号:); scanf(%d,&a); p1=head; if(p1-num=a&p1-next=NULL) /对于文件中只有一组数据 printf(是否清空文件!(y/n)n); getchar(); scanf(%c,&b); getchar(); switch(b) case n: break; c
23、ase y: if(fp=fopen(f1.txt,w)=NULL) printf(File open error!n); exit(0); fclose(fp); printf(文件已清空!n); else while(p1-num!=a&p1-next!=NULL) p2=p1; p1=p1-next; if(p1-next=NULL) if(p1-num=a) p2-next=NULL; printf(是否确定从文件中彻底删除该图书?(y/n)n); getchar(); scanf(%c,&b); switch(b) case n: break; case y: fprint(head
24、); printf(删除成功!n); getchar(); break; else printf(没有找到要删除的数据!n); getchar(); else if(p1=head) head=p1-next; printf(是否确定从文件中彻底删除该图书?(y/n)n); getchar(); scanf(%c,&b); switch(b) case n: break; case y: fprint(head); printf(删除成功!n); getchar(); break; else p2-next=p1-next; printf(是否确定从文件中彻底删除该图书?(y/n)n); getchar(); scanf(%c,&b); switch(b) case n: break; case y: fprint(head); printf(删除成功!n); getchar(); break;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1