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 在线读书系统的更多相关文章

  1. Atitit 在线支付系统功能设计原理与解决方案 与目录

    Atitit 在线支付系统功能设计原理与解决方案 与目录 1.1. 支付系统1 1.2. 独立的支付子体系..微服务架构..1 1.3. 参考书籍1 支付战争 [The PayPal Wars:Bat ...

  2. 基于ssh框架的在线考试系统开发的质量属性

    我做的系统是基于ssh框架的在线考试系统.在线考试系统有以下几点特性:(1)系统响应时间需要非常快,可以迅速的出题,答题.(2)系统的负载量也需要非常大,可以支持多人在线考试(3)还有系统的安全性也需 ...

  3. WSB功能分解(在线考试系统)

    对在线考试系统进行WSB功能分解至三级子功能,并且预估每个子功能所需时间. 一级功能 二级功能 三级功能 预估花费时间(小时) 考试管理员功能模块 培训计划 查询 1.5 重置 1 新增计划 1.5 ...

  4. Bug测试报告--在线考试系统--金州勇士

    项目名:在线考试系统 组名:金州勇士 测试者:宫丽君(nice!团队) 代码地址: ssh:git@git.coding.net:handsomeman/examm.git     https://g ...

  5. 多功能表单填报系统V1.2.1-适用于在线报名系统、调查、数据收集等

    多功能表单系统V1.2.1    前台:http://www.schoolms.net/mysoft/biaodan/index.asp 后台:http://www.schoolms.net/myso ...

  6. 基于HTTP Live Streaming(HLS) 搭建在线点播系统

    1. 为何要使用HTTP Live Streaming 可以参考wikipedia HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议.是 ...

  7. JavaWeb项目开发案例精粹-第3章在线考试系统-007View层

    0.login.jsp <%@ page language="java" import="java.util.*" pageEncoding=" ...

  8. Android进阶笔记12:Manymo(在线安卓系统模拟器工具)

    Manymo: 在线安卓系统模拟器工具是一款启动速度快,且在浏览器中就能运行流畅.你可以使用它来测试你的安卓应用,他最多能支持42种屏幕尺寸和系统版本. 长久以来,Android开发者面临的困境之一就 ...

  9. zzzzw_在线考试系统①准备篇

    在弄完购物系统之后,小博也了解了解怎么用struts这个框架捣鼓一个在线考试系统 购物系统用的是MVC模式,现在这个struts2原理上也是基于MVC模式的.那么要做这个东西之前先了解一下难点在哪里 ...

随机推荐

  1. Jmeter之HTTP Request Defaults

    一.HTTP Request Defaults的作用: 该组件可以为我们的http请求设置默认的值.假如,我们创建一个测试计划有很多个请求且都是发送到相同的server,这时我们只需添加一个Http ...

  2. P2P行业专业术语(最全)

    网贷:P2P网络借款,指个体与个体之间通过网站实现借贷,中间网站称为网贷平台,简称平台. 角色类 投资者:在网站上把钱借出去的用户,年龄必须是18周岁以上具有中国国籍的公民. 借款者(贷款者):是指有 ...

  3. poj 3169 Layout 差分约束模板题

    Layout Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6415   Accepted: 3098 Descriptio ...

  4. Swift学习笔记--变量与常量

    1.Swift是一门强类型语言,不能为变量赋予其自身数据类型之外的值: 2.声明变量使用var关键字,声明常量使用let关键字: 3.声明变量或常量时没有对其指定类型且赋予了初值,则编译器会自动推断常 ...

  5. 动手学习TCP:4种定时器

    上一篇中介绍了TCP数据传输中涉及的一些基本知识点.本文让我们看看TCP中的4种定时器. TCP定时器 对于每个TCP连接,TCP管理4个不同的定时器,下面看看对4种定时器的简单介绍. 重传定时器使用 ...

  6. js统计字符串中各种字符情况

    问题描述:在一个字符串中,统计出大写字母.小写字母.数字和其他字符各数.这个算法以前在学习java的时候,老师说过,而且说了四种算法.在孔乙己的世界里,茴香豆的"茴"字有四种写法嘛 ...

  7. js立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( )) 有区别?

    没有区别. 你需要明白 IIFE 的原理,我简单说一下: function foo() {...} // 这是定义,Declaration:定义只是让解释器知道其存在,但是不会运行. foo(); / ...

  8. Web前端研发工程师编程能力飞升之路

    今天看到这篇文章.写的非常有意思,于是转载了.看看我们都处于什么的阶段. [背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着 ...

  9. python中thread模块中join函数

    http://www.cnblogs.com/vingi/articles/2657790.html for i in range(10): t = ThreadTest(i) thread_arr. ...

  10. POJ 3233 Matrix Power Series --二分求矩阵等比数列和

    题意:求S(k) = A+A^2+...+A^k. 解法:二分即可. if(k为奇)  S(k) = S(k-1)+A^k else        S(k) = S(k/2)*(I+A^(k/2)) ...