模拟ATM系统 —— 用户存款、取款、转账、修改密码和销户功能
接着上一篇:
5.用户存款功能
分析:
*存款就是拿到当前账户对象
*然后让用户输入存款的金额
*调用账户对象的setMoney方法将账户余额修改成存钱后的余额
*存款后需要查询当前账户信息,确认是否存钱成功
把实现存款功能定义成一个独立的方法:depositMoney(acc,sc);
/**
* 存款
* @param acc 当前账户对象
* @param sc 扫描器
*/
private static void depositMoney(Account acc, Scanner sc) {
System.out.println("================用户存款操作=======================");
System.out.println("请您输入存款金额:");
double money = sc.nextDouble();
//更新账户余额:原来 + 存款
acc.setMoney(acc.getMoney() + money);
System.out.println("存款成功!当前账户信息如下:");
showAccount(acc);
}
6.用户取款功能
分析:
*取款需要先判断账户是否有余额
*有余额则拿到自己账户对象
*然后让用户输入取款金额
*判断取款金额是否超过了每次限额,已经余额是否足够
*满足要求则调用账户对象的setMoney方法完成金额的修改
/**
* 取款
* @param acc 当前账户对象
* @param sc 扫描器
*/
private static void drawMoney(Account acc, Scanner sc) {
System.out.println("================用户取款操作=======================");
//1、判断是否足够100元
if (acc.getMoney() < 100){
System.out.println("对不起,您当前账户的余额不足100元,不能取款!");
return; //跳出取款方法
}
//2、提示用户输入取款金额
System.out.println("请您输入取款金额:");
double money = sc.nextDouble();
//3、判断这个金额是否满足要求
if (money > acc.getQuotaMoney()){
System.out.println("对不起,您当前取款金额超过了每次限额,每次最多可取:"+acc.getQuotaMoney());
}else {
//没有超过限额
//4、判断是否超过当前账户的余额
if (money > acc.getMoney()){
System.out.println("对不起,您当前取款金额超过了总余额,您的总余额是:"+acc.getMoney());
}else {
//可以取款
System.out.println("恭喜您,取款"+money+"元,成功!");
//更新余额
acc.setMoney(acc.getMoney() - money);
//取款结束
showAccount(acc);
return; //跳出取款方法
}
}
}
7.用户转账功能
分析:
*转账功能需要判断系统中是否有2个账户对象及以上
*同时还要判断自己当前账户是否有余额
*接下来输入对方卡号,判断对方卡号是否存在
*对方账户还需要认证对方户主的姓氏
*满足要求则可以把自己账户对象的金额修改到对方账户对象中去
把实现转账功能定义成一个独立的方法:transferMoney(sc,acc,accounts);
/**
* 转账功能
* @param sc 扫描器
* @param acc 自己的账户对象
* @param accounts 全部账户集合
*/
private static void transferMoney(Scanner sc, Account acc, ArrayList<Account> accounts) {
System.out.println("================用户转账操作=======================");
//1、是否有2个账户
if (accounts.size() < 2){
System.out.println("当前系统中,不足2个账户,请先去开户!");
return; // 退出转账方法
}
//2、判断自己当前账户是否有余额
if (acc.getMoney() == 0){
System.out.println("对不起,您没有余额,不能转账!!");
return; // 退出转账方法
}
while (true) {
//3、真正开始转账
System.out.println("请您输入对方账户的卡号:");
String cardId = sc.next();
//卡号不能是自己的卡号
if (cardId.equals(acc.getCarId())){
System.out.println("对不起,您不能给自己账户进行转账!!");
continue; //结束当次执行
}
//判断卡号是否存在,根据卡号去查询对方账户对象
Account account = getAccountByCardId(cardId, accounts);
if (account == null){
System.out.println("对不起,您输入的对方账户不存在!");
}else {
//这个账户对象存在,继续认证姓氏
String userName = account.getUserName(); //阳阳 从第二位开始截取,不能用替换
String tip = "*" + userName.substring(1);
System.out.println("请您输入【"+tip+"】的姓氏");
String preName = sc.next();
//认证姓氏是否输入正确
if (userName.startsWith(preName)){ //姓氏是否以preName开头
//认证通过,正式开始转账
while (true) {
System.out.println("请输入转账金额:");
double money = sc.nextDouble();
//判断余额舒服足够
if (money > acc.getMoney()){
System.out.println("对不起,您的余额不足,最多可以转账:"+acc.getMoney());
}else {
//余额足够,可以转账
acc.setMoney(acc.getMoney() - money);
account.setMoney(account.getMoney() + money);
System.out.println("转账成功!您的余额为:"+acc.getMoney());
return; //跳出转账方法
}
}
}else {
System.out.println("对不起,您输入的姓氏有误!");
}
}
}
}
8.用户修改密码、注销账号功能
分析:
*修改密码就是当前对象的密码属性使用set方法进行更新
*销户就是从集合对象中删除当前对象,并且回到首页
把修改密码功能定义成一个独立的方法:updatePassWord(sc,acc);
在销户过程中,为了更严谨要询问用户是否确定销户,所以把销户功能也定义成一个方法:deleteAccount(acc,sc,accounts);
/**
* 注销账户功能
* @param acc 当前账户对象
* @param sc 扫描器
* @param accounts 全部账户集合
*/
private static boolean deleteAccount(Account acc, Scanner sc, ArrayList<Account> accounts) {
System.out.println("================用户销户操作=======================");
System.out.println("您真的要销户吗? y/n");
String re = sc.next();
switch (re){
case "y":
//真正销户
//从当前账户集合中,删除当前账户对象,注销就完成了
if (acc.getMoney() > 0){
System.out.println("您的账户还有余额,不允许销户!!");
}else {
accounts.remove(acc);
System.out.println("您的账户销户成功!");
return true; //销户成功
}
break;
default:
System.out.println("好的,您的账户继续保留!");
}
return false; //继续保留
}
/**
* 修改密码
* @param sc 扫描器
* @param acc 当前登录成功的账户对象
*/
private static void updatePassWord(Scanner sc, Account acc) {
System.out.println("================用户修改密码操作=======================");
while (true) {
System.out.println("请输入当前账户的密码:");
String passWord = sc.next();
//1、判断密码是否正确
if (acc.getPassWord().equals(passWord)){
while (true) {
//密码正确
//2、输入新密码
System.out.println("请您输入新密码:");
String newPassword = sc.next();
System.out.println("请您输入确认密码:");
String okPassword = sc.next();
if (newPassword.equals(okPassword)) {
//两次密码输入正确
acc.setPassWord(newPassword);
System.out.println("恭喜您,您的密码修改成功!");
return; // 跳出该方法
}else {
System.out.println("对不起,您输入的2次密码不一致!");
}
}
}else {
System.out.println("您输入的密码不正确!");
}
}
}
模拟ATM系统 —— 用户存款、取款、转账、修改密码和销户功能的更多相关文章
- 转载:mysql添加用户、删除用户、授权、修改密码
mysql添加用户.删除用户.授权.修改密码等 MySql中添加用户,新建数据库,用户授权,删除用户,修改密码1.新建用户. //登录MYSQL @>mysql -u root -p @> ...
- Linux进入单用户模式(passwd root修改密码)
进入单用户模式——passwd root修改密码 1.在grub 页面输入a,进入修改内核模式 2.在内核的结尾“/”,输入空格,在输入single,回车 3.启动系统,进入单用户模式 4.Passw ...
- mysql 创建用户、授权、修改密码
以下操作都要在mysql所在机器操作 一.创建用户 CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456'; 或 insert into mysql. ...
- mysql 创建用户与授权、修改密码
mysql版本:5.6.35 1.创建用户 #foo表示你要建立的用户名,后面的123表示密码, #localhost限制在固定地址localhost登陆 CREATE USER foo@localh ...
- mysql-管理命令【创建用户、授权、修改密码、删除用户和授权、忘记root密码】
一.创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 关键参数说明: username - 创建登录用户名, host ...
- mongodb查看操作记录方法以及用户添加删除权限修改密码
前一阵跑程序时发现一个问题,同事导出了部分数据,但是在merge回原库时竟然和原库的数据对不上,后来找了半天发现是原库数据少了. 找了很多资料发现很多人认为的操作日志和我想的不太一样...找了半条才发 ...
- MySql增加用户、授权、修改密码等语句
1. mysql 增加新用户: insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) value ...
- 查看centos中的用户和用户组和修改密码
查看centos中的用户和用户组 1.用户列表文件: vim /etc/passwd/ 2.用户组列表文件: vim /etc/group 3.查看系统中有哪些用户: cut -d : -f /etc ...
- linux中防止黑客进入单用户模式进行强制修改密码窃取数据
如何防止别人恶意通过单用户系统破解root密码,进入系统窃取数据? 给grub加密,不让别人通过grub进入单用户. 当前系统:CentOS Linux release 7.6.1810 (Core) ...
- 用数据库管理SERV-U的用户时,如何修改密码及原理
将serv-u设置成数据库管理用户的前提是先要建立数据源 如何用Serv-U连接ODBC|1.可以在 FTP所在服务器安装一个 SQL Server 数据库,也可以使用论坛自带的数据库.建议在 FT ...
随机推荐
- mysql14 sql优化-索引失效
1.索引失效 先创建符合索引,三个字段 ALTER table abilityassessrecord add INDEX idx_customerno_roomno_abilityassessrec ...
- P30_全局配置 - window - 下拉刷新
window 全局开启下拉刷新功能 概念:下拉刷新是移动端的专有名词,指的是通过手指在屏幕上的下拉滑动操作,从而重新加载页面数据的行为. 设置步骤:app.json -> window -> ...
- 怎么在GridView中限制显示字数
三种方法可以实现,前两种是C#代码实现(原理一样),第三种是CSS实现. 1.cs代码中:GridView的RowDataBound中对想做处理的项做Remove()字符串截取. 2.aspx页面中: ...
- Osx10.14升级watchman踩坑记
背景 使用 watchman 检测文件变化通知非常的好用, 但有些时候会出现 watchman 占用内存和 CPU 特别疯狂, 通过 watch-del 也无济与事, 由于 watchman 的版本 ...
- 4 .NET Core笔试题
1.说说.NET7中 _ViewImports文件的作用? 2.什么是Razor页面? 3.说说.NET5中 __ViewStart文件的作用? 4.如何在Razor页面中实现数据模型绑定? 5.如何 ...
- JZOJ 3207.Orthogonal Anagram
\(\text{Problem}\) 给出一个字符串,求经过重新排列的另一个字典序最小的字符串,满足:相同的位置上 原串与结果串的字符不同.不存在则输出空串. \(\text{Solution}\) ...
- axSpA患者新发炎症更容易发生在既往发生过炎症的区域
axSpA患者新发炎症更容易发生在既往发生过炎症的区域 EULAR2015; PresentID: SAT0240 NEW INFLAMMATORY LESIONS IN AXIAL SPONDYLO ...
- 早期SpA患者髋关节的受累发生率
早期SpA患者髋关节的受累发生率 EULAR2015, PresentID: FRI0236 原文 译文 How often are hip joints involved in patients w ...
- .Net NPOI 简单Demo,一看就会
#region 文件输出 public class BasicInfodsa { public string name; public string phone; } List zyData = ...
- 流浪地球2:AI人工智能+数字生命+元宇宙
推荐:将 NSDT场景编辑器 加入你的3D开发工具链 剧情介绍 太阳危机 太阳即将老化膨胀,吞没太阳系,地球上的人类构思了各种生存计划:其一是"数字生命计划",该计划制造强大的 ...