图书管理系统课程设计C语言.docx
- 文档编号:11582642
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:33
- 大小:55.67KB
图书管理系统课程设计C语言.docx
《图书管理系统课程设计C语言.docx》由会员分享,可在线阅读,更多相关《图书管理系统课程设计C语言.docx(33页珍藏版)》请在冰豆网上搜索。
图书管理系统课程设计C语言
#include
#include
#include
#include
#defineHEADER1"------------------------------图书信息----------------------------------------\n"
#defineHEADER2"|编号|书名|价格|作者|出版社|数量|\n"
#defineHEADER3"|----------|---------------|-----|---------------|--------------------|------|\n"
#defineHEADER4"------------------------------会员信息---------------------------------------\n"
#defineHEADER5"|编号|姓名|电话|\n"
#defineHEADER6"|----------|---------------|---------------|\n"
#defineHEADER7"|会员编号|会员姓名|图书编号|图书名称|\n"
#defineHEADER8"|----------|---------------|----------|---------------|\n"
#defineHEADER9"|-----------------borrowbook-------------------------|\n"
#defineFORMAT"|%-10s|%-15s|%5d|%-15s|%-20s|%5d|\n"
#defineFORMAT1"|%-10s|%-15s|%-15s|\n"
#defineFORMAT2"|%-10s|%-15s|%-10s|%-15s|\n"
#defineDATAp->data.num,p->data.name,p->data.price,p->data.author,p->data.pub,p->data.number
#defineEND"------------------------------------------------------------------------\n"
#defineN100
typedefstructbook
{
charnum[10];/*书号*/
charname[15];/*书名*/
intprice;/*定价*/
charauthor[15];/*作者*/
charpub[20];/*出版社*/
intnumber;/*数量*/
intbnumber;/*借出次数*/
};
typedefstructMember
{
charmnum[10];/*会员号*/
charmname[15];/*会员姓名*/
chartel[15];/*联系电话*/
};
typedefstructborrow
{
charmnum[10];/*会员号*/
charmname[15];/*会员姓名*/
charnum[10];/*书号*/
charname[15];/*书名*/
};
typedefstructnode/*定义图书信息链表的结点结构*/
{
structbookdata;/*数据域*/
structnode*next;/*指针域*/
}Node,*Link;/*定义node类型的结构变量及指针变量*/
typedefstructmnode/*定义会员信息链表的结点结构*/
{
structMemberinf;
structmnode*next;
}Mnode,*Mlink;
typedefstructbnode/*定义借书信息链表的结点结构*/
{
structborrowbinf;
structbnode*next;
}Bnode,*Blink;
voidmenu()/*主菜单*/
{
system("cls");/*清屏*/
printf("图书管理系统\n");
printf("\t*************************菜单**********************************\n");
printf("\t*1添加图书信息2删除图书信息*\n");
printf("\t*3查询图书信息4修改图书信息*\n");
printf("\t*5添加会员6借书*\n");
printf("\t*7还书8按借出次数查看图书*\n");
printf("\t*9按入馆时间查看图书0退出系统*\n");
printf("\t***************************************************************\n");
}
voidprintheader()/*格式化输出表头*/
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
voidprintdata(Node*pp)/*格式化输出表中数据*/
{
Node*p;
p=pp;
printf(FORMAT,DATA);
}
voidprintbdata(Node*pp)
{
}
voidWrong()/*输出按键错误信息*/
{
printf("\n\n\n\n\n***********Error:
inputhaswrong!
pressanykeytocontinue**********\n");
getchar();
}
voidNofind()/*输出未查找此学生的信息*/
{
printf("\n=====>Notfindthisrecord!
\n");
}
voidSavemember(Mlinkm)
{
FILE*fp;
Mnode*p;
intcount=0;
fp=fopen("f:
\\member.txt","wb");/*以只写方式打开二进制文件*/
if(fp==NULL)/*打开文件失败*/
{
printf("\n=====>openfileerror!
\n");
getchar();
return;
}
p=m->next;
while(p)
{
if(fwrite(p,sizeof(Mnode),1,fp)==1)/*写记录到磁盘文件中*/
{
p=p->next;
count++;
}
else
{
break;
}
}
if(count>0)
{
getchar();
printf("\n\n\n\t保存文件完成,总共保存的数量是:
%d\n",count);
getchar();
}
else
{system("cls");
getchar();
}
fclose(fp);
}
voidSave(Linkl)/*将数据存盘*/
{
FILE*fp;
Node*p;
intcount=0;
fp=fopen("f:
\\book.txt","wb");/*以只写方式打开二进制文件*/
if(fp==NULL)/*打开文件失败*/
{
printf("\n=====>openfileerror!
\n");
getchar();
return;
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)/*写记录到磁盘文件中*/
{
p=p->next;
count++;
}
else
{
break;
}
}
if(count>0)
{
getchar();
printf("\n\n\n\t=====>保存文件完成,保存的图书信息数量是:
%d\n",count);
getchar();
}
else
{system("cls");
printf("thecurrentlinkisempty,nostudentrecordissaved!
\n");
getchar();
}
fclose(fp);
}
voidDisp(Linkl)/*显示单链表l中存储的图书记录*/
{
Node*p;
p=l->next;
if(!
p)/*p==NULL则说明暂无记录*/
{
printf("\n=====>Notrecord!
\n");
getchar();
return;
}
printf("\n\n");
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
while(p)/*逐条输出链表中存储图书信息*/
{
printf(FORMAT,DATA);
p=p->next;
printf(HEADER3);
}
getchar();
}
voidDisp1(Linkl)/*显示单链表l中存储的图书记录*/
{system("cls");
Node*p;
p=l->next;
if(!
p)/*p==NULL则说明暂无记录*/
{
printf("\n=====>Notrecord!
\n");
getchar();
return;
}
printf("\n\n");
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
while(p)/*逐条输出链表中存储图书信息*/
{
printf(FORMAT,DATA);
p=p->next;
printf(HEADER3);
}
printf("pressanykeytomenu");
fflush(stdin);
getchar();
return;
}
voidMdisp(Mlinkm)/*显示单链表中存储的会员信息*/
{
Mnode*p;
p=m->next;
if(!
p)/*p==NULL证明没有会员记录*/
{
printf("\n=====>Notrecord!
\n");
getchar();
return;
}
printf("\n\n");
printf(HEADER4);
printf(HEADER5);
printf(HEADER6);
while(p)/*逐条输出链表中存储的会员信息*/
{
printf(FORMAT1,p->inf.mnum,p->inf.mname,p->inf.tel);
p=p->next;
printf(HEADER6);
}
getchar();
}
Node*Locate(Linkl,charfindmess[],charnameornum[])
{
Node*r;
if(strcmp(nameornum,"num")==0)/*按书号查询*/
{
r=l->next;
while(r)
{
if(strcmp(r->data.num,findmess)==0)
returnr;/*返回与输入内容相匹配的结点*/
r=r->next;
}
}
elseif(strcmp(nameornum,"name")==0)/*按书名查询*/
{
r=l->next;
while(r)
{
if(strcmp(r->data.name,findmess)==0)
returnr;/*返回与输入内容相匹配的结点*/
r=r->next;
}
}
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;
do{
printf(notice);/*显示提示信息*/
scanf("%d",&t);/*输入图书数量*/
if(t<0)printf("\npricemust>0!
\n");
}while(t<0);
returnt;
}
voidAdd(Linkl)/*增加图书记录*/
{
Node*p,*r,*s;
charch,flag=0,num[10];
r=l;
s=l->next;
system("cls");/*清屏*/
Disp(l);/*先输出已有的图书信息*/
while(r->next!
=NULL)
r=r->next;/*将指针移至于链表最末尾,准备添加记录*/
while
(1)/*可输入多条记录,输入0时退出添加操作*/
{
while
(1)
{
stringinput(num,10,"输入新增图书编号(输入'0'returnmenu):
");/*输入书号*/
flag=0;
if(strcmp(num,"0")==0)/*输入0退出操作,返回菜单界面*/
{Save(l);return;}
s=l->next;
while(s)/*查询输入的书号是否已经存在*/
{
if(strcmp(s->data.num,num)==0)
{
flag=1;
break;
}
s=s->next;
}
if(flag==1)/*提示用户是否重新输入*/
{getchar();
printf("=====>输入的书号%s错误,是否重新输入?
(y/n):
",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return;
}
else
{break;}
}
p=(Node*)malloc(sizeof(Node));/*申请内存空间*/
if(!
p)
{
printf("\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中*/
stringinput(p->data.author,15,"作者:
");/*输入作者名到p->data.author中*/
stringinput(p->data.pub,20,"出版社:
");/*输入出版社名称到p->data.pub中*/
p->data.number=numberinput("数量:
");/*输入图书数量到p->data.number中*/
p->data.bnumber=0;
p->next=NULL;
r->next=p;/*将新结点插入链表中*/
r=p;
}
return;
}
voidAddmember(Mlinkm)
{
FILE*fp;
Mnode*p,*r,*s,*q;
charch,qu,flag=0,num[10];
r=m;
s=m->next;
system("cls");
Mdisp(m);/*将原有记录输出*/
while(r->next!
=NULL)
r=r->next;/*将指针移至于链表最末尾,准备添加记录*/
while
(1)/*可输入多条记录,输入0时退出添加操作*/
{
while
(1)
{
stringinput(num,10,"输入新增会员编号(press'0'returnmenu):
");/*输入会员号*/
flag=0;
if(strcmp(num,"0")==0)/*输入为0,则退出添加操作,返回菜单界面*/
{Savemember(m);return;}
s=m->next;
while(s)/*查询该会员号是否已经存在*/
{
if(strcmp(s->inf.mnum,num)==0)
{
flag=1;
break;
}
s=s->next;
}
if(flag==1)/*提示用户是否重新输入*/
{getchar();
printf("=====>输入的这个编号%s错误,是否重新输入?
(y/n):
",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return;
}
else
{break;}
}
p=(Mnode*)malloc(sizeof(Mnode));/*申请内存空间*/
if(!
p)
{
printf("\nallocatememoryfailure");/*如没有申请到,输出提示信息*/
return;/*返回主界面*/
}
strcpy(p->inf.mnum,num);/*将会员号拷贝到p->data.num中*/
stringinput(p->inf.mname,15,"姓名:
");
stringinput(p->inf.tel,15,"电话:
");
p->next=NULL;
r->next=p;/*将新结点插入链表中*/
r=p;
}
return;
}
voidsearchbnum(Linkl)
{
Node*p;
intcount=0;
intcount1=0;
intbnum[100];
intmaxnum=0;
intthismax=0;
p=l->next;
system("cls");
if(!
l->next)/*若链表为空*/
{
system("cls");
printf("\n=====>Norecord!
\n");
getchar();
return;
}
printf("------------------------------图书信息----------------------------------------\n");
printf("|借出次数|编号|书名|价格|作者|出版社|数量|\n");
while(p)
{
if(p->data.bnumber>=maxnum){
//bnum[i]=p->data.bnumber;
maxnum=p->data.bnumber;
}
count1++;
p=p->next;
}
while(true)
{
p=l->next;
while(p)
{
if(p->data.bnumber==maxnum){
printf("|%-8d|%-10s|%-15s|%-5d|%-11s|%-16s|%-6d|\n",p->data.bnumber,p->data.num,p->data.name,p->data.price,p->data.author,p->data.pub,p->data.number);
count++;
}
if(p->data.bnumber
{
thismax=p->data.bnumber;
}
p=p->next;
}
if(count==count1)
{
break;
}
maxnum=thismax;
thismax=0;
}
printf("|--------|----------|---------------|-----|-----------|----------------|------|\n");
printf("pressanykeytoreturn");
fflush(stdin);
getchar();
return;
}
voidsearch(Linkl)/*图书查询*/
{
intselect;
charsearchinput[20];
Node*p;
if(!
l->next)/*若链表为空*/
{
system("cls");
printf("\n=====>Norecord!
\n");
getchar();
return;
}
system("cls");
printf("\n\t1按书号查询\n\t2按书
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统 课程设计 语言