




免费预览已结束,剩余27页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大学数据结构课程设计报告题目:图书管理系统 院(系):计算机工程学院 学生姓名: 班级: 学号:起迄日期: 2011.6.20至2011.7.1指导教师: 指导教师评语: 成绩: 签名: 年 月 日20102011年度 第 2 学期 一、需求分析 1.问题描述:设计一个计算机管理系统完成图书管理基本业务.该系统包括1.新书入库;2.查询信息;3.借书登记;4.还书管理;0.退出系统。通过该系统可以很好的实现对图书的管理。 2.基本功能 主函数 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)打开读者文件,读出读者的信息,重新链入链表,从而达到对读者图书信息的加载。二、 概要设计定义读者链表和图书链表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 main()操作结果:通过调用Menu_select()函数来完成显示主菜单。int Find()操作结果:显示“查找功能菜单”。void Find_Book() /查找图书信息操作结果:按照学号进行查找,若找到则显示该书的信息。找不到就 返回“此编号图书不存在,请核对!”。void Find_Reader() /查找读者信息操作结果:按照读者的读书证号进行查找,找到了就显示该读者的信 息,若找不到则显示“该读书证号不存在,请核对!”。void Init() Init_reader(); Init_book(); 操作结果:实现读者和图书的初始化。void Insert_New_Book() 操作结果:实现图书的存储。分两种情况:1.该图书存在;2.该图书不存在。 void Load() Load_Reader(); Load_Book(); 操作结果:实现对读者和图书信息的加载。 void Save() Save_Reader(); Save_Book(); 操作结果:实现对图书和读者信息的保存。 各功能模块之间的关系图如图所示:三、 详细设计 主函数和其他函数的伪码算法;1. 新书入库:void Insert_New_Book() if含有该书,则将该书的库存量和新加的数量相加得图书的数量; else则void Init_book()。 2. 查询信息:void Find_Book() if(strcmp(p-book_num,find_book)=0)显示该书信息; else 显示该书不存在。 void Find_Reader() if(strcmp(p-reader_num,find_reader)=0)显示该读者信息; else 显示该读者不存在。 void Print_reader() 输入读者图书证号 while(p!=NULL) 显示读者的证号,姓名,结束编号和还书日期 输出读者信息显示完毕! void Print_book() while(p!=NULL) 显示图书的编号,名称,作者等信息 输出图书信息显示完成! 3.借书登记:void Borrow_Book() 输入借书的读者的借书证号 while(p2-next!=NULL&strcmp(rea_num,p2-reader_num)!=0) / 判断 读者是否存在 if(p2-next=NULL&strcmp(rea_num,p2-reader_num)!=0) /如果存在,则继续,不存在就提示错误! 输入你要借的书的编号 while(strcmp(bo_num,p1-book_num)!=0&p1-next!=NULL) /判断此图书是否存在 if(p1-next=NULL&strcmp(bo_num,p1-book_num)!=0) /如果存在,则继续,不存在就提示错误! else if(p1-book_xyzuida=Max) /判断此读者借书权限是否已达最大 不好意思,借书数目已满!不能借书! else if(strcmp(p2-borrow0.borrow_book_num,0)!=0) / 若读者已经借书,再判断此读者是否要借两本一样的书 if(strcmp(p2-borrowi.borrow_book_num,bo_num)=0) 抱歉!同一个读者不能同借两本相同的书! else if(strcmp(p2-borrowi.borrow_book_num,0)=0) /若没有重复,则继续 输入你要归还图书的日期; strcpy(p2-borrowp2-zuida+.borrow_book_num,bo_num); /记录读者所借图书书号,并且借书数目加一,现存量减一 else /若此读者从未借过书 输入你要归还图书的日期 记录所借书号,并且借书数目加一,现存量减一 strcpy(p2-borrowp2-zuida-1.huanshu_date,huan_date); p1-book_xy-; 4.还书管理: void Return_Book() 输入要还书的读者图书证号 while(q-next!=NULL&strcmp(return_reader_num,q-reader_num)!=0) 输入读者还书的编号; while(p-next!=NULL&strcmp(return_book_num,p-book_num)!=0) if(p-next=NULL&strcmp(return_book_num,p-book_num)!=0) 输出“错误!此图书编号不存在!” for(i=0;iborrowi.borrow_book_num)=0) 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-; 输出“读者还书完毕!” 主要函数之间的调用关系图。四调试和测试结果第一次运行该程序,首先进入欢迎界面然后按任意键进入对读者信息的初始化界面然后按任意键进入对图书信息的初始化界面然后按任意键进入图书管理主菜单,界面如下:选择1进行新书入库,界面如下:然后按任意键回到主菜单,选择2进行查询信息,界面如下然后按任意键回到菜单主系统,选择3进入借书登记界面,界面如下:然后选择主菜单的0,在选择0退出系统,界面如下:五.用户手册 第一步:打开visual C+程序,建立一个工程,在工程中新建一个文件,然后将改程序写到新建的文件中,进行编译,运行。将会出现一个登录界面,如下图:点击任意键进入。 第二步:进入读者初始化界面,在其中添加读者的信息。添加完成后按任意键进入图书初始化界面。读者初始化化例如: 第三步:在图书初始化界面添加图书馆的图书的信息。添加完后可按任意键进入图书管理系统主菜单。图书界面例如: 第四步:在系统主菜单中,有0.退出系统;1.新书入库;2.查询信息;3.借书登记;4.还书管理。你可以选择想进行的步骤。系统主菜单如图所示: 第五步:在信息查询菜单中,有0.返回上级;1.查询图书;2.查询读者;3.显示图书;4.显示读者。你可以进行查找和显示功能。信息查询菜单如下图: 第六步:对于新书入库,借书等级,还书管理这三个功能中,只要按照步骤就可以完成。 当完成你所要进行的操作后,可以选择0.退出程序。六、体会与自我评价 通过这次课程设计,我深深体会到了数据结构的魅力,也体会到了C语言的强大功能,在课程设计中,我不仅可以把以前所学知识的温习了一下,还学会了许多新的知识,同时,在设计程序的时候,当我们遇到不会的,通过和同学们交流,到最后将他们学会,这种方法还可以使我们加深对概念的理解。我也感受到了自身的不足,书到用时方恨少,这句话一点也不错,我们大学生真应该趁着年轻时期,多学点知识,为我们以后的生活多做准备。在编辑程序和调试程序当中,我遇到了许许多多未曾遇到的问题,通过与同学们讨论,以及参考一些文献,或着可以上网上去查找一下资料,更重要的是,在老师的耐心帮助下,终于使程序成功的得到了运行。真心感谢所有帮助我的人。在以后的学习当中,我会认真学好课本上的知识的。在自己的业余时间多进行实际练习,不断的提高自己的编程水平,去更加熟练的去应用他们。源代码:#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( 学号:200907209 姓名:常宝生 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)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烘烤培训考试题及答案
- 黄山传媒公司策划方案
- 股民考试题目及答案
- 巩固几何考试题及答案
- 高职餐饮考试题及答案
- 产品研发流程规划与执行监控工具
- 房产客服考试题及答案
- 发票知识考试题及答案
- 俄国战争考试题及答案
- 小说人物冲突与戏剧性解析教案
- 台达伺服asda-b2系列技术手册
- 云南省三校生语文课件
- 园艺产品的主要贮藏方法与原理课件
- 社会及其构成要素
- 环境风险评价(共84张)课件
- 函数极限说课
- 农业经济学ppt全套教学课件
- 果蔬贮藏保鲜概论:第五章 采收与采后商品化处理(第2节 分级 Sorting)
- 弱电桥架安装及电缆敷设施工方案(PPT)
- FQFNew8.0+供应商自审表格使用手册
- 人教版部编三年级上册道德与法治一课一练(含答案)
评论
0/150
提交评论