[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模式的.那么要做这个东西之前先了解一下难点在哪里 ...
随机推荐
- sublime text2 汉化
1.下载Sublime-Text-2中文包.zip 链接:http://pan.baidu.com/s/1mgYRW9q 密码:8ks6 2.将 Sublime-Text-2中文包.zip 解压,并将 ...
- (ios实战) UINavigationBar 返回按钮 文本自定义实现
在实际开发过程, 我们使用navigationController时,上一个标题过长,导致下一个界面的返回按钮文本过长,比较难看,如果标题取名过短,又不能完全表达含义. 下面时如何实现返回按钮的Tit ...
- nodejs 安装及部署遇到的问题
Error: ENOENT, stat 'C:\Users\PC_Name\AppData\Roaming\npm PC_Name是机器名 解决方法:在Roaming文件夹下创建一个叫npm的空文件夹 ...
- 编译hadoop遇到maven timeout
在编译hadoop的过程中,使用ant jar进行编译时,提示maven版本库连接超时的问题,通过搜索发现,在如下文件的位置中有repo2的版本库地址,这个地址在国内,目前不能正常的访问: 将 ...
- 通过java来批量生成身份证号
通过java来批量生成身份证号,方便来测试程序. package com.diyvc.controller.user; import java.util.Calendar; import java.u ...
- 基于XML配置的Spring MVC 简单的HelloWorld实例应用
1.1 问题 使用Spring Web MVC构建helloworld Web应用案例. 1.2 方案 解决本案例的方案如下: 1. 创建Web工程,导入Spring Web MVC相关开发包. Sp ...
- hbase shell 常用命令
进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之 ...
- C和CPP关于条件运算符的区别
条件运算符形式: cond ? expr1 : expr2; 在C语言中执行过程是: 先对cond求值,值为真返回expr1的值,否则返回expr2的值.(右值) gcc测试结果: 在Cpp中如果两个 ...
- Chrome浏览器与常用插件推荐
Chrome浏览器与常用插件推荐 官方chrome下载:http://www.google.cn/chrome/ 提示:需要FQ才能安装. 1,AdBlock 谷歌屏蔽广告: https://chro ...
- 边工作边刷题:70天一遍leetcode: day 84-3
Meeting Rooms I/II 要点:这题和skyline类似,利用了interval start有序的特点,从左向右处理,用一个heap来动态表示当前占用rooms的时间段,所以heap的si ...