C课程报告图书管理系统Word文件下载.docx
- 文档编号:5744747
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:36
- 大小:342.72KB
C课程报告图书管理系统Word文件下载.docx
《C课程报告图书管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《C课程报告图书管理系统Word文件下载.docx(36页珍藏版)》请在冰点文库上搜索。
输入读者的编号,所借图书的书号,先判断姓名是否在文件”reader.dat”中,若有则将书号存入一张借书卡上(注:
初始时借书卡的信息都为零,借书后借书卡的信息改为所借书的书号),并修改文件”reader.dat”的相应内容,同时修改文件”book.dat”中此书的现存量.若”reader.dat”无此姓名,则应提示错误
(3)还书管理:
输入读者的编号,所还图书的书号,将借书卡的信息置为零,并修改文件”reader.dat”的相应内容,同时修改文件”book.dat”中此书的现存量.
四、输出全部图书信息和全部读者信息
五、退出系统.
2.2功能需求
本系统有新书入库,查询,借书管理,还书管理,保存信息功能,显示读者信息和图书信息,可以按书号实现图书查询。
2.3性能需求
在运行本程序时只要按照正确的操作方法就能正常运行,系统稳定性好,安全,可靠。
3.总体设计
3.1功能模块设计
根据分析整个系统主要划分为6个功能模块,分别执行要求中的功能。
该系统新书入库,图书查询,借阅管理,输出图书信息,输出读者信息,退出系
仔细阅读系统要求,首先将此系统化分为如下模块
1)新书入库模块:
可用一个函数insert_new_book(charbook_num[],charbook_name[],intnumber)来实现。
形参分别为:
书名,书号,以及有多少本书要入库,再根据要求将信息写入文件boot.dat中。
又由于最开始要输入三本新书,故可以加一个初始化函数init_book(),但是初始化函数只执行一次,也就是在系统第一次运行的时候执行,此时可以根据判断是否存在boot.dat这个文件来决定是否执行初始化函数.
2)查询模块:
可用一个函数voidfind_book(charbook_num[])来实现。
找到就输出此书全部信息,找不到就输出查找失败信息。
3)借阅管理模块:
(1)三个读者的信息可以在系统初始化时完成.即可用初始化函数init_reader()来实现对读者的初始化。
因为读者初始化函数也只是在系统第一次运行的时候执行一次,故也可以根据是否存在reader.dat文件来确定是否执行此函数。
(到现在可以发现在系统初始化函数里,至少已经需要调用两个初始化函数了)
(2)借书登记模块:
可用一个函数borrow_book(charreader_num[],charbook_num[])来实现。
在函数中要分别判断
A该读者的编号是否已经存在,如果不存在,则提示错误。
B该读者的借阅书是否已满(即最多只能借1本书)如果是,则提醒该用户先去还书
C输出的书号对应的书是否存在,如果不存在,则提醒读者不存在此书。
借书过程完成后,则对读者信息里的借书信息写上所借书号,并修改库存量。
(3)还书管理模块:
可用一个函数return_book(charreader_num[],
charbook_num[])来实现。
在实现此函数时要判断:
A该读者的姓名是否已经存在,如果不存在,则提示错误。
B该读者是否已经借阅此书。
如果没有,则提示错误。
C还书过程完成后,则对读者信息里的借书信息清零,并修改库存量。
(4)输出图书和读者信息:
可分别用模块print_book()和print_reader()来实现
直接从book.dat文件和reader.dat文件中读取信息并输出。
(5)退出系统:
可用一个函数exit()来实现。
首先将信息保存到文件,释放动态创建的内存空间,再退出此程序。
3.2系统设计方案
(1)菜单
设计一个总菜单,1、新书入库2、图书查询3、借书登记、4还书登记5、输出图书信息6、输出读者信息。
(2)数据结构
建立结构体如下:
图书类型:
typedefstructbk{
charbook_num[11];
/*书号采用10位编码最后1位为字符串结束标志(下同).*/
charbook_name[41];
/*书名规定不超过40个字母(20个汉字)*/
unsignedbook_kc,book_xc;
/*book_kc代表库存量,book_xc代表现存量*/
structbk*next;
}book;
读者类型:
typedefstructrd{
charreader_num[11];
/*读者编号采用10位编码*/
charreader_name[11];
/*读者姓名*/
charreader_book_num[11];
/*表示所借书号,初始值为“0”*/
structrk*next;
}reader;
(3)函数
定义了15个函数,都实现以下功能:
voidForm_Insert_New_Book();
/*新书入库菜单*/
voidForm_Find_Book();
/*查询图书菜单*/
voidForm_Borrow_Book();
/*借书菜单*/
voidForm_Return_Book();
/*还书菜单*/
voidFind_Book(char*);
/*查询图书*/
voidInsert_New_Book(char*,char*,int);
/*新书入库,即在链表中插入一个新节点*/
voidBorrow_Book(char*,char*);
/*借书,修改读者借阅信息和图书的现存信息*/
voidReturn_Book(char*,char*);
/*还书,修改读者借阅信息和图书的现存信息*/
voidprint_book(structbk*);
/*输出全部图书信息*/
voidprint_reader(structrd*);
/*输出全部读者信息*/
voidload_data();
/*从文件中读取数据,链表头指针指向第一个节点*/
voidinit_reader();
/*第一次运行程序时对三个读者的初始化*/
voidinit_book();
/*第一次运行程序时对三本图书的初始化*/
voidsave();
/*将链表中的信息保存到文件中*/
voidM_Form()/*主菜单*/
4.详细设计
4.1页面设计模块
此系统界面采用图形和数字化菜单设计。
主界面设计如下:
图书管理系统主系统
请选择相应的数字执行相应的功能:
0:
退出此系统
1:
新书入库
2:
图书查询
3:
借书登记
4:
还书管理
5:
输出全部图书信息和读者信息
各子界面如下:
1.新书入库界面:
10:
返回主菜单
11:
请输入新书名:
请输入新书号:
请输入新书数量:
(注:
新书入库成功后,程序返回到子界面1)
2.图书查询界面界面:
请选择相应的数字执行相应的功能:
20:
21:
请输入需要查询的书号:
图书查询完成后,返回到子界面2)
`3、借书登记界面:
30:
31:
请输入读者编号:
请输入所借书号:
借书过程完成后,返回到子界面3)
``4、还书管理:
40:
41:
还书登记
还书过程完成后,返回到子界面4)
5、输出全部图书和读者信息:
50:
51:
输出全部图书信息:
书号书名:
库存量现存量
52:
输出全部读者信息:
读者编号读者姓名所借书号
(注:
输出图书和读者信息后,返回到子界面5)
4.2主要功能模块
2、新书入库流程图
Y
根据数量修改库存
N
book.dat中增加此新
书,根据数量设置库存
3、图书查询程序结构图:
NY
4、借书登记程序结构流程图:
NN
YN
N
借书登记,修改book.dat
中的现存信息,reader.dat
中的借书卡信息Y
5、还书登记程序结构流程图:
N
Y
错误
正确
还书将读者信息借书卡清0
修改book.dat现存信息
N
6、输出读者和图书信息
图书
4.3保存模块
可执行文件book.dat、reader.dat,都存储在c:
文件夹下。
5.调试与测试
5.1调试
调试是软件开发过程中的一个重要环节,也是最复杂,对软件开发者者来说也是最艰巨的任务。
调试的任务是及时改正测试过程中发现的软件错误。
具体地说,调试过程由两个步骤组成,它从表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。
然后仔细研究推断代码以确定问题的原因,并设法改正。
调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。
本系统调试过程中遇到问题、原因和解决方法如下面介绍。
(1)程序在储存图书信息时只能一次存入,并且读取。
再次添加新的程序时将会把原来添加的图书信息覆盖。
原因时存储函数只能只写2进制文件不能追加填写2进制文件。
(2)运行完程序一次有错误提醒
原因是上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示,解决方法:
将上一次运行时的操作界面关闭。
(3)程序不能运行
程序运行到添加新图书时自动提示错误需要调试,其原因是指针指向的位置出现错误导致程序传参错乱无法运行,解决办法:
使程序进入调试状态在传参出现错误的位置一句一句查找传递的参数是否是你所希望的,如若不是就加以修正。
5.2测试
软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。
或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。
过度测试则会浪费许多宝贵的资源。
到测试后期,即使找到了错误,然而付出了过高的代价。
问题:
借书管理模块中,当正确输入存在的读者编号和所借的书的编号,系统进行判断时,提示不存在此读者。
解决办法及步骤:
1、一个个输出所有的读者的编号,检查文件中是否有此读者,发现有。
2、既然有此读者,那么检查循环判断是否有此读者的语句发现没有错
3、输出用于循环检查语句中的读者信息,发现乱码
4、仔细分析乱码的原因,最后发现是变量的类型错误,错将读者类型的结构体指针变量定义为了图书类型的指针变量。
6.结论
课程设计顺利完成,任务书中所提出的要求全部实现,可以对图书信息进行查询、借阅及各种信息查找,并且将各种信息保存到文本文件中。
不过这个程序还有些不够完善,例如:
没有删除、修改功能。
结束语
通过这次课程设计,我对复杂程序的开发有了一个深刻的认识,使我进一步明白了模块化思想在程序开发中的重要性。
两个星期的C语言综合课程设计实习终于顺利完成,在这期间真正的学到了一些经验,能够熟练的掌握一些C语言的编程思路,能够熟练的运用学到的函数,意识到编程并不是一件很简单的事情,知道学习编程必须亲自动手去做,只有自己做的程序才能找出错误,这样才能真正的达到目的。
当程序编写完成而且能够正常运行心里非常高兴,虽然这对于一名程序员来说可能非常简单,但对我来说,如果要想在编程方面能够有所发展的话,我面临的困难还很多,要继续加强,努力,达到一种较高的水平。
参考文献
[1]谭浩强.C语言程序设计(第三版).北京:
清华大学出版社2005
[2]高涛,陆丽娜.C语言设计.西安:
西安交通大学出版社2007.
[3]林碧英.C语言程序设计教程.北京:
中国电力出版社2006.
[4]王立武,陈艳,张宇,汪晔君.C语言程序设计.北京.清华大学出版社2009
附录1-用户手册
点击运行,首先是进入菜单选择界面,可进行如图1所示。
图1进入菜单选择界面
输入1回车进入新书入库功能系统,可进行如图2所示。
图2进入新书入库选择界面
输入1回车输入新书功能系统,可进行如图3所示。
图3进入新书入库选择界面
输入2回车进入图书查询功能系统,可进行如图4所示。
图4进入新书入库选择界面
输入1回车开始时图书查询系统,可进行如图5所示。
图5进入图书查询界面
输入3回车借书登记系统,可进行如图6所示
图6进入借书登记界面
输入4回车还书管理系统,可进行如图7所示
图7进入图书查询界面
输入5回车显示信息系统,可进行如图8所示
图8输出信息界面
附录2-源程序
#include<
stdio.h>
math.h>
string.h>
typedefstructbk{
charbook_num[11];
charbook_name[41];
intbook_kc;
intbook_xc;
structbk*next;
/*图书信息*/
typedefstructrd{
charreader_num[11];
charreader_name[11];
charreader_book_num[11];
structrd*next;
/*读者信息*/
structbk*h_book,*h_reader;
/*全局变量,分别为指向图书信息链表和读者信息链表的头指针*/
{charch;
printf("
\n图书管理系统主窗口"
);
\n0:
退出系统"
\n1:
新书入库"
\n2:
图书查询"
\n3:
借书登记"
\n4:
还书管理"
\n5:
输出全部信息"
do{/*此循环用来保证选择正确的数字键执行相应的功能*/
\n\n请选择相应的功能代码:
"
scanf("
%c"
&
ch);
fflush(stdin);
/*用于清除键盘缓冲区中的多余字符*/
}while(ch!
='
0'
&
ch!
1'
2'
3'
4'
5'
switch(ch)/*根据输入的字符进行选择执行相应的模块*/
{case'
:
exit(0);
case'
Form_Insert_New_Book();
break;
Form_Find_Book();
Form_Borrow_Book();
Form_Return_Book();
load_data();
print_book(h_book);
print_reader(h_reader);
M_Form();
default:
printf("
error\n"
}
}
voidForm_Find_Book()
\n图书查询功能模块,请选择相应的功能代码:
\n"
0:
返回到主菜单\n"
1:
do{
switch(ch)
/*选择0,则返回到上一级目录,即主菜单*/
{printf("
\n请输入需要需要查询的书的编号:
%s"
book_num);
Find_Book(book_num);
/*执行查询*/
Form_Find_Book();
/*查询完毕后继续返回到查询窗口,执行下一个查询*/
voidFind_Book(charbook_num[])/*查询图书模块,根据图书编号查询*/
{structbk*p;
p=h_book;
while(p!
=NULL&
strcmp(p->
book_num,book_num)!
=0)
p=p->
next;
/*此循环用于查找,如果在中间找到,则p就不可能到末尾指向空*/
if(p==NULL)printf("
\n\t此编号对应的图书不存在!
else{printf("
\n\t图书编号\t图书名\t库存量\t现存量\n"
%10s\t%10s\t%d\t%d\t\n"
p->
book_num,p->
book_name,p->
book_kc,p->
book_xc);
getch();
voidinit_book()/*初始化图书模块*/
{bookba[3];
FILE*fp;
inti;
\n系统即将进行初始化,图书初始化模块:
\n请分别输入三本书的书号,书名,数量(以空格隔开):
\n"
for(i=0;
i<
3;
i++)/*输入3本图书进行初始化*/
%s%s%d"
ba[i].book_num,ba[i].book_name,&
ba[i].book_kc);
i++){ba[i].book_xc=ba[i].book_kc;
}/*开始时库存=现存*/
if((fp=fopen("
book.dat"
"
wb"
))==NULL)/*建立新文件book.dat准备写入数据*/
不能建立图书文件,初始化失败!
请重新启动系统!
return;
i++)/*将初始化的3本图书写入文件book.dat中*/
{if(fwrite(&
ba[i],sizeof(structbk),1,fp)!
=1)
\写数据错误!
exit(0);
fclose(fp);
voidinit()
{intdrive=DETECT,mode=0;
initgraph(&
drive,&
mode,"
init_book
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程 报告 图书 管理 系统