资源描述
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
东华理工大学信息工程学院
《面向对象程序设计》课程设计报告
图书馆管理系统
指导教师: 谢小林
姓名: 陈明明
学号: 40030117
班级: 1140301
1月10日
一、 需求分析:
建立一个图书馆管理系统,能够处理以下对象
.图书馆基本信息
.图书馆的书籍
.图书馆管理员
.读者信息
二、 程序的主要功能:
1.查询图书馆的总信息
2.查询图书馆管理员的信息
3.查询图书馆藏书信息
4.存入新书( 有管理员加入, 需进行身份验证)
5.旧书处理
6.存入新的管理员的信息
7.修改管理员的信息(增加工龄,加薪)
8.两所图书馆的最大藏书量之和
9.根据书名检索书刊信息
10.查询读者的借阅信息
11.查询读者信息( 包括借书情况, 到期时间, 罚款情况。)
12.管理员能够修改用户的欠款和交款的金额
13.读者氛围学生、 研究生和教师。所有学生的租期为1月, 所有教师的租期为2月。
三、 程序运行平台:
软件环境: w7
编程软件
VC++6.0
运行平台: Win32
硬件: 普通个人pc机
四、 系统总框架图
五、 程序类的说明:
类的设计
Book类的设计:
(1)数据成员
charname[StrNum];用来存放书名。
charnumber[StrNum];用来存放图书的编号。
charkind[Type];用来存放图书的类型。
inttag;定义删除标记。
intnum;定义图书编号为整形。
intadd;增加标记。
(2)函数成员
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()设置析构函数, 将book[]写到book.txt文件中
voidBDatabase::bookdata()由此函数开始对图书管理系统的主菜单进行调用与功能的实现。( 界面参看执行界面部分)
最后用main()函数的实现, 程序的主界面的引导
七、 比较有特色的函数
classBDatabase{}图书管理类的设置, 实现对图书的添加, 查找, 删除等。
inttop;设置图书记录指针。
Bookbook[Maxb];设置图书记录( Maxb定义为最多可存储的图书数, 定义为整形) 。
voidBDatabase::bookdata()由此函数开始对图书管理系统的主菜单进行调用与功能的实现。( 界面参看执行界面部分)
八、 存在的不足与对策
使用多关键字进行查询时, 我是使用以下语句: if(bname!=null){sqlStr+="andBnamelike'%"+bname+"%'";}, 实现判断是否为空, 从而利用给进条件实现查询, 粗看之下并没有什么错误, 可是在运行是却出现了异常, 在找了很久被找出错误之后, 我开始考虑是否是语法错误, 而是使用MySQL的命令行模式来进行调试, 在MySQL命令行中运行时却并没有出现错误, 完全正确的查询出我想要的结果, 在试了很久之后, 终于发现了上面的语句有两个小的细节错误, 第一个错误就是"andBname这里没有空格, 正确格式应该是"andBname, 第二个错误是'%"+bname+"%'"中含有多余的空格, 正确答案是'%"+bname+"%'"; 两个错误都是由于空格引起的, 一个是少了空格, 另一个是含有多余的空格。
九、 程序源代码
#defineStrNum20
#defineType20
#include<iostream>
#include<iomanip>
#include<string>
#include<fstream>//输入/输出文件流类
usingnamespacestd;
constintMaxb=100;//最多可存储的图书
classBook
{
private:
inttag;//删除标记
intnum;//图书编号
intadd;//增加标记
charnumber[StrNum];//编号
charname[StrNum];//书名
charkind[Type];//图书类型
public:
Book(){}
chargetkind()//获取图书类型
{
returnkind[Type];
}
chargetname() //获取书名
{
returnname[StrNum];
}
intgetnum()//获取图书编号
{
returnnum;
}
intgettag()//获取删除标记
{
returntag;
}
voidsetname(charna[])//设置书名
{
strcpy(name,na);
}
voidsetkind(charkin[])//设置类型
{
strcpy(kind,kin);
}
voiddelbook()//删除图书
{
tag=1;
}
voidaddbook(intn,char*na,char*kin)//增加图书
{
tag=0;
num=n;
strcpy(name,na);
strcpy(kind,kin);
}
voiddisp()//输出图书
{
cout.flags(ios::left);//设置对齐的标志位为左
cout<<setw(15)<<num<<setw(20)<<name<<setw(15)<<kind<<endl;
}
};
/*****************************************************************************************/
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].gettag()==0)
{
return&book[i];
}
returnNULL;
}
voidbookdata();//图书库
voiddisp()
{
for(inti=0;i<=top;i++)
if(book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析构函数, 将book[]写到book.txt文件中
{
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();
}
};
voidBDatabase::bookdata()
{
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<<"输入图书编号:"<<endl;
cin>>bookid;
cout<<"输入图书类型:"<<endl;
cin>>newType;
cout<<"输入图书书名:"<<endl;
cin>>bname;
addbook(bookid,bname,newType);
break;
case'2':
cout<<"输入图书编号:"<<endl;
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<<endl;
break;
}
cout<<"输入新的书名:"<<endl;
cin>>bname;
b->setname(bname);
cout<<"输入新的类型:"<<endl;
cin>>bkind;
b->setkind(bkind);
break;
case'3':
cout<<"读入图书编号:"<<endl;
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<<endl;
break;
}
chartg1;
cout<<"确定要删除此记录吗?(Y/N)"<<endl;
cin>>tg1;
if(tg1!='n'&&tg1!='N')
{
b->delbook();
cout<<"已成功删除该书记录! "<<endl;
break;
}
case'4':
cout<<"读入图书编号:"<<endl;
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<<endl;
break;
}
cout<<"图书编号图书名称图书类型\n";
b->disp();
break;
case'5':
cout<<"图书编号图书名称图书类型\n";
disp();
break;
case'6':
chartg2;
cout<<"确定要清空所有记录吗?(Y/N)"<<endl;
cin>>tg2;
if(tg2!='n'&&tg2!='N')
{
clear();
cout<<"已成功清空记录! "<<endl;
break;
}
case'0':
break;
default:cout<<"输入错误, 请从新输入(数字为0~6):";
}
}
}
//main()函数的实现, 程序的主界面的引导
voidmain()
{
charchoice;
BDatabaseBookDB;
while(choice!='0')
{cout<<"\t******************************************************************\n";
cout<<"\n\n";
cout<<"\n\n\t\t\t欢迎使用图书管理系统\n\n";
cout<<endl<<endl<<"\t\t\t图书管理系统\n\n\n\n";
cout<<setw(83)<<"by( 姓名——) \n\n\n\n";
cout<<"\n\n";
cout<<"\t******************************************************************\n";
cout<<"\t\t\t1进入系统\n\n\t\t\t0离开"<<endl;
cout<<"请选择:";
cin>>choice;
switch(choice)
{
case'1':
BookDB.bookdata();
break;
case'0':
cout<<"\n\n\t\t\t欢迎再次使用图书管理系统\n\n";
break;
default:cout<<"输入错误, 请从新输入: ";
}
}
}
展开阅读全文