图书管理系统报告.docx
《图书管理系统报告.docx》由会员分享,可在线阅读,更多相关《图书管理系统报告.docx(19页珍藏版)》请在冰豆网上搜索。
图书管理系统报告
《C语言进阶与试题剖析》课程
综合设计课程报告
课题名称:
图书信息管理系统
二级学院:
*******************
学生姓名:
********
学号:
************
主讲教师:
*******
2010年06月10日
一.数据结构及说明
1.题目的要求
系统要求实现图书信息的输入并写入文件、删除记录、添加记录和修改等功能,且要求必须有一个可供用户循环选择的用户菜单。
在计算机中建立相应的数据结构,利用程序实现图书信息的查询、增加、删除、输出等维护。
各功能详细说明如下:
§设计一个能够记录图书馆图书信息的数据结构(比如包括:
书号,图书名,出版时间,分类号,出版社,作者,册数,关键字等)。
§应用文件保存图书信息。
§新增:
能将所有输入的图书信息保存到文件中,并可选择继续输入或退出。
§查找:
输入图书的书号,并在图书管理系统中查找
l若找到,则显示该图书详情
l否则提示未找到。
l无论查找成功否,应还可选择继续查找或退出。
§删除:
输入图书的书号,并在文件中查找
§若找到,提示是否确定删除
•若选择是,则删除文件中该图书信息
•若选择否,则取消,
§无论查找成功否,应还可选择继续查找或退出。
§退出:
退出程序
2.数据说明
intnum;登录号
charbookname[10];书名
charname[10];作者姓名
intno;分类号
charltd[20];出版单位
inttime;出版时间
floatmoney;价格
lib1[50];可记录50条信息
i,j等变量在不同函数里边含义不同,但都是为了方便各个功能的实现
二.算法描述
1.程序设计简要分析
(1)根据题目所给的要求,先将图书信息录入功能,图书信息浏览功能,图书信息插入功能,图书信息查找和排序功能,图书信息删除功能以及退出程序功能逐个逐点的用函数形式编写出来,最后再编写一个主函数,以达到“系统以菜单方式工作”的功能,主函数将所有子函数包含进去;
(2)图书信息录入采用顺序结构;
(3)菜单方式的操作,根据菜单选择所要选取的功能,从而完成所要进行的操作;
(4)采用文件这一知识,将信息资料保存在磁盘的文件上,并且完成查找,删除等功能;
2.算法基本思想
(1)定义结构体,声明自定义函数(包括各个功能的实现);
(2)创建一个save函数,完成将图书信息保存到文件中的功能,并有fread函数从文件中重新读入检验;
(3)编写自定义函数(输入,浏览,查找,删除,插入,退出);
(4)编写主函数(即编写菜单:
用getch()来暂停程序,用switch进行选择);
3.模块划分
(1)定义结构体
开始先定义一个结构体来存放单个图书信息。
包括图书的登录号,图书名,作者名,分类号,出版单位,出版时间和价格。
并声明其类型:
编写如下
structlib
{
intnum;
charbookname[10];
charname[10];
intno;
charltd[20];
inttime;
floatmoney;
(2)采用文件保存函数
voidsave()
{FILE*fp;
FILE*fp1;
intm;
if((fp=fopen("lib_list.txt","w"))==NULL)
{printf("cannotopenfile\n");
return;
}
for(m=0;m
if(fwrite(&lib1[m],sizeof(structlib),1,fp)!
=1)
{printf("filewriteerror\n");
return;
}
fclose(fp);/*关闭文件*/
fp1=fopen("lib_list.txt","r");
printf("列表如下:
\n");
for(m=0;m
{
fread(&lib1[m],sizeof(structlib),1,fp1);
printf("登录号为:
%d\n书名:
%s\n作者:
%s\n分类号:
%d\n出版单位:
%s\n出版时间:
%d\n价格:
%.2f",
lib1[m].num,lib1[m].bookname,lib1[m].name,lib1[m].no,lib1[m].ltd,lib1[m].time,lib1[m].money);
printf("\n");
}
fclose(fp1);
}
(3)输入图书信息
voidshuru()/*输入信息*/
{
chara;
do
{
printf("\n请输入登录号:
");
scanf("%d",&lib1[i].num);
printf("\n请输入书名:
");
scanf("%s",lib1[i].bookname);
printf("\n请输入作者:
");
scanf("%s",lib1[i].name);
printf("\n请输入分类号:
");
scanf("%d",&lib1[i].no);
printf("\n出版单位:
");
scanf("%s",lib1[i].ltd);
printf("\n出版时间:
");
scanf("%d",&lib1[i].time);
printf("\n价格:
");
scanf("%f",&lib1[i].money);
printf("\n继续输入另外一本书信息,请输入y\n返回主菜单输入任意其他键\n");
scanf("%s",&a);
i++;
}
while(a=='y'&&i<=50);
save();/*调用save函数*/
}
(4)浏览图书信息
voidxianshi()/*显示信息*/
{
intj;
for(j=0;j
printf("登录号为:
%d\n书名:
%s\n作者:
%s\n分类号:
%d\n出版单位:
%s\n出版时间:
%d\n价格:
%.2f\n\n\n",
lib1[j].num,lib1[j].bookname,lib1[j].name,lib1[j].no,lib1[j].ltd,lib1[j].time,lib1[j].money);
}
voidpaixu()/*按分类号从大到小排序函数*/
{
intj,k;
inttemp;
for(j=0;j
{
for(k=0;k{
if(lib1[k].no{
temp=lib1[k].no;
lib1[k].no=lib1[k+1].no;
lib1[k+1].no=temp;
}
}}}
(5)查找图书信息
voidchazhao()/*查找信息*/
{
intm;
charname[20],b;
do
{
printf("\n请输入想查找的书名:
");
scanf("%s",&name);
for(m=0;m
{
if(strcmp(name,lib1[m].name)==0)
{
printf("\n\t您查找的书在第%d个位置找到了!
!
!
\n",m+1);
break;
}
}
if(strcmp(name,lib1[m].name)!
=0)
printf("\n\t没有找到这本书!
!
!
\n");
else
{
printf("登录号:
%d\n书名:
%s\n作者:
%s\n分类号:
%d\n出版单位:
%s\n出版时间:
%d\n价格:
%.2f\n\n\n",
lib1[m].num,lib1[m].bookname,lib1[m].name,lib1[m].no,lib1[m].ltd,lib1[m].time,lib1[m].money);
}
printf("\n继续查找另外一本书信息,请输入y\n返回主菜单输入任意其他键\n");
scanf("%s",&b);
}while(b=='y');
}
(6)删除图书信息
voidshanchu()/*删除图书信息*/
{
charname[20],c;
inta,b;
do
{
printf("\n请输入要删除的书名:
\n");
scanf("%s",&name);
for(a=0;a
{
if(strcmp(name,lib1[a].name)==0)/*比较字符串的大小*/
break;
}
for(b=a;b
lib1[b]=lib1[b+1];
if(a>i)
printf("\t没有找到这本书!
!
!
\n");
else
{
printf("\n图书%s已删除!
!
!
\n",name);
printf("目前还保存有的图书信息如下:
\n----------------------------------------------------\n");
i--;
xianshi();
}
printf("\n继续删除另外一本书信息,请输入y\n返回主菜单输入任意其他键");
scanf("%s",&c);
}
while(c=='y');
}
(7)新增图书信息
voidcharu()/*插入信息*/
{
shuru();
paixu();
}
(8)主函数(显示菜单功能)
voidmain()
{
intchange;
do{
system("cls");
printf("\t********************图书信息管理系统********************\n\n\n");
printf("\t\t\t1:
输入图书信息\n");
printf("\t\t\t2:
显示图书信息\n");
printf("\t\t\t3:
查找图书信息\n");
printf("\t\t\t4:
删除图书信息\n");
printf("\t\t\t5:
插入图书信息\n");
printf("\t\t\t6:
退出程序\n\n");
printf("请输入功能选项:
");
scanf("%d",&change);
switch(change)
{
case1:
shuru();break;
case2:
xianshi();break;
case3:
chazhao();break;
case4:
shanchu();break;
case5:
charu();break;
case6:
break;
}
getch();
}
while(change!
=6);
}
4.流程图:
三.附录
1.程序源代码及注释:
#include
#include/*引入函数库*/
#include
#include
structlib/*声明一个结构体类型*/
{
intnum;/*定义变量*/
charbookname[10];
charname[10];
intno;
charltd[20];
inttime;
floatmoney;
}
lib1[50];
inti;
voidsave()/*保存到文件*/
{FILE*fp;
FILE*fp1;
intm;
if((fp=fopen("lib_list.txt","w"))==NULL)
{printf("cannotopenfile\n");
return;
}
for(m=0;m
if(fwrite(&lib1[m],sizeof(structlib),1,fp)!
=1)
{printf("filewriteerror\n");
return;
}
fclose(fp);/*关闭文件*/
fp1=fopen("lib_list.txt","r");
printf("列表如下:
\n");
for(m=0;m
{
fread(&lib1[m],sizeof(structlib),1,fp1);
printf("登录号为:
%d\n书名:
%s\n作者:
%s\n分类号:
%d\n出版单位:
%s\n出版时间:
%d\n价格:
%.2f\n\n",
lib1[m].num,lib1[m].bookname,lib1[m].name,lib1[m].no,lib1[m].ltd,lib1[m].time,lib1[m].money);
}
fclose(fp1);
}
voidshuru()/*输入信息*/
{
chara;
do
{
printf("\n请输入登录号:
");
scanf("%d",&lib1[i].num);
printf("\n请输入书名:
");
scanf("%s",lib1[i].bookname);
printf("\n请输入作者:
");
scanf("%s",lib1[i].name);
printf("\n请输入分类号:
");
scanf("%d",&lib1[i].no);
printf("\n出版单位:
");
scanf("%s",lib1[i].ltd);
printf("\n出版时间:
");
scanf("%d",&lib1[i].time);
printf("\n价格:
");
scanf("%f",&lib1[i].money);
printf("\n继续输入另外一本书信息,请输入y\n返回主菜单输入任意其他键\n");
scanf("%s",&a);
i++;
}
while(a=='y'&&i<=50);
save();/*调用save函数*/
}
voidxianshi()/*显示信息*/
{
intj;
for(j=0;j
printf("登录号为:
%d\n书名:
%s\n作者:
%s\n分类号:
%d\n出版单位:
%s\n出版时间:
%d\n价格:
%.2f\n\n\n",
lib1[j].num,lib1[j].bookname,lib1[j].name,lib1[j].no,lib1[j].ltd,lib1[j].time,lib1[j].money);
}
voidpaixu()/*按分类号从大到小排序函数*/
{
intj,k;
inttemp;
for(j=0;j
{
for(k=0;k{
if(lib1[k].no{
temp=lib1[k].no;
lib1[k].no=lib1[k+1].no;
lib1[k+1].no=temp;
}
}}}
voidchazhao()/*查找信息*/
{
intm;
charname[20],b;
do
{
printf("\n请输入想查找的书名:
");
scanf("%s",&name);
for(m=0;m
{
if(strcmp(name,lib1[m].name)==0)
{
printf("\n\t您查找的书在第%d个位置找到了!
!
!
\n",m+1);
break;
}
}
if(strcmp(name,lib1[m].name)!
=0)
printf("\n\t没有找到这本书!
!
!
\n");
else
{
printf("登录号:
%d\n书名:
%s\n作者:
%s\n分类号:
%d\n出版单位:
%s\n出版时间:
%d\n价格:
%.2f\n\n\n",
lib1[m].num,lib1[m].bookname,lib1[m].name,lib1[m].no,lib1[m].ltd,lib1[m].time,lib1[m].money);
}
printf("\n继续查找另外一本书信息,请输入y\n返回主菜单输入任意其他键\n");
scanf("%s",&b);
}while(b=='y');
}
voidshanchu()/*删除图书信息*/
{
charname[20],c;
inta,b;
do
{
printf("\n请输入要删除的书名:
\n");
scanf("%s",&name);
for(a=0;a
{
if(strcmp(name,lib1[a].name)==0)/*比较字符串的大小*/
break;
}
for(b=a;b
lib1[b]=lib1[b+1];
if(a>i)
printf("\t没有找到这本书!
!
!
\n");
else
{
printf("\n图书%s已删除!
!
!
\n",name);
printf("目前还保存有的图书信息如下:
\n----------------------------------------------------\n");
i--;
xianshi();
}
printf("\n继续删除另外一本书信息,请输入y\n返回主菜单输入任意其他键");
scanf("%s",&c);
}
while(c=='y');
}
voidcharu()/*插入信息*/
{
shuru();
paixu();
}
voidmain()/*主函数*/
{
intchange;
do{
system("cls");
printf("\t********************图书信息管理系统********************\n\n\n");
printf("\t\t\t1:
输入图书信息\n");
printf("\t\t\t2:
显示图书信息\n");
printf("\t\t\t3:
查找图书信息\n");
printf("\t\t\t4:
删除图书信息\n");
printf("\t\t\t5:
插入图书信息\n");
printf("\t\t\t6:
退出程序\n\n");
printf("请输入功能选项:
");
scanf("%d",&change);
switch(change)
{
case1:
shuru();break;
case2:
xianshi();break;
case3:
chazhao();break;
case4:
shanchu();break;
case5:
charu();break;
case6:
break;
}
getch();/*暂停程序*/
}
while(change!
=6);
}
2.参考文献:
[1]谭浩强,C程序设计题解与上机指导(第三版),北京,清华大学出版社,2005年7月。
[2]谭浩强,C程序设计(第三版),北京,清华大学出版社,2005年7月。