




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计报告 题目:图书管理 学 院 计算机学院 专 业 软件工程 年级班别 2010级 4 班 学 号 学生姓名 指导教师 成 绩 _2012年6月一、 设计任务【design tasks】1.1、图书管理系统中图书管理模块包括图书类型定义:书号、现存量、总存量,出版时间为整型,定价为浮点型,书名、著者名为字符型,借阅指针、预约指针为读者类型;读者类型定义:证号为整型、姓名为字符型,另外借阅类型和预约类型组合成其中的共用体类型。b树(2-3树)类型定义:关键字个数和关键字数组为整型、另外还有指向双亲的指针、指向子树的指针、记录单元指针;b树查找结果类型定义: 节点指针、关键字序号和查
2、找标志变量为整型。1.2、演示程序以用户和计算机的对话方式进行,在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在后面。该演示系统,没有使用文件,全部数据放在内存存放。四项基本业务都以书号为关键字进行的,采用了b树(2-3树)对书号建立索引,以提高效率。2、设计思路【design ideas】2.1、设计框图系统管理界面个人信息借阅信息借书查找修改密码催还信息还书还回首页1、按作者查找2、按书名查找3、按编号查找4、按作者和书名查找新书入库查找图书删除图书查看图书我的图书馆退出系统2-3树凹进输出所有图书编号信息显示所有图书的所有信息
3、2.2、结构体设计/*- 四、所需结构体和类-*/登陆类class loginpublic:login();void amend( const string st1,const string st2);bool islogin(string &str1, string &str2);string username;string userid;string password;int errornum;/个人信息结构体typedef struct informationstring id;string name;string academy;string major;string educatio
4、n;string state;int number;/超期数目inttotal;/已借数目inof;/借阅信息结构体typedef struct inofbook/string check_data;/string return_data;int c_year;int c_month;int c_day;int r_year;int r_month;int r_day;int book_number;string book_name;string book_writer;struct inofbook *next;inofbook;/图书信息类typedef structkeytype ind
5、ex; /书号char b_name120;/书名,可以为中文char b_writer120;/著者,可以中文int stack;/现存量int total;/总库存量int tag;/标志是否被预约 1 是 0 否b_record,*b_record; /书目记录类型/图书类struct bookpublic:book();elemtype book_name;elemtype book_writer;int book_number;int extant_num ;/该书现存量int gross_num ;/该书总量struct book *next;typedef struct book
6、 *book_record;typedef struct book book_record;typedef struct r_recordkeytype card; /卡号char r_name120;/姓名char tel11;/手机号码char* password;struct borrowint yuyue;/存放预约的书号,最多一本struct bnode *r_bookn/4;/借阅书指针char* termn/4;/归还期限int b_num;/已经借阅书的数量bor;/借阅记录类型r_record,*r_record; /读者记录类型typedef struct bnode ke
7、ytype index; /关键字向量struct b_node *child; /子树指针向量b_record rec; /记录指针向量bnode,*bode;/书目结点向量类型typedef struct rnode keytype card; /卡号向量 struct r_node *child; /子树指针向量 r_record rec; /记录指针向量 rnode,*rode; /读者结点向量类型typedef struct b_nodeint booknum; /结点中书目个数,即结点的大小int level;struct b_node *pa; /指向双亲结点struct b_n
8、ode *lbro, *rbro;struct bnode nodem+1;/除child外,其它0号单元未用b_node,*book; /书树结点和书树的类型typedef struct r_nodeint readernum; /结点中读者个数,即结点的大小int level;struct r_node *pa; /指向双亲结点struct r_node *lbro, *rbro;struct rnode nodem+1; /除child外,0号单元未用r_node,*reader; /读者树结点和读者树的类型typedef structb_node *pb; /指向找到的结点int i;
9、 /1.m,在结点中的关键字序号int tag; / 1:查找成功,o:查找失败b_result; /书树的查找结果类型typedef structr_node *pr; /指向找到的结点int i; /1.m,在结点中的关键字序号int tag; / 1:查找成功,o:查找失败r_result; /读者树的查找结果类型2.3、宏定义和常量#define true 1#define false 0#define ok 1#define error 0#define eq(a,b) (a)=(b)#define lt(a,b) (a)(b)#define m 3 /2-3树的阶#define n
10、 20 / 每种书最大库存20本、读者最多每人借 20/4 = 5 本typedef int status; /函数的类型,其值是函数结果状态代码typedef int keytype; /设关键字域为整型typedef string elemtype;2.4、设计模块 主程序模块 图 书 管 理 模 块 图书管理模块 我的图书馆管理模块三、部分代码分析【code analysis】3.1、图书管理模块选择switch(i)case 1: /添加图书a_add_book( head );save_printf(1,ntt书库现状态如下: n);if(bk-booknum != null)tra
11、verse_bk(bk,bk-level);elsesave_printf(1,n书库为空);fprintf(fp,nn);printf(nn);break;case 2: /查找图书a_search_book();break;case 3: /删除图书a_delete_book( head );save_printf(1,ntt书库现状态如下: n);if(bk-booknum != null)traverse_bk(bk,bk-level);elsesave_printf(1,n书库为空);fprintf(fp,nn);printf(nn);break;case 4: /查看全部图书sea
12、rch_all_book();break;case 5:/我的图书馆mylibrary( head );break;case 0: /返回系统登录界面fprintf(fp,nttttadmin_menu-menu tnn);exit(1);break;default:save_printf(1,nt您的操作有误,请重新选择(07): );break;3.2.1、添加图书/*- a_add_book -*/yn是否存在该编号或输入错误?输入编号a_add_book入口重新输入读取改编号图书的其他信息插入2-3树,插入单链表将该书添加到图书库中结束void load( book_record q
13、);void a_add_book( book_record head )/添加图书char s2;int i;int j;book_recordq;q = new book_record;b_record r;init_brec(r);dobook_record p=head;save_printf(1,nt书号: );save_gets(s);r.index = atoi(s);if(r.index 9999999) save_printf(1,nt输入有误,请重新输入(19999999)!n);/*主关键字是图书编号,是唯一的*输入相同编号,重新输入*/while( p != null
14、)if( p-book_number = r.index )r.index = null;coutt该编号已存在!next;while(r.index 9999999);save_printf(1,nt书名: );dosave_gets(r.b_name0);j = strlen(r.b_name0);if(j 20)save_printf(1,nt您输入的书名有误,请重新输入(120字符): );while(j 20);save_printf(1,nt著者: );dosave_gets(r.b_writer0);j = strlen(r.b_writer0);if(j 20)save_pri
15、ntf(1,nt您输入的著者有误,请重新输入(120字符): );while(j 20);save_printf(1,nt存入数量: );dosave_gets(s);r.stack = r.total = atoi(s);if(r.total n ) save_printf(1,nt输入有误,请重新输入(120)!: );while(r.total n);i = add_book(bk,r);if(i)/*读取信息*/q-book_number = r.index;q-book_name = r.b_name0;q-book_writer = r.b_writer0;q-extant_num
16、 = r.stack;q-gross_num = r.total;load(q);/将新书添加到图书库中q-next = head;head = q;load_book( head );/更新“librarydata.txt”图书信息save_printf(1,nt添加成功!n);else save_printf(1,nt添加失败!该书书库容量不足!n);3.2.2、删除图书/*- a_delete_book -*/a_delete_book入口输入编号重新输入是否存在该编号或输入错误?y从2-3树、单链表删除该本书将该书从图书库中删除,更新nbook_record dell( int ind
17、ex );void load_book( book_record h);void a_delete_book( book_record head )/删除图书char s2;int i;int index;/book_record x;/x = new book_record;dosave_printf(1,nt请输入您要删除的书的书号: );book_record p= head;save_gets(s);index = atoi(s);if(index 9999999) save_printf(1,nt输入有误,请重新输入(19999999)!n书号: );/*处理图书不出在的情况*/wh
18、ile( p != null )if( p-book_number = index )break;p = p-next;if(p=null)index=0;cout无此书!endl;while(index 9999999);i = delete_book(bk,index);if(i)/x-book_number = index;head = dell(index);/删除图书load_book( head );/更新图书库图书信息load_book( head );/更新图书库图书信息save_printf(1,nt删除成功!n);else save_printf(1,nt删除失败,馆内不存
19、在该书!n);3.2、我的图书馆管理模块选择switch(n) case 1: information();break;/输出个人信息、状态 case 2: amend( login );break;/修改密码 case 3: checkdata();break;/当前借阅信息case 4: recall();break;/催还信息case 5:check_out(head);break;/借书case 6: return_book( head );break;/还书case 7: find_book(head);break;/查找case 0: admin_menu();break;/还回首
20、页/default: printf(tttt输入信息错误,请重新输入!n); break; 3.2.1、修改密码输入新密码从密码文件中读取原密码修改密码写会密码文件修改完成/*采用 * 字符输入密码*/while ( (c=getch() != 13 )if (c!=b & c!=t & count0)printf(b b); count-; passcount = 0;password = pass;coutendl;/*导入密码文件,读取密码和账号*/char *file= password;ofstream fout;fout.open( file, ios:out );if( !fou
21、t.is_open() )cerrfile 修改失败!endl;exit(1);foutusernamesetw(20)passwordsetw(20)login.username;/修改后,重新写会密码文件fout.close();login.amend( username, password);3.2.2、借书输入借书数目i sum输入借书编号是否找到?添加该书到个人图书库中 i = i + 1ynny从个人图书库中查找该书/*借书*/void library_card( book_record p );void load_book( book_record head );void che
22、ck_out( book_record head )system(cls);system(color f9);save_printf(nt n);save_printf( t n);save_printf( t *借*书*界*面* n);save_printf( t n);save_printf( t n);save_printf( t n);traverse_book(bk);int st;int sum,i=0;book_record p;int st13,st23;int st3;elemtype st4,st5;ifstream fin;coutsum;while( ist;coutb
23、ook_number = st )if( p-extant_num != 0 )fin.open( librarydata.txt, ios:in );if( fin.is_open() )while( finst10 & finst11 & finst12 & finst20 & finst21 & finst22 & finst3 & finst4 & finst5 )if( st3 = st )f = 1;flag = 1;cout你已经借了这本书了!endl;break;elsecout打开文件失败!extant_num-;flag = 1;/添加到个人图书库中library_card
24、( p );fin.close();break;p = p-next ;if( flag = 0 )if( p != null )cout该书已被借完!endl;elsecout 图书馆无此书!endl;i+;/更新图书库信息load_book( head );system(pause);3.2.2、还书/*还书*/输入还书数目i sum输入还书编号是否找到?从个人图书库中删除该书 i = i + 1ynyn从个人图书库中查找该书void return_book( book_record p );void return_book( book_record head )system(cls);s
25、ystem(color f9);save_printf(nt n);save_printf( t n);save_printf( t *还*书*界*面* n);save_printf( t n);save_printf( t n);save_printf( t n);int st;int sum,i=0;book_record p;coutsum;while( ist;coutbook_number = st )if( p-extant_num gross_num )p-extant_num+;return_book( p );/删除该书,更新个人图书库flag = 1;/coutn编号set
26、w(20)书名setw(20)作者endl;/coutbook_numbersetw(20)book_namesetw(15)book_writerendl;coutn编号: book_numberendl;coutn书名: book_nameendl;coutn作者: book_writerendl;break;elsecout您没有借这本书!next ;if( flag = 0 )cout 图书馆无此书!输入编号错误!menu tnn);init_book(bk);init_reader(rr);admin_menu();return 0;/head.h/*- 一、包含的头文件-*/#in
27、clude#include#include #include#include#include#include #include /包含内存分配函数的函数声明;还定义常量和表现由堆例程使用的类型#include /标准输入输出头文件#include /定义了通过控制台进行数据输入和数据输出的函数#include /定义了五种类型、一些宏和通用工具函数.包含了c、c+语言的最常用的系统函数#include #include /时间和日期处理函数#include #include using namespace std; /使用命名空间std/*- 二、所需函数-*/void admin_menu(
28、);/*- 三、宏定义和常量-*/#define true 1#define false 0#define ok 1#define error 0#define eq(a,b) (a)=(b)#define lt(a,b) (a)(b)#define m 3 /2-3树的阶#define n 20 / 每种书最大库存20本、读者最多每人借 20/4 = 5 本typedef int status; /函数的类型,其值是函数结果状态代码typedef int keytype; /设关键字域为整型typedef string elemtype;/*- 四、所需结构体和类-*/登陆类class lo
29、ginpublic:login();void amend( const string st1,const string st2);bool islogin(string &str1, string &str2);string username;string userid;string password;int errornum;/个人信息结构体typedef struct informationstring id;string name;string academy;string major;string education;string state;int number;/超期数目intto
30、tal;/已借数目inof;/借阅信息结构体typedef struct inofbook/string check_data;/string return_data;int c_year;int c_month;int c_day;int r_year;int r_month;int r_day;int book_number;string book_name;string book_writer;struct inofbook *next;inofbook;/图书信息类typedef structkeytype index; /书号char b_name120;/书名,可以为中文char
31、b_writer120;/著者,可以中文int stack;/现存量int total;/总库存量int tag;/标志是否被预约 1 是 0 否b_record,*b_record; /书目记录类型/图书类struct bookpublic:book();elemtype book_name;elemtype book_writer;int book_number;int extant_num ;/该书现存量int gross_num ;/该书总量struct book *next;typedef struct book *book_record;typedef struct book bo
32、ok_record;typedef struct r_recordkeytype card; /卡号char r_name120;/姓名char tel11;/手机号码char* password;struct borrowint yuyue;/存放预约的书号,最多一本struct bnode *r_bookn/4;/借阅书指针char* termn/4;/归还期限int b_num;/已经借阅书的数量bor;/借阅记录类型r_record,*r_record; /读者记录类型typedef struct bnode keytype index; /关键字向量struct b_node *ch
33、ild; /子树指针向量b_record rec; /记录指针向量bnode,*bode;/书目结点向量类型typedef struct rnode keytype card; /卡号向量 struct r_node *child; /子树指针向量 r_record rec; /记录指针向量 rnode,*rode; /读者结点向量类型typedef struct b_nodeint booknum; /结点中书目个数,即结点的大小int level;struct b_node *pa; /指向双亲结点struct b_node *lbro, *rbro;struct bnode nodem+
34、1;/除child外,其它0号单元未用b_node,*book; /书树结点和书树的类型typedef struct r_nodeint readernum; /结点中读者个数,即结点的大小int level;struct r_node *pa; /指向双亲结点struct r_node *lbro, *rbro;struct rnode nodem+1; /除child外,0号单元未用r_node,*reader; /读者树结点和读者树的类型typedef structb_node *pb; /指向找到的结点int i; /1.m,在结点中的关键字序号int tag; / 1:查找成功,o:
35、查找失败b_result; /书树的查找结果类型typedef structr_node *pr; /指向找到的结点int i; /1.m,在结点中的关键字序号int tag; / 1:查找成功,o:查找失败r_result; /读者树的查找结果类型static int flag = 0; static login login;static book bk;static book broot;/用于记录图书树根static reader rr;static reader rroot;/用于记录读者树根file *fp;/打开的记录文件log.txt/*- get_time -*/char* g
36、et_time(int i)/获得本地时间char* date = (char*)malloc(sizeof(char)*20);time_t nowtime;struct tm *timeinfo;time(&nowtime);/ 获取当前的系统时间timeinfo = localtime(&nowtime);/把所偏移的秒数时间转换为日历时间int year = timeinfo-tm_year + 1900; /年份从1900年开始int mon = timeinfo-tm_mon + 3; / 月份从0开始算起,借书时间为2个月int day = timeinfo-tm_mday; / 月份的天数,从1开始int hour = timeinfo-tm_hour;int min = timeinfo-tm_min;int sec = timeinfo-tm_sec;if(i)sprintf(date, %s%d%s%d%s%d%s, , hour, :, min, :, se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- VTE防治护理管理制度及相关知识考核试题及答案
- 《中学生日常行为规范》知识竞赛试题及答案
- 农村民兵工作会议记录范文
- 2025新安全生产法考试试卷及答案
- 2025年供水管网改造工程可行性研究报告
- 钢结构防火安全防护措施
- 学校建设质量检测计划
- 商业综合体文明施工技术组织措施
- 农产品跨境冷链物流方案创新创业项目商业计划书
- 水利设备投标供货与售后措施
- 加油、加气、充电综合站项目可行性研究报告
- 塔机拆卸合同范本
- 2024-2025学年广东省深圳市南山区四年级(下)期末数学试卷
- 《煤矿安全规程(2025版)》知识培训
- 2025秋数学(新)人教五年级(上)第1课时 小数乘整数
- 半导体行业面试问题及答案解析
- 《数字技术应用基础模块》技工中职全套教学课件
- 房屋拆除专项施工方案(3篇)
- AutoCAD电气工程制图 课件 项目1 低压配电柜的绘制与识图
- 2025年小学生“学宪法、讲宪法”网络知识竞赛题库及答案
- 2025年银行考试-银行间本币市场交易员资格考试历年参考题库含答案解析(5套典型考题)
评论
0/150
提交评论