- 系统需求分析
-
图书借阅信息管理程序是典型的MIS(Management Information System)软件,是由在各类企业和事业单位中使用最为普遍的软件之一人事信息管理程序拓展而来。设计、编写一个简单的图书借阅信息管理程序对于学习软件设计的一般方法(如何从分析程序的功能需求入手;如何进行以满足需求的类结构、类对象之间的动态协作和实现功能事务的活动为主要内容的总体设计;如何以总体设计为依据,完成以各类算法设计和工程化编码实现为主要内容的详细设计;以及如何对可以运行的程序进行必要测试。)和了解MIS类软件的特点是十分必要的。我们所要设计的《图书借阅信息管理程序》的功能需求如下所示:
- 管理员需求
管理员具有最高权限,管理整个系统,功能概览如下:
- 装载用户信息文件:所有用户信息应能永久保存在一个特定的磁盘文件中。在系统开始运行时应首先打开文件,将文件中的全部信息装载到内存中存放这些信息的对应用户信息集合中。
- 显示所有用户主要信息:根据读入文件顺序显示当前用户信息集合中所有用户的主要信息(学号、密码、性别、姓名、院系、班级编号、手机号码、当前借阅书籍、历史借阅记录)。
- 添加一个新用户信息:通过交互界面输入一个新用户的主要信息,并将该用户信息记录添加到用户信息集合中。【注意集合中不允许有重复的信息记录。】
- 查询用户信息:通过交互界面确定待查询人员的信息,在信息集合中搜索待查询的人员,并根据搜索结果显示不同的信息:如果指定的人员信息记录存在,则显示该人员的详细信息;若指定的人员信息记录不存在,则提示被查询人员不存在。【支持输入条件不完全查找。】
- 批量追加用户:通过系统交互界面选择磁盘文件,将文件中的全部信息装载到内存中存放这些信息的对应用户信息集合中。
- 用户信息排序:可在用户信息界面选择任意项进行上升或下降排序,并在排序操作后显示全部用户的主要信息。
- 修改用户信息:可在用户信息界面选择任意记录点击修改按钮进行修改,直接修改对应项(学号、密码、性别、姓名、院系、班级编号、手机号码),并在编辑修改操作结束后确认修改提醒修改成功后显示修改后的信息。
- 删除用户信息:可在用户信息界面选择任意记录点击删除按钮进行删除。
- 保存人员信息文件:在系统退出运行时,会自动更新用户信息文件到磁盘中。
- 装载图书信息文件:所有图书信息应能永久保存在一个特定的磁盘文件中。在系统开始运行时应首先打开文件,将文件中的全部信息装载到内存中存放这些信息的对应图书信息集合中。
- 显示所有图书主要信息:根据读入文件顺序显示当前图书信息集合中所有图书的主要信息(书编号、书名、作者、出版社、书总数、已借出的数量、出版日期)。
- 添加一本新图书信息:通过交互界面输入一本新图书的主要信息,并将该图书信息记录添加到图书信息集合中。【注意集合中不允许有重复的信息记录。】
- 查询图书信息:通过交互界面确定待查询图书的信息,在信息集合中搜索待查询的图书,并根据搜索结果显示不同的信息:如果指定的图书信息记录存在,则显示该图书的详细信息;若指定的图书信息记录不存在,则提示被查询图书不存在。【支持输入条件不完全查找。】
- 批量追加图书:通过系统交互界面选择磁盘文件,将文件中的全部信息装载到内存中存放这些信息的对应图书信息集合中。
- 图书信息排序:可在图书信息界面选择任意项进行上升或下降排序,并在排序操作后显示全部图书的主要信息。
- 修改图书信息:可在图书信息界面选择任意记录点击修改按钮进行修改,直接修改对应项,并在编辑修改操作结束后确认修改提醒修改成功后显示修改后的信息。
- 删除图书信息:可在图书信息界面选择任意记录点击删除按钮进行删除。
- 保存图书信息文件:在系统退出运行时,会自动更新图书信息文件到磁盘中。
- 借阅总排行榜:统计当前图书信息集合中书籍被借出数量前十名。
- 用户借阅排行榜:统计当前用户信息集合中用户借书数量前十名。
- 学院借阅排行榜:统计当前各个院系借书数量前十名。
- 男女阅读量对比:统计男女生借阅数量。
- 图片导出:可以图片格式导出统计界面当前统计量至指定路径。
- 切换账号:返回登录欢迎界面切换账号重新登录。
- 修改密码:通过交互界面输入账号和新密码,若账号输入不正确则提示账号错误,若账号输入正确且新密码输入不为空则提示修改完成。
- 退出:点击退出后,系统退出,交互界面关闭
用户分为学生和老师群体,两者所能做的操作都是一样的,唯一不同点在于借书的上限不同,学生12本,老师20本。
新书导读栏目用户可以查看到图书信息库里当前新出版的十本书的主要信息(书编号、书名、作者、出版社、书总数、已借出的数量、出版日期),在新书导读的界面上选择借书、预约、查看评价进行操作。
- 借书:查看图书信息库里当前所有图书的主要信息(书编号、书名、作者、出版社、书总数、已借出的数量、出版日期),在借书的界面上选择借书、预约、查看评价进行操作,借书期限是30天。
- 预约:预约界面可以查看到当前预约书籍的主要信息(书编号、书名、作者、出版社、书总数、已借出的数量、出版日期),可在预约的界面上选择借书、取消预约。如果预约的书籍有库存了,在用户登录时会自动检索并弹窗提醒用户。
- 续借:用户可在当前借阅列表中点击续借按钮选择续借,续借期限增加30天。
- 还书:还书操作可在新书导读、借书界面、当前借书记录点击按钮执行操作;如果超过借阅期限未还书,当用户登录系统时就会自动弹窗提醒,如有未还书籍,用户不可借书、预约;还书时可以对该书进行匿名评价,评价会记录到图书信息中。
- 查看当前已借列表:用户通过交互界面可点击当前已借查看用户现在正在借阅的书籍主要信息(书编号、书名、作者、出版社、书总数、已借出的数量、出版日期、借书时间、应还时间),并且可以在该栏目下进行续借、还书操作。
- 查看全部借书记录:用户通过交互界面可点击查看用户的借阅记录,显示借阅过的书籍的主要信息(书编号、书名、作者、出版社、书总数、已借出的数量、出版日期、借书时间、还书时间)。
- 切换账号:返回登录欢迎界面切换账号重新登录。
- 修改密码:通过交互界面输入账号和新密码,若账号输入不正确则提示账号错误,若账号输入正确且新密码输入不为空则提示修改完成。
退出:点击退出后,系统退出,交互界面关闭
从软件的需求分析中不难看出:本软件要处理的数据就是描述用户信息和图书信息的各种数据,因此如何组织这些数据、如何操作这些数据、如何在内存和磁盘中存储这些数据、如何为操作这些数据提供交互界面等就是系统总体设计的主要任务。
组成一个《简单图书借阅管理信息系统》的类可以分为两种:一种是组织数据和完成对数据的各项操作的类,另一种是辅助各项数据操作实现的交互界面类。
- 组织数据和操作数据的类
描述用户的各种信息是本软件中最主要的数据,因此,应该将描述一个用户的所有信息数据组织在一起,并将对这些数据的基本操作一起封装在一个类中,该信息类可以命名为Person。如何将所有人员(Person对象)信息数据组织在一起对于安全、高效、方便地管理和访问这些数据非常重要的,由于使用者分成管理员、老师、学生,这三个类的属性和基本操作以及它们之间的静态关系如下:
- 提供交互界面的类
设计这些类的目的是为用户使用《简单图书借阅信息管理系统》的各种功能提供友好、美观的交互界面。归纳功能的操作要求和用户的使用习惯,本系统中的交互界面类应该包括:提供单个用户信息输入/输出/编辑的界面adminster、查询用户界面searchUser、查询图书界面searchBook、增加图书界面addbook、增加用户界面adduser、管理员修改密码界面adminchangepassword、用户修改密码界面userchangepassword、用户界面user。如果使用GUI(Graphics User Interface),这些交互界面类一般都从提供了基本交互功能的系统基类中派生定义的。因此这些类的设计与系统开发环境和使用什么基类库有着直接关系。在本系统的设计中我们选择了C++开发环境,并使用QT作为基类支持。
依据系统需求分析中的用例功能描述,使用顺序图分析上述各类对象在每个用例功能中的相互作用是进一步确定各类的属性和操作,特别是确定类对使用者提供的接口协议是十分关键的。同时为各种系统功能的算法设计和代码实现提供最重要的依据。
- 装载人员信息文件
* ifstream是标准输入文件流类,open和close是该类的成员函数。
- 主要功能顺序图
在类的设计完成后,就可以按照需求模型中的功能事务描述,通过绘制整个软件的活动图和各个功能事务执行过程的活动图,设计软件的运行模型。
1. 简单图书借阅信息管理系统的总活动图
- 装载人员信息文件功能活动图
- 添加用户信息记录功能活动图
- 删除用户信息记录功能活动图
- 修改指定人员信息记录功能活动图
- 修改密码功能活动
- 切换账号功能活动
- 退出软件运行功能活动图
- 系统详细设计
- 类的详细设计
根据模型中的类图和相应的类成员描述设计软件中各个类的定义代码和主要成员函数的实现算法。
- UserPerson类
class UserPerson : public Person
{
protected:
string college; //学院
string classID; //班级
vector<string> reservation; //预约书籍
vector<BookAndBorrowTime> borrowInfor; //当前借阅
vector<BookAndBorrowTime> borrowRecord; //借阅记录
public:
bool addReservation(string isbn) // 增加预约
void delReservation(string isbn) // 取消预约
bool checkReservation(BookTable bookTable) // 检查预约书籍有无库存
bool modifyReturnTime(string bookID,int flag,int day = 0) //flag==1为还书,flag==2为续借
bool ifDueSoon() // 判断是否有书籍即将到期未还,如有,在用户登录时弹窗提醒
……
}
- Account_Password账号密码类
class Account_Password
{
protected:
string account;
string password;
public:
Account_Password() {}
Account_Password(string account_in, string password_in)
Account_Password(const Account_Password &in)
bool Judge_exist(Account_Password account_exist) //判断账号是否存在,存在返回true,不存在返回false
int Modify(string password_in)
friend class Account_group;
Set & Get方法……
};
...
...
...
《简单图书借阅信息管理系统》是一个菜单驱动的程序,程序一旦运行会首先显示一个登录和注册的欢迎界面。用户可以根据需要选择身份登录,执行相应的功能。每次重新运行,系统都会自动从信息库文件中装载信息记录。
- 管理员界面——用户界面
- 管理员界面——图书界面
- 管理员界面——统计界面
- 用户界面——借书
...
...
...
在使用英特尔酷睿i7-9750H(基本频率2.60GHz,睿频4.5GHz,线程数12,内核数6,详情英特尔® 酷睿™ i7-9750H 处理器(12M 高速缓存,高达 4.50 GHz) 产品规范 (intel.com))同时使用系统“任务管理器”监控运行,《简单图书借阅信息管理系统》,在执行各项操作时,查看“任务管理器”所检测到的CPU占用状态的变化和瞬间峰值:检测结果《简单图书借阅信息管理系统》的各项功能运行时,CPU占用的平均值在2.5%上下波动,基本处于2.5%以下,最大峰值不超过6%,结果表明该软件在运行过程中并未产生不合理CPU占用。
项目完整方案及学习源码地址: