小小图书馆 - 一次程序作业 - C++控制台程序

本次程序作业是模拟开发一个图书管理系统,使用C++编写。系统包括图书类、读者类以及数据库类,通过控制台操作,实现了数据的增删查改。虽然没有图形化界面,但具备良好的数据处理能力和一定的安全性。代码组织清晰,使用向量管理数据,适合大量数据的存储。

一、 题目

小小图书馆

 

二、 中文摘要

在现实生活中,管理系统用得非常普遍,企业的人员管理、学校的学生管理、图书馆的图书管理、公司的信息管理(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值