c语言课程设计图书馆管理系统课程设计.docx
《c语言课程设计图书馆管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《c语言课程设计图书馆管理系统课程设计.docx(57页珍藏版)》请在冰点文库上搜索。
c语言课程设计图书馆管理系统课程设计
C语言程序设计课程设计
题目图书馆管理系统
系(部)信息工程系
班级
姓名
学号
指导教师
2015年月日至月日共周
年月日
C语言程序设计课程设计任务书
一、设计题目、内容及要求
题目:
图书馆管理系统设计
内容:
本题目适合于学校图书馆的资料管理和检索。
要求程序实现分级管理,管理员可对图书和学生信息进行录入、查询、修改、输出、删除、插入、保存等操作。
要求:
程序结构合理、算法准确、语法正确,并生成可执行文件。
二、要求的设计成果(课程设计说明书、设计实物、图纸等)
1.课程设计说明书:
课程设计说明书1份,不少于2000字。
说明书中要包含需求分析、总体设计、详细设计以及主要的算法描述等内容。
2.源代码:
图书馆管理系统程序清单
三、进程安排
星期1():
完成需求分析和程序总体设计。
星期2():
完成数据录入、删除、修改、插入和浏览功能模块的设计。
星期3(7.8):
完成密码设置和数据检索模块,程序调试无误,生成可执行文件。
星期4(7.9):
撰写课程设计说明书初稿。
星期5(7.10):
提交课程设计说明书、程序和数据。
四、主要参考资料
[1]谭浩强,张基温.C语言程序设计教程(第3版)[M].北京:
高等教育出版社,2006
[2]吕凤煮.C语言基础教程——基础理论与案例[M].北京:
清华大学出版社,2005
[3]黄明、梁旭、万洪莉.C语言课程设计[M].北京:
电子工业出版社,2006
[4]郭宁,郑小玲.管理信息系统[M].北京:
人民邮电出版社,2006
[5]赵池龙,杨林,陈伟.实用软件工程[M].北京:
电子工业出版社,2006
指导教师(签名):
教研室主任(签名):
课程设计成绩评定表
出勤
情况
出勤天数
缺勤天数
成
绩
评
定
出勤情况及设计过程表现(20分)
课设答辩(20分)
设计成果(60分)
总成绩(100分)
提问
(答辩)
问题
情况
综
合
评
定
指导教师签名:
年月日
引言
图书馆管理系统的需求分析主要确定系统的主要功能,对系统进行概要描述,对系统的各个主要功能分别进行需求描述,目的是使软件在设计过程中尽量符合客户的需要。
图书馆管理系统是一个对学生和图书信息进行录入、查询、修改、输出、删除、插入、保存等操作的管理应用软件,用户可以对文件中存储的学生和图书信息进行查找和浏览。
该软件提供了一个简单的人机界面,管理员可以根据提示输入操作项并进行一系列对学生和图书的信息资料的管理操作
本系统主要应用结构化的设计思想实现学生和图书信息的增、删、改和查等典型管理功能。
各主要模块的数据均存储在文件中,因此包含对文件的读、写等基本操作。
在软件开发过程中应用了高级语言程序设计中的基本控制结构,如选择、循环、顺序结构。
系统的设计方法是结构化设计方法,采用C语言进行开发。
2总体设计
图书馆的信息管理和检索系统的需求分析主要确定系统的主要功能,对系统进行概要描述,对系统的各个主要功能分别进行需求描述,目的是使软件在设计过程中尽量符合客户的需要。
2.1系统概述
将程序整体进行模块化处理,使程序编译思路更加清晰,降低了编译程序的难度。
图书信息中包含学生姓名、性别、系别、班级、学号、借书时间、还书时间和图书的书名、作者、图书编号等基本信息,程序具有信息录入、删除、修改、浏览、检索和保存功能。
2.2功能需求
该软件提供了一个对图书和学生信息进行管理和查看的平台,给用户提供了一个简单友好的用户接口,功能需求如下:
2
通过已定密码进入对应管理目录,从而进行相应的操作功能。
2.2.2信息录入
根据提示输入学生的姓名、性别、系别、班级、学号和图书书名、作者、图书编号等信息要素。
2.2.3信息查询
使用者可以根据系统提示按学生姓名、系别、班级、学号查询学生信息或按图书书名、作者、图书编号查询图书信息。
2.2.4信息修改
使用者可以根据系统提示对系统中存在的学生的姓名、性别、系别、班级、学号、借书时间、还书时间和图书书名、作者、图书编号等信息进行修改。
2.2.5信息输出
可输出学生姓名,性别,系别,班级,学号和图书书名、作者、图书编号等信息。
2.2.6信息删除
可以删除系统中存在的学生信息和图书信息,学生信息包括姓名、性别、系别、班级、学号等信息,图书信息包括图书书名、作者、图书编号等信息。
2.2.7信息插入
可插入系统所需的学生和图书信息。
2.2.8信息保存
可将输入的学生和图书信息保存在制定的文件夹。
2.2.9退出系统
2.3系统功能结构图
图1、系统功能结构图
3详细设计
3.1主函数及主界面
在主函数中调用密码函数和zonghanshu两个函数,密码函数中运用do…while循环与if结构、字符串比较函数连用,达到验证密码的作用,又包含system(“cls”);进行清屏,在zonghanshu中通过switch…case结构达到调用菜单目录的功能。
do
{
printf("***************************************************\n");
printf("\n");
printf("★★★★★★★★请输入密码:
★★★★★★★★\n");
printf("\n");
printf("***************************************************\n");
gets(s2);
if(!
strcmp(s1,s2))
a=1;
else
{
a=0;
}
if(a==1)/*比较输入的密码str1和设定的密码str2,
输出"密码正确"。
*/
printf("密码输入正确\n");
elseif(a==0)
printf("对不起密码输入错误,请从新输入\n");
}while(a==0);
system("cls");
3.2zonghanshu流程图
图2、zonghanshu流程图
3.3添加模块
系统管理员通过此模块可以在原有记录的基础上随意的添加其他学生和图书信息,通过系统的提醒依次的录入所要记录的学生和图书的所有信息,可以添加多个信息,并且不需重新回到主界面,直接在系统的提示下进行再次输入。
do/*输入学生信息函数*/
{
printf("请输入第%d个学生的信息:
\n",i+1);
printf("姓名:
");
scanf("%s",&stu[i].name);
printf("\n");
printf("性别:
");
do
{
scanf("%s",&stu[i].sex);
if((strcmp(stu[i].sex,"man")!
=0)&&(strcmp(stu[i].sex,"woman")!
=0))
printf("您的输入不合法,请输入man或woman");
}while((strcmp(stu[i].sex,"man")!
=0)&&(strcmp(stu[i].sex,"woman")!
=0));
printf("\n");
……
i++;
printf("是否继续输入?
(Y/N)");
3.4查询模块
亦称检索模块。
如果信息太多查找起来很不方便,对此我们系统设计了查找模块,使用户可以很方便的找到自己需要的信息。
本模块可通过输入学生或图书的一部分信息进行查找,之后系统会显示其所有的信息。
输入信息不存在则显示请输入正确的内容。
inti;
……
scanf("%d",&i);
switch(i)
{
case1:
xingming();break;
case2:
xuehao();break;
case3:
jieshushijian();break;
case4:
huanshushijian();break;
case5:
xibie();break;
case6:
banji();break;
case7:
xingbie();break;
break;
3.5修改模块
考虑到有些信息可能会发生变动,该系统设置了修改模块,如果某个编号的信息发生变动,管理员可以通过此模块对该编号下的其他信息进行修改。
inti,item,j;
intm=1;
chars1[20],s2[20];
printf("修改前的信息:
\n");
for(i=0;i{
printf("姓名");printf("%s\n",stu[i].name);
printf("性别");printf("%s\n",stu[i].sex);
printf("借书时间");printf("%s\n",stu[i].j1);
printf("还书时间");printf("%s\n",stu[i].h2);
printf("系别");printf("%s\n",stu[i].department);
printf("班级");printf("%s\n",stu[i].cls);
printf("学号");printf("%s\n",stu[i].num);
printf("借书数量");printf("%s\n",stu[i].jie);
}
printf("\n");
printf("请输入要要修改的学生的学号:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].num,s1)==0)/*比较字符串是否相等*/
j=i;
printf("------------------------------------------------------\n");
……
printf("-----------------------------------------------------\n");
3.6输出模块
通过此模块用户可以看见所有系统中的学生或图书信息。
利用for语句的控制可以有效的对结构体中所录入的信息进行显示。
for(i=0;i{
printf("姓名");printf("%s\n",stu[i].name);
printf("性别");printf("%s\n",stu[i].sex);
……
printf("借书数量");printf("%s\n",stu[i].jie);
}
3.7删除模块
通过此模块用户可以删除系统中已无效的信息。
按指定字段删除,输入要删除的学生的相应信息,利用字符串比较函数对输入的信息与结构体存储的成员信息进行比对,若相等则利用for语句进行删除,若不相等则提示所要删除的信息不存在。
删除语句如下:
for(i=0;i{
if(strcmp(stu[i].num,s1)==0)
{flag=1;
for(j=i;jstu[j]=stu[j+1];
}
3.8插入模块
该模块的作用是插入学生或图书的信息。
inti,m;
FILE*fp;
charch;
printf("请输入要插入的学生的个数:
");
scanf("%d",&m);
if((fp=fopen("d:
\\filepath","w"))==NULL)
{
printf("\n保存失败!
");
exit(0);
}
for(i=0;i3.9保存模块
该模块的作用是保存输入的学生或图书信息到指定的文件夹中,管理员通过该模块可以把原始录入信息和修改后的信息保存到指定文件夹。
voidsave()/*保存数据函数*/
{
FILE*fp;
inti;
charfilepath[20],ch;
printf("输入要保存的文件路径:
");
scanf("%s",&filepath);
if((fp=fopen("d:
\\filepath","w"))==NULL)
{
printf("\n保存失败!
");
exit(0);
}
for(i=0;i{fprintf(fp,"%10s%5s%10s%10s%10s%10s%10s%10s",stu[i].name,stu[i].sex,stu[i].j1,stu[i].h2,stu[i].department,stu[i].cls,stu[i].num,stu[i].jie);
}
fclose(fp);
printf("按0返回主菜单\n");
ch=getch();
if(ch=='0')
{
system("cls");zonghanshu();
}
}
3.10退出系统
当对系统操作完成以后,想退出此操作只需在界面中选择退出系统模块的代号,系统就自动退出此次运行程序。
4、调试
经过系统的分析与设计后,就可以根据设计模型在具体的环境中实现系统,生成系统的源代码、可执行程序和相应的软件和文件,建立一个可执行的系统。
然后需要对系统送行测试和排错,保证系统符合预定的要求。
获得一个无错的系统实现,调试的结果将确认所完成的系统可以真正使用。
测试方法上使用以界面为基础的测试。
以界面为基础的测试仅仅依靠软件与其运行环境之间的接口来选择和产生测试资料,而不管软件的具体需求和具体实现细节。
本次测试通过模拟一次完整的查询过程,测试范围包括管理员的登录、学生和图书信息的录入、查询、修改、删除、插入等,并且对系统后台的管理功能进行了测试。
测试结果显示系统基本能够实现预期的功能,能够提供管理员对学生和图书信息的查找和修改等操作。
但是部分功能仍旧需要加强或者改进,如删除学生时将删除该学生的借书记录,该生未归还图书记录也将删除。
5总结
这次的C语言程序设计实习有效的培养了学生独立思考的能力,提高了学生的动手操作水平。
在具体操作中,巩固了这学期所学的C语言的理论知识,这也是实习的基本目的。
通过实际操作,学会了C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。
培养了学生独立思考问题的能力,提高了实际操作水平。
通过这次对图书馆管理系统的编译,我们了解了C语言程序设计的思想,我们的程序很实用,但它依然有许多不足之处,我所编译的程序容量有限,而且每次操作都要回到主界面,在这方面该系统还有待于进一步优化。
C语言是一种基础的计算机高级语言,具有功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,通过这次的C语言程序设计更加深刻的了解了C语言的好处和其可用性。
在这次课程设计中我也知道了自己的动手能力不强,有待于进一步提高。
在设计过程中不能够灵活得把书本上的知识与实际相结合,在同组同学的帮助、鼓励和配合下,最终我完成了此次课程设计的任务。
这也使我重新树立了自信心,相信自己可以做好,但是要扎实掌握理论知识,灵活运用。
总之,通过这次实习我认识到了自己许多不足之处,在今后的学习生活中,一定要勤于思考,扎实掌握理论知识,灵活运用课上所学。
参考文献
[1]谭浩强,张基温.C语言程序设计教程(第3版)[M].北京:
高等教育出版社,2006
[2]吕凤煮.C语言基础教程——基础理论与案例[M].北京:
清华大学出版社,2005
[3]黄明、梁旭、万洪莉.C语言课程设计[M].北京:
电子工业出版社,2006
[4]郭宁,郑小玲.管理信息系统[M].北京:
人民邮电出版社,2006
[5]赵池龙,杨林,陈伟.实用软件工程[M].北京:
电子工业出版社,2006
附录
程序清单:
#include
#include
#include
#include
#defineM3
#defineN3
voidzonghanshu();
voidpaixu();
structstudent
{
charname[20];
charsex[7];
charj1[30];
charh2[30];
chardepartment[20];
charcls[10];
charnum[20];
charjie[10];
}stu[M];
structtushu
{
charname[50];
charauthor[60];
charnum[20];
}tushu[N];
voidpass()
{
inta;/*密码函数*/
chars1[10]={"11"};
chars2[10];
do
{
printf("***************************************************\n");
printf("\n");
printf("★★★★★★★★请输入密码:
★★★★★★★★\n");
printf("\n");
printf("***************************************************\n");
gets(s2);
if(!
strcmp(s1,s2))
a=1;
else
{
a=0;
}
if(a==1)/*比较输入的密码str1和设定的密码str2,
输出"密码正确"。
*/
printf("密码输入正确\n");
elseif(a==0)
printf("对不起密码输入错误,请从新输入\n");
}while(a==0);
system("cls");
}
/***************************************************/
voidfun1()
{
inti=0;
charch;
intflag;
do/*输入学生信息函数*/
{
printf("请输入第%d个学生的信息:
\n",i+1);
printf("姓名:
");
scanf("%s",&stu[i].name);
printf("\n");
printf("性别:
");
do
{
scanf("%s",&stu[i].sex);
if((strcmp(stu[i].sex,"man")!
=0)&&(strcmp(stu[i].sex,"woman")!
=0))
printf("您的输入不合法,请输入man或woman");
}while((strcmp(stu[i].sex,"man")!
=0)&&(strcmp(stu[i].sex,"woman")!
=0));
printf("\n");
printf("借书时间:
");
scanf("%s",&stu[i].j1);
printf("\n");
printf("还书时间:
");
scanf("%s",&stu[i].h2);
printf("\n");
printf("系别:
");
scanf("%s",&stu[i].department);
printf("\n");
printf("班级:
");
scanf("%s",&stu[i].cls);
printf("\n");
printf("学号:
");
scanf("%s",&stu[i].num);
printf("\n");
printf("借书数量");
scanf("%s",&stu[i].jie);
printf("\n");
i++;
printf("是否继续输入?
(Y/N)");
ch=getch();
if(ch=='Y'||ch=='y')
flag=1;
if(ch=='N'||ch=='n')
flag=0;
}while(flag);
system("cls");
zonghanshu();
}
/*******************************************************/
voidxingming()/*按姓名查询*/
{
inti;
charName[30],ch;
do
{
printf("请输入您所要查询的姓名:
");
scanf("%s",Name);
for(i=0;i{
if(strcmp(stu[i].name,Name)==0)
{
printf("姓名");printf("%s\n",stu[i].name);
printf("性别");printf("%s\n",stu[i].sex);
printf("借书时间");printf("%s\n",stu[i].j1);
printf("还书时间");printf("%s\n",stu[i].h2);
printf("系别");printf("%s\n",stu[i].department);
printf("班级");printf("%s\n",stu[i].cls);
printf("学号");printf("%s\n",stu[i].num);
printf("借书数量");printf("%s\n",stu[i].jie);
break;
}
}
if(strcmp(stu[i].name,Name)!
=0)
printf("对不起您所要查询的学生不存在。
");
}while(strcmp(stu[i].name,Name)!
=0);
printf("按0返回主菜单\n");
ch=getch();
if(ch=='0')
{system("cls");zonghanshu();}
}
/************************************************************/
voidxuehao()/*按学号查询*/
{
inti;
charnum[15],ch;
do
{
printf("请输入您所要查询的学号:
");
scanf("%s",num);
for(i=0;i{
if(strcmp(stu[i].num,num)==