图书信息管理系统.docx

上传人:b****3 文档编号:3899338 上传时间:2022-11-26 格式:DOCX 页数:13 大小:50.10KB
下载 相关 举报
图书信息管理系统.docx_第1页
第1页 / 共13页
图书信息管理系统.docx_第2页
第2页 / 共13页
图书信息管理系统.docx_第3页
第3页 / 共13页
图书信息管理系统.docx_第4页
第4页 / 共13页
图书信息管理系统.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

图书信息管理系统.docx

《图书信息管理系统.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统.docx(13页珍藏版)》请在冰豆网上搜索。

图书信息管理系统.docx

图书信息管理系统

 

面向对象程序设计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++程序设计》(唐浩强编著)清华大学出版社

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1