【C语言】图书管理系统
#include<stdio.h>#include<stdlib.h>#include<string.h>structbook{intnum;charbname[50];charwname[20];charpress[50];charsort[50];inttime;floatprice;structbook*next;};structbook*creatbook();//创建链表structbook*addbook(structbook*head);//添加图书intyanzheng(structbook*head,intm);//验证新添加的图书编码是否已存在voiddeletebook(structbook*head);//删除图书voidfprint(structbook*head);//将链表写入文件structbook*load();//从文件中读取信息并建成链表voidprint_book(structbook*head);//将链表信息输出voidchaxun(structbook*head);//查询图书信息voidnum_chaxun(structbook*head);//按图书编号查询图书voidwname_chaxun(structbook*head);//按作者名查询图书voidsort_chaxun(structbook*head);//按类别查询图书voidtime_chaxun(structbook*head);//按出版时间查询图书voidbname_chaxun(structbook*head);//按图书名查询图书voidxiugai(structbook*head);//修改图书信息voidpaixu(structbook*head);//对图书进行排序voidnum_paixu(structbook*head);//按图书编号排序voidtime_paixu(structbook*head);//按图书出版时间排序voidprice_paixu(structbook*head);//按图书价格排序voidbname_paixu(structbook*head);//按图书名排序voidwname_paixu(structbook*head);//按作者名排序intmain(){intchoice,n,x,y=1,c,c1=1234;chara,d,b[10],b1[10]="admin";structbook*head=NULL;while(y){system("cls");printf("\n\n\n\n\n\n\n");printf("**********欢迎光临**********\n\n");printf("**********************图书信息管理系统************************\n\n\n");printf("\n\n");printf("============1-用户登录===========\n");printf("============0-退出系统===========\n");printf("请输入您的选择:");scanf("%d",&n);printf("\n");getchar();switch(n){case0:y=0;break;case1:printf("请输入您的用户名:");gets(b);printf("\n");printf("请输入您的密码:");scanf("%d",&c);printf("\n");if(strcmp(b,b1)!=0||c!=c1){printf("验证失败,请重新输入!\n");scanf("%c",&d);getchar();system("cls");}else{printf("验证通过!请按Enter键进入!\n");scanf("%c",&d);getchar();x=1;while(x){system("cls");printf("------------------\n");printf("*图书信息管理系统*\n");printf("------------------\n\n");printf("**********************************************\n\n");printf("**********************************************\n\n");printf("||1-添加图书2-删除图书||\n\n");printf("||3-图书列表4-图书排序||\n\n");printf("||5-查询图书6-修改图书||\n\n");printf("||7-录入数据0-退出系统||\n\n");printf("**********************************************\n\n");printf("**********************************************\n\n");printf("请输入所选择的序号:");scanf("%d",&choice);getchar();system("cls");switch(choice){case0:x=0;break;case1:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{head=addbook(head);printf("添加成功!\n");printf("是否将新信息保存到文件?(y/n)\n");scanf("%c",&a);getchar();switch(a){case'n':break;case'y':fprint(head);printf("保存成功!\n");getchar();break;}break;}case2:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{deletebook(head);getchar();break;}break;case3:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{print_book(head);getchar();break;}case4:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{paixu(head);getchar();}break;case5:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{chaxun(head);getchar();}break;case6:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{xiugai(head);getchar();break;}break;case7: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("您的输入有误,请重新输入!\n");getchar();break;}}}break;default:printf("您的输入有误!请重新输入!\n");getchar();break;}}}//录入数据并形成链表structbook*creatbook(){structbook*head,*tail,*p;intnum,time,n;charbname[50],wname[20],press[50],sort[50];floatprice;intsize=sizeof(structbook);head=tail=NULL;printf("请输入图书编号:");scanf("%d",&num);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=(structbook*)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;elsetail->next=p;tail=p;do{printf("请输入图书编号:");scanf("%d",&num);n=yanzheng(head,num);if(n==0)break;elseprintf("您输入的编号已存在,请重新输入!\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);getchar();}}returnhead;}//插入结点,并且插入后仍按一定顺序structbook*addbook(structbook*head){structbook*ptr,*p1,*p2,*p;charbname[50],wname[20],press[50],sort[50];intsize=sizeof(structbook);intnum,time,n=1;floatprice;do{printf("请输入图书编号:");scanf("%d",&num);n=yanzheng(head,num);if(n==0)break;elseprintf("您输入的编号已存在,请重新输入!\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=(structbook*)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->num>p2->num)&&(p2->next!=NULL)){p1=p2;p2=p2->next;}if(ptr->num<=p2->num){if(head==p2)head=ptr;else{p1->next=ptr;p->next=p2;}}else{p2->next=ptr;p->next=NULL;}returnhead;}//验证添加的图书编号是否已存在intyanzheng(structbook*head,intm){structbook*p;p=head;while(p!=NULL){if(p->num==m)break;p=p->next;}if(p==NULL)return0;elsereturn1;}//将新链表写入文件中voidfprint(structbook*head){FILE*fp;charch='1';structbook*p1;if((fp=fopen("f1.txt","w"))==NULL){printf("Fileopenerror!\n");exit(0);}fputc(ch,fp);for(p1=head;p1;p1=p1->next){fprintf(fp,"%d%s%s%s%s%d%f\n",p1->num,p1->bname,p1->wname,p1->press,p1->sort,p1->time,p1->price);}fclose(fp);}//从文件中读取图书信息structbook*load(){FILE*fp;charch;structbook*head,*tail,*p1;head=tail=NULL;if((fp=fopen("f1.txt","r"))==NULL){printf("Fileopenerror!\n");exit(0);}ch=fgetc(fp);if(ch=='1'){while(!feof(fp)){p1=(structbook*)malloc(sizeof(structbook));fscanf(fp,"%d%s%s%s%s%d%f\n",&p1->num,p1->bname,p1->wname,p1->press,p1->sort,&p1->time,&p1->price);if(head==NULL)head=p1;elsetail->next=p1;tail=p1;}tail->next=NULL;fclose(fp);returnhead;}elsereturnNULL;}//将整个链表的信息输出voidprint_book(structbook*head){structbook*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%.2f\n",ptr->num,ptr->bname,ptr->wname,ptr->press,ptr->sort,ptr->time,ptr->price);printf("==========================================================\n");}//删除图书信息voiddeletebook(structbook*head){inta;charb,ch='1';structbook*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;case'y':if((fp=fopen("f1.txt","w"))==NULL){printf("Fileopenerror!\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);printf("删除成功!\n");getchar();break;}}else{printf("没有找到要删除的数据!\n");getchar();}}elseif(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;}}}}//图书查询voidchaxun(structbook*head){inta;printf("==========================================================\n");printf("**1-按图书编号查询2-按图书名查询**\n");printf("**3-按图书类别查询4-按作者名查询**\n");printf("**5-按出版时间查询0-退出查询**\n");printf("==========================================================\n");printf("请输入所选择的编号:");scanf("%d",&a);getchar();switch(a){case0:break;case1:num_chaxun(head);break;case2:bname_chaxun(head);break;case3:sort_chaxun(head);break;case4:wname_chaxun(head);break;case5:time_chaxun(head);break;default:printf("您的输入有误!\n");break;}}//按编号查询图书信息voidnum_chaxun(structbook*head){inta;structbook*p;printf("请选择您要查询的图书编号:");scanf("%d",&a);getchar();p=head;while(p!=NULL){if(p->num==a)break;p=p->next;}if(p==NULL){printf("没有找到该编号的图书!\n");}else{printf("你所查询的图书信息如下\n");printf("=========================================================================\n");printf("**编号图书名作者名出版社类别出版时间价格**\n");printf("**%d%s%s%s%s%d%.2f**\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);printf("=========================================================================\n");}}//按图书名查询图书信息voidbname_chaxun(structbook*head){chara[50];intflag=0;structbook*p;printf("请选择您要查询的图书名:");gets(a);p=head;while(p!=NULL){if(strcmp(p->bname,a)==0){flag=1;break;}p=p->next;}if(flag==0){printf("没有找到该图书名的图书!\n");}else{printf("你所查询的图书信息如下\n");printf("=========================================================================\n");printf("**编号图书名作者名出版社类别出版时间价格**\n");while(p!=NULL){if(strcmp(p->bname,a)==0){printf("**%d%s%s%s%s%d%.2f**\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);}p=p->next;}printf("=========================================================================\n");}}//按作者名查询图书信息voidwname_chaxun(structbook*head){chara[50];intflag=0;structbook*p;printf("请选择您要查询的图书作者名:");gets(a);p=head;while(p!=NULL){if(strcmp(p->wname,a)==0){flag=1;break;}p=p->next;}if(flag==0){printf("没有找到该图书名的图书!\n");}else{printf("你所查询的图书信息如下\n");printf("=========================================================================\n");printf("**编号图书名作者名出版社类别出版时间价格**\n");while(p!=NULL){if(strcmp(p->wname,a)==0){printf("**%d%s%s%s%s%d%.2f**\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);flag=1;}p=p->next;}printf("=========================================================================\n");}}//按图书类别查询图书信息voidsort_chaxun(structbook*head){chara[50];intflag=0;structbook*p;printf("请选择您要查询的图书类别:");gets(a);p=head;while(p!=NULL){if(strcmp(p->sort,a)==0){flag=1;break;}p=p->next;}if(flag==0){printf("没有找到该图书名的图书!\n");}else{printf("你所查询的图书信息如下\n");printf("=========================================================================\n");printf("**编号图书名作者名出版社类别出版时间价格**\n");while(p!=NULL){if(strcmp(p->sort,a)==0){printf("**%d%s%s%s%s%d%.2f**\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);flag=1;}p=p->next;}printf("=========================================================================\n");}}//按图书出版时间查询图书信息voidtime_chaxun(structbook*head){inta,flag=0;structbook*p;printf("请选择您要查询的图书出版时间:");scanf("%d",&a);getchar();p=head;while(p!=NULL){if(p->time==a){flag=1;break;}p=p->next;}if(flag==0){printf("没有找到该图书名的图书!\n");}else{printf("你所查询的图书信息如下\n");printf("=========================================================================\n");printf("**编号图书名作者名出版社类别出版时间价格**\n");while(p!=NULL){if(p->time==a){printf("**%d%s%s%s%s%d%.2f**\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);flag=1;}p=p->next;}printf("=========================================================================\n");}}//修改图书信息voidxiugai(structbook*head){inta,b;charc;structbook*p;printf("请输入要修改的图书编号:");scanf("%d",&a);p=head;while(p!=NULL){if(p->num==a)break;p=p->next;}if(p==NULL){printf("没有找到该编号的图书!\n");getchar();}else{printf("============================================================\n");printf("**1-编号2-图书名3-作者名**\n");printf("**4-出版社5-类别6-出版时间**\n");printf("**7-价格8-修改全部0-放弃修改**\n");printf("============================================================\n");printf("请选择你要修改的信息编号:");scanf("%d",&b);getchar();switch(b){case1:printf("请输入新编号:");scanf("%d",&p->num);printf("修改成功!\n");getchar();break;case2:printf("请输入新图书名:");gets(p->bname);printf("修改成功!\n");break;case3:printf("请输入新作者名:");gets(p->wname);printf("修改成功!\n");break;case4:printf("请输入新出版社:");gets(p->press);printf("修改成功!\n");break;case5:printf("请输入新类别:");gets(p->sort);printf("修改成功!\n");break;case6:printf("请输入新出版时间:");scanf("%d",&p->time);printf("修改成功!\n");getchar();break;case7:printf("请输入新价格:");scanf("%f",&p->price);printf("修改成功!\n");getchar();break;case8:printf("请输入新图书编号:");scanf("%d",&p->num);printf("请输入新图书名:");scanf("%s",p->bname);getchar();printf("请输入新作者名:");scanf("%s",p->wname);getchar();printf("请输入新出版社:");scanf("%s",p->press);getchar();printf("请输入新类别:");scanf("%s",p->sort);getchar();printf("请输入新出版时间:");scanf("%d",&p->time);getchar();printf("请输入新价格:");scanf("%f",&p->price);getchar();printf("修改成功!\n");getchar();break;case0:break;default:printf("您的输入有误!\n");break;}printf("是否将修改后的信息保存到文件中?(y/n)\n");scanf("%c",&c);getchar();switch(c){case'n':break;case'y':fprint(head);printf("保存成功!\n");getchar();break;}}}//图书排序voidpaixu(structbook*head){inta;printf("================================================================\n");printf("**1-按图书编号排序2-按出版时间排序**\n");printf("**3-按图书价格排序4-按图书名排序**\n");printf("**5-按作者名排序0-取消排序操作**\n");printf("================================================================\n");printf("请输入您选择的编号:");scanf("%d",&a);getchar();switch(a){case0:break;case1:num_paixu(head);break;case2:time_paixu(head);break;case3:price_paixu(head);break;case4:bname_paixu(head);break;case5:wname_paixu(head);break;default:printf("您的输入有误!\n");break;}}//按图书编号排序voidnum_paixu(structbook*head){structbook*a[1000],*p,*p1,*temp;inti,k,index,n=0;charb;p1=head;for(p=head;p;p=p->next)n++;for(i=0;i<n;i++){a[i]=p1;p1=p1->next;}for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++){if(a[i]->num<a[index]->num)index=i;}temp=a[index];a[index]=a[k];a[k]=temp;}printf("排序成功!\n");printf("是否显示排序结果?(y/n)\n");scanf("%s",&b);getchar();switch(b){case'n':break;case'y':printf("================================================================\n");printf("**编号图书名作者名出版社类别出版时间价格**\n");for(i=0;i<n;i++){printf("**%d%s%s%s%s%d%.2f**\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);}printf("================================================================\n");break;default:printf("您的输入有误!\n");break;}}//按出版时间排序voidtime_paixu(structbook*head){structbook*a[1000],*p,*p1,*temp;inti,k,index,n=0;charb;p1=head;for(p=head;p;p=p->next)n++;for(i=0;i<n;i++){a[i]=p1;p1=p1->next;}for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++){if(a[i]->time<a[index]->time)index=i;}temp=a[index];a[index]=a[k];a[k]=temp;}printf("排序成功!\n");printf("是否显示排序结果?(y/n)\n");scanf("%s",&b);getchar();switch(b){case'n':break;case'y':printf("===============================================================\n");printf("**编号图书名作者名出版社类别出版时间价格**\n");for(i=0;i<n;i++){printf("**%d%s%s%s%s%d%.2f**\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);}printf("===============================================================\n");break;default:printf("您的输入有误!\n");break;}}//按图书价格排序voidprice_paixu(structbook*head){structbook*a[1000],*p,*p1,*temp;inti,k,index,n=0;charb;p1=head;for(p=head;p;p=p->next)n++;for(i=0;i<n;i++){a[i]=p1;p1=p1->next;}for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++){if(a[i]->price<a[index]->price)index=i;}temp=a[index];a[index]=a[k];a[k]=temp;}printf("排序成功!\n");printf("是否显示排序结果?(y/n)\n");scanf("%s",&b);getchar();switch(b){case'n':break;case'y':printf("===============================================================\n");printf("**编号图书名作者名出版社类别出版时间价格**\n");for(i=0;i<n;i++){printf("**%d%s%s%s%s%d%.2f**\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);}printf("===============================================================\n");break;default:printf("您的输入有误!\n");break;}}//按图书名排序voidbname_paixu(structbook*head){structbook*a[1000],*p,*p1,*temp;inti,k,index,n=0;charb;p1=head;for(p=head;p;p=p->next)n++;for(i=0;i<n;i++){a[i]=p1;p1=p1->next;}for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++){if(strcmp(a[index]->bname,a[i]->bname)>0)index=i;}temp=a[index];a[index]=a[k];a[k]=temp;}printf("排序成功!\n");printf("是否显示排序结果?(y/n)\n");scanf("%s",&b);getchar();switch(b){case'n':break;case'y':printf("===============================================================\n");printf("**编号图书名作者名出版社类别出版时间价格**\n");for(i=0;i<n;i++){printf("**%d%s%s%s%s%d%.2f**\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);}printf("===============================================================\n");break;default:printf("您的输入有误!\n");break;}}//按作者名排序voidwname_paixu(structbook*head){structbook*a[1000],*p,*p1,*temp;inti,k,index,n=0;charb;p1=head;for(p=head;p;p=p->next)n++;for(i=0;i<n;i++){a[i]=p1;p1=p1->next;}for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++){if(strcmp(a[index]->wname,a[i]->wname)>0)index=i;}temp=a[index];a[index]=a[k];a[k]=temp;}printf("排序成功!\n");printf("是否显示排序结果?(y/n)\n");scanf("%s",&b);getchar();switch(b){case'n':break;case'y':printf("===============================================================\n");printf("**编号图书名作者名出版社类别出版时间价格**\n");for(i=0;i<n;i++){printf("**%d%s%s%s%s%d%.2f**\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);}printf("===============================================================\n");break;default:printf("您的输入有误!\n");break;}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。