C语言课程设计 图书管理系统.docx
- 文档编号:5948794
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:32
- 大小:502.10KB
C语言课程设计 图书管理系统.docx
《C语言课程设计 图书管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计 图书管理系统.docx(32页珍藏版)》请在冰豆网上搜索。
C语言课程设计图书管理系统
C语言课程设计报告
院系:
学号:
班号:
姓名:
标题:
图书管理系统
第一部分
题目要求………………………………………………3
第二部分
需求分析………………………………………………3
第三部分
总体设计………………………………………………4
第四部分
详细设计………………………………………………4
1)主函数………………………………………4
2)各功能模块设计……………………………6
3)公共函数…………………………………16
第五部分
上机操作……………………………………………17
第六部分
总结…………………………………………………20
附录
(源代码)…………………………………………22
第一部分题目要求
图书管理系统包括:
图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等,是设计一图书管理系统,使之能够提供以下功能:
1.新图书基本信息的输入。
2.图书基本信息的查询。
3.对撤销图示基本信息的删除。
4.办理借书手续。
5.办理换书手续。
第二部分需求分析
根据题目的要求,需要建立一个文件来保存图书信息,每本书的信息用一个结构体来保存,结构体的成员应包括图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号,结构体中的存在状态可设为整型,用不同数字代表借还状态;在借书和还书手续中,要注意结构体的成员变量存在状态的值,使用指针会比较方便。
程序中需要对图书信息实现输入、查询、删除、借书和还书的功能,首先要使用菜单进行各项功能的选择;其次需要有文件的输入、输出功能,提供显示、查找等操作。
在程序的运行过程中,注意各功能在使用完毕后返回菜单的设置,以方便运行。
第三部分总体设计
根据上面的需求分析,可以将整个图书管理系统分为输入模块、查找模块、删除模块、借书模块和还书模块(如图3-1所示)。
图3-1系统功能模块图
第四部分详细设计
4.1数据结构
在这个程序里,每本书的信息用一个结构体book来保存,结构体的成员应包括图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号,结构体中的存在状态设为整型,用不同数字代表库中高本书的数量。
structbook
{chartitle[30];
intnumber;
charauthor[30];
floatprice;
intstore;
charborrower_name[20];
charborrower_gender[5];
intborrower_number;
}s[N];
其中的N定义为该系统所管理书籍的最大值。
#defineN100//书籍的最多本数
4.2主函数
【说明】
主函数中,对“菜单”进行了输出,将各个模块的函数列出来,实现对各种功能的选择。
其流程图如图4.1-1所示。
图4.1-1主函数流程图
【程序】
voidmain()
{intx;
do
{printf("**************************************菜单**************************************\n"
"***********1.输入图书信息**********\n"
"***********2.查找图书信息**********\n"
"***********3.删除图书信息**********\n"
"***********4.借阅图书**********\n"
"***********5.归还图书**********\n"
"***********0.退出**********\n");
printf("********************************************************************************\n");
printf("请在0-5中选择,以回车键结束\n");
scanf("%d",&x);
switch(x)
{case1:
input(&s[0]);break;//输入新图书信息模块
case2:
search(&s[0]);break;//查找模块
case3:
del(&s[0]);break;//删除模块
case4:
borrow(&s[0]);break;//借书模块
case5:
retur(&s[0]);break;//还书模块
case0:
break;//退出
}
}while(x!
=0);
}
4.2各功能模块设计
(1)输入模块
【分析】
在输入模块中,主要以输入输出语句为主,使用了do…while…和for…这两种循环方式,do…while…是作为一级循环,for…为二级循环。
在输入图书的基本信息过程中,使用指针进行字符串及值的传递。
全局变量m是用于记录图书的储存位置,便于在后来的查询、删除等功能中的使用。
调用save(structbook*p)来保存输入的数据。
定义的整型变量y,用来储存是否继续的指令。
该模块的流程图如下图4.2-1所示。
图4.2-1输入模块流程图
【程序】
voidinput(structbook*p)
{inty;
for(;p<(&s[0]+N);p++)
{printf("请输入书名:
");scanf("%s",p->title);
printf("请输入编号:
");scanf("%d",&p->number);
printf("请输入作者:
");scanf("%s",p->author);
printf("请输入图书价格:
");scanf("%f",&p->price);
printf("请输入图书数量:
");scanf("%d",&p->store);
m++;
printf("第%d个信息已经输入完毕,是否继续?
\n按任意键继续,按0键结束.",m);
scanf("%d",&y);//读取是否继续
if(y==0)
{save(&s[0]);
read(&s[0]);//调用读取文件函数
break;
}
}
}
(2)查找模块
【分析】
此模块的提供两种查找方式,输入书名或作者,均可实现查找功能。
在函数的结尾,选择是否继续查找。
图4.2-2查找模块流程图
【程序】
voidsearch(structbook*p)//查询模块
{intn;
charname1[20];
charname2[20];
charc[3];
do
{p=&s[0];
printf("\t请选择查找方式:
\n");//打印查询方式菜单
printf("1.按书名查找\n2.按作者查找\n0.返回\n");
printf("请在0-2中选择:
\n\n");
scanf("%d",&n);//读取查找方式
if(n==0)break;
switch(n)
{case1:
printf("请输入书名:
\n");scanf("%s",name1);break;
case2:
printf("请输入作者:
\n");scanf("%s",name2);break;
}
for(;p<&s[m];p++)
{read(&s[0]);//调用读取函数
if(strcmp(p->title,name1)==0||strcmp(p->author,name2)==0)
{printf("\n查找图书信息成功!
\n");
printf("书名编号作者价格数量\n");
printf("%-10s%-10d%-10s%-10.2f%-10d\n",p->title,p->number,p->author,p->price,p->store);//打印信息
break;
}
}
printf("是否继续查找?
\n“是”请键入“yes”,“否”请按任意键,返回菜单\n");
scanf("%s",c);
}while(strcmp(c,"yes")==0);//判断是否结束
}
(3)删除模块
【分析】
该模块实现对撤销图书的删除。
用户首先查找要删除的图书,图书列表出来后,确认是否删除。
当删除成功后,询问是继续删除还返回退出并返回菜单。
其流程图如下图4.2-3所示。
图4.2-3删除模块流程图
【程序】
voiddel(structbook*p)//删除模块
{inti;
structbook*p1,*p2;
charname1[20];
charname2[20];
charc[3];
intn;
do
{p=&s[0];
printf("请选择删除以方式回车键结束:
\n");//打印删除方式菜单
printf("1.按书名删除\n2.按作者删除\n0.返回\n");
printf("请在0-2中选择:
\n\n");
scanf("%d",&n);//读取查找方//
if(n==0)break;
switch(n)
{case1:
printf("请输入书名:
\n");
scanf("%s",name1);break;
case2:
printf("请输入作者:
\n");
scanf("%s",name2);break;
}
read(&s[0]);//调用读取函数
for(i=0;i { if(strcmp(p->title,name1)==0||strcmp(p->author,name2)==0) {p1=p; for(p2=p1+1;p2<=&s[m];p1++,p2++) { strcpy(p1->title,p2->title); strcpy(p1->author,p2->author); p1->number=p2->number; p1->store=p2->store; p1->price=p2->price; m--; printf("删除成功! ! \n"); } } else{printf("没有该书记录! ! "); break;} } printf("是否继续删除? “是”请键入“yes”,“否”请按任意键,返回菜单\n"); scanf("%s",c);//读取是否继续 save(&s[0]);//调用保存函数 }while(strcmp(c,"yes")==0);//判断是否继续删除 } (4)借书模块 【分析】 该模块实现系统的借书功能。 首先查找要借阅的图书,并且显示该项图书的记录,输入借书人的信息后store--,借书成功,询问是否继续。 该模块的流程图如下图4.2-4所示。 图4.2-4借书模块流程图 【程序】 voidborrow(structbook*p)//借书模块 {intz; charname3[20],name4[20]; charw[3]; do {p=&s[0]; printf("请先查找您要借阅的图书! "); printf("请选择查找方式: \n");//打印查询方式菜单 printf("1.按书名查找\n2.按作者查找\n0.返回\n"); printf("请在0-2中选择: \n"); scanf("%d",&z);//读取查找方式 if(z==0)break; switch(z) {case1: printf("请输入书名: \n");scanf("%s",name3);break; case2: printf("请输入作者: \n");scanf("%s",name4);break; } read(&s[0]);//调用读取函数 for(;p<&s[m];p++) {if(strcmp(p->title,name3)==0||strcmp(p->author,name4)==0) {printf("\n查找图书信息成功! \n"); printf("书名编号作者价格数量\n"); printf("%-10s%-10d%-10s%-10.2fs%-10d\n",p->title,p->number, p->author,p->price,p->store);//打印信息 printf("请输入您的姓名: ");scanf("%s",p->borrower_name); printf("请输入您的性别: ");scanf("%s",p->borrower_gender); printf("请输入您的学号: ");scanf("%d",&p->borrower_number); p->store--; printf("借书成功! \n"); printf("书名编号作者价格数量借书人性别学号\n"); printf("%-10s%-10d%-10s%-10.2f%-10d%-10s%-10s%-10d\n",p->title, p->number,p->author,p->price,p->store,p->borrower_name, p->borrower_gender,p->borrower_number); break; } } printf("是否继续借书? ? "); printf("“是”请键入“yes”,“否”请按任意键,返回菜单\n"); scanf("%s",w);//读取是否继续 save(&s[0]);//调用保存函数 }while(strcmp(w,"yes")==0);//判断是否继续借书 } (5)还书模块 【分析】 该模块实现还书功能。 首先作者查找所要还得图书,找到后将借书人的基本信息清除并保存,实现还书功能。 其流程图如图4.2-5所示。 图4.2-5还书模块流程图 【程序】 voidretur(structbook*p)//还书模块 {inte,f; charname5[20]; charname6[20]; chart[3]; do {p=&s[0]; printf("请先查找您要还的图目! "); printf("请选择查找方式: \n");//打印查询方式菜单 printf("1.按书名查找\n2.按作者查找\n0.返回\n"); printf("请在0-2中选择: \n\n"); scanf("%d",&e);//读取查找方式 if(e==0)break; switch(e) {case1: printf("请输入书名: \n");scanf("%s",name5);break; case2: printf("请输入作者: \n");scanf("%s",name6);break; } read(&s[0]);//调用读取函数 for(;p<&s[m];p++) {if(strcmp(p->title,name5)==0||strcmp(p->author,name6)==0) {printf("\n查找图书信息成功! \n"); printf("确认还书请按“1”! ");//确认是否还书 scanf("%d",&f); if(f==1) {strcpy(p->borrower_name,"0"); strcpy(p->borrower_gender,"0"); p->borrower_number=0; p->store++; printf("书名编号作者价格数量借书人性别学号\n"); printf("%-10s%-10d%-10s%-10.2f%-10d%-10s%-10s%-10d\n",p->title,p->number,p->author,p->price,p->store,p->borrower_name,p->borrower_gender,p->borrower_number);//打印信息 } break; } else{printf("没有该书记录! ! "); break;} } printf("是否继续还书? \n"); printf("“是”请键入“yes”,“否”请按任意键,返回菜单\n"); scanf("%s",t);//读取是否继续 save(&s[0]);//调用保存函数 }while(strcmp(t,"yes")==0);//判断是否继续还书 } 4.3公共函数 (1)保存图书信息函数 voidsave(structbook*p) {FILE*fp,*fp1; inti; if((fp=fopen("tushu.dat","wb"))==NULL)//打开文件并判断是否出错 {printf("创建文件失败! \n\n");//打印出错提示 getchar();return; } if((fp1=fopen("book.dat","wb"))==NULL)//打开文件并判断是否出错 {printf("创建文件失败! \n\n");//打印出错提示 getchar();return; } for(i=0;i if(fwrite(p,sizeof(structbook),1,fp)==0)//向文件写入数据,并判断是否出错 printf("向文件输入数据失败! \n\n"); fprintf(fp1,"%d",m); fclose(fp);//关闭文件 fclose(fp1);//关闭文件 } (2)读取文件信息函数 voidread(structbook*p)//从文件读取信息模块 {FILE*fp,*fp1; inti; if((fp=fopen("tushu.dat","rb"))==NULL)//打开文件,并判断是否出错 {printf("出错,请检查文件是否存在,按任意键返回住菜单");//打印出错提示 getchar(); } if((fp1=fopen("book.dat","rb"))==NULL)//打开文件并判断是否出错 {printf("创建文件失败! \n\n");//打印出错提示 getchar();return; } fscanf(fp1,"%d",&m); fclose(fp1);//关闭文件 for(i=0;i {fread(p,sizeof(structbook),1,fp);//从文件中读取信息 } fclose(fp);//关闭文件 } 第五部分上机操作 (1)运行主函数,进入主菜单 (2)输入模块 (3)查找模块 (4)删除模块 (5)借书模块 (6)还书模块 (7)退出 第六部分总结 通过这次为期一周的C语言上机实习,我明白C语言这门课程光仅仅是听课是远远不够的,上机训练也不容忽视。 通过上机训练,才能够明白自己知识的不足,更加深刻的理解C语言中的知识点,从而找到知识漏点,还对以前认为自己已懂了的知识点也理解更加深刻。 当遇到了自己当时不知如何编写的C语言题目时,通过自己的学习和同学的交流,得以顺利的编写,使我增加了对C语言的兴趣和学好C语言的信心。 本次C语言实习的几个作用: 1.加深对课堂讲授内容的理解 课堂上要讲授许多关于C语言的语法规则,听起来比较枯燥,不易记忆。 而通过多次上机练习,对于语法知识就有了更深的认识,自然而然地掌握C语言的语法规定。 学习C语言不能停留在书本,而是要利用学到的知识编写C语言程序,解决实际问题。 通过对自己编写程序的调试,发现问题,解决问题,逐步提高自己对C语言的理解和程序开发能力。 2.熟悉程序开发环境、学习计算机系统的操作方法 一个C语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。 所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。 通过上机实验,熟练地掌握C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。 同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。 在这次实习的过程我中遇到了一些难题,老师给予了我细心的指导,帮助我解决了很多程序上的问题,再次向老师的帮助表示衷心的感谢! 附录(源程序) 【总程序】 #include #include #include #include #defineN100//书籍的最多本数 structbook {chartitle[30]; intnumber; charauthor[30]; floatprice; intstore; charborrower_name[20]; charborrower_gender[5]; intborrower_number; }s[N]; intm=0; voidinput(structbook*p);//输入图书信息 voidsave(structbook*p);//保存图书信息 voidread(structbook*p);//读取图书信息 voidsearch(structbook*p);//查找图书信息 voiddel(structbook*p);//删除图书信息 voidborrow(structbook*p);//借阅图书 voidretur(structbook*p);//归还图书 voidmain() { intx; do { printf("**************************************菜单**************************************\n" "***********1.输入图书信息**********\n" "***********2.查找图书信息**********\n" "***********3.删除图书信息**********\n" "***********4.借阅图书**********\n" "***********5.归还图书**********\n" "***********0.退出**********\n"); printf("********************************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言课程设计 图书管理系统 语言 课程设计 图书 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)