C语言图书管理系统程序设计报告.docx
《C语言图书管理系统程序设计报告.docx》由会员分享,可在线阅读,更多相关《C语言图书管理系统程序设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
C语言图书管理系统程序设计报告
Documentserialnumber【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】
C语言图书管理系统程序设计报告
3
3
4
4
4
5
5
6
.17
18
22
23
…23
…26
一、设计任务书
1.目的
1)复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握。
2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力。
3)培养学生在项目开发中团队合作精神、创新意识及能力。
2.要求:
1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理。
2)系统设计要实用,编程简练,可用,功能全面。
3)说明书、流程图要清楚。
4)记录设计情况(备查,也为编写设计说明书作好准备)。
5)要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。
6)设计上交内容:
设计报告一份(按格式书写);源程序一份,能编译成可执行文件并能正常运行。
二、本组课题及本人任务
课题:
图书信息管理系统设计
图书信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
1.系统以菜单方式工作。
2.图书信息录入功能(图书信息用文件保存)--输入。
3.图书信息浏览功能--输出。
4.查询和排序功能:
(至少一种查询方式)--算法。
a.按书名查。
b.按作者名查询。
本人任务:
负责设计和编写图书信息管理系统的修改图书信息部分。
三、程序功能简介
本系统是以visualC++环境下用C语言开发的一个图书管理系统。
本系统具有图书信息录入、浏览、删除、修改、查找(包括按书名、作者查找)功能。
其中图书信息包括登录号、书名、作者名、分类号、出版单位、出版时间、价格,并且对信息以文件形式储存。
另外本系统具备实用性的同时代码逻辑谨慎清晰易懂,且界面美观。
四、主体内容
1.设计分析
本系统共分为一个主页面模块(主函数部分),五个功能模块(功能函数)分别为图书信息录入、图书信息浏览、图书信息查询、图书信息删除、图书信息修改。
设计时应该先写好主函数、定义好全局变量和功能函数,再对五个功能函数进行设计。
在每个功能函数和主函数应中加入控制条件使用户可以随时退出系统,并在用户输入指令错误的时候给予提醒和退出选项。
小组中的五个人分别承担一个功能模块进行设计。
并在每个人设计完成后通过主函数进行链接调试正确后方为完成。
2.程序结构(流程图)
3.各模块的功能及程序说明
A、录入模块:
本模块主要执行信息录入功能。
B、浏览模块:
本模块主要是执行把已有信息输出浏览功能。
C、查询模块:
本模块主要是执行按书名和按作者名查找图书信息的功能。
D、删除模块:
本模块主要执行删除图书信息的功能。
E、修改模块(本人设计模块):
本模块主要执行图书信息修改功能。
在用户选择该功能后。
首先,系统会弹出已存在信息列表并让用户选择所要修改的信息项目。
然后,当用户选定要修改的信息后会弹出信息目录,用户需按顺序依次修改信息内容。
最好当所有信息项目都修改完成之后,按回车键会在窗口上输出修改后的内容。
4.源程序
#include<>
#include<>
#include<>
#include<>
#defineMAX100
structStudent
{
intnum;/*登录号*/
charname[100];/*书名*/
charauthor[100];/*作者名*/
charfn[100];/*分类号*/
charplace[100];/*出版单位*/
charday[100];/*出版时间*/
floatmoney;/*价格*/
}stu[MAX];
main()/*主函数*/
{
voidInput();/*输入*/
voidDisplay();/*输出*/
voidFind();/*查找*/
voidModify();/*删除*/
voidChange();/*修改*/
intn;
for(;;)
{
printf("\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※※\n");
printf("※欢迎来到图书信息管理系统※\n");
printf("※※\n");
printf("※※\n");
printf("※主菜单※\n");
printf("※※\n");
printf("※▲1.图书信息录入▲※\n");
printf("※※\n");
printf("※▲2.图书信息浏览▲※\n");
printf("※※\n");
printf("※▲3.图书信息查询▲※\n");
printf("※※\n");
printf("※▲4.图书信息删除▲※\n");
printf("※※\n");
printf("※▲5.图书信息修改▲※\n");
printf("※※\n");
printf("※▲6.退出系统▲※\n");
printf("※※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
printf("请输入选择项(1-6):
");
scanf("%d",&n);
printf("\n\n\n\n");
if(n>0&&n<7)
{
switch(n)
{
case1:
Input();break;
case2:
Display();break;
case3:
Find();break;
case4:
Modify();break;
case5:
Change();break;
case6:
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※※\n");
printf("※谢谢使用!
※\n");
printf("※再见!
※\n");
printf("※※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
exit(0);
}
}
else
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※※\n");
printf("※输入错误!
※\n");
printf("※请退出!
※\n");
printf("※※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
break;
}
}
}
voidFind()/*查找*/
{
FILE*fp;
inti;
intchoose,t;
charans[100];
do
{
printf("1.按书名查找\n");
printf("2.按作者名查找\n");
printf("返回主菜单(其他数字)\n");
scanf("%d",&choose);
if(choose==1)
{
printf("输入所查书名:
\n");
scanf("%s",ans);
t=-1;
if(choose==1)
{
for(i=0;i{
t=i;
fp=fopen("student","rb");
for(i=0;fread(&stu[i],sizeof(structStudent),1,fp)==1;i++)
printf("%d%s%s%s%s%s%f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);
}
}
if(t==-1)printf("不存在该信息\n");
}
elseif(choose==2)
{
printf("输入所查作者名:
\n");
scanf("%s",ans);
t=-1;
if(choose==2)
{
for(i=0;iif(strcmp(ans,stu[i].author)==0)
{t=i;
fp=fopen("student","rb");
for(i=0;fread(&stu[i],sizeof(structStudent),1,fp)==1;i++)
printf("%d%s%s%s%s%s%f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);
}
}
if(t==-1)printf("不存在该信息\n");
}
elsereturn;
}while
(1);
}
voidDisplay()/*输出*/
{
FILE*fp;
inti;
fp=fopen("student","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号书名作者名分类号出版单位出版时间价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(structStudent),1,fp)==1;i++)
{
printf("%6d%8s%8s%8s%8s%8s%\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
}
fclose(fp);
}
voidInput()/*输入*/
{
FILE*fp;
intn;
fp=fopen("student","ab+");
for(n=0;n{
printf("n=%d输入序号n(当输入n=-1时,返回),n=",n++);
scanf("%d",&n);
if(n==-1)
{
fclose(fp);
return;
}
else
{
printf("请输入登录号书名作者名分类号出版单位出版时间价格\n");
scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);
fwrite(&stu[n],sizeof(structStudent),1,fp);
}
}
fclose(fp);
}
voidModify()/*删除*/
{
FILE*fp;
inti,flag,n,s,j;
fp=fopen("student","rb+");
rewind(fp);
printf("图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号书名作者名分类号出版单位出版时间价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(structStudent),1,fp)==1;i++)
{
printf("%6d%8s%8s%8s%8s%8s%\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("\n");
}
n=i;
printf("输入待删除图书号:
\n");
scanf("%d",&s);
for(i=0,flag=1;flag&&i{
if(s==stu[i].num)
{
for(j=i;j{
stu[j].num=stu[j+1].num;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].author,stu[j+1].author);
strcpy(stu[j].fn,stu[j+1].fn);
strcpy(stu[j].place,stu[j+1].place);
strcpy(stu[j].day,stu[j+1].day);
stu[j].money=stu[j+1].money;
}
flag=0;
}
}
if(!
flag)
n=n-1;
else
printf("没有此号\n");
fp=fopen("student","wb");
for(i=0;ifwrite(&stu[i],sizeof(structStudent),1,fp);
fclose(fp);
fp=fopen("student","r");
printf("图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号书名作者名分类号出版单位出版时间价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;i{
fread(&stu[i],sizeof(structStudent),1,fp);
printf("%6d%8s%8s%8s%8s%8s%\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("\n");
}
fclose(fp);
}
voidChange()/*修改*/
{
FILE*fp;
inti,num,n;
intflag=0;
fp=fopen("student","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号书名作者名分类号出版单位出版时间价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(structStudent),1,fp)==1;i++)
{
printf("%6d%8s%8s%8s%8s%8s%\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
}
fclose(fp);
printf("请输入要修改的图书号:
");
scanf("%d",&num);
for(i=0;i<=MAX;i++)
if(stu[i].num==num)
{
printf("图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号书名作者名分类号出版单位出版时间价格\n");
printf("-----------------------------------------------------------\n");
printf("%6d%8s%8s%8s%8s%8s%\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("-----------------------------------------------------------\n\n");
n=i;
flag=1;
break;
}
if(flag==0)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("输入错误!
\n");
printf("请返回!
\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
return;
}
printf("\n\n\n");
fp=fopen("student","rb+");
fseek(fp,n*sizeof(structStudent),0);
printf("登录号书名作者名分类号出版单位出版时间价格\n");
scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);
fwrite(&stu[i],sizeof(structStudent),1,fp);
fclose(fp);
fp=fopen("student","rb");
printf("图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号书名作者名分类号出版单位出版时间价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(structStudent),1,fp)==1;i++)
{
printf("%6d%8s%8s%8s%8s%8s%\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);;
}
printf("-----------------------------------------------------------\n\n");
fclose(fp);
}
5.操作方法(流程)
第一步:
双击打包好的.exe程序,打开程序。
第二步:
根据窗口提示内容作出选择。
第三步:
根据弹出的二级菜单作出选择。
第四步:
根据所选内容进行相应的操作。
第五步:
操作完毕,根据提示返回主菜单会直接退出该系统。
6.试验结果
A、图书信息录入:
数据输入:
数据输出:
B、图书信息浏览
输入数据:
数据输出:
C、图书信息查询
输入数据:
输出数据:
D、图书信息删除:
输入数据:
输出数据:
E、图书信息修改
输入数据:
输出数据:
F、系统退出
输入数据:
数据输出:
7.设计体会。
在这一周的程序设计实习当中并不是一帆风顺的。
刚开始到电脑面前听完老师讲了一大堆,我根本就不知道要做什么,用什么做。
我并没有被眼前的一点小困难所击倒,我相信困难总是有办法解决的。
于是开始的两天我就在网上找各种相关的文章、视频。
刚开始我就只是看着网上的东西照猫画虎的做一些小程序,慢慢的通过这些模仿我也渐渐的懂了一些东西。
通过两天的原始知识积累后,我开始尝试着按照自己的想法做了一些小系统。
起初会出现很多问题,不是这儿少了就是那错了。
在这样那样的错误中我明白编程是一件很严谨的事,容不得半点错误,一步走错,全盘皆输!
在出现错误时我通常是上网搜索相关的答案,听听大家的想法,往往一个问题的解决方法是多种多样的,各自有其精妙之处。
有的解决方法浅显易懂,但是易出现漏洞;有的复杂难懂,但是逻辑紧密,无丝毫破绽。
编程是一门逻辑的游戏,一但了解其游戏规则,便发现乐趣无穷。
有时候自己有很多的想法,但由于自己的水平有限不能很好地实现,每到那时候我就有一种强烈的愿望想要把问题解决,做出自己想的东西。
一但解决了问题,那种快乐非亲身经历者不能感受!
说实话,在网上虽然信息很多,但是会让人晕了头脑,做起来也不是那么容易的。
也许我的程序比起别人的来说可能会有些许不足,但是那个个代码都是出自我手,每一寸屏幕都是我自己的想法,都是我自己的。
我觉得不成功没关系,重要的是要有自己努力成功的心,而要成功光是抄袭别人的是不行的,得拿出自己的东西,自己的创新,要敢于尝试!
王杰七、附录
1.流程图
主页面:
信息录入:
信息浏览:
信息查询:
信息删除:
信息修改:
系统退出:
2.主要过程列表
A、程序开头定义:
#include<>:
#include是编译预处理指令,就是在编译前将这个文件里的函数都添加到你写的cpp文件中。
#include<>:
在编译前