[CareerCup] 8.5 Online Book Reader System 在线读书系统
8.5 Design the data structures for an online book reader system.
这道题OOB的题让我们设计一个在线读书系统,还是没有任何提示,所以发挥空间很大。根据书上的解答,我们设计一个具有基本功能的系统:
1. 用户会员的建立和延长
2. 搜索书库中的书
3. 在线读书
4. 每次只能有一个活跃用户
5. 每个读者只能读一本书
那么最基本的先实现书类Book,和用户类User,然后是书库类Library,用户管理类UserManager,显示类Display,最后是整合类OnlineReaderSystem,具体实现代码如下:
class Book {
public:
Book(int id, string det): _bookId(id), _details(det) {}
int getID() { return _bookId; }
void setId(int id) { _bookId = id; }
string getDetails() { return _details; }
void setDetails(string d) { _details = d; }
private:
int _bookId;
string _details;
};
class User {
public:
User(int id, string details, int accountType): _userId(id), _details(details), _accountType(accountType) {}
void renewMembership() {}
int getID() { return _userId; }
void setID(int id) { _userId = id; }
string getDetails() { return _details; }
void setDetails(string details) { _details = details; }
int getAccountType() { return _accountType; }
void setAccountType(int t) { _accountType = t; }
private:
int _userId;
string _details;
int _accountType;
};
class Library {
public:
Library() {}
Book* addBook(int id, string details) {
if (_books.find(id) == _books.end()) return nullptr;
Book *book = new Book(id, details);
_books[id] = book;
return book;
}
bool remove(Book *b) { return remove(b->getID()); }
bool remove(int id) {
if (_books.find(id) == _books.end()) return false;
_books.erase(id);
return true;
}
Book* find(int id) {
if (_books.find(id) == _books.end()) return nullptr;
return _books[id];
}
private:
unordered_map<int, Book*> _books;
};
class UserManager {
public:
UserManager() {}
User* addUser(int id, string details, int accountType) {
if (_users.find(id) == _users.end()) return nullptr;
User *user = new User(id, details, accountType);
_users[id] = user;
return user;
}
bool remove(User *u) { return remove(u->getID()); }
bool remove(int id) {
if (_users.find(id) == _users.end()) return false;
_users.erase(id);
return true;
}
User* find(int id) {
if (_users.find(id) == _users.end()) return nullptr;
return _users[id];
}
private:
unordered_map<int, User*> _users;
};
class Display {
public:
Display() {}
void displayUser(User *user) {
_activeUser = user;
refreshUsername();
}
void displayBook(Book *book) {
_pageNumber = ;
_activeBook = book;
refreshTitle();
refreshDetails();
refreshPage();
}
void turnPageForward() {
++_pageNumber;
refreshPage();
}
void turnPageBackward() {
--_pageNumber;
refreshPage();
}
void refreshUsername() {} // ...
void refreshTitle() {} // ...
void refreshDetails() {} // ...
void refreshPage() {} // ...
private:
Book *_activeBook;
User *_activeUser;
int _pageNumber = ;
};
class OnlineReaderSystem {
public:
OnlineReader() {
_userManager = new UserManager();
_library = new Library();
_display = new Display();
}
Library* getLibrary() { return _library; }
UserManager* getUserManager() { return _userManager; }
Display* getDisplay() { return _display; }
Book* getActiveBook() { return _activeBook; }
void setActiveBook(Book *book) {
_activeBook = book;
_display->displayBook(book);
}
User* getActiveUser() { return _activeUser; }
void setActiveUser(User *user) {
_activeUser = user;
_display->displayUser(user);
}
private:
Library *_library;
UserManager *_userManager;
Display *_display;
Book *_activeBook;
User *_activeUser;
};
[CareerCup] 8.5 Online Book Reader System 在线读书系统的更多相关文章
- Atitit 在线支付系统功能设计原理与解决方案 与目录
Atitit 在线支付系统功能设计原理与解决方案 与目录 1.1. 支付系统1 1.2. 独立的支付子体系..微服务架构..1 1.3. 参考书籍1 支付战争 [The PayPal Wars:Bat ...
- 基于ssh框架的在线考试系统开发的质量属性
我做的系统是基于ssh框架的在线考试系统.在线考试系统有以下几点特性:(1)系统响应时间需要非常快,可以迅速的出题,答题.(2)系统的负载量也需要非常大,可以支持多人在线考试(3)还有系统的安全性也需 ...
- WSB功能分解(在线考试系统)
对在线考试系统进行WSB功能分解至三级子功能,并且预估每个子功能所需时间. 一级功能 二级功能 三级功能 预估花费时间(小时) 考试管理员功能模块 培训计划 查询 1.5 重置 1 新增计划 1.5 ...
- Bug测试报告--在线考试系统--金州勇士
项目名:在线考试系统 组名:金州勇士 测试者:宫丽君(nice!团队) 代码地址: ssh:git@git.coding.net:handsomeman/examm.git https://g ...
- 多功能表单填报系统V1.2.1-适用于在线报名系统、调查、数据收集等
多功能表单系统V1.2.1 前台:http://www.schoolms.net/mysoft/biaodan/index.asp 后台:http://www.schoolms.net/myso ...
- 基于HTTP Live Streaming(HLS) 搭建在线点播系统
1. 为何要使用HTTP Live Streaming 可以参考wikipedia HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议.是 ...
- JavaWeb项目开发案例精粹-第3章在线考试系统-007View层
0.login.jsp <%@ page language="java" import="java.util.*" pageEncoding=" ...
- Android进阶笔记12:Manymo(在线安卓系统模拟器工具)
Manymo: 在线安卓系统模拟器工具是一款启动速度快,且在浏览器中就能运行流畅.你可以使用它来测试你的安卓应用,他最多能支持42种屏幕尺寸和系统版本. 长久以来,Android开发者面临的困境之一就 ...
- zzzzw_在线考试系统①准备篇
在弄完购物系统之后,小博也了解了解怎么用struts这个框架捣鼓一个在线考试系统 购物系统用的是MVC模式,现在这个struts2原理上也是基于MVC模式的.那么要做这个东西之前先了解一下难点在哪里 ...
随机推荐
- 8 Regular Expressions You Should Know
Regular expressions are a language of their own. When you learn a new programming language, they're ...
- Android之 左右滑动菜单
近来学习了极客学院有关于界面左右滑动的视频,就在这里写个博客,巩固一下知识点,以免忘了. 这里主要介绍界面是如何左右滑动的: 1.首先我们应该设置好将要滑动的三个界面,即leftMenu.middle ...
- scanf 用法及陷阱(转)
函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备( ...
- H5文件操作API
引言 在之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很难进行跨平台.或者跨浏览器.跨设备等情况下实现统一的表现,从另外一个 ...
- asp接收jquery post 中文乱码问题!
这个问题的解决主要还是通过url编码对中文进行处理,在服务后台代码中,进行url解码处理. 但是问题来了,asp没有解码的内置函数,只有一个编码的内置函数UrlEncode,而用UrlEncode进行 ...
- 一个不错的shell 脚本教程 入门级
一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂 建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行s ...
- java String部分源码解析
String类型的成员变量 /** String的属性值 */ private final char value[]; /** The offset is the first index of the ...
- EXCEL IF 函数 模糊查询
A列都是产品名,比如衬衫,长袖衬衫,短袖衬衫,短裙,长裙 搜索A列的产品名,凡是含有“衬衫”的一律在B列对应行输出“衬衫”,凡是含有“裙”字的一律输出“裙子”在B列对应行,请教一下怎么写函数,本来用I ...
- [转]NPOI TestFunctionRegistry.cs
本文转自:https://github.com/tonyqus/npoi/blob/master/testcases/main/SS/Formula/TestFunctionRegistry.cs ...
- CocurrentHashMap和Hashtable的区别
集合类是Java API的核心,但是我觉得要用好它们是一种艺术.我总结了一些个人的经验,譬如使用ArrayList能够提高性能,而不再需要过时的Vector了,等等.JDK 1.5引入了一些好用的并发 ...