ATM2(添加新功能)

public class ATMMachine {
//所有用户信息
private UserInfo[] allUsers;
//当前操作用户信息
private UserInfo user;
// 现金
private int cash;
// 现金容量上限
public static final int MAX_CASH = 200000;
// 存取上限
public static final int GET_SET_MAX = 2000;

public ATMMachine() {
// 预载入用户信息---文件读操作
this.allUsers = FileOperation.readFile();
// this.allUsers = new UserInfo[5];
// for (int i = 0; i < allUsers.length; i++) {
// this.allUsers[i] = new UserInfo("zhang" + i, "123456" + i,
// 10000 + i * 1000);
// }
this.cash = 100000; //本机现有金额
}

// 运行
public void run() {
this.welcome();
boolean flag = this.login();
if (flag) {
System.out.print("正在登陆,请稍候");
for(int i = 0;i<6;i++){
System.out.print(".");
try {
Thread.sleep(600);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
System.out.println("\n"+"登陆成功");
System.out.println("用户" + this.user.getUsername() + "于" +
this.getDate()+ "登录成功,欢迎您!");
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("*****************version2.0***");
}

// 登录
private boolean login() {
Scanner scan = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名:");
String inputName = scan.next();
System.out.println("请输入密码:");
String inputPwd = scan.next();
for (UserInfo tmp : allUsers) {
if (tmp.getUsername().equals(inputName)
&& tmp.getPassword().equals(inputPwd)) {
this.user = tmp;
return true;
}
}
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、退出");

String choiceStr = scan.next();
if(choiceStr.matches("[1-5]")){
choice = Integer.parseInt(choiceStr);
}

return choice;
}

// 查询余额
private void query() {
//直接显示user对象中的account属性值
System.out.println("您当前的余额是:" + user.getAccount() + "元!");
}

// 存钱
private void storeMoney() {
//1、接收用户输入
//2、判断--不能为0,不能为负,不能不是100的倍数,不能超过存取上限,不能超过现金容量--给出提示
//3、判断通过--加现金,加余额
System.out.println("请输入您要存储的金额:");
String inputMoney = new Scanner(System.in).next();

if(inputMoney.matches("(20|1[0-9]|[1-9])00")){
int money = Integer.parseInt(inputMoney);
if(money + this.cash > this.MAX_CASH){
System.out.println("对不起,本机容量不足!");
}else{
this.cash += money;
this.user.setAccount(this.user.getAccount() + money);
//文件写操作
FileOperation.writeFile(this.allUsers);
System.out.println("您于" + this.getDate() + "成功存款" + money + "元!");
}
}else{
System.out.println("请输入有效金额!本机只提供2000以内的百元服务!");
}
}

// 取款
private void getMoney() {
System.out.println("请输入您要取出的金额:");
String inputMoney = new Scanner(System.in).next();
if(inputMoney.matches("(20|1[0-9]|[1-9])00")){
int money = Integer.parseInt(inputMoney);
if(money >= this.cash){
System.out.println("对不起,本机现金不足!");
}else if(money > this.user.getAccount() ){
System.out.println("对不起,您的账户上余额不足!");
}else{
this.user.setAccount(this.user.getAccount() - money);
this.cash -= money;
//文件写操作
FileOperation.writeFile(this.allUsers);
System.out.println("您于" + this.getDate() + "成功取款" + money + "元!");
}
}else{
System.out.println("请输入有效金额!本机只提供2000以内的百元服务!");
}
}

// 修改密码
private void changePwd() {
Scanner scan = new Scanner(System.in);
System.out.println("请输入老密码:");
String oldPwd = scan.next();
System.out.println("请输入新密码:");
String newPwd = scan.next();
System.out.println("再次输入新密码:");
String rePwd = scan.next();

if(!oldPwd.equals(this.user.getPassword())){
System.out.println("老密码输入错误!");
}else if(!newPwd.equals(rePwd)){
System.out.println("两次密码不一致!");
}else{
this.user.setPassword(newPwd);
//文件写操作
FileOperation.writeFile(this.allUsers);
System.out.println("您于" + this.getDate() + "成功修改密码!");
}

}

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

//格式化日期
private String getDate(){
String date = "";
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E HH:mm:ss");
date = sdf.format(now);
return date;
}

}

添加的新功能有:正则表达式处理输入问题,只要不符合正则表达式的规则就会给出相应提示(try   catch模块的使用,解决输入的问题,已经被正则表达式所代替)。

添加一个信息的读写,每次取钱存钱修改过后,会修改这个文件中的内容,使得下次登录操作时,信息保持之前的状态。

显示时间功能,程序睡眠功能。

时间: 2024-12-15 13:58:12

ATM2(添加新功能)的相关文章

修复Bug是重点 iOS9将不注重添加新功能

苹果iOS7系统时发生了界面风格的巨大改变,目前的iOS8也在延续之前的风格,只是进行了功能补充,那么iOS9是否还会继续保持这样的风格呢?据外媒消息,iOS9的确不会再次对风格进行大修大改,而是着重改进稳定性和系统优化. iOS9将不注重添加新功能(图片来自MacWorld) 据外媒从苹果内部工程师处获知,iOS9的主要工作是修复漏洞.保持系统的稳定性,并增强系统性能,并不会特别注重对新功能的开发. 另外,近期苹果因iOS8系统固件体积过大而多次被用户告上法庭,看来是起到了一定效果.据称苹果将

为python 添加新功能-dump

一直觉得thinkphp提供的dump函数挺好用的,但是python里面没有,就一直想着写个简单的. dir是我比较常用的一个内置函数了,但是显示效果实在有点受不了,每次我都要从大量的字符串里找到我需要的,眼都花了. 所以我就想,一行显示一个就好了. 所以我就写了一个模块,命名为dp 1 #!/usr/bin/env python 2 #coding:utf-8 3 4 """ 5 dump variable 6 """ 7 def dump(v

Ecshop:后台添加新功能栏目以及管理权限设置

一.添加菜单项 打开 /admin/includes/inc_menu.php文件(后台框架左边菜单),在最后添加一行如下: 1$modules['17_other_menu']['sns_list'] = 'sns_list.php?act=list'; ecshop默认一级菜单项有16项,所里这里的例子从17开始.当然这个key可以随便取的,index.php文件中对菜单用 了ksort排序.“17_other_menu” 表示一级菜单,“sns_list”表示二级菜单.等号后面的值表示该菜

一个新人如何学习在大型系统中添加新功能和Debug

文章背景: 今年七月份正式入职,公司主营ERP软件,楼主所在的组主要负责二次开发,使用的语言是Java. 什么叫二次开发呢?ERP软件的客户都是企业.而这些企业之间的情况都有所不同,一套标准版本的企业资源管理系统必然难以百分之一百地满足每一家公司的所有要求.所以,在客户提出需求之后,程序员对系统进行增减修改,这就是二次开发. 另外,我们组还负责修复客户报上来的各种漏洞. 学会如何添加新模块新功能 为什么说从头到尾只看代码是不可行的? 基本上,财务系统跨越的年限都会有十几二十年,代码数千万级别,更

机密性加强:改版Skylake添加新功能SGX

Intel Skylake处理器正值大规模出货期,但现在官方确认了改版的消息. 先别慌,这并非什么质量问题,而是Intel将在10月底的新批次中为Skylake处理器添加一项新功能SGX(Software Guard Extensions,软件防护扩展指令). SGX最早在2013年推介出来,主要功能是在计算平台上提供一个可信的空间(类似“沙盒”),保障用户关键代码和数据的机密性和完整性. 具体来说,这种方式并不是识别和隔离平台上的所有恶意软件,而是将合法软件的安全操作封装在一个enclave中

Ecshop :后台添加新功能 菜单及 管理权限 配置

需求:在<商品管理>下增加一项[商品推广管理]功能 一. 添加菜单项 打开 /admin/includes/inc_menu.php 文件(后台框架左边菜单),在最后添加一行如下: $modules['02_cat_and_goods']['19_goods_promotion'] = 'goods_promotion.php?act=list'; 二.配置菜单语言 打开 /languages/zh_cn/admin/common.php 文件,添加语言 $_LANG['19_goods_pr

java并发之如何向已有的线程安全类添加新功能--java并发编程实践

添加一个新原子操作的最安全的方式是,修改原始的类,以支持期望的操作.但是你可能无法访问源代码或者没有修改的自由,所以通常是不可能的.即使你可以修改原始的类,也需要理解其实现的同步策略,才能在维持原有设计的前提下完善它的功能.直接向类中加入新方法,意味着所有实现类同步策略的代码仍然包含在一个源代码文件中,因此便于理解与维护. 另一种方法是扩展这个类.因为扩展后,同步策略的实现会被分布到多个独立维护的源代码文件中,所以 扩展一个类比直接在类中加入代码更脆弱.如果底层的类选择了不同的锁保护它的状态变量

后台添加新功能栏目以及管理权限设置

一.添加菜单项 打开 /admin/includes/inc_menu.php文件(后台框架左边菜单),在最后添加一行如下: 1$modules['17_other_menu']['sns_list'] = 'sns_list.php?act=list'; ecshop默认一级菜单项有16项,所里这里的例子从17开始.当然这个key可以随便取的,index.php文件中对菜单用了ksort排序.“17_other_menu” 表示一级菜单,“sns_list”表示二级菜单.等号后面的值表示该菜单

凡科建站新功能,快给你的网站添加新功能

1.电脑版-允许设置锚点链接(类似滚屏效果): 效果演示:传送门 功能描述: 类似于滚屏的效果,通过设置链接到本栏目中的通栏排版模块,页面可以滚动到该通栏排版模块处: 可以设置锚点功能的模块: 图片模块.文本模块.按钮模块: 操作提示: ①在栏目中添加"通栏排版模块": ②在"设置链接"中找到"本栏目显示的通栏模块",选中即可(如下图). 之后会支持更多模块. 2.商城-非登录会员购物流程优化: 管理员把购买权限设置为"仅会员购买&qu