C语言图书馆管理系统课程设计Word文档下载推荐.docx
《C语言图书馆管理系统课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言图书馆管理系统课程设计Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
![C语言图书馆管理系统课程设计Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-11/25/1f0e09c6-7f65-449d-8321-d15e12b74914/1f0e09c6-7f65-449d-8321-d15e12b749141.gif)
if((fp=fopen("
"
r+"
))==NULL)
{
printf("
无法打开文件!
\n"
);
return;
}
2.程序构造
add()
通过此函数将输入的书本信息添加存储进"
文件中,用于下一次的查询或删、改、统操作的调用。
del()
通过此函数完成对"
文件中书本信息的删除,“printf("
确定要删除该书吗?
(y/n)\n"
”键盘输入y/n确定书本信息的删除,删除后将不再有该书记录
modify()
通过此函数完成对书本信息的修改,修改内容包括:
ISBN、书名、作者名、图书类别、出版单位、出版时间、价格、数量。
search()
此函数为查询书本信息操作,可查询"
文件中存储的书本信息。
count()
此操作为统计操作,用于统计"
文件中存储书本的总数量及金额数。
main()
通过对上述函数的调用,将所得信息打印出来
3.主程序流程
主函数
增加模块
删除模块
修改模块
查询模块
统计模块
三、详细设计
1.图书馆管理的数据类型
structlibrary{
charISBN[20];
//ISBN
charname[30];
//书名
charauthor[30];
//作者名
charvari[10];
//图书类别
charpubplace[50];
//出版单位
intpubtime;
//出版时间
intprice;
//价格
intnum;
//数量
};
//----------基本操作的算法描述--------------------
1.文件部分
FILE*fp;
if((fp=fopen("
))==NULL)//检查打开的操作是否出错
//若出错则打印该行文字
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.菜单部分
欢迎登录图书管系统\n"
************************************\n"
*1.添加图书2.删除图书*\n"
*3.修改图书4.查询图书*\n"
*5.统计图书0.退出系统*\n"
7.选择部分
switch(b){
case1:
add();
//选择1时,执行添加操作
case2:
del();
//选择2时,执行删除操作
case3:
modify();
//选择3时,执行修改操作
case4:
search();
//选择4时,执行查询操作
case5:
count();
//选择5时,执行统计操作
case0:
flag=1;
//选择0时,执行退出操作
default:
您输入的选择错误!
//否则,打印输入错误
四.调试部分
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
请输入需要添加的书本书以及您要添加的书本数信息
ISBN:
1
书名:
作者:
图书类别:
出版单位:
出版时间:
价钱:
数量:
欢迎登录图书管系统************************************
3
请输入您要修改的书号
2
没有找到要修改的书本
欢迎登录图书管系统************************************
请输入你的选择!
2
修改成功!
请输入您的选择!
4
请输入您要查找的书名
ISBN书名作者名图书类别出版单位出版时间价格数量
22222222
请输入您要删除的书本名
确定要删除该书吗?
(y/n)
y
该书已删除!
0
pressanykeytocontinue!
七、附录
#include"
stdio.h"
string.h"
struct.h"
conio.h"
structlibrarybookinf[30];
intn;
//结构体部分
voidmain(){//主函数部分
intb,flag=0;
while
(1){//菜单部分
欢迎登录图书管系统\n"
*1.添加图书2.删除图书*\n"
*3.修改图书4.查询图书*\n"
*5.统计图书0.退出系统*\n"
scanf("
%d"
&
b);
switch(b){
//选择1,执行添加操作
//选择2,执行删除操作
//选择3,执行修改操作
//选择4,执行查询操作
//选择5,执行统计操作
//选择0,退出程序操作
//否则,打印该句
}
voidadd(){/*添加函数*/
inti;
charx;
\n请输入需要添加的书本书以及您要添加的书本数信息\n"
n);
//输入要添加的书本数
for(i=0;
n;
i++){//用循环添加书本信息
ISBN:
bookinf[i].ISBN);
书名:
bookinf[i].name);
作者:
bookinf[i].author);
图书类别:
bookinf[i].vari);
出版单位:
bookinf[i].pubplace);
出版时间:
bookinf[i].pubtime);
价钱:
bookinf[i].price);
数量:
bookinf[i].num);
x=getch();
//按任意键返回菜单
save();
/*调用保存函数*/
voiddel(){//删除函数
inti=0,flag,t=0,tn=0;
//tn为保存文件内的书本数
chara,bookname[20];
r"
))==NULL)//如果无法打开文件
\n请输入您要删除的书本名\n"
rewind(fp);
while(!
feof(fp))/*没有结束时进行循环*/
bookinf[tn],sizeof(structlibrary),1,fp);
tn++;
fclose(fp);
tn;
i++)
{if(strcmp(bookinf[i].name,bookname)==0)//如果输入的书名与文件内保存的书名相同
{
%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;
a);
if(a=='
y'
)
{
for(flag;
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--;
//删除后书的数量减一
}
\n该书已删除!
getch();
if(t!
=1)//如果没有找到要删除的书
\n没有找到该书,退出操作\n"
voidsearch(){//查询函数
inti=0;
//文件打开
structlibrarybookinf;
charbookname[20];
if(strcmp(bookinf.name,bookname)==0)/*比较输入的书名和文件中保存的书名*/
ISBN书名作者名图书类别出版单位出版时间价格数量\n"
=1)//如果没有找到要查询的书
\n按任意键返回菜单\n"
getch();
voidmodify(){//修改函数
inti=0,n=0;
charnbook[20];
\n请输入您要修改的书号\n"
nbook);
feof(fp))/*没有结束时进行循环*/
bookinf[n],sizeof(structlibrary),1,fp);
n++;
{
if(strcmp(bookinf[i].ISBN,nbook)==0)//如果输入的nbook与文件内保存的ISBN相同
请输入你要修改的信息\n"