图书馆管理系统课程设计C语言.docx
《图书馆管理系统课程设计C语言.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统课程设计C语言.docx(22页珍藏版)》请在冰豆网上搜索。
图书馆管理系统课程设计C语言
《高级语言程序设计》
课程设计报告
姓名:
学号:
专业:
电子信息科学与技术实验室:
设计时间:
2011年06月19日——2011年06月24日
评定成绩:
指导教师:
目录
一、课程设计的目的3
二、设计的内容与要求3
三、总体设计3
四、详细设计3
五、调试与测试3
六、课程设计的总结3
一、课程设计的目的
图书馆管理系统主要要求对图书信息的管理和对借书、还书的处理
图书管理信息采用文件保存,因而要提供文件的输入输出操作;要实现对图书基本信息的查询,则要提供查找操作办理借书或还书手续需要提供修改操作;另外还要提供键盘式选择菜单以实现功能选择。
其中对文件的保存主要包括:
图书名、图书编号、价格、作者、状态、借书人姓名、借书人性别、学号。
同时应实现对图书馆信息的保存和修改操作。
目的是通过此次课程设计,可以更进一步的了解结构体、函数调用、指针的用法、以及文件的操作等。
二、设计的内容与要求
设计中主要为满足图书借阅信息的处理,所以在设计中应做到可以轻松地对图书馆中信息的,读入、变动等的操作。
因此,要求对管理系统的模块划分明确,各模块之间,相互协调,又通过菜单实现各功能的分立
三、总体设计
整个系统分为:
信息录入模块、信息展示模块、图书信息查询模块、删除和修改模块、借书模块、还书模块等几个基本的功能模块。
各个功能模块之间通过一个菜单函数来进行相互跳转的操作。
四、详细设计
数据的组织描述(比如主要的变量类型,结构体等等),模块之间的参数设计(接口设计,模块的功能说明),系统控制流程图,各个模块的流程图,采用的算法
定义了图书的数据类型包括:
书名(字符型)、书号(字符型),价格(浮点型)、作者(字符型)、状态(整型)、借书人姓名(字符型)、性别(整型)、学号(长整型)。
以后的操作中都是实现对这些数据进行直接的操作。
函数之间通过菜单函数相联系。
主要的功能模块的联系通过以下的流程图说明:
主要功能的联系如下:
其中主函数在第一次使用时作为菜单使用对基本功能进行第一次调用,以后每完成一项功能后可以选择进入菜单进行功能选择,或者直接选择退出,也可以进入菜单后选择退出。
各个模块的分析:
1.主函数:
主要运用开关语句,从键盘上读入一个数字进入特定的功能。
2.数据录入的功能模块,流程图如下:
先用scanf语句在键盘上读入一个数,做为此次录入书得本数,用fopen语句打开book.txt文件用如下语句判断是否打开了文件if((fp=fopen("book.txt","a"))==NULL)则未打开文件,此时新建一个,接下来将数据写入,写入后判断文件是否成功写入,若未写入,则给出提示,最后关闭文件,返回菜单函数。
3.查找功能的实现,流程图如下:
查询功能的实现主要使用的是字符串比较的命令strcmp运用循环语句逐个判断输入的要查询的书名与记录中的书名,找到相同的书名即字符串相等时,输出该图书的信息,否则输出不存在这本书,紧接着进入“继续”还是“返回”的选择,若选择继续,则继续执行循环语句在查找,选返回则回到菜单界面。
(用do……while……语句实现)
4.浏览全部的模块。
该模块最简单,直接用for语句将所有图书信息输出到屏幕,输出后返回菜单界面。
5.删除与修改模块,流程图如下:
这个功能划分为一个功能模块,有两个主要函数组成,用开关语句进行调用,这两个函数很相似,都要求打开文件先输入要修改或删除的书名,然后用strcmp函数进行字符产比较来定位要改变的内容,定位好后将该条记录显示在屏幕上等待确认,删除函数是将所有数据用“空字符”代替(用到字符串拷贝命令),修改则是用从键盘上读入的字符代替原字符,其中修改函数用开关语句来允许对部分数据或者全部数据进选择性的修改。
修改后都增加了提示,询问是否修改若选“是”,则将修改后的内容保存在文件中,然后退出,选择“否”则直接退出功能不写入文件中。
6.借书功能,其基本流程如下:
N
Y
借书功能和修改功能相似,都是先将要借的书在文件中找用字符比较的方法在文件中查找,如果存在记录借阅人信息并存在文件中,并提示借阅成功,如果不存在,则要求重新输入。
借阅完成后返回菜单界面。
7.还书功能,具体流程图如下:
还书也是先用strcmp函数找到对应的记录,找到则进行还书操作,否则重新查找,还书时,确定后自动将图书状态改为可借,并将原借书人的信息删掉,并提示还书成功,最后返回菜单函数
五、调试与测试
1.在开始的设计中由于没有定义好数据的类型,将价格定义为了整型,导致在输入价格时带有小数点时在浏览数据时出现乱码。
2.在做好原程序后,编译时提示***函数未定义,查看时却已经定义,最后将所有函数在主函数前声明,问题解决。
3.在调试过程中,前一个程序忘记关闭,接着进行编译,提示出错,关闭以前的程序后问题解决。
4.在编写的时候出现中英文切换后,用中文的标点进行编写导致出错,查到后改掉,程序运行正常。
六、课程设计的总结
这次C语言的课程设计,我的最大的感触就是确实学到了许多东西,有许多东西都是逼出来的,原本很多不会的内容有些无从下手,在拿到任务之前也没有系统的做过一次作品,所以刚开始的时候有些无从下手,后来在网上看了很多的类似的程序,并结合老师给的例子,加上反复的看课本最后才动手编写,开始时错误百出,后来逐步修正。
通过本次课程设计,自己C语言编程的能力有了提高,特别是在文件、指针、数组、函数和结构体方面有了很大提高,另外还学习了课本没有讲到的知识,学会了使用模块化编程的简单方法,另外在对话框的编程要求美观、方面也有了体会。
循环是C语言的重要方法,也是本程序的灵魂,它在本程序中既有“穿针引线”的作用,也起到了对数据进行分析、存贮、读取等重要的作用,本程序在使用循环过程中对循环进行了多方法的应用也是一个“亮点”,它使程序变得结构合理,通俗易懂,也降低了程序的难度。
以后要对这种方法进行深刻的体会。
数组在程序中有着很重要的作用,对数据的贮存、输入、读取起着很重要的作用,本程序几乎所有数据都以数组进行输入、贮存、读取方便了对数据的处理和输入,数组的的使用在本程序中有很大的好处。
函数是实现模块化编程的基础,它使程序变得方面易懂,对修改起了很大作用,降低了编程的难度,一个函数就是一个功能,它使各个功能之间有了一定的独立性,但也有了一定的联系性,一个函数的错误,不会导致整个程序的失败(主函数除外),对函数的良好应用时在本程序中又以深刻的体会,有了很大提高。
结构体的使用,为本程序提供了很大方便,也提高了程序的可读性,结构数组方便了对数据的管理。
文件的读取与存贮使数据可以保存下来,这一节学的不是很好,在开始时遇到了不小的困难,但前期的准备工作做的还好,最终克服了。
另外、感觉到在做C语言作业时编的程序是那样的简短(都不足1k)、儿现在自己编写的程序变大了,需要在编程方面进一步提高,同时提高了自己对编程的兴趣,使自己对编程有了更深的理解,体会到编程的乐趣。
参考书目:
[1]谭浩强,《C语言程序设计》(第四版)[M],清华大学出版社,2008年
附:
在编写本程序时,在网上寻找的参考程序起到了很大的启发与参考作用。
附录:
(源代码)
#include
#include
#include
#defineSTUstructBook
#defineSIZE100
voidwrite();
voidsearch();
voidread();
voiddel();
voidfdel();
voidfmod();
voidborrow();
voidgback();
intload();
voidprintf_back();
voidsave(intn,STU*);
intmodify_data(int,int);
voidmenu();
STU{charname[20];/*图书名*/
charnum[20];/*图书编号*/
floatprice;/*价格*/
charauthor[20];/*作者*/
intstate;/*状态未借1;借出0*/
charloader[20];/*借书人姓名*/
intsex;/*性别男1;女0*/
longstn;/*学号*/
}book[SIZE];
voidmain()
{
intn,w;
do
{
puts("*****************************图书馆管理系统*************************\n\n");
puts("\t\t\t1.录入信息");
puts("\t\t\t2.浏览图书信息");
puts("\t\t\t3.图书信息查询");
puts("\t\t\t4.删除与改写信息");
puts("\t\t\t5.办理借书手续");
puts("\t\t\t6.办理还书手续");
puts("\t\t\t0.退出");
printf("选择功能(0~6):
[]\b\b");
scanf("%d",&n);
if(n<0||n>6)
{
w=1;
getchar();
}
elsew=0;
}while(w==1);
switch(n)
{
case1:
write();break;
case2:
read();break;
case3:
search();break;
case4:
del();break;
case5:
borrow();break;
case6:
gback();break;
case0:
exit(0);
}
}
voidwrite()
{inti,m,k,n;
FILE*fp;
n=load();
printf("要追加的记录个数:
\n");
scanf("%d",&m);
k=m+n;
if((fp=fopen("book.txt","a"))==NULL)
{
printf("\n无法打开文件\n");
}
for(i=n;i{
printf("请输入第%d本图书的信息",i-n+1);
printf("\n图书信息:
图书名编号价格作者状态借书人性别学号\n");
scanf("%s%s%f%s%d%s%d%ld",book[i].name,book[i].num,&book[i].price,book[i].author,&book[i].state,book[i].loader,&book[i].sex,&book[i].stn);
}
for(i=n;iif(fwrite(&book[i],sizeof(STU),1,fp)!
=1)
printf("文件写入错误!
");
fclose(fp);
printf_back();
}
voidsearch()
{inti,n,k,w1=1;
S