C语言课程设计图书管理系统课程设计报告.docx
《C语言课程设计图书管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计图书管理系统课程设计报告.docx(17页珍藏版)》请在冰豆网上搜索。
C语言课程设计图书管理系统课程设计报告
C语言课程设计
图书管理系统
BooksManagementSystem
学生姓名
张朝柱
学院名称
徐州工程学院
学号
20130566140
班级
13计转本
专业名称
计算机科学与技术
指导教师
李子龙
2016年
5月
10日
一、需求分析
为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。
使用c语言编写了图书管理系统。
本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。
实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。
所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。
图书信息包括编号、书名、作者、数量、在库状态等。
图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、借阅、还书等基本操作。
整个程序实现顺序表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。
二、算法设计:
1.设计思想:
整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。
进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。
在设计程序时,实现了程序的模块化、结构化。
在主函数中调用各种子函数,操作界面简单,易操作。
2,设计表示:
(1)、整个系统除了主函数外,另外还有各种功能子函数,利用无限次循环语句while()和选择语句swithch()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。
主要实现了图书的录入、存储、查询、借书、还书、显示库存等功能。
(2)、voidBook_Entering(structSqList&SL);这是一个录入图书信息的函数,它主要实现了顺序表的创建,并且在创建过程中从文件读取信息到顺序表中,以用于后面其他函数的操作。
它引用了一个顺序表SL。
其他函数调用时只需传入顺序表头即可。
(3)、intmain(void);这五个函数时整个图书管理系统的全部菜单函数,Book_Entering();为系统主界面,进入时可选择进入程序和退出程序。
menu1();为进入程序时显示的功能菜单,在此菜单可以选择录入、保存图书信息,也可选择进入其他子系统。
Book_Inquire();此菜单为进入图书管理系统的菜单,在此可以选择添加、删除、修改图书等操作。
cxmenu();为查询系统的菜单,在此可以选择按书名、编号、作者等方式进行查询图书。
jhmenu();为借书还书的子菜单,在此可以选择借书还书操作。
操作完成后按提示信息进行文件的保存操作。
(4)、voidBook_Inquire(structSqList&SL);这个函数为顺序表的输出函数,把顺序表的头传给函数后,可输出整个顺序表的所有信息。
、
(5)、voidBook_Borrow(structSqList&SL);这个函数为保存信息到文件的函数,使用时将顺序表的头传给函数,函数可将整个顺序表的所有信息存入到磁盘文件中。
并覆盖掉源文件,以便以后调用。
(9)、voidBook_Borrow(structSqList&SL)、voidBook_Return(structSqList&SL);这两个函数是借书还书的函数,在借还后系统会修改图书的在库信息。
调用时将顺序表参数带回到主函数。
并会出提示信息让用户返回菜单保存信息。
3.实现注释:
这个实用的小型图书管理程序程序以顺序表操作完成,并实现文件信息的录入和保存等功能,所有信息以磁盘文件方式保存,方便用户使用。
实现了图书管理的基本功能,包括了图书的录入、存储、查询、添加、删除、修改、借书、还书等功能。
查询时可按书名、编号、作者等方式查询,找到后输出这本书的所有信息。
在添加图书信息后,还增加了顺序表排序操作,并输出整个顺序表,方便用户检查信息。
可查询图书的在库状态,方便用户进行借书、还书操作。
在借书还书成功后图书的在库状态改变,并有提示信息让用户保存信息。
系统中主要的数据结构就是图书的信息,包含编号、书名、作者、出版社、出版时间、价格、在库状态等,在处理过程中各项可以作为一本图书的不同属性来进行处理。
4.结构体系设计:
图书管理系统主界面流程图
图书管理系统流程图
图书查询系统主界面流程图
图书借还系统主界面流程图
5.设计过程中的想法与程序中的不足:
作为学期末的一项课程,主要靠编出来的系统来考察我们所掌握的基本理论知识及实际解决问题的能力,通过这次c语言课程设计,很大程度上锻炼了我们写程序的动手能力和自主思考能力。
利用所学知识,开发小型实用的应用系统,掌握运用C语言编写调试应用系统程序,对于我们独立开发应用系统并进行数据处理的综合能力是一个很大的提高。
总的来说这个程序大致实现了题目的要求,但是这套程序仍然存在着很多的问题与不足。
比如,没有对界面进行操作,只是实现了简单的功能,程序写的有点繁琐,不是那么井然有序,条理清晰,程序注释也不是很完善,对信息处理功能还有些不足之处,提示信息不明确,对于数据的错误输入处理不是很完善等等。
这个系统主要是我自己编写的,同时也得到了老师和同学的一些帮助。
我在做系统的过程中也遇到了很多问题,有的是知识不足,有的是考虑不够周全,。
事实证明,只靠自己的知识面还是很窄,独立处理问题能力不是很强,以后还要加强对c语言的学习。
我认为对于C语言编写的程序来说,使用方法大致都是一样的,所以如果要改进的话,就是要改进一些算法,尽量把界面编写清楚,提示信息全面,方便易用。
三、用户手册:
下面,我大致介绍一下我的系统的主要功能和注意事项:
当运行此程序时,首先进入系统主界面,然后可以选择1.进入系统,2.退出系统。
选择1后进入系统,然后显示功能菜单按数字键选择所需服务。
功能菜单中,1录入所有书籍信息,2进入图书管理系统,3进入图书查询系统,4进入图书借还系统,5保存所有图书信息,6显示菜单,7返回上级菜单。
当出现"请选择"时,需要输入选项前的数字,输完之后按回车(下同)。
首次运行系统需要先选择1录入库存书籍信息,然后再选择其他操作。
当选择2时会进入图书管理系统,在这里可以选择添加、修改信息等操作,需要注意的是每次执行完添加、修改等操作后需要手动选择保存图书信息的操作,不然磁盘文件信息不会改变(下同)。
返回上级菜单进入图书查询系统、图书借还系统的操作和管理系统的差不多,用户可自己尝试使用,所有信息最后均以磁盘文件方式保存,而且格式固定,在输入和输出均按这种格式,用户在使用时必须要按这种格式输入,否则会出现文件信息错误。
四、调试与测试:
上机操作(截图)
系统主界面(选择数字进入相应的选项)
选择1进入系统,然后出现图书初始化菜单;
选择4进入查询系统,然后出现查询库存信息;
选择2输入图书编号,借书功能并且显示库存;
选择3输入图书编号,还书功能并且显示库存;
选择4进入查询系统,然后出现查询库存信息;
五、小节:
在这一个星期的实践中,通过编写这个图书管理系统,我体会到了c语言学习的实用性。
将理论和实践结合在一起,用先进的计算机工具方便人们的生活。
C语言程序的编写首先要从大局考虑,把自己编写整个程序的思想都写在草稿上,这样有助于自己编写程序,在编写时要完善注释,方便其他人理解程序。
编写的程序从理论上来说并没有错,但以上机就问题不断。
甚至有些课本上的知识照搬不变,也不能得到正确的结果。
有时一个程序改了一遍又一遍,但就是不能成功,编程显得枯燥乏味,看似简单的程序题,在调试时却屡屡出错。
经反复的修改后,结果正确了,这时所有的乏味都显得那么无力,一切都是值得的。
我认为,开发一套系统,最重要的是细心,并且思考要全面,结合实际,充分考虑到客户的需求和现实意义。
不管什么系统,只用运用到实际应用中,才具有先现实意义。
所以c语言程序的实用性很强,我们以后还要更加努力认真地学习编程语言。
参考文献:
[1]黄明等编著《C语言课程设计》北京:
电子工业出版社
[2]郭翠英编著《C语言课程设计案例精编》北京:
中国水利水电出版社
[3]宁正元《数据结构(c语言)》南京:
东南大学出版社。
2000年6月第1版
[4]严蔚敏等《数据结构(c语言版)》北京:
清华大学出版社,1997年4月第1版
[5]谭浩强编著《C程序设计题解与上机指导(第3版)》北京:
清华大学出版社
[6]谭浩强编著《C程序设计(第3版)》北京:
清华大学出版社
附录:
源程序代码
/**
*任务:
C语言课程设计
*班级:
13计转本
*学号:
20130566140
*姓名:
张朝柱
*实验时间:
2016-3-22
*本程序的功能是:
图书管理系统
*/
#include
#include
#include
#defineBOOKNUMBER5
#defineLIST_SIZE10//顺序表的初始大小
#defineADD_SIZE10//顺序表的增量
structSqList
{
structBOOK_SYSTEM*elem;//这种类型的起始地址
intlength;//顺序表中元素的个数
intlistsize;//顺序表的分配的空间大小
};
//采用结构体定义每本图书的编号,书的名称,书的作者,书的数量等信息。
structBOOK_SYSTEM
{
intbook_id;//编号
charbook_name[50];//名字
charbook_author[20];//作者
intbook_number;//数量
};
voidGUI_human_computer(void)//人机交互界面
{
cout<<"/**********************************************************************/"<cout<<"/**********************************************************************/"<cout<<"\t\t\t图书管理系统"<cout<cout<<"\t\t输入数字1:
\t初始化5本书的信息并保存到书库中\t"<cout<<"\t\t输入数字2:
\t借阅图书;并且显示图书库存的信息\t"<cout<<"\t\t输入数字3:
\t返还图书;并且显示还书后库存的信息\t"<cout<<"\t\t输入数字4:
\t查阅图书库存信息\t"<cout<<"/*********************************************************************************/"<cout<<"/*********************************************************************************/"<}
voidBook_Entering(structSqList&SL)//SL.elem->book_nameSL是顺序表的变量名;SL.elem是图书结构的顺序表头变量名
{
//intnumber;
inti=0;
cout<<"录入5本图书信息"<for(i=0;i{
cout<<"请录入第"<
编号书名作者数量):
";//因为数组的下标是从0开始
cin>>SL.elem[i].book_id;//cin>>SL.elem->book_id;//这样出现的错误是因为一直给第一个elem元素复制
cin>>SL.elem[i].book_name;
cin>>SL.elem[i].book_author;
cin>>SL.elem[i].book_number;
SL.length++;//书库中有几种书
}
cout<<"五本图书信心录入完毕!
"<}
voidBook_Borrow(structSqList&SL)//借书我个人认为就算借完,即库存为空的时候,这个书的编号还是应该存在的
{
inti=0,ID=0;
cout<<"请输入你所借书的编号:
";
cin>>ID;
for(i=0;i{
if((SL.elem[i].book_id==ID)&&(SL.elem[i].book_number>=1))//如果找到了所借书的编号
{
cout<<"成功提示:
找到图书!
"<cout<<"图书信息为:
";
cout<<<""<SL.elem[i].book_number--;
cout<<"成功提示:
借书成功!
"<cout<<"图书信息为:
";
cout<<<""<return;
}
}
cout<<"错误提示:
没有你所要借的图书!
"<}
voidBook_Return(structSqList&SL)
{
inti=0,ID=0;
cout<<"请输入你所还书的编号:
";
cin>>ID;
for(i=0;i{
if(SL.elem[i].book_id==ID)//如果是该书库的图书
{
cout<<"成功提示:
是本书库的书籍!
"<cout<<"图书信息为:
";
cout<<<""<SL.elem[i].book_number++;
cout<<"成功提示:
还书成功!
"<cout<<"图书信息为:
";
cout<<<""<return;
}
}
cout<<"错误提示:
你所还书籍不在本书库中!
"<}
voidBook_Inquire(structSqList&SL)
{
inti,ID;
cout<<"请输入你要查询图书的库存(图书的编号):
";
cin>>ID;
for(i=0;i{
if(SL.elem[i].book_id==ID)//如果是该书库的图书
{
cout<<"成功提示:
是本书库的书籍!
"<//cout<<"图书信息为:
";
//cout<//<<""<cout<<"该书的库存为:
"<return;
}
}
cout<<"错误提示:
您查询的书籍不在本书库中!
"<}
intmain(void)
{
structSqListSL;//SL表示顺序表的类型的变量名;
structBOOK_SYSTEMBook;//Book结构体类型名
SL.elem=NULL;
SL.elem=(structBOOK_SYSTEM*)malloc(sizeof(structBOOK_SYSTEM)*LIST_SIZE);//开辟10个structBOOK_SYSTEM这个类型的顺序表
if(SL.elem==NULL)
{
cout<<"错误提示:
内存申请失败!
"<return0;
}
else
{
SL.length=0;
SL.listsize=LIST_SIZE;
}
intcommand=0;//命令字变量
GUI_human_computer();
while
(1)
{
cout<<"请输入你要进行操作的命令字:
";
cin>>command;
switch(command)
{
case1:
Book_Entering(SL);//五本书的录入函数
break;
case2:
Book_Borrow(SL);
break;
case3:
Book_Return(SL);
break;
case4:
Book_Inquire(SL);
break;
default:
cout<<"错误提示:
命令字有误!
"<}
}
return0;
}