C语言课程报告图书馆管理系统可做模板套用.docx
《C语言课程报告图书馆管理系统可做模板套用.docx》由会员分享,可在线阅读,更多相关《C语言课程报告图书馆管理系统可做模板套用.docx(28页珍藏版)》请在冰点文库上搜索。
C语言课程报告图书馆管理系统可做模板套用
课程报告
课程名称:
程序设计实践
专业班级:
学生姓名:
学号:
任课教师:
学期:
2010-2011学年第二学期
课程报告任务书
题目
图书信息管理系统
主要
内容
开发一个图书信息管理系统,图书信息包括:
图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。
使之能提供以下基本功能:
(1)图书信息录入功能(图书信息用文件保存)--输入
(2)图书信息浏览功能--输出
(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):
①按书名查询②按作者名查询
按照价钱排序
按出版时间排序等等
(4)图书信息的删除与修改
扩展功能:
可以按照自己的程度进行扩展。
比如
(1)简单的权限处理
(2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。
(4)模糊查询(5)综合查询(6)统计功能比如统计处某一类别的图书信息或筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。
任务
要求
一、提交材料应包括:
(1)系统源代码
(2)课程报告
二、整个设计过程具体要求
(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;
(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)
(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;
(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。
成绩
评定
报告撰写情况(30分)
系统完成情况(30分)
答辩情况(40分)
总分
内容
20分
规范程度
5分
程序测试
5分
基本功能20分
扩展功能10分
自述情况10分
答辩情况
30分
成绩评定教师:
一.需求分析
本次C语言程序设计以“图书馆管理系统”为题,题目要求开发一个图书信息管理系统,图书信息包括:
图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己的当前能力进行扩充)。
基本功能包括:
(1)图书信息录入功能(图书信息用文件保存)--输入
(2)图书信息浏览功能--输出
(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):
①按书名查询②按作者名查询
按照价钱排序
按出版时间排序等等
(4)图书信息的删除与修改
当然,也可以根据个人的情况进行适当的扩展:
比如权限处理啊,报表打印功能,模糊查询,统计功能,或筛选出小于指定数量库存的图书等等。
测试数据有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.程序清单
voidmenu()
{
printf("\n**************************************************\n");
printf("图书馆图书管理系统\n");
printf("---------------------------------------------------\n");
printf("0-退出系统6-按类别查询\n");
printf("1-添加新图书7-按时间排序\n");
printf("2-浏览图书8-按价格排序\n");
printf("3-统计图书数目9-按编号排序\n");
printf("4-按书名查询10-按编号删除图书\n");
printf("5-按作者查询11-修改图书\n");
printf("---------------------------------------------------\n");
printf("__________________________________________________\n");
}
密码验证
1.函数原型,功能及形参说明
函数原型:
voidsecret()
函数功能:
实现系统的密码验证功能
参数说明:
chara[20]20个字符以内的密码输入
system("cls");库函数清频
2.程序清单
voidsecret()
{
chara[20];
printf("**进入图书管理系统前请先进行密码验证---");
do{
gets(a);/*输入密码*/
system("cls");/*调用库函数清屏*/
printf("对不起!
您输入的密码有误,请重新输入---");
}while(strcmp(a,"0605")!
=0);/*单一密码“0605”*/
system("cls");
printf("欢迎进入图书管理系统\n");
}
添加新图书及是否保存
1.函数原型,功能及形参说明
函数原型:
structtushu*Input()
函数功能:
实现图书的添加及保存(其中调用函数voidfprint(structtushu*head);/*将信息导入文件可追加*/)
参数说明:
*head链表头结点指针
*p1,*p2辅助结点局外变量
2.程序清单
/*录入图书信息建立图书信息的链表*/
structtushu*Input()
{
structtushu*p1,*p2,*head;/*建立辅助结点及头结点*/
charnum;
intn=0,x;
system("cls");
menu();
printf("\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,&p1->time,&p1->price);
num='#';/*?
?
?
*/
p1=(structtushu*)malloc(sizeof(structtushu));
p2->next=p1;
p2=p1;
n++;
}while
(1);
p1->next=NULL;
printf("图书信息输入结束!
\n");
getchar();
printf("是否保存图书信息?
(1.是/2.否):
");
scanf("%d",&x);
if(x==1)
fprint(head);/*调用函数保存至文件*/
else
printf("\n文件没有被保存!
\n");
returnhead;/*返回头指针*/
}
将信息导入文件可追加
1.函数原型,功能及形参说明
函数原型:
voidfprint(structtushu*head)
函数功能:
实现图书的保存将信息导入文件可追加
参数说明:
structtushu*head链表头结点指针
2.程序清单
voidfprint(structtushu*head)
{
structtushu*p1;
if((fp=fopen("tushu_list.txt","a"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
for(p1=head;p1->next!
=NULL;p1=p1->next)/*遍历*/
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%.0lf\t%lf\n",
p1->num,p1->name,p1->writer,p1->press,p1->kind,p1->time,p1->price);/*将图书信息写入文件*/
fclose(fp);/*关闭文件*/
system("cls");
menu();
printf("\n图书信息已成功保存到文件tushu_list.txt中!
\n");
getchar();
}
将信息导入文件不可追加
1.函数原型,功能及形参说明
函数原型:
voidfprint_(structtushu*head)
函数功能:
实现修改及删除后的图书保存将信息导入文件并覆盖原文件
参数说明:
structtushu*head链表头结点指针
2.程序清单
voidfprint_(structtushu*head)
{
structtushu*p1;
if((fp=fopen("tushu_list.txt","w"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
for(p1=head;p1!
=NULL;p1=p1->next)/*遍历*/
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%.0lf\t%lf\n",
p1->num,p1->name,p1->writer,p1->press,p1->kind,p1->time,p1->price);/*将图书信息写入文件*/
fclose(fp);/*关闭文件*/
system("cls");
menu();
printf("\n图书信息已成功保存到文件tushu_list.txt中!
\n");
getchar();
}
浏览图书信息
1.函数原型,功能及形参说明
函数原型:
voidBrowse(structtushu*head)
函数功能:
实现图书信息的输出
参数说明:
structtushu*head链表头结点指针
2.程序清单
voidBrowse(structtushu*head)/*浏览全部图书信息*/
{
charnum[10];
charname[20];
charwriter[20];
charpress[20];
charkind[20];
doubletime;
doubleprice;
system("cls");
menu();
if((fp=fopen("tushu_list.txt","a+"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
printf("---------------------------------------------------\n");
printf("编号书名作者出版社类别出版时间价格\n");
while(!
feof(fp))/*读取并输出*/
{
fscanf(fp,"%s%s%s%s%s%lf%lf",
num,name,writer,press,kind,&time,&price);
printf("%s\t%s\t%s\t%s\t%s\t%.0lf\t%.2lf\n",
num,name,writer,press,kind,time,price);
};
if(fclose(fp))
{
printf("Cannotclosethefile!
\n");
exit(0);
}
}
从tushu_list中读取数据构建链表
1.函数原型,功能及形参说明
函数原型:
structtushu*create(structtushu*head,int*n)
函数功能:
建立图书信息单向链表
参数说明:
structtushu*head链表头结点指针
int*n图书数目指针
2.程序清单
structtushu*create(structtushu*head,int*n)
{
structtushu*p,*p1,*p2;
if((fp=fopen("tushu_list.txt","a+"))==NULL)/*先安全打开目录文件*/
{
printf("Fileopenerror!
\n");
exit(0);
}
while(!
feof(fp))/*读取并创建链表*/
{
(*n)++;
p=(structtushu*)malloc(sizeof(structtushu));
fscanf(fp,"%s%s%s%s%s%lf%lf",
p->num,p->name,p->writer,p->press,p->kind,&p->time,&p->price);
if(head==NULL){
head=p;
p1=p;
}
else{
p1->next=p;
p2=p1;
p1=p;
}
}
p2->next=NULL;
free(p);/*释放辅助结点所占用空间*/
(*n)--;
fclose(fp);
returnhead;
}
统计图书数目
1.函数原型,功能及形参说明
函数原型:
voidcount(structtushu*head)
函数功能:
实现图书信息数目统计并输出
参数说明:
structtushu*head链表头结点指针
n计数
2.程序清单
voidcount(structtushu*head)/*统计图书数目*/
{
intn=0;
structtushu*p1;
head=create(head,&n);/*调用创建链表函数*/
for(p1=head;p1->next!
=NULL;p1=p1->next)/*遍历*/
n++;/*计数*/
printf("\n此系统统计在内的图书共有%d册。
\n",(n+1)/2);/*计算并输出图书数目*/
}
按书名查询图书信息
1.函数原型,功能及形参说明
函数原型:
voidFindofname(structtushu*head)
函数功能:
实现图书信息按照书名查询并输出
参数说明:
structtushu*head链表头结点指针
i计数判定
charb[20];查找编号
2.函数流程图
3.程序清单
voidFindofname(structtushu*head)/*按书名查询图书*/
{
inti=0,n;/*i为计数判定*/
charb[20];/*定义查找编号*/
structtushu*p;
head=create(head,&n);
p=head;
system("cls");
menu();
printf("\n请输入要查询的图书名称:
");
scanf("%s",b);
while(p!
=NULL){
if(strcmp(p->name,b)==0){/*比较输入的字符串与原文件中书名*/
printf("\n编号书名作者出版社类别出版时间价格\n");
printf("%s\t%s\t%s\t%s\t%s\t%.0lf\t%.2lf\n",
p->num,p->name,p->writer,p->press,p->kind,p->time,p->price);
i++;
}
p=p->next;
}
if(i==0)
printf("\n对不起!
没有找到名为《%s》的图书!
\n",b);
}
按作者查询图书
1.函数原型,功能及形参说明
函数原型:
voidFindofwriter(structtushu*head)
函数功能:
实现图书信息按照图书作者查询并输出
参数说明:
structtushu*head链表头结点指针
2.程序清单
voidFindofwriter(structtushu*head)
{
inti=0,n;
charb[20];
structtushu*p;
head=create(head,&n);
p=head;
system("cls");
menu();
printf("\n请输入要查询的图书作者姓名:
");
scanf("%s",b);
while(p!
=NULL){
if(strcmp(p->writer,b)==0){
printf("\n编号书名作者出版社类别出版时间价格\n");
printf("%s\t%s\t%s\t%s\t%s\t%.0lf\t%.2lf\n",p->num,p->name,p->writer,p->press,p->kind,p->time,p->price);
i++;
}
p=p->next;
}
if(i==0)
printf("\n对不起!
没有找到‘%s’所著的相关图书!
\n",b);
}
按类别查询图书
1.函数原型,功能及形参说明
函数原型:
voidFindofkind(structtushu*head)
函数功能:
实现图书信息按照图书类别查询并输出
参数说明:
structtushu*head链表头结点指针
2.程序清单
voidFindofkind(structtushu*head)
{
inti=0,n;
charb[20];
structtushu*p;
head=create(head,&n);
p=head;
system("cls");
menu();
printf("\n请输入您要查询的图书类别:
");
scanf("%s",b);
while(p!
=NULL){
if(strcmp(p->kind,b)==0){
printf("\n编号书名作者出版社类别出版时间价格\n");
printf("%s\t%s\t%s\t%s\t%s\t%.0lf\t%.2lf\n",
p->num,p->name,p->writer,p->press,p->kind,p->time,p->price);
i++;
}
p=