图书信息管理系统.docx
《图书信息管理系统.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
![图书信息管理系统.docx](https://file1.bdocx.com/fileroot1/2022-11/26/380b2ab5-d988-4a97-aa9c-aabffebedd30/380b2ab5-d988-4a97-aa9c-aabffebedd301.gif)
图书信息管理系统
面向对象程序设计I
课程设计报告
题目:
大学图书信息管理系统
学院:
软件学院
专业:
软件工程
班级:
学号:
姓名:
指导老师:
设计日期:
2013/12/24
1.题目及程序(系统)功能设计说明
课程设计题目:
大学图书信息管理系统
基本功能:
(1)添加图书:
新添加图书的信息在创建之后会被保存到系统文件中,防止数据丢失,系统以菜单方式工作,无论什么时候打开系统都可以轻松的对其进行操作。
(2)删除图书:
可根据图书编号和书名删除想要删除的图书
(3)修改图书信息:
对陈旧的信息或误操作进行修改
(4)图书的查询;
(5)按图书编号查询;
(6)显示所有图书信息
在不明确分组或是其他信息时,您可以显示所有人的信息,以便查询
2.程序涉及的知识点
(1)主要是运用到类和对象,还有带参数的构造函数以及析构函数以及数组来实现本程序,并在主函数对各个功能模块进行调用
(2)建立了能存放类的数组。
(3)类内函数的调用以及类外函数的调用。
(4)if语句的使用和switch语句的使用以及文件的读取与创建
(5)体现数据抽象和封装;体现数据访问属性和继承属性。
(6)使用了构造的类层次
3.功能设计或算法设计
(1)功能模块图:
(2)运行过程图:
。
4.程序定义的类及函数说明
类的设计:
Book类的设计:
Bookname[strNum]:
char
number[strNum]:
char
kind[type]:
char
inttag;intnum;intadd
Book(){}
getkind():
char
getname():
char
getnum():
int
getlab():
int
setnumber(charnum[]):
void
setname(charna[]):
void
setkind(charkin[]):
void
delbook():
void
addbook(intn,char*na,char*kin):
void
disp():
void
数据成员:
charbookname[StrNum];用来存放书名。
charnumber[StrNum];用来存放图书的编号。
charkind[Type];用来存放图书的类型。
inttag;定义删除标记。
intnum;定义图书编号为整形。
intadd;增加标记。
函数成员:
Book(){}无参构造函数,用于为书名和作者姓名设置默认值。
chargetkind()用于获取图书类型。
chargetname()用于获取书名。
intgetnum()用于获取图书编号。
intgettag()用于获取删除标记。
voidsetname(charna[])用于设置书名。
voidsetkind(charkin[])用于设置类型。
voiddelbook()用于删除图书。
voidaddbook(intn,char*na,char*kin)用于增加图书。
voiddisp()用于输出图书。
函数的设计:
classBDatabase{}图书管理类的设置,实现对图书的添加,查找,删除等。
inttop;设置图书记录指针。
Bookbook[Maxb];设置图书记录(Maxb定义为最多可存储的图书数,定义为整形)。
voidclear()清空图书记录。
intaddbook(intn,char*na,char*kin)增加图书记录。
Book*query(intbookid)查找图书记录。
voidbookdata定义图书库。
voiddisp()输出。
~BDatabase()设置析构函数
main()由此函数开始对图书管理系统的主菜单进行调用与功能的实现。
函数的实现,程序的主界面的引导
5.程序清单
#defineStrNum20
#defineType20
#include
#include
#include
#include//输入/输出文件流类
usingnamespacestd;
constintMaxb=100;//最多可存储的图书
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<<"\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->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):
";
}
}
}
6.体会及总结
通过实验加深了对c++的了解,在程序设计上提高了自己的动手能力,在实践中增强了自己的编程水平。
但是因为大家能力有限,还有部分功能未能完善,例如对书名,编号的排序等等,这些局限性都是有待逐步完善的方面。
而且通过这次课程设计,我们培养了自己对C++编程的兴趣,编程能力也有所提高,但仍存在许多不足,不能独自写出功能很齐全的代码,写代码要参考很多资料,所以今后应培养我们自己独立写代码的能力。
参考文献:
《C++程序设计》(唐浩强编著)清华大学出版社