图书管理系统课程设计C语言Word文件下载.docx
《图书管理系统课程设计C语言Word文件下载.docx》由会员分享,可在线阅读,更多相关《图书管理系统课程设计C语言Word文件下载.docx(33页珍藏版)》请在冰点文库上搜索。
![图书管理系统课程设计C语言Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/3aa51917-f365-4a4b-baf1-0e371f3c6ae2/3aa51917-f365-4a4b-baf1-0e371f3c6ae21.gif)
------------------------------------------------------------------------\n"
#defineN100
typedefstructbook
{
charnum[10];
/*书号*/
charname[15];
/*书名*/
intprice;
/*定价*/
charauthor[15];
/*作者*/
charpub[20];
/*出版社*/
intnumber;
/*数量*/
intbnumber;
/*借出次数*/
};
typedefstructMember
charmnum[10];
/*会员号*/
charmname[15];
/*会员姓名*/
chartel[15];
/*联系电话*/
typedefstructborrow
/*书号*/
/*书名*/
typedefstructnode/*定义图书信息链表的结点结构*/
structbookdata;
/*数据域*/
structnode*next;
/*指针域*/
}Node,*Link;
/*定义node类型的结构变量及指针变量*/
typedefstructmnode/*定义会员信息链表的结点结构*/
structMemberinf;
structmnode*next;
}Mnode,*Mlink;
typedefstructbnode/*定义借书信息链表的结点结构*/
structborrowbinf;
structbnode*next;
}Bnode,*Blink;
voidmenu()/*主菜单*/
system("
cls"
);
/*清屏*/
printf("
图书管理系统\n"
\t*************************菜单**********************************\n"
\t*1添加图书信息2删除图书信息*\n"
\t*3查询图书信息4修改图书信息*\n"
\t*5添加会员6借书*\n"
\t*7还书8按借出次数查看图书*\n"
\t*9按入馆时间查看图书0退出系统*\n"
\t***************************************************************\n"
}
voidprintheader()/*格式化输出表头*/
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
voidprintdata(Node*pp)/*格式化输出表中数据*/
Node*p;
p=pp;
printf(FORMAT,DATA);
voidprintbdata(Node*pp)
voidWrong()/*输出按键错误信息*/
\n\n\n\n\n***********Error:
inputhaswrong!
pressanykeytocontinue**********\n"
getchar();
voidNofind()/*输出未查找此学生的信息*/
\n=====>
Notfindthisrecord!
\n"
voidSavemember(Mlinkm)
FILE*fp;
Mnode*p;
intcount=0;
fp=fopen("
f:
\\member.txt"
"
wb"
/*以只写方式打开二进制文件*/
if(fp==NULL)/*打开文件失败*/
{
printf("
openfileerror!
getchar();
return;
}
p=m->
next;
while(p)
if(fwrite(p,sizeof(Mnode),1,fp)==1)/*写记录到磁盘文件中*/
{
p=p->
count++;
}
else
break;
if(count>
0)
\n\n\n\t保存文件完成,总共保存的数量是:
%d\n"
count);
else
{system("
fclose(fp);
voidSave(Linkl)/*将数据存盘*/
Node*p;
\\book.txt"
p=l->
if(fwrite(p,sizeof(Node),1,fp)==1)/*写记录到磁盘文件中*/
\n\n\n\t=====>
保存文件完成,保存的图书信息数量是:
thecurrentlinkisempty,nostudentrecordissaved!
voidDisp(Linkl)/*显示单链表l中存储的图书记录*/
if(!
p)/*p==NULL则说明暂无记录*/
Notrecord!
return;
\n\n"
while(p)/*逐条输出链表中存储图书信息*/
printf(FORMAT,DATA);
p=p->
printf(HEADER3);
voidDisp1(Linkl)/*显示单链表l中存储的图书记录*/
{system("
pressanykeytomenu"
fflush(stdin);
return;
voidMdisp(Mlinkm)/*显示单链表中存储的会员信息*/
p)/*p==NULL证明没有会员记录*/
printf(HEADER4);
printf(HEADER5);
printf(HEADER6);
while(p)/*逐条输出链表中存储的会员信息*/
printf(FORMAT1,p->
inf.mnum,p->
inf.mname,p->
inf.tel);
printf(HEADER6);
Node*Locate(Linkl,charfindmess[],charnameornum[])
Node*r;
if(strcmp(nameornum,"
num"
)==0)/*按书号查询*/
r=l->
while(r)
if(strcmp(r->
data.num,findmess)==0)
returnr;
/*返回与输入内容相匹配的结点*/
r=r->
elseif(strcmp(nameornum,"
name"
)==0)/*按书名查询*/
data.name,findmess)==0)
return0;
/*若未找到,返回一个空指针*/
voidstringinput(char*t,intlens,char*notice)/*输入字符串,并进行长度验证*/
charn[50];
do{
printf(notice);
/*显示提示信息*/
scanf("
%s"
n);
/*输入字符串*/
if(strlen(n)>
lens)printf("
\n超过长度规定值!
\n"
/*进行长度是否超过规定值*/
}while(strlen(n)>
lens);
strcpy(t,n);
/*将输入的字符串拷贝到字符串t中*/
intnumberinput(char*notice)
intt=0;
%d"
&
t);
/*输入图书数量*/
if(t<
0)printf("
\npricemust>
0!
}while(t<
0);
returnt;
voidAdd(Linkl)/*增加图书记录*/
Node*p,*r,*s;
charch,flag=0,num[10];
r=l;
s=l->
/*清屏*/
Disp(l);
/*先输出已有的图书信息*/
while(r->
next!
=NULL)
r=r->
/*将指针移至于链表最末尾,准备添加记录*/
while
(1)/*可输入多条记录,输入0时退出添加操作*/
while
(1)
stringinput(num,10,"
输入新增图书编号(输入'
0'
returnmenu):
"
/*输入书号*/
flag=0;
if(strcmp(num,"
0"
)==0)/*输入0退出操作,返回菜单界面*/
{Save(l);
return;
s=l->
while(s)/*查询输入的书号是否已经存在*/
{
if(strcmp(s->
data.num,num)==0)
{
flag=1;
break;
}
s=s->
}
if(flag==1)/*提示用户是否重新输入*/
{getchar();
printf("
=====>
输入的书号%s错误,是否重新输入?
(y/n):
num);
scanf("
%c"
ch);
if(ch=='
y'
||ch=='
Y'
)
continue;
else
return;
{break;
p=(Node*)malloc(sizeof(Node));
/*申请内存空间*/
if(!
p)
\nallocatememoryfailure"
/*如没有申请到,输出提示信息*/
return;
/*返回菜单界面*/
strcpy(p->
data.num,num);
/*将字符串拷贝到p->
data.num中*/
stringinput(p->
data.name,15,"
书名:
/*输入图书名称到p->
data.name中*/
p->
data.price=numberinput("
价格:
/*输入定价到p->
data.price中*/
data.author,15,"
作者:
/*输入作者名到p->
data.author中*/
data.pub,20,"
出版社:
/*输入出版社名称到p->
data.pub中*/
data.number=numberinput("
数量:
/*输入图书数量到p->
data.number中*/
data.bnumber=0;
next=NULL;
r->
next=p;
/*将新结点插入链表中*/
r=p;
return;
voidAddmember(Mlinkm)
{
Mnode*p,*r,*s,*q;
charch,qu,flag=0,num[10];
r=m;
s=m->
Mdisp(m);
/*将原有记录输出*/
输入新增会员编号(press'
/*输入会员号*/
)==0)/*输入为0,则退出添加操作,返回菜单界面*/
{Savemember(m);
s=m->
while(s)/*查询该会员号是否已经存在*/
inf.mnum,num)==0)
输入的这个编号%s错误,是否重新输入?
p=(Mnode*)malloc(sizeof(Mnode));
/*返回主界面*/
inf.mnum,num);
/*将会员号拷贝到p->
inf.mname,15,"
姓名:
inf.tel,15,"
电话:
voidsearchbnum(Linkl)
intcount1=0;
intbnum[100];
intmaxnum=0;
intthismax=0;
l->
next)/*若链表为空*/
system("
Norecord!
|借出次数|编号|书名|价格|作者|出版社|数量|\n"
{
if(p->
data.bnumber>
=maxnum){
//bnum[i]=p->
data.bnumber;
maxnum=p->
}
count1++;
while(true)
p=l->
while(p)
if(p->
data.bnumber==maxnum){
|%-8d|%-10s|%-15s|%-5d|%-11s|%-16s|%-6d|\n"
p->
data.bnumber,p->
data.number);
data.bnumber<
maxnum&
&
p->
thismax)
thismax=p->
if(count==count1)
break;
maxnum=thismax;
thismax=0;
|--------|----------|---------------|-----|-----------|----------------|------|\n"
pressanykeytoreturn"
voidsearch(Linkl)/*图书查询*/
intselect;
charsearchinput[20];
\n\t1按书号查询\n\t2按书