




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Beijing Institute of PetrochemicalTechnology数据结构课程设计课程设计实验报告院(系、部):信息工程学院姓名:计141范文虎指导教师签名:2016 年6 月 29 日北京目录一 .设计题目二 .设计目的三 .实验分工四 .算法思想分析 五 .算法描述实现 1.数据结构类型定义2.算法流程图3.程序代码六 .运行结果七 .结论一 .设计题目图书管理基本业务模拟图书管理一般包括图书采编、图书编目、图书查询及图书流通(借、还书)等基本业务。要求设计一个图书管理信息系统,用计算机模拟实现上述系统功能。( 1) 书的登记内容包括书号、书名、 著作者、现存量和库存
2、量等;学生信息包括借书证号、借阅信息等;( 2) 以书号建立索引表(线性表)以提高查找效率;( 3)主要功能如下:a) 采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;b) 借阅:如果一种书的现存量大于 0,则借出一本,登记借阅者的书号和归还期限,改变现存量;c) 归还:注销对借阅者的登记,改变该书的现存量。( 4)输出形式:能按书号、书名、著作者查找库存的书籍信息能按学生的借书证号显示学生信息和借阅信息书籍入库借书功能实现还书功能实现二 .设计目的1 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2初步掌握软件开发过程的问题分析、系统
3、设计、程序编码、测试等基本方法和技能;3提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2 开发环境: VC6.0 或者 DEV C+.三 .实验分工范文虎:总体程序框架构思,算法分析,主程序编写,子函数调用,图书信息记录存储子函数编写,结合,主控制面板编写,哈希函数,结构体定义。算法实现, 添加图书信息子函数编写,借阅图书字函数编写,查询子函数设计编写,还书子函数设计编写,最终程序调试,写报告。算法实现, 删除图书子函数设计编写,查找图书信息子函数编写,测试整体程序, 程序缺陷纠正,最终
4、修改后程序综合。算法实现,查询图书信息子函数设计编写,程序缺陷修改和测试。四 .算法思想分析用线性表进行存储,充分利用它易添加、易删除、查找方便的特点,进行程序的编写,符合题目的需求。而线性表是最基本、最简单、也是最常用的一种数据结构。五 .算法描述实现1. 数据结构类型定义typedefstruct int year; int month; int day; data; typedefstructchar num5; / 读者编号记录databro;databack;ReaderNode;typedefstructchar title15;char writer15;int current;
5、int total;int key;/ 书的编号ReaderNode reader10;/记录借读该书的读者记录BookNode;typedefstructBookNode *elem;int count;/ 记录节点中的总数HashTable;2. 算法流程图建立哈希表查找函数添加函数添加图添加书子查看已添借阅书子书增量函数加书子函函数子函数数查找书子查看已借函数阅书子函数删除函数归还书子函数主函数完成3. 程序代码#includestdafx.h#include#include#include#include#include #define SUCCESS 1 #define UNSUCC
6、ESS 0 #define DUPLICATE -1#define NULL_KEY 0/ 无记录元素int hashsize=17,19,23,29;/ 存储容量int m=0;/ 表长typedef struct int year; int month; int day;data;typedef structchar num5;databro;databack;/ 读者编号记录ReaderNode;typedef structchar title15;char writer15;int current;int total;int key;int more;/ 书的编号ReaderNode
7、reader10;/记录借读该书的读者记录BookNode;typedef structBookNode *elem;int count; / 记录节点中的总数HashTable;void InitHashTable(HashTable *H)int i;(*H).count=0;m=hashsize0;(*H).elem=(BookNode *)malloc(m*sizeof(BookNode);for(i=0;im;i+)(*H).elemi.key=NULL_KEY;unsigned Hash(int K)/ 哈希函数 ,自己设定return K%m;void collision(int
8、 *p,int d) /开放定址法处理冲突*p=(*p+d)%m;int SearchHash(HashTable H,int K,int *p,int *c)/p为数据的地址位置,返回*p=Hash(K);while(H.elem*p.key != NULL_KEY & (K != H.elem*p.key)(*c)+;if(*cm)collision(p,*c); / 下一地址elsebreak;if (K=H.elem*p.key)return SUCCESS;elsereturn UNSUCCESS;int InsertHash(HashTable *H,BookNode e)int
9、c,p;c=0;if(SearchHash(*H,e.key,&p,&c)return DUPLICATE;else if(chashsize0/2)(*H).elemp=e;+(*H).count;return 1;return 0;int DeleteHash(HashTable *H,BookNode e)int c,p;c=0;if(SearchHash(*H,e.key,&p,&c)(*H).elemp.key=NULL_KEY;-(*H).count;return 1;elseprintf( 不好意思,不存在n);return 0;void AddBook(HashTable *H
10、)BookNode e;int i;system(CLS);printf(nn*n);printf(t你能在此目录下添加图书信息);printf(n*n);printf(nt请输入书的编号(形如 : 1*): );scanf(%d,&e.key);getchar();printf(nt请输入书名 : );gets(e.title);printf(nt请输入该书作者: );gets(e.writer);printf(nt请输入该书现库存量: );scanf(%d,&e.current);printf(nt请输入该书总库存量: );scanf(%d%*c,&e.total);for(i=0;i10
11、;i+)(e.readeri).num0=0;/ 用 0来初始化借该书的读者证号,表示一开始时没人借书if(InsertHash(&(*H),e)printf( 图书添加成功!n);(*H).count+;void ShowBook(HashTable H)int i;system(CLS);printf(nn*n);printf(t你能在此目录查看图书信息);printf(n*n);for(i=0;im;i+)if(H.elemi.key != NULL_KEY) /*有数据*/printf( 图书编号: %dn,H.elemi.key);printf( 书名: %s n,H.elemi.t
12、itle);printf( 作者:%sn,H.elemi.writer);printf( 图书现存量:%dn,H.elemi.current);printf( 图书总量: %dn,H.elemi.total);printf(*n);void BoSearch(HashTable *H)/ 借阅查询int e,r,t;system(CLS);printf(nn*n);printf(t 你能在此目录下按借书证号查找图书信息);printf(n*n);printf(nt请输入你的借书证号: );scanf(%d%*c,&e);if(SearchHash(*H,e,&r,&t)printf(借书证编号
13、:%dn,(*H).eleme.key);printf(书名:%s n,(*H).eleme.title);printf(作者:%sn,(*H).eleme.writer);printf( 图书现存量: %dn,(*H).eleme.current);printf( 图书总量:%dn,(*H).eleme.total);elseprintf( 您没有借过书! ! );void Find(HashTable *H)int x,p,c;system(CLS);printf(nn*n);printf(t 你能在此目录下按编号查找图书信息);printf(n*n);printf(nt请输入你想查找的书
14、的编号: );scanf(%d%*c,&x);if(SearchHash(*H,x,&p,&c)printf( 图书编号: %dn,(*H).elemp.key);printf( 书名: %s n,(*H).elemp.title);printf( 作者:%sn,(*H).elemp.writer);printf( 图书现存量:%dn,(*H).elemp.current);printf( 图书总量: %dn,(*H).elemp.total);elseprintf( 对不起,不存在该书!n);void BorrowBook(HashTable *H)int i,k, x, f,t;syste
15、m(CLS);printf(nn*n);printf(t 你能在此目录下按编号借阅图书);printf(n*n);printf(nt请输入你想借的书编号: );scanf(%d%*c,&x);if(SearchHash(*H,x,&k,&f)printf(nt你想借这本书吗?(y/n);printf(nt书名 :%s ,(*H).elemk.title);printf(nt作者 :%s,(*H).elemk.writer);printf(nt现库存量 :%d,(*H).elemk.current);printf(nt总库存量 :%d,(*H).elemk.total);t=getch();if
16、(t=y|t=Y)if(*H).elemk.current)=0)printf(nt对不起,这本书已经被借光了 .);elsefor(i=0;i10;i+)if( (*H).elemk.readeri).num0=0) break;printf(nt请输入你的借书证号: );scanf(%s,(*H).elemk.readeri).num);printf(nt请输入借书日期: ); /输入借书日期printf(nt年 :);scanf(%d,&(*H).elemk.readeri).bro.year);printf(t月: );scanf(%d,&(*H).elemk.readeri).bro
17、.month);printf(t日:);scanf(%d,&(*H).elemk.readeri).bro.day);printf(nt输入应还书日期: ); /输入应还书日期printf(nt年 :);scanf(%d,&(*H).elemk.readeri).back.year);printf(t月: );scanf(%d,&(*H).elemk.readeri).back.month);printf(t日:);scanf(%d%*c,&(*H).elemk.readeri).back.day);(*H).elemk.current-;/现存书量减1printf(nt你已借了该书.);el
18、se printf(nt这本书不存在!n);void ReturnBook(HashTable *H)int i,k, x, f,t,j;int year,month,day,d;float pay;char temp20;system(CLS);printf(nn*n);printf(t 你能在此目录下按编号归还图书);printf(n*n);printf(nt请输入你还的书: );scanf(%d%*c,&x);if(SearchHash(*H,x,&k,&f)printf(nt你想还这本书吗?(y/n);printf(nt书名 :%s ,(*H).elemk.title);printf(
19、nt作者 :%s,(*H).elemk.writer);printf(nt现库存量 :%d,(*H).elemk.current);printf(nt总库存量 :%d,(*H).elemk.total);t=getch();if(t=y|t=Y)printf(nt请输入你的借书证号: );scanf(%s,temp);j=0;for(i=0;i5;i+)if(!(strcmp(temp,(*H).elemk.readeri).num)j=1;break;/查看是否有借书if(j=0) printf(nt你没有借书 .);return;/该借书证号的人没借书printf(nt今天是 :);pri
20、ntf(nt年:);scanf(%d,&year);printf(t月: );scanf(%d,&month);printf(t日:);scanf(%d%*c,&day);d=0;if(year(*H).elemk.readeri).back.year)d=1; /判断是否已过了还书日期 ,d=1 还没过期, d=0 过期if(year=(*H).elemk.readeri).back.year&month(*H).elemk.readeri).back.month) d=1;if(year=(*H).elemk.readeri).back.year&month=(*H).elemk.read
21、eri).back.month & day(*H).elemk.readeri).back.day)d=1;if(d=0)pay=(year-(*H).elemk.readeri).back.year)*365+(month-(*H).elemk.readeri).bac k.month)*30+(day-(*H).elemk.readeri).back.day);printf(nt你在%d-%d-%d借了这本书,(*H).elemk.readeri).bro.year,(*H).elemk.readeri).bro.month,(*H).elemk.readeri).bro.day);pri
22、ntf(nt你 应 该 在%d-%d-%d还 这 本 书,(*H).elemk.readeri).back.year,(*H).elemk.readeri).back.month,(*H).elemk.r eaderi).back.day);printf(nt今天是%d-%d-%d,year,month,day);printf(nnt所以你超出了还书日期);printf(nt你应该被罚款%2.1f元 .,0.1*pay); / 过期一天还 1角钱(*H).elemk.readeri).num0=0; /已还,清除该读者借书记录(*H).elemk.current+;/现存书量加1printf(
23、nt你已经还了这本书.n);else printf(nt你要还一本没库存的书?n);void SaveBook(HashTable H)FILE *fp1;int i;fp1=fopen(C:/record.txt,w);fprintf(fp1,=图书信息记录表=n);for(i=0;im;i+)if(H.elemi.key != NULL_KEY)fprintf(fp1,=n);fprintf(fp1, 图书编号 :%dn,H.elemi.key);fprintf(fp1, 书名 :%sn,H.elemi.title);fprintf(fp1, 作者 :%sn,H.elemi.writer)
24、;fprintf(fp1,现库存量 :%dn,H.elemi.current);fprintf(fp1, 总库存量 :%dn,H.elemi.total);fprintf(fp1,*n);fclose(fp1);printf(nn成功储存 ! 你能在 C:/record.txt 找到相应纪录n);printf(*n);void AddTatol(HashTable *H)BookNode e;int k, x, f,t;int m;int r,i;system(CLS);printf(nn*n);printf(t 你能在此目录下按编号修改图书信息);printf(n*n);printf(nt输
25、入你想增加的图书量:);scanf(%d,&e.more);printf(nt请输入你要修改的书的编号: );scanf(%d%*c,&x);if(SearchHash(*H,x,&k,&f)printf(nt书名 :%s ,(*H).elemk.title);printf(nt作者 :%s,(*H).elemk.writer);printf(nt现库存量 :%d,(*H).elemk.current);printf(nt总库存量 :%d,(*H).elemk.total);printf(nt增加图书量成功! ! );for(i=0;i=(e.more);i+)(*H).elemk.total
26、+;/(*H).elemk.total=r;else printf(nt这本书不存在! ! n);void DeleteBook(HashTable H)int x,p,c,t;system(CLS);printf(nn*n);printf(t 你能在此目录下按编号删除图书信息);printf(n*n);printf(nt请输入你想删除的书的编号: );scanf(%d%*c,&x);if(SearchHash(H,x,&p,&c)printf(nt你想删除这本书吗?(y/n)n);printf(图书编号:%dn,(H).elemp.key);printf(书名: %sn,(H).elemp.
27、title);printf(作者:%sn,(H).elemp.writer);printf(图书现存量:%dn,(H).elemp.current);printf( 图书总量: %dn,(H).elemp.total);elseprintf( 对不起,不存在该书!n);t=getch();if(t=y|t=Y)(H).elemp.key=NULL_KEY;printf( 删除成功! n);void menu(void)system(cls);system(color3f);/ 改变颜色system(cls);printf(*n);printf(* *n);printf(*n);图书管理系统printf(*n);printf(*n);printf(nnt选择你需要操作的功能:( 现无记录,请先添加信息)n);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年PM10自动采样器及测定仪合作协议书
- 2025年综合零售服务合作协议书
- 2025年SUR二次纤维障碍控制剂合作协议书
- 2025年上海2024道路运输危险品从业资格证考试
- 2025年口腔化学品:牙膏项目发展计划
- 农村合作社农户种植合作协议
- 金融科技行业大数据风控模型设计与实现方案
- 2025年休闲健身服务项目合作计划书
- 社区工作会议总结
- 在线平台合作协议及业务整合策略探讨
- 八省联考陕西试题及答案
- 烧烫伤健康宣教
- 医院门诊院感制度
- 腔隙性脑梗塞护理常规
- 《国务院安委会关于加强人员密集场所动火作业安全管理措施》知识培训
- 人工智能在价格预测中的应用-深度研究
- 与高校科研合作合同范本
- 统编历史七年级下册(2024版) 第一单元第4课-安史之乱与唐朝衰亡【课件】d
- 2025年诗词大赛考试指导题库300题(含答案)
- 《新闻传播学》课件
- Unit 3 The world of Science 大单元教学设计-2023-2024学年高中英语外研版(2019)必修第三册
评论
0/150
提交评论