图书馆信息管理系统C设计.docx
- 文档编号:10821925
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:17
- 大小:18.88KB
图书馆信息管理系统C设计.docx
《图书馆信息管理系统C设计.docx》由会员分享,可在线阅读,更多相关《图书馆信息管理系统C设计.docx(17页珍藏版)》请在冰豆网上搜索。
图书馆信息管理系统C设计
一:
设计任务
课程设计题目:
图书信息管理系统设计
图书信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间价格等。
试设计一图书信息管理系统,使之能提供以下功能:
系统以菜单方式工作
图书信息录入功能(图书信息用文件保存)--输入
图书信息浏览功能—输出
查询和排序功能—算法
按书名查询
按作者名查询
图书信息的删除与修改
课程设计要求:
整个系统均用C语言实现;
可以利用数组、指针、链表来实现数据结构设计;
系统具有输入、显示、查询、删除、排序、插入、保存读取等基本功能;
系统的各个功能模块都用函数的形式来实现;
可以将信息保存在文件中;
可以将信息从文件中读取出来。
二:
系统设计方案
利用学过的C语言知识将各个功能模块的源程序分别写出,进行调试、运行,然后再将各模块组合起来,整体进行调试运行。
源程序如下:
#include
#defineN3
intok=N;
#include
structsystem//定义结构体
{
longnum;
charname[20];
charwriter[10];
charsort[10];
charpublisher[20];
longtime;
floatprice;
};
voidload(structsysteminform[],FILE*fp)//定义一个输入函数,完成信息录入的功能
{
if((fp=fopen("system.text","w"))==NULL)
printf("文件打开错误");
printf("登录号书名作者名分类号出版单位出版时间价格\n");
fprintf(fp,"登录号书名作者名分类号出版单位出版时间价格\n");
for(inti=0;i { scanf("%ld%s%s%s%s%ld%f",&inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,&inform[i].time,&inform[i].price); fprintf(fp,"%-6ld%-8s%-8s%-8s%-8s%-6ld%-8f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); //在文件fp中存入N本书的信息 } fclose(fp); } voidlook(structsysteminform[])//定义一个输出函数,完成信息浏览的功能 { printf("登录号书名作者名分类号出版单位出版时间价格\n"); for(inti=0;i { printf("%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); } } voidsearch1(structsysteminform[])//定义一个查询函数,完成对书名查询的功能 { inti; intn;//n表示书名为p的书的总本数 charp[20];//p代表要查询的书名 printf("请输入要查询的书名: "); scanf("%s",&p); for(i=0;i if(strcmp(inform[i].name,p)==0)//判断两字符串是否相等 { printf("登录号书名作者名分类号出版单位出版时间价格\n"); printf("%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); n++; } if(n==0) printf("输入的书不存在\n"); } voidsearch2(structsysteminform[])//定义一个查询函数,完成对作者名查询的功能 { inti; intm=0;//m表示作者名为q的书的总本数 charq[10];//q代表要查询作者名 printf("请输入要查询的作者名: "); scanf("%s",q); for(i=0;i if(strcmp(inform[i].writer,q)==0)//判断两个字符串是否相等 { printf("登录号书名作者名分类号出版单位出版时间价格\n"); printf("%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); m++; } if(m==0) printf("输入的作者名不存在\n"); } voidorder1(structsysteminform[],FILE*fp)//定义第一个排序函数,完成对出版时间从高到低的排序功能 { if((fp=fopen("system.text","a"))==NULL) printf("文件打开错误"); fprintf(fp,"登录号书名作者名分类号出版单位出版时间价格\n"); inti,j; structsystemtemp; for(i=0;i for(j=N-1;j>i;j--) if(inform[j-1].time<=inform[j].time) { temp=inform[j-1]; inform[j-1]=inform[j]; inform[j]=temp; } printf("按出版时间从高到低排序的结果为: \n"); printf("登录号书名作者名分类号出版单位出版时间价格\n"); for(i=0;i { fprintf(fp,"%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); printf("%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); } fclose(fp); } voidorder2(structsysteminform[],FILE*fp)//定义第二个排序函数,完成对价格降序排序的功能 { if((fp=fopen("system.text","a"))==NULL) printf("文件打开错误"); fprintf(fp,"登录号书名作者名分类号出版单位出版时间价格\n"); structsystemtemp; inti,j; for(i=0;i for(j=N-1;j>i;j--) if(inform[j-1].price { temp=inform[j-1]; inform[j-1]=inform[j]; inform[j]=temp; } printf("按价格降序排序的结果为: \n"); printf("登录号书名作者名分类号出版单位出版时间价格\n"); for(i=0;i { fprintf(fp,"%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); printf("%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); } fclose(fp); } voidcancle(structsysteminform[],FILE*fp)//定义一个删除函数,完成对图书信息按书名删除的功能 { {if((fp=fopen("system.text","a"))==NULL) printf("文件打开错误"); printf("登录号书名作者名分类号出版单位出版时间价格\n"); fprintf(fp,"登录号书名作者名分类号出版单位出版时间价格\n"); inti,j=0; charp[20];//p代表要删除的书名 printf("请输入需要删除的书名: "); scanf("%s",&p); for(i=0;i if(strcmp(inform[i].name,p)==0) {for(j=i;j inform[j]=inform[j+1]; ok--; printf("删除成功! 结果为: \n"); printf("登录号书名作者名分类号出版单位出版时间价格\n"); for(i=0;i { fprintf(fp,"%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); printf("%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); } } } fclose(fp); } voidmodify(structsysteminform[],FILE*fp)//定义一个修改函数,完成图书价格修改的功能 { if((fp=fopen("system.text","a"))==NULL) printf("文件打开错误"); fprintf(fp,"登录号书名作者名分类号出版单位出版时间价格\n"); inti; charm[20]; floats; printf("请输入要修改价格的书名: "); scanf("%s",&m);//m表示要修改价格的书名 for(i=0;i if(strcmp(inform[i].name,m)==0)//判断两字符串是否相等 {printf("价格应修改为: "); scanf("%f",&s); inform[i].price=s; printf("修改成功,结果为: \n"); printf("登录号书名作者名分类号出版单位出版时间价格\n"); for(i=0;i { fprintf(fp,"%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); printf("%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); } } fclose(fp); } voidmain() { intpushbutton; structsysteminform[N]; FILE*fp; fp=fopen("system.text","wb+"); do{ printf("**********MENU***********\n"); printf("0输入图书信息\n"); printf("1浏览图书信息\n"); printf("2按书名查询\n"); printf("3按作者名查询\n"); printf("4按图书出版时间从高到低排序\n"); printf("5按图书价格降序排序\n"); printf("6按书名删除信息\n"); printf("7修改图书价格\n"); printf("8退出\n"); printf("请输入0~8按钮选择操作项: "); scanf("%d",&pushbutton); switch(pushbutton) { case0: load(inform,fp);break; case1: look(inform);break; case2: search1(inform);break; case3: search2(inform);break; case4: order1(inform,fp);break; case5: order2(inform,fp);break; case6: cancle(inform,fp);break; case7: modify(inform,fp);break; case8: printf("退出\n");break; default: printf("\n非法操作! \n"); } } while(pushbutton! =8); } 三: 程序主要代码分析 (1)数据结构 选用静态数组实现对图书信息的管理。 结构体如下: structsystem//定义结构体 { longnum; charname[20]; charwriter[10]; charsort[10]; charpublisher[20]; longtime; floatprice; }; (2)main()主函数 程序采用模块化设计,主函数为程序的入口,各模块独立,可分块调试,各模块由主函数控制调用。 主函数的控制功能通过循环执行一个开关语句来实现。 该开关语句的条件值为调用主菜单函数pushbutton得到的返回值,根据该值,调用相应的各功能函数。 voidmain() { intpushbutton; structsysteminform[N]; FILE*fp; fp=fopen("system.text","wb+"); do{ printf("**********MENU***********\n"); printf("0输入图书信息\n"); printf("1浏览图书信息\n"); printf("2按书名查询\n"); printf("3按作者名查询\n"); printf("4按图书出版时间从高到低排序\n"); printf("5按图书价格降序排序\n"); printf("6按书名删除信息\n"); printf("7修改图书价格\n"); printf("8退出\n"); printf("请输入0~8按钮选择操作项: "); scanf("%d",&pushbutton); switch(pushbutton) { case0: load(inform,fp);break; case1: look(inform);break; case2: search1(inform);break; case3: search2(inform);break; case4: order1(inform,fp);break; case5: order2(inform,fp);break; case6: cancle(inform,fp);break; case7: modify(inform,fp);break; case8: printf("退出\n");break; default: printf("\n非法操作! \n"); } } while(pushbutton! =8); } (3)录入信息的功能模块 voidload(structsysteminform[],FILE*fp)//定义一个输入函数,完成信息录入的功能 { if((fp=fopen("system.text","w"))==NULL) printf("文件打开错误"); printf("登录号书名作者名分类号出版单位出版时间价格\n"); fprintf(fp,"登录号书名作者名分类号出版单位出版时间价格\n"); for(inti=0;i { scanf("%ld%s%s%s%s%ld%f",&inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,&inform[i].time,&inform[i].price); fprintf(fp,"%-6ld%-8s%-8s%-8s%-8s%-6ld%-8f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); //在文件fp中存入N本书的信息 } fclose(fp); 此模块完成信息的输入功能,用的是一个输入函数。 (4)浏览信息的功能模块(见源程序),采用的是一个输出函数。 (5)信息查询功能模块 voidsearch1(structsysteminform[])//定义一个查询函数,完成对书名查询的功能 { inti; intn;//n表示书名为p的书的总本数 charp[20];//p代表要查询的书名 printf("请输入要查询的书名: "); scanf("%s",&p); for(i=0;i if(strcmp(inform[i].name,p)==0)//判断两字符串是否相等 { printf("登录号书名作者名分类号出版单位出版时间价格\n"); printf("%ld%s%s%s%s%ld%f\n",inform[i].num,inform[i].name,inform[i].writer,inform[i].sort,inform[i].publisher,inform[i].time,inform[i].price); n++; } if(n==0) printf("输入的书不存在\n"); 此模块通过输入书名完成对书信息的查询,输入书名判断所输入的书名是否与保存在文件中的书名相同,若同则显示出来,若不同则提示“输入的书不存在”。 (6)信息排序模块功能(主要部分) inti,j; structsystemtemp; for(i=0;i for(j=N-1;j>i;j--) if(inform[j-1].time<=inform[j].time) { temp=inform[j-1]; inform[j-1]=inform[j]; inform[j]=temp; } printf("按出版时间从高到低排序的结果为: \n"); printf("登录号书名作者名分类号出版单位出版时间价格\n"); 此模块采用的是冒泡排序法。 (7)信息删除功能(见源程序)输入想删除的图书的书名,判断是否有,有的话则删掉,用其他图书的信息覆盖要删掉图书的信息。 (8)信息修改模块(主要部分) inti; charm[20]; floats; printf("请输入要修改价格的书名: "); scanf("%s",&m);//m表示要修改价格的书名 for(i=0;i if(strcmp(inform[i].name,m)==0)//判断两字符串是否相等 {printf("价格应修改为: "); scanf("%f",&s); inform[i].price=s; printf("修改成功,结果为: \n"); printf("登录号书名作者名分类号出版单位出版时间价格\n"); 此模块是先找出要修改的书名,然后把输入的新的信息赋给原来的信息,以此来完成该功能的实现。 四: 程序调试中出现的问题及其解决方法 问题一: 程序中有些地方符号写落了 解决方法: 按照提示补上去 问题二: {}此类符号放错地方,引起逻辑错误 解决方法: 按逻辑重新安放 问题三: 删除信息时最后应该是N-1,而不是N 解决方法: 将N改为N-1 问题四: 数组名char后面忘带[] 解决方法: 补上[] 五: 收获体会 回顾起此次课程设计,我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,几天时间里,可以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书馆 信息管理 系统 设计