




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言课程设计系 别 计算机科学与技术系专业班级 嵌入式软件1108班姓 名 温小琴指导老师 缪宁 2012年6月20日一、 需求分析1、 依据题目要求以及中国书的需求,应将该系统分为两大模块:图书管理和会员管理。图书管理模块中包括对图书的增加、修改、删除、查询、统计等操作,以及对图书借入借出服务。会员管理包括会员卡号的申请、删除、统计等操作。2、 界面应该具有友善、直观、易操作等特点,本系统采用数字输入选择操作。二、 概要设计1、 整体设计经过需求分析,本系统分为两大模块:书籍管理模块和会员管理模块。但是从易用性方面考虑,将书籍管理模块中的借书和还书模块放到主界面中。结构图如下:图书管理系统借书系统还书系统会员管理里系统书籍管理系统删除卡借书统卡号统增加图删除图查询图修改资申请新卡书籍统三、程序代码#include /*标准输入输出函数库*/#include /*标准函数库*/#include /*字符串函数库*/#include /*屏幕操作函数库*/#define HEADER1 -BOOK-n#define HEADER2 | number | name |price| author | publishing company |number|n#define HEADER3 |-|-|-|-|-|n#define HEADER4 -Member-n#define HEADER5 | number | name | telephone |n#define HEADER6 |-|-|-|n#define HEADER7 | mnumber | member name | bnumber | book name |n#define HEADER8 |-|-|-|-|n#define HEADER9 |-borrow book-|n#define FORMAT |%-10s|%-15s|%5d|%-15s|%-20s|%5d |n#define FORMAT1 |%-10s|%-15s|%-15s|n#define FORMAT2 |%-10s|%-15s|%-10s|%-15s|n#define DATA p-data.num,,p-data.price,p-data.author,p-data.pub,p-data.number#define END -n#define N 100typedef struct bookchar num10; /*书号*/char name15; /*书名*/int price; /*定价*/char author15; /*作者*/char pub20; /*出版社*/int number;/*数量*/;typedef struct Memberchar mnum10;/*会员号*/char mname15;/*会员姓名*/char tel15;/*联系电话*/;typedef struct borrowchar mnum10;/*会员号*/char mname15;/*会员姓名*/char num10;/*书号*/char name15;/*书名*/;typedef struct 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() /*主菜单*/system(cls); /*清屏*/printf( Book Management System n);printf(t*Menu*n);printf(t*1 Add book 2 delete book *n);printf(t*3 search book 4 modify record *n);printf(t*5 Add member 6 borrow book *n);printf(t*7 return book 8 save book *n);printf(t*9 save member 0 quit system *n);printf(t*n);void printheader() /*格式化输出表头*/printf(HEADER1);printf(HEADER2);printf(HEADER3);void printdata(Node *pp) /*格式化输出表中数据*/Node* p;p=pp;printf(FORMAT,DATA);void Wrong() /*输出按键错误信息*/printf(nnnnn*Error:input has wrong! press any key to continue*n);getchar();void Nofind() /*输出未查找此学生的信息*/printf(n=Not find this record!n);void Disp(Link l) /*显示单链表l中存储的图书记录*/Node *p;p=l-next;if(!p) /*p=NULL则说明暂无记录*/printf(n=Not record!n);getchar();return;printf(nn);printf(HEADER1);printf(HEADER2);printf(HEADER3);while(p) /*逐条输出链表中存储图书信息*/printf(FORMAT,DATA);p=p-next;printf(HEADER3);getchar();void Mdisp(Mlink m) /*显示单链表中存储的会员信息*/Mnode *p;p=m-next;if(!p) /*p=NULL证明没有会员记录*/printf(n=Not record!n);getchar();return;printf(nn);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(Link l,char findmess,char nameornum)Node *r;if(strcmp(nameornum,num)=0) /*按书号查询*/r=l-next;while(r) if(strcmp(r-data.num,findmess)=0) return r;/*返回与输入内容相匹配的结点*/ r=r-next;else if(strcmp(nameornum,name)=0) /*按书名查询*/r=l-next;while(r) if(strcmp(,findmess)=0) return r;/*返回与输入内容相匹配的结点*/ r=r-next;return 0; /*若未找到,返回一个空指针*/void stringinput(char *t,int lens,char *notice)/*输入字符串,并进行长度验证*/ char n50; do printf(notice); /*显示提示信息*/ scanf(%s,n); /*输入字符串*/ if(strlen(n)lens)printf(n exceed the required length! n); /*进行长度是否超过规定值*/ while(strlen(n)lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/int numberinput(char *notice)int t=0; do printf(notice); /*显示提示信息*/ scanf(%d,&t); /*输入图书数量*/ if (t0! n); while(tnext;system(cls);Disp(l); /*先输出已有的图书信息*/while(r-next!=NULL)r=r-next; /*将指针移至于链表最末尾,准备添加记录*/while(1) /*可输入多条记录,输入0时退出添加操作*/while(1)stringinput(num,10,input number(press 0return menu):); /*输入书号*/flag=0;if(strcmp(num,0)=0) /*输入0退出操作,返回菜单界面*/ return;s=l-next; while(s) /*查询输入的书号是否已经存在*/ if(strcmp(s-data.num,num)=0) flag=1; break; s=s-next; if(flag=1) /*提示用户是否重新输入*/ getchar(); printf(=The number %s is existing,try again?(y/n):,num); scanf(%c,&ch); if(ch=y|ch=Y) continue; else return; else break;p=(Node *)malloc(sizeof(Node); /*申请内存空间*/if(!p) printf(n allocate memory failure ); /*如没有申请到,输出提示信息*/ return ; /*返回菜单界面*/ strcpy(p-data.num,num); /*将字符串拷贝到p-data.num中*/stringinput(,15,Name:);/*输入图书名称到中*/p-data.price=numberinput(price:);/*输入定价到p-data.price中*/stringinput(p-data.author,15,author:);/*输入作者名到p-data.author中*/stringinput(p-data.pub,20,publishing company:);/*输入出版社名称到p-data.pub中*/p-data.number=numberinput(number:);/*输入图书数量到p-data.number中*/p-next=NULL;r-next=p; /*将新结点插入链表中*/r=p; return ;void Addmember(Mlink m)FILE *fp;Mnode *p,*r,*s,*q;char ch,qu,flag=0,num10;r=m;s=m-next;system(cls);Mdisp(m);/*将原有记录输出*/while(r-next!=NULL)r=r-next; /*将指针移至于链表最末尾,准备添加记录*/while(1) /*可输入多条记录,输入0时退出添加操作*/while(1)stringinput(num,10,input the number of the member(press 0return menu):); /*输入会员号*/flag=0;if(strcmp(num,0)=0) /*输入为0,则退出添加操作,返回菜单界面*/ return;s=m-next; while(s) /*查询该会员号是否已经存在*/ if(strcmp(s-inf.mnum,num)=0) flag=1; break; s=s-next; if(flag=1) /*提示用户是否重新输入*/ getchar(); printf(=The number %s is existing,try again?(y/n):,num); scanf(%c,&ch); if(ch=y|ch=Y) continue; else return; else break;p=(Mnode *)malloc(sizeof(Mnode); /*申请内存空间*/if(!p) printf(n allocate memory failure ); /*如没有申请到,输出提示信息*/ return ; /*返回主界面*/ strcpy(p-inf.mnum,num); /*将会员号拷贝到p-data.num中*/stringinput(p-inf.mname,15,Name:);stringinput(p-inf.tel,15,Telephone:);p-next=NULL;r-next=p; /*将新结点插入链表中*/r=p; return ;void search(Link l) /*图书查询*/int select;char searchinput20;Node *p;if(!l-next) /*若链表为空*/system(cls);printf(n=No record!n);getchar();return;system(cls);printf(nt1 Search by number nt2 Search by namen);printf( please choice1,2:);scanf(%d,&select);if(select=1) /*按书号查询*/stringinput(searchinput,10,input the existing student number:);p=Locate(l,searchinput,num);if(p) /*若p!=NULL*/ printheader(); printdata(p); printf(END); printf(press any key to return); getchar();else Nofind(); getchar();else if(select=2) /*按书名查询*/stringinput(searchinput,15,input the existing book name:);p=Locate(l,searchinput,name);if(p) printheader(); printdata(p); printf(END); printf(press any key to return); getchar();else Nofind(); getchar();elseWrong();getchar();void Del(Link l)/*删除指定的图书记录*/int sel;Node *p,*r;char findmess20;if(!l-next) system(cls);printf(n=No record!n);getchar();return;system(cls);Disp(l);printf(n =1 Delete by number =2 Delete by namen);printf( please choice1,2:);scanf(%d,&sel);if(sel=1)stringinput(findmess,10,input the existing student number:);p=Locate(l,findmess,num);if(p) /*p!=NULL*/ r=l; while(r-next!=p) r=r-next; r-next=p-next;/*将p所指节点从链表中去除*/ free(p); /*释放内存空间*/ printf(n=delete success!n); getchar();else Nofind(); getchar();else if(sel=2) /*先按书名查询*/stringinput(findmess,15,input the existing book name);p=Locate(l,findmess,name);if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=delete success!n); getchar();else Nofind(); getchar();elseWrong();getchar();void Modify(Link l)/*修改图书信息*/Node *p;char findmess20;if(!l-next) system(cls);printf(n=No book record!n);getchar();return;system(cls);printf(modify book recorder);Disp(l);stringinput(findmess,10,input the existing book number:);p=Locate(l,findmess,num); /*查询到该节点*/if(p) /*若p!=NULL,表明已经找到该节点*/printf(Number:%s,n,p-data.num);printf(Name:%s,);stringinput(,15,input book name:);printf(price:%d,p-data.price);p-data.price=numberinput(the price of book:);printf(Author:%s,p-data.author);stringinput(p-data.author,15,Author:);printf(Publishing company:%s,p-data.pub);stringinput(p-data.pub,15,Publishing company:);printf(number:%d,p-data.number);p-data.number=numberinput(the number of book:);printf(n=modify success!n);Disp(l);elseNofind();getchar();void Save(Link l)/*将数据存盘*/FILE *fp;Node *p;int count=0;fp=fopen(f:book,wb);/*以只写方式打开二进制文件*/if(fp=NULL) /*打开文件失败*/printf(n=open file error!n);getchar();return ;p=l-next;while(p)if(fwrite(p,sizeof(Node),1,fp)=1)/*写记录到磁盘文件中*/ p=p-next; count+;else break;if(count0)getchar();printf(nnntsave file complete,total saveds record number is:%dn,count);getchar();elsesystem(cls);printf(the current link is empty,no student record is saved!n);getchar();fclose(fp);void Savemember(Mlink m)FILE *fp;Mnode *p;int count=0;fp=fopen(f:member,wb);/*以只写方式打开二进制文件*/if(fp=NULL) /*打开文件失败*/printf(n=open file error!n);getchar();return ;p=m-next;while(p)if(fwrite(p,sizeof(Mnode),1,fp)=1)/*写记录到磁盘文件中*/ p=p-next; count+;else break;if(count0)getchar();printf(nnntsave file complete,total saveds record number is:%dn,count);getchar();elsesystem(cls);getchar();fclose(fp);void Saveoi(Blink b)FILE *fp;Bnode *p;int count=0;fp=fopen(f:borrow,wb);/*以只写方式打开二进制文件*/if(fp=NULL) /*打开文件失败*/printf(n=open file error!n);getchar();return ;p=b-next;while(p)if(fwrite(p,sizeof(Bnode),1,fp)=1)/*每次写一条记录或一个节点信息至文件*/ p=p-next; count+;else break;if(count0)getchar();printf(nnnnn=save file complete,total saveds record number is:%dn,count);getchar();elsesystem(cls);getchar();fclose(fp);void borrow(Link l,Mlink m,Blink b)/*借书*/Mnode *p;Node *q;Bnode *t,*s,*k;char number10,booknum10;system(cls);t=b-next; if(!t)printf(n=Not record!n);printf(nn);printf(HEADER9);printf(HEADER7);printf(HEADER8);while(t) printf(FORMAT2,t-binf.mnum,t-binf.mname,t-binf.num,);t=t-next; printf(HEADER8);while(1)s=b;p=m-next;q=l-next;while(s-next!=NULL)s=s-next;stringinput(number,10,please input the number of member:);/*输入会员号*/if(strcmp(number,0)=0)break;doif(strcmp(p-inf.mnum,number)=0)/*查看该会员号是否存在*/break;elsep=p-next;while(p!=NULL);stringinput(booknum,10,please input the number of book:);/*输入书号*/doif(strcmp(q-data.num,booknum)=0)/*查看书号是否存在*/break;elseq=q-next;while(q!=NULL);if(p=NULL)printf(you are not a member!);return;elseif(q=NULL)printf(the book is not exist!);return;elseif(q-data.number!=0)q-data.number-;k=(Bnode *)malloc(sizeof(Bnode); /*申请内存空间*/if(!k) printf(n allocate memory failure ); /*如没有申请到,输出提示信息*/ return ; /*返回菜单界面*/ strcpy(k-binf.num,q-data.num);strcpy(,);strcpy(k-binf.mnum,p-inf.mnum);strcpy(k-binf.mname,p-inf.mname);k-next=NULL; s-next=k; /*将新结点插入链表中*/s=k;elseprintf(no book!);Saveoi(b);/*写记录到磁盘文件中*/getch();void ret(Link l,Blink b)/*还书*/Bnode *p,*q;Node *t;char memnum10,booknum10;q=b;p=q-next;t=l-next;stringinput(memnum,10,please input the number of member:);if(strcmp(memnum,0)=0)return;stringinput(booknum,10,please input the number of book:);while(p!=NULL)if(strcmp(p-binf.num,booknum)=0&strcmp(p-binf.mnum,memnum)=0)/*如果书号与会员号都存在则可以还书*/q-next=p-next;doif(strcmp(t-data.num,booknum)=0)break;elset=t-next;while(t!=NULL);t-data.number+;/*如果还书成功则可借的数目加1*/free(p);elseq=p;p=q-next;if(p=NULL)printf(input error);return;Saveoi(b);getch();main()Link l; /*定义链表*/Mlink m;Blink b;FILE *fp; /*文件指针*/int select; char ch; int count=0; Node *p,*r; Mnode *q,*t;Bnode *s,*k;b=(Bnode*)malloc(sizeof(Bnode);if(!b) printf(n allocate memory failure ); /*如没有申请到,打印提示信息*/ return ; /*返回菜单界面*/ b-next=NULL;k=b;fp=fopen(f:borrow,ab+);if(fp=NULL) printf(n=can not open file!n); exit(0);while(!feof(fp)s=(Bnode*)malloc(sizeof(Bnode);if(!s) printf( memory malloc failure!n); /*没有申请成功*/ exit(0); /*退出*/ if(fread(s,sizeof(Bnode),1,fp)=1) /*从文件中读取借书记录*/ s-next=NULL; k-next=s; k=s; fclose(fp); /*关闭文件*/m=(Mnode*)malloc(sizeof(Mnode);if(!m) printf(n allocate memory failure ); /*如没有申请到,输出提示信息*/ return ; /*返回菜单界面*/ m-next=NULL;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 周边转让股权协议书
- 养老机构护理协议书
- 建房邻居安全协议书
- 花艺搭配技巧的试题及答案解析
- 商户拆迁补偿协议书
- 药店招聘店员协议书
- 买车签了销售协议书
- 2025年三明医学科技职业学院高职单招语文2019-2024历年真题考点试卷含答案解析
- 提升自信心农艺师试题及答案
- 高校辅导员如何培养学生自我意识试题及答案
- 行政事业单位日常公用支出管理办法
- 肝脏结核CT表现课件
- 设备周期保养检修记录表
- 中国大学生心理健康量表(CCSMHS)
- 专利法全套ppt课件(完整版)
- GB∕T 3639-2021 冷拔或冷轧精密无缝钢管
- 西师版六年级下册数学第五单元 总复习 教案
- 独生子女父母退休一次性奖励审批1
- 铝合金窗陕西银杉节能门窗有限责任公司铝合金制作及安装工艺流程图
- 苏教版小学数学四年级下册《图形旋转》练习题
- 烧结普通砖、多孔砖回弹计算
评论
0/150
提交评论