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

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

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,