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

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

相关文章

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意