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基础相关的内容,原来因为在写这一个章节的时候没 ...
随机推荐
- Flex timer使用 keydown事件注册到stage
Flex timer使用 keydown事件注册到stage: <?xml version="1.0" encoding="utf-8"?> < ...
- JSON在线解析,新版本JSON在线解析
SOJSON,出了新版本的JSON在线解析,真的很好用,可以上下版本.左右版本.效果图如下.它的网址是:http://www.sojson.com/simple_json.html SOJSON集成了 ...
- HDU1172(枚举)
猜数字 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- iOS开发中@property的属性weak nonatomic strong readonly等介绍
@property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后的版本,@synthesize可以省略. 1.atomic与nonatomica ...
- 微信前端面试题----js实现LazyMan
这是微信小程序的一道面试题,题目是这样的: 实现一个LazyMan,可以按照以下方式调用:LazyMan("Hank")输出:Hi! This is Hank! LazyMan(& ...
- html 一般标签 常用标签 表格
body的属性: bgcolor 页面背景色 background 背景壁纸.图片 text 文字颜色 top ...
- date()中的getYear的小问题
function DateDemo(){ var d,s = "今天得日期是:"; d = new Date(); s += d.getMonth()++"/" ...
- MySQL的my-innodb-heavy-4G.ini配置文件的翻译
我根据MySQL配置文件的英文文档说明,在根据自己所学的知识,使用有道词典对不懂的单词进行了查询,一个一个翻译出来的.有的专业术语翻译的不好,我使用了英文进行标注,例如主机(master)和副机(sl ...
- webpack入门+react环境配置
小结放在前:这篇文章主要是为下一篇的react提前铺好路,webpack是一个前端资源模块化管理和打包工具,说白了就是方便我们管理自己的常用的一些代码,比如你开发中用到sass以及jade同时用到es ...
- MongoDB基础之九 replication复制集
准备工作:创建目录 mkdir -p /home/m17 //home/m18 /home/m19 /home/mlog 1:启动3个实例,且声明实例属于某复制集 # ./bin/mongod --d ...