[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模式的.那么要做这个东西之前先了解一下难点在哪里 ...
随机推荐
- 烂泥:ubuntu安装vmtools
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近由于工作需要,需要使用桌面版的linux系统,所以就选择了ubuntu.同时为了方便使用,就在VM中安装ubuntu. 但是为了文件以及操作的方便就 ...
- nyoj 211 Cow Contest
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=211 思路:我的思路是对每一个点,向上广搜,向下广搜,看总共能不能搜到n-1个结点,能,表 ...
- Linux之存储及文件系统管理
一.存储管理 1.各种存储设备在Linux系统中对应的文件名 2.硬盘结构及分区 1).硬盘结构 2) .为什么要进行硬盘分区: a) 更容易管理和控制系统,因为相关的文件和目录都放在一个分区中. b ...
- pageX和pageY
pageX() 属性是鼠标指针的位置,相对于文档的左边缘. pageY() 属性是鼠标指针的位置,相对于文档的上边缘. 例1 $(document).mousemove(function(e){ $( ...
- BI测试工具之跨数据库数据对比,支持oracle,sqlserver
应用场景: 本周在进行SIT,我帮助仅有的一个测试妹妹对部分表进行数据质量验证,第一步需要做的就是比对source与stage表的table definition 与 数据内容的一致性. 本项目使用的 ...
- CORDIC原理与FPGA实现(1)
CORDIC算法的来历与用途大家网上随处可以见到,这里写 一下自己的理解. 将P(x,y)旋转角度a得到新的坐标P’(x’,y’).这里的坐标变换为: x’= x cos(a) – y sin(a) ...
- Golang tips ----- 函数
1.在函数调用时,Golang没有默认参数值 2.一个函数声明如果没有函数体,表面该函数不是由Golang实现的,这样的声明定义了函数标识符 3.拥有函数名的函数只能在包级语法块中被声明 4.函数值( ...
- 【MVC 4】6.SportsSore:导航
作者:[美]Adam Freeman 来源:<精通ASP.NET MVC 4> 前面的文章[MVC 4]5.SportsSore —— 一个真实的应用程序 建立了 Sports ...
- leetcode-Single NumberII
https://leetcode.com/problems/single-number-ii/ 很无耻的又一次使用了黑暗料理... class Solution: # @param {integer[ ...
- .Net Framework 4.0 内部排序探索
简介 一时好奇心起,想一窥.Net Framework 4.0内部究竟是使用何种算法排序.以前听人说Framework内部是使用的快速排序,但究竟耳听为虚,眼见为实.主要通过JetBrains dot ...