C语言课程设计图书管理系统Word格式文档下载.docx
《C语言课程设计图书管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计图书管理系统Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。
输入新书
查找图书
删除图书
借阅图书
归还图书
图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所示。
显示一系列功能选项
输入n,判断n
是否是0~5?
调用与n相应的模块
N
Y
开始
结束
图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(&
//查找模块
case3:
del(&
//删除模块
case4:
borrow(&
//借书模块
case5:
retur(&
//还书模块
case0:
break;
//退出
}
}while(x!
=0);
}
4.2各功能模块设计
(1)输入模块
【分析】
在输入模块中,主要以输入输出语句为主,使用了do…while…和for…这两种循环方式,do…while…是作为一级循环,for…为二级循环。
在输入图书的基本信息过程中,使用指针进行字符串及值的传递。
全局变量m是用于记录图书的储存位置,便于在后来的查询、删除等功能中的使用。
调用save(structbook*p)来保存输入的数据。
定义的整型变量y,用来储存是否继续的指令。
该模块的流程图如下图4.2-1所示。
输入图书的基本信息
调用save(struckbook*p)保存函数,m++
判断y是否为0?
开始
返回菜单
结束
图4.2-1输入模块流程图
voidinput(structbook*p)
{inty;
for(;
p<
(&
s[0]+N);
p++)
{printf("
请输入书名:
scanf("
%s"
p->
title);
请输入编号:
p->
number);
请输入作者:
author);
请输入图书价格:
%f"
price);
请输入图书数量:
store);
m++;
第%d个信息已经输入完毕,是否继续?
\n按任意键继续,按0键结束."
m);
y);
//读取是否继续
if(y==0)
{save(&
read(&
//调用读取文件函数
}
(2)查找模块
此模块的提供两种查找方式,输入书名或作者,均可实现查找功能。
在函数的结尾,选择是否继续查找。
选择查找方式0-2
1或2
输入书名或作者
调用read(structbook*p)
使用for循环查找并显示记录
判断是否继续
图4.2-2查找模块流程图
voidsearch(structbook*p)//查询模块
{intn;
charname1[20];
charname2[20];
charc[3];
{p=&
s[0];
\t请选择查找方式:
\n"
//打印查询方式菜单
1.按书名查找\n2.按作者查找\n0.返回\n"
请在0-2中选择:
\n\n"
n);
//读取查找方式
if(n==0)break;
switch(n)
请输入书名:
name1);
请输入作者:
name2);
&
s[m];
{read(&
//调用读取函数
if(strcmp(p->
title,name1)==0||strcmp(p->
author,name2)==0)
\n查找图书信息成功!
书名编号作者价格数量\n"
%-10s%-10d%-10s%-10.2f%-10d\n"
p->
title,p->
number,p->
author,p->
price,p->
//打印信息
printf("
是否继续查找?
\n“是”请键入“yes”,“否”请按任意键,返回菜单\n"
c);
}while(strcmp(c,"
yes"
)==0);
//判断是否结束
(3)删除模块
该模块实现对撤销图书的删除。
用户首先查找要删除的图书,图书列表出来后,确认是否删除。
当删除成功后,询问是继续删除还返回退出并返回菜单。
其流程图如下图4.2-3所示。
选择删除方式0-2
输入要删除的书名或作者
使用for循环查找并显示记录,m--
调用save(structbook*p)
图4.2-3删除模块流程图
voiddel(structbook*p)//删除模块
{inti;
structbook*p1,*p2;
intn;
请选择删除以方式回车键结束:
//打印删除方式菜单
printf("
1.按书名删除\n2.按作者删除\n0.返回\n"
//读取查找方//
{case1:
//调用读取函数
for(i=0;
i<
m;
i++,p++)
{
{p1=p;
for(p2=p1+1;
p2<
=&
p1++,p2++)
strcpy(p1->
title,p2->
author,p2->
p1->
number=p2->
number;
store=p2->
store;
price=p2->
price;
m--;
删除成功!
!
else{printf("
没有该书记录!
是否继续删除?
“是”请键入“yes”,“否”请按任意键,返回菜单\n"
//读取是否继续
save(&
//调用保存函数
//判断是否继续删除
(4)借书模块
该模块实现系统的借书功能。
首先查找要借阅的图书,并且显示该项图书的记录,输入借书人的信息后store--,借书成功,询问是否继续。
该模块的流程图如下图4.2-4所示。
选择借阅查找方式
0-20-2
输入要借阅的书名或作者
使用for循环查找,m--
调用save(structbook*p)
输入借书人的基本信息
显示图书借阅信息
图4.2-4借书模块流程图
voidborrow(structbook*p)//借书模块
{intz;
charname3[20],name4[20];
charw[3];
printf("
请先查找您要借阅的图书!
请选择查找方式:
z);
if(z==0)break;
switch(z)
name3);
name4);
{if(strcmp(p->
title,name3)==0||strcmp(p->
author,name4)==0)
%-10s%-10d%-10s%-10.2fs%-10d\n"
number,
p->
author,p->
请输入您的姓名:
borrower_name);
请输入您的性别:
borrower_gender);
请输入您的学号:
borrower_number);
store--;
借书成功!
书名编号作者价格数量借书人性别学号\n"
%-10s%-10d%-10s%-10.2f%-10d%-10s%-10s%-10d\n"
title,
store,p->
borrower_name,
borrower_gender,p->
是否继续借书?
?
w);
}while(strcmp(w,"
//判断是否继续借书
(5)还书模块
该模块实现还书功能。
首先作者查找所要还得图书,找到后将借书人的基本信息清除并保存,实现还书功能。
其流程图如图4.2-5所示。
选择还书查找方式
输入要还的书名或作者
清除借书人的基本信息
显示图书信息
图4.2-5还书模块流程图
voidretur(structbook*p)//还书模块
{inte,f;
charname5[20];
charname6[20];
chart[3];
请先查找您要还的图目!
//打印查询方式菜单
e);
//读取查找方式
if(e==0)break;
switch(e)
name5);
name6);
title,name5)==0||strcmp(p->
author,name6)==0)
确认还书请按“1”!
//确认是否还书
f);
if(f==1)
{strcpy(p->
borrower_name,"
0"
strcpy(p->
borrower_gender,"
borrower_number=0;
store++;
borrower_name,p->
//打印信息
是否继续还书?
t);
}while(strcmp(t,"
//判断是否继续还书
4.3公共函数
(1)保存图书信息函数
voidsave(structbook*p)
{FILE*fp,*fp1;
inti;
if((fp=fopen("
tushu.dat"
"
wb"
))==NULL)//打开文件并判断是否出错
创建文件失败!
//打印出错提示
getchar();
return;
if((fp1=fopen("
book.dat"
))==NULL)//打开文件并判断是否出错
if(fwrite(p,sizeof(structbook),1,fp)==0)//向文件写入数据,并判断是否出错
向文件输入数据失败!
fprintf(fp1,"
fclose(fp);
//关闭文件
fclose(fp1);
(2)读取文件信息函数
voidread(structbook*p)//从文件读取信息模块
rb"
))==NULL)//打开文件,并判断是否出错
出错,请检查文件是否存在,按任意键返回住菜单"
fscanf(fp1,"
m);
i++,p++)
{fread(p,sizeof(structbook),1,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<
stdio.h>
math.h>
stdlib.h>
string.h>
intm=0;
v