图书管理系统设计书.doc_第1页
图书管理系统设计书.doc_第2页
图书管理系统设计书.doc_第3页
图书管理系统设计书.doc_第4页
图书管理系统设计书.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

枣 庄 学 院计算机科学系课程设计任务书题目: 图书管理系统 学 号: 姓 名: 专 业: 课 程: 数据结构 指导教师: 职称: 讲 师 完成时间: 2010年 月-20 年 月枣庄学院计算机科学系制2010年12 月28日课程设计任务书及成绩评定课程设计的任务和具体要求设计任务:设计一个计算机管理系统完成图书管理基本业务基本要求:1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加; *借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量; *归还:注销对借阅者的登记,改变该书的现存量。4)图书信息存入到book.txt中指导教师签字: 日期: 指导教师评语成绩: 指导教师签字: 日期: 课程设计所需软件、硬件等课程设计进度计划起至日期工作内容备注参考文献、资料索引序号文献、资料名称编著者出版单位Visual FoxPro6.0项目开发与实例 Visual FoxPro数据库系统项目开发实践 Visual FoxPro程序设计27数据结构:定义读者链表和图书链表typedef struct bookchar book_num10; /定义图书数量char book_name20; /定义图书名称char book_writer10; /定义图书作者int book_kc; /定义图书库存量int book_xy; /定义图书现有量struct book *next; /定义指向图书的指针BK;typedef struct borrowchar borrow_book_num10; /定义读者借书的图书编号 char huanshu_date8; /定义读者的还书日期BW;typedef struct readerchar reader_num10; /定义读者编号char reader_name10; /定义姓名int zuida; BW borrowMax; /读者最大借书量struct reader *next; /定义指向读者指针RD;BK *h_book; /定义图书链表RD *h_reader; /定义读者链表 4.总体设计:5.详细设计:主函数main()主函数通过创建book.txt和reader.txt两个文件,从而达到对图书信息和读者信息的保存,方便用户下一次的操作。通过if语句判断读者是否是第一次登陆,若是首次登陆,则要进行初始化,否则直接进入主菜单进行功能选择。初始化读者信息函数Init_reader()若读者是第一次进入此系统,则首先对读者的信息进行初始化,通过p0=(RD*)malloc(sizeof(RD)为读者申请读者链表节点空间,并初始化读者链表,包括读者的图书证号,姓名。并把所接图书量置为零。初始化图书信息函数Init_book()若读者是第一次进入此系统,则首先对读者的图书信息进行初始化,通过p0=(BK*)malloc(sizeof(BK)为图书申请图书链表节点空间,并对图书链表中的图书编号、图书名称、图书作者、图书数量进行初始化,开始时,图书的现存量等于库存量。主菜单选择函数Menu_select()此函数包括退出系统,新书入库,查询信息,借书登记和还书管理五个函数,通过调用主菜单函数判断用户做出的选择,从而进行相应的操作。新书入库函Insert_New_Book()此函数通过的创建一个图书链表,达到对新进书判断,若在现有的图书中找到该书,则直接进行入库,并记录下图书的数量,若找完整个图书量表也没找到该书,则要记录下新进图书的名称,作者,数量,并把该书插入到已有数中,方便下次对新书的判断。查找菜单选择函数Find_Select()此函数包括查找图书,查找读者,显示图书和显示读者以及返回上级五个功能,通过调用find()函数,判断用户的选择,从而进行相关功能的操作。查找读者函数Find_Reader()此函数通过读者的图书证号对读者链表从头至尾进行查找,若找到读者,则显示读者图书证号以及姓名,然后利用for循环和指针,对读者所借图书进行查找并显示。若找不到读者,显示读者标号不存在,按任意键回到查找菜单选择函数界面。查找图书函数Find_Book()此函数根据用户输入的图书编号,利用while(strcmp(p-book_num,find_book)!=0&p-next); p=p-next;语句,对现有图书进行查找,若找到,则显示图书的编号、名称、作者、现有量以及库存量。否则显示此图书编号不存在,按任意键回到查找菜单选择函数界面。显示读者函数Print_reader() 此函数利用定义指针RD *p;p=h_reader; 利用while(p!=NULL)循环,以及利用 p=p-next语句对读者的图书信息链表进行遍历,然后显示读者的借书编号和还书时间。 显示图书信息Print_book()此函数利用定义指针BK *p; p=h_book;利用while(p!=NULL)循环,以及利用p=p-next语句对现存图书的链表进行遍历,显示所有现存图书的编号、名称、作者、现有量以及库存量信息。借书函数Borrow_Book()此函数利用图书链表和读者链表对读者的借书进行操作,根据读者输入的图书证号,利用while循环对读者链表进行遍历,查找是否存在该读者,若读者不存在,则提示该读者的图书证号不存在,若读者存在,根据读者输入的要借的图书编号,再利用while循环遍历是否存在该书,若该书不存在,则显示此书不存在,若该书存在,再利用if判断是否还有现存,若无现存,在提示此书已借完,若还有现存,再利用if语句判断该读者是否已达到最大借书量,若已达最大量,则提示读者,借书已满,若还未达到最大量,再利用if语句判断该读者是否已借书,若从未借过书,则直接借书,若已借书,然后利用for循环和if语句判断此次借书是否和以前借书有重复,若重复,则提示读者不能借两本相同的书,若不重复,则让读者输入还书的日期,并把读者的所借图书量加一,并把图书的现存量减一。还书函数Return_Book()此函数也是以用图书链表和读者链表对读者还书进行操作,根据读者输入的图书证号,利用while循环对读者链表进行遍历,查找是否存在该读者,若读者不存在,则提示该读者的图书证号不存在,若读者存在,根据读者输入的要还的图书编号,再利用while循环遍历是否存在该书,若该书不存在,则显示此书编号不存在,若该书存在,则利用for循环把读者的图书链表中要还书后面的书向前移一个单位,覆盖掉链表中该书的信息,并把读者的借书量减一,把图书的现存量加一。保存图书函数Save_Book()此函数首先创建文件指针FILE *fp_book,然后创建文件,把图书链表中的图书信息写进文件,写入成功,则对图书信息进行保存,若写入失败,则释放所有节点。加载图书信息Load_Book()若读者是再次登录图书系统,则进行对读者的图书信息进行加载。通过fp=fopen(Book.txt,rb)打开图书文件,读出读者的信息,重新链入链表,从而达到对读者图书信息的加载。保存读者函数Save_Reader()此函数首先创建文件指针FILE *fp_reader,然后创建文件,把读者链表中的读者信息写进文件,写入成功,则对读者信息进行保存,若写入失败,则释放所有节点。加载读者函数Load_Reader()若读者是再次登录图书系统,则进行对读者的信息进行加载。通过fp=fopen(Reader.txt,rb)打开读者文件,读出读者的信息,重新链入链表,从而达到对读者图书信息的加载。6.测试与调试第一次运行该程序,首先进入欢迎界面然后按任意键进入对读者信息的初始化界面然后按任意键进入对图书信息的初始化界面然后按任意键进入图书管理主菜单,选择1进行新书入库,界面如下:然后按任意键回到主菜单,选择3进行借书登记,界面如下:然后按任意键回到菜单主系统,选择2进入信息查询界面,在选择2进行查找读者界面如下:可以看到读者已成功借的编号为001的图书。按任意键回到信息查询界面,选择3进行图书查询,界面如下:可以看到编号为001的图书已被借一本。按任意键回到信息查询界面,选择1进行图书查询,界面如下:选择0回到图书管理主菜单,选择3,再次进行借书管理,界面如下:选择2进如查询界面,选择4,显示读者信息,界面如下:可以看到读者以成功借的编号为002的图书。然后选择0,回到系统主菜单,选择4,进行还书操作,界面如下:然任意键回到主菜单,再次选择2,进入查询界面,选择4,再次显示读者信息,界面如下:我们可以看到读者已经还了编号为001的图书。然后按任意键回到信息查询界面,选择0回到主菜单,在选择0退出系统,界面如下:7.源程序清单#include #include #include #include #define Max 3 typedef struct bookchar book_num10;char book_name20;char book_writer10;int book_kc;int book_xy;struct book *next;BK;typedef struct borrowchar borrow_book_num10;char huanshu_date8;BW;typedef struct readerchar reader_num10;char reader_name10;int zuida;BW borrowMax;struct reader *next;RD;BK *h_book;RD *h_reader;void login(); /*登陆*/int zhucaidan(); /*主菜单*/void Menu_select(); void Init(); /*初始化*/void Init_reader(); void Init_book(); void Insert_New_Book(); /*新书入库*/int Find(); /*查找菜单*/void Find_Select(); /*查找菜单选择函数*/void Find_Reader(); void Find_Book(); void Print_reader(); /*显示读者信息*/void Print_book(); void Borrow_Book(); void Return_Book(); void Save(); /*保存信息*/void Save_Reader(); void Save_Book(); void Load(); void Load_Reader(); /*加载读者信息*/void Load_Book(); void Login()/*登陆*/system(cls);printf( nn);printf( =n);printf( 欢迎登陆图书馆管理系统nnn);printf( 学号:Z08050719 姓名:王义 nnnnnnn);printf( 按 任 意 键 进 入 系 统 .n);printf( =n);getch(); system(cls);int zhucaidan() /*主菜单*/ int i;printf( 图书管理系统主菜单n);printf( =n);printf( 0-退出系统 nn);printf( 1-新书入库 nn);printf( 2-查询信息 nn);printf( 3-借书登记 nn);printf( 4-还书管理 nn);printf( =n);printf( 请选择相应代码:); for(;) scanf(%d,&i); fflush(stdin); if(i4) printf(n错误!请重新输入:); else break;return i; void Menu_select()/*主菜单选择函数*/for(;) /*循环调用模式,保证能进行重复操作*/switch(zhucaidan() /*功能选择*/ case 0: system(cls); Save();printf(nnt文件已经成功保存!n); printf(nnt欢迎您下次使用本系统!n); getch(); exit(0); case 1:Insert_New_Book();break; case 2:Find_Select();break; case 3:Borrow_Book();break; case 4:Return_Book();break; default:printf(n错误!);exit(0); void Init() /*初始化*/ Init_reader(); Init_book();void Init_reader() /*初始化读者信息*/ RD *p0; int i; printf(n读者初始化开始,请输入读者信息.n包括图书证号.姓名.n); p0=(RD*)malloc(sizeof(RD); h_reader=p0; printf(n请输入读者的信息:n); printf(读者图书证号:); scanf(%s,p0-reader_num); printf(读者姓名:); scanf(%s,p0-reader_name); p0-zuida=0; for(i=0;iborrowi.borrow_book_num,0); /*所借图书直接置为0(即没有借书)*/ strcpy(p0-borrowi.huanshu_date,0); p0-next=NULL; printf(n读者信息初始化完毕!按任意键继续下一步操作.n); getch(); system(cls);void Init_book() /*初始化图书信息*/BK *p0;printf(n图书初始化开始,请输入图书信息.n包括编号.书名.数量.n);p0=(BK*)malloc(sizeof(BK);h_book=p0; printf(n请输入图书信息:n); printf(图书编号:); scanf(%s,p0-book_num); printf(图书名称:); scanf(%s,p0-book_name);printf(图书作者:); scanf(%s,p0-book_writer); printf(图书数量:); scanf(%d,&p0-book_kc); p0-book_xy=p0-book_kc; /*开始时图书现有量和库存量相等*/ p0-next=NULL; printf(n图书信息初始化完毕!按任意键继续下一步操作.n); getch(); system(cls);void Insert_New_Book()/*新书入库*/BK *p,*p1,*p2; p=p2=h_book;printf(n新书入库模块.n);printf(n请输入新书信息.n包括书号.书名.数量.n);p1=(BK *)malloc(sizeof(BK); printf(图书编号:); scanf(%s,p1-book_num); while(strcmp(p1-book_num,p2-book_num)!=0&p2-next!=NULL) p2=p2-next; if(strcmp(p1-book_num,p2-book_num)=0) /*此处分两种情况,若图书编号存在,则直接入库,只须输入图书的数量*/ printf(n此编号图书已存在!直接入库!n); printf(图书数量:); scanf(%d,&p1-book_kc); p2-book_kc+=p1-book_kc; p2-book_xy+=p1-book_kc; /*开始时图书现有量和库存量相等*/ else /*若图书编号不存在,则需要输入图书的所有信息 ,然后再进行插入操作*/ printf(图书名称:); scanf(%s,p1-book_name);printf(图书作者:); scanf(%s,p1-book_writer); printf(图书数量:); scanf(%d,&p1-book_kc);while(p-next) p=p-next; if(h_book=NULL) h_book=p1; /*此处分两种情况,链表中没有数据,head头指针直接指向p1处*/ else p-next=p1; /*链表中有数据,链表中最后元素的next指向p1处*/ p1-next=NULL; p1-book_xy=p1-book_kc; printf(n新书入库完毕!按任意键继续下一步操作.n); getch(); system(cls);int Find() /*查找功能菜单*/int i;printf( 信息查询菜单n);printf( =n);printf( 0-返回上级 nn);printf( 1-查找图书 nn);printf( 2-查找读者 nn);printf( 3-显示图书 nn);printf( 4-显示读者 nn);printf( =n);printf( 请选择相应代码:);for(;) scanf(%d,&i); fflush(stdin); if(i4) printf(n错误!请重新输入:); else break; return i; void Find_Select() /*查找菜单选择函数*/system(cls);for(;) switch(Find() /*判断读者做出了什么功能选择*/ case 0:system(cls); Menu_select(); break; case 1:Find_Book();break; case 2:Find_Reader();break; case 3:Print_book();break; case 4:Print_reader();break; default:printf(n错误!);exit(0); void Find_Reader() /*查找读者信息*/RD *p;int i;char find_reader10;p=h_reader;printf(n读者信息查询模块n);printf(n请输入你要查询读者图书证号:);scanf(%s,find_reader);while(strcmp(p-reader_num,find_reader)!=0&p-next) p=p-next;if(strcmp(p-reader_num,find_reader)=0) printf(n读者编号%s的信息为:n,find_reader); printf(读者图书证号:t读者姓名:); printf(n);printf(t%stt%s,p-reader_num,p-reader_name); for(i=0;iborrowi.borrow_book_num); printf(tt%s,p-borrowi.huanshu_date); printf(n);else printf(n此读者编号不存在,请核对!按任意键返回.);getch(); system(cls);void Find_Book() /*查找图书信息*/BK *p;char find_book10; p=h_book;printf(n图书信息查询模块n);printf(n请输入你要查询图书编号:);scanf(%s,find_book);while(strcmp(p-book_num,find_book)!=0&p-next) p=p-next;if(strcmp(p-book_num,find_book)=0) printf(n图书编号%s的信息为:n,find_book); printf(n图书编号t图书名称t图书作者t现有量tt库存量n); printf(%stt%stt%stt%dtt%dn,p-book_num,p-book_name,p-book_writer,p-book_xy,p-book_kc); else printf(n此图书编号不存在,请核对!按任意键返回.);getch(); system(cls);void Print_book() BK *p;p=h_book;printf(n图书信息如下:nn);printf(图书编号t图书名称t图书作者t现有量tt库存量n); /*直接显示所有图书的信息,遍历图书链表一次就可以了*/while(p!=NULL)printf(%stt%stt%stt%dtt%dn,p-book_num,p-book_name,p-book_writer,p-book_xy,p-book_kc);p=p-next;printf(n图书信息显示完毕!按任意键继续下一步操作.);getch();system(cls);void Print_reader() RD *p;int i;p=h_reader;printf(n读者信息如下:nn);printf(读者图书证号t读者姓名); printf(n);while(p!=NULL) /*遍历一次读者链表就可以了*/ printf(t%stt%s,p-reader_num,p-reader_name); for(i=0;iborrowi.borrow_book_num); printf(tt%s,p-borrowi.huanshu_date); printf(n); p=p-next;printf(n读者信息显示完毕!按任意键继续下一步操作.);getch();system(cls);void Borrow_Book() BK *p1; RD *p2;char bo_num10,rea_num10,huan_date8;int i;p1=h_book; p2=h_reader;printf(n借书模块.n);printf(n请输入借书的读者图书证号:); scanf(%s,rea_num);while(p2-next!=NULL&strcmp(rea_num,p2-reader_num)!=0) /*遍历一次读者链表,判断读者是否存在*/ p2=p2-next; if(p2-next=NULL&strcmp(rea_num,p2-reader_num)!=0) /*如果存在,则继续,不存在就提示错误!*/ printf(n此读者图书证号不存在!按任意键返回.n); goto END; printf(n请输入你要借的书的编号:); scanf(%s,bo_num); while(strcmp(bo_num,p1-book_num)!=0&p1-next!=NULL) /*遍历一次图书链表,判断此图书是否存在*/ p1=p1-next; if(p1-next=NULL&strcmp(bo_num,p1-book_num)!=0) /*如果存在,则继续,不存在就提示错误!*/ printf(n此图书编号不存在!按任意键返回.n); else if(p1-book_xyzuida=Max) /*判断此读者借书权限是否已达最大*/ printf(n不好意思,借书数目已满!不能借书!n按任意键返回.); else if(strcmp(p2-borrow0.borrow_book_num,0)!=0) /*此读者若已经借书,再判断此读者是否要借两本一样的书*/ for(i=0;iborrowi.borrow_book_num,bo_num)=0) printf(n抱歉!同一个读者不能同借两本相同的书!n); else if(strcmp(p2-borrowi.borrow_book_num,0)=0) /*如果没有重复,则继续*/ printf(n请输入你要归还图书的日期:); scanf(%s,huan_date); strcpy(p2-borrowp2-zuida+.borrow_book_num,bo_num); /*记录读者所借图书书号,并且借书数目加一,现存量减一*/ strcpy(p2-borrowp2-zuida-1.huanshu_date,huan_date); p1-book_xy-; printf(n读者编号%s借书完毕!按任意键继续下步操作.,p2-reader_num);break; else /*若此读者从未借过书*/ printf(n请输入你要归还图书的日期:); scanf(%s,huan_date); strcpy(p2-borrowp2-zuida+.borrow_book_num,bo_num); /*记录所借书号,并且借书数目加一,现存量减一*/ strcpy(p2-borrowp2-zuida-1.huanshu_date,huan_date); p1-book_xy-; printf(n读者编号%s借书完毕!按任意键继续下步操作.,p2-reader_num); END:getch(); system(cls);void Return_Book() BK *p; RD *q;int i,j,find=0;char return_book_num10,return_reader_num10;p=h_book; q=h_reader;printf(n还书模块.n);printf(n请输入要还书的读者图书证号:); scanf(%s,return_reader_num); while(q-next!=NULL&strcmp(return_reader_num,q-reader_num)!=0) q=q-next;if(q-next=NULL&strcmp(return_reader_num,q-reader_num)!=0) find=2;/*用于设置标志,判断读者是否借了此书或是否不满足某一条而提前出错结束,若提前出错,则find=2,若借了此图书,则find=1,若没借此书则find=0,以下设置雷同*/ printf(n此读者编号不存在!按任意键返回.n); goto end; printf(n请输入读者还书的编号:); scanf(%s,return_book_num); while(p-next!=NULL&strcmp(return_book_num,p-book_num)!=0) p=p-next; if(p-next=NULL&strcmp(return_book_num,p-book_num)!=0) find=2; printf(n错误!此图书编号不存在!按任意键返回.n); goto end; for(i=0;iborrowi.borrow_book_num)=0) find=1; for(j=i;jborrowj.borrow_book_num,q-borrowj+1.borrow_book_num); strcpy(q-borrowj.huanshu_date,q-borrowj+1.huanshu_date); strcpy(q-borrowMax-1.borrow_book_num,0); strcpy(q-borrowMax-1.huanshu_date,0); p-book_xy+; q-zuida-; printf(n编号%s的读者还书完毕!按任意键继续下步操作.,return_reader_num); if(find=0) printf(n错误!此读者未借此书!按任意键返回.n); end: getch(); system(cls);void Save() /*保存信息*/Save_Reader();Save_Book();void Save_Reader() /*保存读者信息*/FILE *fp_reader; /*创建文件型指针*/RD *p,*p0;p=h_reader;if(fp_reader=fopen(Reader.txt,wb)=NULL) /*创建文件,进行保存*/ printf(n文件保存失败!n请重新启动本系统.n); exit(0);while(p!=NULL) if(fwrite(p,sizeof(RD),1,fp_reader)!=1) /*将读者链表中的信息写入文件中*/ printf(n写入文件失败!n请重新启动本系统!n); p0=p; p=p-next; free(p0); /*释放所有结点*/h_reader=NULL;fclose(fp_reader); /*关闭文件*/void Save_Book() /*保存图书信息*/FILE *fp_book; /*创建文件型指针*/BK *p,*p0;p=h_book;if(fp_book=fopen(Book.txt,wb)=NULL) /*创建文件,进行保存*/ printf(n文件保存失败!n请重新启动本系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论