C语言图书馆管理系统课程设计.docx
《C语言图书馆管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《C语言图书馆管理系统课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
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:
")