图书馆课程设计程序报告Word文档下载推荐.docx

上传人:b****6 文档编号:18134077 上传时间:2022-12-13 格式:DOCX 页数:27 大小:231.31KB
下载 相关 举报
图书馆课程设计程序报告Word文档下载推荐.docx_第1页
第1页 / 共27页
图书馆课程设计程序报告Word文档下载推荐.docx_第2页
第2页 / 共27页
图书馆课程设计程序报告Word文档下载推荐.docx_第3页
第3页 / 共27页
图书馆课程设计程序报告Word文档下载推荐.docx_第4页
第4页 / 共27页
图书馆课程设计程序报告Word文档下载推荐.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

图书馆课程设计程序报告Word文档下载推荐.docx

《图书馆课程设计程序报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图书馆课程设计程序报告Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。

图书馆课程设计程序报告Word文档下载推荐.docx

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(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1