C语言图书管理系统代码和课程报告书Word下载.docx
《C语言图书管理系统代码和课程报告书Word下载.docx》由会员分享,可在线阅读,更多相关《C语言图书管理系统代码和课程报告书Word下载.docx(31页珍藏版)》请在冰点文库上搜索。
![C语言图书管理系统代码和课程报告书Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/24e76a9b-2743-4ad3-9fa4-f9ee941c95fc/24e76a9b-2743-4ad3-9fa4-f9ee941c95fc1.gif)
(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。
成绩
评定
报告撰写情况(30分)
系统完成情况(30分)
答辩情况(40分)
总分
20分
规范程度
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("
wb+"
))!
=NULL)
printf("
创建成功\n\n"
break;
case1:
printf("
请把名为book.txt的文件复制到c盘根目录下\n\n"
}
}
if((fpj=fopen("
\\jieyue.txt"
在c盘根目录下没有找到储存借阅信息的jieyue.txt文件\n请选择1--手动导入!
if((fpj=fopen("
请把名为jieyue.txt的文件复制到c盘根目录下\n\n"
if((fps=fopen("
\\student.txt"
在c盘根目录下没有找到储存学生信息的student.txt文件\n请选择1--手动导入!
if((fps=fopen("
请把名为student.txt的文件复制到c盘根目录下\n\n"
menu();
printf("
\n代码:
"
scanf("
while(xuan==1||xuan==2||xuan==3||xuan==4||xuan==5||xuan==6||xuan==7){
fp=fopen("
fps=fopen("
fpj=fopen("
case0:
break;
end();
print();
case3:
find();
case4:
del();
case5:
lend();
case6:
huan();
case7:
cha();
fclose(fp);
fclose(fpj);
fclose(fps);
menu();
}
然后通过函数调用实习以下功能
函数名为“voidend()”。
函数名为“voidprint()”。
函数名为“voidfind()”。
函数名为“vioddel()”。
5借阅图书通过学好和图书编号进行借阅!
函数名为“voidlend()”。
6归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过书号归还!
函数名为“voidhuan()”。
函数名为“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
3
和两个同学(信息如下)来测试了这个系统
姓名
学号
Wang
201101
Zhang
201102
输入程序后通过图书浏览可以看到已经成功输入
2.图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确查询!
我这里用演示用图书名关键字查询!
输入“Eng”,程序就找出包含“Eng”的所有图书!
3.修改删除图书,我这里演示把编号为002的图书的价格修改为63.3
4.借阅归还图书都是通过编号完成!
我这里演示wang同学借编号为001的图书!
6课程心得总结
刚开始在做这个程序的时候没有做需求分析,结果盲目的写没有目的,得到了教训!
写这个程序熟悉了很多以前学过的知识,文件运用能力有很大提高!
明白了以前很多不知道的为什么,比如以前老师不建议用全局变量,但这次我用,遇到了不少麻烦!
、
很多同学在写程序的时候都不用F10调试程序,我觉得用F10调试程序对我们很有帮助,因为这可以快速帮我们找到程序出现错误的地方!
由于我很多模块都是通过编号完成的,所以在修改图书的编号时必然会给借阅造成麻烦,这给我带来不少麻烦,不过我还是解决了!
代码
#include<
stdio.h>
stdlib.h>
string.h>
FILE*fp,*fpj,*fps;
inti,xuan;
typedefstructbook{
charname[10];
charnum[10];
charwriter[10];
intdate;
charpress[10];
floatprice;
charleibie[10];
intkucun;
intjiechu;
}bo;
typedefstructstudent{
intjie;
}st;
typedefstructjieyue{
charsnum[10];
charbnum[10];
}ji;
voidmenu()//菜单
{
\n\n"
for(i=0;
i<
80;
i++)
#"
\t\t1-----图书录入\t\t\t"
2-----图书浏览\n\n"
\t\t3-----图书查询\t\t\t"
4-----修改删除图书\n\n"
\t\t5-----借阅图书\t\t\t"
6-----归还图书\n\n"
\t\t7-----借阅查询\t\t\t\n"
\n\t\t\t\t输入其他任意键退出\n"
voidend()//录入图书
boboo,booq;
请输入图书名(最多十个字符):
%s"
boo.name);
do{
i=1;
请输入图书编号(最多十个字符):
boo.num);
fread(&
booq,sizeof(bo),1,fp);
while(!
feof(fp)){
if(strcmp(booq.num,boo.num)==0){
\n该编号已存在请重新输入\n\n"
i=0;
break;
}
fread(&
rewind(fp);
}while(i==0);
请输入图书作者(最多十个字符):
boo.writer);
请输入图书出版日期(例如2001年5月3日出版则输入20010503):
boo.date);
请输入图书价格:
%f"
boo.price);
请输入图书出版社(最多十个字符):
boo.press);
请输入图书类别(最多十个字符):
boo.leibie);
请输入图书入库数:
boo.kucun);
boo.jiechu=0;
getchar();
fseek(fp,0,2);
fwrite(&
boo,sizeof(bo),1,fp);
\n录入成功!
回到主菜单"
system("
pause"
voidprint()//浏览图书
boboo;
书名编号作者价格出版社类别原始库存借出\n"
fread(&
while(feof(fp)==0){
%-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);
\n浏览图书完毕!
intdui(char*p,char*p1)//对比两个字符串的相关度(用于精确搜索)
intbao=0,fan=1;
(int)strlen(p1);
i++){
if(p[0]==p1[i]){
bao=i;
if((int)strlen(p)>
(int)strlen(p1)-bao+1)
return0;
else
for(i=0;
(int)strlen(p);
if(p[i]!
=p1[bao+i])
fan=0;
returnfan;
voidfind()//查询图书
charhao[10];
intfan=1;
intbian=1;
请选择查询类型:
\n\n\t\t1-按图书编号模糊查询2-按图书名关键字查询\n"
\n\t\t3-按图书编号精确查询4-按图书名精确查询\n\n代码:
if(xuan==1){
请输入编号(最多十个字符):
hao);
序号书名编号作者价格出版社类别原始库存借出\n"
fan=dui(hao,boo.num);
if(fan==1){
%-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++;
elseif(xuan==2){
请输入图书名关键字(最多十个字符):
fan=dui(hao,boo.name);
if(fan==1)
elseif(xuan==4){
if(strcmp(hao,boo.name)==0)
elseif(xuan==3){
if(strcmp(hao,boo.num)==0)
else{
输入错误,正在退出!
system("
return;
\n查询图书完毕!
"
voiddel()//修改删除图书
FILE*p;
jijie;
intj=0;
intxu;
charor;
charcha[10];
\n删除修改图书只能通过图书编号来完成!
\n是否调用图书查询来查询你要操作的图书编号(Y/N)\n"
%c"
or);
if(or=='
Y'
||or=='
y'
){
find();
\n请输入你要操作的图书的编号(如果输入错误的编号,将不做任何操作):
cha);
jie,sizeof(ji),1,fpj);
while(!
feof(fpj)){
if(strcmp(jie.bnum,cha)==0){
printf("
\n这本书已有人借阅,不能操作!
\n正在退出"
system("
return;
\n\n1-删除图书2-修改图书\n\n"
请选择操作类型:
p=fopen("
\\books1.txt"
j++;
if(strcmp(boo.num,cha)==0){
if(xuan==2){
\n\n1-书名2-编号3-作者4-价格5-出版社6-类别7-库存\n\n"
请选择要修改的项目:
scanf("
xu);
if(xu==1){
printf("
你要把%s改为:
scanf("
elseif(xu==2){
do{
i=1;
printf("
scanf("
num);
rewind(fp);
fread(&
while(!
if(strcmp(booq.num,num)==0){
printf("
i=0;
break;
}
fread(&
}
}while(i==0);
for(i=0;
j;
strcpy(boo.num,num);
}
}
elseif(xu==3){