图书管理系统目录一、问题描述这是一个能简单管理图书的小型图书管理系统,其中图书信息包括:书名,作者名,书编号,分类,出版单位,出版时间,价格等。
通过这些信息使之提供以下功能:(1)图书信息创建功能。
其中图书信息包括:书名,作者名,书编号,分类,出版单位,出版时间,价格等。
(图书信息用文件保存)。
(2)图书信息查看功能。
用来查看各项图书信息。
(3)图书信息查找功能。
通过已知信息来查找想要的图书。
(4)图书信息的删除。
可以删除特定图书。
(5)图书信息的修改。
可以修改图书的各项信息。
(6)菜单选择功能,此功能也是图书信息信息管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择并进而调用其他模块实现相应的功能二、概要设计1 数据结构图书管理系统中主要的数据结构包含书名、图书书号、作者名、分类、出版社、出版时间、价格等;在处理过程中各项可以作为一本图书的不同属性来进行处理。
struct book{int num;//编号char name[20];//书名char author[20];//作者char publisher[20];//出版社int price;//价格int store;//库存};//图书信息结构体2 模块划分本系统主要有创建新的图书、查找图书、删除图书、修改图书、查看图书和图书排序几个基本功能。
void setup(struct book bo[]);//新建图书void search(struct book bo[]);//查找图书void modify(struct book bo[]);//查看图书void del(struct book bo);//删除图书void allbook(struct book bo[]);显示所有图书3 程序流程图否开始菜单新建图书修改信息查询图书删除图书所有图书退出是结束三、详细设计1 主函数int main()//主{struct book bo[100];char c;while(1){system("color 1A");printf("\n");printf("\n\t\t\t >>>欢迎进入图书管理系统<<<\n\n");printf("===================================== ===========================================\ n\n");printf("\t\t\t\t 1 录入新书\n\t\t\t\t 2 查询图书\n");printf("\t\t\t\t 3 修改信息\n\t\t\t\t 4 删除图书\n");printf("\t\t\t\t 5 所有图书\n");printf("\t\t\t\t 0 退出系统\n\n");printf("===================================== ===========================================\ n");printf("请选择:");c=getchar();switch(c){case'1':{setup(bo); getchar();break;}case'2':{search(bo);getchar();break;}case'3':{modify(bo);getchar();break;}case'4':{del(bo);getchar();break;}case'5':{allbook(bo);getchar;break;}case'0':{printf("\n感谢使用本系统");return 0;break;}default:{printf("\n输入有误,请重新输入:" );c=getchar();} }}}2 新建图书void setup(struct book bo[])打开文件或者新建一个文件,键盘输入新建的图书信息,然后把数据全部保存在数组bo数组中,最后存入文件。
void setup(struct book bo[]){system("cls");FILE *fp;int i,a=1,count=0;if((fp=fopen("book","ab"))==NULL){printf("无法打开文件!\n");return;}printf("\n\n\n\t\t\t============录入新书===========\n\n\n");while(a!=2){printf("\t\t\t\t 输入编号:");scanf("%d",&bo[count].num);printf("\t\t\t\t 输入书名:");scanf("%s",&bo[count].name);printf("\t\t\t\t 输入作者:");scanf("%s",&bo[count].author);printf("\t\t\t\t 输入出版社:");scanf("%s",&bo[count].publisher);printf("\t\t\t\t 输入价格:");scanf("%d",&bo[count].price);printf("\t\t\t\t 输入在馆量:");scanf("%d",&bo[count].store);count++;printf("请选择:\n1继续录入图书信息\n2返回主菜单\n");scanf("%d",&a);}for(i=0;i<count;i++){if(fwrite(&bo[i],sizeof(struct book),1,fp)!=1){printf("打开文件错误");return;}}fclose(fp);system("cls");}3 查找图书void search(struct book bo[])通过从键盘输入书名就可以显示图书信息。
void search(struct book bo[]){system("cls");FILE*fp;int a=1,i,m=0;char name1[20];//书名查询if((fp=fopen("book","rb"))==NULL){printf("无法打开文件!\n");return;}while(!feof(fp)){if(fread(&bo[m],sizeof(struct book),1,fp)==1)//统计书的数量m++;}while(a!=2){printf("请输入书名:");scanf("%s",&name1);for(i=0;i<m;i++){if(strcmp(name1,bo[i].name)==0)//字符比较{printf("\n\t\t\t ----该书的信息为----\n\n");printf("\t\t\t\t 编号:%d\n\n",bo[i].num);//输出图书信息printf("\t\t\t\t 书名:%s\n\n",bo[i].name);printf("\t\t\t\t 作者:%s\n\n",bo[i].author);printf("\t\t\t\t 出版社:%s\n\n",bo[i].publisher);printf("\t\t\t\t 价格:%d\n\n",bo[i].price);printf("\t\t\t\t 馆存:%d\n\n",bo[i].store);if(bo[i].store==0)printf("\t\t\t\t 对不起,该书不可借");elseprintf("\t\t\t\t 该书可借");}}printf("\n1继续查询\n2返回主菜单\n");printf("请选择:");scanf("%d",&a);}printf("\n\n\n");fclose(fp);system("cls");return;}4 修改信息函数void modify(struct book bo[])从键盘输入“书名”,在数组bo 数组中查找,如果找到,选择需要修改的项目,输入完毕回车自动替原来的数据,如果未找到则显示“未有找到该图书”。
void modify(struct book bo[]){system("cls");char name0[20],author0[20],publisher0[20];int num0,store0,price0;char name2[20];int i,m=0,k,a;FILE*fp;if((fp=fopen("book","rb"))==NULL){printf("无法打开文件");return;}while(!feof(fp)){if(fread(&bo[m],sizeof(struct book),1,fp)==1)//统计书的数量m++;}fclose(fp);if((fp=fopen("book","wb"))==NULL){printf("无法打开文件");return;}printf("请输入需要修改的书名:");scanf("%s",name2);for(i=0;i<m;i++){if(strcmp(bo[i].name,name2)==0){printf("查找成功");a=i;break;}}if(m==0){printf("没有你要查的书");}printf("\n\t\t\t ----该书修改前的信息为----\n\n"); printf("\t\t\t\t 编号:%d\n\n",bo[a].num);printf("\t\t\t\t 书名:%s\n\n",bo[a].name);printf("\t\t\t\t 作者:%s\n\n",bo[a].author);printf("\t\t\t\t 出版社:%s\n\n",bo[a].publisher); printf("\t\t\t\t 价格:%d\n\n",bo[a].price);printf("\t\t\t\t 在馆状态:%d\n\n",bo[a].store); printf("\t\t\t\t 请选择需要修改的项目\n\n"); printf("\t\t\t --------------------------\n");printf("\t\t\t\t 1 更改编号\n");printf("\t\t\t\t 2 更改书名\n");printf("\t\t\t\t 3 更改作者\n");printf("\t\t\t\t 4 更改出版社\n");printf("\t\t\t\t 5 更改价格\n");printf("\t\t\t\t 6 更改在馆状态\n");printf("\t\t\t\t 0 返回\n");printf("\t\t\t ---------------------------\n");printf("请做出选择:");scanf("%d",&k);switch(k){case 1:{printf("请输入编号");scanf("%d",&num0);bo[a].num=num0;break;}case 2:{printf("请输入书名");scanf("%s",name0);strcpy(bo[a].name,name0);break;}case 3:{printf("请输入作者");scanf("%s",author0);strcpy(bo[a].author,author0);break;}case 4:{printf("请输入出版社");scanf("%s",publisher0);strcpy(bo[a].publisher,publisher0);break;}case 5:{printf("请输入价格");scanf("%d",&price0);bo[a].price=price0;break;}case 6:{printf("请输入在馆状态");scanf("%d",&store0);bo[a].store=store0;break;}case 0:{printf("谢谢使用");return;}default:{printf("输入错误,请重新输入:");scanf("%d",&k);} }for(i=0;i<m;i++){if(fwrite(&bo[i],sizeof(struct book),1,fp)!=1){printf("打开文件错误\n");return;}}printf("\n修改成功");fclose(fp);system("cls");return;}5 显示所有图书void allbook(struct book bo[])显示所有已保存的图书信息void allbook(struct book bo[]){system("cls");int i,m=0;FILE*fp;if((fp=fopen("book","rb"))==NULL){printf("无法打开文件!\n");return;}while(!feof(fp)){if(fread(&bo[m],sizeof(struct book),1,fp)==1)//统计书的数量m++;}printf("\n\n\t\t\t ****当前所有图书的信息****\n\n");printf(" 序号\t 书名作者\t 出版社\t价格\t在馆状态");for(i=0;i<m;i++){printf("\n%5d%10s%10s%12s%15d%10d",bo[i].num,bo[i].name,bo[i].author,bo[i].publisher,bo[i].price,bo[i].store);}printf("\n\n");fclose(fp);getchar();return;}6删除图书void del(struct book bo[])从键盘输入的一条记录的“书名”,在数组bo中查找,如果找到则从bo数组中删除该记录,否则显示“找到该图书”。