南邮图书馆管理系统程序设计报告.docx
《南邮图书馆管理系统程序设计报告.docx》由会员分享,可在线阅读,更多相关《南邮图书馆管理系统程序设计报告.docx(23页珍藏版)》请在冰点文库上搜索。
南邮图书馆管理系统程序设计报告
程序设计报告
(2011/2012学年第二学期)
题目:
图书馆管理系统
专业计算机科学与技术
学生姓名MangoC
班级学号
指导教师张琳
指导单位计算机学院计算机科学与技术系
日期2012.6.11-2011.6.14
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简短评语
教师签名:
年月日
评分等级
备注
评分等级有五种:
优秀、良好、中等、及格、不及格
一.课题内容和要求
对大量的图书信息,包括书名、作者、出版社、出版日期、ISBN(书号)等进行增加、查询、保存等操作。
实现如下功能:
(1)新增图书信息处理,从图书文件中读出各图书的相关信息,在此基础上,增加新图书的相关信息。
(2)查询图书信息处理,分别按照书名、作者、出版社、出版日期、ISBN(书号)对单链表中的信息进行查询,其中,前四种为模糊查询,书号为精确查询。
(3)删除图书信息根据输入的ISBN查找图书链表,如果该图书不存在则给出提示信息,否则,删除该图书,并显示删除后的所有图书信息。
(4)保存图书信息处理将单链表中的图书信息保存到文件。
(5)退出,保存图书信息,并释放链表。
二、需求分析
三、概要设计
1)主要结构体:
//定义结构
typedefstruct{
charnumber[10];//书号
charname[20];//书名
charauthor[20];//作者
charpublish[50];//出版社
chartime[20];//出版时间
}mbook;
typedefstruct{
intcount;//书的本数
mbookbook[100];
}mlibrary;
mlibrarylibrary;
2)主要函数流程图:
(1)查找函数:
利用用借阅者或管理员输入的信息进行顺序查找并将找到的书本信息输出。
(2)添加函数:
在管理员指定的书目中插入其希望加入的书本及其信息。
(3)删除函数:
将书本信息从书库中删除删除
4)保存文件函数:
将最新的内容通过文件读写,从内存中保存到原文本文件中
四、详细设计
#include
#include
#include
//定义结构
typedefstruct{
charnumber[10];//书号
charname[20];//书名
charauthor[20];//作者
charpublish[50];//出版社
chartime[20];//出版时间
}mbook;
typedefstruct{
intcount;//书的本数
mbookbook[100];
}mlibrary;
mlibrarylibrary;
//函数声明
voidsave();
voidputin();
voidlookup();
voidsearchname();
voidsearchauthor();
voidsearchpublish();
voidsearchtime();
voidsearch();
voiddel();
voidupdate();
//主函数
voidmain()
{
inta;
FILE*fp;
if((fp=fopen("library.txt","r"))==NULL)
{
printf("\n不能打开图书信息库\n");
fp=fopen("library.txt","w+");
printf("\n初始并重启\n");
library.count=0;
fwrite(&library.count,sizeof(int),1,fp);
fclose(fp);
return;
}
fread(&library.count,sizeof(int),1,fp);
fread(library.book,sizeof(library.book[0]),library.count,fp);
fclose(fp);
do
{
system("cls");
printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n");
printf("\t\t*********************************************\n");
printf("\t\t\t**********1.图书信息录入************\n");
printf("\t\t\t**********2.图书信息浏览************\n");
printf("\t\t\t**********3.图书信息查询************\n");
printf("\t\t\t**********4.图书信息删除************\n");
printf("\t\t\t**********5.图书信息修改************\n");
printf("\t\t\t**********0.退出图书信息系统********\n");
printf("\t\t*********************************************\n");
printf("\t\tPleaseEnterChoose:
");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case1:
putin();
break;
case2:
lookup();
break;
case3:
search();
break;
case4:
del();
break;
case5:
update();
break;
case0:
printf("\n\n退出\n\n");
break;
default:
printf("\n序号不对\n");
}
}while(a!
=0);
save();
}
//子函数
voidsave()//保存图书信息。
{
FILE*fp;
if((fp=fopen("library.txt","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);
library.count++;
printf("\n是否继续录入(1.继续;0,退出录入):
");
fflush(stdin);
scanf("%d",&y);
if(y!
=1)
{
y=0;
break;
}
}
save();
}
voidlookup()
{
inti;
system("cls");
printf("图书号\t图书名\t作者名\t出版社\t出版日期\n");
for(i=0;iprintf("%s\t%s\t%s\t%s\t%s\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time);
fflush(stdin);
getchar();
}
voidsearchname()//定义按书名查询
{
chars2[20];
intflag=1,i;
printf("\n请输入要查询的书名:
");
fflush(stdin);
scanf("%s",s2);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\n");
for(i=0;iif(strcmp(s2,library.book[i].name)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time);
}
if(flag)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
voidsearchauthor()//定义按作者名查询
{
chars3[20];
intflag=1,i;
printf("请输入要查询的书的作者:
");
fflush(stdin);
scanf("%s",s3);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\n");
for(i=0;iif(strcmp(s3,library.book[i].author)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time);
}
if(flag)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
voidsearchpublish()//定义按出版社名查询
{
chars4[20];
intflag=1,i;
printf("请输入要查询的书的出版社:
");
fflush(stdin);
scanf("%s",s4);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\n");
for(i=0;iif(strcmp(s4,library.book[i].publish)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time);
}
if(flag)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
voidsearchtime()//定义按出版日期查询
{
chars5[20];
intflag=1,i;
printf("请输入要查询的书的出版日期:
");
fflush(stdin);
scanf("%s",s5);
printf("图书号\t图书名\t作者名\t出版社\t出版日期\n");
for(i=0;iif(strcmp(s5,library.book[i].time)==0)
{
flag=0;
printf("%s\t%s\t%s\t%s\t%s\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time);
}
if(flag)
{
printf("cannotfound!
");
}
fflush(stdin);
getchar();
}
voidsearch()//定义查询函数
{
inta;
system("cls");//进行清屏
printf("\t\t******************************\n");
printf("开始查询\n");
printf("\t\t\t***********1.按书名查询********\n");
printf("\t\t\t***********2.按作者查询********\n");
printf("\t\t\t***********3.按出版社查询******\n");
printf("\t\t\t***********4.按时间查询********\n");
printf("\t\t\t***********0.退出**************\n");
printf("\t\t*********************************\n");
printf("\t\t请选择--:
");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case1:
searchname();
break;
case2:
searchauthor();
break;
case3:
searchpublish();
break;
case4:
searchtime();
break;
case0:
return;
}
}
voiddel()//定义删除函数
{
charnumber[10];
inti;
system("cls");//清屏
printf("\nPleasetypeinthenumberofthebookyouwanttodelete:
");
fflush(stdin);
scanf("%s",number);
for(i=0;i{
if(strcmp(number,library.book[i].number)==0)break;
}
if(i!
=library.count)
{
for(;i{
strcpy(library.book[i].name,library.book[i+1].name);
strcpy(library.book[i].number,library.book[i+1].number);
strcpy(library.book[i].publish,library.book[i+1].publish);
strcpy(library.book[i].author,library.book[i+1].author);
strcpy(library.book[i].time,library.book[i+1].time);
}
library.count--;
}
else
printf("\ncannotfound!
\n");
save();
fflush(stdin);
getchar();
}
voidupdate()//修改图书信息
{
charnumber[10];
inti;
system("cls");//清屏
printf("\nPleasetypeinthenumberofthebookyouwanttodelete:
");
fflush(stdin);
scanf("%s",number);
for(i=0;i{
if(strcmp(number,library.book[i].number)==0)
{
printf("图书号\t图书名\t作者名\t出版社\t出版日期\n");
printf("%s\t%s\t%s\t%s\t%s\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time);
break;
}
}
if(i!
=library.count)
{
mbookbook;
printf("\n\t\t请输入修改后此图书的信息\n");
printf("\t请输入图书号:
");
scanf("%s",book.number);
printf("\t请输入图书名:
");
scanf("%s",book.name);
printf("\t请输入作者名:
");
scanf("%s",book.author);
printf("\t请输入出版社:
");
scanf("%s",book.publish);
printf("\t请输入出版时间:
");
scanf("%s",book.time);
strcpy(library.book[i].name,book.name);
strcpy(library.book[i].number,book.number);
strcpy(library.book[i].publish,book.publish);
strcpy(library.book[i].author,book.author);
strcpy(library.book[i].time,book.time);
save();
}
else
printf("\ncannotfound!
\n");
fflush(stdin);
getchar();
}
五、测试数据及其结果分析
1.界面登入
2.信息录入完,信息浏览
3.信息查询按图书名查询
5.信息删除后
6.重新输入信息在修改
六、调试过程中的问题
1.分号在中文和搜狗输入法中格式不同,但只能在中文形式下编译,否则会有编译错误。
2.在switch、if、while语句中大括号不能任意缺少或增加,要保证一一对应。
3.不能忽略“=”与“==”的区别,“=”是赋值符号,而“==”是等于号。
4.输入变量时忘记加地址运算符“&”.
5.switch语句中漏写break语句,由于漏写了break语句,case只起标号的作用,而不起判断作用。
6.在调用函数时,形参与实参要对应,一般主函数中地址或数组在子函数中用指针变量对应。
7.数组定义时不要指定长度,长度指定错误则不能显示所有信息。
8.单链表中是通过节点地址指向结构体内容的。
七、程序设计总结
1、设计前期的感受
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
我的题目是设计图书馆管理系统,对于我们这些新手来说,这是很大的考验,尤其在进行课程设计前几天,不知从何入手,一脸茫然,甚至想直接copy网上的作品,但是因为要求不同,最终我选择请教别人,自己思考。
2.遇到的问题与解决方法
在设计过程中,我有犯过一些低级错误,例如分号的格式不正确,子函数漏掉声明等,也有遇到不会的,例如单链表,但是在小组的共同努力下,我们搜资料,翻课本,问同学,最终解决了这些问题。
3心得体会
回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在短短几天的日子里,可以学到很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,也把以前所学过的知识重新温习了。