C语言图书管理系统代码和课程报告书.docx
- 文档编号:23058990
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:31
- 大小:80.66KB
C语言图书管理系统代码和课程报告书.docx
《C语言图书管理系统代码和课程报告书.docx》由会员分享,可在线阅读,更多相关《C语言图书管理系统代码和课程报告书.docx(31页珍藏版)》请在冰豆网上搜索。
C语言图书管理系统代码和课程报告书
课程报告
课程名称:
程序设计实践
专业班级:
学生姓名:
学号:
任课教师:
学期:
2011-2012学年第二学期
课程报告任务书
题目
图书信息管理系统
主要
内容
开发一个图书信息管理系统,图书信息包括:
图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。
使之能提供以下基本功能:
(1)图书信息录入功能(图书信息用文件保存)--输入v
(2)图书信息浏览功能--输出
(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):
l①按书名查询②按作者名查询
按照价钱排序
按出版时间排序等等
(4)图书信息的删除与修改
扩展功能:
可以按照自己的程度进行扩展。
比如
(1)简单的权限处理
(2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。
(4)模糊查询(5)综合查询(6)统计功能比如统计处某一类别的图书信息或筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。
任务
要求
一、提交材料应包括:
(1)系统源代码
(2)课程报告
二、整个设计过程具体要求
(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;
(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)
(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;
(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。
成绩
评定
报告撰写情况(30分)
系统完成情况(30分)
答辩情况(40分)
总分
内容
20分
规范程度
5分
程序测试
5分
基本功能20分
扩展功能10分
自述情况10分
答辩情况
30分
成绩评定教师:
1需求分析
2概要设计
可适当参考以下提示:
数据结构
⑵模块划分
⑶程序总体框架
分为七个模块!
都是通过自定义函数完成!
图书删除修改,图书借阅与归还都是通过编号完成,所以图书编号在我的程序里边是唯一的!
1图书录入可以录入图书名,作者,出版社,出版日期,价格!
录入图书编号时函数就会判断此编号是否存在,若存在不能成功录入!
2图书浏览可以浏览全部图书!
3图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确查询!
模糊查询和关键字查询事通过比价字符串的相似度而实现的!
4修改删除图书可以通过图书查询来查询操作的图书编号,通过编号操作!
函数会提示用户是否调用图书查询来找到自己想要操作的图书的编号。
如果某一本图书已经被借阅那么用户就不能删除该图书!
5借阅图书通过学号和图书编号进行借阅!
如果该学号是第一次借阅那么会提示用户输入自己的姓名,并存入student.txt,方便以后借阅与归还!
6归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过编号归还!
7借阅查询可查询某个学生已借但未归还的图书!
3详细设计
分为七个模块!
都是通过自定义函数完成!
主函数为:
main(){
if((fp=fopen("c:
\\book.txt","rb+"))==NULL){
printf("在c盘根目录下没有找到储存图书信息的book.txt文件\n请选择1--手动导入!
2--创建此文件\n");
scanf("%d",&xuan);
switch(xuan){
case2:
if((fp=fopen("c:
\\book.txt","wb+"))!
=NULL)
printf("创建成功\n\n");
break;
case1:
printf("请把名为book.txt的文件复制到c盘根目录下\n\n");
}
}
if((fpj=fopen("c:
\\jieyue.txt","rb+"))==NULL){
printf("在c盘根目录下没有找到储存借阅信息的jieyue.txt文件\n请选择1--手动导入!
2--创建此文件\n");
scanf("%d",&xuan);
switch(xuan){
case2:
if((fpj=fopen("c:
\\jieyue.txt","wb+"))!
=NULL)
printf("创建成功\n\n");
break;
case1:
printf("请把名为jieyue.txt的文件复制到c盘根目录下\n\n");
}
}
if((fps=fopen("c:
\\student.txt","rb+"))==NULL){
printf("在c盘根目录下没有找到储存学生信息的student.txt文件\n请选择1--手动导入!
2--创建此文件\n");
scanf("%d",&xuan);
switch(xuan){
case2:
if((fps=fopen("c:
\\student.txt","wb+"))!
=NULL)
printf("创建成功\n\n");
break;
case1:
printf("请把名为student.txt的文件复制到c盘根目录下\n\n");
}
}
menu();
printf("\n代码:
");
scanf("%d",&xuan);
while(xuan==1||xuan==2||xuan==3||xuan==4||xuan==5||xuan==6||xuan==7){
fp=fopen("c:
\\book.txt","rb+");
fps=fopen("c:
\\student.txt","rb+");
fpj=fopen("c:
\\jieyue.txt","rb+");
switch(xuan){
case0:
break;
case1:
end();break;
case2:
print();break;
case3:
find();break;
case4:
del();break;
case5:
lend();break;
case6:
huan();break;
case7:
cha();break;
}
fclose(fp);
fclose(fpj);
fclose(fps);
menu();
printf("\n代码:
");
scanf("%d",&xuan);
}
}
然后通过函数调用实习以下功能
1图书录入可以录入图书名,作者,出版社,出版日期,价格!
函数名为“voidend()”。
2图书浏览可以浏览全部图书!
函数名为“voidprint()”。
3图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确查询!
函数名为“voidfind()”。
4修改删除图书可以通过图书查询来查询操作的图书编号,通过编号操作!
函数名为“vioddel()”。
5借阅图书通过学好和图书编号进行借阅!
函数名为“voidlend()”。
6归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过书号归还!
函数名为“voidhuan()”。
7借阅查询可查询某个学生已借但未归还的图书!
函数名为“voidcha()”。
4调试分析
调试程序时主要问题出现在文件指针的移动,我图书和借阅信息的删除!
因为我整个程序都是通过图书编号来完成操作,所以我必须保证图书编号不被重复,用户修改图书编号和删除时我都要考虑这本书书是否被借阅!
解决第一个问题就是利用fseek(),rewind()这两个函数来控制指针。
解决第二个问题利用文件。
比如删除图书,我先把不用删除的图书写到另一个文件里,然后再以新建的方式打开原文件,把图书信息又写回来!
5测试结果
1.我用了三册图书信息(如下)
书名
编号
作者
出版日期
价格
出版社
类别
原始库存
English
001
Mary
20110101
18.2
Southpress
Language
1
Math
002
Robert
20110102
12.3
Northpress
Nature
2
Chinese
003
Hans
20110103
30.3
Eastpress
Language
3
和两个同学(信息如下)来测试了这个系统
姓名
学号
Wang
201101
Zhang
201102
输入程序后通过图书浏览可以看到已经成功输入
2.图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确查询!
我这里用演示用图书名关键字查询!
输入“Eng”,程序就找出包含“Eng”的所有图书!
3.修改删除图书,我这里演示把编号为002的图书的价格修改为63.3
4.借阅归还图书都是通过编号完成!
我这里演示wang同学借编号为001的图书!
6课程心得总结
刚开始在做这个程序的时候没有做需求分析,结果盲目的写没有目的,得到了教训!
写这个程序熟悉了很多以前学过的知识,文件运用能力有很大提高!
明白了以前很多不知道的为什么,比如以前老师不建议用全局变量,但这次我用,遇到了不少麻烦!
、
很多同学在写程序的时候都不用F10调试程序,我觉得用F10调试程序对我们很有帮助,因为这可以快速帮我们找到程序出现错误的地方!
由于我很多模块都是通过编号完成的,所以在修改图书的编号时必然会给借阅造成麻烦,这给我带来不少麻烦,不过我还是解决了!
代码
#include
#include
#include
FILE*fp,*fpj,*fps;
inti,xuan;
typedefstructbook{
charname[10];
charnum[10];
charwriter[10];
intdate;
charpress[10];
floatprice;
charleibie[10];
intkucun;
intjiechu;
}bo;
typedefstructstudent{
charname[10];
charnum[10];
intjie;
}st;
typedefstructjieyue{
charsnum[10];
charbnum[10];
}ji;
voidmenu()//菜单
{
printf("\n\n");
for(i=0;i<80;i++)
printf("#");
printf("\n\n");
printf("\t\t1-----图书录入\t\t\t");
printf("2-----图书浏览\n\n");
printf("\t\t3-----图书查询\t\t\t");
printf("4-----修改删除图书\n\n");
printf("\t\t5-----借阅图书\t\t\t");
printf("6-----归还图书\n\n");
printf("\t\t7-----借阅查询\t\t\t\n");
printf("\n\t\t\t\t输入其他任意键退出\n");
printf("\n\n");
for(i=0;i<80;i++)
printf("#");
printf("\n\n");
}
voidend()//录入图书
{
boboo,booq;
printf("请输入图书名(最多十个字符):
");
scanf("%s",boo.name);
do{
i=1;
printf("请输入图书编号(最多十个字符):
");
scanf("%s",boo.num);
fread(&booq,sizeof(bo),1,fp);
while(!
feof(fp)){
if(strcmp(booq.num,boo.num)==0){
printf("\n该编号已存在请重新输入\n\n");
i=0;
break;
}
fread(&booq,sizeof(bo),1,fp);
}
rewind(fp);
}while(i==0);
printf("请输入图书作者(最多十个字符):
");
scanf("%s",boo.writer);
printf("请输入图书出版日期(例如2001年5月3日出版则输入20010503):
");
scanf("%d",&boo.date);
printf("请输入图书价格:
");
scanf("%f",&boo.price);
printf("请输入图书出版社(最多十个字符):
");
scanf("%s",boo.press);
printf("请输入图书类别(最多十个字符):
");
scanf("%s",boo.leibie);
printf("请输入图书入库数:
");
scanf("%d",&boo.kucun);
boo.jiechu=0;
getchar();
fseek(fp,0,2);
fwrite(&boo,sizeof(bo),1,fp);
printf("\n录入成功!
回到主菜单");
system("pause");
}
voidprint()//浏览图书
{
boboo;
printf("书名编号作者价格出版社类别原始库存借出\n");
fread(&boo,sizeof(bo),1,fp);
while(feof(fp)==0){
printf("%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
fread(&boo,sizeof(bo),1,fp);
}
printf("\n浏览图书完毕!
回到主菜单");
system("pause");
}
intdui(char*p,char*p1)//对比两个字符串的相关度(用于精确搜索)
{
intbao=0,fan=1;
for(i=0;i<(int)strlen(p1);i++){
if(p[0]==p1[i]){
bao=i;
break;
}
}
if((int)strlen(p)>(int)strlen(p1)-bao+1)
return0;
else
for(i=0;i<(int)strlen(p);i++){
if(p[i]!
=p1[bao+i])
fan=0;
}
returnfan;
}
voidfind()//查询图书
{
charhao[10];
intfan=1;
intbian=1;
boboo;
printf("请选择查询类型:
\n\n\t\t1-按图书编号模糊查询2-按图书名关键字查询\n");
printf("\n\t\t3-按图书编号精确查询4-按图书名精确查询\n\n代码:
");
scanf("%d",&xuan);
if(xuan==1){
printf("请输入编号(最多十个字符):
");
scanf("%s",hao);
printf("序号书名编号作者价格出版社类别原始库存借出\n");
fread(&boo,sizeof(bo),1,fp);
while(!
feof(fp)){
fan=dui(hao,boo.num);
if(fan==1){
printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
bian++;}
fread(&boo,sizeof(bo),1,fp);
}
}
elseif(xuan==2){
printf("请输入图书名关键字(最多十个字符):
");
scanf("%s",hao);
printf("序号书名编号作者价格出版社类别原始库存借出\n");
fread(&boo,sizeof(bo),1,fp);
while(!
feof(fp)){
fan=dui(hao,boo.name);
if(fan==1)
printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
fread(&boo,sizeof(bo),1,fp);
}
}
elseif(xuan==4){
printf("请输入图书名(最多十个字符):
");
scanf("%s",hao);
printf("序号书名编号作者价格出版社类别原始库存借出\n");
while(!
feof(fp)){
if(strcmp(hao,boo.name)==0)
printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
fread(&boo,sizeof(bo),1,fp);
}
}
elseif(xuan==3){
printf("请输入图书编号(最多十个字符):
");
scanf("%s",hao);
printf("序号书名编号作者价格出版社类别原始库存借出\n");
while(!
feof(fp)){
if(strcmp(hao,boo.num)==0)
printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
fread(&boo,sizeof(bo),1,fp);
}
}
else{
printf("输入错误,正在退出!
");
system("pause");
return;
}
printf("\n查询图书完毕!
");
system("pause");
}
voiddel()//修改删除图书
{
FILE*p;
jijie;
intj=0;
charnum[10];
boboo,booq;
intxu;
charor;
charcha[10];
printf("\n删除修改图书只能通过图书编号来完成!
\n是否调用图书查询来查询你要操作的图书编号(Y/N)\n");
getchar();
scanf("%c",&or);
if(or=='Y'||or=='y'){
find();
rewind(fp);}
printf("\n请输入你要操作的图书的编号(如果输入错误的编号,将不做任何操作):
");
scanf("%s",cha);
fread(&jie,sizeof(ji),1,fpj);
while(!
feof(fpj)){
if(strcmp(jie.bnum,cha)==0){
printf("\n这本书已有人借阅,不能操作!
\n正在退出");
system("pause");
return;
}
fread(&jie,sizeof(ji),1,fpj);
}
printf("\n\n1-删除图书2-修改图书\n\n");
printf("请选择操作类型:
");
scanf("%d",&xuan);
fread(&boo,sizeof(bo),1,fp);
p=fopen("c:
\\books1.txt","wb+");
while(!
feof(fp)){
j++;
if(strcmp(boo.num,cha)==0){
if(xuan==2){
printf("\n\n1-书名2-编号3-作者4-价格5-出版社6-类别7-库存\n\n");
printf("请选择要修改的项目:
");
scanf("%d",&xu);
if(xu==1){
printf("你要把%s改为:
",boo.name);
scanf("%s",boo.name);}
elseif(xu==2){
do{
i=1;
printf("你要把%s改为:
",boo.num);
scanf("%s",num);
rewind(fp);
fread(&booq,sizeof(bo),1,fp);
while(!
feof(fp)){
if(strcmp(booq.num,num)==0){
printf("\n该编号已存在请重新输入\n\n");
i=0;
break;
}
fread(&booq,sizeof(bo),1,fp);
}
}while(i==0);
rewind(fp);
for(i=0;i fread(&boo,sizeof(bo),1,fp); strcpy(boo.num,num); } } elseif(xu==3){ printf("你要把%s改为: ",boo.writer);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 图书 管理 系统 代码 课程 报告书