C语言课程报告图书馆管理系统可做模板套用文档格式.docx
《C语言课程报告图书馆管理系统可做模板套用文档格式.docx》由会员分享,可在线阅读,更多相关《C语言课程报告图书馆管理系统可做模板套用文档格式.docx(28页珍藏版)》请在冰点文库上搜索。
(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。
成绩
评定
报告撰写情况(30分)
系统完成情况(30分)
答辩情况(40分)
总分
20分
规范程度
5分
程序测试
基本功能20分
扩展功能10分
自述情况10分
答辩情况
30分
成绩评定教师:
一.需求分析
本次C语言程序设计以“图书馆管理系统”为题,题目要求开发一个图书信息管理系统,图书信息包括:
图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己的当前能力进行扩充)。
基本功能包括:
当然,也可以根据个人的情况进行适当的扩展:
比如权限处理啊,报表打印功能,模糊查询,统计功能,或筛选出小于指定数量库存的图书等等。
测试数据有ASCII文件tushu_list.txt提供:
tushu_list.txt文件结构:
图书编号书名作者出版社类别出版社时间价格
-----------------------------------------------------------------
1002cbhsbqq221zrkx201112.3
1001cbsbywbgdzrkx201110.5
1008cbsb2ywbrmjyjy201210.0
1004cblsbzj220zz20119.91
1007cbyysbywbgdzrkx201210.1
1006cbyzsbzzgdshkx201255.5
1003cbysbzzgdzrkx20119.22
1010cbsb4qqrmjyjy201210.58
1009cbsb3zjrmjyjy20129.9
1005cbyrsbcb220shkx20118.52
二.概要设计
(1).数据结构
根据题目给定的图书信息和数据格式可知道,链表结点必须用结构体实现。
故:
首先建立结构体数组:
structtushu{
charnum[10];
字符型图书编号
charname[20];
字符型书名
charwriter[20];
字符型作者
charpress[20];
字符型出版社
charkind[20];
字符型类别
doubletime;
双精度实型出版时间
doubleprice;
实型价格
structtushu*next;
用与构建连表指向下一结点
};
FILE*fp;
定义全局变量fp
(2).模块划分
定义全局变量:
FILE*fp;
/*定义全局变量fp*/
函数原型清单:
/*密码验证*/
voidsecret();
/*主菜单*/
voidmenu();
/*录入图书信息*/
structtushu*Input();
/*将信息导入文件可追加*/
voidfprint(structtushu*head);
/*将信息导入文件只写(可覆盖)*/
voidfprint_(structtushu*head);
/*从tushu_list中读取数据构建链表*/
structtushu*create(structtushu*head,int*n);
/*浏览全部图书信息*/
voidBrowse(structtushu*head);
/*统计图书数目*/
voidcount(structtushu*head);
/*按书名查询图书*/
voidFindofname(structtushu*head);
/*按作者查询图书*/
voidFindofwriter(structtushu*head);
/*按类别查询图书*/
voidFindofkind(structtushu*head);
/*按出版时间排序*/
voidSort_time(structtushu*head);
/*按价格排序*/
voidSort_price(structtushu*head);
/*按图书编号排序*/
voidSort_num(structtushu*head);
/*按编号删除图书*/
structtushu*Delete(structtushu*head,charm[15]);
/*修改图书*/
structtushu*Revise(structtushu*head);
(3).程序总体框架
模块层次结构只确定了模块之间的关系以及函数原型,不是程序的执行步骤。
程序的总体框架是程序的总体流程图。
此程序并非是按照顺序逐一执行的,其中有某些程序他们之间的关系并不是递进,而是并列。
所以选取一个合适的菜单是最佳方案。
程序的总体框架如下:
三.功能模块的详细设计
主菜单
1.函数原型,功能及形参说明
函数原型:
voidmenu()
函数功能:
实现系统的菜单调用,显示对应选项
参数说明:
函数类型为空
2.程序清单
{
printf("
\n**************************************************\n"
);
printf("
图书馆图书管理系统\n"
---------------------------------------------------\n"
0-退出系统6-按类别查询\n"
1-添加新图书7-按时间排序\n"
2-浏览图书8-按价格排序\n"
3-统计图书数目9-按编号排序\n"
4-按书名查询10-按编号删除图书\n"
5-按作者查询11-修改图书\n"
__________________________________________________\n"
}
密码验证
voidsecret()
实现系统的密码验证功能
chara[20]20个字符以内的密码输入
system("
cls"
库函数清频
chara[20];
**进入图书管理系统前请先进行密码验证---"
do{
gets(a);
/*输入密码*/
system("
/*调用库函数清屏*/
对不起!
您输入的密码有误,请重新输入---"
}while(strcmp(a,"
0605"
)!
=0);
/*单一密码“0605”*/
欢迎进入图书管理系统\n"
添加新图书及是否保存
structtushu*Input()
实现图书的添加及保存(其中调用函数voidfprint(structtushu*head);
/*将信息导入文件可追加*/)
*head链表头结点指针
*p1,*p2辅助结点局外变量
/*录入图书信息建立图书信息的链表*/
structtushu*p1,*p2,*head;
/*建立辅助结点及头结点*/
charnum;
intn=0,x;
menu();
\n请按对应项输入图书信息以#结束:
\n"
p1=(structtushu*)malloc(sizeof(structtushu));
head=p2=p1;
do{/*使用dowhile语句输入图书信息*/
scanf("
%s"
&
p1->
num);
if(strcmp(p1->
num,"
#"
)==0)break;
/*判断结束符*/
else
scanf("
%s%s%s%s%lf%lf"
p1->
name,p1->
writer,p1->
press,p1->
kind,&
time,&
price);
num='
#'
;
/*?
?
*/
p1=(structtushu*)malloc(sizeof(structtushu));
p2->
next=p1;
p2=p1;
n++;
}while
(1);
p1->
next=NULL;
图书信息输入结束!
getchar();
是否保存图书信息?
(1.是/2.否):
"
scanf("
%d"
x);
if(x==1)
fprint(head);
/*调用函数保存至文件*/
else
\n文件没有被保存!
returnhead;
/*返回头指针*/
将信息导入文件可追加
voidfprint(structtushu*head)
实现图书的保存将信息导入文件可追加
structtushu*head链表头结点指针
structtushu*p1;
if((fp=fopen("
tushu_list.txt"
"
a"
))==NULL)
{
Fileopenerror!
exit(0);
}
for(p1=head;
next!
=NULL;
p1=p1->
next)/*遍历*/
fprintf(fp,"
%s\t%s\t%s\t%s\t%s\t%.0lf\t%lf\n"
num,p1->
kind,p1->
time,p1->
/*将图书信息写入文件*/
fclose(fp);
/*关闭文件*/
\n图书信息已成功保存到文件tushu_list.txt中!
将信息导入文件不可追加
voidfprint_(structtushu*head)
实现修改及删除后的图书保存将信息导入文件并覆盖原文件
w"
p1!
浏览图书信息
voidBrowse(structtushu*head)
实现图书信息的输出
voidBrowse(structtushu*head)/*浏览全部图书信息*/
a+"
编号书名作者出版社类别出版时间价格\n"
while(!
feof(fp))/*读取并输出*/
fscanf(fp,"
%s%s%s%s%s%lf%lf"
num,name,writer,press,kind,&
%s\t%s\t%s\t%s\t%s\t%.0lf\t%.2lf\n"
num,name,writer,press,kind,time,price);
};
if(fclose(fp))
Cannotclosethefile!
从tushu_list中读取数据构建链表
structtushu*create(structtushu*head,int*n)
建立图书信息单向链表
int*n图书数目指针
structtushu*p,*p1,*p2;
))==NULL)/*先安全打开目录文件*/
feof(fp))/*读取并创建链表*/
(*n)++;
p=(structtushu*)malloc(sizeof(structtushu));
fscanf(fp,"
p->
num,p->
name,p->
writer,p->
press,p->
p->
if(head==NULL){
head=p;
p1=p;
}
else{
p1->
next=p;
p2=p1;
p2->
free(p);
/*释放辅助结点所占用空间*/
(*n)--;
统计图书数目
voidcount(structtushu*head)
实现图书信息数目统计并输出
n计数
voidcount(structtushu*head)/*统计图书数目*/
intn=0;
head=create(head,&
n);
/*调用创建链表函数*/
/*计数*/
\n此系统统计在内的图书共有%d册。
(n+1)/2);
/*计算并输出图书数目*/
按书名查询图书信息
voidFindofname(structtushu*head)
实现图书信息按照书名查询并输出
i计数判定
charb[20];
查找编号
2.函数流程图
3.程序清单
voidFindofname(structtushu*head)/*按书名查询图书*/
inti=0,n;
/*i为计数判定*/
charb[20];
/*定义查找编号*/
structtushu*p;
p=head;
\n请输入要查询的图书名称:
b);
while(p!
=NULL){
if(strcmp(p->
name,b)==0){/*比较输入的字符串与原文件中书名*/
printf("
\n编号书名作者出版社类别出版时间价格\n"
%s\t%s\t%s\t%s\t%s\t%.0lf\t%.2lf\n"
kind,p->
time,p->
i++;
p=p->
next;
if(i==0)
\n对不起!
没有找到名为《%s》的图书!
按作者查询图书
voidFindofwriter(structtushu*head)
实现图书信息按照图书作者查询并输出
\n请输入要查询的图书作者姓名:
writer,b)==0){
\n编号书名作者出版社类别出版时间价格\n"
p->
没有找到‘%s’所著的相关图书!
按类别查询图书
voidFindofkind(structtushu*head)
实现图书信息按照图书类别查询并输出
\n请输入您要查询的图书类别:
kind,b)==0){
p=