一、 题目
小小图书馆
二、 中文摘要
在现实生活中,管理系统用得非常普遍,企业的人员管理、学校的学生管理、图书馆的图书管理、公司的信息管理(MIS)等等,都是管理系统的典型应用。管理系统以其灵活的操作方式、便捷的数据管理模式、友好的管理界面,得到各行各业管理者的青睐。
在现实应用中,管理系统有其明确的操作授权,每种角色以登陆的方式获取自己的权限,实现对系统数据的管理,数据的安全性有较好的保证。
随着计算机与编程技术的发展,管理系统越来越向图形化、网络化发展,如今先进的管理系统都采用网页登陆的方式进入,无需本地安装额外软件,更方便系统的维护和管理,同时,也减轻了企业的设备开销,每个管理者使用瘦客户机即可完成工作,管理成本大大降低。
本实验中要求我们模拟开发一个图书管理系统,了解管理系统各功能的分工,进一步巩固多文件联合的编程方式。同时,此系统对我们的编程思想有更高的要求。
三、 关键词
图书 管理系统 友好 数据处理
四、 前言
这次试验参考试验手册的变量设置,同时,在图书、读者数据的管理上使用向量,更加灵活,不受数组数量的限制,适合大量数据的管理。
五、 软件的开发过程
过程:
1、 编写图书类头文件与实现
2、 编写读者类头文件与实现
3、 编写图书数据库类,同时调整图书类
4、 编写读者数据库类,同时调整读者类
5、 对变量进行优化,VC++ 6.0对string类的写文件支持不佳(本人使用的是VS 2008)[1],因此所有字符串使用char数组
6、 其他优化将注释在代码文件中。
代码清单:
//book.h
#ifndef _BOOK_H_
#define _BOOK_H_
#include <iostream>
using namespace std;
/*
* 类名:Book
* 用途:储存一本图书信息
* 成员信息:number 图书编号不大于2^32-1
* title 书名长度不超过20个字符
* 更新时间:2012-04-28 11:23
*/
class Book
{
public:
Book(){};
Book(int n, const char na[]);//构造函数
const char *getTitle(); //获取书名
const char *getReader(); //获取该书读者
int getDelete(); //获取删除标记
int getNumber(); //获得图书编号
int getOnshelf(); //获取可借出标记
void setName(const char na[]); //修改书名
void delBook(); //删除图书
void addBook(int n, const char na[]); //修改图书数据
int borrowBook(const char reader[12]); //借书操作
const char *retBook(); //还书操作
void print(); //输出图书
private:
char borrower[12];//借阅者的编号
int isDeleted; //删除标记(1:已删,0:未删)
int number; //图书编号
char title[21]; //书名
int onshelf; //上架标记(1:图书已上架-可借出,0:下架-不可借出)
};
#endif
//reader.h
#ifndef _READER_H_
#define _READER_H_
#include <vector>
#include <iostream>
using namespace std;
/*
* 类名:Reader
* 用途:储存一位读者信息
* 成员信息:number 读者编号(11位字符
* name 读者姓名(10位字符
* 更新时间:2012-04-28 11:23
*
* 更新说明:1.修改操作函数,除了输出信息外,其他打印操作迁移到数据管理内
2.引入错误代码,借书、还书、删除读者均会返回操作代码
3.修改学生姓名需要密码,密码暂固化在代码中
4.所借图书用向量保存
5.取消删除标记,在数据库中添加回收站
参数缺省含义:
0:成功、存在、未被删除
1:失败、不存在、已删除
*/
const int MAXBORROW = 5; //最大借阅量
class Reader
{
public:
Reader(){borCount = 0;};
Reader(const char num[12], const char na[])
{
strcpy(number, num);
strcpy(name, na);
borCount = 0;
for(int i = 0; i < MAXBORROW; i++)
{
borbook[i] = -1;
}
}
Reader(const Reader &reader1)
{
strcpy(number, reader1.number);
strcpy(name, reader1.name);
borCount = reader1.borCount;
for(int i = 0; i < MAXBORROW; i++)
{
borbook[i] = reader1.borbook[i];
}
}
//查询函数
const char *getName(); //获取姓名
const char *getNumber(); //获得读者编号
int getMAX(); //获取最大借阅量
void print(); //输出读者信息
int getBookCount(); //获取所借图书本书
//操作函数
int setName(const char na[], const char *psd);//设置姓名
int borrowBook(int bookid); //借书操作
int retBook(int bookid); //还书操作
int clear(); //重置读者数据
private:
char number[12]; //读者编号
char name[11]; //读者姓名
int borbook[5];
int borCount; //所借本书
};
#endif
//readerdb.h
#ifndef _READER_DATABASE_H_
#define _READER_DATABASE_H_
#include "reader.h"
#include "book.h"
#include <fstream>
#include <vector>
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
class bookDB;//图书数据库声明
/************************
读者数据库类
实现功能:
************************/
class readerDB
{
public:
readerDB();
~readerDB();
int login(const char *id, const char *pwd);//管理员登陆
int login(const char *id); //读者登陆
int search(const char *readerid); //搜索读者
int getCount(); //获取读者数量
int logout(); //登出
int setbdb(bookDB &db); //设置图书数据库
int returnbook(); //智能还书
private:
bookDB *bdb; //图书数据库引用
vector<Reader> readers; //读者数据库
vector<Reader> recovery;//回收站
vector<Reader>::iterator rpoint;
int dboperator; //操作员,1为读者,0为超级管理员,2为游客
int readerCount; //读者数量
int addReader(const char *name, const char *id);//添加一位读者
int addReaders(); //从文件重定向批量添加
int readerOperating(); //读者操作
int managing(); //管理员操作
void tipsout(int choice); //提示文字输出
int delReader(const char *id);//删除一位读者
int clearDB(); //清空
int removeSame(); //去除重复(用于批量导入后的处理,取前面的)
int rimport(); //导入
int rexport(); //导出
int returnbookwhenlogin(); //登陆后还书
};
/****************************
图书数据库类
实现功能:
1.
特色:
1.不需要在类外调用的函数全部设为私有函数
2.支持模糊搜索图书(当图书量大时效率低)
****************************/
class bookDB
{
public:
bookDB();
~bookDB();
int borrowbook(const char *readerid); //借书操作
const char *returnbook(int booknumber);//还书操作,返回借书人编号
int getCount(); //获取当前图书总数
int search(const char *title); //搜索图书(支持模糊匹配)
int managing(); //管理图书数据库
int setrDB(readerDB &r); //设置读者数据库引用
private:
vector<Book> books; //图书数据库
vector<Book> recovery;//回收站
int bookCount; //图书总数
int bpoint; //临时储存一本图书的位置
readerDB *rdb; //引用读者数据库
int addBook(int number, const char *title);//添加一本图书
int addBooks(); //重定向输入到文件,从文件中添加图书
int delBook(int number); //删除一本图书
int clearDB(); //清空数据库
void tipsout(int choice);//提示
int removeSame(); //去除重复
int bimport(); //导入
int bexport(); //导出
};
#endif
//book.cpp
#include <iomanip>
#include "book.h"
/*
* 类名:Book
* 用途:Book类中函数的实现
* 更新时间:2012-04-28 11:23
*/
Book::Book(int n, const char *na)
{
this->number = n;
strcpy(this->title, na);
isDeleted = 0;
onshelf = 1;
}
const char *Book::getTitle()
{
return this->title;
}
const char *Book::getReader()
{
return this->borrower;
}
int Book::getDelete()
{
return this->isDeleted;
}
int Book::getNumber()
{
return this->number;
}
int Book::getOnshelf()
{
return this->onshelf;
}
void Book::setName(const char na[])
{
strcpy(this->title, na);
}
void Book::delBook()
{
this->isDeleted = 1;
}
void Book::addBook(int n, const char na[])
{
this->number = n;
strcpy(this->title, na);
this->onshelf = 1;
this->is