图书信息管理系统高质量C语言程序.docx
《图书信息管理系统高质量C语言程序.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统高质量C语言程序.docx(27页珍藏版)》请在冰豆网上搜索。
![图书信息管理系统高质量C语言程序.docx](https://file1.bdocx.com/fileroot1/2022-11/28/5cb15d87-c535-4a85-94df-94cff4df5478/5cb15d87-c535-4a85-94df-94cff4df54781.gif)
图书信息管理系统高质量C语言程序
课程设计总体要求:
采用模块儿化程序设计;
鼓励可视化编程;
源程序中有足够的注释;
学生可自行增加新功能模块儿;
必须上机调试通过;
注重算法运用,优化存储效率与运算效率;
需提交源程序及相关文件;
目录:
1课程任务书
2系统设计
3模块设计
3.1总体结构
3.2流程图
3.3使用的主要函数
4调试及测试
1、调试过程中的问题
2、调试结果
5设计总结
6心得体会及致谢
7答辩记录
8教师意见
一、课程设计任务书
图书信息管理系统设计
图书信息包括:
登录名、书名、作者名、分类号、出版单位、出版时间、价格等。
提供以下功能:
1.系统以菜单方式工作
2.图书信息录入功能(图书信息用文本文件形式保存)
3.图书信息浏览功能
4.查询和排序功能:
按书名查询
按作者名查询
5.图书信息删除功能
6.图书信息修改功能
二、系统设计
总体结构:
在主函数中以菜单清单的形式进入各个模块(显示、追加、修改、删除、查询、排序、退出)——即对子函数的调用,并运用switch语句实现操作。
在设计程序时,实现程序的模块化、结构化在数据库处理过程中采用文件进行存储,并将处理过后的数据信息存储到新的文件中实施对原库的保护。
流程图:
使用的主要函数:
Disp显示函数
Appe追加函数
Modi修改函数
Dele删除函数
Query查询函数
Sort排序函数
Quit退出函数
三、模块设计(主要模块功能、源代码及注释)
负责模块:
数据结构和数据文件,显示模块,追加模块,修改模块。
一、数据结构和数据文件:
本程序中,运用了数据结构。
首先对于图书中各项详细信息的记录用了结构数组的形式。
在整个过程中运用了数据文件的方式,每一次从终端输入的数据都以数据文件的形式保存到了磁盘。
结构数组:
structstu
{intdlh;/*图书登录号*/
charsname[15];/*书名*/
charzname[10];/*作者名*/
intflh;/*分类号*/
doubledj;/*单价*/
charcbdw[20];/*出版单位*/
charcbdate[10];/*出版时间*/
}s[40];
数据文件:
voidRe_file()
{
FILE*fp;//定义fp是一个指向FILE类型数据的指针变量
fp=fopen("d:
//xjl.txt","r");
//将fopen函数的返回值非给指针变量fp,使用读入方法打开xjl.txt
while(fscanf(fp,"%d\n%s\n%s\n%d\n%lf\n%s\n%s\n",&s[N].dlh,s[N].sname,s[N].zname,&s[N].flh,&s[N].dj,s[N].cbdw,s[N].cbdate)!
=EOF)N++;//EOF为文件终止符
fclose(fp);
}
voidWr_file()
{inti;
FILE*fp;
fp=fopen("d:
//newxjl.txt","w");
for(i=0;ifprintf(fp,"%d\n%s\n%s\n%d\n%lf\n%s\n%s\n",s[i].dlh,s[i].sname,s[i].zname,s[i].flh,s[i].dj,s[i].cbdw,s[i].cbdate);
fclose(fp);
}
二、显示模块程序功能介绍:
功能介绍:
此模块主要是显示图书的各项信息(包括:
图书登陆号、书名、作者名、分类号、单价、出版单位、出版时间)
源程序:
voidDisp()/*显示模块*/
{
printf("*****************************************************\n");
printf("图书登陆号书名作者名分类号单价出版单位出版时间\n");
inti;
for(i=0;iprintf("*%-7d%-11s%-8s%-8d%-8.2lf%-10s%-9s*\n",s[i].dlh,s[i].sname,s[i].zname,s[i].flh,s[i].dj,s[i].cbdw,s[i].cbdate);
printf(“***********************************************\n");
}
三、追加模块程序及功能:
功能介绍:
此模块主要是追加系统操作者想要增添的其他图书的信息(包括:
图书登陆号、书名、作者名、分类号、单价、出版单位、出版时间)
voidAppe()/*追加模块*/
{voidzj1();
voidzj2();
inta;
printf("*你确定要追加吗?
*\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&a);
switch(a)
{case1:
zj1();Disp();zj2();break;
case2:
break;default:
printf("无此选项!
请核对信息!
\n");Appe();
}
}
voidzj1()
{
printf("请输入你要追加的内容\n");
printf("图书登陆号书名作者名分类号单价出版单位出版时间\n");
scanf("%d%s%s%d%lf%s%s",&s[N].dlh,s[N].sname,s[N].zname,&s[N].flh,&s[N].dj,s[N].cbdw,s[N].cbdate);
N++;
}
voidzj2()
{inta;
printf("*追加成功!
你是否要继续追加?
*\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&a);
switch(a)
{case1:
zj1();Disp();zj2();break;
case2:
break;default:
printf("无此选项!
请核对信息!
\n");zj2();
}
}
四、修改模块程序及功能:
功能介绍:
此模块主要是修改系统操作者想要修改的数据库中已有图书的信息(包括:
图书登陆号、书名、作者名、分类号、单价、出版单位、出版时间)并可以通过图书登录号和书名查询获得信息。
源程序:
voidModi()/*修改模块*/
{inti,j,b,a,c,d,e,f;charm[40],n[40];doubleg;
voidxiugai(inti);
printf("请选择修改方式\n");
printf("*****************************\n");
printf("*1:
登录号2:
书名3:
退出*\n");
printf("*****************************\n");
scanf("%d",&a);
switch(a)
{case1:
printf("请输入你要修改书的登陆号\n");
scanf("%d",&b);
for(i=0;iif(s[i].dlh==b)
{printf("图书登陆号书名作者名分类号单价出版单位出版时间\n");
printf("*%-7d%-11s%-8s%-8d%-8.2lf%-10s%-9s*\n",s[i].dlh,s[i].sname,s[i].zname,s[i].flh,s[i].dj,s[i].cbdw,s[i].cbdate);break;
}
if(i{printf("这是你要修改的那本书的信息吗?
\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&j);
if(j==1)
xiugai(i);break;}
if(i==N)
{printf("没找到\n");
break;}
case2:
printf("请输入你要修改书的书名\n");
scanf("%s",n);
for(i=0;iif(strcmp(s[i].sname,n)==0)
{printf("图书登陆号书名作者名分类号单价出版单位出版时间\n");
printf("*%-7d%-11s%-8s%-8d%-8.2lf%-10s%-9s*\n",s[i].dlh,s[i].sname,s[i].zname,s[i].flh,s[i].dj,s[i].cbdw,s[i].cbdate);break;
}
if(i{printf("这是你要修改的那本书的信息吗?
\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&j);
if(j==1)
xiugai(i);break;}
if(i==N)
{printf("没找到\n");
break;}
}
}
voidxiugai(inti)
{intj,b,a,c,d=1,e,f;
charm[40],n[40];doubleg;
while(d==1)
{printf("请选择要修改的信息\n");
printf("**************************************************\n");
printf("*1:
作者名2:
分类号3:
单价*\n");
printf("*4.出版单位5出版时间6:
退出*\n");
printf("**************************************************\n");
scanf("%d",&c);
if(c>5)d++;
switch(c)
{case1:
printf("请输入正确的信息\n");
scanf("%s",m);
strcpy(s[i].zname,m);
printf("修改成功!
是否继续修改该书信息?
\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&d);break;
case2:
printf("请输入正确的信息\n");
scanf("%d",&f);s[i].flh=f;
printf("修改成功!
是否继续修改该书信息?
\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&d);break;
case3:
printf("请输入正确的信息\n");
scanf("%lf",&g);s[i].dj=g;
printf("修改成功!
是否继续修改该书信息?
\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&d);break;
case4:
printf("请输入正确的信息\n");
scanf("%s",m);strcpy(s[i].cbdw,m);
printf("修改成功!
是否继续修改该书信息?
\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&d);break;
case5:
printf("请输入正确的信息\n");
scanf("%s",m);strcpy(s[i].cbdate,m);
printf("修改成功!
是否继续修改该书信息?
\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&d);break;
}
}
}
四、调试及测试
1、主函数截图
2、显示模块截图在主菜单中选择1调用显示模块
3、追加模块截图
在主菜单中选择2调用追加模块
按1继续追加:
追加完毕,按2退出追加模块:
4、修改模块截图
在主菜单中选择3调用修改模块
修改成功!
继续修改:
五、设计总结:
1、本系统修改模块中运用switch语句调用下级的子菜单,由于子菜单基本模式相同所以会反复的利用而使得整个模块篇幅很长,但是运用一个whlie条件语句和定义一个xiugai()函数使得代码精简了一半。
2、在数据文件的设计过程中,由于没在D盘提前新建“fp=fopen("d:
//xjl.txt","r")”所需要的文件,以至程序设计完成后,不能正常运行。
当在D盘补充这个txt文件后,系统能够正常运行。
六、心得体会及参考文献
C语言的设计由于内容繁琐,篇幅长,函数调用之间难度较大,一个符号的缺失都有可能导致结构不能正常运行,所以学习C语言需要耐心,细致的做好每一步。
经过这次对图书管理系统的设计后,我对于文件的录入,读取这部分的内容有了更深的了解,对于switch语句的使用也更加熟练了。
参考文献:
1、贾宗璞,许合利《C语言程序设计》人民邮电出版社2007年
2、谭浩强著《C程序设计(第三版)》清华大学出版社
源程序:
#include"stdio.h"
#include"string.h"
#include"conio.h"
intN=0;
structstu
{intdlh;/*图书登录号*/
charsname[15];/*书名*/
charzname[10];/*作者名*/
intflh;/*分类号*/
doubledj;/*单价*/
charcbdw[20];/*出版单位*/
charcbdate[10];/*出版时间*/
}s[40];
voidRe_file()
{
FILE*fp;
fp=fopen("d:
//xjl.txt","r");
while(fscanf(fp,"%d\n%s\n%s\n%d\n%lf\n%s\n%s\n",&s[N].dlh,s[N].sname,s[N].zname,&s[N].flh,&s[N].dj,s[N].cbdw,s[N].cbdate)!
=EOF)N++;
fclose(fp);
}
voidWr_file()
{inti;
FILE*fp;
fp=fopen("d:
//newxjl.txt","w");
for(i=0;ifprintf(fp,"%d\n%s\n%s\n%d\n%lf\n%s\n%s\n",s[i].dlh,s[i].sname,s[i].zname,s[i].flh,s[i].dj,s[i].cbdw,s[i].cbdate);
fclose(fp);
}
voidDisp()/*显示模块*/
{printf("*******************************************************\n");
printf("图书登陆号书名作者名分类号单价出版单位出版时间\n");
inti;
for(i=0;iprintf("*%-7d%-11s%-8s%-8d%-8.2lf%-10s%-9s*\n",s[i].dlh,s[i].sname,s[i].zname,s[i].flh,s[i].dj,s[i].cbdw,s[i].cbdate);
printf("********************************************************\n");
}
voidAppe()/*追加模块*/
{voidzj1();
voidzj2();
inta;
printf("*你确定要追加吗?
*\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&a);
switch(a)
{case1:
zj1();Disp();zj2();break;
case2:
break;default:
printf("无此选项!
请核对信息!
\n");Appe();
}}
voidzj1()
{
printf("请输入你要追加的内容\n");
printf("图书登陆号书名作者名分类号单价出版单位出版时间\n");
scanf("%d%s%s%d%lf%s%s",&s[N].dlh,s[N].sname,s[N].zname,&s[N].flh,&s[N].dj,s[N].cbdw,s[N].cbdate);
N++;
}
voidzj2()
{inta;
printf("*追加成功!
你是否要继续追加?
*\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&a);
switch(a)
{case1:
zj1();Disp();zj2();break;
case2:
break;default:
printf("无此选项!
请核对信息!
\n");zj2();
}}
voidModi()/*修改模块*/
{inti,j,b,a,c,d,e,f;charm[40],n[40];doubleg;
voidxiugai(inti);
printf("请选择修改方式\n");
printf("*****************************\n");
printf("*1:
登录号2:
书名3:
退出*\n");
printf("*****************************\n");
scanf("%d",&a);
switch(a)
{case1:
printf("请输入你要修改书的登陆号\n");
scanf("%d",&b);
for(i=0;iif(s[i].dlh==b)
{printf("图书登陆号书名作者名分类号单价出版单位出版时间\n");
printf("*%-7d%-11s%-8s%-8d%-8.2lf%-10s%-9s*\n",s[i].dlh,s[i].sname,s[i].zname,s[i].flh,s[i].dj,s[i].cbdw,s[i].cbdate);break;
}
if(i{printf("这是你要修改的那本书的信息吗?
\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&j);
if(j==1)
xiugai(i);break;}
if(i==N)
{printf("没找到\n");
break;}
case2:
printf("请输入你要修改书的书名\n");
scanf("%s",n);
for(i=0;iif(strcmp(s[i].sname,n)==0)
{printf("图书登陆号书名作者名分类号单价出版单位出版时间\n");
printf("*%-7d%-11s%-8s%-8d%-8.2lf%-10s%-9s*\n",s[i].dlh,s[i].sname,s[i].zname,s[i].flh,s[i].dj,s[i].cbdw,s[i].cbdate);break;
}
if(i{printf("这是你要修改的那本书的信息吗?
\n");
printf("*******************\n");
printf("*1:
是*2:
否\n");
printf("*******************\n");
scanf("%d",&j);
if(j==1)
xiugai(i);break;}
if(i==N)
{printf("没找到\n");
break;}
}
}
voidxiugai(inti)
{intj,b,a,c,d=1,e,f;
charm[40],n[40];doubleg;
while(d==1)
{printf("请选择要修改的信息\n");
printf("**************************************************\n");
printf("*1:
作者名2:
分类号3:
单价*\n");
printf("*4.出