图书馆管理系统设计报告.docx
《图书馆管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统设计报告.docx(35页珍藏版)》请在冰豆网上搜索。
图书馆管理系统设计报告
(此文档为word格式,下载后您可任意编辑修改!
)
第一章绪论
1.1课程设计的目的
课程设计是课程教学必不可缺的一个重要环节,可加深学生对该课程所学内容的进一步的了解与巩固,是将计算机课程与实际问题相连接的关键步骤。
通过课程设计,能够提高学生的分析问题,解决问题,要能很好的完成课程设计,要求我们必须掌握在学习中学到的知识,所以要我们对课本中学的知识要熟悉且掌握,从而运用所学知识解决实际问题的能力,因而必须给予足够的重视。
1.2课程设计的背景和意义
1.2.1课程设计的背景
1.理论研究基础
(1)C++语言的基本知识和技能,如:
类与对象,指针,输入/输出流,文本文件的建立保存;
(2)面向对象程序设计的基本思路和方法。
2.技术层面的支持
(1)研究这些结构的存储、显示,并有查找、添加、删除、修改、查询、统计、保存信息、载入等功能。
(2)类定义、类对象、继承、组合、多态和文件的输入/输出等内容。
1.2.2课程设计的意义
(1)通过课程设计的综合训练,培养了学生分析解决实际问题和编程等实际动手能力。
帮助了同学系统的掌握C++课程的主要内容。
(2)综合实际应用的需求是课程设计既覆盖教学所要求的知识点,有接近工程的实际需求,训练自己实际分析问题和解决问题以及编程的能力。
做到理论结合实际。
1.3课程设计环境
(1)在MicrosoftVisualC++6.0开发平台上编写程序源代码,修改,增加功能,通过编译、连接,直到完全无误,最终执行程序,反复输入合理的以及不合理的数据进行测试并进一步完善。
(2)硬件:
学校机房
(3)软件:
MicrosoftVisualC++6.0开发平台
第二章需求分析
2.1问题描述
图书馆中的资料很多,如果能分类对其资料流通进行管理,将会带来很多方便,因此需要有一个媒体库管理系统。
图书馆共有三大类物品资料:
图书、视频光盘、图画。
这三类物品共同具有的属性有:
编号、标题、作者、评级(未评级,一般,成人,儿童)等。
其中图书类增加出版社、ISBN号、页数等信息;视频光盘类增加出版社、ISBN号、页数等信息;图画类增加出品国籍、作品的长和宽(以厘米计,整数)等信息。
2.2功能要求
(1)基本功能
1)添加物品:
主要完成图书馆三类物品信息的添加,要求编号唯一。
当添加了重复的编号时,则提示数据添加重复并取消添加;当物品库已满,则提示不能再添加新的数据。
2)查询物品
可按照三种方式来查询物品,分别为:
✧按标题查询:
输入标题,输出所查询的信息,若不存在该记录,则提示“该标题不存在!
”;
✧按编号查询:
输入编号,输出所查询的信息,若不存在该记录,则提示“该编号不存在!
”;
✧按类别查询:
输入类别,输出所查询的信息,若不存在记录,则提示“该类别没有物品!
”;
3)显示物品库:
输出当前物品库中所有物品信息,每条记录占据一行。
4)编辑物品:
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
5)删除物品:
主要完成图书馆物品信息的删除。
如果当前物品库为空,则提示“物品库为空!
”,并返回操作;否则,输入要删除的编号,根据编号删除该物品的记录,如果该编号不在物品库中,则提示“该编号不存在”。
6)统计信息
输出当前物品库中总物品数,以及按物品类别,统计出当前物品中各类别的物品数并显示。
例如:
总物品数30
图书类10
视频光盘类15
图画类5
7)物品存盘:
将当前程序中的物品信息存入文件中。
8)读出物品:
从文件中将物品信息读入程序。
(2)扩展功能
在完成以上基本功能的基础上,可自行进行扩展或完善,例如:
1)可按物品编号进行排序。
2)使用二进制文件存储信息。
3)添加记录时,考虑各种数据的有效性。
4)组合查询功能的实现。
2.3问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
第三章系统设计
3.1数据设计
3.1.1类设计
***************************************************************************
基类:
***************************************************************************
classziliao
{
protected:
intnumber;
chartitle[20];
charwriter[20];
charlevel[20];
inttag;//资料删除标记
};
***************************************************************************
图书类:
***************************************************************************
classtushu:
publicziliao//定义由ziliao类派生出tushu(图书)类
{
private:
charpublish[20];
intISBN;
intpage;
public:
intgetno(){returnnumber;}//获取图书编号
char*gettitle(){returntitle;}//获取图书标题
voiddeltushu(){tag=1;}//删除图书
intgettag(){returntag;}//获取删除图画的标记
voidaddtushu(intn,char*t,char*w,char*l,char*p,intI,intpa){}//增加图书操作
voiddisplay(){}//显示图书信息
};
****************************************************************
视频光盘类:
****************************************************************
classguangpan:
publicziliao//定义由ziliao基类派生出guangpan(光盘)类
{
private:
charname[20];
intdate;
floattime;
public:
voiddelguangpan(){tag=1;}//删除视频光盘
intgetno(){returnnumber;}//获取视频光盘编号
intgettag(){returntag;}//获取删除视频光盘的标记
char*gettitle(){returntitle;}//获取视频光盘标题
voidaddguangpan(intn,char*t,char*w,char*l,char*na,intd,floatti){}//增加视频光盘操作
voiddisplay(){}//显示视频光盘信息
};
***************************************************************************
图画类:
***************************************************************************
classtuhua:
publicziliao//定义由ziliao类派生出的tuhua(图画)类
{
private:
charcountry[20];
intlength;
intwidth;
public:
voiddeltuhua(){tag=1;}//删除图画
intgetno(){returnnumber;}//获取图画编号
intgettag(){returntag;}//获取删除图画的标记
char*gettitle(){returntitle;}//获取图画标题
voidaddtuhua(intn,char*t,char*w,char*l,char*c,intle,intwi){}//增加图画操作
voiddisplay(){}//显示图画信息
};
***************************************************************************
图书馆资料管理类:
***************************************************************************
classtushuguan
{
private:
inttop1,top2,top3,top11,top22,top33;
tushuts[maxb];
guangpangp[maxgp];
tuhuath[maxp];
public:
voidziliaodata();
tushuguan();
voidaddtushu(intn,char*t,char*w,char*l,char*p,intI,intpa)//添加图书,加前先查找
{
ts[top1].addtushu(n,t,w,l,p,I,pa);
top1++;top11++;
}
intlook1(intbookid)//按编号查找图书
{
intk=-1;
for(inti=0;iif(ts[i].getno()==bookid&&ts[i].gettag()==0)
k=i;
returnk;
}
intlook11(char*m)//按标题查找图书
{
intk=-1;
for(inti=0;iif(strcmp(ts[i].gettitle(),m)==0&&ts[i].gettag()==0)
{ts[i].display();
k=i;}
returnk;
}
voidaddguangpan(intn,char*t,char*w,char*l,char*na,intd,floatti)//添加视频光盘,加前先查找
{
gp[top2].addguangpan(n,t,w,l,na,d,ti);
top2++;top22++;
}
intlook2(intbookid)//按编号查找视频光盘
{
intk=-1;
for(inti=0;iif(gp[i].getno()==bookid&&gp[i].gettag()==0)
k=i;
returnk;
}
intlook22(char*m)//按标题查找视频光盘
{
intk=-1;
for(inti=0;iif(strcmp(gp[i].gettitle(),m)==0&&gp[i].gettag()==0)
{gp[i].display();
k=i;}
returnk;
}
voidaddtuhua(intn,char*t,char*w,char*l,char*c,intle,intwi)//添加图画,加前先查找
{
th[top3].addtuhua(n,t,w,l,c,le,wi);
top3++;top33++;
}
intlook3(intbookid)//按编号查找图画
{
intk=-1;
for(inti=0;iif(th[i].getno()==bookid&&th[i].gettag()==0)
k=i;
returnk;
}
intlook33(char*m)//按标题查找图画
{
intk=-1;
for(inti=0;iif(strcmp(th[i].gettitle(),m)==0&&th[i].gettag()==0)
{th[i].display();
k=i;}
returnk;
}
~tushuguan(){}//析构函数,保存信息
};
3.1.2类之间的关系
1.基类为ziliao类,在其中定义了三类资料共有的属性作为数据成员。
2.tushu类、shipinguangpan类、tuhua类公用继承ziliao类。
在三个派生类中分别定义各自的属性作为数据成员,定义了增加资料、显示资料、对删除的资料做标记、获取资料编号,标题,删除资料的标记等成员函数。
3.tushuguan类,在其中定义了三个派生类的对象和记录各类资料总数的变量作为数据成员,实现了类的组合应用。
在该类中的构造函数和析构函数中分别实现了对程序中各类资料的读取和保存功能,定义了对资料按编号和标题的查找,各类资料的添加,对各类资料的管理等成员函数。
其中voidziliaodate()(对各类资料的管理)函数中包含switch语句,实现了7个分支选择结构:
退出、添加资料、查询资料、编辑资料、统计资料、删除资料、显示资料。
3.1.3函数设计
tushuguan()******************************************构造(读取)函数
实现对文件中的资料信息的读取
~tushuguan()*****************************************析构(保存)函数
实现对程序中的资料信息保存在相应的文件中
voidziliaodate()******************************************资料管理函数
实现对资料信息的管理
intmain()***************************************************主函数
调用各个资料管理函数实现各个功能的操作
3.2结构设计
3.2.1系统流程图
组
合
应
用
3.2.2界面设计
(1)进入程序界面
图3-1进入程序的欢迎界面
(2)选择操作对象界面
图3-2选择操作对象时的界面
(3)退出程序界面
图3-3退出程序时的界面
第四章系统实现
4.1类实现
定义基类ziliao类,然后由基类派生出tushu(图书)类、shipinguangpan(视频光盘)类、tuhua(图画)类,定义tushuguan类,实现对各类资料信息的管理。
在各类中定义相关成员函数和数据成员
组合应用
图4-1类结构图
4.2功能实现
4.2.1资料信息的读取功能的实现
该功能用于对资料信息进行读取,可将保存在相应的文本文档中的各类人员的信息读取到内存中
该功能在tushuguan类中的构造函数中,主函数中定义该类的对象,运行时自动将各文件中的资料信息读取出来
tushuguan:
:
tushuguan()
{
top1=0;top11=0;
top2=0;top22=0;
top3=0;top33=0;
ifstreamfile1("D:
\\图书信息.txt",ios:
:
binary);//从图书信息文件中读取图书信息
if(!
file1)
{
cerr<<"openerror!
"<abort();
}
while(file1.read((char*)&ts[top1],sizeof(ts[top1])))
{
top1++;top11++;
}
file1.close();
ifstreamfile2("D:
\\视频光盘信息.txt",ios:
:
binary);
if(!
file2)
{
cerr<<"openerror!
"<abort();
}
while(file2.read((char*)&gp[top2],sizeof(gp[top2])))
{
top2++;top22++;
}
file2.close();
ifstreamfile3("D:
\\图画信息.txt",ios:
:
binary);
if(!
file3)
{
cerr<<"openerror!
"<abort();
}
while(file3.read((char*)&th[top3],sizeof(th[top3])))
{
top3++;top33++;
}
file3.close();
}
4.2.2资料信息的添加功能的实现
该功能用于对资料信息进行添加
该功能分别调用tushuguan类中的查询函数,分别实现对图书、视频光盘、图画信息的添加
case1:
{//添加资料
intchoice1;
cout<"<<""<cout<<"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁"<cout<<"◤◥"<cout<<"▏1:
图书2:
视频光盘3:
图画▕"<cout<<"◣◢"<cout<<"▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔"<cin>>choice1;
if(choice1==1)//添加图书
{
if(top11>=maxb){cout<<"◇图书库已满,无法添加!
◇"<else
{cout<<"◆输入您要添加的图书编号:
"<cin>>a;
if((look1(a)==-1)&&(look2(a)==-1)&&(look3(a)==-1))
{cout<<"请输入该图书的标题:
";cin>>b;
cout<<"请输入该图书的作者:
";cin>>c;
cout<<"请输入该图书的评级(未评级,一般,儿童,成人):
";cin>>d;
cout<<"请输入该图书的出版社:
";cin>>e;
cout<<"请输入该图书的ISBN号:
";cin>>f;
cout<<"请输入该图书的页数:
";cin>>g;
addtushu(a,b,c,d,e,f,g);
cout<<"★添加成功!
"<}
elsecout<<"☆该编号已存在,无法添加!
☆";
}
break;
}
if(choice1==2)//添加视频光盘
{
if(top22>=maxgp){cout<<"◇视频光盘库已满,无法添加!
◇"<else
{cout<<"◆输入您要添加的视频光盘编号:
"<cin>>a;
if((look1(a)==-1)&&(look2(a)==-1)&&(look3(a)==-1))
{
cout<<"请输入该视频光盘的标题:
";cin>>b;
cout<<"请输入该视频光盘的作者:
";cin>>c;
cout<<"请输入该视频光盘的评级(未评级,一般,儿童,成人):
";cin>>d;
cout<<"请输入该视频光盘的出品者姓名:
";cin>>e;
cout<<"请输入该视频光盘的出品年份:
";cin>>f;
cout<<"请输入该视频光盘的视频时长:
";cin>>h;
addguangpan(a,b,c,d,e,f,h);
cout<<"★添加成功!
"<}
elsecout<<"☆该编号已存在,无法添加!
☆"<break;
}
}
if(choice1==3)//添加图画
{if(top33>maxp){cout<<"◇图画库已满,无法添加!
◇"<else
{cout<<"◆输入您要添加的图画编号:
"<cin>a;
if((look1(a)==-1)&&(look2(a)==-1)&&(look3(a)==-1))
{
cout<<"请输入该图画的标题:
";cin>>b;
cout<<"请输入该图画的作者:
";cin>>c;
cout<<"请输入该图画的评级(未评级,一般,儿童,成人):
";cin>>d;
cout<<"请输入该图画的国籍:
";cin>>e;
cout<<"请输入该作品的长:
";cin>>f;
cout<<"请输入该作品的宽:
";cin>>g;
addtuhua(a,b,c,d,e,f,g);
cout<<"★添加成功!
"<}
elsecout<<"☆该编号已存在,无法添加!
☆"<break;
}
}
}
4.2.3资料信息的查询功能的实现
该功能用于对资料信息进行查询,可按照编号或标题或类别进行查询。
分别调用tushuguan类中的查询函数和各派生类中的显示函数,分别实现对图书、视频光盘、图画信息的查询
case2:
if(top11+top22+top33==0)
{cout<<"▁▁▁▁▁▁▁▁▁▁"<cout<<"▏*****************┃"<cout<<"▏当前物品库为空!
┃"<cout<<"▏*****************┃"<cout<<"▔▔▔▔▔▔▔▔▔▔"<else
{cout<"<<""<cout<<"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁"<cout<<"◤◥"<cout<<"▏1:
按编号查询2:
按标题查询3:
按类别查询▕"<cout<<"◣◢"<cout<<"▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔"<intch