数据结构课程设计图书管理系统实验报告

上传人:无*** 文档编号:145202132 上传时间:2022-08-29 格式:DOC 页数:43 大小:185KB
收藏 版权申诉 举报 下载
数据结构课程设计图书管理系统实验报告_第1页
第1页 / 共43页
数据结构课程设计图书管理系统实验报告_第2页
第2页 / 共43页
数据结构课程设计图书管理系统实验报告_第3页
第3页 / 共43页
资源描述:

《数据结构课程设计图书管理系统实验报告》由会员分享,可在线阅读,更多相关《数据结构课程设计图书管理系统实验报告(43页珍藏版)》请在装配图网上搜索。

1、Beijing Institute of Petrochemical Technology数据结构课程设计课程设计实验报告 院(系、部):信息工程学院 姓 名:计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;typedefstruct char num5; /读者编号记录data bro; data back; ReaderNode;typedefstructchar title15; char writer15; int current; int

5、 total; int key; /书的编号ReaderNode reader10; /记录借读该书的读者记录BookNode;typedefstructBookNode *elem; int count; /记录节点中的总数HashTable;2. 算法流程图建立哈希表删除函数添加函数查找函数添加图书增量子函数借阅书子函数添加书子函数查看已添加书子函数归还书子函数查看已借阅书子函数查找书子函数主函数完成3. 程序代码#includestdafx.h#include#include#include#include#include#define SUCCESS 1#define UNSUCCES

6、S 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 struct char num5; /读者编号记录 data bro; data back; ReaderNode;typedef struct char title15; char writer15; int current; int total; int key; int more;/书的编号 R

7、eaderNode reader10; /记录借读该书的读者记录 BookNode;typedef struct BookNode *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%

8、m; void collision(int *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); /下一地址 else break; if (K = H.elem*p.key) return SUCCESS; else return UNSUCCESS; int In

9、sertHash(HashTable *H,BookNode e) int 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; else

10、 printf(不好意思,不存在n); return 0;void AddBook(HashTable *H) 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

11、(%d,&e.current); printf(nt 请输入该书总库存量: ); scanf(%d%*c,&e.total); for(i=0;i10;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.el

12、emi.key != NULL_KEY) /* 有数据 */ printf(图书编号:%dn,H.elemi.key); printf(书名: %sn,H.elemi.title); 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你能在此目录下按借书证号查找图

13、书信息); printf(n*n); printf(nt 请输入你的借书证号: ); scanf(%d%*c,&e); if(SearchHash(*H,e,&r,&t) printf(借书证编号: %dn,(*H).eleme.key); printf(书名: %sn,(*H).eleme.title); printf(作者: %sn,(*H).eleme.writer); printf(图书现存量:%dn,(*H).eleme.current); printf(图书总量 :%dn,(*H).eleme.total); else printf(您没有借过书!);void Find(HashT

14、able *H) int x,p,c; system(CLS); printf(nn*n); printf(t你能在此目录下按编号查找图书信息); printf(n*n); printf(nt 请输入你想查找的书的编号: ); scanf(%d%*c,&x); if(SearchHash(*H,x,&p,&c) printf(图书编号:%dn,(*H).elemp.key); printf(书名: %sn,(*H).elemp.title); printf(作者: %sn,(*H).elemp.writer); printf(图书现存量: %dn,(*H).elemp.current); pr

15、intf(图书总量 : %dn,(*H).elemp.total); else printf(对不起,不存在该书!n); void BorrowBook(HashTable *H) int i,k, x, f,t; 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

16、); printf(nt 作者: %s,(*H).elemk.writer); printf(nt 现库存量: %d,(*H).elemk.current); printf(nt 总库存量: %d,(*H).elemk.total); t=getch(); if(t=y|t=Y) if( (*H).elemk.current)=0) printf(nt对不起,这本书已经被借光了.); else for(i=0;i10;i+) if( (*H).elemk.readeri).num0=0) break; printf(nt 请输入你的借书证号: ); scanf(%s,(*H).elemk.re

17、aderi).num); printf(nt 请输入借书日期: ); /输入借书日期 printf(nt 年: ); scanf(%d,&(*H).elemk.readeri).bro.year); printf(t 月: ); scanf(%d,&(*H).elemk.readeri).bro.month); printf(t 日: ); scanf(%d,&(*H).elemk.readeri).bro.day); printf(nt 输入应还书日期: ); /输入应还书日期 printf(nt 年: ); scanf(%d,&(*H).elemk.readeri).back.year);

