ATM用面向对象的方式表现出来

这是功能实现部分。

import java.util.Scanner;

//ATM机
public class ATMMachine {
// 用户信息
private UserInfo user;
// 现金
private int cash;
// 现金容量上限
public final int MAX_CASH = 200000;
// 存取上限
public final int GET_SET_MAX = 2000;

public ATMMachine() {
// 预载入用户信息
this.user = new UserInfo("J124", "123456", 500);
this.cash = 100000;
}

// 运行
public void run() {
this.welcome();
boolean flag = this.login();
if (flag) {
System.out.println("欢迎您,用户" + this.user.getUsername() + "!");
while (true) {
int choice = this.choiceMenu();
switch (choice) {
case 1:
this.query();
break;
case 2:
this.storeMoney();
break;
case 3:
this.getMoney();
break;
case 4:
this.changePwd();
break;
case 5:
this.exit();
break;
default:
System.out.println("对不起,没有该选项!");
break;
}
}
} else {
System.out.println("您的账户被冻结!请到柜台处理!");
}
}

// 显示欢迎
private void welcome() {
System.out.println("******************************");
System.out.println("*********欢**迎**登**录*********");
System.out.println("******************************");
System.out.println("*********爱存不存银行ATM*********");
System.out.println("******************************");
System.out.println("*****************version1.0***");
}

// 登录
private boolean login() {

for (int i = 0; i < 3; i++) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入您的账号:");
String inputName = scan.next();
System.out.println("请输入您的密码:");
String inputPwd = scan.next();
if (inputName.equals(this.user.getUsername())
&& inputPwd.equals(this.user.getPassword())) {
return true;
} else {
System.out.println("输入有误!您还有" + (2 - i) + "次机会");
}
}
return false;
}

// 选择菜单
private int choiceMenu() {
int choice = 0;
Scanner scan = new Scanner(System.in);
System.out.println("请选择您要执行的操作:");
System.out.println("1、查询;2、存款;3、取款;4、修改密码;5、退出");
choice = scan.nextInt();
return choice;
}

// 查询余额
private void query() {
//直接显示user对象中的account属性值
System.out.println("你的账户当前余额为:"+this.user.getAccount());

}

// 存钱
private double storeMoney() {
//1、接收用户输入
//2、判断--不能为0,不能为负,不能不是100的倍数,不能超过存取上限,不能超过现金容量--给出提示
//3、判断通过--加现金,加余额
double sum=0; //用户存入的钱与余额的总和
while(true){
Scanner s=new Scanner(System.in);
System.out.println("请输入存的钱数:");
int cun=s.nextInt();
if(cun%100!=0){
System.out.println("存入的钱必须是一百的倍数,请重新输入:");continue;
}
else if(cun<=0){
System.out.println("您输入的钱数有误,请重新输入");continue;
}
else if(cun>this.GET_SET_MAX){
System.out.println("单次最多只能存入2000元,请重新输入");continue;
}
else{
System.out.println("存入成功,您的余额为"+(cun+this.user.getAccount()));
sum=cun+this.user.getAccount();
return sum;
}(这里有个问题,没有实现存钱之后余额变化)
}
}
// 取款
private void getMoney() {
while(true){
Scanner s=new Scanner(System.in);
System.out.println("请输入要取的钱数:");
int qu=s.nextInt();
if(this.user.getAccount()-qu<0){
System.out.println("您的账户余额不足,请重新输入");continue;
}
else if(qu%100!=0){
System.out.println("您输入有误,必须是100的倍数");continue;
}
else if(qu>this.GET_SET_MAX){
System.out.println("单次取款最多2000元,请重新输入");continue;
}
else{
System.out.println("取款成功,取款"+qu+"元");
System.out.println("账户当前余为额"+(this.user.getAccount()-qu));break;
}
}(这里也是上面的问题,没有实现取钱之后余额变化)
}
// 修改密码
private void changePwd() {
while(true){
Scanner s=new Scanner(System.in);
System.out.println("请输入原密码");
String psw=s.next();
if(psw.equals(this.user.getPassword())){
Scanner w=new Scanner(System.in);
System.out.println("请再次输入原密码");
String psw1=w.next();
if(psw1.equals(this.user.getPassword())){
System.out.println("请输入新密码");
Scanner x=new Scanner(System.in);
String xin=x.next();
System.out.print("密码修改成功");break;
}
else{
System.out.println("密码不一致,请重新输入");
}
}

else{
System.out.print("您输入的密码与原密码不一致请重新输入");
}
}
}

