1、 -n#define N 100typedef struct book char num10; /*书号*/ char name15; /*书名*/ int price; /*定价*/ char author15; /*作者*/ char pub20; /*出版社*/ int number;/*数量*/ int bnumber;/*借出次数*/;typedef struct Member char mnum10;/*会员号*/ char mname15;/*会员姓名*/ char tel15;/*联系电话*/typedef struct borrow/*书号*/*书名*/typedef str
2、uct node/*定义图书信息链表的结点结构*/ struct book data; /*数据域*/ struct node *next; /*指针域*/Node,*Link; /*定义node类型的结构变量及指针变量*/typedef struct mnode/*定义会员信息链表的结点结构*/ struct Member inf; struct mnode *next;Mnode,*Mlink;typedef struct bnode/*定义借书信息链表的结点结构*/ struct borrow binf; struct bnode *next;Bnode,*Blink;void menu
3、() /*主菜单*/ system(cls); /*清屏*/ printf( 图书管理系统nt*菜单*nt* 1 添加图书信息 2 删除图书信息 *nt* 3 查询图书信息 4 修改图书信息 *nt* 5 添加会员 6 借书 *nt* 7 还书 8 按借出次数查看图书 *nt* 9 按入馆时间查看图书 0 退出系统 *nt*nvoid printheader() /*格式化输出表头*/ printf(HEADER1); printf(HEADER2); printf(HEADER3);void printdata(Node *pp) /*格式化输出表中数据*/ Node* p; p=pp; p
4、rintf(FORMAT,DATA);void printbdata(Node *pp)void Wrong() /*输出按键错误信息*/nnnnn*Error:input has wrong! press any key to continue*n getchar();void Nofind() /*输出未查找此学生的信息*/n=Not find this record!nvoid Savemember(Mlink m) FILE *fp; Mnode *p; int count=0; fp=fopen(f:member.txt,wb/*以只写方式打开二进制文件*/ if(fp=NULL)
5、/*打开文件失败*/ printf(open file error! getchar(); return ; p=m-next; while(p) if(fwrite(p,sizeof(Mnode),1,fp)=1)/*写记录到磁盘文件中*/ p=p- count+; else break; if(count0)nnnt保存文件完成,总共保存的数量是:%dn,count); else system( fclose(fp);void Save(Link l)/*将数据存盘*/ Node *p;book.txt p=l- if(fwrite(p,sizeof(Node),1,fp)=1)/*写记录
6、到磁盘文件中*/nnnt=保存文件完成,保存的图书信息数量是:the current link is empty,no student record is saved!void Disp(Link l) /*显示单链表l中存储的图书记录*/ if(!p) /*p=NULL则说明暂无记录*/Not record! return;nn while(p) /*逐条输出链表中存储图书信息*/ printf(FORMAT,DATA); p=p- printf(HEADER3);void Disp1(Link l) /*显示单链表l中存储的图书记录*/ system(press any key to me
7、nu fflush(stdin); return;void Mdisp(Mlink m) /*显示单链表中存储的会员信息*/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(Link l,char findmess,char nameornum) Node *r; if(strcmp(na
8、meornum,num)=0) /*按书号查询*/ r=l- while(r) if(strcmp(r-data.num,findmess)=0) return r;/*返回与输入内容相匹配的结点*/ r=r- else if(strcmp(nameornum,name)=0) /*按书名查询*/data.name,findmess)=0) return 0; /*若未找到,返回一个空指针*/void stringinput(char *t,int lens,char *notice)/*输入字符串,并进行长度验证*/ char n50; do printf(notice); /*显示提示信息
9、*/ scanf(%s,n); /*输入字符串*/ if(strlen(n)lens)printf(n 超过长度规定值! n /*进行长度是否超过规定值*/ while(strlen(n)lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/int numberinput(char *notice) int t=0;%d,&t); /*输入图书数量*/ if (t0! while(t/*清屏*/ Disp(l); /*先输出已有的图书信息*/ while(r-next!=NULL) r=r- /*将指针移至于链表最末尾,准备添加记录*/ while(1) /*可输入多条
10、记录,输入0时退出添加操作*/ while(1) stringinput(num,10,输入新增图书编号(输入 0return menu): /*输入书号*/ 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);
11、 scanf(%cch); if(ch=y|ch=Y) continue; else return; break; p=(Node *)malloc(sizeof(Node); /*申请内存空间*/ if(!p)n allocate memory failure /*如没有申请到,输出提示信息*/ return ; /*返回菜单界面*/ strcpy(p-data.num,num); /*将字符串拷贝到p-data.num中*/ stringinput(p-data.name,15,书名:/*输入图书名称到p-data.name中*/ p-data.price=numberinput(价格:/
12、*输入定价到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 ;void Addmember(Mlink m) Mnode *p,*r,*s,*q; char ch,qu,flag=0,num10; r=m; s=m- Mdisp
13、(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,电话:void searchbnum(Link l) int count1=0; int bnum100;
14、int maxnum=0; int thismax=0;l-next) /*若链表为空*/ system(No record! |借出次数| 编号 | 书名 | 价格| 作者 | 出版社 |数量 |n if(p-data.bnumber=maxnum) /bnumi=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.bnumberthismax) thismax=p- if(count=count1) break; maxnum=thismax; thismax=0; |-|-|-|-|-|-|-|npress any key to returnvoid search(Link l) /*图书查询*/ int select; char searchinput20;nt1 按书号查询 nt2 按书
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2