编程之前要分析,编写过程才不会漫无目的

2024-02-24 14:20

本文主要是介绍编程之前要分析,编写过程才不会漫无目的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是c++吧的一维吧友保濟丸在回答另一位吧友的提问时给出的答复,让我第一次深刻感觉到,进行软件分析的重要性。


初步看了下,这系统的参与者有两个,一个是会员,一个是图书馆管理员。
会员只会借书和还书,(盈利机构的话可能还会充值啥的)
管理员有其他用列。
但是仔细想的话其实这个啥啥管理系统的真正使用者是管理员,会员只是委托管理员借书和还书。会员和管理员的关系应该是代理模式。
所以会员就扔掉吧···


用列作为基本接口绘制类图的话大概就这样,BookManage作为最高抽象层级就代表整个系统了,维护一个Book和一个Card列表。
Book类存储ISBN作为编号,应该存在一个书名列表,一本书通常有多个名字,译名或者爱称之类的。应该存在一个作者列表,作者也通常会有多个。
应该存在一个等级,比如18X啥的低等级的就不能借阅。
应该存在一个数量,图书馆不可能一种书只有一本·····

咦!????为啥类会描述自身的数量····



仔细看的话Book类实际上设计错误了,类的属性描述和本身的定位不符,属性实际上是在描述书的类型,改做BookType自己觉得会比较好。那用列图实际上也错了,应该是添加类型,虽然实际上可以判断如果是没有注册的书类型就添加否则就直接修改数量,但是同一个函数不应该做两件事,自己觉得还是分开比较好。
BookType储存书的信息,应该存在一个具体书类型的列表,但是单一的列表的话搜索是否有剩余书或者查找的时候用想的就觉得蛋疼。先分开试试好了。维护一个borrlist作为已借出列表,维护一个NowList作为现存列表,就是m_ReturnList,歹势,打错了。

Book类应该存在一个ID,表示实际上的每本书。应该存在一个列表存放曾经被什么卡借走过,应该存在一个变量表示现在被谁借走了(如果已借出的话)。应该存在一个状态表示现在书的情况(比如缺页,破损或者别的啥)

BorrInfo作为一次借阅的信息。应该存在一个CardID标示这次借阅是被谁借走了,应该存在一个时间变量标示借阅的时间,应该存在一个时间标示预定还书的时间,应该存在一个时间标示实际还书的时间,应该存在一个状态表示借出时书的状态,应该存在一个状态标示还书时的状态。

Card作为借书卡类,应该存在一个ID作为检索标示,一个Name标示持有人。
作为一个装备,借书卡应该存在一个等级标示权限(比如啥红宝石借书卡可以借阅所有书籍之类的)应该存在一个最大同时借书数量。
维护一个列表标示借书卡借阅书籍的历史记录。维护一个列表标示该借书卡现在同时借阅的书籍。

大概结构应该就这样了·
- -码字好累

这篇关于编程之前要分析,编写过程才不会漫无目的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742386

相关文章

基于Python编写一个git自动上传的脚本(打包成exe)

《基于Python编写一个git自动上传的脚本(打包成exe)》这篇文章主要为大家详细介绍了如何基于Python编写一个git自动上传的脚本并打包成exe,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录前言效果如下源码实现利用pyinstaller打包成exe利用ResourceHacker修改e

Python中Tkinter GUI编程详细教程

《Python中TkinterGUI编程详细教程》Tkinter作为Python编程语言中构建GUI的一个重要组件,其教程对于任何希望将Python应用到实际编程中的开发者来说都是宝贵的资源,这篇文... 目录前言1. Tkinter 简介2. 第一个 Tkinter 程序3. 窗口和基础组件3.1 创建窗

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

SpringBoo WebFlux+MongoDB实现非阻塞API过程

《SpringBooWebFlux+MongoDB实现非阻塞API过程》本文介绍了如何使用SpringBootWebFlux和MongoDB实现非阻塞API,通过响应式编程提高系统的吞吐量和响应性能... 目录一、引言二、响应式编程基础2.1 响应式编程概念2.2 响应式编程的优势2.3 响应式编程相关技术

SpringBoot的全局异常拦截实践过程

《SpringBoot的全局异常拦截实践过程》SpringBoot中使用@ControllerAdvice和@ExceptionHandler实现全局异常拦截,@RestControllerAdvic... 目录@RestControllerAdvice@ResponseStatus(...)@Except

线程池ThreadPoolExecutor应用过程

《线程池ThreadPoolExecutor应用过程》:本文主要介绍如何使用ThreadPoolExecutor创建线程池,包括其构造方法、常用方法、参数校验以及如何选择合适的拒绝策略,文章还讨论... 目录ThreadPoolExecutor构造说明及常用方法为什么强制要求使用ThreadPoolExec

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.