图书管理系统C语言课程设计.docx
《图书管理系统C语言课程设计.docx》由会员分享,可在线阅读,更多相关《图书管理系统C语言课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
图书管理系统C语言课程设计
合肥学院
计算机科学与技术系
课程设计报告
2012~2013学年第一学期
课程
C语言课程设计
课程设计名称
图书管理系统
学生姓名
学号
专业班级
指导教师
1、系统设计背景;
2、课程设计的需求分析:
3、系统设计的目的及具体要求;
4、算法设计;
5、用户手册;
6、调试及测试;
7、总结.
1、系统设计背景:
人类已经跨入了新世纪,正在进入信息化时代。
信息化浪潮、网络革命在给社会带来冲击的同时,也使图书馆业务受到了强烈的冲击,图书馆传统的管理和服务方式已不能适应读者对日益增长的文献信息的需求。
随着馆藏量的不断增加,图书资料的录入和查询的难度也就相应增加,数据处理手工操作,工作量大,出错率高,出错后不易更改的手工方式,已经不能满足要求。
基于此问题,建立一个规范化,系统化,程序化的图书管理系统迫不及待。
为方便对图书馆书籍的录入、修改、删除、借、还书等进行高效的管理,特编写程序以提高图书馆的管理效率。
使用程序之后,工作人员可以查询书籍的在库状态,删除或者修改某图书,可以全面掌握图书的流通情况等等。
2、课程设计的需求分析:
为了满足图书管理的要求,通过计算机技术给图书管理员和读者借书、还书带来便利。
使用C语言编写了图书管理系统。
本系统主要实现了图书信息管理的功能,通过此系统可以对图书馆库存图书信息进行管理和维护操作。
实现了图书馆内管理的一般功能,包括查询、删除、修改、图书信息等,所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。
图书信息包括编号、书名、作者、出版社、出版日期、价格等,图书信息的录入要求和显示要求是一定的规范要求,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。
3、系统设计的目的及具体要求:
(1)目的:
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C程序设计语言》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握结构化程序设计方法,熟悉面向过程程序设计方法。
(6)熟练掌握C语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
(2)课程设计名称及内容
课程设计名称:
图书管理系统
设计内容:
设计一个实用的小型图书管理程序,设计图书的索引卡片。
对图书的在库和借出状态要有所表示。
能提供读者信息查询及提供按图书的编号、书名、责任者、出版社等途径的检索。
(3)任务和要求
程序应提供的基本基本管理功能有:
1)添加:
即增加一本数的记录到系统中
2)存储:
即将图书信息保存在一个文件中。
3)装入:
即将文件中的信息读入程序。
4)查询:
可根据书名、编号查找书的相关信息,若找到显示该书全部信息。
5)修改:
可修改一本书的除书名外其它信息。
、
6)状态:
提供该书在库、不在库的状态。
四、算法设计:
1、系统设计思路:
整个系统制造的过程中,涉及了较多C语言的知识点,对于不同的数据类型、程序控制结构等作以分析。
(1)整个系统除了主函数外,另外还有各种功能的子函数,利用无限次循环语句while()和选择语句switch()实现了各个子函数的功能,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。
主要实现了图书的录入、存储、查询、删除、修改、借书、还书等功能;
(2)mbook():
这是一个图书结构体,可以描述每本书共同拥有的属性和行为,
(3)Save()、putin()、lookup()、del()、update()、search():
这几个是功能函数,Save():
保存一本书的信息,putin():
录入一本书的信息,search():
查询一本书的信息以及记录,update():
修改一本书的信息,del():
删除一本书的信息.
(4)Borrowbook()、returnbook(),这两个函数式借书的函数,在借还后系统会修改图书的在库信息,调用时将信息传递给函数,函数返回经过功能操作后,并会出提示信息让用户返回菜单保存信息。
实现注释:
这个适用的小型图书管理系统程序的所有信息以磁盘文件的方式保存,方便用户使用,实现了图书管理系统的基本功能,包括了图书的录入、图书的查询、图书的删除、图书的修改、图书的在库状态表示。
查询是可按书名、编号、作者、出版社、出版时间以及价格等方式查询,找到后系统会自动输出这本书的所有信息。
也可查询图书的在库状态,方便用户借书、还书操作,在借书或者还书成功后图书的在库状态即改变。
系统中主要的数据结构就是图书的信息,包含编号、书名、作者、出版社、出版时间、价格、在库状态,在处理过程中各项可以成为一本图书的不同属性来处理。
2、程序结构流程图:
图书管理系统
录
入
退
出
修
改
删
除
浏
览
查
询
3、设计表示:
(1)利用结构体typedefstruct{};将图书馆内的书籍共同拥有的属性和数量表达出来,属性中包括书号、书名、作者、出版社出版时间以及价格,属性中包括书的本数以及最大可储存的数量。
(2)分别写不同的子函数:
voidsave();
voidputin();
voidlookup();
voidsearch_by_name();
voidsearch_by_author();
voidsearch();
voiddel();
voidupdate();
首先利用voidsave()这个子函数来描述图书管理系统保存图书信息的功能,打开library.doc这个文件,确认文件可用时即可保存图书信息;voidputin()可方便图书馆工作人员录入新书,具体录入内容包括书号、书名、作者名、出版社、出版时间以及价格;利用1,0让工作人员可选择继续录入否;使用者可以通过voidlookup()这个子函数来查询图书馆所以书籍的在库状态,如果书籍不在即表示已经借出;如果使用者想要搜索自己想要的书,可以通过该书的各种属性进行查询,在该系统中我仅列举了两种属性即书名和作者,用户在输入想要找的书的书名或该书作者即可查询书的在库状态,如果该书尚在库,用户即可进行借出操作,同时也可以得到该书的其他属性,包括书名、作者、出版社、出版时间、价格;图书馆的工作人员在调整图书库时,如果想要删除某些书籍,即可利用voiddel()这个子函数来进行操作,输入想要删除的书籍的各种属性即可找到该书,任何进行删除操作;当然进行修改某本书的属性时也一样,只要通过书的编号找到该书即可进行各种不同的修改。
(3)最后在结尾编写主函数main(),在确认“library.doc”!
=NULL时进行图书管理系统的目录操作,在系统的主目录上,用户可以看到六个操作选项,包括图书信息录入、图书信息浏览、图书信息查询、图书信息删除、图书信息修改、退出图书管理系统。
在确认选项后即可进行下一步由各个子函数实现的不同操作。
(4)设计过程中的想法:
因为自身知识以及时间的所限,本系统所提供的功能非常有限,有一些图书馆所必备的功能没有实现,其中最重要的一点是对读者的管理,如果时间充足的话还可以加入,设置借书卡或会员证,对书籍的借出状况能有更好的储存,在工作人员想要找书时可以利用系统查询书籍的借者。
总的来说这个程序大致实现了题目的要求,但是这套程序仍然存在着很多的问题与不足,在提示信息方面可能还不够,有待改进。
5、用户手册:
下面,我大致介绍一下我得系统的主要功能和主要事项:
当运行该程序时,首先进入系统主界面,如何可以选择1.图书信息的录入2.图书信息的浏览3.图书信息的查询4.图书信息的删除5图书信息的修改0退出图书管理系统.当出现pleaseenterchoose:
时,需要输入选项前的数字,输入完之后按回车键。
首次运行系统时应选择1,录入一些书籍,在完成第一次的操作后,用户即可再回到系统进行其他选项的操作,不会出现cannotfind!
的错误提示,当用户选择2时系统会出现第一次录入的所有书的各种信息,包括书名、编号、作者、出版社、出版时间、价格;
当用户选择3时系统界面会出现提示,让用户选择想要查询书籍的编号,输入编号即可看到该书的各种不同属性;当用户选择4时系统也会给用户提示,让用户选择想要删除的书籍编号,当输入编号并确认后,该书就会在图书管理系统中删除;当用户选择5时系统也会给用户提示,让用户选择想要修改的书籍编号,输入完毕后,用户即可对该书的不同属性进行修改操作;返回菜单需按回车键即可。
6、调试及测试:
1.进入主菜单:
2.选择1录入3本书籍:
3.选择2浏览图书信息:
4.选择3查询图书:
5.选择4删除图书:
6.选择5修改图书:
7.选择0即可退出系统。
7.总结:
在这两个星期的实践中,通过编写这个图书管理系统,我体会到了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]明日科技编著《VisualC++程序开发范例宝典》北京:
人民邮电出版社。
[11]胡学钢等《数据结构算法设计指导》北京:
清华大学出版社,1999年第1版。
[12]刘大有《数据结构》(面向21世纪课程教材)北京:
高等教育出版社。
2001年6月第1版。
[8].胡学钢等《数据结构算法设计指导》北京:
清华大学出版社,1999年第1版。
原代码:
#include
#include
#include
typedefstruct
{
charnumber[10];//书号
charname[20];//书名
charauthor[20];//作者
charpublish[50];//出版社
chartime[20];//出版时间
floatprice;
}mbook;
typedefstruct
{
intcount;//书的本数
mbookbook[100];//最大可有100本书
}mlibrary;
mlibrarylibrary;
voidsave()//保存图书信息。
{
FILE*fp;
if((fp=fopen("library.doc","w"))==NULL)
{
printf("\n不能保存图书信息\n");
return;
}
fwrite(&library.count,sizeof(int),1,fp);
fwrite(library.book,sizeof(library.book[0]),library.count,fp);
}
voidputin()/*定义录入函数*/
{
inty=1;
system("cls");
while(y)
{
printf("\t请输入您的书籍的书号:
");
scanf("%s",library.book[library.count].number);
printf("\t请输入书名:
");
scanf("%s",library.book[library.count].name);
printf("\t请输入作者名:
");
scanf("%s",library.book[library.count].author);
printf("\t请输入出版社:
");
scanf("%s",library.book[library.count].publish);
printf("\t请输入出版时间:
");
scanf("%s",library.book[library.count].time);
printf("\t请输入该书的价格:
");
fflush(stdin);
scanf("%f",&library.book[library.count].price);
library.count++;
printf("\n是否继续录入(1.继续;0,退出录入):
");
fflush(stdin);
scanf("%d",&y);
if(y!
=1)
{
y=0;
break;
}
}
save();
}
voidlookup()
{
inti;
system("cls");
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(i=0;i{
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
fflush(stdin);
getchar();
}
voidsearch_by_name()/*定义按书名查询*/
{
inti;
chars2[20];
intflag=1;
printf("\n请输入要查询的书名:
");
fflush(stdin);
scanf("%s",s2);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(i=0;iif(strcmp(s2,library.book[i].name)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
if(flag)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
voidsearch_by_author()/*定义按作者名查询*/
{
inti;
chars3[20];
intflag=1;
printf("请输入要查询的书的作者:
");
fflush(stdin);
scanf("%s",s3);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(i=0;iif(strcmp(s3,library.book[i].author)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
}
if(flag)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
voidsearch()/*定义查询函数*/
{
inta;
system("cls");/*进行清屏*/
printf("\t\t******************************\n");
printf("开始查询\n");
printf("\t\t\t1---------------search_by_name\n");
printf("\t\t\t2---------------search_by_writer\n");
printf("\t\t\t0---------------exit\n");
printf("\t\t******************************\n");
printf("\t\t请选择你想要的查询方式:
");
flush(stdin);
scanf("%d",&a);
switch(a)
{
case1:
search_by_name();
break;
case2:
search_by_author();
break;
case0:
return;
}
}
voiddel()/*定义删除函数*/
{
inti;
charnumber[10];
system("cls");/*清屏*/
printf("\nPleasetypeinthenumberofthebookyouwanttodelete:
");
fflush(stdin);
scanf("%s",number);
for(i=0;i{
if(strcmp(number,library.book[i].number)==0)break;
}
if(i!
=library.count)
{
for(;i{
strcpy(library.book[i].name,library.book[i+1].name);
strcpy(library.book[i].number,library.book[i+1].number);
strcpy(library.book[i].publish,library.book[i+1].publish);
strcpy(library.book[i].author,library.book[i+1].author);
strcpy(library.book[i].time,library.book[i+1].time);
library.book[i].price=library.book[i+1].price;
}
library.count--;
}
else
printf("\ncannotfound!
\n");
save();
fflush(stdin);
getchar();
}
voidupdate()//修改图书信息
{
inti;
charnumber[10];
system("cls");/*清屏*/
printf("\nPleasetypeinthenumberofthebookyouwanttodelete:
");
fflush(stdin);
scanf("%s",number);
for(i=0;i{
if(strcmp(number,library.book[i].number)==0)
{
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);
break;
}
}
if(i!
=library.count)
{
mbookbook;
printf("\n\t\t请输入修改后此图书的信息\n");
printf("\t请输入图书号:
");
scanf("%s",book.number);
printf("\t请输入图书名:
");
scanf("%s",book.name);
printf("\t请输入作者名:
");
scanf("%s",book.author);
printf("\t请输入出版社:
");
scanf("%s",book.publish);
printf("\t请输入出版时间:
");
scanf("%s",book.time);
printf("\t请输入该书的价格:
");
fflush(stdin);
scanf("%f",&book.price);
strcpy(library.book[i].name,book.name);
strcpy(library.book[i].number,book.number);strcpy(library.book[i].publish,book.publish);
strcpy(library.book[i].author,book.author);
strcpy(library.book[i