资源描述
C语言课程设计
图书管理系统
Books Management System
学生姓名
张朝柱
学院名称
徐州工程学院
学号
班级
13计转本
专业名称
计算机科学和技术
指导老师
李子龙
5月
10日
一、需求分析
为了满足图书管理要求,经过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书管理系统。本系统关键实现图书信息管理功效,经过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理通常功效,包含查询、借书、还书、添加、删除、修改图书信息等。所设计系统以菜单方法工作,为用户提供清楚使用提醒,依据用户选择来进行多种处理,而且在此过程中能够尽可能兼容用户使用过程中可能出现异常情况。图书信息包含编号、书名、作者、数量、在库状态等。图书信息录入和显示要求有一定规范格式,录入图书信息用文件形式保留,并能够对其进行浏览、查询、借阅、还书等基础操作。整个程序实现次序表操作,对图书信息操作逐一地进行,一个图书信息更改不应影响其它图书统计。
二、算法设计:
1.设计思想:
整个系统制造而过程中,包含了较多C语言知识点,对于不一样数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合应用,在一定程度上做到了对所学知识融会贯通。深入加深、巩固了所学专业基础理论知识,培养了综合分析问题、处理问题能力。在设计程序时,实现了程序模块化、结构化。在主函数中调用多种子函数,操作界面简单,易操作。
2,设计表示:
(1)、整个系统除了主函数外,另外还有多种功效子函数,利用无限次循环语句while()和选择语句swithch()实现各个子函数调用,系统依据输入数字选项来调用对应函数,以实现对应功效。关键实现了图书录入、存放、查询、借书、还书、显示库存等功效。
(2)、void Book_Entering(struct SqList &SL);这是一个录入图书信息函数,它关键实现了次序表创建,而且在创建过程中从文件读取信息到次序表中,以用于后面其它函数操作。它引用了一个次序表SL。其它函数调用时只需传入次序表头即可。
(3)、int main(void);这五个函数时整个图书管理系统全部菜单函数,Book_Entering();为系统主界面,进入时可选择进入程序和退出程序。menu1();为进入程序时显示功效菜单,在此菜单能够选择录入、保留图书信息,也可选择进入其它子系统。Book_Inquire();此菜单为进入图书管理系统菜单,在此能够选择添加、删除、修改图书等操作。cxmenu();为查询系统菜单,在此能够选择按书名、编号、作者等方法进行查询图书。jhmenu();为借书还书子菜单,在此能够选择借书还书操作。操作完成后按提醒信息进行文件保留操作。
(4)、void Book_Inquire(struct SqList &SL);这个函数为次序表输出函数,把次序表头传给函数后,可输出整个次序表全部信息。、
(5)、void Book_Borrow(struct SqList &SL);这个函数为保留信息到文件函数,使用时将次序表头传给函数,函数可将整个次序表全部信息存入到磁盘文件中。并覆盖掉源文件,方便以后调用。
(9)、void Book_Borrow(struct SqList &SL)、void Book_Return(struct SqList &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语言)》 南京:东南大学出版社。6月第1版
[4] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,1997年4月第1版
[5] 谭浩强编著《C程序设计题解和上机指导(第3版) 》北京:清华大学出版社
[6] 谭浩强编著《C程序设计(第3版) 》北京:清华大学出版社
附录:
源程序代码
/**
* 任务:C语言课程设计
* 班级:13计转本
* 学号:0566140
* 姓名:张朝柱
* 试验时间:-3-22
* 本程序功效是:图书管理系统
*/
#include<stdio.h>
#include<iostream.h>
#include<malloc.h>
#define BOOKNUMBER 5
#define LIST_SIZE 10 //次序表初始大小
#define ADD_SIZE 10 //次序表增量
struct SqList
{
struct BOOK_SYSTEM * elem; //这种类型起始地址
int length; //次序表中元素个数
int listsize; //次序表分配空间大小
};
//采取结构体定义每本图书编号,书名称,书作者,书数量等信息。
struct BOOK_SYSTEM
{
int book_id; //编号
char book_name[50]; //名字
char book_author[20]; //作者
int book_number; //数量
};
void GUI_human_computer(void) //人机交互界面
{
cout<<"/**********************************************************************/"<<endl;
cout<<"/**********************************************************************/"<<endl;
cout<<"\t\t\t图 书 管 理 系 统"<<endl;
cout<<endl;
cout<<"\t\t输入数字1:\t初始化5本书信息并保留到书库中\t"<<endl;
cout<<"\t\t输入数字2:\t借阅图书;而且显示图书库存信息\t"<<endl;
cout<<"\t\t输入数字3:\t返还图书;而且显示还书后库存信息\t"<<endl;
cout<<"\t\t输入数字4:\t查阅图书库存信息\t"<<endl;
cout<<"/*********************************************************************************/"<<endl;
cout<<"/*********************************************************************************/"<<endl;
}
void Book_Entering(struct SqList &SL) //SL.elem->book_name SL是次序表变量名; SL.elem是图书结构次序表头变量名
{
//int number;
int i=0;
cout<<"录入5本图书信息"<<endl;
for(i=0;i<BOOKNUMBER;i++)
{
cout<<"请录入第"<<i+1<<"本书信息(格式:编号 书名 作者 数量):"; //因为数组下标是从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<<"五本图书信心录入完成!"<<endl;
}
void Book_Borrow(struct SqList &SL) //借书我个人认为就算借完,即库存为空时候,这个书编号还是应该存在
{
int i=0,ID=0;
cout<<"请输入你所借书编号:";
cin>>ID;
for(i=0;i<SL.length;i++)
{
if((SL.elem[i].book_id==ID)&&(SL.elem[i].book_number>=1)) //假如找到了所借书编号
{
cout<<"成功提醒: 找到图书!"<<endl;
cout<<"图书信息为:";
cout<<SL.elem[i].book_id<<" "<<SL.elem[i].book_name<<" "<<SL.elem[i].book_author
<<" "<<SL.elem[i].book_number<<endl;
SL.elem[i].book_number--;
cout<<"成功提醒: 借书成功!"<<endl;
cout<<"图书信息为:";
cout<<SL.elem[i].book_id<<" "<<SL.elem[i].book_name<<" "<<SL.elem[i].book_author
<<" "<<SL.elem[i].book_number<<endl;
return ;
}
}
cout<<"错误提醒: 没有你所要借图书!"<<endl;
}
void Book_Return(struct SqList &SL)
{
int i=0,ID=0;
cout<<"请输入你所还书编号:";
cin>>ID;
for(i=0;i<SL.length;i++)
{
if(SL.elem[i].book_id==ID) //假如是该书库图书
{
cout<<"成功提醒: 是本书库书籍!"<<endl;
cout<<"图书信息为:";
cout<<SL.elem[i].book_id<<" "<<SL.elem[i].book_name<<" "<<SL.elem[i].book_author
<<" "<<SL.elem[i].book_number<<endl;
SL.elem[i].book_number++;
cout<<"成功提醒: 还书成功!"<<endl;
cout<<"图书信息为:";
cout<<SL.elem[i].book_id<<" "<<SL.elem[i].book_name<<" "<<SL.elem[i].book_author
<<" "<<SL.elem[i].book_number<<endl;
return ;
}
}
cout<<"错误提醒: 你所还书籍不在本书库中!"<<endl;
}
void Book_Inquire(struct SqList &SL)
{
int i,ID;
cout<<"请输入你要查询图书库存(图书编号):";
cin>>ID;
for(i=0;i<SL.length;i++)
{
if(SL.elem[i].book_id==ID) //假如是该书库图书
{
cout<<"成功提醒: 是本书库书籍!"<<endl;
//cout<<"图书信息为:";
//cout<<SL.elem[i].book_id<<" "<<SL.elem[i].book_name<<" "<<SL.elem[i].book_author
// <<" "<<SL.elem[i].book_number<<endl;
cout<<"该书库存为:"<<SL.elem[i].book_number<<endl;
return ;
}
}
cout<<"错误提醒: 您查询书籍不在本书库中!"<<endl;
}
int main(void)
{
struct SqList SL; //SL 表示次序表类型 变量名;
struct BOOK_SYSTEM Book; //Book 结构体类型名
SL.elem=NULL;
SL.elem=(struct BOOK_SYSTEM *)malloc(sizeof(struct BOOK_SYSTEM)*LIST_SIZE); //开辟10个struct BOOK_SYSTEM 这个类型次序表
if(SL.elem==NULL)
{
cout<<"错误提醒: 内存申请失败!"<<endl;
return 0;
}
else
{
SL.length=0;
SL.listsize=LIST_SIZE;
}
int command=0; //命令字变量
GUI_human_computer();
while(1)
{
cout<<"请输入你要进行操作命令字:";
cin>>command;
switch(command)
{
case 1:Book_Entering(SL); //五本书录入函数
break;
case 2:Book_Borrow(SL);
break;
case 3:Book_Return(SL);
break;
case 4:Book_Inquire(SL);
break;
default: cout<<"错误提醒: 命令字有误!"<<endl;break;
}
}
return 0;
}
展开阅读全文