C++图书管理系统实验报告.docx
《C++图书管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《C++图书管理系统实验报告.docx(14页珍藏版)》请在冰点文库上搜索。
C++图书管理系统实验报告
面向对象程序设计(C++语言)课程设计
设计说明书
图书管理系统的设计与实现
起止日期:
年月日至年月日
学生
班级
学号
成绩
指导教师(签字)
计算机与通信学院
年月日
图书管理系统
一.需求分析
图书馆是目前生活中除了网络外的另一个获取知识的重要场所。
利用图书管理系统对图书记录进行统一管理,包括新增图书记录,更改图书记录,删除图书记录等功能,实现图书管理工作的系统化,规化和自动化,为图书管理提供便利。
同时是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。
有助于加深对面向对象程序设计中基础理论和基本知识的理解,培养了实践能力,促进理论与实践的结合。
二.设计要求:
1.图书信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
2.系统以菜单方式工作
3.图书信息录入功能(图书信息用文件保存)--输入
4.图书信息浏览功能--输出
5.查询和排序功能:
(至少一种查询方式)--算法
6.按书名查询
7.按作者名查询
8.图书信息的删除与修改(可选项)
三.概要设计
1、类的设计
①、Book类的设计(部函数流程图):
ClassBook
获取图书类型
获取书名
获取图书编号
获取删除标志
设置书名
设置类型
删除图书
增加图书
输出图书
②、BDatabase类的设计:
ClassBDatabase
图书记录
删除全部记录
增加记录
查找图书记录
图书库(函数)
③、主函数流程图:
4多态的实现
classPeople
{
public:
virtualvoidcard(){cout<<"cardpeople"<};
classStudent:
publicPeople
{
public:
virtualvoidcard(){cout<<"cardstudent"<};
四、详细设计:
#defineStrNum20
#defineType20
#include
#include
#include
#include//输入/输出文件流类
usingnamespacestd;
constintMaxb=100;//最多可存储的图书
classPeople
{
public:
virtualvoidcard(){cout<<"cardpeople"<};
classStudent:
publicPeople
{
public:
virtualvoidcard(){cout<<"cardstudent"<};
classBook
{
private:
intlab;//删除标记
intnum;//图书编号
intadd;//增加标记
charnumber[StrNum];//编号
charbookname[StrNum];//书名
charbookkind[Type];//图书类型
public:
Book(){}
chargetkind()//获取图书类型
{
returnbookkind[Type];
}
chargetname()//获取书名
{
returnbookname[StrNum];
}
intgetnum()//获取图书编号
{
returnnum;
}
intgetlab()//获取删除标记
{
returnlab;
}
voidsetname(charna[])//设置书名
{
strcpy(bookname,na);
}
voidsetkind(charkin[])//设置类型
{
strcpy(bookkind,kin);
}
voiddelbook()//删除图书
{
lab=1;
}
voidaddbook(intn,char*na,char*kin)//增加图书
{
lab=0;
num=n;
strcpy(bookname,na);
strcpy(bookkind,kin);
}
voiddisp()//输出图书
{
cout.flags(ios:
:
left);//设置对齐的标志位为左
cout<}
};
classBDatabase
{
private:
inttop;
Bookbook[Maxb];//图书记录
public:
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();
}
voidclear()//全删
{
top=-1;
}
intaddbook(intn,char*na,char*kin)//增加图书
{
Book*p=query(n);
if(NULL==p)
{
top++;
book[top].addbook(n,na,kin);
return1;
}
return0;
}
Book*query(intbookid)//查找图书
{
for(inti=0;i<=top;i++)
if(book[i].getnum()==bookid&&book[i].getlab()==0)
{
return&book[i];
}
returnNULL;
}
voiddisp()//图书库
{
for(inti=0;i<=top;i++)
if(book[i].getlab()==0)
book[i].disp();
}
~BDatabase()//析构函数,将book[]写到book.txt文件中,实现文本的写入
{
fstreamfile("book.txt",ios:
:
out);
for(inti=0;i<=top;i++)
if(book[i].getlab()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
};
voidmain()
{
BDatabaseBookDB;
charchoice;
charbname[40];
charbkind[40];
charnewType[20];
intbookid;
Book*b;
while(choice!
='0')
{
cout<<"\t******************************************************************\n";
cout<<"\n\n";
cout<<"\t\t\t图书管理系统\n\n";
cout<<"\t\t\t1新增图书记录\n";
cout<<"\t\t\t2更改图书记录\n";
cout<<"\t\t\t3删除图书记录\n";
cout<<"\t\t\t4查找图书记录\n";
cout<<"\t\t\t5显示图书记录\n";
cout<<"\t\t\t6清空全部记录(慎用)\n";
cout<<"\t\t\t0退出系统\n";
cout<<"\t\t\t7人员\n";
cout<<"\n\n";
cout<<"\t******************************************************************\n";
cout<<"请选择(1,2,3,4,5,6,0):
";
cin>>choice;
switch(choice)
{
case'1':
cout<<"输入图书编号:
"<cin>>bookid;
cout<<"输入图书类型:
"<cin>>newType;
cout<<"输入图书书名:
"<cin>>bname;
BookDB.addbook(bookid,bname,newType);
break;
case'2':
cout<<"输入图书编号:
"<cin>>bookid;
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<break;
}
cout<<"输入新的书名:
"<cin>>bname;
b->setname(bname);
cout<<"输入新的类型:
"<cin>>bkind;
b->setkind(bkind);
break;
case'3':
cout<<"读入图书编号:
"<cin>>bookid;
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<break;
}
chartg1;
cout<<"确定要删除此记录吗?
(Y/N)"<cin>>tg1;
if(tg1!
='n'&&tg1!
='N')
{
b->delbook();
cout<<"已成功删除该书记录!
"<break;
}
case'4':
cout<<"读入图书编号:
"<cin>>bookid;
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<break;
}
cout<<"图书编号图书名称图书类型\n";
b->disp();
break;
case'5':
cout<<"图书编号图书名称图书类型\n";
b=BookDB.query(bookid);
b->disp();
break;
case'6':
chartg2;
cout<<"确定要清空所有记录吗?
(Y/N)"<cin>>tg2;
if(tg2!
='n'&&tg2!
='N')
{
BookDB.clear();
cout<<"已成功清空记录!
"<break;
}
case'0':
break;
default:
cout<<"输入错误,请从新输入(数字为0~6):
";
case'7':
Studentstudent;
People*ppeople=&student;
People&ref=student;
ppeople->card();
ref.card();
break;
}
}
}
五.用户使用说明
本系统实现了图书管理系统的典型功能,包括查询所有记录的信息,添加查找等功能,基本符合设计要求,利用类的封装实现了一定的安全性,函数的实现与调用在主函数中实现。
但在记录查询上仍有缺陷,有待于完善。
六、实验心得:
1、通过实验加深了对c++的了解,在程序设计上提高了自己的动手能力,在实践中增强了自己的编程水平。
2、但是因为自己独立完成且能力有限,还有部分功能未能完善,例如对书名,编号的排序等等,这些局限性都是有待逐步完善的方面。
3、而且通过这次课程设计,我培养了自己对C++编程的兴趣,编程能力也有所提高,但仍存在许多不足,不能独自写出功能很齐全的代码,写代码要参考很多资料,所以今后应培养自己独立写代码的能力。