《图书管理系统课程报告(共36页).doc》由会员分享,可在线阅读,更多相关《图书管理系统课程报告(共36页).doc(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上课 程 报 告课 程 名 称: 专 业 班 级 : 学 生 姓 名 : 学 号 : 任 课 教 师 :学 期 :课程报告任务书题 目图书信息管理系统主要内容开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)输入v(2)图书信息浏览功能输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式): l 按书名查询 按作者名查询 按照价钱排序 按出版时间排序等等(4)图书信息的删除与修改扩展功
2、能:可以按照自己的程度进行扩展。比如(1)简单的权限处理 (2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。(4)模糊查询 (5)综合查询 (6)统计功能 比如统计处某一类别的图书信息 或 筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。任务要求一、提交材料应包括:(1)系统源代码 (2)课程报告二、整个设计过程具体要求(1)需求分析 要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2)设计过程 要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程 要求学生养成良好
3、的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。成绩评定报告撰写情况(30分)系统完成情况(30分)答辩情况(40分)总分内容20分规范程度5分程序测试5分基本功能20分扩展功能10分自述情况10分答辩情况30分成绩评定教师: 1 需求分析本次实验目的是开发一个图书管理系统,且该图书管理系统中应包含以下基本功能:(1)图书信息录入功能(2)图书信息浏览功能(3)查询功能例如:按书名查询、按作者名查询等等(4)排序功能 例如: 按照价钱排序、按出版时间排序等等(5)图书信息的删除与修改除此之外,个人还可以根据自己的爱好进
4、行各方面的扩展。例如权限处理、图书排序等等。在我们设计自己的程序时不仅可以利用课本上的知识,还可以在互联网上查询有关该类信息,将其学习总结并利用在此次程序设计中。利用这次程序设计实验,我们可以提高自己的设计和编辑程序的能力、了解一般程序的编写过程,还可以巩固加深我们对C语言程序基本知识的了解与掌握。我在该实验中不仅利用了课本上的函数知识、文本的输入和读出,还用互联网查阅了相关知识。如“system(cls)”,用汉语解释就是清屏功能;还有“getch()”函数,输入不读出,不过在利用“getch()”进行密码的改写时老是出错误,就舍弃了该函数。在利用“system(cls)”时感觉还是很好的,
5、用该函数后不仅可以使程序在运行时美观大方,还可以一眼扫描到我们要找的信息。而我在我编写的程序中设计了如下的功能: 登陆权限功能 查找全部图书并总图书本数功能 查找每本图书功能 添加图书功能 删除图书功能 修改图书功能 图书排序功能 金额管理功能2 概要设计开始在实验中我主要是用函数来解决该程序的文件模块问题,用函数的嵌套调用来解决各模块间的联系问题。在编写程序时,我首先用结构数组struct list d40来定义图书的各种信息。如:编号、书名、作者、出版社、类别等等。然后定义了全局变量number和total用来计算书本总数和金额总量。而后在主函数中用循环变量中的while语句和分支结构中的
6、switch语句,来编写登录权限;创建文本并用文本的输入和输出语句将图书信息输入文本;用函数的嵌套来将各部分联系起来。总体流程图如下:登陆图书管理系统查找每本图书查找全部图书添加图书图书排序金额管理修改图书删除图书结束下面介绍一下各个部分的程序:1 查看全部图书功能该功能函数名称为:search_allbook。先定义整形变量:i;而后用system(cls)进行清屏;再输入提示信息“查看全部图书!”,后利用for循环进行循环输出。最后输出总书本数number。开始其函数流程图如下:int i;输出:查看全部图书!i=0inumber否 是输出图书信息;输出图书总数:number;结束2 查找
7、每本图书功能该函数名称为find_book。这个函数也是这样,首先用system(cls)进行清屏处理;然后进行定义:int i, fg=0,char s20;然后输出:输入图书编号和查找图书!再利用for循环语句将输入的图书编号与该程序中的图书编号相等再输出该本图书的所有信息即图书的编号、书名、作者、出版社、类别、出版时间、价格。这个程序的流程图与上一流程图差别不大,这里就不再写。3 添加图书功能该部分函数名称为:add_book。首先定义int i, count=0, choice3、struct list p和文件指针FILE *fp2,然后进行清屏处理。然后输出:添加图书!接着依次输入
8、图书的编号、书名、作者、出版社、类别、出版时间、价格。然后显示是否显示添加后信息,如果选择是则会用switch函数和for循环进行依次输出,最后显示“谢谢您对图书添加!”并且最后以一排星号结束,选择否则会显示“谢谢您对图书添加!”并且最后以一排星号结束。其函数流程图如下:开始输入添加后的图书信息!是否显示添加后的信息!显示添加后的图书信息!是 否结束4 删除图书功能该部分函数名称为:delete_book。先定义int i, fg= 0,ch;char s20;和文件指针FILE *fp3,然后利用 system(cls)进行清屏处理。然后输出:删除图书,接着输出“请输入图书编号”,然后利用f
9、or循环语句将输入的图书编号与该程序中的图书编号相等,再将这个图书编号所在的图书删除并将信息录入文档。接着显示“是否显示删除后的信息”,如果选择是则会用switch函数和for循环进行依次输出该图书的编号、书名、作者、出版社、类别、出版时间、价格。最后以一排星号结束。选择否也会显示一排星号结束。该函数的流程图与查看全部图书的流程图类似,这里也不再写出。5 修改图书功能该函数名称为:xiugai_book。先定义int i,k;char s20;和文件指针FILE *fp2,然后利用 system(cls)进行清屏处理。然后输入要修改图书的编号,将新图书的信息重新输入保存到文档中即可。6 图书排
10、序功能该函数名称为:paixu_book。先定义int a;然后用system(cls)进行清屏处理!然后会输出1-按图书编号排序 2-按出版时间排序 3-按图书价格排序,然后根据输入数据会进入不同的子函数。当选择1时,其函数名称为:num_paixu。在这个函数中先对变量进行定义:int i,k,index,b和struct list temp。然后清屏,用for函数进行对图书编号的大小比较,然后利用变量temp将不符合次序的进行交换。然后显示“排序成功!”和“是否显示排序结果? 1:是 ; 2:否”,如果输入1则会依次输出排序后的图书,最后以一排星号结束。开始该函数的流程图为:是否对图书进
11、行排序?输出排序后的结果!是否显示排序后的结果?是 否结束当选择2时,其函数名称为:time_paixu。当选择3时,其函数名称为:price_paixu。该函数与选择1时基本类似,在这就不一一叙述了。7 金额管理功能该函数名称为:cash_manage。该函数就是将全局变量total输出。3 详细设计 主函数根据程序要求,一个程序只能有一个主函数。因此主函数是一个程序好坏的基础,也是一个程序在运行时外在的表现,因此对主函数设计我做了很多修改,一直修改到让我满意。我把函数分为几个部分说吧!1 写完函数库及建立一个结构数组:#include#include#includestruct list
12、/*图书结构体*/char num50; /*图书编号*/char name50; /*图书名称*/char author50; /*作者*/char press50; /*图书出版社*/char sort50; /*图书类别*/int time; /*图书出版时间*/double price; /*图书价格*/struct list *next;struct list d40 ;2 全局变量;int number=0;double total;3 所有的函数声明;void search_allbook (struct list d) ; /*查看全部图书*/void find_book (s
13、truct list d) ; /*查找图书*/void add_book (struct list d) ; /*添加图书*/double delete_book (struct list d) ; /*删除图书*/void paixu_book (struct list d) ; /*图书排序*/void num_paixu(struct list d); /*按图书编号排序*/void time_paixu(struct list d); /*按图书出版时间排序*/void price_paixu(struct list d); /*按图书价格排序*/void xiugai_book(s
14、truct list d); /*图书丢失*/double cash_manage();4 Main函数的头以及定义的变量和文本指针;int main()int q=1,w,r,l,i=0;char b20,b120=gpf;char m20,m120=1;FILE *fp ;5 登陆权限功能函数while(q)system(cls);printf(nnnn);printf( * 欢迎光临 *nn);printf( *图书管理系统*nn);printf( 1.用户登录n);printf( 0.退出登录n);printf( 请输入您的选择:);scanf(%d,&w);printf(n);get
15、char();switch(w)case 0:q=0;break;case 1:printf( 请输入用户名:);scanf(%s,b);printf(n);printf( 请输入密码:);scanf(%s,m);getchar();printf(n);if(strcmp(b,b1)!=0|strcmp(m,m1)!=0)printf( 用户名或密码错误!n);printf( 请重新输入:);scanf(%c,&l);getchar();system(cls);elseprintf( 验证通过!请按Enter键进入!n);scanf(%c,&l); 6 文本的输出;fp = fopen (f.
16、txt , r) ;if(fp = NULL)printf(File open the file 1!n) ;exit (0) ;while (! feof(fp)fscanf(fp, %s %s %s %s %s %d %lfn,di.num, di.name, di.author, di.press, di.sort, &di.time, &di.price) ; i+ ;number=i;fclose (fp);7 图书管理系统的功能列表函数及main函数结尾;dosystem(cls);printf(nnnn);printf( |*|n);printf( | *图书信息管理系统* |n
17、);printf( |*|n);printf( 1.查看全部图书 5.修改图书n);printf( 2.查找图书 6.图书排序n);printf( 3.添加图书 7.金额管理n);printf( 4.删除图书 8.退出程序n);printf(nn);printf(请输入所选择的序号:);scanf(%d,&r);getchar();switch(r)case 1:search_allbook(d);getchar();break ;case 2:find_book(d);getchar();break ;case 3: add_book(d);getchar();break ;case 4:d
18、elete_book(d);getchar();break ;case 5:xiugai_book(d);getchar();break ;case 6:paixu_book(d);getchar();break ;case 7:cash_manage();getchar();break;case 8:break;while (r!=8);printf(谢谢使用!n);return 0; 查看全部图书函数void search_allbook(struct list d)int i;system(cls); printf( |*|n); printf( | 查看全部图书! |n); print
19、f( |*|n); printf(图书的相关信息:编号书名作者出版社类别出版时间 价格n); for(i=0;inumber;i+) printf(%s%s%s%s%s%d %.2lfn, /*将数据输出到屏幕中*/ di.num,di.name,di.author,di.press,di.sort,di.time,di.price); printf(书本总数:%d n , number);printf(*n); 查找图书void find_book(struct list d)system(cls);int i, fg=0;char s20; printf(输入图书编号:n) ; /*提示输
20、入图书编号*/ scanf(%s ,s); printf( |*|n); printf( | 查找图书! |n); printf( |*|n); for(i=0;inumber;i+) if (strcmp(s, di.num)=0) printf(该图书的相关信息:编号 书名 作者 出版社 类别 出版时间 价格n); printf(%s %s %s %s %s %d %.2lfn,di.num, di.name, di.author, di.press, di.sort, di.time, di.price); fg = 1; break; if (fg = 0) printf(该图书编号不
21、存在!n); printf(是否要继续查找? y:是 ; n:否n) ; getchar();switch(getchar()case y: find_book(d); /*调用函数本身继续查找*/case n : break ; printf(*n);getchar(); 添加图书函数;void add_book(struct list d) int i, count=0, choice3; struct list p ;FILE *fp2 ;system(cls); printf( |*|n); printf( | 添加图书! |n); printf( |*|n);printf(请输入图书
22、编号:);scanf(%s,p.num); printf(请输入图书名:); scanf(%s,p.name);getchar(); printf(请输入作者名:); scanf(%s,p.author);getchar(); printf(请输入出版社:); scanf(%s,p.press);getchar();printf(请输入类别:); scanf(%s,p.sort);getchar(); printf(请输入出版时间:); scanf(%d,&p.time);getchar(); printf(请输入价格:); scanf(%lf,&p.price); printf( 是否添加并
23、显示添加后的信息? 1:是 ; 2:否 n); printf( 请选择:); scanf(%d , &choice3); switch (choice3) case 1 : for(i=0;i0) count + ; for(i=number;icount;i-) di = di-1 ; di = p ; number+; /*每添加一本图书,图书数目都会增加一个*/ fp2= fopen (f.txt , w) ; if(fp2= NULL) printf(File open the file 2 !n); exit (0) ; for(i=0;inumber;i+) fprintf(fp2
24、, %s %s %s %s %s %d %.2lfn , di.num,di.name,di.author,di.press,di.sort,di.time,di.price); fclose (fp2) ;printf(添加后的图书信息:n编号 书名 作者 出版社 类别 出版时间 价格n); for(i=0;inumber;i+) printf( %s %s %s %s %s %d %.2lfn , di.num,di.name,di.author,di.press,di.sort,di.time,di.price); printf(谢谢您对图书的添加!n); break; case 2 :
25、 printf(谢谢您对图书的添加!n); break ; printf(*n); getchar(); 删除图书函数double delete_book(struct list d)int i,count=0,fg= 0,ch; char s20;FILE *fp3; system(cls); printf( |*|n); printf( | 删除图书 |n); printf( |*|n); printf(请输入图书编号:);scanf(%s, s); for(i=0;inumber;i+) if(strcmp(s,di.num)=0) printf( 是否删除并显示删除后的信息? 1:是
26、; 2:否 n); printf( 请选择:); scanf(%d , &ch); getchar(); switch (ch) case 1 :for(i=0;i=0)count + ;for(i=(count-1);inumber;i+)di=di+1;/di = p ;number-; /*每删除一本图书,图书数目都会减少一个*/ fp3=fopen (f.txt , w) ;if(fp3= NULL)printf(File open the file 3 !n);exit (0) ;for(i=0;inumber;i+)fprintf(fp3, %s %s %s %s %s %d %.
27、2lfn ,di.num,di.name,di.author,di.press,di.sort,di.time,di.price);fclose (fp3) ;printf(删除后的图书信息:n编号 书名 作者 出版社 类别 出版时间 价格n);for(i=0;inumber;i+)/if(strcmp(s,di.num)!=0)printf(%s %s %s %s %s %d %.2lfn,di.num, di.name, di.author, di.press, di.sort, di.time, di.price);break ;case 2 :break ; fg = 1 ; getc
28、har(); /break ; if(fg = 0)printf(该图书编号不存在!n); printf(*n);return total;getchar(); 修改图书函数void xiugai_book(struct list d)int i,k;char s20;FILE *fp4;system(cls); printf( |*|n); printf( | 图书修改 |n); printf( |*|n); printf(请输入图书编号:);scanf(%s, s);for(i=0;inumber;i+)if(strcmp(s,di.num)=0)printf(您要修改的图书信息为:n编号
29、 书名 作者 出版社 类别 出版时间 价格n);printf(%s %s %s %s %s %d %.2lfn,di.num, di.name, di.author, di.press, di.sort, di.time, di.price);printf(请输入修改后的图书信息:n);printf(请输入图书名:);scanf(%s,di.name);getchar();printf(请输入作者名:);scanf(%s,di.author);getchar();printf(请输入出版社:);scanf(%s,di.press);getchar();printf(请输入类别:);scanf(
30、%s,di.sort);getchar();printf(请输入出版时间:);scanf(%d,&di.time);getchar();printf(请输入价格:);scanf(%lf,&di.price);fp4=fopen (f.txt , w) ;if(fp4=NULL)printf(File open the file 4 !n);exit (0) ;for(i=0;inumber;i+)fprintf(fp4, %s %s %s %s %s %d %.2lfn ,di.num,di.name,di.author,di.press,di.sort,di.time,di.price);f
31、close (fp4) ;printf(是否显示修改后的图书信息: 1:是 ; 2:否n);scanf(%d,&k);getchar();switch(k)case 1:for(i=0;inumber;i+)if (strcmp(s, di.num)=0)printf(该图书的相关信息:n编号 书名 作者 出版社 类别 出版时间 价格n);printf(%s %s %s %s %s %d %.2lfn,di.num, di.name, di.author, di.press, di.sort, di.time, di.price);case 2:printf(谢谢您对图书的修改!n);break;default:printf(您的输入有误!n);break;