版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计报告学号1208210105 数据结构课程设计报告题目:图书管理系统专业:计算机科学与技术班级:12 级( 3)班姓名:陈珂指导教师:陈广宏成绩:计算机与信息工程系2014 年 12月 15 日2014-2015学年 第一学期数据结构课程设计报告目录1. 设计题目与要求 . 1 1.1 问题描述 . 1 1.2 基本要求 . 1 1.3 进一步完成内容 . 1 2. 概要设计 . 2 2.1 图书初始化 . 2 2.2 新书入库 . 2 2.3 添加读者信息 . 2 2.4 借书模块 . 2 2.5 还书模块 . 3 2.6 查询图书信息 . 3 2.7 查询读者信息 . 3
2、2.8 退出. 3 3. 算法设计 . 4 3.1 图书管理系统概括图 . 4 3.2 线性表的两种存储方式的优缺点. 4 4. 运行结果和调试分析 . 5 5. 总结体会及源代码 . 11 6. 参考文献 . 27 数据结构课程设计报告11.设计题目与要求1.1 问题描述设计一个计算机管理系统完成图书管理基本业务。基本业务包括:图书管理、读者管理、借书管理、还书管理及查询信息等。1.2 基本要求1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则
3、只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本, 登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。1.3 进一步完成内容1)系统功能的进一步完善2)索引表采用树表3)设计内容4)程序流程图5)源程序6)软件测试报告(包括所用到的数据及结果)数据结构课程设计报告22. 概要设计2.1 图书初始化输入图书的一些信息,书的编号、图书的作者、图书名称、库存数量等,使有一定的库存。 图书信息管理包括图书借还、查询等操作, 系统用户管理包括系统用户类别和用户数据管理,读者数据管理包括读者类别管理和个人数据的录入、修改和删除。作为信息存储的主要媒体之一图
4、书,数量、规模比以往任何时候都大的多,不论个人还是图书管理部门都需要使用方便而有效的方式来管理自己的书籍。图书管理系统的核心是对图书信息与管理,是以数据为中心的体系结构,依靠数据联通各个部分并使之协调工作。2.2 新书入库新书采编入库,输入编号后如果有次数只需输入数量, 没有则继续输入书名、作者、数量。目录信息包括图书编号、图书类别、书名、作者、出版社、定价、出版日期、数量等。2.3 添加读者信息读者信息初始化, 输入读书证号和姓名, 只有输入书证号和姓名才能进行借书还书管理。2.4 借书模块读者输入读书证号, 证号存在输入要借的图书编号,不能借同一本书, 如果借书数量以达到最大也不能借书。图
5、书借阅者的需求是查询图书室所存的图书;图书馆工作人员对图书借阅者的借阅及还书要求进行操作,形成借书或还书报表。数据结构课程设计报告32.5 还书模块归还已借的图书, 要先输入读者书证号, 书证号存在继续输入要还的图书编号,图书编号存在并且借过此书,归还成功,并修改该书在系统中的库存数量。如果有超期借阅或丢失情况,先转入过期罚款或图书丢失处理。2.6 查询图书信息可以查询图书证号, 查看该书被借了几本, 借的都是什么书, 还书日期是什么时候, 库存还有多少。图书管理员或读者可以对图书的基本信息进行查询。根据借阅人编码,获得该人员的全部借阅信息。可以获得所有已到期但尚未归还的催还书目信息。2.7
6、查询读者信息可以查询读者姓名和证号, 查看该读者借了几本书, 都是什么书和还书日期,还可以借几本书。此模块对应完成用户或管理员对馆藏读者信息的查询。2.8 退出退出读书管理系统并保存读者和图书信息。以便图书基于图书管理者再次对图书的管理。数据结构课程设计报告43. 算法设计3.1 图书管理系统概括图图 1 图书管理系统概括图3.2 线性表的两种存储方式的优缺点1、顺序方式顺序存储结构优点是可以实现随机读取, 时间复杂度为 o(1), 空间利用率高 ;缺点是进行查找操作时比较麻烦, 时间复杂度为 o(n), 同时容量受限制 , 需要事先确定容量大小 , 容量过大浪费空间资源 , 过小不能满足使用
7、要求 , 会产生溢出问题 ,虽然可以扩容 , 但是需要耗时间的。2、链式方式链式存储结构优点 , 查找操作非常简单 , 前提条件是知道操作位置, 时间复杂度是o(1), 但如果不知道操作位置则要定位元素, 时间复杂度也是 o(n), 还有一个很大的优点是没有容量的限制, 可以在使用过程中动态的分配内存空间, 不用担数据结构课程设计报告5心溢出的问题 ; 缺点是它不能实现随机读取, 同时空间利用率不高 . 这两个结构各有优缺点 , 不同的地方选择不同的结构. 尽量利用其优点 , 避免其缺点。本程序选择的是线性表的链式存储。4. 运行结果和调试分析图2 进入界面数据结构课程设计报告6图3 图书信息
8、初始化图4 采编入库后查询图书信息的运行结果图数据结构课程设计报告7图5 登记读者信息图6 借书数据结构课程设计报告8图7 借书后查询图书信息的运行结果图图 8 借同一本书的运行结果图数据结构课程设计报告9图9 借不同的书图10 借两本书后查询读者信息的运行结果图数据结构课程设计报告10图11 还书运行结果图图12 还书后查询图书信息数据结构课程设计报告11图13 退出5. 总结体会及源代码虽然这次的程序是通过上网查出来的,但是通过这次的实验使我知道了图书管理系统的流程, 知道了一些以前不知道的知识, 在运行程序时也遇到了一些问题,借书时只能借一本书, 再借书就不能显示是借了还是不能借,把最多
9、能借书的数量改了一下还是不行,最后在每一个判断输出之后都加了goto end 借书,就能正常借书了。 程序有点长, 本来一个函数就能完成一个功能,他用了两个函数就我把自己能改成一个的改了。借书系统比较复杂, 不容易懂, 和同学交流了一下自己看了看才明白。这次的实验还让我复习了数据结构的一些知识,如数组,while 语句,switch语句,链表,还知道了如何使用system(cls)清屏,还知道了 strcmp 是用来比较字符串 s1和s2大小的, strcpy 使用来把字符串 s2的值赋给 s1的。这次的实验增加了我们自己动手动脑的能力,希望多做一些这样的实验, 很有意义,和现实生活结合的程序
10、增加了我的兴趣。数据结构课程设计报告12源代码#include #include #include #include #define max 4 typedef struct book char book_num10; char book_name20; char book_writer10; int book_xy;/*现有*/ int book_kc;/*库存*/ struct book *next; bk; typedef struct borrow char borrow_book_num10; char limit_date8; bo; typedef struct reader c
11、har reader_num10; char reader_name10; int right; bo borrowmax; struct reader *next; rd; 数据结构课程设计报告13bk *h_book; rd *h_reader; void login(); int menu(); void init(); void init_book(); void menu_select(); void insert_new_book(); void find_book(); void add_reader(); void print_reader(); void print_book
12、(); void borrow_book(); void return_book(); void save(); void save_book(); void save_reader(); void load(); void load_reader(); void load_book(); void login() system(cls); printf(nnntt*n); printf(nnnttt欢迎使用图书管理系统 n); printf(nnntt*n); printf(nnntt 按任意键进入系统 .); getch(); system(cls); 数据结构课程设计报告14int me
13、nu() /*主菜单 */ int dm; printf(ntt图书管理系统主菜单 n); printf(=n); printf(*t0-退出系统 n); printf(*t1-采编入库 n); printf(*t2-登记读者 n); printf(*t3-借阅登记 n); printf(*t4-还书管理 n); printf(*t5-查询图书信息 n); printf(*t6-查询读者信息 n); printf(=n); printf(请选择相应的代码 :); for(;) scanf(%d,&dm); /dm输入的数字 if(dm6) printf(n错误! 请重新输入 :); e
14、lse break; return dm; void menu_select()/*主菜单选择函数 */ for(;) switch(menu() /*功能选择 */ case 0: system(cls); save(); 数据结构课程设计报告15printf(nnt文件保存成功 !n); printf(nnt欢迎下次使用本系统 !n); getch(); exit(0); case 1:insert_new_book();break; case 2:add_reader();break; case 3:borrow_book();break; case 4:return_book();br
15、eak; case 5:print_book();break; case 6:print_reader();break; default:printf(n错误!); exit(0); void init() /*初始化*/ bk *p0; printf(n图书初始化开始 , 请输入图书信息 .n 包括编号 . 书名. 数量.n); p0=(bk*)malloc(sizeof(bk); h_book=p0; printf(n请输入图书信息 :n); printf(图书编号 :); /*输入图书编号 ( 唯一)*/ scanf(%s,p0-book_num); printf(图书名称 :); /*
16、输入图书名称 */ scanf(%s,p0-book_name); printf(图书作者 :); /*输入图书作者 */ scanf(%s,p0-book_writer); printf(图书数量 :); /*输入图书数量 */ scanf(%d,&p0-book_kc); 数据结构课程设计报告16 p0-book_xy=p0-book_kc; /*开始时图书现有量和库存量相等*/ p0-next=null; printf(n图书信息初始化完毕 ! 按任意键继续下一步操作.n); void insert_new_book()/*新书入库 */ bk *p,*p0,*p1; p=p1=
17、h_book; printf(n新书入库模块 .n); printf(n请输入新书信息 .n 包括书号 . 书名. 数量.n); p0=(bk *)malloc(sizeof(bk); printf(图书编号 :); scanf(%s,p0-book_num); while(strcmp(p0-book_num,p1-book_num)!=0&p1-next!=null) p1=p1-next; if(strcmp(p0-book_num,p1-book_num)=0) /*此处分两种情况 , 若图书编号存在 , 则直接进库 , 只须输入书的数量 */ printf(n此编号图书已存在
18、 ! 直接入库 !n); printf(图书数量 :); scanf(%d,&p0-book_kc); p1-book_kc+=p0-book_kc; p1-book_xy+=p0-book_kc; else/*若不存在 , 则需要输入其他的信息 , 然后在进行插入操作 */ printf(图书名称 :); scanf(%s,p0-book_name); printf(图书作者 :); 数据结构课程设计报告17 scanf(%s,p0-book_writer); printf(图书数量 :); scanf(%d,&p0-book_kc);/库存数量while(p-next) p
19、=p-next; if(h_book=null) h_book=p0; /*此处分两种情况 , 链表中没有数据,head直接指向 p0处*/ else p-next=p0; /*此处分两种情况 , 链表中有数据 , 链表中最后元素的 next 指向p0处*/ p0-next=null; p0-book_xy=p0-book_kc; printf(n新书入库完毕 ! 按任意键继续下一步操作 .n); void add_reader()/*添加读者 */ rd *p0; int i; printf(n读者初始化开始 , 请输入读者信息 .n 包括书证号 . 姓名.n); p0=(rd*)mallo
20、c(sizeof(rd); /*申请新结点存储空间 */ h_reader=p0; printf(n请输入读者的信息 :n); printf(读者书证号 :); scanf(%s,p0-reader_num); printf(读者姓名 :); scanf(%s,p0-reader_name); p0-right=0; for(i=0;iborrowi.borrow_book_num,0); /*所借图书直接置为 ( 即没有数据结构课程设计报告18借书)*/ strcpy(p0-borrowi.limit_date,0); p0-next=null; printf(n读者信息初始化完毕 ! 按任
21、意键继续下一步操作 .n); void borrow_book() /*借书模块 */ bk *p0; rd *p1; char bo_num10,rea_num10,lim_date8; int i; p0=h_book; p1=h_reader; printf(n借书模块 .n); printf(n请输入借书的读者书证号 :); scanf(%s,rea_num); while(p1-next!=null&strcmp(rea_num,p1-reader_num)!=0) p1=p1-next; if(p1-next=null&strcmp(rea_num,p1-reade
22、r_num)!=0) printf(n此读者编号不存在 ! 按任意键返回 .n); goto end; printf(n请输入你要借的书的编号 :); scanf(%s,bo_num); while(strcmp(bo_num,p0-book_num)!=0&p0-next!=null) p0=p0-next; if(p0-next=null&strcmp(bo_num,p0-book_num)!=0) printf(n此图书编号不存在 ! 按任意键返回 .n); 数据结构课程设计报告19 goto end; else if(p0-book_xyrightmax|p1-righ
23、t=max) printf(n不好意思 , 借书数目已满 ! 不能借书 !n 按任意键返回 .); goto end; else if(strcmp(p1-borrow0.borrow_book_num,0)!=0) for(i=0;iborrowi.borrow_book_num,bo_num)=0) printf(n抱歉! 同一个读者不能同借两本相同的书!n 按任意键返回 .); goto end; else if(strcmp(p1-borrowi.borrow_book_num,0)=0) printf(n请输入你要归还图书的日期:); scanf(%s,lim_date); strc
24、py(p1-borrowp1-right+.borrow_book_num,bo_num); strcpy(p1-borrowp1-right-1.limit_date,lim_date); p0-book_xy-; 数据结构课程设计报告20 p0-book_kc-; printf(n读者编号 %s 借书完毕 ! 按任意键继续下步操作.,p1-reader_num); goto end; else printf(n请输入你要归还图书的日期:); scanf(%s,lim_date); strcpy(p1-borrowp1-right+.borrow_book_num,bo_num); strc
25、py(p1-borrowp1-right-1.limit_date ,lim_date ); p0-book_xy-; p0-book_kc-; printf(n读者编号 %s 借书完毕 ! 按任意键继续下步操作.,p1-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(
26、n请输入要还书的读者编号 :); scanf(%s,return_reader_num); 数据结构课程设计报告21while(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; printf(n此读者编号不存在 ! 按任意键返回 .n); goto end; printf(n请输入读者还书的编号 :); scanf(%s,return_book_num); while
27、(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)
28、; strcpy(q-borrowj.limit_date,q-borrowj+1.limit_date); strcpy(q-borrowmax-1.borrow_book_num,0); strcpy(q-borrowmax-1.limit_date,0); 数据结构课程设计报告22 p-book_xy+; p-book_kc+; q-right-; printf(n编号%s 的读者还书完毕 ! 按任意键继续下步操作.,return_reader_num); if(find=0) printf(n错误! 此读者未借此书 ! 按任意键返回 .n); end:; void print_book
29、() /*查询图书信息 */ 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图书信息打印完毕 ! 按任意键继续下一步操作 .); void print_reader() /*查询读者信息 */ rd *p; int i; p=h_reader; print
30、f(n读者信息如下 :nn); 数据结构课程设计报告23printf(读者书证号 tt读者姓名 n); 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.limit_date); printf(n); p=p-next; printf(n读者信息打印完毕 ! 按任意键继续下一步操作 .); void save() /*保存信息 */ save_reader(); save_book(); vo
31、id save_reader() /*保存读者信息 */ file *fp_reader; rd *p,*p0; p=h_reader; 数据结构课程设计报告24if(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; fre
32、e(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 请重新启动本系统 .n); exit(0); while(p!=null) if(fwrite(p,sizeof(bk),1,fp_book)!=1) /*将链表中的信息写入文
33、件中 */ 数据结构课程设计报告25 printf(n写入文件失败 !n 请重新启动本系统 !n); p0=p; p=p-next; free(p0); h_book=null; fclose(fp_book); /*关闭文件 */ void load() /*加载信息 */ load_reader(); load_book(); void load_reader() /*加载读者信息 */ rd *p1,*p2,*p3; file *fp; /*创建文件型指针 */ fp=fopen(book.txt,rb); /*打开文件 */ p1=(rd *)malloc(sizeof(rd); fread(p1,sizeof(rd),1,fp); h_reader=p3=p2=p1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学26年:胃镜操作规范解读 查房课件
- 高血压药学课件
- 诚信安全教育体系建设纲要
- 劳动思想知识技能教育教案
- 面试组织活动流程管理
- 2026妊娠合并糖尿病护理解读
- 奶牛的舒适度评估
- 苗族工艺设计素描总结
- 出行安全教育
- 本科生毕业设计答辩汇报提纲
- 衡水志臻5升6数学试卷
- 独舞大赛活动方案
- 电力拖动自动控制系统-运动控制系统(第5版)习题答案
- DBJ51T214-2022四川省蒸压加气混凝土隔墙板应用技术标准
- 居间合同协议书范本下载
- 码头防汛培训
- 儿科无创呼吸机的护理
- 2025陕西交通职业技术学院辅导员考试题库
- 2025人教版(2024)小学美术一年级下册教学计划、教学设计及教学反思(附目录)
- 2025年10月自考自考14056培训与人力资源开发押题及答案
- 路基施工技术培训课件
评论
0/150
提交评论