图书借阅管理系统课程设计报告.docx
《图书借阅管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《图书借阅管理系统课程设计报告.docx(30页珍藏版)》请在冰点文库上搜索。
![图书借阅管理系统课程设计报告.docx](https://file1.bingdoc.com/fileroot1/2023-7/12/b42026d1-d4b8-42f0-8f69-3707aa28191e/b42026d1-d4b8-42f0-8f69-3707aa28191e1.gif)
图书借阅管理系统课程设计报告
课程设计报告
课程名称C语言程序设计
课题名称图书借阅管理系统
专业网络工程
班级1002班
学号************
姓名
指导教师唐北平、陈淑红、谭小兰
2011年6月30日
湖南工程学院
课程设计任务书
课程名称C语言程序设计
课题图书借阅管理系统
专业班级网络工程1002班
学生姓名
学号************
指导老师唐北平、陈淑红、谭小兰
审批
任务书下达日期2011年6月20日
任务完成日期2011年7月03日
一、设计内容与设计要求
1.设计内容:
⑴问题描述:
对一个有N本图书的图书馆,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理
。
⑵功能要求:
(1)、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:
书号、书名、作者、出版社、出版日期、单价、是否借出等。
(2)、本系统显示这样的菜单:
a.图书基本信息录入
b.图书基本信息显示
c.图书基本信息删除
d.图书基本信息修改
e.图书基本信息查询(按书号查询、书名等)
g.退出系统
(3)、执行一个具体的功能之后,程序将重新显示菜单。
2.设计要求:
掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。
1.设计正确,方案合理。
2.界面友好,使用方便。
3.程序精炼,结构清晰。
4.设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
5.上机演示。
6.按学号顺序选课题号,并在规定的时间内独自完成相关课题的C源程序编写、调整和运行。
源程序及编译生成各文件均保存在软盘中;
7.按本任务书的要求,按附录的要求编写《课程设计报告》(Word文档格式)。
并用A4的复印纸打印并装订;
二、进度安排
第18周星期一08:
00——12:
00
熟悉这次课程设计的目的和课程设计的要求,明确了解一些要用到的文件和调用函数等,然后再把整个程序设计的总体框架、流程图等构思出来,并进行上机程序设计。
星期二14:
30——18:
30
机房上机,在计算机上编辑源程序。
调试程序,在改正错误的同时不断完善程序,使源代码满足课程设计的要求和实现课程设计的要求和实现课程设计的基本功能。
星期三08:
00——12:
00
继续修改、编辑、调试程序。
不断改正错误后,要保证程序能成功编译成目标文件,链接成功成为可执行文件。
再运行能通过,这样才能算已经完成了本课题的基本功能。
之后,开始撰写课程设计报告。
星期四08:
00——12:
00
继续修改、编辑、调试程序。
第19周星期一08:
00——12:
00
继续修改、编辑、调试程序。
星期二14:
30——18:
30
答辩,检查课设报告
一、课题的主要功能..............................6
二、课题的功能模块的划分........................6
三、主要功能的实现..............................9
四、程序调试....................................12
五、总结........................................14
六、附件........................................15
七、评分表......................................24
一、课题的主要功能
为了方便管理员存存储新的图书,并便于及时的查找,插入信息以及删除输入信息,还能知道图书的价格,出版社,作者等等的信息,还可以帮助用户及时了解到图书是否被借出。
二、课题功能的模块划分
主要算法的设计:
(1)主函数的算法设计
图1:
--
(2)图书信息录入:
录入图书的书名,价格,出版社和作者
如图:
首先,从文件中调用函数读入函数,再输入要添加的书本数,然后添加图书信息,并保存。
(3)图书信息显示:
显示图书的基本信息:
如图:
首先,输出所有图书的信息,并输出图书记录数,然后调用辅助函数进行菜单选择,操作完成后返回主菜单。
(4)图书信息删除:
删除某些图书的资料;
(5)图书信息修改:
修改选定图书的资料;如图
首先,选择修改信息,输入要修改的书本号,再输入要要修改的选项及内容;若成功则否则调用报错函数。
(6)图书信息查询:
按书的编号、书名来查询图书的资料;
如图:
选择查询方式,1按书名查询,2按作者查询,然后定位,再调用输出函数;
退出系统:
查询完毕,推出此系统。
三、主要功能的实现
主函数:
利用无限次循环实现各函数的调用,系统根据输入的字母选项来调用相应的函数。
录入函数:
实现图书信息的录入。
如图:
、
查询函数:
实现对图书信息的查询
删除函数:
实现图书信息的删除;
修改函数:
允许对已录入的图书信息进行重新修改。
显示函数:
显示所有图书的信息。
退出函数:
退出系统
四、程序的调试
程序调试是指对程序的查错和排错。
为了便于查错、阅读,在设计该程序的时候我采用了结构化程序方法编辑,添加了尽可能多的注释,这为我后来的调试过程带来了很多方便。
在上机调试之前我对所编的程序作了纸面上的检查,先消灭一些低级错误,所谓的低级错误是指由于人为的输入不仔细等造成的,如{}没有搭配完整,漏写;号,拼写错误等,这些都是我们通过认真的态度在运行之前可以解决、避免的。
而且还可以减少机器时间。
往往一连串的错误是由于漏写或写错一个字符引起的。
经过仔细检查之后进行上机调试。
进行编译,如果在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,再进行编译……如此反复,直到顺利通过编译和连接为止。
在本次实习过程中碰到的编译、连接的错误主要有:
1、缺少变量定义,定义位置不正确;
由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到。
不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。
为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。
2、语法错误;
大多的语法错误在通过书本参考下能够修改。
主要是平时看书不仔细、不太注意而产生的。
如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。
这些语法错误有信息框的提示一般是能够排除的。
3、在注释的时候不能同我们平常做笔记一样随心所欲地爱写哪就写哪,这造成我最后本来已经编译成功的程序一下子又多了很多错误。
注释的时候,注释文字应写在一起中间不能有中断包含了c语言的语句,不然又引起错误格式不正确或是多了字符等。
这又让我学到了一点知识。
编译、连接的成功并不意味着程序的最终成功。
逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。
这种错误的查找是最难的,需要编程序的人有相当的耐心和细心去把问题找出来。
这也是本次程序编辑过程中碰到的最大的难题。
往往运行之后得不到另人满意的结果,此时解决的方法一则用“分段检查”的方法,在程序的不同位置设几个printf函数语句,输出有关变量的值,逐段往下检查,或用debug进行调试,对检查出的错误进行修改,当调试完毕将设置的printf都删去。
若在程序中找不到问题,则再来考虑算法是否逻辑严谨,再进行修改。
如此循环往复,直到最后程序运行成功。
在本次程序编辑过程中,我就是常遇到编译能通过,能够运行程序,但是总在输入、删除等操作完之后再想去看数据文件中存在的数据记录的时候,却一条记录也显示不出来,我怀疑是哪个对方对n变量的定义或使用出错了,于是在每个主要函数的操作过程中添加了printf语句用来显示n的变化,例如在执行某个函数前添加插入语句显示n的起始值,在执行完该个函数后再添加插入语句显示此时n的结果值,观察n的变化是否正确,如果错误了,也就说明该函数编写过程有错。
诸如这样的调试方法,不断缩小检查范围,最后将错误找到,进行修改。
所以到最后我找到了错误,及时改正,终于把程序完成了,一切功能显示正常。
以上是调试的全过程。
五、总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际动手能力的具体训练和考察过程.随着科学技术发展的日新日异,C语言已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握C语言的运用技术是十分重要的。
在科技高度发展的今天,计算机在人们之中的作用越来越突出。
而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。
在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理。
简单界面程序。
高级界面程序。
程序的添加修改。
用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的统一上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。
为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。
课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:
1.加深对课堂讲授内容的理解
课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用c语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。
即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。
只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。
通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。
但是在程序设计领域里这是一定要克服的传统的、错误的想法。
因为在这种思想支配下,可能你会想办法去"掩盖"程序中的错误,而不是尽可能多地发现程序中存在的问题。
自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。
2.熟悉程序开发环境、学习计算机系统的操作方法
一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。
所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。
通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。
同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
3.学习上机调试程序
完成程序的编写,决不意味着万事大吉。
你认为万无一失的程序,实际上机运行时可能不断出现麻烦。
如编译程序检测出一大堆错误。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。
开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。
程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。
有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。
通过这次为数不多的几天计算机实践学习,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,着对我们将来到社会工作将会有莫大的帮助。
同时它让我知道,只要你努力,任何东西都不会太难。
六、附件
#include
#include
#include
#include
#defineNsizeof(structbook)
#definePT"%-5d%10s%6s%6s%8s%3d\n",p->num,p->name,p->where,p->author,p->pub,p->count
structbook/*图书信息*/
{
intnum;/*书号*/
charname[10];/*书名*/
charwhere[10];/*出版日期*/
charauthor[15];/*作者*/
charpub[20];/*出版社*/
intcount;/*单价*/
structbook*next;
};
voidfind1(structbook*p0);
voidfind2(structbook*p0);
/*输出模块*/
voidprint(structbook*p0)
{
structbook*p;
system("cls");
p=p0->next;
printf("\n\n\t\t^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^");
printf("\n\n图书编号---图书名称---出版日期---作者---出版社---单价\n");
while(p!
=NULL)
{
printf(PT);
p=p->next;
}
getch();
system("cls");
}
/*输入模块*/
structbook*creat()
{
structbook*head,*p1,*p2;
inti=0;
head=p2=(structbook*)malloc(N);
head->next=NULL;
printf("\n\n\t\t录入图书信息");
printf("\n\t---------------------------------------");
while
(1)
{p1=(structbook*)malloc(N);
printf("\n请输入图书编号(书号为结束):
");
scanf("%d",&p1->num);
if(p1->num!
=0)
{
printf("\n\n书名作者出版社出版日期单价\n");
scanf("%s%s%s%s%d",p1->name,p1->author,p1->pub,p1->where,&p1->count);
p2->next=p1;
p2=p1;
i++;
}
else
break;
}
p2->next=NULL;
free(p1);
printf("\n\t\t----------------------------------------");
printf("\n\t\t%d种书录入完毕",i);
getch();
system("cls");
returnhead;
}
/*查找模块*/
voidfind(structbook*p0)
{
intv;
printf("1.按书名查找\n");
printf("2.按书号查找\n");
scanf("%d",&v);
switch(v)
{
case1:
find1(p0);break;
case2:
find2(p0);break;
default:
;
}
}
voidfind1(structbook*p0)
{
system("cls");
charname[10];
intflag=1;
structbook*p;
p=p0->next;
printf("请输入要查找的书名:
\n");
scanf("%s",&name);
for(p=p0;p;p=p->next)
if(strcmp(p->name,name)==0)
{
printf("\n\n图书编号---图书名称---出版日期----作者---出版社---单价\n");
printf(PT);
flag=0;
break;
}
if(flag)printf("\n暂无此图书信息\n");
getch();
}
voidfind2(structbook*p0)
{
system("cls");
intnum;
intflag=1;
structbook*p;
p=p0->next;
printf("请输入要查找的书号:
\n");
scanf("%d",&num);
for(p=p0;p;p=p->next)
if(p->num==num)
{
printf("\n\n图书编号---图书名称---出版日期----作者---出版社---单价\n");
printf(PT);
flag=0;
break;
}
if(flag)printf("\n暂无此图书信息\n");
getch();
}
/*删除模块*/
voiddel(structbook*p0)
{
system("cls");
charname[10];
intflag=1;
structbook*p;
p=p0;
printf("请输入要删除的书名:
\n");
scanf("%s",name);
while(p!
=NULL)
{
if(strcmp(p->name,name)==0)
{
p0->next=p->next;
free(p);
printf("\t该书资料已删除.");
flag=0;
break;
}
p0=p;
p=p->next;
}
if(flag)printf("\n\t无此图书信息。
");
getch();
system("cls");
}
/*录入模块*/
voidinsert(structbook*p0)
{
structbook*p;
system("cls");
p=(structbook*)malloc(N);
while
(1)
{
printf("\n请输入要录入的图书编号(书号为退出):
");
scanf("%d",&p->num);
if(p->num!
=0)
{
if(p0->next!
=NULL&&p0->next->num==p->num)/*找到重号*/
{
p=p->next;
free(p);
printf("\t该书已存在");
}
else
{printf("\n\n书名作者出版社出版日期单价\n");
scanf("%s%s%s%s%d",p->name,p->author,p->pub,p->where,&p->count);
p->next=p0->next;
p0->next=p;
printf("\t已成功录入.");
}
}
else
break;
}
getch();
system("cls");
}
/*修改模块*/
voidmodify(structbook*p0)
{
system("cls");
charname[10];
intflag=1;
intchoice;
structbook*p;
p=p0->next;
printf("请输入要修改的书名:
\n");
scanf("%s",name);
while(p!
=NULL&&flag==1)
{
if(strcmp(p->name,name)==0)
{
printf("\n\t请选择要修改的项:
");
printf("\n\t1.修改图书编号\n");
printf("\n\t2.修改图书出版日期\n");
printf("\n\t3.修改图书作者\n");
printf("\n\t4.修改图书出版社\n");
printf("\n\t5.修改图书单价\n");
scanf("%d",&choice);
switch(choice)
{
case1:
{printf("\n请输入新的图书编号:
");
scanf("%d",p->num);break;
}
case2:
{printf("\n请输入新的图书出版日期:
");
scanf("%s",p->where);break;
}
case3:
{printf("\n请输入新的图书作者:
");
scanf("%s",p->author);break;
}
case4:
{printf("\n请输入新的图书出版社:
");
scanf("%s",p->pub);break;
}
case5:
{printf("\n请输入新的图书单价:
");
scanf("%d",p->count);break;
}
}
printf("\n\t该项已成功修改。
\n\t新的图书信息:
");
printf("\n\n图书编号---图书名称---出版日期----作者---出版社---单价\n");
printf(PT);
flag=0;
}
p0=p;
p=p0->next;
}
if(flag)printf("\n\t暂无此图书信息。
");
getch();
system("cls");
}
/*读文件*/
structb