C语言图书馆管理系统课程设计.docx
《C语言图书馆管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《C语言图书馆管理系统课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
C语言图书馆管理系统课程设计
一、需求分析
1.程序以菜单的方式工作,具备图书的添加、删除、修改、查询、统计操作,数据存储采用文件形式。
2.定义结构体数组structlibrarybookinf[30],用以存储ISBN、书名、作者名、图书类别、出版单位、出版时间、价钱、数量信息。
利用文件开辟并将信息保存在“bookinf.txt”中。
3.用户从键盘输入需要的操作,其中“ISBN、书名、作者名、图书类别、出版单位”需使用字符输入,“出版时间、价格、数量”采用数字输入。
4.测试数据:
(1)查找:
若找到了所要查找的书本,则打印出书本信息;若没有找到,则打印“没有找到您要找的书本”
(2)删除:
若找到了所要查找的书本,按下y确认删除后,打印出“该书已删除”;若没有找到要删除的书本,则打印“没有找到该书,退出操作”
(3)修改:
若找到了要修改的书本,打印“请输入你要修改的信息”并开始修改;若没有找到要修改的书本,则打印“没有找到要修改的书本”
5.程序执行命令为:
(1)创建“bookinf.txt”文件
(2)将图书信息用添加操作加进“bookinf.txt”文件中
(3)用户选择所需操作
(4)搜索结果
二、概要设计
1.定义结构体数组structlibrarybookinf[50]。
bookinf[i].ISBN//ISBN
bookinf[i].name//书名
bookinf[i].author//作者名
bookinf[i].vari//图书类别
bookinf[i].pubplace//出版单位
bookinf[i].pubtime//出版时间
bookinf[i].price//价格
bookinf[i].num//数量
/*用以下程序开辟存储文件"bookinf.txt"*/
FILE*fp;
if((fp=fopen("bookinf.txt","r+"))==NULL)
{
printf("无法打开文件!
\n");
return;
}
2.程序构造
add()
通过此函数将输入的书本信息添加存储进"bookinf.txt"文件中,用于下一次的查询或删、改、统操作的调用。
del()
通过此函数完成对"bookinf.txt"文件中书本信息的删除,“printf("确定要删除该书吗?
(y/n)\n");”键盘输入y/n确定书本信息的删除,删除后将不再有该书记录
modify()
通过此函数完成对书本信息的修改,修改内容包括:
ISBN、书名、作者名、图书类别、出版单位、出版时间、价格、数量。
search()
此函数为查询书本信息操作,可查询"bookinf.txt"文件中存储的书本信息。
count()
此操作为统计操作,用于统计"bookinf.txt"文件中存储书本的总数量及金额数。
main()
通过对上述函数的调用,将所得信息打印出来
3.主程序流程
主函数
增加模块
删除模块
修改模块
查询模块
统计模块
三、详细设计
1.图书馆管理的数据类型
structlibrary{
charISBN[20];//ISBN
charname[30];//书名
charauthor[30];//作者名
charvari[10];//图书类别
charpubplace[50];//出版单位
intpubtime;//出版时间
intprice;//价格
intnum;//数量
};
//----------基本操作的算法描述--------------------
1.文件部分
FILE*fp;
if((fp=fopen("bookinf.txt","r+"))==NULL)//检查打开的操作是否出错
{
printf("无法打开文件!
\n");//若出错则打印该行文字
return;
}
2.查询操作部分
printf("\n请输入您要查找的书名\n");
scanf("%s",bookname);//输入想查询的书名
while(!
feof(fp))//循环直到文件尾部,函数值为真
{fread(&bookinf,sizeof(structlibrary),1,fp);//从fp中读入1个长度为sizeof(structlibrary)的数据,存到bookinf[]中
if(strcmp(bookinf.name,bookname)==0)//比较输入的书名和文件中保存的书名,若相同
{printf("ISBN书名作者名图书类别出版单位出版时间价格数量\n");
printf("%s%s%s%s%s%d%d%d\n",bookinf.ISBN,bookinf.name,bookinf.author,
bookinf.vari,bookinf.pubplace,bookinf.pubtime,bookinf.price,bookinf.num);//若相同,则打印出书本的信息
i=1;break;}
}
if(i!
=1)//若没有找到该书
{printf("没有找到您要找的书本\n");}
3.删除部分
strcpy(bookinf[flag].ISBN,bookinf[flag+1].ISBN);//将后一本书的ISBN复制给前一本书的ISBN
strcpy(bookinf[flag].name,bookinf[flag+1].name);//将后一本书的书名复制给前一本书的书名
strcpy(bookinf[flag].author,bookinf[flag+1].author);//将后一本书的作者名复制给前一本书的作者名
strcpy(bookinf[flag].vari,bookinf[flag+1].vari);//将后一本书的图书种类复制给前一本书的图书类别
strcpy(bookinf[flag].pubplace,bookinf[flag+1].pubplace);//将后一本书的出版单位复制给前一本书的出版单位
bookinf[flag].pubtime=bookinf[flag+1].pubtime;//将后一本书的出版时间复制给前一本书的出版时间
bookinf[flag].price=bookinf[flag+1].price;//将后一本书的价格复制给前一本书的价格
bookinf[flag].num=bookinf[flag+1].num;//将后一本书的数量复制给前一本书的数量
4.修改部分
if(strcmp(bookinf[i].ISBN,nbook)==0)//如果输入的书本nbook及文件中存储的ISBN相同,则开始修改
5.统计部分
inttn,total=0,alprice=0;//初始化总数和总价格的值为0
for(i=0;i<=tn;i++){
total=total+bookinf[i].num;//运用递归,新的总数和为上一次的总数值加上这一次的值
alprice=alprice+(bookinf[i].num)*(bookinf[i].price);//运用递归,新的总价钱和为上一次的总价钱值加上这一次的价钱
}
printf("图书总册书为%d总金额数为%d\n",total,alprice);//打印出图书总册书和总金额数
6.菜单部分
printf("欢迎登录图书管系统\n");
printf("************************************\n");
printf("*1.添加图书2.删除图书*\n");
printf("*3.修改图书4.查询图书*\n");
printf("*5.统计图书0.退出系统*\n");
printf("************************************\n");
7.选择部分
switch(b){
case1:
add();break;//选择1时,执行添加操作
case2:
del();break;//选择2时,执行删除操作
case3:
modify();break;//选择3时,执行修改操作
case4:
search();break;//选择4时,执行查询操作
case5:
count();break;//选择5时,执行统计操作
case0:
flag=1;break;//选择0时,执行退出操作
default:
printf("您输入的选择错误!
\n");//否则,打印输入错误
四.调试部分
1.开始写程序时,没有运用文件保存函数,导致输入的书本信息不能被查看
2.程序删除函数部分产生左值方面的错误,后运用strcmp()解决
3.程序删除函数部分,开始不论找到还是没找到要删除的书本,都会打印循环外的"该书已删除!
",后运用i=n,解决了这个问题。
五.用户手册
1.本程序执行文件为“bookinf.txt”.
2.进入菜单部分,会出现一下选择菜单
1.添加图书2.删除图书
3.修改图书4.查询图书
5.统计图书0.退出系统
并提示"请输入你的选择!
",用户仅需选择0~5运行该程序
3.添加、修改图书部分,其中ISBN、name、author、vari、pubplace、需输入字符(即字母或数字),pubtime、price、num需输入数字。
4.添加、修改图书部分,输入的信息不可超标,需遵循ISBN为20字节,name、author为30字节,vari为10字节,pubplace为50字节。
六、测试部分
欢迎登录图书管系统************************************
*1.添加图书2.删除图书*
*3.修改图书4.查询图书*
*5.统计图书0.退出系统*
************************************
请输入你的选择!
1
请输入需要添加的书本书以及您要添加的书本数信息
1
ISBN:
1
书名:
1
作者:
1
图书类别:
1
出版单位:
1
出版时间:
1
价钱:
1
数量:
1
欢迎登录图书管系统************************************
*1.添加图书2.删除图书*
*3.修改图书4.查询图书*
*5.统计图书0.退出系统*
************************************
请输入你的选择!
3
请输入您要修改的书号
2
没有找到要修改的书本
欢迎登录图书管系统************************************
*1.添加图书2.删除图书*
*3.修改图书4.查询图书*
*5.统计图书0.退出系统*
************************************
请输入你的选择!
3
请输入您要修改的书号
1
ISBN:
2
书名:
2
作者:
2
图书类别:
2
出版单位:
2
出版时间:
2
价钱:
2
数量:
2
修改成功!
欢迎登录图书管系统************************************
*1.添加图书2.删除图书*
*3.修改图书4.查询图书*
*5.统计图书0.退出系统*
************************************
请输入您的选择!
4
请输入您要查找的书名
2
ISBN书名作者名图书类别出版单位出版时间价格数量
22222222
欢迎登录图书管系统************************************
*1.添加图书2.删除图书*
*3.修改图书4.查询图书*
*5.统计图书0.退出系统*
************************************
请输入您的选择!
2
请输入您要删除的书本名
2
22222222
确定要删除该书吗?
(y/n)
y
该书已删除!
欢迎登录图书管系统************************************
*1.添加图书2.删除图书*
*3.修改图书4.查询图书*
*5.统计图书0.退出系统*
************************************
请输入您的选择!
0
pressanykeytocontinue!
七、附录
#include"stdio.h"
#include"string.h"
#include"struct.h"
#include"conio.h"
structlibrarybookinf[30];
intn;
structlibrary{
charISBN[20];
charname[30];
charauthor[30];
charvari[10];
charpubplace[50];
intpubtime;
intprice;
intnum;
};//结构体部分
voidmain(){//主函数部分
intb,flag=0;
while
(1){//菜单部分
printf("欢迎登录图书管系统\n");
printf("************************************\n");
printf("*1.添加图书2.删除图书*\n");
printf("*3.修改图书4.查询图书*\n");
printf("*5.统计图书0.退出系统*\n");
printf("************************************\n");
printf("请输入你的选择!
\n");
scanf("%d",&b);
switch(b){
case1:
add();break;//选择1,执行添加操作
case2:
del();break;//选择2,执行删除操作
case3:
modify();break;//选择3,执行修改操作
case4:
search();break;//选择4,执行查询操作
case5:
count();break;//选择5,执行统计操作
case0:
flag=1;break;//选择0,退出程序操作
default:
printf("您输入的选择错误!
\n");//否则,打印该句
}
}
}
voidadd(){/*添加函数*/
inti;
charx;
printf("\n请输入需要添加的书本书以及您要添加的书本数信息\n");
scanf("%d",&n);//输入要添加的书本数
for(i=0;iprintf("ISBN:
");
scanf("%s",bookinf[i].ISBN);
printf("书名:
");
scanf("%s",bookinf[i].name);
printf("作者:
");
scanf("%s",bookinf[i].author);
printf("图书类别:
");
scanf("%s",bookinf[i].vari);
printf("出版单位:
");
scanf("%s",bookinf[i].pubplace);
printf("出版时间:
");
scanf("%d",&bookinf[i].pubtime);
printf("价钱:
");
scanf("%d",&bookinf[i].price);
printf("数量:
");
scanf("%d",&bookinf[i].num);
}
x=getch();//按任意键返回菜单
save();/*调用保存函数*/
}
voiddel(){//删除函数
inti=0,flag,t=0,tn=0;//tn为保存文件内的书本数
chara,bookname[20];
FILE*fp;
if((fp=fopen("bookinf.txt","r"))==NULL)//如果无法打开文件
{
printf("无法打开文件!
\n");
return;
}
printf("\n请输入您要删除的书本名\n");
scanf("%s",bookname);
rewind(fp);
while(!
feof(fp))/*没有结束时进行循环*/
{fread(&bookinf[tn],sizeof(structlibrary),1,fp);tn++;
}
fclose(fp);
for(i=0;i{if(strcmp(bookinf[i].name,bookname)==0)//如果输入的书名及文件内保存的书名相同
{
printf("%s%s%s%s%s%d%d%d\n",bookinf[i].ISBN,bookinf[i].name,bookinf[i].author,bookinf[i].vari,bookinf[i].pubplace,bookinf[i].pubtime,bookinf[i].price,bookinf[i].num);
getch();
flag=i;t=1;
printf("确定要删除该书吗?
(y/n)\n");
scanf("%s",&a);
if(a=='y')
{
for(flag;flag{strcpy(bookinf[flag].ISBN,bookinf[flag+1].ISBN);//将后一本书的ISBN复制给前一本书的ISBN
strcpy(bookinf[flag].name,bookinf[flag+1].name);//将后一本书的书名复制给前一本书的书名
strcpy(bookinf[flag].author,bookinf[flag+1].author);//将后一本书的作者名复制给前一本书的作者名
strcpy(bookinf[flag].vari,bookinf[flag+1].vari);//将后一本书的图书类别复制给前一本书的图书类别
strcpy(bookinf[flag].pubplace,bookinf[flag+1].pubplace);//将后一本书的出版单位复制给前一本书的出版单位
bookinf[flag].pubtime=bookinf[flag+1].pubtime;//将后一本书的出版时间复制给前一本书的出版时间
bookinf[flag].price=bookinf[flag+1].price;//将后一本书的价格复制给前一本书的价格
bookinf[flag].num=bookinf[flag+1].num;//将后一本书的数量复制给前一本书的数量
tn--;//删除后书的数量减一
}
printf("\n该书已删除!
\n");break;
}
}
getch();
}
if(t!
=1)//如果没有找到要删除的书
{
printf("\n没有找到该书,退出操作\n");
}
save();
}
voidsearch(){//查询函数
inti=0;
FILE*fp;//文件打开
structlibrarybookinf;
charbookname[20];
if((fp=fopen("bookinf.txt","r"))==NULL)
{
printf("无法打开文件!
\n");
return;
}
printf("\n请输入您要查找的书名\n");
scanf("%s",bookname);
while(!
feof(fp))//循环直到文件尾部,函数值为真
{fread(&bookinf,sizeof(structlibrary),1,fp);//从fp中读入1个长度为sizeof(structlibrary)的数据,存到bookinf[]中
if(strcmp(bookinf.name,bookname)==0)/*比较输入的书名和文件中保存的书名*/
{printf("ISBN书名作者名图书类别出版单位出版时间价格数量\n");
printf("%s%s%s%s%s%d%d%d\n",bookinf.ISBN,bookinf.name,bookinf.author,
bookinf.vari,bookinf.pubplace,bookinf.pubtime,bookinf.price,bookinf.num);
i=1;break;}
}
if(i!
=1)//如果没有找到要查询的书
{printf("没有找到您要找的书本\n");}
printf("\n按任意键返回菜单\n");
getch();
}
voidmodify(){//修改函数
inti=0,n=0;
charnbook[20];
FILE*fp;//文件打开
charbookname[20];
printf("\n请输入您要修改的书号\n");
scanf("%s",nbook);
if((fp=fopen("bookinf.txt","r+"))==NULL)
{
printf("无法打开文件!
\n");
return;
}
while(!
feof(fp))/*没有结束时进行循环*/
{fread(&bookinf[n],sizeof(structlibrary),1,fp);n++;
}
for(i=0;i{
if(strcmp(bookinf[i].ISBN,nbook)==0)//如果输入的nbook及文件内保存的ISBN相同
{
printf("请输入你要修改的信息\n");
printf("ISBN:
");