版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 湖南工业大学课 程 设 计资 料 袋 理 学院(系、部) 20112012 学年第 1 学期 课程名称 数据结构 指导教师 职称 讲师 学生姓名 专业班级 信计092 学号 09411100201 题 目 图书管理系统 成 绩 起止日期2011 年 12月 12日 2011 年 12 月 17 日目 录 清 单序号材 料 名 称资料数量备 注1课程设计任务书12课程设计说明书1 湖南工业大学课程设计任务书2011-2012学年第 1学期 理 学院(系、部) 信息与计算科学 专业 092 班级课程名称: 数据结构 设计题目: 图书管理系统 完成期限:自 2011 年 12 月 12 日至 20
2、11 年 12 月 17 日共 1 周内容及任务 设计一个图书管理系统,实现图书入库、借书和还书功能,具体步骤如下:图书入库学生注册学生借书查看图书馆图书信息查看学生信息还书管理再查看图书和学生信息。 最后写出课程设计报告。进度安排起止日期工作内容12月12日至12月13日明确课程设计目的及任务,查找资料和文献12月14日至12月15日编写相关代码并经行调试12月15日至12月17日总结设计的心得与不足主要参考资料1 严蔚敏、吴伟民主编 数据结构(c语言版) 清华大学出版社 20022 金远平著 数据结构(c+描述) 清华大学出版社 2005 3 许卓群等著 数据结构与算法 高等教育出版社 2
3、004指导教师(签字): 年 月 日系(教研室)主任(签字): 年 月 日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、需求提出:各大高校都有图书馆
4、,每个学校的图书管理系统可能都不会完全相同,但大致主要功能还是差不多的。好的图书管理系统当然既方便学生借阅书籍,又方便学校图书的管理。2、需求描述:首先,当然是要保证图书馆有书,在这个程序中,我们可以理解为图书的采编入库,得保证学生有书借才行。图书馆已经有各式的书了,如果你需要借,则先应该在学校的图书管理系统中注册才行,至少的确认你是该校的学生才有资格的。其实就是一个通行证。接下来就是借书的过程了。借了书最后还是要还的,所以还有一个还书的过程。二、概要设计1、系统用到的抽象数据类型定义: 从整个管理系统来看,我们知道这里主要有两个对象,一个是图书馆的图书,另一个就是学生。这里这两个对象不单单是
5、作为简单的主体存在,他们都有很多功能,所以我们使用结构体来定义这两个。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 name
6、10; /学生姓名 book borrow_bookmaxnum; /所借书目(书号) int borrownum; /借书数目 stu; typedef struct int u; /用于记录已注册的学生数目 stu zw; /最大学生 数 可以有1000人 wstudent; wstudent student; 22、系统中子程序及功能要求的说明:1) void putin() 图书的采编入库:为了给学生提供较好的学习资源,我们可以采编多种类型的图书,而且每种类型的书籍可以入库一定数量,方便广大学生借阅。2)void regist() 学生注册信息:在借阅之前,通常要有身份识别,主要是为了
7、学校管理各种书籍借出,能够统一规则管理整个借书于还书的过程。3)void borrow() (借书的方法) 其实整个程序的主要目的就是学生借书,学生通过自己注册的唯一编号借阅图书馆在馆的图书。而且每个学生最多只能借8本。4)void lent() (还书的方法)借了书之后,在一定的时间内必须要归还,书是图书馆的,不是某个人的,不能总是占有它,当然也是从大众利益出发。5)void lookstu() (查看学生信息) 不管你是借了还是没有借书,只要你注册了,就会有你 的信息。包括你的借阅号,姓名,所借书籍书证号,借阅的书的数目,还书日期等6) void save_student() (保存学生信
8、息) 如果只是你单方面的注册,而并没有将你的所有信息保存起来,那就等于你没有注册,如果你注册过了,借书时,没有保存,那就是说图书馆的系统并不承认你借过书。7)void readstu() (读取学生信息) 看上去好像和查看学生信息类似,其实完全不同的过程,这是一个将学生的有关信息保存在文件中的过程,这个过程是我们视觉上感觉不到的。这和保存学生8)void lookup() (查询图书信息) 这个类似于查询学生信息的方法,都是将从文件中读取的信息打印出来。9) void save() (保存图书信息的方法) 也就是将所有图书的信息记录在文件中,比如每次入库了多少图示,是哪些图书,数量是多少,或者
9、是借出去一些后那些图书的现有量是多少等相关的信息。10)void readbook() (读取图书信息) 这个跟读取学生的信息道理是一样的,只有将学生的所有信息读取得内存中,我们才能得到完整的图书信息。3、各程序模块之间的调用关系1)从上面每个方法差不多也可以知道每个方法之间的关系了。入库之前,我们也需要将已经入库的图书和已经注册好的学生信息读取到内存中,以便后面的操作。入库图书后,需要void save(),之后还要void readbook() 也就是更新图书信息。2)学生注册和图书入库的道路是一样的,注册之后,需要保存,再读取到内存中,也就是及时更新信息。2) 借书和还书的过程都是将图书
10、和学生联系起来,每次借书时都需要同时更新图书的信息和学生的信息,借了书后,学生的记录中应该保存了他所借的书证号以及要还书的日期,而此时图书的信息也要相应的改变,借出后图书的数量或书目上要体现出来。还书也是如此,成功还书后,学生信息和图书信息也都要更新,就用到了对学生和图书的信息的保存和读取。三、详细设计图书管理系统的伪码描述如下: /保存图书信息的算法 fp=fopen(library.doc,w); /打开文件if(fp=null)printf(n不能保存图书信息n);return;fwrite(&library.count,sizeof(int),1,fp); /读取sizeof(int)
11、个数据到文件中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.cou
12、nt,fp);/图书信息入库 while(y) scanf(%s,num); strcpy(library.booklibrary.count.number,num); scanf(%s,); scanf(%s,library.booklibrary.count.author); scanf(%d,&library.booklibrary.count.countbook); library.booklibrary.count.shy=library.booklibrary.count.countbook; library.count+
13、; /每次新书入库,要将图书的全部信息记录/查看所以图书信息 for (i=0;ilibrary.count;i+)printf(%st%st%st%dt%dn,library.booki.number,,library.booki.author,library.booki.shy,library.booki.countbook); /遍历图书的种类,将其打印出来/保存学生信息 fwrite(&student.u,sizeof(int),1,fp); /从学生信息中,读取sizeof(int)个学生结构体类型数据信息保存到文件中fwrite(student.
14、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.
15、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+;stud
16、ent.zi.borrownum-; /还书后,要将该信息清除掉四、运行结果 按照附录中的测试数据,得出如下测试、分析结果: 进入系统初始界面(未操作之前,图书和学生的文件也还不存在)注册读者(已经注册了的,就不需要注册了,可以直接借书)查询读者信息(未借书之前,没有借书记录)图书入库(可以入库不同的书)查询图书信息(没有借出之前,图书的现有量和库存是相同的)借书0101读者借01号图书一本此时查询图书信息01书本现有量减少10101读者的信息(借书后的学生信息)继续借7本书达到借书上限(一个学生只能借8本书)此时的0101读者的信息还书此时01号书的现有量增1此时0101读者的信息未借书五、
17、本设计使用说明及测试数据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六、设计总结通过该课程设计,熟练掌握了数据结构的选择、设计、实现以及操作方法,以及如何选择存储表来存储,并让我更加能熟练、灵活的运用循环语句,让我深刻理解了函数的定义和作用,函数调用的方便,为进一步的应
18、用开发打好基础,提高综合运用所学的理论知识和方法地理分析和解决问题的能力,同时还让我感觉到了自己的不足,我们应该认真学习知识,学更多知识来完善自己。七、参考文献1 严蔚敏、吴伟民主编 数据结构(c语言版) 清华大学出版社 20022 金远平著 数据结构(c+描述) 清华大学出版社 2005 3 许卓群等著 数据结构与算法 高等教育出版社 2004八、源代码实现#include#include#include#define maxcount 10#define maxnum 20#define w 1000typedef struct char number10; /书号char name20;
19、 /书名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 b
20、orrow_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(l
21、ibrary.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 put
22、in() /*定义录入函数*/ 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.b
23、ooklibrary.count.number,num); printf(图书书名:); scanf(%s,); 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(strcm
24、p(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();/查询图书信息
25、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.
26、account,account)=0)printf(你已经注册了!); return;if(i=student.u)strcpy(student.zstudent.u.account,account); printf(n读者的姓名:); scanf(%s,); printf(恭喜你 注册成功!); student.u+; fflush(stdin); save_student(); /保存学生信息 /借书 管理void borrow()char num10,bnum10,bo_day10,lent_day10;int i,y=1,j,n,cou=0
27、;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(stu
28、dent.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); print
29、f(恭喜你!你已借书成功!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(
30、);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(对不起,你还没
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋买卖合同格式模板
- 2024舞蹈教室租赁合同样本
- 2024年家庭居室装修工程协议
- 年西安市设备技术转让合同样本-合同范本
- 2024工程建设招标投标协议合同范本
- 简约技术专利权转让合同
- 2024公司股份转让合同股份转让后可以毁约
- 2024年车辆矿石运输合同范本
- 废料回收权转让协议
- 公司流动资金借款合同
- 高效沟通与管理技能提升课件
- 消防维保方案 (详细完整版)
- 四年级上册英语课件- M3U1 In the school (Period 3 ) 上海牛津版试用版(共15张PPT)
- 档案馆建设标准
- 高边坡支护专家论证方案(附有大量的图件)
- 苏教版五年级上册数学试题-第一、二单元 测试卷【含答案】
- 人员定位矿用井口唯一性检测系统
- 电力系统数据标记语言E语言格式规范CIME
- 历史纪年与历史年代的计算方法
- 快递物流运输公司 国际文件样本 形式发票样本
- 管理信息系统题目带答案
评论
0/150
提交评论