图书管理系统c语言报告.docx
《图书管理系统c语言报告.docx》由会员分享,可在线阅读,更多相关《图书管理系统c语言报告.docx(23页珍藏版)》请在冰豆网上搜索。
图书管理系统c语言报告
C语言程序设计报告
时间
设计项目图书管理系统
学院
专业班级
姓 名
学 号
指导教师
目录
一、需求分析3
二、程序流程图3
三、核心技术的实现说明12
四、课设总结13
五、参考文献13
六、源程序13
一、需求分析
根据程序要求分析,我们认为整个程序大致应该分为5个大块,
其中包括主函数以及其他4个功能函数:
存入模块voidIn_nue();
查询模块voidBook_search();借阅模块voidBook_send();图书归还模块voidBook_return()。
各个模块又利用小模块实现细小功能划分,例如:
查询模块分为全库查询voidBook_search_all();按书名查询该书籍BOOKBook_search_name(charsign[]);按编号查询该书籍BOOKBook_search_num(charsign[]);按作者查询该作者的所有书籍voidBook_search_zuozhe(BOOKbook2[],charsign[]);共4个小模块。
在5个大模块外,还应加一个独立的小块——显示模块,即显示书籍信息的函数,用于全程序调用。
各功能介绍:
1、新书存入:
主要实现程序最初运行时书籍数据的录入以及其
后的运行中新书数据的追加功能;
2、查询函数:
实现书库拥有书籍的查看、清点功能,方便管理
员查看,以及借阅者参考;
3、图书借阅:
实现从书库中借出书籍,保存记录。
(由于时间
问题,及人力不够,还不能保存借书者个人信息。
)
4、图书归还:
将已借出的书籍归还书库;
5、显示函数:
显示书籍的基本信息,主要是供上面四个函数调
用。
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每本书的信息类型为结构体类型,包括书名,书编号,作者,价格,拥有总数,已借出数量6个变量,添加及追加的书籍信息直接写入D盘的123.txt文件中,其他函数每次对书籍信息访问时,其数据来源都是123.txt文件,这样做不但可以保证书籍数据的一致性,而且可以对书籍数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1、程序总体结构图
主界面示例:
2、主函数流程图
2、新书函数流程图
选项Q
3、查询函数流程图
①查询总操作
②全库查询
③按书名查询
④按编号查
⑤按作者查与③、④类似不做赘述
4、借书函数流程图
5、还书函数与4相似,不做赘述。
三、核心技术说明
本程序主要由七个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,新书存入函数、查询数据函数、借书函数和还书函数是程序中较为核心的部分,下面分别进行说明。
1、新书存入
将数据存入一个已有的文件“123.txt”中,如果没有该文
件须手动在D盘中建立该文件,以保证数据不会丢失
2、查询
该函数的核心是利用循环以及fread()函数从文件中读取相
应数据,判断是不是所找书籍,然后调用显示函数print()显示该书籍信息。
3、借书函数
在查询的同时修改书籍已借出的数量即可。
4、还书
与借书相同。
四、总结
通过本次程序设计我们学会了一些基本编程技术,虽然在此过程中遇到不少问题,但经过小组的合作与共同努力克服了诸多困难,但由于水平有限程序中难免会有一些小问题我们已力求使得此程序臻于完美。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#include
#include
#defineBOOK_MAX100
#defineNAME_MAX20
structBOOK//每本书的基本信息
{
charB_Name[NAME_MAX];//书名
charB_Number[NAME_MAX];//书编号
charB_ZB[NAME_MAX];//主编
charB_CBS[NAME_MAX];//出版社
intB_ZS;//总数
intB_Sended;//已借出
intB_Jiage;//价格
};
voidmanu();//显示菜单
voidIn_nue();//新书存入
voidBook_send();//借出
voidBook_return();//还书
voidBreak();//退出系统
voidBook_search();//搜索,总操作
voidBook_search_all();//全库查询
BOOKBook_search_name(charsign[]);//名字查
BOOKBook_search_num(charsign[]);//编号查
voidBook_search_zuozhe(BOOKbook2[],charsign[]);//按作者查
voidprint(structBOOKbook1);//显示信息
//吴明宇完成:
主函数,显示函数,菜单函数
BOOKbook_sign;
intpan;//判断有没有找到
inti;//个数
voidmain()
{printf("******************************************************************************\n");
printf("******************************************************************************\n");
printf("****\n");
printf("**欢迎来到**图书馆管理系统**\n");
printf("****\n");
charsign;
do{
manu();
sign=getch();
switch(sign)
{
case('q'):
case('Q'):
In_nue();
break;
case('w'):
case('W'):
Book_search();
break;
case('e'):
case('E'):
Book_send();
break;
case('r'):
case('R'):
Book_return();
break;
case('t'):
case('T'):
break;
default:
printf("\n\n输入错误,请重新输入\n\n\n");
break;
}
}while(sign!
='T'&&sign!
='t');
}
//==============================================================================================
voidmanu()//显示菜单
{
printf("******************************************************************************\n");
printf("******************************************************************************\n");
printf("****\n");
printf("**菜单选项:
**\n");
printf("****\n");
printf("**
(1)存入新书请按Q;**\n");
printf("****\n");
printf("**
(2)图书查询请按W;**\n");
printf("****\n");
printf("**(3)图书借阅请按E;**\n");
printf("****\n");
printf("**(4)图书归还请按R;**\n");
printf("****\n");
printf("**(5)退出系统请按T;**\n");
printf("****\n");
printf("******************************************************************************\n");
printf("******************************************************************************\n");
}
//=============================================================================================
voidprint(BOOKbook)
{
printf("书名:
%s\n书编号:
%s\n主编:
%s\n出版社:
%s\n价格:
%d\n总数:
%d本\n已借出:
%d本\n",book.B_Name,book.B_Number,book.B_ZB,book.B_CBS,book.B_Jiage,book.B_ZS,book.B_Sended);
}
//吴文广完成:
存入函数,借出函数,还书函数
//==========================================================================================
voidIn_nue()
{
FILE*fp;
if((fp=fopen("D:
\\123.txt","at"))==NULL)
{
printf("无法打开\n");
exit(0);
}
BOOKbook;
printf("请输入书名:
\n");
scanf("%s",book.B_Name);
printf("请输入编号:
\n");
scanf("%s",book.B_Number);
printf("请输入作者:
\n");
scanf("%s",&book.B_ZB);
printf("请输入出版社\n");
scanf("%s",book.B_CBS);
printf("请输入价格:
\n");
scanf("%d",&book.B_Jiage);
printf("请输入存入总数:
\n");
scanf("%d",&book.B_ZS);
book.B_Sended=0;
fwrite(&book,sizeof(BOOK),1,fp);
print(book);
printf("已存入\n");
fclose(fp);
}
//=============================================================================================
//查询~~~~~~~~~~~
voidBook_search()//总操作
{
while
(1)
{
charsi,si2;
printf("请选择查询选项:
\n");
printf("1.全库信息查看。
\n");
printf("2.按书名查看。
\n");
printf("3.按书编号查看。
\n");
printf("4.按作者查看。
\n");
printf("5.返回。
\n");
fflush(stdin);
si=getch();
switch(si)
{
case('1'):
Book_search_all();
break;
case('2'):
printf("请输入书名:
\n");
char
name[NAME_MAX];
scanf("%s",name);
BOOKbook0=Book_search_name(name);
if(pan!
=1)
{
print(book0);
}
printf("是否继续查询?
(Y/N)\n");
si2=getch();
break;
case('3'):
printf("请输入书编号:
\n");
charnum[NAME_MAX];
scanf("%s",num);
BOOKbook01=Book_search_num(num);
if(pan!
=1)
{
print(book01);
}
printf("是否继续查询?
(Y/N)\n");
si2=getch();
break;
case('4'):
printf("请输入书作者:
\n");
charzuozhe[NAME_MAX];
scanf("%s",zuozhe);
BOOKbook02[BOOK_MAX];
Book_search_zuozhe(book02,zuozhe);
if(pan!
=1)
{
for(ints=0;s<=i;s++)print(book02[s]);
}
printf("是否继续查询?
(Y/N)\n");
si2=getch();
break;
case('5'):
si2='n';
break;
default:
printf("输入错误,清从新选择:
\n");
}
if(si2=='n'||si2=='N')break;
}
}
voidBook_search_all()//全库查询
{
FILE*fp;
inta=0;
if((fp=fopen("D:
\\123.txt","rt"))==NULL)
{
printf("无法打开\n");
exit(0);
}
rewind(fp);
while(!
feof(fp))
{
BOOKbook1;
fread(&book1,sizeof(structBOOK),1,fp);
printf("\n\n");
if(!
feof(fp))
{
print(book1);
a=1;
}
}
if(a==0)printf("书库暂时无书。
\n");
fclose(fp);
getch();
}
BOOKBook_search_name(charsign[])//按名字查询
{
pan=0;
FILE*fp;
if((fp=fopen("D:
\\123.txt","rt"))==NULL)
{
printf("无法打开\n");
exit(0);
}
BOOKbook1,book2;
intk;
rewind(fp);
while(!
feof(fp))
{
k=0;
fread(&book1,sizeof(structBOOK),1,fp);
if(strcmp(book1.B_Name,sign)==0)
{
book2=book1;
k=1;
break;
}
}
if(k==0)
{
printf("未找到该书籍\n");
pan=1;
}
fclose(fp);
returnbook2;
}
BOOKBook_search_num(charsign[])//按编号查询
{
pan=0;
FILE*fp;
if((fp=fopen("D:
\\123.txt","rt"))==NULL)
{
printf("无法打开\n");
exit(0);
}
BOOKbook1,book2;
intk=0;
rewind(fp);
while(!
feof(fp))
{
fread(&book1,sizeof(structBOOK),1,fp);
if(strcmp(book1.B_Number,sign)==0)
{
book2=book1;
k=1;
break;
}
}
if(k==0)
{
printf("未找到该书籍\n");
pan=1;
}
fclose(fp);
returnbook2;
}
voidBook_search_zuozhe(BOOKbook2[],charsign[])//按作者查
{
pan=0;
FILE*fp;
fp=fopen("D:
\\123.txt","rt");
BOOKbook1;
rewind(fp);
i=0;
while(!
feof(fp))
{
fread(&book1,sizeof(structBOOK),1,fp);
if(!
feof(fp))
{
if(strcmp(book1.B_ZB,sign)==0)
{
book2[i]=book1;
i++;
}
}
}
fclose(fp);
if(i==0)
{
printf("未找到该书籍\n");
pan=1;
book2[i]=book1;
}
i--;
}
//=============================================================================================
voidBook_send()//借出
{
printf("请输入书名:
\n");
charch[NAME_MAX];
scanf("%s",ch);
structBOOKbook00=Book_search_name(ch);
printf("确认请按Y,返回主菜单请按N\n");
chara;
a=getch();
if(book00.B_Sended>=book00.B_ZS)
{
printf("对不起,该书已经借完。
\n");
}
else
{
if((a=='y')||(a=='Y'))
{
printf("借出已成功\n");
book00.B_Sended=book00.B_Sended+1;
print(book00);
FILE*fp;
BOOKbook1[BOOK_MAX];
inti=0;
if((fp=fopen("D:
\\123.txt","rt"))==NULL)
{
printf("无法打开\n");
exit(0);
}
rewind(fp);
while(!
feof(fp))
{
BOOKbook01;
fread(&book01,sizeof(structBOOK),1,fp);
if(strcmp(book00.B_Name,book01.B_Name)==0)book01.B_Sended=book00.B_Sended;
if(!
feof(fp))
{
book1[i]=book01;
i++;
}
}
fclose(fp);
fp=fopen("D:
\\123.txt","wt");
puts("");
fclose(fp);
fp=fopen("D:
\\123.txt","at");
rewind(fp);
for(intj=0;j
fclose(fp);
}
}
}
voidBook_return()//还书
{
printf("请输入书名:
\n");
charch[NAME_MAX];
scanf("%s",ch);
structBOOKbook00=Book_search_name(ch);
printf("确认请按Y,返回主菜单请按N\n");
chara;
a=getch();
if((a=='y')||(a=='Y'))
{
printf("还书已成功\n");
book00.B_Sended=book00.B_Sended-1;
print(book00);
FILE*fp;
BOOKbook1[BOOK_MAX];
inti=0;
if((fp=fopen("D:
\\123.txt","rt"))==NULL)
{
printf("无法打开\n");
exit(0);
}
rewind(fp);
while(!
feof(fp))
{
BOOKbook01;
fread(&book01,sizeof(structBOOK),1,fp);
if(strcmp(book00.B_Name,book01.B_Name)==0)book01.B_Sended=book00.B_Sended;
if(!
feof(fp))
{
book1[i]=book01;
i++;
}
}
fclose(fp);
fp=fopen("D:
\\123.txt","wt");
puts("");
fclose(fp);
fp=fopen("D:
\\123.txt","at");
rewind(fp);
for(intj=0;j
fclose(fp);
}
}
图书管理系统设计报告