c语言图书馆管理系统.docx
《c语言图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《c语言图书馆管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
c语言图书馆管理系统
题目:
C语言课程设计
——图书信息管理系统
内蒙古科技大学课程设计任务书
课程名称
C语言课程设计
设计题目
图书信息管理系统
指导教师
郝斌
时间
2015年1月4日
一、教学要求
1.巩固和加深学生对C语言课程的基本知识的理解和掌握
2.掌握C语言编程和程序调试的基本技能
3.利用C语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C语言解决实际问题的能力
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
图书信息管理系统包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
图书信息录入功能(图书信息用文件保存)--输入
图书信息浏览功能--输出
查询或排序功能:
(至少两种种查询方式)--算法
●按书名查询●按作者名查询
图书信息的删除与修改图书的借出与归还
三、设计要求及成果
1.分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)
2.写出详细设计说明(至少包括功能实现分析和模块流程图)
3.编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号)
4.设计完成的软件要便于操作和使用
5.设计完成后提交课程设计报告(请严格按照模板进行排版)
四、进度安排
第一天 选择课程设计题目,分析课题的要求
第二天 编程
第三天 编程及调试
第四天 写课程设计报告
第五天 提交课程设计报告(打印稿及电子稿)
五、评分标准
1.根据平时上机考勤、表现和进度,教师将每天点名和检查
2.根据课程设计完成情况,必须有可运行的软件。
3.根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。
六、建议参考资料
1.《C语言程序设计》,谭浩强,清华大学出版社
2.《C语言程序设计课程设计》,刘振安,机械工业出版社
第一章需求分析
1.1引言
随着计算机及网络技术的飞速发展,Internet/Intranet应用在全球范围内日益普及,当今社会正快速向信息化社会前进,信息系统的作用也越来越大。
图书馆在正常运营中总是面对大量的读者信息,书籍信息以及由两者相互作用产生的借书信息,还书信息。
随着图书的大量增加,其管理难度也越来越大,如何优化图书馆的日常管理也就成为一个大众化的课题。
数据处理手工操作,工作量大,出错率高,出错后不易更改。
当前图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。
如要对很长时间以前的图书进行更改就更加困难了。
因此图书管理信息化是发展的必然趋势。
用结构化系统分析与设计的方法,建立一套有效的图书信息管理系统,可以减轻工作,将工作科学化、规范化,提高了图书馆信息管理的工作质量因此根据图书馆目前实际的管理情况开发一套图书管理系统是十分必要的。
建立一个图书管理系统可以使图书管理工作规范化、系统化、程序化、避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书信息。
图书管理系统是一个对图书进行录入、删除、修改和查询的管理应用软件,管理员可以对文件中存储的图书进行查询和管理,了解图书的基本信息。
该系统充分利用计算机的功能实现对书籍管理的自动化控制,将会使图书馆管理工作大大减轻,方便友好的图形用户界面,简便的操作,完善的数据库管理,将会使图书馆信息管理系统极大限度地应用于现代化图书管理,成为图书管理人员的得力助手
1.2任务概述
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
图书信息管理系统包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
图书信息录入功能(图书信息用文件保存)--输入
图书信息浏览功能--输出
查询或排序功能:
(至少两种种查询方式)--算法
●按书名查询●按作者名查询
1.3数据描述
图1.3
1.4功能需求
图1.4
1.5性能需求
在运行本程序时只要按照正确的操作方法不会出现无法运行的情况,系统稳定性好,安全,可靠。
1.6运行需求
1.输入图书信息时按照“图书编号、书名、作者、出版日期、图书价格”的顺序输入。
2.以(0/1)形式判断时,只能用阿拉伯数字。
3.进入排序功能后,要想见排序信息,到主菜单下浏览信息。
1.7任务计划
1.样例输出和输入
图1.7.1
下面以上述据描述的数据为测试数据进行简单输入输出
图1.7.2查询界面
图1.7.3删除界面
第二章概要设计
2.1总体设计
图2.1
录入:
可以添加图书信息,依次输入编号、书名、作者、出版时间、出版社后,会提示是否继续添加。
浏览:
可以以表格形式输出所有图书信息。
删除:
输入欲删除图书后,会自动删除图书信息的记录内容。
查询:
可以选择用图书名字方式查询。
修改:
输入欲修改的书名后,再依次输入编号、书名、作者、出版时间、出版社即可完成修改。
2.2数据类型设计(或数据结构设计)
structbooks
{
chartsmc[12];
inttsbh;
floatdj;
charzz[12];
charczzt[12];
charxm[12];
charxb[12];
intxh;
}s[M];
以结构体数据类型输入数据。
2.3接口设计
函数名
函数格式//即函数首部
函数功能
intmain()
int
建立主界面
voidsr
void
输入函数
voidcx
Void
查询图书
voidsc
Void
删除图书
voidjs
void
借书图书
voidhs
Void
还书图书
voidtc
void
退出
表2.3函数列表
2.4运行界面设计
/*主函数.主菜单*/
intmain()
{
intsele;
flag=0;
sele=1;
voidsr();
voidcx();
voidsc();
voidjs();
voidhs();
voidtc();
voidjsh();
//system("tsgl");
printf("\n\n");
printf("******************************************\n");
printf("1:
输入2:
查询3:
删除\n");
printf("4:
借书5:
还书0:
退出\n");
printf("******************************************\n");
while
(1)
{
printf("\n\n请输入功能序号:
");
scanf("%d",&sele);
if(sele>=0&&sele<=5)
{
switch(sele)
{
case1:
sr();break;
case2:
cx();break;
case3:
sc();break;
case4:
js();break;
case5:
hs();break;
case0:
jsh();break;
}
if(flag)
break;
printf("\n\n");
printf("*****************************************\n");
printf("1:
输入2:
查询3:
删除\n");
printf("4:
借书5:
还书0:
退出\n");
printf("*****************************************\n");
}
else
{
printf("输入错误请再次输入|\n\n");
printf("\n\n");
printf("************************************\n");
printf("1:
输入2:
查询3:
删除\n");
printf("4:
借书5:
还书0:
退出\n");
printf("************************************\n");
}
printf("\n\n让任意键继续\n");
}
//wr_file();
}
第三章详细设计
3.1输入模块设计
voidsr()
{
intn,i;
N=0;
printf("可输入的书本数:
");
scanf("%d",&n);
N=n+N;
printf("请输入相关信息:
\n");
for(i=1;i<=n;i++)
{
printf("图书名称:
");
scanf("%s",s[N-n-1+i].tsmc);
printf("图书编号:
");
scanf("%d",&s[N-n-1+i].tsbh);
printf("单价:
");
scanf("%f",&s[N-n-1+i].dj);
printf("作者:
");
scanf("%s",&s[N-n-1+i].zz);
strcpy(s[N-n-1+i].czzt,"未借出");
strcpy(s[N-n-1+i].xm,"无");
}
}
3.2查找模块设计
voidcx()
{
inti,j[100]={-1},d,k,t=0;
charm[20];
printf("查询:
");
printf("1:
图书名称2:
图书编号");
printf("\n\n请输入查询选项:
");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:
");
scanf("%s",m);
for(i=0;iif(strcmp(m,s[i].tsmc)==0)
{
j[t]=i;
t=t+1;
}
}
elseif(k==2)
{
printf("请输入图书编号:
");
scanf("%d",&d);
for(i=0;iif(d==s[i].tsbh)
{
j[t]=i;
t++;
}
}
if(j[0]==-1&&t==0)
printf("没有找到!
\n");
if(j[0]!
=-1&&t!
=0)
{
printf("\t图书名称\t图书编号\t单价\t作者\t存在状态\t借书人姓名\t性别\t学号\n");
for(i=0;iprintf("\t%s\t%d\t%f\t%s\t%s\t%s\t%s\t%d",
s[j[i]].tsmc,s[j[i]].tsbh,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);
}
}
3.3删除模块设计
voidsc()
{
inti,d,k,t=0;
charms[20];
intja=-1;
printf("查询:
");
printf("1:
图书名称2:
图书编号");
printf("\n\n请输入查询选项:
");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:
");
scanf("%s",ms);
for(i=0;iif(strcmp(ms,s[i].tsmc)==0)
{
ja=i;
break;
}
}
elseif(k==2)
{
printf("请输入图书编号:
");
scanf("%d",&d);
for(i=0;iif(d==s[i].tsbh)
{
ja=i;
break;
}
}
printf("确定删除该图书吗?
1表示Yes,其他No");
intp;
scanf("%d",&p);
if(p==1)
printf("Congratulations,删除成功||\n");
if(ja!
=-1&&p)
{
N=N-1;
for(i=ja;i{
strcpy(s[i].tsmc,s[i+1].tsmc);
s[i].tsbh=s[i+1].tsbh;
s[i].dj=s[i+1].dj;
strcpy(s[i].zz,s[i+1].zz);
strcpy(s[i].czzt,s[i+1].czzt);
strcpy(s[i].xm,s[i+1].xm);
strcpy(s[i].xb,s[i+1].xb);
s[i].xh=s[i+1].xh;
}
}
elseif(ja==-1)
printf("没有找到!
\n");
}
3.4借阅模块设计
voidjs()
{
inti,j[100]={-1},d,k,t=0;
charm[20];
printf("查询:
");
printf("1:
图书名称2:
图书编号");
printf("\n\n请输入查询选项:
");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:
");
scanf("%s",&m);
for(i=0;iif(strcmp(m,s[i].tsmc)==0)
{
j[t]=i;
t=t+1;
}
}
elseif(k==2)
{
printf("请输入图书编号:
");
scanf("%d",&d);
for(i=0;iif(d==s[i].tsbh)
{
j[t]=i;
t++;
}
}
if(j[0]==-1&&t==0)
printf("没有找到!
\n");
strcpy(s[j[i]].czzt,"已借出");
printf("此书已借出\n");
if(j[0]!
=-1&&t!
=0&&s[j[i]].czzt=="未借出")
{
printf("%s%d%f%s%s%s%s%d",
s[j[i]].tsmc,s[j[i]].tsbh,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);
}
printf("1:
确定借阅2:
退出\n");
scanf("%d",&k);
switch(k)
{
case1:
printf("请输入学号:
\n");
scanf("%d",&s[j[i]].xh);
printf("请输入姓名:
\n");
scanf("%s",&s[j[i]].xm);
printf("请输入性别:
\n");
scanf("%s",&s[j[i]].xb);
strcpy(s[j[i]].czzt,"已借出");
printf("已借出,按任意键继续\n");
//getch();
case2:
break;
}
}
3.5还书模块设计
voidhs()
{
inti,j[100]={-1},d,k,t=0;
charm[20];
printf("查询:
");
printf("1:
图书名称2:
图书编号");
printf("\n\n请输入查询选项:
");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:
");
scanf("%s",&m);
for(i=0;iif(strcmp(m,s[i].tsmc)==0)
{
j[t]=i;
t++;
break;
}
}
elseif(k==2)
{
printf("请输入图书编号:
");
scanf("%d",&d);
for(i=0;iif(d==s[i].tsbh)
{
j[t]=i;
t++;
break;
}
}
if(t==0)
printf("没有找到!
\n");
else
{
printf("%s%f%s%s%s%s%d\n",
s[j[i]].tsmc,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);
printf("1:
确定归还2:
退出\n");
intp;
scanf("%d",&p);
if(p==1)
{
strcpy(s[j[i]].czzt,"未借出");
strcpy(s[j[i]].xm,"无");
s[j[i]].xh=0;
printf("已归还,按任意键继续\n");
}
//getch();
}
}
3.6流程图
图3.7
第四章测试分析
4.1测试程序执行情况
图4.1.1管理界面
图4.1.2添加图书
图4.1.3名称查询
图4.1.4编号查询
图4.1.5借书
图4.1.6还书
图4.1.7删除信息
4.2出现的问题和解决的方法
第五章课程设计总结
通过两周的课程设计,使我清楚地认识到了实践的重要性.经过有针对性地上机操作,不仅可以提高我对C语言的认识,更重要的是提高了自己的实践能力。
在课程设计过程中,我学到了许多道理,也懂得无论做什么事情都应该先拟定一个计划。
有了计划,就有了奋斗目标,我们就会冲着目标奋进。
通过这次学习使我对指针、数组、结构体以及循环有了深刻的理解,可以学以致用,觉得有了很大的收获。
与此同时也使我学会了如何克服不良情绪,怎样调整自己的心态。
在这次学习中,我遇到了许多困难,但经过我的耐心研究,同学们的帮助以及老师的谆谆教导,使我最终克服了困难,成功地完成了本次课程设计。
这让我懂得了,无论做什么事都不要轻言放弃,无论做什么事都要有耐心、信心加恒心,只有这样,我们才会成功。
在这次设计中,我的人生格言也在无时无刻地帮助着我,鼓励这我,在我感到困惑疲惫时,在我被问题萦绕百般不解时,它都会激励我,它就是————在磨练中成长、苦中作乐
附录:
程序代码
#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("录入成功,恭喜您!
");
printf("\n是否继续录入(1.继续;0,退出录入):
");
fflush(stdin);
scanf("%d",&y);
if(y!
=1)
{
y=0;
break;
}
}
save();
}
voidlookup()
{
system("cls");
printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
for(inti=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);
}
printf(