图书管理系统含源代码可以运行.docx
《图书管理系统含源代码可以运行.docx》由会员分享,可在线阅读,更多相关《图书管理系统含源代码可以运行.docx(24页珍藏版)》请在冰豆网上搜索。
图书管理系统含源代码可以运行
图书管理系统(含源代码可以运行)
组长:
何关瑶学号11107200105
组员:
汪芳
李玉珏
马文磊
雷盛华
第一章需求分析
1.1设计内容
利用c++的文件操作能力设计开发一个小型的图书管信息管理系统,至少具有如下功能:
查寻所有图书信息、通过输入图书编号来完成查找某一本图书信息、添加图书信息、删除图书信息以及通过学生学号实现图书借阅功能。
操作界面要符合用户的一般习惯,界面易于读者明白理解,图形或文本界面都可以。
1.2设计任务
要求:
明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;提高学生用高级语言进行程序设计的能力,重点提高用C++进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤;提高撰写技术文档的能力。
掌握模块化编程的基本方法与步骤;巩固和加深学生对C++课程基本知识的理解与掌握,培养学生利用C++进行软件操作的能力和技巧。
1.3基本要求
(1)通过提示菜单选择可以进行的操作。
(2)将图书的信息存入文件中,并命名为BookInfo.txt。
(3)将图书借阅情况信息存入文件中,并命名为SendInfo.txt。
(4)在本系统中可以进行管理系统包含的基本操作,其中包括:
a)查看所有图书的信息。
b)输入一本图书的图书编号,从当前图书中进行查找,如果找到则显示该图书的相关信息,如果没有找到则给出提示信息。
c)添加一本图书的基本信息,通过输入图书编号,首先查找是否存在该图书编号的图书,如果存在则提示重新输入,否则将该图书按照顺序插入到相应位置。
d)删除一本图书的基本信息,通过输入图书编号,首先查找是否存在该图书编号的图书,如果存在则将该图书删除,否则给出提示信息,提示该图书不存在。
e)借阅一本图书,需要给出学号和图书编号,如果图书编号不存在则重新输入,直到输入正确为止,并将学号和相应的图书编号存入SendInfo.txt文件中。
(5)图书基本信息包括图书编号、书名、作者、出版社和价钱这些简单信息。
(6)图书信息文件中每一行存放一本图书的信息。
(7)借阅信息文件中每一行存放一本书的借阅情况。
(8)对老师.学生的信息进行登记处理,包括姓名、学号教师编号、学院班级等。
(9)对图书的金额进出管理,对一丢失的图书进行处罚、对超期归还的图书进行赔偿金额计算。
第二章系统功能设计
2.1系统功能
图1系统功能图
图书管理在生活中运用非常广泛,因此需要用许多的程序来对它们进行管理。
此程序包含了图书信息的录入、图书信息的浏览、图书的查询和排序、图书信息的删除与修改,借书,还书,统计等。
通过编译一个C++函数,其中包含一个主函数,多个子函数,主函数调用其余的子函数实现人们能够简易、快捷的了解并找到自己所学要的信息的功能。
1、查询所有图书信息:
将所有图书信息包括编号、书名、出版社、作者、价格等显示在屏幕上。
2、查找一本图书的信息:
通过输入图书编号完成图书信息的查找,并在屏幕上显示。
3、修改图书信息:
通过输入编号,判断此图书是否存在,若不存在则提示用户重新输入图书编号。
4、删除图书信息:
通过输入编号,判断此图书是否存在,若存在,则提示用户是否显示删除后的信息,若不存在则提示用户重新输入图书编号。
5、借书:
通过输入图书编号,判断此图书是否存在,若不存在则提示用户重新输入图书编号,若图书已借出则提示用户是否继续借书,若没借出则将此图书的编号和学生的学号存入图书借阅文件中。
6、图书丢失:
若图书丢失,对已丢失图书进行删除处理,并通过金额赔偿系统进行图书的金额赔偿管理。
7、金额赔偿:
通过输入一丢失图书的编号对以丢失的图书的金额进行显示在屏幕上。
8、老师信息:
通过选择读者信息中的老师信息可以对老师的信息进行添加.删除和修改。
最后通过输入老师的编号可以对老师的信息进行查询。
9、学生信息:
通过选者读者信息中的学生信息可以对学生的信息进行添加,删除和下该。
最后通过输入学生的学号可以对学生的信息进行查询。
10、退出系统:
返回主页面。
2.2各个模块之间的主要关系
图书信息管理系统可划分为7个模块:
查询所有图书模块、查找一本图书信息模块、修改图书信息模块、删除图书信息模块、借阅图书模块、图书丢失模块、金额赔偿模块。
各模块之间均有着或多或少的联系,比如:
查找一本图书信息模块、修改信息模块、删除信息模块、借阅图书模块都需要先判断该图书是否存在,然后再进行其它操作。
图书丢失后对已丢失图书的信息进行删除,删除后显示出图书的价格病进行金额赔偿。
理解了各模块之间的主要关系有利于程序的设计与完成,使程序的层次结构清晰,便于程序的编写、阅读和调试。
第三章详细设计
3.1系统的总体流程
图2系统流程图
系统的整体流程如上图所示,开始后显示输出菜单选择进入读者信息模块或者图书管理模块,读者信息中是对教师和学生的信息进行编辑如信息的添加、删除和修改。
主要是针对如果图书丢失或者超期归还时计算赔偿金额用的。
教师的归还图书期限为60天,学生为30天。
图书管理模块式针对图书进行管理,如显示出全部图书.即显示出未被借出的图书、添加一本图书信息、删除一本图书信息、显示一本图书信息产看一本图书是否被借、借阅图书功能、图书丢失功能、查看图书的价格对图书进行赔偿、金额管理管理计算出丢失图书的赔偿金额和超期归还图书的金额。
主要根据当前系统时间模块进行计算。
3.2main()函数模块
根据图书馆信息管理系统的要求,可设计一个主函数,及定义多个用户自定义函数。
在主函数中定义全局变量,即是在函数外部定义的变量,其不属于某一个函数,而属于一个源程序文件,在整个程序内可以多次被引用。
通过将switch语句与break语句联合使用来实现多分支选择结构程序的设计。
运用fscanf语句在主函数中将文件中的内容赋给结构体变量,便于在自定义函数中对结构体的调用。
具体如下:
在主函数中定义一个存放图书信息的结构体
structlist{
charnum[20];/*图书编号*/
charname[40];/*书名*/
charauthor[40];/*作者*/
charpublish[40];/*出版社*/
oubleprice;/*价格*/
};
以及各函数的申明
voidsearch_allinformation(structlistb[]);/*查看全部图书信息*/
voidcheck_bookinformation(structlistb[]);/*查找图书信息*/
voidadd_bookinformation(structlistb[]);/*添加图书信息*/
doubledelete_bookinformation(structlistb[]);/*删除图书信息*/
voidborrow_book(structlistb[]);/*借阅图书*/
voidlost_book(structlistb[]);/*图书丢失*/
doublecash_manage();/*金额赔偿*/
通过将switch语句与break语句联合使用来实现多分支选择结构程序的设计。
switch(choice1)
{case1:
search_allinformation(b);
break;
case2:
check_bookinformation(b);
break;
case3:
add_bookinformation(b);
break;
case4:
delete_bookinformation(b);
break;
case5:
borrow_book(b);
break;
case6:
lost_book(b);
break;
case7:
cash_manage();
break;
case0:
break;
}
3.3查询所有图书信息函数模块
voidsearch_allinformation(structlistb[])
通过printf()语句将所有的图书信息包括包括编号、书名、出版社、作者、价格等信息显示在屏幕上。
运用for语句加printf()实现图书信息的循环输出显示。
3.4查询一本图书信息函数模块
voidcheck_bookinformation(structlistb[])
用户先输入图书编号后,先用strcmp(s1,s2)函数进行比较两个字符串数组的大小,从而查找出该图书是否存在,若不存在则提示用户是否要继续查找,运用switch语句,若继续则再次调用函数本身进行第二次查找,直到找到为止,若否则结束循环,不再进行查找。
通过将switch语句与break语句联合使用来实现多分支选择结构程序的设计。
运用fscanf语句在主函数中将文件中的内容赋给结构体。
图3查询一本图书函数功能模块图
3.5添加图书信息函数模块
voidadd_bookinformation(structlistb[])
输入图书的基本信息包括编号、书名、出版社、作者、价格,由于原有的图书信息是按照编号的大小顺序排列的,所以只需运用for循环和strcmp函数找出输入的图书应该插入的位置,再将所添加的图书信息插入即可。
图4添加图书信息函数功能模块图
3.6删除图书信息函数模块
voiddelete_bookinformation(structlistb[])
用户输入所要删除的图书编号,先查找该图书编号是否存在,若存在,这提示用户是否要显示删除后的信息,若不存在则提示重新输入。
图5删除图书信息函数功能模块图
3.7借阅图书模块
voidborrow_book(structlistb[])
用户先输入所借图书的编号,调用函数查找该图书有没有借出,若已借出,则提示用户该图书已借出,并提示用户是否继续借阅其他书籍。
若继续,则继续进行新的查找。
图6借阅图书函数功能模块图
3.8图书丢失模块
用户先输入以丢失图书的编号,调用函数删除图书的相关信息,并显示出图书的金额。
3.9金额赔偿模块
用户对以丢失的图书进行赔偿。
对以超期归还的图书用当前系统统时间系统进行计算正确的罚款数额。
3.10老师学生信息管理系统
对老师和学生的信息进行储存,其中有添加,删除和修改功能。
第四章调试及测试
4.1主菜单运行界面
运行程序可进入系统菜单栏,可选择如图功能进行下一步的操作。
图7主菜单运行界面图
4.2查询所有图书信息模块运行界面
按1操作查询所有未被借出的图书信息,如图所示,选择下一步操作可对图书进行下一步操作。
图8查询所有图书信息模块界面
4.3查找某一本图书信息模块运行界面
按2选择按书名查询某一本图书信息,若图书编号存在则界面如下:
图9图书编号查询图书界面
若图书不存在这显示该图书不存在。
4.4添加图书信息模块运行界面
按3选择,输入编号,界面如下:
图10按图书编号添加图书界面
输入图书的编号.书名.作者出版社.和价格。
完成之后显示是否显示添加后的图书信息,选择是则显示刚添加的图书信息,选择否则返回主菜单。
4.5删除图书信息模块运行界面
按4选择,输入编号,如果编号不存在,界面如下:
图11按图书编号删除图书界面
如果编号存在,界面如下:
图12按图书编号删除图书界面
如果编号不存在,界面如下:
图13借阅图书界面
输入学号这可以成功借出,若不存在则显示该图书不存在。
第七章参考文献
[1]谭浩强编著.C++程序设计.北京:
清华大学出版社.2004
[2](美)戴特尔(Deitel,H.M.)等编著.张引等译.C++大学基础教程(第五版).北京电子工业出版社.2006.6
[3]夏云庆编著.VisualC++6.0数据库高级编程.北京希望电子出版社.2002
[4]伍俊良编著.VisualC++6.0课程设计与系统开发案例.北京清华大学出版社.2002.11
第八章程序源代码
#include
#include
#include
structlist{
charnum[20];/*图书编号*/
charname[40];/*书名*/
charauthor[40];/*作者*/
charpublish[40];/*出版社*/
doubleprice;/*价格*/
};
structlistb[40];
intw=0;/*定义一个全局变量,用来记录bookinfo.txt文件中的数据个数*/
doubletotal,total2;//全局的金额
voidsearch_allinformation(structlistb[]);/*查看全部图书信息*/
voidcheck_bookinformation(structlistb[]);/*查找图书信息*/
voidadd_bookinformation(structlistb[]);/*添加图书信息*/
doubledelete_bookinformation(structlistb[]);/*删除图书信息*/
voidborrow_book(structlistb[]);/*借阅图书*/
voidlost_book(structlistb[]);/*图书丢失*/
doublecash_manage();
chars[20];
intmain()
{
inti=0;
intchoice1;
FILE*fp;
printf("********************************\n");
printf("*欢迎进入图书馆信息管理系统*\n");
printf("********************************\n");
fp=fopen("e:
\\BookInfo.txt","r");
if(fp==NULL)
{printf("Cannotopenthefile1!
\n");
exit(0);
}
while(!
feof(fp))
{
fscanf(fp,"%s%s%s%s%lf",/*调用函数将文件中的数据读入结构变量中*/
b[i].num,b[i].name,b[i].author,b[i].publish,&b[i].price);
i++;
}
w=i-1;
fclose(fp);
do{
printf("################################################################################");
printf("功能选项:
\n");
printf("1:
查看全部图书信息\n");
printf("2:
查找图书信息\n");
printf("3:
添加图书信息\n");
printf("4:
删除图书信息\n");
printf("5:
借阅图书\n");
printf("6:
图书丢失\n");
printf("7:
金额管理\n");
printf("0:
退出系统\n");
printf("################################################################################");
printf("请选择操作:
");
scanf("%d",&choice1);
switch(choice1)
{
case1:
search_allinformation(b);
break;
case2:
check_bookinformation(b);
break;
case3:
add_bookinformation(b);
break;
case4:
delete_bookinformation(b);
break;
case5:
borrow_book(b);
break;
case6:
lost_book(b);
break;
case7:
cash_manage();
break;
case0:
break;
}
}while(choice1!
=0);
printf("谢谢使用!
\n");
return0;
}
/*查看全部图书信息*/
voidsearch_allinformation(structlistb[])
{
inti;
printf("####################################\n");
printf("#查看全部图书信息!
#\n");
printf("####################################\n");
printf("图书的相关信息:
编号书名作者出版社价格\n");
for(i=0;i{
printf("%s%s%s%s%.2f\n",/*将数据输出到屏幕中*/
b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price);
}
printf("%d",w);
printf("################################################################################\n");
}
/*查找图书信息*/
voidcheck_bookinformation(structlistb[])
{
inti,flag=0;
chars[20];
printf("输入编号:
\n");/*提示输入图书编号*/
scanf("%s",s);
printf("#####################################\n");
printf("#查找图书信息!
#\n");
printf("#####################################\n");
for(i=0;iif(strcmp(s,b[i].num)==0)
{
printf("该图书的相关信息:
编号书名作者出版社价格\n");
printf("%s%s%s%s%.2f\n",
b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price);
flag=1;
break;
}
if(flag==0)
{
printf("该图书编号不存在!
\n");
printf("是否要继续查找?
y:
是;n:
否\n");
getchar();
switch(getchar())
{
case'y':
check_bookinformation(b);/*调用函数本身继续查找*/
case'n':
break;
}
}
printf("################################################################################\n");
}
/*添加图书信息*/
voidadd_bookinformation(structlistb[])
{
inti,count=0,choice3;
structlistp;
FILE*fp2;
printf("#####################################\n");
printf("#添加图书信息!
#\n");
printf("#####################################\n");
printf("请输入该图书的相关信息:
\n");
printf("编号书名作者出版社价格\n");
scanf("%s%s%s%s%lf",
p.num,p.name,p.author,p.publish,&p.price);
printf("添加成功!
\n");
printf("是否显示添加后的信息?
1:
是;2:
否\n");
printf("请选择:
");
scanf("%d",&choice3);
switch(choice3)
{
case1:
{
for(i=0;iif(strcmp(p.num,b[i].num)>0)
count++;
for(i=w;i>count;i--)
b[i]=b[i-1];
b[i]=p;
w++;/*每添加一本图书,图书数目都会增加一个*/
fp2=fopen("e:
\\BookInfo.txt","w");
if(fp2==NULL)
{
printf("Cannotopenthefile2!
\n");
exit(0);
}
for(i=0;ifprintf(fp2,"%s%s%s%s%.2f\n",
b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price);
fclose(fp2);
for(i=0;iprintf("%s%s%s%s%.2f\n",
b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price);
}
case2:
break;
}
printf("################################################################################\n");
}
/*删除图书信息*/
doubledelete_bookinformation(structlistb[])
{
inti,flag=0,choice4;
doublea;