图书信息管理系统课程设计.docx
《图书信息管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统课程设计.docx(62页珍藏版)》请在冰点文库上搜索。
图书信息管理系统课程设计
《C++语言》课程设计报告
题目:
图书信息管理系统
学生姓名:
彭刚
学号:
201017020213
专业班级:
信管10102
同组姓名:
指导教师:
徐晓蓉
设计时间:
2011年下学期第17-18周
指导老师意见:
评定成绩:
签名:
日期:
1.需求分析
题目:
图书信息管理系统设计
1)信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格,试设计一图书信息管理系统,使之能提供以下功能:
系统以菜单方式工作
图书信息录入功能(图书信息用文件保存)--输入
图书信息浏览功能--输出
查询和排序功能:
(至少一种查询方式)--算法
1.按编号查找
2.按书名查询
3.按作者名查询
4.按出版社查找
图书信息的删除与修改(可选项)
2)需求说明:
图书信息包括:
编号、书名、作者名、分类号、出版单位、出版时间、价格等,并且要求编号不重复;
录入的图书信息要求用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作;
对图书信息查询应能够分别按书名及作者名两种方式进行,要求能返回所有符合条件的读者的信息;
对读者信息的修改应逐个地进行,一个读者信息的更改不应影响其他的读者记录;
系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理。
2.概要设计
要进入图书信息管理系统,就要先登录,每个用户都有三次登录机会,若登录失败三次,系统就自动退出,登录成功后方可进行操作。
登录后你可以有选择性的操作,可以进行图书的维护、读者的维护、借书操作、还书操作或是退出系统。
进入图书信息后,可以选择新增图书、更改图书、删除图书、查找图书、显示图书、全部删除或者是返回。
进入读者信息后也是一样,可进行新增、更改、删除、查找、显示、全部删除或者是返回。
进入借书操作后,要借书的话就输入读者编号加想要借的图书编号就可完成借书。
还书操作也一样,输入还书读者编号加图书编号即可完成还书操作。
图书信息
管理系统
先登录才能进行操作!
!
!
2
读者信息
3
借阅图书
4
归还图书
0
退出
1
图书信息
登录:
1
退出:
0
图1.系统功能图
图书信息
2
更改
3
删除
4
查找
5
显示
6
全
删
0
返回
1
新增
图2.图书维护功能图
读者信息项目
2
更改
3
删除
4
查找
5
显示
6
全
删
0
返回
1
新增
读者信息
图3.读者维护功能图
借书项目
借阅图书
输入图书编号:
输入读者编号:
借书成功
图4.借阅图书功能图
还书项目
归还图书
输入读者编号:
输入图书编号:
还书成功
图5.归还图书功能图
3.详细设计
#include
#include//控制台数据输入输出的函数
#include//文件流
#include//控制数据输出格式
#include
1.头文件:
2.
constintMaxr=100;//最多的读者数
constintMaxb=100;//最多的图书数
constintMaxbor=5;//每位读者最多借的书
控制图书、读者和每
位读者的借书数量。
classBDatabase
3.定义一个BDatabase(图书库)类,
实现对图书的维护,查找,删除等功能。
定义一个构造函数BDatabase(),将写入到book.txt的数据读到book[]中。
{
Bookb;
top=-1;
fstreamfile("book.txt",ios:
:
in);
while
(1)
{
file.read((char*)&b,sizeof(b));
if(!
file)
break;
top++;
book[top]=b;
}
file.close();
}
BDatabase()
定义一个void类型的clear()函数,voidclear()
{
chari;
cout<<"确定全部删除吗?
Y/N?
"<cin>>i;
if(i=='y'||i=='Y')
top=-1;
}
用于删除全部图书数据。
定义一个intaddbook(intn,char*na,char*aa,char*fe,char*ca,inttime,doubleprice,intoa)函数,来增加图书。
{
Book*p=query1(n);
if(NULL==p)
{
top++;
book[top].addbook(n,na,aa,fe,ca,time,price,oa);
return1;
}
return0;
}
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)
cout<<"找不到该书!
"<returnNULL;
}
定义四个指针函数,
用于查找图书:
a.按编号查找
b.按书名查找
c.按作者名查找
d.按出版社查找
按编号查找图书
Book*query4(chara[])
{
Book*e;
intr=0;
for(inti=0;i<=top;i++)
if(strcmp(book[i].getcbsname(),a)==0&&book[i].gettag()==0)
{
if(r==0)cout<e=&book[i];
e->disp();
r++;
}
if(r==0)
cout<<"找不到该书!
"<returnNULL;
}
Book*query3(chara[])
{
Book*e;
intr=0;
for(inti=0;i<=top;i++)
if(strcmp(book[i].getauthorname(),a)==0&&book[i].gettag()==0)
{
if(r==0)
cout<e=&book[i];
e->disp();
r++;
}
if(r==0)
cout<<"找不到该书!
"<returnNULL;
}
Book*query2(chara[])
{
Book*e;
intr=0;
for(inti=0;i<=top;i++)
if(strcmp(book[i].getname(),a)==0&&book[i].gettag()==0)
{
if(r==0)
cout<e=&book[i];
e->disp();
r++;
}
if(r==0)
cout<<"找不到该书!
"<returnNULL;
}
按书名查找按作者名查找
按
出
版
社
查
找
{
fstreamfile("book.txt",ios:
:
out);
for(inti=0;i<=top;i++)
if(book[i].gettag()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
定义一个析构函数~BDatabase(),
将book[]写到book.txt文件中。
charchoice3;
charbname[40];//书名
charauname[40];//作者名
charbfenlei[40];//分类号
charcname[40];//出版社
inttime;//出版时间
doubleprice;//价格
charch;
intchoice4;
intbookid;
intbookod;
Book*b;
定义一个函数bookdata(),
用于图书数据的处理,
先定义一些数据成员。
设立了多个选择语句。
图书信息的选择。
cout<<"\n\t\t\t**图书信息**\n"<cout<<"\t\t\t**1.新增**"<cout<<"\t\t\t**2.更改**"<cout<<"\t\t\t**3.删除**"<cout<<"\t\t\t**4.查找**"<cout<<"\t\t\t**5.显示**"<cout<<"\t\t\t**6.全删**"<cout<<"\t\t\t**0.返回**"<cout<<"\t\t\t请选择:
";
charchoice2;
{
cout<<"\n\t\t\t**是否保存Y/N?
**\n"<cout<<"\t\t\t**1.Y保存**"<cout<<"\t\t\t**0.N不保存**"<cout<<"\t\t\t请选择:
";
cin>>choice2;
switch(choice2)
{
case'1':
cout<<"添加图书成功!
";
break;
case'0':
break;
}
}
新增图书
输入:
1编号
2书名
3作者名
4分类号
5出版社
6出版时间
7价格
8存量
是否保存?
cout<<"\n\t\t\t**图书修改**\n"<cout<<"\t\t\t**1.修改书名**"<cout<<"\t\t\t**2.修改作者**"<cout<<"\t\t\t**3.修改分类号**"<cout<<"\t\t\t**4.修改出版社**"<cout<<"\t\t\t**5.修改出版时间**"<cout<<"\t\t\t**6.修改图书价格**"<cout<<"\t\t\t**7.修改图书数量**"<cout<<"\t\t\t**0.返回**"<cout<<"\t\t\t请选择:
";
修改图书
图书修改模块,主要功能如上。
查找选项
cout<<"\t\t\t**1.按图书编号查找**"<cout<<"\t\t\t**2.按图书书名查找**"<cout<<"\t\t\t**3.按图书作者查找**"<cout<<"\t\t\t**4.按图书出版社查找**"<cout<<"\t\t\t**0.返回**"<cout<<"\t\t\t请选择:
";
图书查找,可按编号查找,书名查找,作者名查找,出版社查找。
删除
所有
图书
信息
显示图书全删
1编号
2书名
3作者名
4分类号
5出版社
6出版时间
7价格
8存量
ClassRdatabase{
4.定义一个读者库类Rdatabase,
实现建立读者的个人资料。
定义一个构造函数RDatabase(),
{
Readers;
top=-1;
fstreamfile("reader.txt",ios:
:
in);//打开一个输入文件
while
(1)
{
file.read((char*)&s,sizeof(s));
if(!
file)
break;
top++;
read[top]=s;
}
file.close();//关闭reader.txt文件
}
将reader.txt中数据读到read[]中。
定义一个void型的clear()函数,
{
chari;
cout<<"确定全部删除吗?
Y/N?
"<cin>>i;
if(i=='y'||i=='Y')
top=-1;
}
删除所有读者信息。
intaddreader(intn,char*na)
{
//添加读者时先查找是否存在
Reader*p=queryid(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na);
return1;
}
else
cout<<"该编号已经存在!
";
return0;
}
添加读者
利用析构函数~RDatabase(),
将read[]写到reader.txt文件中。
{
fstreamfile("reader.txt",ios:
:
out);
for(inti=0;i<=top;i++)
if(read[i].gettag()==0)
file.write((char*)&read[i],sizeof(read[i]));
file.close();
}
读者信息的选择操作:
cout<<"\n\t\t\t**读者信息**\n"<cout<<"\t\t\t**1.新增**"<cout<<"\t\t\t**2.更改**"<cout<<"\t\t\t**3.删除**"<cout<<"\t\t\t**4.查找**"<cout<<"\t\t\t**5.显示**"<cout<<"\t\t\t**6.全删**"<cout<<"\t\t\t**0.返回**"<cout<<"\t\t\t请选择:
";
读者的查找操作
cout<<"\t\t\t**1.按读者编号查找**"<cout<<"\t\t\t**2.按读者姓名查找**"<cout<<"\t\t\t**0.返回**"<cout<<"\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{
私有成员有:
inttag;//删除标记1表示已删0表示未删
intno;//读者编号
charname[20];//读者姓名
intborbook[Maxbor];//所借图书
还设置了一些成员函数,来获取一些数据。
char*getname()//获取姓名
intgettag()//获取删除标记
intgetno()//获取读者编号
6.定义一个maindesk类,
实现程序的主界面。
Classmaindesk{
私有数据成员有:
charchoice5;
charchoice2;
doublexh,mm;
intbookid,readerid;
RDatabaseReaderDB;
Reader*r;
BDatabaseBookDB;
Book*b;
设置了一个登录函数denglu(),
以实现登录操作界面。
cout<<"\n\t\t\t欢迎光临图书馆管理系统!
"<cout<<"\t\t\t您共有3次登陆机会"<cout<<"\t\t\t**1.登录**"<cout<<"\t\t\t**0.退出**"<cout<<"\t\t\t请选择:
";
设置了一个void型enterdesk()函数,
以实现图书管理系统的界面。
cout<<"\n\t\t\t****图书管理系统****\n\n";
cout<<"\t\t\t**1.图书信息**"<cout<<"\t\t\t**2.读者信息**"<cout<<"\t\t\t**3.借阅图书**"<cout<<"\t\t\t**4.归还图书**"<cout<<"\t\t\t**0.退出**"<cout<<"\t\t\t请选择:
";
7.主函数main()
maindeskyourDesk;
if(yourDesk.denglu())
cout<<"\t\t谢谢使用,再见!
"<
4.调试分析
1.实现程序,首先进入如下界面:
2.按1键进行登录,按0键退出。
按1键登录后进入如下界面:
A.按1键进入图书信息,可对图书进行新增、更改、删除、查找、显示、全删。
还有个返回选项。
界面如下:
按1键进行图书新增,需要键入新书编号、书名、作者名、分类号、出版社、出版时间、价格和存量。
键入信息后会弹出一条对话,问是否保存:
按1则保存,按0则不保存。
B.按2键进入读者信息,同样可对读者进行新增、更改、删除、查找、显示、全删,也有个返回选项。
界面如下:
按1进入新增读者,需要输入的有读者编号和姓名两个选项,如下:
C.借书和还书只需输入读者编号和想借图书编号即可。
进入读者查找后,有三个选项,按书名查找和按作者名查找,还有返回。
在图书管理下,按0键退出,界面如下:
5.总结
本次课程设计是我入学以来写的第一个大程序,通过本次课程设计,我彻底认识到了自己的不足,充分感觉到了要自己写一个程序是多么的艰难,才发现自己连基础都还没打牢,所以这次课程设计做得很吃力。
虽然做得很吃力,但是却激发了我学习的动力,让我充分认识到学习的重要性。
在本次课程设计的过程中,我遇到了很多的困难,一个一个的错误,一条一条的警告,但是我并不畏惧,依然大步迈着前进的步伐。
终于,经过了一个星期的努力,课程设计取得了成功,心里有那么一点点小高兴,但是,更懂得了自己以后的任务有重,成功不能蒙蔽我们前进的双眼,失败也并不会阻挡我们前进的步伐。
我这次做的这个课题需要我们掌握如下几点:
1.只有上机实践才能检验自己写的程序,光看是看不出来的;
2.要懂得调试、书写规范和检错;
3.要懂得函数的调用;
4.要掌握文件函数的输入和输出,文件的定位。
5.更重要的是要细心。
6.参考文献
1.谭浩强,C++程序设计,清华大学出版社,2004
2.陈维兴,C++面向对象程序设计第三版,清华大学出版社,2010
3.陈维兴,C++面向对象程序设计第二版,清华大学出版社,2004
4.裘宗燕著,从问题到程序科学出版社,北京大学出版社,1999
5.刘瑞挺主编,计算机二级教程,南开大学出版社,1996
6.陈朔鹰等编著,C语言程序设计基础教程,兵器工业出版社,1994
7.姜仲秋等主编,C语言程序设计,南京大学出版社,1998
8.陈维兴,C++面向对象程序设计习题解答与实验指导,清华大学出版社,2005
9.钱能,C++程序设计教程,清华大学出版社,2005
10.谭浩强,C语言程序设计第二版,清华大学出版社,2008
7.致谢
经过两周的时间,我的课程设计顺利完成,我也发现我对专业课的兴趣大大的增加了,自身的技术也得到了很大的提高。
我能完成本次课程设计,主要是因为有一位水平高超的徐晓蓉老师和老师的悉心教导。
在这里,我衷心的感谢我们的指导老师徐晓蓉老师。
当然,也要感谢同学们的热心帮助。
8.附录
源代码:
#in