数据结构课程设计图书管理系统

上传人:沈*** 文档编号:83457487 上传时间:2022-05-01 格式:DOC 页数:29 大小:531.50KB
返回 下载 相关 举报
数据结构课程设计图书管理系统_第1页
第1页 / 共29页
数据结构课程设计图书管理系统_第2页
第2页 / 共29页
数据结构课程设计图书管理系统_第3页
第3页 / 共29页
点击查看更多>>
资源描述
湖南工业大学课 程 设 计资 料 袋 理 学院(系、部) 20112012 学年第 1 学期 课程名称 数据结构 指导教师 职称 讲师 学生姓名 专业班级 信计092 学号 09411100201 题 目 图书管理系统 成 绩 起止日期2011 年 12月 12日 2011 年 12 月 17 日目 录 清 单序号材 料 名 称资料数量备 注1课程设计任务书12课程设计说明书1 湖南工业大学课程设计任务书2011-2012学年第 1学期 理 学院(系、部) 信息与计算科学 专业 092 班级课程名称: 数据结构 设计题目: 图书管理系统 完成期限:自 2011 年 12 月 12 日至 2011 年 12 月 17 日共 1 周内容及任务 设计一个图书管理系统,实现图书入库、借书和还书功能,具体步骤如下:图书入库学生注册学生借书查看图书馆图书信息查看学生信息还书管理再查看图书和学生信息。 最后写出课程设计报告。进度安排起止日期工作内容12月12日至12月13日明确课程设计目的及任务,查找资料和文献12月14日至12月15日编写相关代码并经行调试12月15日至12月17日总结设计的心得与不足主要参考资料1 严蔚敏、吴伟民主编 数据结构(C语言版) 清华大学出版社 20022 金远平著 数据结构(C+描述) 清华大学出版社 2005 3 许卓群等著 数据结构与算法 高等教育出版社 2004指导教师(签字): 年 月 日系(教研室)主任(签字): 年 月 日29 数据结构课程 设计说明书图书管理系统起止日期: 2011 年 12月 12 日 至 2011 年 12 月 17 日学生姓名黄畅班级信计092学号09411100201成绩指导教师(签字)理学院2011年12 月 16 日目 录一、需求分析51、需求提出52、需求描述5二、概要设计51、系统用到的抽象数据类型定义52、系统中子程序及功能要求的说明63、各程序模块之间的调用关系6三、详细设计7四、运行结果11五、本设计使用说明及测试数据19七、参考文献20八、源代码实现20一、需求分析1、需求提出:各大高校都有图书馆,每个学校的图书管理系统可能都不会完全相同,但大致主要功能还是差不多的。好的图书管理系统当然既方便学生借阅书籍,又方便学校图书的管理。2、需求描述:首先,当然是要保证图书馆有书,在这个程序中,我们可以理解为图书的采编入库,得保证学生有书借才行。图书馆已经有各式的书了,如果你需要借,则先应该在学校的图书管理系统中注册才行,至少的确认你是该校的学生才有资格的。其实就是一个通行证。接下来就是借书的过程了。借了书最后还是要还的,所以还有一个还书的过程。二、概要设计1、系统用到的抽象数据类型定义: 从整个管理系统来看,我们知道这里主要有两个对象,一个是图书馆的图书,另一个就是学生。这里这两个对象不单单是作为简单的主体存在,他们都有很多功能,所以我们使用结构体来定义这两个。1)图书结构体的定义: typedef struct char number10; /书号char name20; /书名char author20; /作者int countbook; /库存 int shY; /剩余量 mbook;typedef struct int count;/书的本数mbook book100;/最大可有100本书mlibrary;mlibrary library; 2)学生结构体 typedef struct /学生系统 char accountMAXCOUNT; /学生帐号 char name10; /学生姓名 book borrow_bookMAXNUM; /所借书目(书号) int borrownum; /借书数目 stu; typedef struct int u; /用于记录已注册的学生数目 stu zw; /最大学生 数 可以有1000人 Wstudent; Wstudent student; 22、系统中子程序及功能要求的说明:1) void putin() 图书的采编入库:为了给学生提供较好的学习资源,我们可以采编多种类型的图书,而且每种类型的书籍可以入库一定数量,方便广大学生借阅。2)void Regist() 学生注册信息:在借阅之前,通常要有身份识别,主要是为了学校管理各种书籍借出,能够统一规则管理整个借书于还书的过程。3)void borrow() (借书的方法) 其实整个程序的主要目的就是学生借书,学生通过自己注册的唯一编号借阅图书馆在馆的图书。而且每个学生最多只能借8本。4)void lent() (还书的方法)借了书之后,在一定的时间内必须要归还,书是图书馆的,不是某个人的,不能总是占有它,当然也是从大众利益出发。5)void lookStu() (查看学生信息) 不管你是借了还是没有借书,只要你注册了,就会有你 的信息。包括你的借阅号,姓名,所借书籍书证号,借阅的书的数目,还书日期等6) void save_student() (保存学生信息) 如果只是你单方面的注册,而并没有将你的所有信息保存起来,那就等于你没有注册,如果你注册过了,借书时,没有保存,那就是说图书馆的系统并不承认你借过书。7)void readStu() (读取学生信息) 看上去好像和查看学生信息类似,其实完全不同的过程,这是一个将学生的有关信息保存在文件中的过程,这个过程是我们视觉上感觉不到的。这和保存学生8)void lookup() (查询图书信息) 这个类似于查询学生信息的方法,都是将从文件中读取的信息打印出来。9) void save() (保存图书信息的方法) 也就是将所有图书的信息记录在文件中,比如每次入库了多少图示,是哪些图书,数量是多少,或者是借出去一些后那些图书的现有量是多少等相关的信息。10)void readBook() (读取图书信息) 这个跟读取学生的信息道理是一样的,只有将学生的所有信息读取得内存中,我们才能得到完整的图书信息。3、各程序模块之间的调用关系1)从上面每个方法差不多也可以知道每个方法之间的关系了。入库之前,我们也需要将已经入库的图书和已经注册好的学生信息读取到内存中,以便后面的操作。入库图书后,需要void save(),之后还要void readBook() 也就是更新图书信息。2)学生注册和图书入库的道路是一样的,注册之后,需要保存,再读取到内存中,也就是及时更新信息。2) 借书和还书的过程都是将图书和学生联系起来,每次借书时都需要同时更新图书的信息和学生的信息,借了书后,学生的记录中应该保存了他所借的书证号以及要还书的日期,而此时图书的信息也要相应的改变,借出后图书的数量或书目上要体现出来。还书也是如此,成功还书后,学生信息和图书信息也都要更新,就用到了对学生和图书的信息的保存和读取。三、详细设计图书管理系统的伪码描述如下: /保存图书信息的算法 fp=fopen(library.doc,w); /打开文件if(fp=NULL)printf(n不能保存图书信息n);return;fwrite(&library.count,sizeof(int),1,fp); /读取sizeof(int)个数据到文件中fwrite(library.book,sizeof(library.book0),library.count,fp);/从文件中读取图书信息 fp=fopen(library.doc,r); /打开文件if(fp=NULL)printf(n不能打开图书信息n);return; fread(&library.count,sizeof(int),1,fp); /从文件中读取sizeof(int)个数据到library中 printf(-图书数量-+library.count); fread(library.book,sizeof(library.book0),library.count,fp);/图书信息入库 while(y) scanf(%s,num); strcpy(library.booklibrary.count.number,num); scanf(%s,library.booklibrary.count.name); scanf(%s,library.booklibrary.count.author); scanf(%d,&library.booklibrary.count.countbook); library.booklibrary.count.shY=library.booklibrary.count.countbook; library.count+; /每次新书入库,要将图书的全部信息记录/查看所以图书信息 for (i=0;ilibrary.count;i+)printf(%st%st%st%dt%dn,library.booki.number,library.booki.name,library.booki.author,library.booki.shY,library.booki.countbook); /遍历图书的种类,将其打印出来/保存学生信息 fwrite(&student.u,sizeof(int),1,fp); /从学生信息中,读取sizeof(int)个学生结构体类型数据信息保存到文件中fwrite(student.z,sizeof(student.z0),student.u,fp);/读取学生信息 fread(&student.u,sizeof(int),1,fp);fread(student.z,sizeof(student.z0),student.u,fp);/借书管理 scanf(%s,bnum);/选择要借的书籍序列号 strcpy(student.zi.borrow_bookstudent.zi.borrownum.bName,bnum);/记录学生借书的信息scanf(%s,bo_day); strcpy(student.zi.borrow_bookstudent.zi.borrownum.borrow_day,bo_day); scanf(%s,lent_day); strcpy(student.zi.borrow_bookstudent.zi.borrownum.lent_day,lent_day);library.booki.shY-;student.zi.borrownum+;/每次借书后,学生的借书数目就会增加,而图书馆内的该类型书数目将减少1/还书管理 for(i=0;istudent.u;i+) /遍历已经注册好的学生for(j=0;jstudent.zi.borrownum;j+) /找到学生后,遍历他所借的所有图书 library.booki.shY+;student.zi.borrownum-; /还书后,要将该信息清除掉四、运行结果 按照附录中的测试数据,得出如下测试、分析结果: 进入系统初始界面(未操作之前,图书和学生的文件也还不存在)注册读者(已经注册了的,就不需要注册了,可以直接借书)查询读者信息(未借书之前,没有借书记录)图书入库(可以入库不同的书)查询图书信息(没有借出之前,图书的现有量和库存是相同的)借书0101读者借01号图书一本此时查询图书信息01书本现有量减少10101读者的信息(借书后的学生信息)继续借7本书达到借书上限(一个学生只能借8本书)此时的0101读者的信息还书此时01号书的现有量增1此时0101读者的信息未借书五、本设计使用说明及测试数据a=1 时,采编入库图书,a=2时,注册学生信息,a=3时,学生借书管理,a=4时,学生还书,a=5时,显示学生信息,a=6时,显示图书信息,a=0时,退出图书管理系统。入库的图书书证号 01 书名 11 作者 AA 库存 100书证号 02 书名 22 作者 bb 库存 100书证号 5 书名 cc 作者 vv 库存 100注册学生 读者书证号 0101 读者姓名 qq六、设计总结通过该课程设计,熟练掌握了数据结构的选择、设计、实现以及操作方法,以及如何选择存储表来存储,并让我更加能熟练、灵活的运用循环语句,让我深刻理解了函数的定义和作用,函数调用的方便,为进一步的应用开发打好基础,提高综合运用所学的理论知识和方法地理分析和解决问题的能力,同时还让我感觉到了自己的不足,我们应该认真学习知识,学更多知识来完善自己。七、参考文献1 严蔚敏、吴伟民主编 数据结构(C语言版) 清华大学出版社 20022 金远平著 数据结构(C+描述) 清华大学出版社 2005 3 许卓群等著 数据结构与算法 高等教育出版社 2004八、源代码实现#include#include#include#define MAXCOUNT 10#define MAXNUM 20#define w 1000typedef struct char number10; /书号char name20; /书名char author20; /作者int countbook; /库存 int shY; /剩余量 mbook;typedef struct int count;/书的本数mbook book100;/最大可有100本书mlibrary;mlibrary library; typedef struct char borrow_day10; /借书日期 char lent_day10; /还书日期 char bName10; / book;typedef struct /学生系统 char accountMAXCOUNT; /学生帐号 char name10; /学生姓名 book borrow_bookMAXNUM; /所借书目(书号) int borrownum; /借书数目 stu; typedef struct int u; /用于记录已注册的学生数目 stu zw; /最大学生 数 可以有1000人 Wstudent; Wstudent student; void save()/保存图书信息。FILE *fp;fp=fopen(library.doc,w);if(fp=NULL)printf(n不能保存图书信息n);return;fwrite(&library.count,sizeof(int),1,fp);fwrite(library.book,sizeof(library.book0),library.count,fp);fclose(fp);/每次将文件中的图书信息 ,加载到内存中void readBook() FILE *fp;fp=fopen(library.doc,r);if(fp=NULL)printf(n不能打开图书信息n);return; fread(&library.count,sizeof(int),1,fp); printf(-图书数量-+library.count); fread(library.book,sizeof(library.book0),library.count,fp); fclose(fp); void putin() /*定义录入函数*/ int i,count1; char num10;int y=1;while(y) printf(n新书入库模块.); printf(n请输入新书信息.);printf(n包括书号,书名,数量);printf(n图书编号:);scanf(%s,num); / count1=library.count;for(i=0;ilibrary.count;i+) if(strcmp(library.booki.number,num)=0) return; count1+;if(strcmp(count1,library.count)=0) strcpy(library.booklibrary.count.number,num); printf(图书书名:); scanf(%s,library.booklibrary.count.name); printf(图书作者:); scanf(%s,library.booklibrary.count.author); printf(图书数量:); scanf(%d,&library.booklibrary.count.countbook); library.booklibrary.count.shY=library.booklibrary.count.countbook; library.count+;/if(strcmp(count1,library.count)!=0)/*elseprintf(图书管已经有此书,请输入要增加的数量:); scanf(%d,&library.booklibrary.count.countbook); library.booklibrary.count.shY=library.booklibrary.count.shY+library.booklibrary.count.countbook; */printf(n是否继续录入(1.继续;0,退出录入):);fflush(stdin);scanf(%d,&y);if (y!=1)y=0;break; save();/查询图书信息void lookup() int i;printf(图书号t图书名t作者名t现有量t库存量n);for (i=0;i%d,student.u);fread(student.z,sizeof(student.z0),student.u,fp);fclose(fp);/学生注册void Regist()int i;char account10;printf(nn读者初始化开始,请输入读者信息:n包括证号,姓名.n学生注册信息);printf(请输入读者的信息n读者书证号:);scanf(%s,account);for(i=0;istudent.u;i+)if(strcmp(student.zi.account,account)=0)printf(你已经注册了!); return;if(i=student.u)strcpy(student.zstudent.u.account,account); printf(n读者的姓名:); scanf(%s,student.zstudent.u.name); printf(恭喜你 注册成功!); student.u+; fflush(stdin); save_student(); /保存学生信息 /借书 管理void borrow()char num10,bnum10,bo_day10,lent_day10;int i,y=1,j,n,cou=0;printf(tt你已进入借书模块.n);while(y) printf(请输入借书的读者证号:);scanf(%s,num) ; cou=library.count; for(i=0;i0) if(student.zi.borrownum=8) printf(对不起!你已达到最大借书上限,不能再借n);break; else printf(请输入你要借的书的编号:); scanf(%s,bnum); for(j=0;j+library.bookj.shY); if(strcmp(library.bookj.number,bnum)!=0) continue; else strcpy(student.zi.borrow_bookstudent.zi.borrownum.bName,bnum); printf(请输入借书日期,格式如(08,03,24):); scanf(%s,bo_day); strcpy(student.zi.borrow_bookstudent.zi.borrownum.borrow_day,bo_day); printf(请输入还书日期,格式如(08,03,24):); scanf(%s,lent_day); strcpy(student.zi.borrow_bookstudent.zi.borrownum.lent_day,lent_day); printf(恭喜你!你已借书成功!n);library.booki.shY-;student.zi.borrownum+; save(); save_student(); readBook(); readStu(); break; if(j=cou) printf(对不起,本图书馆没有你要借的书(或者货存不足)!n); return; if(n=i) printf(对不起,你还没有注册,请先注册,才能借书!); return; printf(n是否继续录入(1.继续;0,退出录入):); fflush(stdin); scanf(%d,&y); if (y!=1) y=0; return; save();save_student();/还书管理void lent() char num10,bnum10,bo_day10,lent_day10;int i,j,con;printf(tt你已进入还书模块.n); printf(请输入还书的读者证号:);scanf(%s,num) ; for(i=0;istudent.u;i+) con+; if(strcmp(student.zi.account,num)=0) if(student.zi.borrownum1) printf(对不起!你没有借书,不需要还!n);break; else printf(请输入你要借的书的编号:); scanf(%s,bnum); for(j=0;jstudent.zi.borrownum;j+) if(strcmp(student.zi.borrow_bookj.bName,bnum)=0) printf(恭喜你!你已成功还书!n); library.booki.shY+;student.zi.borrownum-; save(); save_student(); return; if(strcmp(con,student.u)=0) printf(对不起,你还没有注册,请先注册!); save();save_student();/查看学生信息void lookStu() int i,j;for (i=0;istudent.u;i+) printf(读者书证号t读者姓名t借书数目n); printf(%stt%stt%dn,student.zi.account,student.zi.name,student.zi.borrownum);for(j=0;jstudent.zi.borrownum;j+) printf(所借书名t还书日期n); printf(t%stt%sn,student.zi.borrow_bookj.bName,student.zi.borrow_bookj.lent_day);printf(nn);fflush(stdin);getchar();/主函数void main()FILE *fp;int a;char y;printf(nttt欢迎使用图书管理系统nn);printf(nttt按 任意键 键 进 入 系 统.n);getch();system(cls);readBook(); /每次先将图书信息读取在内存中readStu(); /每次首先将 注册的学生信息 读取放在内存中 do printf(nnnnntttt图书信息管理系统ttttn);printf(tt*n);printf(ttt 0 -退出系统 n);printf(ttt 1 -采编入库 n); printf(ttt 2 -登记读者 n);printf(ttt 3 -借阅登记 n);printf(ttt 4 -还书管理 n); printf(ttt 5 -查询图书信息 n); printf(ttt 6 -查询读者信息 n);printf(tt*n);printf(ttPlease Enter Choose: );fflush(stdin);scanf(%d,&a);switch(a)case 0:printf(nn退出nn);break;case 1:putin();break; case 2:Regist(); break;case 3:borrow();break;case 4:lent();break;case 5:lookup();break;case 6:lookStu();break;default:printf(n序号不对n); while(a!=0); save();
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!