图书馆课程设计程序报告.docx
- 文档编号:5163366
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:27
- 大小:231.31KB
图书馆课程设计程序报告.docx
《图书馆课程设计程序报告.docx》由会员分享,可在线阅读,更多相关《图书馆课程设计程序报告.docx(27页珍藏版)》请在冰豆网上搜索。
图书馆课程设计程序报告
辽宁科技大学
课程设计报告
课程名称:
数据结构
设计题目:
图书馆管理系统
学院:
电信工程与技术
专业:
计算机科学与技术
起止日期:
二零一零年十二月十九日
二零一零年十二月三十日
指导教师:
龙艳彬
计算机科学与技术系二○一○年制
课程设计题目
图书管理系统
组长
学号
班级
系别
计算机科学与技术系
专业
计算机科学与技术
组员
指导教师
课程设计目的
课程设计所需环境
软件环境:
MicrosoftVisualC++6.0以及Windows95以上操作系统的机器上可以正常运行
硬件环境:
CPU:
至少Pentium100以上,建议使用P42.0,内存:
至少16M以上,建议使用256,硬盘:
至20M硬盘空间,显示器:
17寸显示器
课程设计任务要求
设计成绩
一*对图书馆的需求分析
1引言
1.1系统的意义
随着人们知识能力的提高,图书馆成了人们生活中不可或缺的一部分,而图书馆的存书量和业务量庞大,仅仅靠传统的记账式管理是不够的,图书管理系统应运而生,逐渐成为信息化建设的一部分。
图书管理系统能够完成图书管理基本业务。
目的为了提高图书馆的工作效率,实现图书馆、读者图书借阅、返还、读者信息的管理,并且实现图书管理的核心功能,即图书的信息检索,增加、删除、查询、更改等管理。
1.2系统的特点
系统界面简易,功能操作方便合理的图书管理系统
1.3系统设计环境
MicrosoftVisualC++6.0
2系统需求分析
2.1系统的设计目标
图书管理系统在读者结束和还书时简介明了地实现其功能,并达到不产生错误、方便简单的功能
2.2功能需求
运行程序后,首先进入主菜单界面,读者可根据需求,进行借阅图书、归还图书、注册新书、注销旧书、和查询图书信息的操作。
进入相应界面,可实现相应功能,并实现对数据的修改
*对电话本的系统需求分析:
我们要用散列表实现电话号码查找系统。
设计出的程序要包含以下功能
1、设计一个中文界面来帮助用户,提示用户要实现什么操作,需要输入什么才能实现这种操作,使用户一目了然。
2、设计一个散列表来存储电话号码、用户名、地址。
最常用的是除留余数法,这就需要合理的选择k值来减少冲突发生的机会。
另外冲突时不可避免的。
3、 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表.。
4、散列表难免会有冲突,我们需要采用一定的方法解决冲突;
5、设计的程序能查找并显示给定电话号码的记录;
6、实现查找并显示给定用户名的记录。
二、总体设计
1、图书馆
<1>系统功能模块划分
根据开发者和客户的需求分析后,可以把系统功能分为五个功能模块:
(1)借阅图书模块
包括:
对所借书号的查找,查找成功,则输出该图书的信息,包括书名、作者名、该书的存数和总数,读者需要输入自己的借书号和可借天数进行借阅,系统并实现对数据的修改及存储。
查找失败,输出输入错误或无效图书序号。
(2)归还图书模块
包括:
进入界面,读者需首先输入归还图书的图书序号,系统根据序号查找出该书的信息,并输出,包括书号、书名、著作者、现存量和库存量、借阅者借书证号。
并显示图书信息。
(3)注册新书模块
包括:
首先输入书的序号,及数量,完成注册,如果新注册的书是书库中原来没有的,则单独储存,如果原来有,将总数相加。
(4)注销旧书模块
包括:
首先输入需要注销的图书序号,如库中有该序号的书,进行注销,如果没有,抛出错误信息,并实现数据的修改。
(5)输出全部图书信息模块
包括:
所有存入的图书的信息,便于读者了解
(6)退出系统模块
<2>读者图书信息的划分
(1)图书基本信息管理
图书入库、出库时,更新图书库信息
添加,删除,修改图书信息
添加图书时,增添图书序号,书名,作者及数量的信息
(2)读者基本信息管理
通过借书证序号
2.3系统界面要求
运行程序时,系统向用户显示可视化操作信息,如图
2.4功能要求:
(1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;
(2) 对书号建立索引表(线性表)以提高查找效率;
(3) 系统主要功能如下:
*采编入库:
新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;
*借阅:
如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;
*归还:
注销对借阅者的登记,改变该书的现存量
2.5性能需求:
时间特性:
在软件方面,响应时间,更新处理时间都比较快且迅速,完全满足用户要求。
输出形式:
有中文提示,输入的信息主要以图书序号为主
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
运用数组进行存储。
2、总体设计(电话号码本)
设计界面:
首先设计一个界面,使读者能根据输出的界面正确操作,来完成用户的所需要的操作。
定义一个菜单,输出用户界面。
以实现以下输出效果:
》》号码簿《《
1.添加记录
2.姓名散列
3.号码散列
4.查找记录
5.退出系统
建立节点:
用结构体定义一个名为node的结构体。
先建立节点具体如下:
定义三个字符数组分别存放名字地址和号码,在定义一个next指针,是用来指向下一个位置的下面在定义几个指针用来以后调用用。
定义两个哈希函数,分别用号码和姓名作为关键码来进行散列存储的。
在按号码散列是取第三位及三位后的关键码相加,然后用除留余数法,取K=20进行散列key=key%20按姓名存储时是从第一个就开始累加的。
因为名字一般第一个不会重复,而电话号码的前三位大多都一样,所以电话号码的从三开始累加的。
按号码和姓名查找实现的伪代码如下:
1、初始化关键码。
2、当num(i)不为空时,把下标累加。
3、用除留余数法散列。
建立输入临时节点temp,来实现姓名地址号码的分别存储存储后返回节点。
添加节点:
定义俩个结点指针*newphone*newname初始化为空,并让他等于输入内容,并将其下一个位置设为空
分别定义两个哈希函数,分别用号码和姓名做形参,两个指针分别指向当前输入的值或姓名。
新建数组分别用来存储用户输入的新的节点,并将数组下一个位置指向空。
伪代码如下:
1、建立数组。
2、累加器i初始化。
3、把新节点放在数组中,并将指针后移指向空。
显示列表:
分别按名字和号码输出信息,建立一个工作指针,用来指向数组的第一个位置如果第一个位置不为空,则输出所指向的节点的信息,将该指针后移。
按姓名显示和按号码显示均可用此方法。
伪代码如下:
1、工作指针初始化,并将计数器清零。
2、指针p不为空输出指向内容,直到指针p指向空结束。
查找用户信息(按号码):
形参为数组。
调用散列表函数1,既以号码为关键码存储的函数/按号码查找用户信息。
定义一个工作指针q当q不为空时吧输入的号码和当前q所指向的号码比较若不同,则q指向数组的下一个位置。
若指向的内容和输入的内容相同则指针调用name,address,num函数输出内容。
否则输出“无此内容”伪代码如下:
1、工作指针q初始化。
2、.指针指向的号码和输入的比较。
(1).若不相同,则指针后移.。
(2)若相同则输出结果。
3、指针指向空时,查找失败,退出。
查找用户信息(按姓名):
同按号码一样
主函数:
用if语句来实现不同函数的调用输入1就调用添加记录的函数apend();输入2就调用list2();输入3就调用list();输入6,7分别调用find(),find2();输入5返回
电话本的性能需求:
输出形式:
有中文提示,使用户能根据提示完成他想要的操作。
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计用链表数组等。
程序主要内容:
#include
usingnamespacestd;
intz=0;
structBOOK
{
intid,usr[10],total,store,days[10];//定义id为地址,usr[10]为读者借书证序号store为现存量,days[10]借阅天数,
charname[31],author[21];//name[31]为存放名字的数组,author[21]为存放作者的数组
}books[100];
voidreturn_confirm(void)//定义一个返回函数
{
cout<<"按任意键返回……"< } voidprint_book(void)//输出函数: 将所有的书的信息输出 { intn; for(n=0;n { cout<<"书名: "< cout<<"作者: "< cout<<"存数: "< cout<<"总数: "< } } intsearch_book(void)//查找图书按图书序号查找,将查找到的信息输出 { intn,i; cout<<"请输入图书序号: "; cin>>i; for(n=0;n<100;n++) { if(books[n].id==i) { cout<<"书名: "< cout<<"作者: "< cout<<"存数: "< cout<<"总数: "< returnn; } } cout<<"输入错误或无效图书序号"; return-1; } /*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返 回数组下标,如果找不到相应记录则提示错误并返回-1。 */ voidbook_out(void)//2张栋,借阅图书 { intn,s,l,d; cout<<"借阅图书"; if((n=search_book())! =-1&&books[n].store>0) { cout<<("请输入借书证序号: "); cin>>s; cout<<("请输入可借天数: "); cin>>d; for(l=0;l<10;l++) { books[n].usr[l]=s; books[n].days[l]=d; break; } books[n].store--; } if(n! =-1&&books[n].store==0)cout<<"此书已经全部借出"; return_confirm(); } voidbook_in(void)//3赫宇霆。 归还图书,输入借阅者图书证列//表,借书证序号 //如果图书存在且库存小于总数查找id把图//书收藏,且把借书证序号 { intn,s,l;//及借阅天数清零 cout<<"归还图书"; if((n=search_book())! =-1&&books[n].store { cout<<"借阅者图书证列表: "; for(l=0;l<10;l++) if(books[n].usr[l]! =0) cout< cout<<("请输入借书证序号: "); cin>>s; for(l=0;l<10;l++) { if(books[n].usr[l]==s) { books[n].usr[l]=0; books[n].days[l]=0; break; } } books[n].store++; } if(n! =-1&&books[n].store==books[n].total) cout<<"全部入藏"; return_confirm(); } //4陈青坤 intlook(intid)//查找函数 { inti=0; for(i=0;i<100;i++) {//5陈祖博 if(books[i].id==id) returni; }; return-1; } voidbook_add(void)//注册新书若库里有的只需增加总量 //若库里没有则把书的各种信息输入 { intn,id; cout<<"注册新书"< for(n=0;n<100;n++) if(books[n].id==0)break; cout<<"序号: "; cin>>id; if(look(id)>=0) { intv=look(id); books[v].id=id; cout<<"数量: "; intv1; cin>>v1; books[v].total=books[v].total+v1; books[v].store=books[v].store+v1; } else{ books[n].id=id; cout<<"书名: "; cin>>books[n].name; cout<<("作者: "); cin>>books[n].author; cout<<("数量: "); cin>>books[n].total; books[n].store=books[n].total; z++; return_confirm(); } } voidbook_del(void)//6王召删除图书 { intn; cout<<"注销旧书"; if((n=search_book())! =-1)books[n].id=0; cout<<"该书已注销"; return_confirm(); } voidmain(void)//7王云飞主菜单 { while (1) { menu: cout<<"***操作选单***"< cout<<"1.借阅图书"< cout<<"2.归还图书"< cout<<"3.注册新书"< cout<<"4.注销旧书"< cout<<"5.输出全部图书信息"< cout<<"0退出"< intn; cout<<"请用数字键选择操作"; cin>>n; switch(n)//用switch(n)case调用各个函数 { case1: book_out();break; case2: book_in();break; case3: book_add();break; case4: book_del();break; case5: print_book();break; case0: return; } } } 运行结果: 1注册图书 2借阅图书 3归还图书 4输出图书全部信息 5注销图书 6退出 号码本程序主要内容: #include usingnamespacestd; unsignedintkey; unsignedintkey2; int*p; structnode//建节点1赫宇霆定义三个数组用来存放名字地址和号码 { charname[21],address[40]; charnum[11]; node*next;//定义next指针指向节点的下一个 }; typedefnode*pnode;//定义pnode;mingzi**phone**nam;*a;这几个节点 typedefnode*mingzi; node**phone; node**nam; node*a; voidsanlie(charnum[11])//定义哈希函数 { inti=3; key=(int)num[2];//取数组的第三位作为初始关键码 while(num[i]! =NULL)//当第四位不空时 { key+=(int)num[i];//把第三位以后的数字号码累加 i++; } key=key%20;//用除留余数法散列 } voidsanlie2(charname[21])//和号码散列一样 { inti=1; key2=(int)name[0];//从第一个开始累加 while(name[i]! =NULL) { key2+=(int)name[i]; i++; } key2=key2%20; } node*input()//输入节点2组播 { node*temp;//初始化链表,把姓名地址电话输入 temp=newnode; temp->next=NULL; cout<<"输入姓名: "< cin>>temp->name; cout<<"输入地址: "< cin>>temp->address; cout<<"输入电话: "< cin>>temp->num; returntemp; } intapend()//添加节点3刘帅 { node*newphone; node*newname; newphone=input(); newname=newphone; newphone->next=NULL; newname->next=NULL; sanlie(newphone->num); sanlie2(newname->name); newphone->next=phone[key]->next; phone[key]->next=newphone; newname->next=nam[key2]->next; nam[key2]->next=newname; return0; } voidcreate()//新建节点4王召 { inti; phone=newpnode[20];//新建数组并初始化初始化 for(i=0;i<20;i++) { phone[i]=newnode; phone[i]->next=NULL; } } voidcreate2()//新建节点4 { inti; nam=newmingzi[20]; for(i=0;i<20;i++) { nam[i]=newnode; nam[i]->next=NULL; } } voidlist()//显示列表5张栋 { inti; node*p;//新建工作指针P for(i=0;i<20;i++)//从零开始依次输出名字地址和号码 { p=phone[i]->next; while(p) { cout< p=p->next; } } } voidlist2()//显示列表5 { inti; node*p; for(i=0;i<20;i++)//按姓名输出信息 { p=nam[i]->next; while(p) { cout< p=p->next; } } } voidfind(charnum[11])//查找用户信息6王云飞 { sanlie(num);//按号码查找用户信息 node*q=phone[key]->next;//定义一个工作指针q当q不为空时吧输入的号码和当前q所指向的号码比较 while(q! =NULL)//若不同,则q指向数组的下一个位置 { if(strcmp(num,q->num)==0) break; q=q->next; } if(q)//若指向的号码和输入的一样则输出信息 cout< elsecout<<"无此记录"< } voidfind2(charname[21])//查找用户信息6 { sanlie2(name);//同按号码查找 node*q=nam[key2]->next; while(q! =NULL) { if(strcmp(name,q->name)==0) break; q=q->next; } if(q) cout< elsecout<<"无此记录"< } voidmenu()//菜单7输出中文提示是使用者一目了然 { cout<<"》》号码簿《《"< cout<<"1.添加记录"< cout<<"2.姓名散列"< cout<<"3.号码散列"< cout<<"4.查找记录"< cout<<"5.退出系统"< } intmain()//调用菜单将输入数字和定义的匹配 { charnum[11]; charname[21]; create(); create2(); intsel; while (1) { menu(); cin>>sel; if(sel==4) {cout<<"6号码查询,7姓名查询"< intb; cin>>b; if(b==6) {cout<<"请输入电话号码: "< cin>>num; cout<<"输出查找的信息: "< find(num); } else {cout<<"请输入姓名: "< cin>>name; cout<<"输出查找的信息: "< find2(name);}} if(sel==2) {cout<<"姓名散列结果: "< list2();} if(sel==1) {cout<<"请输入要添加的内容: "< apend();} if(sel==3) {cout<<"号码散列结果: "< list(); } if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书馆 课程设计 程序 报告