图书馆课程设计程序报告Word文档下载推荐.docx
- 文档编号:18134077
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:27
- 大小:231.31KB
图书馆课程设计程序报告Word文档下载推荐.docx
《图书馆课程设计程序报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图书馆课程设计程序报告Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
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<
iostream>
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<
"
按任意键返回……"
endl;
}
voidprint_book(void)//输出函数:
将所有的书的信息输出
{
intn;
for(n=0;
n<
z;
n++)
{
cout<
书名:
books[n].name<
\n"
;
作者:
books[n].author<
存数:
books[n].store<
of"
总数:
books[n].total<
}
intsearch_book(void)//查找图书按图书序号查找,将查找到的信息输出
intn,i;
请输入图书序号:
cin>
>
i;
for(n=0;
100;
if(books[n].id==i)
returnn;
输入错误或无效图书序号"
return-1;
/*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返
回数组下标,如果找不到相应记录则提示错误并返回-1。
*/
voidbook_out(void)//2张栋,借阅图书
intn,s,l,d;
借阅图书"
if((n=search_book())!
=-1&
&
books[n].store>
0)
("
请输入借书证序号:
);
s;
请输入可借天数:
d;
for(l=0;
l<
10;
l++)
books[n].usr[l]=s;
books[n].days[l]=d;
break;
books[n].store--;
if(n!
books[n].store==0)cout<
此书已经全部借出"
return_confirm();
voidbook_in(void)//3赫宇霆。
归还图书,输入借阅者图书证列//表,借书证序号
//如果图书存在且库存小于总数查找id把图//书收藏,且把借书证序号
intn,s,l;
//及借阅天数清零
归还图书"
books[n].total)
借阅者图书证列表:
if(books[n].usr[l]!
=0)
books[n].usr[l]<
-"
books[n].days[l]<
天"
if(books[n].usr[l]==s)
books[n].usr[l]=0;
books[n].days[l]=0;
books[n].store++;
books[n].store==books[n].total)
全部入藏"
//4陈青坤
intlook(intid)//查找函数
inti=0;
for(i=0;
i<
i++)
{//5陈祖博
if(books[i].id==id)
returni;
};
return-1;
voidbook_add(void)//注册新书若库里有的只需增加总量
//若库里没有则把书的各种信息输入
intn,id;
注册新书"
if(books[n].id==0)break;
序号:
id;
if(look(id)>
intv=look(id);
books[v].id=id;
数量:
intv1;
cin>
v1;
books[v].total=books[v].total+v1;
books[v].store=books[v].store+v1;
else{
books[n].id=id;
books[n].name;
books[n].author;
books[n].total;
books[n].store=books[n].total;
z++;
voidbook_del(void)//6王召删除图书
intn;
注销旧书"
=-1)books[n].id=0;
该书已注销"
voidmain(void)//7王云飞主菜单
while
(1)
menu:
***操作选单***"
1.借阅图书"
2.归还图书"
3.注册新书"
4.注销旧书"
5.输出全部图书信息"
0退出"
请用数字键选择操作"
n;
switch(n)//用switch(n)case调用各个函数
case1:
book_out();
break;
case2:
book_in();
case3:
book_add();
case4:
book_del();
case5:
print_book();
case0:
return;
运行结果:
1注册图书
2借阅图书
3归还图书
4输出图书全部信息
5注销图书
6退出
号码本程序主要内容:
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];
key2=key2%20;
node*input()//输入节点2组播
node*temp;
//初始化链表,把姓名地址电话输入
temp=newnode;
temp->
next=NULL;
输入姓名:
temp->
name;
输入地址:
address;
输入电话:
num;
returntemp;
intapend()//添加节点3刘帅
node*newphone;
node*newname;
newphone=input();
newname=newphone;
newphone->
newname->
sanlie(newphone->
num);
sanlie2(newname->
name);
next=phone[key]->
next;
phone[key]->
next=newphone;
next=nam[key2]->
nam[key2]->
next=newname;
return0;
}
voidcreate()//新建节点4王召
inti;
phone=newpnode[20];
//新建数组并初始化初始化
20;
phone[i]=newnode;
phone[i]->
voidcreate2()//新建节点4
nam=newmingzi[20];
nam[i]=newnode;
nam[i]->
voidlist()//显示列表5张栋
node*p;
//新建工作指针P
i++)//从零开始依次输出名字地址和号码
p=phone[i]->
while(p)
p->
name<
'
_'
address<
num<
p=p->
voidlist2()//显示列表5
i++)//按姓名输出信息
p=nam[i]->
voidfind(charnum[11])//查找用户信息6王云飞
sanlie(num);
//按号码查找用户信息
node*q=phone[key]->
//定义一个工作指针q当q不为空时吧输入的号码和当前q所指向的号码比较
while(q!
=NULL)//若不同,则q指向数组的下一个位置
if(strcmp(num,q->
num)==0)
q=q->
if(q)//若指向的号码和输入的一样则输出信息
q->
_"
<
elsecout<
无此记录"
//否则输出无此记录
voidfind2(charname[21])//查找用户信息6
sanlie2(name);
//同按号码查找
node*q=nam[key2]->
=NULL)
if(strcmp(name,q->
name)==0)
if(q)
voidmenu()//菜单7输出中文提示是使用者一目了然
》》号码簿《《"
1.添加记录"
2.姓名散列"
3.号码散列"
4.查找记录"
5.退出系统"
intmain()//调用菜单将输入数字和定义的匹配
charname[21];
create();
create2();
intsel;
while
(1)
menu();
sel;
if(sel==4)
{cout<
6号码查询,7姓名查询"
intb;
b;
if(b==6)
{cout<
请输入电话号码:
cin>
输出查找的信息:
find(num);
else
请输入姓名:
find2(name);
}}
if(sel==2)
姓名散列结果:
list2();
if(sel==1)
请输入要添加的内容:
apend();
if(sel==3)
号码散列结果:
list();
if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书馆 课程设计 程序 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)