// 退出
private void exit() {
System.out.println("谢谢您的使用!请收好您的卡!");
System.exit(0);
}

}

时间: 2024-11-17 17:53:40

ATM用面向对象的方式表现出来的相关文章

PHP中将对数据库的操作,封装成一个工具类以及学会使用面向对象的方式进行编程

<?php class SqlTool { //属性 private $conn; private $host="localhost"; private $user="root"; private $password="root"; private $db="test"; function SqlTool(){ $this->conn=mysql_connect($this->host,$this->u

如何以面向对象的方式看待世界

什么是面向对象,怎么样以面向对象的思维来看待这个世界,分析问题? 面向对象只是一种看待问题的方法而已,如果今后有比这更加有效的方法,那么新的方法就可以取代面向对象的方法.面向对象和面向过程的争议是没有意义的,因为它们不过是两种看待问题的不同方法而已,哪一种方法更加有效取决于要解决的问题.在我看来,面向对象的方法可以更好的取代面向过程的方法.在这里我不会谈论面向过程的方法,因为每个人习惯性地用面向过程的方法来看待周遭的世界,而要以面向对象的方式看待问题,这个还真得花费一番功夫.就如同甲壳类动物要成

用面向对象的方式解决经典的“三月兔”的问题

这是一个经典问题:有一对兔子,从出生后第三个月开始,每个月都生一对兔子,然后生出来的兔子也从出生第三个月开始每个月生一对兔子,假如兔子都不死,问每个月兔子总数是多少. 这个问题其实是一个斐波纳切数列,主要考虑递归的用法,这道题的"标准答案"就是用递归的方式来解决: 然而,这么做其实并不是按面向对象的思路来解决的.这是先画出表格,然后找出数字的排列规律,然后再写公式. 对于这种问题,我还是喜欢用面向对象的思路来解决它. 如果要以面向对象的思路来做,应该写一个兔子的对象,然后根据它的繁殖规

js面向对象实现方式的演变及常用方法

面向对象三大特性:封装,继承,多态. 1.原始模式 var obj = new Object();  obj.name = name; obj.sex = sex; obj.showName = function(){ alert("我的名字叫"+this.name) } obj.showSex ...... var Cat = {}   也可以用json的方式创建   原理相同 2.工厂模式 容易理解版 function createPerson(name,sex){ // 原料 v

面向对象的方式访问数据库

造对象 判断连接是否出错(两种方式) 写sql语句 执行sql语句 从结果集对象中读取数据 循环输出等 $db = new MySQLi("localhost","root","","z-stu"); //方法一 if(mysqli_connect_error()){ echo "连接错误"; exit; } //方法二 !mysqli_connect_error() or die("连接失败!&

python 以面向对象的方式创建线程 实现售票系统

---恢复内容开始--- 通过面向对象的方法实现多线程,其核心是继承threading.Thread类.我们自己定义了一个类BoothThread, 这个类继承自thread.Threading类,通过修改Thread类的run()方法来定义线程所要执行的命令. 1 import threading # Python主要通过标准库中的threading包来实现多线程 2 import time 3 import os 4 5 #作为间隔 每次调用间隔0.5s 6 def doChore(): 7

java数据结构链表(纯面向对象的方式)

//Node.java //LinkedList.java _____ //测试类 [lcy, haha]    1  lcy 删除的对象是 1[lcy, haha] lcy

面向对象的方式进行数据交换网络之间的差异--无缝切换的发展到单机游戏C/S模式

上一页本文描述描述有关数据的发展过程之间的差异支撑点,这里展示的另一个特点:无缝切换的发展,以独立C/S模式 一般C/S模式都面临一个问题: 就是开发过程中的调试难题,由于涉及到client和服务端相关方法,假设由某个人来编写那么也是一个简单的事情. 假设由2个人编写,会带来一些平台上的差别以及编码的差别. 简单的说,假设我们在开发时全然的避开C/S,然后经由某个机制,能够直接让模块跑到server上,那么这将让你的开发速度上升好几个倍率. 没有协议,没有交互,没有网络,那么从头写到尾,也是一件

用面向对象的方式进行数据访问

首先我们需要造对象 1 $db = new MYSQLi ("localhost","root","","aaaaa"); 关键字是   MYSQLi     括号内的四个参数分别是(“要连接服务器的IP地址”,“服务器的用户名”,“密码”,“服务器名称”)创造完成的对象可以交给一个变量$db,那么这个$db里面就存着的是一个MYSQLi的对象了. 第二步 判断连接是否成功 1 !mysqli_connect_error()