c语言图书管理系统课程设计报告.docx
- 文档编号:24349735
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:36
- 大小:136.06KB
c语言图书管理系统课程设计报告.docx
《c语言图书管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《c语言图书管理系统课程设计报告.docx(36页珍藏版)》请在冰豆网上搜索。
c语言图书管理系统课程设计报告
沈航北方科技学院
课程设计说明书
课程名称c语言课程设计
教学部机械工程系
专业数控
班级B042111
学号B04211123
学生姓名田文
指导教师赵小磊_
2012年6月
链表实现图书信息操作
田文
系统设计方案6
4详细设计7
登录模块7
借书管理模块8
还书管理模块9
5调试与测试10
调试10
测试11
6结论12
结束语12
参考文献12
附录1-用户手册(另起一页)13
摘要
经过对程序设计题目的分析可知,整个程序的设计实现大致分为五个模块,其中每一个模块对应一个函数,他们的功能分别是:
图书信息输入函数input(),借阅图书函数(borrow),增加删除图书函数(adddelet),图书查询函数(search),以及归还图书信息函数(giveback)。
在这些函数当中,这四个函数的实现严格按照题目的要求。
1、图书信息输入函数主要功能是从键盘输入图书信息并将其写入文件中,作为图书馆的书库,以便对下面的函数进行运行,此函数是基础.
2、图书借阅函数主要借阅图书的功能和录入学生应该还书的时间;
3、图书归还函数主要实现借阅图书后,归还图书的功能,并把应该还书的时间和实际还书的时间进行比较过期时输出学生的信息,也是该程序的的一个重点
4、增加删除图书函数实现的功能是实现对图书的删除;
5、图书查询函数允许按照图书编号,书名,作者,出版社进行查询,并将查询信息输出;
6、退出函数该函数主要实现退出运行界面的功能.
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个图书记录都包含:
图书编号,名称,出版社,作者,现有数量和总量在程序当中,将图书记录类型定义为结构体类型,并把它写入d:
\\中,其他函数每次对图书记录的访问,其数据来源都是d:
\\文件,这样做不但可以保证图书数据的一致性,而且可以对图书数据进行永久保存,保证每次运行程序都可以采用原来的数据。
1绪论
整个程序的设计实现大致分为五个模块,其中每一个模块对应一个函数,他们的功能分别是:
图书信息输入函数input(),借阅图书函数(borrow),增加删除图书函数(adddelet),图书查询函数(search),以及归还图书信息函数(giveback)。
在这些函数当中,这四个函数的实现严格按照题目的要求。
2系统分析
功能需求
设计一个通过链表实现对图书信息进行管理的程序,要求完成以下功能:
1.建立一个链表,每个结点应包含以下信息:
图书号、书名及出版社、价格、ISBN、作者、册数;
2.将输入信息按图书号进行从小到大的排序;
3.实现查询功能——输入书名,查询输出相关信息;
4.实现插入功能——输入图书信息并插入有序链表中;
5.实现删除功能——输入书名或书号,可将其信息从链表中删除;
6.统计链表中图书总价值,并在屏幕上输出;
7.统计该链表中价值超过某一数目的图书总数,并在屏幕上输出。
8.有界面友好易于使用的菜单。
数据需求
需要向系统输入图书号、书名及出版社、价格、ISBN、作者、册数
性能需求
在运行本程序时只要按照正确的操作方法不会出现无法运行的情况,系统稳定性好,安全,可靠。
3总体设计
功能模块设计
根据分析整个系统主要划分为4个功能模块,分别执行要求中的功能。
该系统需要有添加,删除,查询,修改,累加,循环显示主菜单,保存信息功能,能将会员卡进行注销,利用显示函数将会员卡内所有信息显示。
要求有循环显示菜单工能。
功能模块图如图1所示。
(1)输入读者
输入相关读者信息至内存中;
(2)输入书籍
输入书籍号,对已存的书籍信息进行查询;
(3)书籍管理模块
输入相应代码,对相关信息进行查询;
(4)退出管理模块
主菜单中输入0退出系统登录;
图1图书管理系统流程图
图2管理员版图书管理系统流程图
图3图书查询主界面流程图
系统设计方案
设计一个总菜单,1登录信息,2查询管理,3书籍管理系统,4退出系统。
基本功能的实现都将体现在这几个菜单选项中。
structreader*next;
}RD;
BK*h_book;
RD*h_reader;
voidLogin();/*登陆*/
intMenu();/*主菜单*/
voidMenu_select();/*主菜单选择函数*/
voidInit();/*初始化*/
voidInit_reader();/*初始化读者*/
voidInit_book();/*初始化图书*/
voidInsert_New_Book();/*新书入库*/
intFind();/*查找菜单*/
voidFind_Select();/*查找菜单选择函数*/
voidFind_Reader();/*查找读者信息*/
voidFind_Book();/*查找图书信息*/
voidPrint_reader();/*打印读者信息*/
voidPrint_book();/*打印图书信息*/
voidBorrow_Book();/*借书函数*/
voidReturn_Book();/*还书函数*/
voidSave();/*保存信息*/
voidSave_Reader();/*保存读者信息*/
voidSave_Book();/*保存图书信息*/
voidLoad();/*加载信息*/
voidLoad_Reader();/*加载读者信息*/
voidLoad_Book();/*加载图书信息*/
voidLogin()/*登陆*/
{
system("cls");
printf("\n\n\n\t\t\t欢迎登陆本系统\n");
printf("\n\n\t\t系统版权所有\n\n\n\n\n\n\n");
printf("\n\n\n\t\t按任意键进入系统...");
getchar();system("cls");
}
intMenu()/*主菜单*/
{intsn;
printf("\n\t\t图书管理系统主菜单\n");
printf("=================================================\n");
printf("*\t0----退出系统*\n");
printf("*\t1----新书入库*\n");
printf("*\t2----查询*\n");
printf("*\t3----借书登记*\n");
printf("*\t4----还书管理*\n");
printf("=================================================\n");
printf("请选择相应代码:
");
4详细设计
登录模块
图4:
输入读者信息
图5:
输入书籍信息
借书管理模块
主菜单中输入读者和书籍信息后,对已存的书籍进行借阅,程序流程如图4所示。
图6借书模块流程图
还书管理模块
对于已还书籍进行管理,程序流程如图4所示。
图7还书模块流程图
5调试与测试
调试
调试是软件开发过程中的一个重要环节,也是最复杂,对软件开发者者来说也是最艰巨的任务。
调试的任务是及时改正测试过程中发现的软件错误。
具体地说,调试过程由两个步骤组成,它从表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。
然后仔细研究推断代码以确定问题的原因,并设法改正。
调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。
本系统调试过程中遇到问题、原因和解决方法如下面介绍。
(1)程序只能在当前运行时才能实现自动生成书籍信息,而关闭系统再次打开添加新读者又从0开始与之前的读者重复,导致借还信息程序管理混乱,无法正确运行。
原因:
在执行后系统没有记录当前的读者信息,因为读者信息自动按1、2、3、4依次递增生成系统;应该记录最后所生成的读者信息,在下次运行程序时系统会接着上次记录的读者信息自动依次生成。
(2)运行完程序一次有错误提醒
原因:
上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示,解决方法:
将上一次运行时的操作界面关闭。
(3)设计过程中的想法与程序中的不足
总的来说这个程序大致实现了题目的要求,但是这套程序仍然存在着很多的问题与不足。
比如,程序中主函数写的有点繁琐,有太多的嵌套,不是那么井然有序,条理清晰,程序注释也不是很完善,对信息处理功能还有些不足之处,提示信息不明确。
还有就是没能做到模糊查询。
这个系统主要是参照课本手机通讯录模版编写的,同时也得到了老师和同学的一些帮助。
我在做系统的过程中也遇到了很多问题,有的是知识不足,有的是考虑不够周全。
事实证明,只靠自己的知识面还是很窄,独立处理问题能力不是很强,以后还要加强对c语言的学习。
我认为对于C语言编写的程序来说,使用方法大致都是一样的,所以如果要改进的话,就是要改进一些算法,尽量把界面编写清楚,提示信息全面,方便易用。
测试
软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。
或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。
过度测试则会浪费许多宝贵的资源。
到测试后期,即使找到了错误,然而付出了过高的代价。
测试数据过程如下。
(1)登陆功能测试
输入数据1:
读者编号:
23,读者姓名:
tianwen,书籍编号:
01,书名:
xyz作者:
xxx,数量:
10
预期结果:
数据输入到系统中;
运行结果:
出现图书管理系统主菜单
说明:
登陆功能实现
(2)借书功能测试
。
。
。
(3)还书功能测试
。
。
。
6结论
计算机综合训练顺利完成,任务书中所提出的要求全部实现,可以对会员信息进行添加、修改、删除以及按各种信息查找,可将会员本次消费金额累加到会员卡上,能够自动生成会员卡号并且将各种信息保存到文本文件中。
不过这个程序还有些不够完善,例如:
在添加新会员时当会员信息全部输入之后系统中的全部会员信息自动显示,这样非常占用操作界面,使操作不是十分清晰;再一个就是系统无法正确识别身份证号和电话好码只能靠会员卡管理员的认真细心才能减少出错,改进方式:
调用一个可以判断号码位数的函数,如果输入位数不合法则提出警告重新输入。
结束语
在这一个星期的实践中,通过编写这个图书管理系统,我体会到了c语言学习的实用性。
将理论和实践结合在一起,用先进的计算机工具方便人们的生活。
C语言程序的编写首先要从大局考虑,把自己编写整个程序的思想都写在草稿上,这样有助于自己编写程序,在编写时要完善注释,方便其他人理解程序。
编写的程序从理论上来说并没有错,但一上机就问题不断。
甚至有些课本上的知识照搬不变,也不能得到正确的结果。
有时一个程序改了一遍又一遍,但就是不能成功,编程显得枯燥乏味,看似简单的程序题,在调试时却屡屡出错。
经反复的修改后,结果正确了,这时所有的乏味都显得那么无力,一切都是值得的。
我认为,开发一套系统,最重要的是细心,并且思考要全面,结合实际,充分考虑到客户的需求和现实意义。
不管什么系统,只用运用到实际应用中,才具有现实意义。
所以c语言程序的实用性很强,我们以后还要更加努力认真地学习编程语言。
参考文献
附录1-用户手册
点击运行,首先出现的是菜单界面,选择菜单选项进行操作,可进行如图8所示。
系统主界面(选择数字进入,退出系统)
图8菜单界面
选择1进入系统,然后出现功能菜单图9登陆功能;
输入读者和书籍,然后出现功能菜单;
图10图书管理系统主菜单
附录2-源程序
#include<>
#include<>
#include<>
#defineMax3
typedefstructbook
{
charbook_num[10];
charbook_name[20];
charbook_writer[10];
intbook_kc;
intbook_xy;
structbook*next;
}BK;
typedefstructborrow
{
charborrow_book_num[10];
charlimit_date[8];
}BO;
typedefstructreader
{
charreader_num[10];
charreader_name[10];
intright;
BOborrow[Max];
structreader*next;
}RD;
BK*h_book;
RD*h_reader;
voidLogin();/*登陆*/
intMenu();/*主菜单*/
voidMenu_select();/*主菜单选择函数*/
voidInit();/*初始化*/
voidInit_reader();/*初始化读者*/
voidInit_book();/*初始化图书*/
voidInsert_New_Book();/*新书入库*/
intFind();/*查找菜单*/
voidFind_Select();/*查找菜单选择函数*/
voidFind_Reader();/*查找读者信息*/
voidFind_Book();/*查找图书信息*/
voidPrint_reader();/*打印读者信息*/
voidPrint_book();/*打印图书信息*/
voidBorrow_Book();/*借书函数*/
voidReturn_Book();/*还书函数*/
voidSave();/*保存信息*/
voidSave_Reader();/*保存读者信息*/
voidSave_Book();/*保存图书信息*/
voidLoad();/*加载信息*/
voidLoad_Reader();/*加载读者信息*/
voidLoad_Book();/*加载图书信息*/
voidLogin()/*登陆*/
{
system("cls");
printf("\n\n\n\t\t\t欢迎登陆本系统\n");
printf("\n\n\t\t系统版权所有\n\n\n\n\n\n\n");
printf("\n\n\n\t\t按任意键进入系统...");
getchar();system("cls");
}
intMenu()/*主菜单*/
{intsn;
printf("\n\t\t图书管理系统主菜单\n");
printf("=================================================\n");
printf("*\t0----退出系统*\n");
printf("*\t1----新书入库*\n");
printf("*\t2----查询*\n");
printf("*\t3----借书登记*\n");
printf("*\t4----还书管理*\n");
printf("=================================================\n");
printf("请选择相应代码:
");
for(;;)
{scanf("%d",&sn);
fflush(stdin);
if(sn<0||sn>4)
printf("\n错误!
请重新输入:
");
elsebreak;
}
returnsn;
}
voidMenu_select()/*主菜单选择函数*/
{
for(;;)/*循环调用模式,保证能进行重复操作*/
{
switch(Menu())/*功能选择*/
{case0:
system("cls");/*清楚屏幕先前的显示内容*/
Save();
printf("\n\n\t文件保存成功!
\n");
printf("\n\n\t欢迎下次使用本系统!
\n");
getchar();
exit(0);
case1:
Insert_New_Book();break;
case2:
Find_Select();break;
case3:
Borrow_Book();break;
case4:
Return_Book();break;
default:
printf("\n错误!
");exit(0);
}
}
}
voidInit()/*初始化*/
{
Init_reader();
Init_book();
}
voidInit_reader()/*初始化读者信息*/
{
RD*p0;
inti;
printf("\n读者初始化开始,请输入读者信息..\n包括编号.姓名..\n");
p0=(RD*)malloc(sizeof(RD));
h_reader=p0;
printf("\n请输入读者的信息:
\n");
printf("ReaderNo.:
");/*输入读者编号(唯一)*/
scanf("%s",p0->reader_num);
printf("ReaderName:
");/*输入读者姓名(不唯一)*/
scanf("%s",p0->reader_name);
p0->right=0;
for(i=0;i { strcpy(p0->borrow[i].borrow_book_num,"0");/*所借图书直接置为0(即没有借书)*/ strcpy(p0->borrow[i].limit_date,"0"); } p0->next=NULL; printf("\n读者信息初始化完毕! 按任意键继续下一步操作..\n"); getchar(); system("cls"); } voidInit_book()/*初始化图书信息*/ { BK*p0; printf("\n图书初始化开始,请输入图书信息..\n包括编号.书名.数量..\n"); p0=(BK*)malloc(sizeof(BK)); h_book=p0; printf("\n请输入图书信息: \n"); printf("BookNo.: ");/*输入图书编号(唯一)*/ scanf("%s",p0->book_num); printf("BookName: ");/*输入图书名称*/ scanf("%s",p0->book_name); printf("BookWriter: ");/*输入图书作者*/ scanf("%s",p0->book_writer); printf("Number: ");/*输入图书数量*/ scanf("%d",&p0->book_kc); p0->book_xy=p0->book_kc;/*开始时图书现有量和库存量相等*/ p0->next=NULL; printf("\n图书信息初始化完毕! 按任意键继续下一步操作..\n"); getchar(); system("cls"); } voidInsert_New_Book()/*新书入库*/ { BK*p,*p0,*p1; p=p1=h_book; printf("\n新书入库模块...\n"); printf("\n请输入新书信息..\n包括书号.书名.数量..\n"); p0=(BK*)malloc(sizeof(BK)); printf("BookNo.: "); scanf("%s",p0->book_num); while(strcmp(p0->book_num,p1->book_num)! =0&&p1->next! =NULL) p1=p1->next; if(strcmp(p0->book_num,p1->book_num)==0)/*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/ { printf("\n此编号图书已存在! ! 直接入库! \n"); printf("Number: "); scanf("%d",&p0->book_kc); p1->book_kc+=p0->book_kc; p1->book_xy+=p0->book_kc; } else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/ { printf("BookName: "); scanf("%s",p0->book_name); printf("BookWriter: "); scanf("%s",p0->book_writer); printf("Number: "); scanf("%d",&p0->book_kc); while(p->next) { p=p->next; } if(h_book==NULL)h_book=p0;/*此处分两种情况,链表中没有数据,head直接指向p0处*/ elsep->next=p0;/*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/ p0->next=NULL; p0->book_xy=p0->book_kc; } printf("\n新书入库完毕! 按任意键继续下一步操作..\n"); getchar(); system("cls"); } intFind()/*查找菜单*/ { intsn; printf("\n\t\t信息查询菜单\n"); printf("=================================================\n"); printf("*\t0----返回上级\t*\n"); printf("*\t\t*\n"); printf("*\t1----查找图书2----查找读者\t*\n"); printf("*\t\t*\n"); printf("*\t3----打印图书4----打印读者\t*\n"); printf("=================================================\n"); printf("请选择相应代码: "); for(;;)/*循环调用模式,保证能进行重复操作*/ { scanf("%d",&sn); fflush(stdin); if(sn<0||sn>4) printf("\n错误! 请重新输入: "); elsebreak; } returnsn; } voidFi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 图书 管理 系统 课程设计 报告