图书馆课程设计程序报告.docx

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

图书馆课程设计程序报告.docx

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

图书馆课程设计程序报告.docx

图书馆课程设计程序报告

辽宁科技大学

课程设计报告

 

课程名称:

数据结构

设计题目:

图书馆管理系统

学院:

电信工程与技术

专业:

计算机科学与技术

起止日期:

二零一零年十二月十九日

二零一零年十二月三十日

指导教师:

龙艳彬

 

计算机科学与技术系二○一○年制

 

课程设计题目

图书管理系统

组长

学号

班级

系别

计算机科学与技术系

专业

计算机科学与技术

组员

指导教师

课程设计目的

课程设计所需环境

软件环境:

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<name<<'_'<address<<'_'<num<

p=p->next;

}

}

}

voidlist2()//显示列表5

{

inti;

node*p;

for(i=0;i<20;i++)//按姓名输出信息

{

p=nam[i]->next;

while(p)

{

cout<name<<'_'<address<<'_'<num<

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<name<<"_"<address<<"_"<num<

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<name<<"_"<address<<"_"<num<

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(

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

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

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

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