java基础:模拟ATM取款机
package com.atm; import java.util.Scanner; /**
* ATM类实现
*
* @author 向往的生活
*/
public class ATM { public static void main(String[] args) {
String[] user = new String[];
String[] password = new String[];
double[] amount = new double[]; loginSelect(user, password, amount); } /**
* 登录业务的菜单选择
*
* @param user
* @param password
*/
public static void loginSelect(String[] user, String[] password,
double[] amount) {
System.out.println("#####欢迎#####"); int n = ;
while (true) {
System.out.println("A.开户");
System.out.println("B.登录");
System.out.println("C.退出");
System.out.println("D.修改密码"); Scanner scanner = new Scanner(System.in);
System.out.println("选择菜单:");
String number = scanner.nextLine();
number = number.toUpperCase(); char[] chr = number.toCharArray();
switch (chr[]) {
case 'A':
openAnAccount(user, password);
loginSelect(user, password, amount);
break;
case 'B':
int index = login(user, password);// 记录登录人的下标
if (index != -) {
select(user, password, amount, index);
} else {
n++;// 登录3次失败,则退出
if (n == ) {
break;
}
}
break;
case 'C':
System.out.println("退出ATM");
System.exit(-);
break;
case 'D':
updatePassword(user, password);
System.out.println("修改密码");
break;
default:
System.out.println("录入的操作错误!");
break;
}
}
} /**
* 核心业务菜单选择
*
* @param user
* @param password
*/
public static void select(String[] user, String[] password,
double[] amount, int index) { while (true) {
System.out.println("###########您好:" + user[index] + "#########");
System.out.println("A.存款");
System.out.println("B.取款");
System.out.println("C.转账");
System.out.println("D.查询账户余额");
System.out.println("E.返回主菜单"); Scanner scanner = new Scanner(System.in);
System.out.println("选择菜单:");
String input = scanner.nextLine();
input = input.toUpperCase(); char chr = input.toCharArray()[]; switch (chr) {
case 'A':
saveMoney(user, amount, index);
break;
case 'B':
getMoney(user, amount, index);
break;
case 'C':
transferAccounts(user, amount, index);
break;
case 'D':
query(user, amount, index);
break;
case 'E':
loginSelect(user, password, amount);
break;
default:
System.out.println("操作错误请重新输入!");
break;
}
}
} /**
* 登录
*
* @return
*/
public static int login(String[] user, String[] password) { Scanner input = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = input.nextLine(); System.out.println("请输入密码:");
String pwd = input.nextLine(); // 通过userName数据,找到user下标,
int index = -;
for (int i = ; i < user.length; i++) {
if (user[i] == null) {
System.out.println("请去开户,您没有注册卡号!");
loginSelect(user, password, null);
return -;
} else {
if (user[i].equals(userName)) {
index = i;
break;
}
}
}
// 然后通过user下标找到password中相应的密码。
if (password[index].equals(pwd)) {
return index;
} else {
System.out.println("用户名或者密码输入错误,请从新输入!");
}
return -;// 因为密码不匹配因此返回-1
} /**
* 开户
*
* @return
*/
public static void openAnAccount(String[] user, String[] password) {
int index = -;
// 搜索下标
for (int i = ; i < user.length; i++) {
if (user[i] == null) {
index = i;
break;
}
}
if (index == -) {// 如果存储空间满了,则提示联系管理员处理
System.out.println("系统存储已经满了,请联系管理员处理!");
return;
} // 新增用于与密码
Scanner scanner = new Scanner(System.in);
System.out.println("输入登录名:");
String loginName = scanner.nextLine(); user[index] = loginName;
System.out.println("输入密码:");
String pwdValue = scanner.nextLine(); password[index] = pwdValue;
} /***************************************************************************
* 查询账户余额
*
* @return
*/
public static void query(String[] user, double[] amount, int index) {
System.out.println(user[index] + "您的余额为:" + amount[index]);
} /**
* 取款
*
* @return
*/
public static void getMoney(String[] user, double[] amount, int index) { System.out.println("A 100 B 200 ");
System.out.println("C 300 D 500 ");
System.out.println("E 1000 F 2000 ");
System.out.println("G 其他金额 "); Scanner scanner = new Scanner(System.in);
System.out.println("选择取款金额:");
String money = scanner.nextLine();
money = money.toUpperCase(); double number = 0.0;
char chr = money.toCharArray()[];
switch (chr) {
case 'A':
number = ;
break;
case 'B':
number = ;
break;
case 'C':
number = ;
break;
case 'D':
number = ;
break;
case 'E':
number = ;
break;
case 'F':
number = ;
break;
case 'G':
Scanner input = new Scanner(System.in);
System.out.println("输入取款金额:");
number = input.nextDouble();
break;
default:
System.out.println("您输入的金额错误!");
break;
} // 检查存款的金额校验
if (!checkMoney(number)) {
return;
} if(amount[index] < number) {
System.out.println("您账户余额不足,不能取款!");
return;
}
amount[index] = amount[index] - number;
System.out.println("取款成功,余额为:" + amount[index]);// 显示余额
return;
} /**
* 检查存款的金额校验
*
* @param number
* @return
*/
public static boolean checkMoney(double number) {
if (number < ) {
System.out.println("取款失败:只能取出大于等100的金额!");
return false;
} // 只能存入100的整数
if (number % != ) {
System.out.println("取款失败:只能取出100的整数!");
return false;
}
return true;
} /**
* 存款
*/
public static void saveMoney(String[] user, double[] amount, int index) { Scanner scanner = new Scanner(System.in);
System.out.println("输入存款金额:");
double number = scanner.nextDouble(); // 检查存款的金额校验
if (!checkMoney(number)) {
return;
}
amount[index] = amount[index] + number;
System.out.println("存款成功,余额为:" + amount[index]);// 显示余额
return;
} /**
* 转账
*
* @return
*/
public static void transferAccounts(String[] user, double[] amount,
int index) {
int tragetIndex = -;
for (int i = ; i < ; i++) {
tragetIndex = ifHaveUser(user);
if (tragetIndex != -) {
break;
} else {// 没找到相应的用户
System.out.println("第" + (i + ) + "次,您输入的用户不存在!");
}
} if (tragetIndex == -) {
System.out.println("超过3次返回上级菜单!");
return;
} if (tragetIndex == index) {// 如果下标相等提示您不能给自己转账
System.out.println("您不能给自己转账");
} else {
for (int i = ; i < amount.length; i++) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入您的转账金额:");
double tranAmount = scanner.nextDouble(); // 检查存款的金额校验
if (!checkMoney(tranAmount)) {
return;
}
if (tranAmount > amount[index]) {// 如果转账金额大于,账户余额提示
System.out.println("您余额不足!");
break;
} else {
amount[index] = amount[index] - tranAmount;
amount[tragetIndex] = tranAmount;
break;
}
}
}
System.out.println("您的余额为:" + amount[index]);
} /***************************************************************************
*
* @return
*/
public static int ifHaveUser(String[] user) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入转账用户:");
String userName = scanner.nextLine();
int index = -;
for (int i = ; i < user.length; i++) {
if (userName.equals(user[i])) {
index = i;
}
}
return index;
} /***************************************************************************
* 修改密码
*
* @return
*/
public static void updatePassword(String[] user, String[] password) { Scanner input = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = input.nextLine();
while (true) {
int index = -;
String oldPwd = null;
for (int i = ; i < user.length; i++) {//首先要找到当前用户
if (userName.equals(user[i])) {
index = i;
oldPwd = password[i];
}
}
if(index == -) {
System.out.println("还没有开户,请开户后再来修改密码!");
return ;
}
System.out.println("请输入旧密码:");
String inputOldPwd = input.nextLine(); System.out.println("请输入新密码:");
String newpwd = input.nextLine(); System.out.println("请输入确认密码:");
String confimpwd = input.nextLine(); if(!inputOldPwd.equals(oldPwd)) {//如果输入的旧密码不等于新密码,则重新输入
System.out.println("您输入的旧密码不正确!");
continue;
}
if(!newpwd.equals(confimpwd)) {//新密码与确认密码不匹配
System.out.println("新密码与确认密码不匹配!");
continue;
}
password[index] = newpwd;
System.out.println("密码修改成功!");
break;
} }
}
java基础:模拟ATM取款机的更多相关文章
- 【C】——C模拟atm取款机
功能描述:1:开户:2:销户:3:存钱:4:取钱:5:查询:6:转账: 主要用的技术: 一:消息队列: 1)key_t key = ftok(".",100); //获取key 2 ...
- java基础模拟考试三套试卷
卷1: 一.单选题(15道,共30分) //1.下列关于JDK.JRE.JVM关系描述正确的是 (A) A:JDK是开发工具,包含了JRE.JRE是运行环境,包含了JVM.JVM是虚拟机,可以保证跨平 ...
- ATM取款机的数据库模拟开发和实战总结
一.ATM实战开发的简介. 学习了几天的Oracle,开始着手用数据库PL/SQL语言做一个简单的ATM取款机业务,主要是为了巩固数据库的知识,并非真正的去实现高端的业务.有兴趣的可以看看,希望对同胞 ...
- 语言模拟ATM自动取款机系统
C语言实验报告 题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...
- Java 模拟ATM(修正)
ATM机的账户记录Account有账户的唯一性标识(11个长度的字符和数字的组合),用户的姓名,操作日期(Date),操作类型,账户密码(六位的数字,可以用0开头),当前的余额(可以为0). 模拟AT ...
- ATM取款机模拟——数据结构课设
今天帮人写的第二篇课设 . ;-) 机智的窝 要求:大概说一下吧,就是要创建一个用户(初始化一账户),模拟ATM的业务(取款,100的整数倍,改密 码,查剩余金额.等等,各 ...
- Oracle实战训练——ATM取款机业务
ATM取款机的数据库模拟开发和实战总结 一.ATM实战开发的简介. 学习了几天的Oracle,开始着手用数据库PL/SQL语言做一个简单的ATM取款机业务,主要是为了巩固数据库的知识,并非真正的去实现 ...
- 模拟ATM机银行系统
淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...
- Java基础知识【下】( 转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
随机推荐
- mybatis判断集合为空或者元素个数为零
mybatis判断集合为空或者元素个数为零: <if test="mlhs != null and mlhs.size() != 0"> and t.mlh_name ...
- Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式
解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式.面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和Out ...
- FMS+NGINX打造高带宽利用率的流媒体(音频+视频)环境
fms自身已经拥有了httpd,用来给客户端访问用,例如通过http的音频播放.众所周知,非专业的httpd自然有不专业之处,例如我遇到的情况就是经常http服务假死,或者在访问量庞大的时候会无缘无故 ...
- ASP.NET 页面之间传值的几种方式
开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...
- Javascript中的 “&” 和 “|” 你知多少?
.v-top { position: relative; top: -5px; font-size: 12px } 一.前言: 在文章开始之前,先出几个题目给大家看看: var num1 = 1 &a ...
- [html] 学习笔记-Canvas图形绘制处理
使用Canvas API 可以将一个图形重叠绘制在另外一个图形上,也可以给图形添加阴影效果. 1.Canvas 图形组合 通过 globalCompositeOperation = 属性 来指定重叠效 ...
- IO的构造方法
package com.file; /* File的构造方法: File(String pathname); File(File parent,String child); File(String p ...
- Mac和Linux系统的:Arp欺骗源码
linux系统, 简化版的ARP欺骗工具 精简版, 没有很多代码, 只要把准备好的数据, 发送给到网卡接口, 利用这个工具, 可以让局域网内的一台计算机暂时掉线: #include <stdio ...
- MySql存储过程的使用
MySql存储过程跟sql server 有一定的区别,使用说明和步骤如下 使用说明 创建存储过程 MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([p ...
- MongoDB学习总结(四) —— 索引的基本用法
说到索引,大家肯定都在关系型数据库或多或少接触过,它的主要目的是加速查询的速度.MongoDB作为一种数据库,当然也提供了索引的操作. 我们先插入1万条测试数据. 首先,我们先来看看不加索引查找nam ...