图书馆系统课程设计.docx
《图书馆系统课程设计.docx》由会员分享,可在线阅读,更多相关《图书馆系统课程设计.docx(37页珍藏版)》请在冰点文库上搜索。
图书馆系统课程设计
C语言课程设计
题目图书馆系统
指导教师曹东燕
学生姓名于凯朱国权王世海
学号201000802035201000802042201000802071
专业电子信息工程
教学单位物理系(盖章)
1设计内容与设计要求……………………………………1
1.1系统功能简介………………………………………1
1.2系统运行环境………………………………………1
2功能划分,模块详细说明………………………………1
3系统的执行框图、运行及说明…………………………2
3.1系统的执行框图……………………………………2
3.2系统的运行…………………………………………2
3.3运行说明……………………………………………8
4课程心得总结…………………………………………………8
附件:
源程序清单…………………………………………9
1设计内容与设计要求
1.1系统功能简介
系统有简单的菜单界面,用户可以通过输入简单的选项来完成相应的工作。
图书馆系统主要有以下几个功能:
1.输入保存功能:
当图书馆将所有图书信息输入并保存,该程序将永久记录信息,以便为用户提供方便。
2.查询功能:
图书馆系统为用户提供图书馆全部的图书信息,用户可根据信息查询所有的想要的资料,为用户节省不必要查询时间,简单快捷。
3.删除功能:
该程序有用户借书还书登记,用户可根据自己的喜好,运用voidshanchu()删除函数选择或删除某些图书。
4.图书借阅系统功能:
用户输入相关信息,系统调用voidchaxunts()查询函数,可以在短时间内借书,还书,查询全部图书资料等,方便、高效。
5.退出系统:
系统调用voidjieshuxitong()函数,来结束系统,出现“Byebye…欢迎使用本软件!
!
!
”,用户结束本程序。
1.2系统运行环境
Vc++6.0下运行,硬件基本无要求,现在的计算机系统基本都可以运行该系统。
2功能划分,模块详细说明
下面对程序中用到的函数及其功能做一下说明。
voidmenu()是显示主菜单界面。
voidmenu2()是显示查询菜单用的函数。
voidtsgxx()是图书馆信息函数。
inttjzs()是统计文本个数函数。
voidtsjinku()是图书进库函数。
voidshanchu()是删除图书信息函数,用来删除图书信息。
voidchaxunts()是查询函数。
voidjieshuxitong()是结束最后的程序。
voidmain()是主函数,调用以上函数,完成相应功能。
3系统的执行框图、运行及说明
3.1系统的执行框图
系统的执行框图,如图3-1所示:
图3-1系统执行框图
3.2系统的运行
系统初始运行时,会显示如图3-2所示的菜单界面,用户可以根据提示,进行相应的选择,来完成系统提供的各种功能。
图3-2整体界面
当选择1键图书馆图书信息按回车时,运行图书馆图书信息,运行界面如图3-3所示:
系统会要求用户如下操作:
1.输入图书信息;2.清楚图书信息;3.查询图书;4.查询全部图书信息;5.返回上一页。
图3-3图书馆图书信息的界面
当输入图书信息时,输入1语言设计基础谭浩强清华大学出版社20;2计算机维护技术秦杰清华大学出版社10。
系统运行界面如图3-4所示:
图3-4输入图书信息界面
当选择1键图书查询时,回车,用户可看到如图3-5所示查询类别界面:
图3-5查询类别界面
当用户输入想要查询的图书书名时,该程序会用voidchaxunts()
查询函数,用户可看到查询结果,如图3-6所示:
图3-6查询结果界面
当选择4.查询全部图书信息时,系统调用voidchaxunts()查询
函数用户可看到运行界面如图3-7:
用户可看到全部图书信息,图书书号,图书书名,图书作者,图书出版社以及库存量。
图3-7全部图书信息界面
当系统初始运行时选择2图书借阅系统,按回车键时,系统运行
界面如图3-8所示:
1.学生借书登记;2.学生还书登记;3.学生借阅情况查看;4.返回上一页。
图3-8图书借阅界面
当按1键学生借书登记按回车时,用户可看到输入借阅书名,学
生证号,学生姓名,归还日期及借书书名,系统运行界面如图3-8所示:
图3-8输入借阅书名界面
当选择3键学生借阅情况查看时,用户可看到借阅图书的情况,依
次为学生证号,学生姓名,归还日期及借书书名,如图3-9所示:
图3-9学生借阅情况查看界面
当系统初始运行时选择3退出系统按回车键时,系统会调用void
jieshuxitong()来结束程序,系统运行界面如图3-10所示:
图3-10程序结束界面
3.3运行说明
1.首次打开系统需要用户按照界面提示按键选择,然后按回车键确定。
2.在运行学生借书登记时,注意归还日期的格式,具体格式应为“XXXXX.XX.XX.”。
3.在借书过程中,输入完信息后请不要按空格键,(按了空格键后,系统会出现卡机现象)。
4.在输入词条过程中,每个词条之间用空格键隔开。
4课程心得总结
在这次编程过程中,我们们深刻的认识到自己C语言知识的不足,但从这次的大作业中我们们又学会了很多的东西,包括动手实践C语言的能力。
上机运行等一系列的实战操作,我们对C语言的知识更加牢牢地掌握了,我们相信我们会把C语言学的更好。
但对于我们来说,我们还需要很多的努力,包括链表我们都没有掌握,更不用说来用它了。
我们是电子信息工程专业的学生,以后的路还很长,C语言还要陪我们很长的路,更有可能我们以后就要从事它了,所以我们一定要好好的学习它。
在以前的上课时,有时我们没有认真的听讲,造成我们在这次的作业中遇到了很多我们一个人没有办法解决的问题,对此,我们的心里面很不是滋味,我们以后一定要好好的学习C语言,这是对我们自己负责,也是对别人负责。
我们现在是大一,以后还要用很长的时间来学C语言。
我们会加倍努力的。
回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在谢老师的辛勤指导下,终于游逆而解。
附件:
源程序清单
#include
#include
#include
#include
#include
#defineLENsizeof(structlibrary)
#defineLEN1sizeof(structreader)
#defineNULL0
structlibrary//图书馆结构体
{intshuhao,xcl;
charname[20],author[20],chuban[20];
structlibrary*next;
};
structreader//学生结构体
{
intzhenghao;
charmingzi[20],riqi[20],zname[20];
structreader*next;
};
voidmainmenu()//显示主菜单
{system("cls");
printf("********************************************************************************");
printf("请您选择选项:
\n");
printf("\t\t\t图书馆系统\n");
printf("\n");
printf("\t\t\t1.图书馆图书信息\n\n");
printf("\t\t\t2.图书借阅系统\n\n");
printf("\t\t\t3.退出系统\n\n");
printf("\t\t\t请您按键选择,回车确定\n");
printf("********************************************************************************");
return;
}
voidmenu1()//显示图书馆信息菜单
{system("cls");
printf("********************************************************************************");
printf("请你选择需要的操作:
\n");
printf("\t\t\t\t1.输入图书信息\n\n");
printf("\t\t\t\t2.清除图书信息\n\n");
printf("\t\t\t\t3.查询图书\n\n");
printf("\t\t\t\t4.查询全部图书信息\n\n");
printf("\t\t\t\t5.返回上一页\n\n");
printf("\t\t\t请您选择,回车确定\n");
printf("********************************************************************************");
return;
}
voidmenu2()//显示查询菜单
{system("cls");
printf("********************************************************************************");
printf("请你选择查询类别:
\n");
printf("\t\t\t\t1.图书书号查询\n\n");
printf("\t\t\t\t2.图书书名查询\n\n");
printf("\t\t\t\t3.图书作者查询\n\n");
printf("\t\t\t\t4.图书出版社查询\n\n");
printf("\t\t\t请您选择,回车确定\n");
printf("********************************************************************************");
return;
}
voidmain()//主函数,调用main1
{voidmain1();
main1();}
voidmain1()//main1函数
{voidtsgxx();//声明
voidjieshuxitong();//声明
charchoose;
mainmenu();
scanf("%c",&choose);
switch(choose)//功能函数选择
{case'1':
tsgxx();break;
case'2':
jieshuxitong();break;
case'3':
system("cls");printf("\n\n\n\n\n\n\n\n\n\t\t\tByebye...");printf("\n\n\n\n\n\n\n\n\n\t\t\t欢迎使用本软件!
!
!
");getch();exit(0);system("cls");break;
}
}
voidtsgxx()//图书馆信息函数
{voidtsjinku();
voidshanchu();
voidchaxunts();
voidxianshikucun();//函数声明
charchoose;
menu1();//调用菜单函数
scanf("%c",&choose);
scanf("%c",&choose);
for(;;)
switch(choose)//功能函数选择
{case'1':
tsjinku();break;
case'2':
shanchu();break;
case'3':
chaxunts();break;
case'4':
xianshikucun();break;
case'5':
main1();break;
}
}
inttjzs()//统计文本个数函数
{FILE*fp;
inttshuhao=0,txcl=0,n;
chartname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'};
fp=fopen("library.txt","r");//打开文件
for(n=0;!
feof(fp);n++)//逐个读文件
fscanf(fp,"%d%s%s%s%d",&tshuhao,tname,tauthor,tchuban,&txcl);
n--;
fclose(fp);//关闭文件
return(n);//返回个数
}
inttjdzzs()//统计文本个数函数
{FILE*fp;
intzhenghao=0,n;
charmingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
fp=fopen("reader.txt","r");//打开文件
for(n=0;!
feof(fp);n++)//逐个读文件
fscanf(fp,"%d%s%s%s",&zhenghao,&mingzi,&riqi,&zname);
fclose(fp);//关闭文件
return(n);//返回个数
}
voidtsjinku()//图书进库函数
{FILE*fp;
intshuhao=0,xcl=0,n=0;
charname[20]={'\0'},author[20]={'\0'},chuban[20]={'\0'};
charhitkey;
system("cls");
if((fp=fopen("library.txt","r"))==NULL)//打开图书馆文件,不存在此文件则新建
{fp=fopen("library.txt","w");
fclose(fp);
}
fp=fopen("library.txt","a");
printf("\n\n\n\n\n\n\t\t\t请按以下格式输入图书信息:
\t\t\t\t\t\t书号书名作者出版社进库量\n请输入:
");//按格式输入图书馆信息
for(;hitkey!
=27;)//循环输入
{if(n!
=0)
printf("请输入:
");
scanf("%d%s%s%s%d",&shuhao,name,author,chuban,&xcl);
fprintf(fp,"%d%s%s%s%d\n",shuhao,name,author,chuban,xcl);
printf("继续输入请按回车,结束输入请按esc\n");
n++;
hitkey=getch();
for(;hitkey!
=13&&hitkey!
=27;)
hitkey=getch();
}
fclose(fp);
printf("\n\n\n\n\n\n\t\t\t保存成功,按任意键返回上一层!
");
getch();
tsgxx();//返回上一层
}
voidshanchu()//删除图书信息函数
{structlibrary*head=NULL;
structlibrary*p,*p1,*p2;
inttshuhao=0,txcl=0,n=0,j,i;
chartname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},ttname[20]={'\0'};
charhitkey;
FILE*fp;
if((fp=fopen("library.txt","r"))==NULL)//打开文件
{system("cls");
printf("\n\n\n\n\n\n\n\n\n\t\t\t记录文件不存在!
按任意键返回...");
getch();
tsgxx();
}
else
{system("cls");
printf("\n\n\n\n\n\n\n\n\t\t请输入你要删除的书名:
");//输入删除图书书名
scanf("%s",&ttname);
printf("\t\t确认删除请按回车,取消请按esc\n");
hitkey=getch();
for(;hitkey!
=13&&hitkey!
=27;)
hitkey=getch();
if(hitkey==27)
tsgxx();
fp=fopen("library.txt","r");
for(j=0;!
feof(fp);)//读文件夹信息,统计个数
{j++;
fscanf(fp,"%d%s%s%s%d",&tshuhao,tname,tauthor,tchuban,&txcl);
}
fclose(fp);
fp=fopen("library.txt","r");
for(i=1;i{fscanf(fp,"%d%s%s%s%d",&tshuhao,tname,tauthor,tchuban,&txcl);
if(strcmp(ttname,tname))//比较名字,将不同名字的信息复制到链表
{n++;
if(n==1)//建立链表
{p1=p2=(structlibrary*)malloc(LEN);
head=p1;
}
else
{p2->next=p1;
p2=p1;
p1=(structlibrary*)malloc(LEN);//新建链表
}
p1->shuhao=tshuhao;//复制书号
strcpy(p1->name,tname);//复制书名
strcpy(p1->author,tauthor);//复制作者名子
strcpy(p1->chuban,tchuban);//复制出版社
p1->xcl=txcl;//复制个数
}
}
if(n==0)
{head=NULL;
}
else
{
p2->next=p1;
p1->next=NULL;
fclose(fp);
}
}
fp=fopen("library.txt","w");//清空文件
fclose(fp);
fp=fopen("library.txt","a");//追加文件
p=head;
for(;p!
=NULL;)//把链表内容覆盖到文件
{
fprintf(fp,"%d%s%s%s%d\n",p->shuhao,p->name,p->author,p->chuban,p->xcl);
p=p->next;
}
fclose(fp);//关闭文件
system("cls");
printf("\n\n\n\n\n\n\n\n\t\t删除成功\n\t\t按任意键返回上一层\n");
getch();//返回上一层
tsgxx();
}
voidchaxunts()//查询函数
{
FILE*fp;
charchoose;
intttshuhao=0,tshuhao=0,txcl=0,n=0,k=0,i,l;
chartname[20]={'\0'},ttauthor[20]={'\0'},tauthor[20]={'\0'},ttchuban[20]={'\0'},tchuban[20]={'\0'},ttname[20]={'\0'};
if((fp=fopen("library.txt","r"))==NULL)//打开文件
{system("cls");
printf("\n\n\n\n\n\n\n\n\n\t\t\t记录文件不存在!
按任意键返回...");
getch();
tsgxx();
}
l=tjzs();//获得文件个数
menu2();//调用菜单函数
scanf("%c",&choose);scanf("%c",&choose);//选择查询方式
if(choose=='5')
return;
elseif(choose=='1')//书号查询
{system("cls");
printf("请您输入书号:
");
scanf("%d",&ttshuhao);
}
else
if(choose=='2')//书名查询
{system("cls");
printf("请您输入书名:
");
scanf("%s",ttname);
}
else
if(choose=='3')//作者查询
{system("cls");
printf("请您输入作者:
");
scanf("%s",ttauthor);
}
else
if(choose=='4')//出版社查询
{system("cls");
printf("请您输入出版社:
");
scanf("%s",ttchuban);
}
system("cls");
for(i=0;i{fscanf(fp,"%d%s%s%s%d",&tshuhao,tname,tauthor,tchuban,&txcl);//读文件信息
if(ttshuhao==tshuhao||!
strcmp(ttname,tname)||!
strcmp(ttauthor,tauthor)||!
strcmp(ttchuban,tchuban))//输出查询信息
{
if(k==0)
{
printf("\t\t\t\t查询结果:
\n\n");
printf("\t图书书号图书书名图书作者图书出版社现存量\