图书管理系统.docx
- 文档编号:18222581
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:27
- 大小:393.69KB
图书管理系统.docx
《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(27页珍藏版)》请在冰点文库上搜索。
图书管理系统
《图书管理系统》
课程设计报告
专业:
*******
班级:
*******
学号:
*******
姓名:
*******
【题目要求】
图书管理信息包括:
图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等,试设计一图书管理系统,使之能提供以下功能:
(1)新图书基本信息的输入
(2)图书基本信息的查询
(3)对撤销图书信息的查询
(4)办理借书手续
(5)办理还书手续
【提示】
建立图书管理信息结构体,结构体成员包括图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号。
存在状态设为整型,可用不同数字代表借还状态。
借书和还书手续要注意修改结构体的成员变量存在状态的值。
一、系统需求分析
根据题目要求,由于数据要以文件形式存储,所以应提供文件的输入、输出等操作;在程序中要实现图书管理系统的各项功能,应提供输入、查询、删除、借书、还书、退出程序等一系列操作;另外还应提供键盘式选择菜单以实现功能选择。
二、系统总体设计
分析了整个系统之后,根据上面的系统需求分析,可以将这个系统的设计分为如下五大模块:
图书基本信息输入、图书基本信息查询、借书、还书、退出系统
三、系统详细设计
1、主函数设计
主函数的设计比较简介,只包括一个菜单函数,主要实现菜单功能,提供了菜单输入、模块选择、退出系统等模块的调用。
其中各功能模块用菜单方式选
【小结】
在这个程序中,定义了一个结构体数组来存放图书的各种信息,包括:
图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号,结构体如下:
structlibrary/*定义图书管理信息结构体*/
{
charbook[20];
charnum[10];
floatprice;
charauthor[12];
intcon;
charname[12];
charsex[4];
charnumber[12];
}infor[N],infom;
主函数比较简单,但函数的调用很多,所以,在程序的开头就加上了各函数的声明,如下:
voidchoice(intm);
voidinqy_infor();
voidprintf_back();
intfpri(intk);
voidpri();
voidborrowing();
voidreturning();
实现菜单选择功能,使用的是switch语句,根据用户输入的菜单选项n,调用不同的函数实现各种功能:
switch(n)
{
case1:
input_infor();break;/*信息输入模块*/
case2:
inqy_infor();break;/*信息查询模块(包括对撤销图书信息的删除模块)*/
case3:
borrowing();break;/*借书模块*/
case4:
returning();break;/*还书模块*/
case5:
exit(0);/*退出*/
}
2.各功能模块设计
2.1图书信息输入模块
【小结】
图书信息输入模块主要包括信息输入函数、信息显示函数以及保存信息的输入到文件部分。
具体程序如下:
voidscan()/*信息输入函数*/
{
scanf("%s%s%f%s%d%s%s%s",infom.book,infom.num,&infom.price,infom.author,&infom.con,infom.name,infom.sex,infom.number);
}
voidprint()/*信息显示函数*/
{
printf("书名编号价格作者状态姓名性别学号\n");
printf("%-18s%-8s%-4.2f%-8s%d%-8s%-2s%-10s\n",infom.book,infom.num,infom.price,infom.author,infom.con,infom.name,infom.sex,infom.number);
}
intfprint()/*将信息输出到文件*/
{
FILE*fp;
if((fp=fopen("book.txt","a"))==NULL)
{
printf("\nCannotopenthefile\n");
return0;
}
else
fprintf(fp,"\n%-18s%-8s%-4.2f%-8s%d%-8s%-2s%-s",infom.book,infom.num,infom.price,infom.author,infom.con,infom.name,infom.sex,infom.number);
fclose(fp);
return1;
}
2.2图书信息查询模块
【小结】
图书信息查询模块主要调用了文件读入函数和查找函数以便于图书信息的查询。
其中查找函数程序如下:
intsearch(intm)/*查找函数*/
{
inti,flag=0;
charstr[20];
printf("请输入书名:
\n");
scanf("%s",str);/*输入要查找的书名*/
for(i=0;i if(strcmp(infor[i].book,str)==0) { printf("\n书名编号价格作者状态姓名性别学号\n"); printf("%-18s%-8s%-4.2f%-8s%d%-8s%-2s%-10s\n",infor[i].book,infor[i].num,infor[i].price,infor[i].author,infor[i].con,infor[i].name,infor[i].sex,infor[i].number); printf("\n"); flag=1;n=i; return(flag); } if(flag==0) { printf("未找到该书! \n\n"); book_name(m);/*选择下一步操作,退出或重新输入*/ } } 2.3删除模块 【小结】 删除模块主要调用了删除函数以及相关到文件的保存。 具体程序如下: intdelete_inf(intm)/*删除函数*/ { inti,j; FILE*fp; structlibraryst; for(i=0;i { if(i==n)continue; else printf("%-18s%-8s%-4.2f%-8s%d%-8s%-2s%-10s\n",infor[i].book,infor[i].num,infor[i].price,infor[i].author,infor[i].con,infor[i].name,infor[i].sex,infor[i].number); } st=infor[n]; for(j=n;j infor[j]=infor[j+1]; infor[m-1]=st; if((fp=fopen("book.txt","w"))==NULL) { printf("\nCannotopenthefile\n"); return0; } for(i=0;i fprintf(fp,"%-18s%-8s%-4.2f%-8s%d%-8s%-2s%-s\n",infor[i].book,infor[i].num,infor[i].price,infor[i].author,infor[i].con,infor[i].name,infor[i].sex,infor[i].number); fprintf(fp,"%-18s%-8s%-4.2f%-8s%d%-8s%-2s%-s",infor[m-2].book,infor[m-2].num,infor[m-2].price,infor[m-2].author,infor[m-2].con,infor[m-2].name,infor[m-2].sex,infor[m-2].number); printf("\n该书已被删除! \n\n\n"); fclose(fp); lmsys(); return1; } 2.4借书模块 【小结】 借书模块是自编辑了借书函数。 其中运用到文件的保存及调用。 其主要程序如下: voidborrowing() { intk,c,q=1; k=fscan(); c=search(k); if(infor[n].con==0) { printf("这本书已经借出! \n"); q=0; } else { infor[n].con=0; printf("请输入借书人信息: \n"); printf("姓名性别学号\n"); scanf("%s%s%s",infor[n].name,infor[n].sex,infor[n].number);/*输入借书人的姓名,姓别,学号*/ } if(q==1) { pri();/*显示信息*/ fpri(k);/*将信息输出到文件*/ } printf_back();/*调用选择函数,选择下一步操作是反回主菜单还是退出*/ } 2.5还书模块 【小结】 还书模块其实与借书模块有些相似。 都运用到文件的保存及调用。 自编辑了还书函数,其程序如下: voidreturning() { intk,c,q=1; k=fscan(); c=search(k); if(infor[n].con==1) { printf("输入错误! "); q=0; } else { infor[n].con=1; strcpy(infor[n].name,"0"); strcpy(infor[n].sex,"0"); strcpy(infor[n].number,"0"); } if(q==1) { pri(); fpri(k); } printf_back();/*调用选择函数,选择下一步操作是反回主菜单还是退出*/ } voidprintf_back() { intw; printf("\n\n操作成功! \n\n"); printf("请选择下一步操作: \n\t1>.退出系统2>.反回主菜单: []\b\b"); scanf("%d",&w); if(w==1)exit(0); elselmsys(); } 四、总结 经过连日的奋斗,终于完成了这个图书管理系统的设计制作。 感谢老师和学长对我的指导和帮助,使我可以更快的完成这个系统的制作。 在读写文件的相关操作中我屡次犯错,原因是打开一个二进制文件和打开一个文本文件所存放的信息和读取的信息是不同的。 由于这一失误,在很长的一段时间内阻碍了我继续向前的脚步。 后来向精通C语言的学长请教,终于弄明白了这一原理,得以继续向前,继续完成这一程序设计。 给予每一位同学清晰明了的界面和全面的信息,方便每一位同学的操作,这是我设计程序的一个宗旨,鉴于这一点,我添加了一个函数来实现信息的删除与修改,使程序更加完善。 毋庸置疑,学习的过程就是寻找错误和改正错误的过程。 在这次实习中,我发现了自己编程方面的很多不足,也遇到了很多困难,但通过自己的努力,终于完成了这个程序设计。 在这次C语言课程设计实习中,我充分的利用了以前学习的知识,更加系统的理解和掌握C语言的基本概念、语言特点和编程技巧,利用系统提供的标准函数和自定义函数进行程序设计,培养了利用C语言设计综合程序的能力。 附: 源代码: #include #include #include #defineN1000 voidlmsys(); intfprint(); voidprint(); voidscan(); voidinput_infor(); intfscan(); voidbook_name(intm); intsearch(); intdeleat_inf(intm); voidchoice(intm); voidinqy_infor(); voidprintf_back(); intfpri(intk); voidpri(); voidborrowing(); voidreturning(); structlibrary/*定义图书管理信息结构体*/ { charbook[20]; charnum[10]; floatprice; charauthor[12]; intcon; charname[12]; charsex[4]; charnumber[12]; }infor[N],infom; intn; /*****************主函数******************/ main() { lmsys();/*主菜单函数*/ } voidlmsys()/*主菜单函数*/ { intn,w; do { puts("\n\t*************************图书管理系统*********************\n\n\n"); puts("\t\t\t1.图书基本信息输入"); puts("\t\t\t2.图书基本信息查询"); puts("\t\t\t3.借书"); puts("\t\t\t4.还书"); puts("\t\t\t5.退出系统"); puts("\n\n\t**********************************************************\n\n"); puts("\t\t\t*******************\n"); printf("\t\t\t状态: 0_借出;1_未借\n"); puts("\t\t\t*******************\n"); printf("Choiceyournumber(1-5): []\b\b"); scanf("%d",&n); if(n<1||n>5) { w=1; getchar(); } elsew=0; }while(w==1); switch(n) { case1: input_infor();break;/*信息输入模块*/ case2: inqy_infor();break;/*信息查询模块(包括对撤销图书信息的删除模块)*/ case3: borrowing();break;/*借书模块*/ case4: returning();break;/*还书模块*/ case5: exit(0);/*退出*/ } } /***********图书信息输入模块***************/ voidinput_infor() { intn=1; do {printf("\n\n请输入新书信息: \n\n"); printf("书名编号价格作者状态姓名性别学号\n"); scan();/*调用信息输入函数*/ puts("*****************************************************************************\n"); print();/*调用信息显示函数*/ puts("*****************************************************************************\n"); fprint();/*将信息输出到文件*/ printf("\n"); printf("1_继续输入0_返回主菜单\n"); scanf("%d",&n); }while(n==1); lmsys();/*调用主菜单函数*/ } voidscan()/*信息输入函数*/ { scanf("%s%s%f%s%d%s%s%s",infom.book,infom.num,&infom.price,infom.author,&infom.con,infom.name,infom.sex,infom.number); } voidprint()/*信息显示函数*/ { printf("书名编号价格作者状态姓名性别学号\n"); printf("%-18s%-8s%-4.2f%-8s%d%-8s%-2s%-10s\n",infom.book,infom.num,infom.price,infom.author,infom.con,infom.name,infom.sex,infom.number); } intfprint()/*将信息输出到文件*/ { FILE*fp; if((fp=fopen("book.txt","a"))==NULL) { printf("\nCannotopenthefile\n"); return0; } else fprintf(fp,"\n%-18s%-8s%-4.2f%-8s%d%-8s%-2s%-s",infom.book,infom.num,infom.price,infom.author,infom.con,infom.name,infom.sex,infom.number); fclose(fp); return1; } /************图书信息查询模块*************/ voidinqy_infor()/*查询模块*/ { intm,c; m=fscan();/*调用文件读入函数*/ c=search(m);/*调用查找函数*/ if(c==1)choice(m);/*选择下一步操作*/ } intfscan()/*文件读入函数*/ { inti,s; FILE*fp; fp=fopen("book.txt","r"); if(! fp) { printf("\n\nCannotopenthisfile\n");exit(0); } for(i=0;! feof(fp);i++) fscanf(fp,"%s%s%f%s%d%s%s%s",infor[i].book,infor[i].num,&infor[i].price,infor[i].author,&infor[i].con,infor[i].name,infor[i].sex,infor[i].number); s=i; fclose(fp); printf("\n\n"); puts("**************************************************************************\n"); printf("\n书名编号价格作者状态姓名性别学号\n\n"); for(i=0;i printf("%-18s%-8s%-4.2f%-8s%d%-8s%-2s%-10s\n",infor[i].book,infor[i].num,infor[i].price,infor[i].author,infor[i].con,infor[i].name,infor[i].sex,infor[i].number); puts("*************************************************************************\n"); return(i); } intsearch(intm)/*查找函数*/ { inti,flag=0; charstr[20]; printf("请输入书名: \n"); scanf("%s",str);/*输入要查找的书名*/ for(i=0;i if(strcmp(infor[i].book,str)==0) { printf("\n书名编号价格作者状态姓名性别学号\n"); printf("%-18s%-8s%-4.2f%-8s%d%-8s%-2s%-10s\n",infor[i].book,infor[i].num,infor[i].price,infor[i].author,infor[i].con,infor[i].name,infor[i].sex,infor[i].number); printf("\n"); flag=1;n=i; return(flag); } if(flag==0) { printf("未找到该书! \n\n"); book_name(m);/*选择下一步操作,退出或重新输入*/ } } voidbook_name(intm) { intw; printf("请选择下一步操作: \n\n\t1).退出系统\t2).重新输入: []\b\b"); scanf("%d",&w); if(w==1)exit(0); else search(m);/*调用查找函数*/ } voidchoice(intm) { intj; printf("请选择下一步操作: \n"); puts("\t1.删除"); puts("\t2.反回查找首页"); puts("\t3.反回主菜单"); printf("Choiceyounumber(1-3)[]\b\b"); scanf("%d",&j); switch(j) { case1: deleat_inf(m);break;/*调用删除函数*/ case2: inqy_infor();break;/*反回查询模块*/ case3: lmsys();/*调用主菜单函数*/ } } /*************删除模块****************/ intdeleate_inf(intm)/*删除函数*/ { inti,j; FILE*fp;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统