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 = 0;_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 = 0;
};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. ots在线考计算机的word,ots在线考试系统1(OTS online examination system 1).doc

    ots在线考试系统1(OTS online examination system 1) ots在线考试系统1(OTS online examination system 1) OTS online e ...

  2. python 模拟考试系统_Project-OTS: Online Exam System written on Python 3. 基于Python 3的在线考试系统。...

    Project-OTS Online Exam System written on Python 3. Your can first try it on ots.icystal.top. 基于Pyth ...

  3. springboot+英语在线学习系统 毕业设计-附源码211714

    spring boot英语在线学习系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难 ...

  4. SSM+基于Vue框架的在线投票系统的设计与实现 毕业设计-附源码221604

    基于Vue框架的在线投票系统的设计与实现 摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于在线投票系统也是十分常见的.过去使用手工的管理方式对在线投票系统进行管理,造成了 ...

  5. SSM+基于Vue框架的在线投票系统的设计与实现 毕业设计-附源码

    基于Vue框架的在线投票系统的设计与实现 摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于在线投票系统也是十分常见的.过去使用手工的管理方式对在线投票系统进行管理,造成了 ...

  6. (附源码)springboot公选课在线选课系统 毕业设计 142011

    公选课在线选课系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用Ja ...

  7. (附源码)springboot 在线考试系统 毕业设计461317

    Springboot在线考试系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术 ...

  8. (附源码)springboot在线考试系统 毕业设计 160935

    在线考试系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题. ...

  9. 毕设项目:基于BS模型的在线OJ系统

    系列文章目录 文章目录 系列文章目录 前言 一.在线OJ系统描述 二.在线编译模块 1.搭建一个HTTP服务器完成在线编译 2.收到HTTP请求,进行数据格式转化(HTTP中body的内容转换为JSO ...

最新文章

  1. 视频教学动作修饰语:CVPR2020论文解析
  2. mvc手把手教你写excel导入
  3. git操作手册_基本的Git手册
  4. 细说进程、应用程序域与上下文之间的关系(一)——进程的概念与作用
  5. node 没有界面的浏览器_node.js爬虫入门(二)爬取动态页面(puppeteer)
  6. 分布式与人工智能课程(part5)--第五课
  7. Java—List集合详解
  8. linux c 程序崩溃日志,C:Linux:调用write()时TCP / IP程序崩溃
  9. CentOS软件包管理之RPM
  10. 《深入浅出统计学》读书笔记
  11. 自然语言处理之词袋模型Bag_of_words
  12. Linux 测试连接端口
  13. 优科Ruckus R610 AP刷Unleashed固件
  14. python获得字符串长度的函数_python字符串函数
  15. 微信公众号之微信认证
  16. OpenGL学习(七)通过assimp库读取多种格式的模型
  17. 电阻应用电路之运放如何消除偏置电流的影响
  18. 李飞飞、吴恩达、Bengio等人的15大顶级深度学习课程(转)
  19. cmd 执行html文件,cmd执行bat文件 cmd文件和bat文件有什么区别?
  20. 虚拟机安装打印服务器,虚拟机怎么添加打印机

热门文章

  1. SpringBoot开发微信公众号
  2. Spring官方都推荐使用的@Transactional事务,为啥我不建议使用!
  3. 面试官:谈谈你对 Spring AOP 的了解?请加上这些内容,绝对加分!
  4. SpringBoot第八篇:springboot整合mongodb
  5. 不是报错就是崩盘,这些代码迁移问题你遇到过几个?
  6. 打架斗殴烫头酗酒抽烟的小混混,逆袭保送中国科学院,后来怎么样了?
  7. 为什么执行自己的程序要在前面加./
  8. 设计模式篇之——命令设计模式
  9. MinIO分布式专题(第一章、一文教你搭建MinIO单机版)
  10. 网页中 哪些是 GET 请求,哪些是 POST 请求