18、 printf(t 月: ); scanf(%d,&(*H).elemk.readeri).back.month); printf(t 日: ); scanf(%d%*c,&(*H).elemk.readeri).back.day); (*H).elemk.current-; /现存书量减1 printf(nt 你已借了该书.); else 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);

19、 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=get

20、ch(); 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 今天是:); printf(nt 年: ); scanf(%d,&year); printf(t 月: ); scanf(%d,&month); printf(t 日: ); scanf(%d%*c,&day

21、); 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.readeri).back.month & day(*H).elemk.readeri).back.day) d=1; if(d=0) pay=(year-(*H).

22、elemk.readeri).back.year)*365+(month-(*H).elemk.readeri).back.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); printf(nt 你应该在 %d-%d-%d 还这本书,(*H).elemk.readeri).back.year,(*H).elemk.reade

23、ri).back.month,(*H).elemk.readeri).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+; /现存书量加1 printf(nt 你已经还了这本书.n); else printf(nt 你要还一本没库存的书 ?n); void SaveBook(HashT

24、able 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); fprintf(fp1,现库存量:%dn,H.elemi.current); fprintf(fp1,总库

25、存量:%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 输入你想增加的图书量:); scanf(%d,&e.more);printf(nt 请输入你要修改

26、的书的编号: ); 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+; /(*H).elemk.total=r; else printf(

27、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.title); printf(作者: %sn

28、,(H).elemp.writer); printf(图书现存量: %dn,(H).elemp.current); printf(图书总量 : %dn,(H).elemp.total); else printf(对不起,不存在该书!n); t=getch(); if(t=y|t=Y) (H).elemp.key=NULL_KEY; printf(删除成功!n); void menu(void) system(cls); system(color 3f);/改变颜色 system(cls); printf(*n); printf(*n); printf(* 图书管理系统 *n); printf(

29、*n); printf(*n); printf(nnt选择你需要操作的功能:(现无记录,请先添加信息)n); printf(n); printf(tt1.添加图书信息n); printf(tt2.显示图书信息n); printf(tt3.查找图书信息n); printf(tt4.删除图书n); printf(tt5.借阅图书n); printf(tt6.借阅信息并归还图书n); printf(tt7.保存图书信息到指定文件中n);printf(tt8.借阅查询n); printf(tt9.添加图书增量n); printf(n*n); int main() int n,i,c; int year

30、,month,day; BookNode book; HashTable H; system(cls); system(color 1c);/改变颜色 system(cls); printf(* 图书管理系统 *n); printf(* 数据结构 *n); printf(* 范文虎小组 *n); printf(* 计算机科学与技术1班*n); printf(nntttt欢迎您!n); printf(请按ENTER进入主菜单n); getchar(); InitHashTable(&H); while(1) menu(); printf(选择你需要操作的功能号码:); scanf(%d,&c);

31、 getchar(); switch(c) case 1: AddBook(&(H);break; case 2: ShowBook(H);break; case 3: Find(&(H);break; case 4: DeleteBook(H);break; case 5: BorrowBook(&(H);break; case 6: ReturnBook(&(H);break; case 7: SaveBook(H);break; case 8: BoSearch(&H);break; case 9: AddTatol(&(H);break; default : printf(Enter error!n); printf(请按ENTER返回主菜单n); getchar(); system(CLS); 六. 运行结果七. 结论通过此次课设小组的密切配合,小组成员每个人在编程上都有了长足的进步。【此课件下载可自行编辑修改,供参考,感谢你的支持!】43 / 43实用精品文档

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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