图书信息管理系统
——C++面向对象实训报告
- 需求分析
1. 基本功能和要求
- 系统必须是菜单操作方法,进入功能必须打开菜单,并且每个菜单都有相应的帮助,菜单之间能够灵活的切换。
用户分三种权限:一般的读者用户,图书管理员,系统管理员。 - 根据登陆方式,选择相应的操作方式;
如果是一般的读者用户,就只能按照各种方式查看数据,并且只能查看自己的信息和借阅情况,修改自己的信息等等功能;
如果是图书管理员,除了可以查看数据外还能编辑图书数据以及修改图书数据等功能。
如果是系统管理员,他可以拥有图书管理员的所有功能,并且可以创建用户,授权用户权限等功能。
(3) 能够对图书基本信息、图书的借阅人信息进行统计,统计的结果能够以表格的形式来表示。
(4) 图书基本信息 、图书的借阅人信息存储在相应的文件中。数据的组织形式要求必须使用链表或者二叉树来实现。
(5) 登录的用户名和密码应该存储在单独的文件中,最好做一定的加密算法。
(6) 系统要求界面友好,易操作。
4.2 统计功能
(1)统计馆藏书籍总数、已借出数据总数、在馆书籍数等。
(2)统计馆藏书籍总金额、馆藏书籍的平均价格。
4.3 查找功能 - 可以根据图书的作者查找。
- 可以根据图书的名称查找。
- 可以根据图书的出版社查找。
- 可以根据图书的单价查找。
- 可以根据图书的出版日期查找。
4.4系统的操作 - 有文件的保存
- 有文件的打开和载入
- 系统在退出时,要有相应的提示
- 系统总体结构图
- 主要类说明
- User类
class User
{
public:
User(const char* name,const char* password);
virtual ~User();
const char* GetName();//获得用户名
const char* GetPassword();//获得密码
void Exit();//退出系统
void ChangePassword();//修改密码
void FindBook();//查找图书
void ShowFindBook(const char* str,int n);//显示查找结果
void PrintBook(const BOOKINFO &book);//输出图书信息
void CountBook();//统计图书信息
void ShowBook();//显示全部图书信息
void EditBook();//编辑图书信息
void AddBook();//添加图书新
void ModifyBook();//修改图书信息
void DeleteBook();//删除图书信息
virtual void ShowMenu();//显示菜单
virtual bool IsExist();//判断是否存在改用户
private:
char m_name[20];//用户名
char m_password[10];//密码
}; - Reader类
class Reader:public User
{
public:
Reader(const char* name,const char* password);
~Reader();
void BorrowBook();//借阅图书
virtual void ShowMenu();//显示菜单
virtual bool IsExist();//判断是否存在该用户
}; - Librarian类
class Librarian:public User
{
public:
Librarian(const char* name,const char* password);
~Librarian();
virtual void ShowMenu();//显示菜单
virtual bool IsExist();//判断是否存在该用户
}; - Admin类
class Admin:public User
{
public:
Admin(const char* name,const char* password);
~Admin();
void AddLibrarian();//添加管理员
void AddReader();//添加读者
virtual void ShowMenu();//显示菜单
virtual bool IsExist();//判断是否存在该用户
};
- 主要数据结构
typedef struct UserInfo
{
char name[20];//用户名称
char password[10];//用户密码
}USERINFO;
typedef struct BookInfo
{
char id[10];//图书编号
char name[20];//图书名称
char author[20];//图书作者
char press[20];//出版社
char date[20];//出版日期
int count;//借出次数
double price;//图书单价
}BOOKINFO; - 全局变量和函数说明
list<USERINFO> g_allReader;//读者数据
list<USERINFO> g_allLibrarian; //图书管理员
list<USERINFO> g_allAdmin;//系统管理员
list<BOOKINFO> g_books;//图书数据
bool LoadFiles();//加载数据文件
void SaveFiles();//保存数据文件
void ShowLoginMenu(char &ch);//显示登录菜单
bool Login(char ch);//登录系统 - 重点函数分析
Login函数是实习登录系统功能的主要函数,本函数利用了C++的多态特性,使用了虚函数的动态绑定技术,实现了统一的登录接口
bool Login(char ch)
{
User *pUser=NULL;
char name[20];
char password[10];
cout<<"输入用户名:";
cin>>name;
cout<<"输入密码:";
cin>>password;
switch(ch)
{
case 'a':
case 'A':
{
pUser=new Reader(name,password);
break;
}
case 'b':
case 'B':
{
pUser=new Librarian(name,password);
break;
}
case 'c':
case 'C':
{
pUser=new Admin(name,password);
break;
}
case 'e':
case 'E':
return true;
default:
return false;
}
if(pUser->IsExist())
{
pUser->ShowMenu();//动态绑定子类
}
else
{
cout<<"用户名或密码错误!"<<endl;
system("pause");
}
delete pUser;
return false;
} - 程序运行结果
(1)登录界面
(2)读者主界面
(3)图书管理员主界面
(4)系统管理员主界面
(5)显示图书信息