Java基础实现加油站圈存机系统
1|0加油站圈存机系统
对于加油卡而言,圈存是将用户账户
中已存入的资金划转到所持的加油卡上后方可使用。通俗一点的说法就是您在网点把钱存入主卡中,再分配到下面的副卡,由于副卡都在使用车辆的驾驶员手中,需要在加油的时候在加油站让加油站员工划一下即可,就是所谓的圈存。
圈存操作流程
如下图所示,圈存机圈存的主要流程就是:插卡→输入密码→按圈存→可选的小票操作→退卡。
1|1模拟开发圈存系统设计梳理
概述
已经了解了圈存业务大致内容。现在使用Java基础课程所学习的知识,模拟开发一下这个圈存系统的功能。因为是模拟开发,所以有些细节会相应的做些调整。
比如:
- 我们没有圈存机,因此没有具体的交互实物,对此我们的系统采用控制台展示和输入的方式来模拟交互。
- 使用圈存机只要加油卡插入到机器后,卡号就会读入机器,我们只需要输入密码就行了。我们没有实体卡环节,哈哈哈,甚至圈存机都没,故此卡号需要我们自己输入的方式模拟插卡。
- 没有实物卡,那账号从哪里来?对此我们给模拟的系统加入一个隐藏的管理功能。这个功能呢,就做成输入的卡号是指定的一个系统管理卡号和密码,我们就进入隐藏的管理模块,进行卡片的管理。(当然这个卡号普通用户是不知道,只有我们内部的工作人员才知道,密码也是内部保密的哟)(这个管理,涉及到卡片的新增、查询、充值等,删除就不加了,假装没有这个功能,毕竟不是银行卡系统,假装没这么细微服务)。
对此,我们给系统设计两个功能体系,一个是用户的圈存查询功能,一个是管理员的后台核心管理功能。
流程设计
整体流程图概览如下:
【细节说明】:
- 没有退卡键,没法做到每个界面都要有一个退卡按钮提示,中间个别环节加入即可。
- 系统持续对外服务,没有结束,都是走到开始界面,提示输入账号(卡号)。
类设计
1、油卡的JavaBean
油卡需要的属性的:卡号,用户姓名 userName
,卡密码,油卡余额,积分,账户余额
- 卡号
cardId
:卡号不能位空,长度9位的数值,首位不为0。 - 卡密码
password
:需要验证密码长度,进行空值判断,但此处不做过多限制,只需长度大于0就好了,以及管理员密码可以自己直接设置,此处我直接设置为”1“。 - 油卡余额
money
:油卡中可以用于加油的余额。浮点类型 - 积分
integral
:使用油卡获得的积分,由管理员进行充值,整型 - 账户余额
wallet
:个人账户的余额,是用来充值油卡余额的钱,浮点型 - 并且提供空参,满参,getter以及setter方法
2.圈存系统类设计
-
圈存系统需要的成员变量:指定的系统的账号
sysCardId
和密码sysPassword
,方便使用;当前登入的账户对象curUserCard
;存储用户卡信息的集合fuelCardList
-
圈存系统需要加入:控制台输入对象用于交互,随机数对象用于生成卡号。设置一个有参构造,参数是
duelCardList
,用于测试;同时设置一个无参构造,用于生成对象,方便调用。 -
涉及到的主要方法:
-
主页面:用于提示用户操作,输入账号密码等
-
管理员功能界面:查询所有卡片信息,新增油卡,账户余额充值,积分充值。
-
用户功能:圈存功能和查询功能
-
3.测试类的设计
测试类只需要加入main方法,然后声明圈存系统类的对象,通过该对象调用启动方法,作为程序的入口。可以设计一个用户对象,方便测试时使用,不用每次测试都登入管理员账户新增用户。
1|2系统的具体开发
1.加油卡FuelCard类
代码如下:
2.主欢迎界面(系统的启动方法)
启动器需要启动提示语,提示用户输入卡号。输入卡号后,调用校验卡号的方法,校验卡号是否符合卡号要求,如长度是九位数,并且是否包含非法字符。
校验成功后,验证账号类型,判断账号属于管理员账号还是用户账号。如果属于管理员账号则跳转管理员登入界面,如果属于用户账号则加入当前登入用户的成员变量curUserCard
中,并跳转用户登入界面
start() 方法,代码如下:
卡号校验功能
卡号校验功能,对输入的卡号进行长度和内容的判断,判断卡号是否符合要求,返回true和false共外部调用
管理员账号校验
验证账号密码是否是管理员角色,代码如下:
3.管理员系统处理
验证为管理员账号后进入管理员登入系统,进入后,提示管理员用户输入密码,判断密码输入是否正确,是否和设置的密码相同,若密码不同则重新输入,并且限制输入密码的次数。密码错误超过限制次数,返回开始页面,提示用户重新输入账号。密码正确则进入管理员的操作页面。
3.1管理员登入系统模块
3.2管理员系统欢迎界面
代码如下:
进入管理员操作界面后,可以执行管理员操作,包括查看所有油卡信息,新增卡号,积分充值,钱包充值四个功能
3.3查看所有油卡信息
对存储账号信息的集合fuelCardList
进行判空,如果集合为空则提示管理员,暂无账户信息。否则遍历集合,输出相关账户信息,由于密码属于私人信息,不能输出密码信息。
展示账户内容代码如下:
3.4新增卡号
新增卡号,创建油卡对象,填写相关的用户信息,包括用户名,用户密码;用户密码需要输入两次,确认密码,如果两次密码都相同,则通过,否则提示重新输入;账户(电子钱包)金额,只能输入大于0的金额。卡号调用生成卡号的方法生成,而油卡余额和积分,此处为新增油卡,因此无需过多关注。
设置完对象的这些属性后,将油卡对象添加到油卡对象集合中
代码如下:
3.5生成卡号
生成的卡号,要求9位数,开头不能为0,且唯一(用户账号和管理员账户也不能重复)
3.6根据卡号查找油卡对象
根据卡号查找油卡对象,存在则返回油卡对象,否则返回null。
这个方法在积分充值,钱包充值,用户登录都需要用到。就是根据油卡id查出集合中的油卡对象。外部调用方法根据是否为null进行相应的判断。
根据卡号查找油卡对象代码如下:
3.7积分充值
积分充值,检测油卡集合中是否存在油卡对象,如果没有则退出充值方法,否则一直查找不到油卡对象导致方法无法退出(也可以通过增加退出按钮,完成业务需求)。输入需要充值的油卡id,调用getFuelCardByCardId
方法,根据油卡id找到油卡对象,若卡号不存在则提示重新输入。否则对油卡对象的积分属性做增加积分处理。并且对增加的积分进行校验,积分需要大于零。
积分充值代码如下:
3.8钱包充值
钱包充值和积分充值处理方法类似,可以直接复制粘贴,注意修改有出入的地方
钱包充值,检测油卡集合中是否存在油卡对象,如果没有则退出充值方法,否则一直查找不到油卡对象导致方法无法退出。输入需要充值的油卡id,根据油卡id找到油卡对象,若卡号不存在则提示重新输入。否则对油卡对象的钱包(wallet)属性做增加钱包余额处理。并且对增加的金额进行校验,积分需要大于零。
钱包充值代码如下:
至此,管理员业务 完成
4.普通用户系统处理
验证为普通用户账号后进入普通用户登入系统,进入后,提示普通用户输入密码,判断密码输入是否正确,是否和对象中设置的密码相同,若密码不同则重新输入,并且限制输入密码的次数。密码错误超过限制次数,返回开始页面,提示用户重新输入账号。密码正确则进入普通用户的操作页面。
4.1普通用户登入系统模块
代码如下:
4.2用户系统欢迎界面
进入用户操作界面后,可以执行用户相关操作,包括用户查询和用户圈存两个功能
4.3用户查询方法
打印提示语句,让用户选择查询操作,退卡操作直接使用return关键字结束方法即可。
个人认为,根据流程图写的方法, 不如直接查询全部信息,也符合正常业务流程并且代码量相对较少。
代码如下:
4.4用户圈存
判断用户账户余额是否大于0,小于等于0则无法进行圈存业务。
判断结束后提示用户操作,根据输入的操作,执行。对输入的金额(积分)进行判断,只能输入大于0的金额(积分);还要对输入的金额(积分)是否小于账户余额(积分)进行判断,只有小于账户余额(积分)才能进行圈存。圈存成功,减少账户余额(积分),怎加油卡余额,并提示圈存成功,返回操作界面
可以将积分圈存操作和账户余额圈存操作封装成方法,代码会更加整洁。
至此加油卡圈存系统基本完成
测试类的编写
__EOF__

本文链接:https://www.cnblogs.com/ACAI-cc/p/17629444.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验