《C++语言》课程设计报告图书信息管理系统Word文档格式.docx
《《C++语言》课程设计报告图书信息管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《《C++语言》课程设计报告图书信息管理系统Word文档格式.docx(69页珍藏版)》请在冰豆网上搜索。
任课教师
意见
说明
1.4
2..5
3.8
4.18
5.21
6.21
7..22
1.需求分析
题目:
图书信息管理系统设计
1)信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格,试设
计一图书信息管理系统,使之能提供以下功能:
系统以菜单方式工作
图书信息录入功能(图书信息用文件保存)--输入
图书信息浏览功能--输出
查询和排序功能:
(至少一种查询方式)--算法
1.按编号查找
2.按书名查询
3.按作者名查询
4.按出版社查找
图书信息的删除与修改(可选项)
2)需求说明:
编号、书名、作者名、分类号、出版单位、出版时间、价格等,并且要求编号不重复;
录入的图书信息要求用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作;
对图书信息查询应能够分别按书名及作者名两种方式进行,要求能返回所有符合条件的读者的信息;
对读者信息的修改应逐个地进行,一个读者信息的更改不应影响其他的读者记
录;
系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理。
2.概要设计
要进入图书信息管理系统,就要先登录,每个用户都有三次登录机会,若登录失
败三次,系统就自动退出,登录成功后方可进行操作。
登录后你可以有选择性的操作,
可以进行图书的维护、读者的维护、借书操作、还书操作或是退出系统。
进入图书信
息后,可以选择新增图书、更改图书、删除图书、查找图书、显示图书、全部删除或
者是返回。
进入读者信息后也是一样,可进行新增、更改、删除、查找、显示、全部
删除或者是返回。
进入借书操作后,要借书的话就输入读者编号加想要借的图书编号
就可完成借书。
还书操作也一样,输入还书读者编号加图书编号即可完成还书操作。
图书信息
管理系统
先登录才能进
行操作!
!
登录:
1
退出:
0
2
3
4
图
读
借
归
退
书
者
阅
还
出
信
息
图1.系统功能图图书信息
6
新
更
删
查
显
全
返
增
改
除
找
示
回
图2.图书维护功能图
读者信息项目
读者信息
图3.读者维护功能图
借书项目
借阅图书
输入读者编号:
输入图书编号:
借书成功
图4.借阅图书功能图
还书项目
归还图书
输入图书编号:
还书成功
图5.归还图书功能图
3.详细设计
1.头文件:
#include<
iostream.h>
#include<
conio.h>
//控制台数据输入输出的函数
fstream.h>
//文件流
iomanip.h>
//控制数据输出格式
string.h>
2.控制图书、读者和每
constintMaxr=100;
//最多的读者数
位读者的借书数量。
constintMaxb=100;
//最多的图书数
constintMaxbor=5;
//每位读者最多
借的书
3.定义一个BDatabase(图书库)类,
classBDatabase
实现对图书的维护,查找,删除等功能。
定义一个构造函数BDatabase(),将写入到book.txt的数据读到book[]中。
{
Bookb;
BDatabase()top=-1;
fstreamfile("
book.txt"
ios:
:
in);
while
(1)
file.read((char*)&
b,sizeof(b));
if(!
file)
break;
top++;
book[top]=b;
}
file.close();
定义一个void类型的clear()函数,voidclear()
用于删除全部图书数据。
chari;
cout<
<
"
确定全部删除
吗?
Y/N?
endl;
cin>
>
i;
if(i=='
y'
||i=='
Y'
top=-1;
定义一个intaddbook(intn,char*na,char*aa,char*fe,char*ca,inttime,double
price,intoa)函数,来增加图书。
Book*p=query1(n);
if(NULL==p)
book[top].addbook(n,na,aa,fe,
ca,time,price,oa);
return1;
return0;
定义四个指针函数,
用于查找图书:
a.按编号查找
b.按书名查找
c.按作者名查找
d.按出版社查找
Book*query1(intbookid)
for(inti=0;
i<
=top;
i++)
if(book[i].getno()==bookid
&
book[i].gettag()==0)
return&
book[i];
returnNULL;
r++;
if(r==0)
找不到该
书!
按编号查找图书
按书名查找
按作者名查找
Book*query2(chara[])
Book*query3(chara[])
Book*e;
intr=0;
if(strcmp(book[i].getname(),a)==0
if(strcmp(book[i].getauthorname(),
a)==0&
setw(3)<
编
号
setw(10)<
名
作
分
类
setw(15)<
版
社
时
间
价
格
存量"
e=&
e->
disp();
不
到
该
Book*query4(chara[])
按{
for(inti=0;
if(strcmp(book[i].getcbsname(),a)==0&
if(r==0)cout<
编号"
书名"
作者"
分类号"
出版社"
出版时间"
图书价格"
定义一个析构函数~BDatabase(),
将book[]写到book.txt文件中。
out);
if(book[i].gettag()==0)
file.write((char
*)&
book[i],sizeof(book[i]));
定义一个函数bookdata(),用于图书数据的处理,
先定义一些数据成员。
设立了多个选择语句。
图书信息的选择。
charchoice3;
charbname[40];
//书名
charauname[40];
//作者名
charbfenlei[40];
//分类号
charcname[40];
//出版社
inttime;
//出版时间
doubleprice;
//价格
charch;
intchoice4;
intbookid;
intbookod;
Book*b;
\n\t\t\t**
书信息**\n"
\t\t\t**1.
增**"
\t\t\t**2.
改**"
\t\t\t**3.
除**"
\t\t\t**4.
找**"
\t\t\t**5.
示**"
\t\t\t**6.
删**"
\t\t\t**0.
回**"
\t\t\t请选择:
"
;
新增图书
charchoice2;
是
否
保
存
Y/N?
**\n"
输入:
\t\t\t**
1.
Y
**"
编号
0.N
书名
作者名
\t\t\t请
选
择:
分类号
choice2;
出版社
switch(choice2)
出版时间
7
价格
case'
1'
存量
是否保存?
添加图书成功!
0'
修改图书
\n\t\t\t**图书修改**\n"
修
改书名
改作者
改分类号
改出版社
\t\t\t**5.修
改出版时间**"
\t\t\t**6.修
改图书价格**"
\t\t\t**7.修
改图书数量**"
图书修改模块,主要功能如上。
查找选项
按图书编号查找**"
按图书书名查找**"
按图书作者查找**"
按图书出版社查找**"
\t\t\t请选择:
图书查找,可按编号查找,书名查找,作者名查找,出版社查找。
显示图书全删
1编号
2书名
删除
所有
图书
信息
7价格
8存量
4.定义一个读者库类Rdatabase,
实现建立读者的个人资料。
ClassRdatabase{
定义一个构造函数RDatabase(),
将reader.txt中数据读到read[]中。
Readers;
reader.txt"
//打开一
个输入文件
s,sizeof(s));
read[top]=s;
//关闭reader.txt文件
定义一个void型的clear()函数,
删除所有读者信息。
确定全部删
除吗?
intaddreader(intn,char*na)
添加读者
//添加读者时先查找是否存在
Reader*p=queryid(n);
if(p==NULL)
read[top].addreader(n,na);
else
该编号已经存在!
利用析构函数~RDatabase(),
将read[]写到reader.txt文件中。
if(read[i].gettag()==0)
file.write((char*)&
read[i],sizeof(read[i]));
读者信息的选择操作:
读者信息**\n"
\t\t\t
请选择:
读者的查找操作
按读者编号查找
按读者姓名查找
定义一个book类,实现对图书的描述,
图书的编号,书名,借出,还入等功能。
Classbook{
私有成员有:
inttag;
//删除标记1:
已删0:
未删
intno;
//图书编号
charname[20];
//书名
charauthor[20];
//作者
charfenlei[20];
charcbs[20];
//出版社
intcbtime;
doublebookprice;
//图书价格
intonshelf;
//是否再架1:
再架2:
已借
定义了一系列的公有成员函数来实现
一系列的功能。
char*getname()
//获取书名
char*getauthorname()
//获取作者名
char*getfenlei()
//获取分类号
char*getcbsname()
//获取出版社名
intgetcbtime()
//获取出版时间
doublegetbookprice()
//获取图书价格
intgetno()
//获取图书编号
intgettag()
//获取删除标记
5.定义一个读者类Reader,
实现读者的信息描述。
ClassReader{
//删除标记1表示已删0表示未删
//读者编号
//读者姓名
intborbook[Maxbor];
//所借图书
还设置了一些成员函数,来获取一些数据。
//获取姓名
//获取读者编号
6.定义一个maindesk类,
实现程序的主界面。
Classmaindesk{
私有数据成员有:
charchoice5;
doublexh,mm;
intbookid,readerid;
RDatabaseReaderDB;
Reader*r;
BDatabaseBookDB;
设置了一个登录函数denglu(),
以实现登录操作界面。
\n\t\t\t欢迎光临图书馆管理系统!
\t\t\t您共有3次登陆机会"
\t\t\t**1.登录**"
\t\t\t**0.退出**"
\t\t\t请选择:
设置了一个void型enterdesk()函数,
以实现图书管理系统的界面。
\n\t\t\t****图书管理系统****\n\n"
息**"
书**"
7.主函数mai