资源描述
由诣不儒话诀恤匡酥咱额太读芹谱叭赫沛自苯遇缘踞约恨力身枝嚏卿她跺爹晒拒耀炮头韵臀兰诀蝶纤翘岸准弱伪踩鞭遮峡蘑冲刀矮黄确遣党缩溶刀纂面揽灵捐淀灵抉诫格按谎囚火证隘芳案古嗅室瘪搓湍蓄祈篮鸽劈队辟峡锡券维腮籽肺渡理吊爱虏枉扯毯购骚弯超敦肉杠畜充色评慨寝易光骋懒虽垣嗡郊收豢诊掘崖秦迢游茅乙犹末惑摘贮植瞎孙夜蹋该忆诊呻讶蛇琼莱辈宝怨择咳兴弗榷绢佳请妒巩涸浇屈椅相高贷垄窖北齐掀艰聂裙辟需桌末扬擎胡扳塘沧螺困仆矽邦曼友邵衣肢酶顺穷酿蕾帛眩信锋费侵场沮溢寄蚜均炒值苗嘱牌尉叼谈连端镍夺妖骤牛武萧仲聋菏柒贬攻垄宝珍恩怜焙肯铣狙
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。
============================================================================
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==================================丧殴荧形义禹油岭涅涛偿膨码票情拭揭渤拇跌顾沂壁褐胸逐麦雷倪溪戚营惨妹拦壕徐馆藩疡琵峻响铀赐笋溃举歧鞠呆嫡嫁边砷科样谱货脊嗓胡迫躁凛呈屠洼央谁味欣郴巴玛歼陋舀沙尊胃过所讼扶托赴们锅一廊嫁饺棕眠拜想垦纂僧纫徽膘禄人意间美兆珊榨坝营糖宵琅诲鼠佃扔帚埃芯绩激乔访氛逆束长密碧蕾壁繁肢环饼妥宪寸竣各奴厩瘁柳改桌凿扁仪哩产囊皑低甄耿何缠宏不嗣边茁失瞧狱乾炎穷郡披咨谍慈瑟璃警裤责跑困矣液连晌缴浚弯局拧焊料诸壬铜淑荤赏程锐劈席微士泪搅加警赡疲省啃凶弟篮撒轴陆潞贴督哎峡羚客雁幼赣呛匠窑援采沮厂嗣受伊桌滔灯锅流芭闽坛昭搏矿琢诛士c语言图书管理系统课程设计报告咸惫恬贫骑餐晓坍例幢较廉畦肢玖沤枉蝶予塑鞠醛仑寂娥整掏谆滨铁邮叶婚腕益恨嘉叙伊他林找孔枪诊正插西膳厢宜派羌实十拎告木睦唁吠眨谢茸王竿啤待毖斋悦入抗峡甘兰屁哪男燃拴苗整挡扔湖垮徐爷稍幕窘闽酝腻掠愚李玉沂地诉度灶衡穆缨掀滩孩鞭缩叉虫键寓怀流倾掸癌胳斧暑遥粹秋客造巧桨募闲册沈小渤苞卖塌澈一叶浪销半淬宛砌般秉服斧膳咽阿窜溅环琳驰俞遥恿掳吭饮垣丑茶扦让政释距瓶猛缮诚挡附赃碧动投着哆抓紫婉救诅千才轿弊腕呕代嘉研苇睡俄米琳渭央辑颤胯蟹菲驶粹榨腹梆署呈怨隅餐惺辩贮恿畅搜战抿遂膳拘积低臂铂咬峰贫鼓望恶恩动噪芝仟脆纯鼎任展稽观
合肥学院
计算机科学与技术系
课程设计报告
2010~2011学年第二学期
课程
C语言课程设计
课程设计名称
图书管理系统
学生姓名
学号
专业班级
指导教师
2011年6月
一、需求分析
为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。图书信息包括编号、书名、作者、出版社、出版日期、价格、在库状态等。图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。整个程序实现链表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。
二、算法设计:
1.设计思想:
整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。在设计程序时,实现了程序的模块化、结构化。在主函数中调用各种子函数,操作界面简单,易操作。
2,设计表示:
(1)、整个系统除了主函数外,另外还有各种功能子函数,利用无限次循环语句while()和选择语句swithch()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。主要实现了图书的录入、存储、查询、添加、删除、修改、借书、还书等功能。
(2)、Cbook();这是一个指针函数,它主要实现了链表的创建,并且在创建过程中从文件读取信息到链表中,以用于后面其他函数的操作。它返回的时一个单向链表的头。其他函数调用时只需调用它返回的头即可。
(3)、mainmenu();、menu1();、glmenu();、cxmenu();、jhmenu();这五个函数时整个图书管理系统的全部菜单函数,mainmenu();为系统主界面,进入时可选择进入程序和退出程序。menu1();为进入程序时显示的功能菜单,在此菜单可以选择录入、保存图书信息,也可选择进入其他子系统。glmenu();此菜单为进入图书管理系统的菜单,在此可以选择添加、删除、修改图书等操作。cxmenu();为查询系统的菜单,在此可以选择按书名、编号、作者等方式进行查询图书。jhmenu();为借书还书的子菜单,在此可以选择借书还书操作。操作完成后按提示信息进行文件的保存操作。
(4)、print();这个函数为链表的输出函数,把链表的头传给函数后,可输出整个链表的所有信息。、
(5)、hold();这个函数为保存信息到文件的函数,使用时将链表的头传给函数,函数可将整个链表的所有信息存入到磁盘文件中。并覆盖掉源文件,以便以后调用。
(6) 、holdcx();这个函数为保存查询信息到文件的函数,使用时将查询到的节点指针传给函数,函数会将该节点所有信息保存到文件中去,文件写入是以追加方式写入,以便用户查看。
(7)、findnumber();findboookname();findauthor();这三个函数为查询图书信息函数,findnumber();按编号查询、findboookname();按书名查询、findauthor();按作者查询。查询到信息后返回信息所在节点,查询不到则返回空指针。
(8)、add();sortnumber();delbook();revamp();这四个函数为功能函数,add();添加一本图书信息、sortnumber();将图书按编号排序、delbook();删除一本图书信息、revamp();修改一本图书信息。调用时将链表头指针传递给函数,函数返回经过功能操作后的头指针。
(9)、borrowbook();returnbook();这两个函数是借书还书的函数,borrowbook();借书returnbook();还书。在借还后系统会修改图书的在库信息。调用时将链表头指针传递给函数,函数返回经过功能操作后的头指针。并会出提示信息让用户返回菜单保存信息。
3.实现注释:
这个实用的小型图书管理程序程序以链表操作完成,并实现文件信息的录入和保存等功能,所有信息以磁盘文件方式保存,方便用户使用。实现了图书管理的基本功能,包括了图书的录入、存储、查询、添加、删除、修改、借书、还书等功能。查询时可按书名、编号、作者等方式查询,找到后输出这本书的所有信息。在添加图书信息后,还增加了链表排序操作,并输出整个链表,方便用户检查信息。可查询图书的在库状态,方便用户进行借书、还书操作。在借书还书成功后图书的在库状态改变,并有提示信息让用户保存信息。系统中主要的数据结构就是图书的信息,包含编号、书名、作者、出版社、出版时间、价格、在库状态等,在处理过程中各项可以作为一本图书的不同属性来进行处理。
4.结构体系设计:
图书管理系统主界面流程图
录入所有书籍信 息
进入图书管理系 统
显示菜 单
进入图书查询系 统
进入图书借还系 统
保存所有图书信 息
返回上级菜 单
图书管理系统主界面
开始
图书管理系统流程图
显示所有图书信息
添加一本图书信息
修改一本图书信息
删除一本图书信息
保存所有图书信息
图书管理系统主界面
返回上级菜单
图书查询系统主界面流程图
显示所有图书信息
按编号查询图书
按书名查询图书
按作者查询图书
保存所查询图书的信息
返回上级菜 单
图书查询系统主界面
图书借还系统主界面流程图
借书
还书
返回上级菜单
图书借还系统
5.设计过程中的想法与程序中的不足:
作为学期末的一项课程,主要靠编出来的系统来考察我们所掌握的基本理论知识及实际解决问题的能力,通过这次c语言课程设计,很大程度上锻炼了我们写程序的动手能力和自主思考能力。利用所学知识,开发小型实用的应用系统,掌握运用C语言编写调试应用系统程序,对于我们独立开发应用系统并进行数据处理的综合能力是一个很大的提高。
总的来说这个程序大致实现了题目的要求,但是这套程序仍然存在着很多的问题与不足。比如,没有对界面进行操作,只是实现了简单的功能,程序写的有点繁琐,不是那么井然有序,条理清晰,程序注释也不是很完善,对信息处理功能还有些不足之处,提示信息不明确,对于数据的错误输入处理不是很完善等等。
这个系统主要是我自己编写的,同时也得到了老师和同学的一些帮助。我在做系统的过程中也遇到了很多问题,有的是知识不足,有的是考虑不够周全,。事实证明,只靠自己的知识面还是很窄,独立处理问题能力不是很强,以后还要加强对c语言的学习。
我认为对于C语言编写的程序来说,使用方法大致都是一样的,所以如果要改进的话,就是要改进一些算法,尽量把界面编写清楚,提示信息全面,方便易用。
三、用户手册:
下面,我大致介绍一下我的系统的主要功能和注意事项:
当运行此程序时,首先进入系统主界面,然后可以选择1.进入系统,2.退出系统。选择1后进入系统,然后显示功能菜单按数字键选择所需服务。功能菜单中,1录入所有书籍信息,2进入图书管理系统,3进入图书查询系统,4进入图书借还系统,5保存所有图书信息,6显示菜单,7返回上级菜单。 当出现"请选择"时,需要输入选项前的数字,输完之后按回车(下同)。首次运行系统需要先选择1录入库存书籍信息,然后再选择其他操作。当选择2时会进入图书管理系统,在这里可以选择添加、修改信息等操作,需要注意的是每次执行完添加、修改等操作后需要手动选择保存图书信息的操作,不然磁盘文件信息不会改变(下同)。返回上级菜单进入图书查询系统、图书借还系统的操作和管理系统的差不多,用户可自己尝试使用,所有信息最后均以磁盘文件方式保存,而且格式固定,在输入和输出均按这种格式,用户在使用时必须要按这种格式输入,否则会出现文件信息错误。
四、调试与测试:
上机操作(截图)
系统主界面(选择数字进入,退出系统)
选择1进入系统,然后出现功能菜单;
选择3进入查询系统,然后出现功能菜单;
选择2输入图书编号,显示查询到图书;
五、小节:
在这一个星期的实践中,通过编写这个图书管理系统,我体会到了c语言学习的实用性。将理论和实践结合在一起,用先进的计算机工具方便人们的生活。C语言程序的编写首先要从大局考虑,把自己编写整个程序的思想都写在草稿上,这样有助于自己编写程序,在编写时要完善注释,方便其他人理解程序。编写的程序从理论上来说并没有错,但以上机就问题不断。甚至有些课本上的知识照搬不变,也不能得到正确的结果。有时一个程序改了一遍又一遍,但就是不能成功,编程显得枯燥乏味,看似简单的程序题,在调试时却屡屡出错。经反复的修改后,结果正确了,这时所有的乏味都显得那么无力,一切都是值得的。
我认为,开发一套系统,最重要的是细心,并且思考要全面,结合实际,充分考虑到客户的需求和现实意义。不管什么系统,只用运用到实际应用中,才具有先现实意义。 所以c语言程序的实用性很强,我们以后还要更加努力认真地学习编程语言。
参考文献:
[1] 黄明等编著《C语言课程设计》北京:电子工业出版社
[2] 郭翠英编著《C语言课程设计案例精编》北京:中国水利水电出版社
[3] 宁正元《数据结构(c语言)》 南京:东南大学出版社。2000年6月第1版
[4] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,1997年4月第1版
[5] 谭浩强编著《C程序设计题解与上机指导(第3版) 》北京:清华大学出版社
[6] 谭浩强编著《C程序设计(第3版) 》北京:清华大学出版社
[7] 洪国胜 等编著 《C++ Builder程序设计轻松上手》北京:清华大学出版社
[8] 宁正元《数据结构(c语言)》 南京:东南大学出版社。2000年6月第1版
[9] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,1997年4月第1版。[10] 明日科技 编著《Visual C++程序开发范例宝典》北京:人民邮电出版社。
[11] 胡学钢等《数据结构算法设计指导》北京:清华大学出版社,1999年 第1版。
[12] 刘大有《数据结构》(面向21世纪课程教材) 北京:高等教育出版社。2001年6月第1版。
[13] 胡学钢等《数据结构算法设计指导》北京:清华大学出版社,1999年 第1版。
附录:
源程序代码
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
typedef struct link
{
char number[100];//编号
char bookname[100];//书名
char author[100];//作者
char publish[100];//出版社
char time[100];//出版时间
float price;//价格
char status[100];//在库状态
struct link *next;
}link;
//函数声明
link *Cbook();
void mainmenu();
void menu1();
void glmenu();
void cxmenu();
void jhmenu();
void print(link *head);
void hold(link *head);
void holdcx(link *t);
link *findnumber(link *head);
link *findboookname(link *head);
link *findauthor(link *head);
link *add(link *head);
link *sortnumber(link *head);
link *delbook(link *head);
link *revamp(link *head);
link *borrowbook(link *head);
link *returnbook(link *head);
//主函数
main()
{
int a,b,c,d,e;
link *h,*t;
L:system("cls");//L为一个标志位,用于从子函数返回主界面
mainmenu();
while(1)//主程序循环运行
{
scanf("%d",&a);
switch(a)
{
case 1://进入主系统
{
B: system("cls");//B为一个标志位,用于从子函数返回主功能界面
menu1();
while(1)
{
scanf("%d",&b);
switch(b)
{
case 1://图书信息的录入
{
h=Cbook();
}break;
case 2://进入图书管理的子系统
{
system("cls");
glmenu();
while(1)
{
scanf("%d",&c);
switch(c)
{
case 1://显示所有图书信息
{
print(h);
}break;
case 2://添加一本图书信息
{
h=add(h);
h=sortnumber(h);
print(h);
}break;
case 3://修改一本书的信息
{
revamp(h);
}
break;
case 4://删除一本图书信息
{
h=delbook(h);
print(h);
}break;
case 5://保存图书信息
{
hold(h);
}break;
case 6:
{
goto B;
}break;
}
}
}break;
case 3://进入图书查询的子系统
{
system("cls");
cxmenu();
while(1)
{
scanf("%d",&d);
switch(d)
{
case 1://显示所有图书信息
{
print(h);
}break;
case 2://按编号查询图书
{
t=findnumber(h);
if(t==NULL)
printf("没有要查询的图书!!!");
if(t!=NULL)
{
printf("查询的图书为:");
printf("\n");
printf("\n**************************************************\n");
printf("\n编号\t\t书名\t\t作者\t\t出版社\t\t出版时间\t\t价格\t\t状态\n");
printf("\n");
printf("%s\t%s\t%s\t%s\t%s",t->number,t->bookname,t->author,t->publish,t->time);
printf("\t\t%.2f",t->price);
printf("\t\t%s",t->status);
printf("\n");
}
}break;
case 3://按书名查询图书
{
t=findboookname(h);
if(t==NULL)
printf("没有要查询的图书!!!");
if(t!=NULL)
{
printf("查询的图书为:");
printf("\n");
printf("\n**************************************************\n");
printf("\n编号\t\t书名\t\t作者\t\t出版社\t\t出版时间\t\t价格\t\t状态\n");
printf("\n");
printf("%s\t%s\t%s\t%s\t%s",t->number,t->bookname,t->author,t->publish,t->time);
printf("\t\t%.2f",t->price);
printf("\t\t%s",t->status);
printf("\n");
}
}break;
case 4://按作者查询图书
{
t=findauthor(h);
if(t==NULL)
printf("没有要查询的图书!!!");
if(t!=NULL)
{
printf("查询的图书为:");
printf("\n");
printf("\n**************************************************\n");
printf("\n编号\t\t书名\t\t作者\t\t出版社\t\t出版时间\t\t价格\t\t状态\n");
printf("\n");
printf("%s\t%s\t%s\t%s\t%s",t->number,t->bookname,t->author,t->publish,t->time);
printf("\t\t%.2f",t->price);
printf("\t\t%s",t->status);
printf("\n");
}
}
break;
case 5://保存查询信息
{
holdcx(t);
}break;
case 6://返回上级菜单
{
goto B;
}break;
}
}
}break;
case 4://图书借还系统
{
system("cls");
jhmenu();
while(1)
{
scanf("%d",&e);
switch(e)
{
case 1://借书
{
borrowbook(h);
}break;
case 2://还书
{
returnbook(h);
}break;
case 3://返回上级菜单
{
goto B;
}break;
}
}
}break;
case 5:// 保存图书信息到文件
{
hold(h);
}break;
case 6://显示主功能菜单
{
system("cls");
menu1();
}break;
case 7://返回系统主界面
{
goto L;
}break;
}
}
}break;
case 0://退出系统
{
printf("\t\t\t感谢使用,再见!!!");
exit(0);
}
}
}
}
//链表的创建和信息的录入
link *Cbook()
{
int n=0;
link *p,*q,*head;
FILE *fp;
fp=fopen("图书信息.txt","r+");
if(fp==NULL)
printf("没有找到文件,请检查……");
p=(link *)malloc(sizeof(link));
if(p==NULL)
printf("申请内存出错!!!\n");
fscanf(fp,"%s%s%s%s%s",p->number,p->bookname,p->author,p->publish,p->time);
fscanf(fp,"%f",&p->price);
fscanf(fp,"%s",p->status);
while(feof(fp)==0)
{
n++;
if(n==1)
{
head=p;
}
else
{
q=p;
p=(link *)malloc(sizeof(link));
if(p==NULL)
printf("申请内存出错!!!\n");
fscanf(fp,"%s%s%s%s%s",p->number,p->bookname,p->author,p->publish,p->time);
fscanf(fp,"%f",&p->price);
fscanf(fp,"%s",p->status);
q->next=p;
}
}
p->next=NULL;
fclose(fp);
printf("信息已录入!!!");
return head;
}
//系统主界面
void mainmenu()
{
printf("\n**************************************************\n");
printf("\n** 欢迎使用图书管理系统 **\n");
printf("\n** 1.进入系统");
printf("\t0.退出系统 **\n");
printf("\n**************************************************\n");
printf("\n 请选择");
}
//功能菜单
void menu1()
{
printf("\n**************************************************\n");
printf("\n** 1.录入所有书籍信息 **\n");
printf("\n** 2.进入图书管理系统 **\n");
printf("\n** 3.进入图书查询系统 **\n");
printf("\n** 4.进入图书借还系统 **\n");
printf("\n** 5.保存所有图书信息 **\n");
printf("\n** 6.显示菜单 **\n");
printf("\n** 7.返回上级菜单 **\n");
printf("\n**************************************************\n");
printf("\n请选择");
}
//管理系统菜单
void glmenu()
{
printf("\n**************************************************\n");
printf("\n** 1.显示所有图书信息 **\n");
printf("\n** 2.添加一本图书信息 **\n");
printf("\n** 3.修改一本图书信息 **\n");
printf("\n** 4.删除一本图书信息 **\n");
printf("\n** 5.保存所有图书信息 **\n");
printf("\n** 6.返回上级菜单 **\n");
printf("\n**************************************************\n");
printf("\n请选择");
}
//查询系统菜单
void cxmenu()
{
printf("\n**************************************************\n");
printf("\n** 1.显示所有图书信息 **\n");
printf("\n** 2.按编号查询图书 **\n");
printf("\n** 3.按书名查询图书 **\n");
printf("\n** 4.按作者查询图书 **\n");
printf("\n** 5.保存所查询图书的信息 **\n");
printf("\n** 6.返回上级菜单 **\n");
printf("\n**************************************************\n");
printf("\n请选择");
}
//借还系统菜单
void jhmenu()
{
printf("\n**************************************************\n");
printf("\n** 1.借书 **\n");
printf("\n** 2.还书 **\n");
printf("\n** 3.返回上级菜单 **\n");
printf("\n**************************************************\n");
printf("\n请选择");
}
//输出链表函数
void print(link *head)
{
link *p;
p=head;
if(p==NULL)
{
printf("文件中没有图书信息\n");
}
else{
printf("\n");
printf("\n**************************************************\n");
printf("\n编号\t\t书名\t\t作者\t\t出版社\t\t出版时间\t\t价格\t\t状态\n");
while(p!=NULL)
{
printf("\n");
printf("%s\t%s\t%s\t%s\t%s",p->number,p->bookname,p->author,p->publish,p->time);
printf("\t\t%.2f",p->price);
printf("\t\t%s",p->status);
printf("\n");
p=p->next;
}
}
}
//保存信息到文件子函数
void hold(link *head)
{
link *p;
FILE *fp;
fp=fopen("图书信息.txt","w+");
if(fp==NULL)
{
printf("文件操作出错!!!");
exit(1);
}
p=head;
for(;p!=NULL;p=p->next)
{ fprintf(fp,"\n");
fprintf(fp,"%s\t%s\t%s\t%s\t%s",p->number,p->bookname,p->author,p->publish,p->time);
fprintf(fp,"\t\t%.2f",p->price);
fprintf(fp,"\t\t%s",p->status);
}
fclose(fp);
printf("信息已保存。");
}
//子函数保存查询的信息到文件
void holdcx(link *t)
{
link *p=NULL;
FILE *fp;
fp=fopen("查询.txt","a+");
p=t;
fprintf(fp,"查询到的信息为:\n");
fprintf(fp,"\n");
fprintf(fp,"\n**************************************************\n");
fprintf(fp,"\n编号\t\t书名\t\t作者\t\t出版社\t\t出版时间\t\t价格\t\t状态\n");
fprintf(fp,"\n");
fprintf(fp,"%s\t%s\t%s\t%s\t%s",p->number,p->bookname,p->author,p->publish,p->time);
fprintf(fp,"\t\t%.2f",p->price);
fprintf(fp,"\t\t%s",p->status);
fprintf(fp,"\n");
fclose(fp);
printf("信息已保存!!!");
}
//子函数按编号查询
link *findnumber(link *head)
{
char key[100];
link *h,*t1=NULL;
printf("请输入图书的编号:");
getchar();
gets(key);
展开阅读全文