网站必须做诚信认证吗,搭建一个网站 优帮云,河北燕郊网站制作,浙江王氏生态建设网站1、项目演示#xff1b; 2、项目技术实现#xff1b;
1#xff09;面向对象编程#xff1a;
每个账户都是一个对象#xff0c;所以要设计账户类Account#xff0c;用于创建账户对象封装账户信息。ATM同样是一个对象#xff0c;需要设计ATM类#xff0c;代表ATM管理系… 1、项目演示 2、项目技术实现
1面向对象编程
每个账户都是一个对象所以要设计账户类Account用于创建账户对象封装账户信息。ATM同样是一个对象需要设计ATM类代表ATM管理系统负责对账户的处理。
2使用集合容器
ATM管理类中需要提供一个容器用于存储系统全部账户对象的信息我们选ArrayList集合。
3程序流程控制
需要结合分支、循环、跳转关键字等程序流程控制的知识用来控制系统的业务流程。
4使用常见的API
登录信息的内容比较数据的分析、处理等都需要常用的API来解决如使用String。 3、能得到哪些收获
1收获面向对象编程的能力
2清晰、缜密的业务分析能力、数据处理能力
3熟练使用程序流程语句来控制计算机完成自己的想法
4良好的编码习惯一定的编码经验让基础知识形成体系为后续java的高级技术的学习做有力的支撑。 ATM系统架构搭建、欢迎页设计
系统架构搭建
1定义一个账户类Account至少包括卡号、姓名、性别、密码、余额、每次取现额度。
2定义一个ATM类用来代表ATM系统负责提供所有的业务需求比如展示ATM系统的欢迎页、卡通账户、转账……
3定义一个测试类负责对我们开发的ATM系统进行测试。 系统欢迎页设计
在ATM类中设计一个方法start()方法里负责展示欢迎页面。 架构实现
Account类
package cn.ensource;public class Account {private String cardId; // 卡号private String userName; // 性别private char sex; // 性别private String passWord; // 密码private double money; // 余额private double limit; // 限额public String getCardId() {return cardId;}public void setCardId(String cardId) {this.cardId cardId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public char getSex() {return sex;}public void setSex(char sex) {this.sex sex;}public String getPassWord() {return passWord;}public void setPassWord(String passWord) {this.passWord passWord;}public double getMoney() {return money;}public void setMoney(double money) {this.money money;}public double getLimit() {return limit;}public void setLimit(double limit) {this.limit limit;}
}ATM类
package cn.ensource;import java.util.ArrayList;
import java.util.Scanner;public class ATM {private ArrayListAccount accountList new ArrayList(); // 成员变量要私有private Scanner scanner new Scanner(System.in);/** 启动ATM系统展示欢迎界面*/public void start() {while (true) {System.out.println(欢迎您进入到ATM系统);System.out.println(1. 用户登录);System.out.println(2. 用户开户);System.out.println(请选择);String choice scanner.next();switch (choice) {case 1:// 用户登录break;case 2:// 用户开户break;default:System.out.println(没有该操作);}}}
}
测试类
package cn.ensource;public class Test {public static void main(String[] args) {// 1. 创建一个ATM对象代表ATM系统ATM atm new ATM();atm.start();}
} 开户功能
就是新增一个用户也就是往系统的账户集合中添加一个账户对象。 账户要求
用户信息包括姓名、性别、密码、每次取现额度、卡号。
注意卡号是由系统自动生成的要求是8位的数字组成的且卡号不能重复。 系统开户功能createAccount方法。 /** 系统开户功能 */private void createAccount() {System.out.println(系统开户操作);// 1. 创建账户对象用于封装用户的开户信息Account account new Account();// 2. 需要用户输入自己的开户信息赋值给账户对象System.out.println(请您输入您的账户名称);String name scanner.next();account.setUserName(name);while (true) {System.out.println(请您输入您的性别);char sex scanner.next().charAt(0);if (sex 男 || sex 女) {account.setSex(sex);break; // 跳出死循环}else {System.out.println(您输入的性别有误只能是男或女。);}}while (true) {System.out.println(请您输入您的账户密码);String passWord scanner.next();System.out.println(请您输入您的确认密码);String confirmPassWord scanner.next();if (confirmPassWord.equals(passWord)) {account.setPassWord(confirmPassWord);break; // 跳出死循环}else {System.out.println(您输入的2次密码不一致请您确认);}}System.out.println(请您输入您的取现额度);double limit scanner.nextDouble();account.setLimit(limit);// 重点我们需要为这个账户生成一个卡号肯定是由系统自动生成// 不能与其他账户的卡号重复会在下节课详细讲解// 3. 把账户对象存入账户集合中去accountList.add(account);System.out.println(恭喜您 account.getUserName() 开户成功您的卡号是);}
欢迎您进入到ATM系统
1. 用户登录
2. 用户开户
请选择
2
系统开户操作
请您输入您的账户名称
changchunhua
请您输入您的性别
男
请您输入您的账户密码
123456
请您输入您的确认密码
123456
请您输入您的取现额度
5000
恭喜您changchunhua先生开户成功您的卡号是
欢迎您进入到ATM系统
1. 用户登录
2. 用户开户
请选择 为开户的账户生成一个新卡号
新卡号要求是一个8位的数字且不能与其他账户对象的卡号重复。
新卡号得到后需要赋值给当前账户对象。
package cn.ensource;import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class ATM {private ArrayListAccount accountList new ArrayList(); // 成员变量要私有private Scanner scanner new Scanner(System.in);/** 启动ATM系统展示欢迎界面*/public void start() {while (true) {System.out.println(欢迎您进入到ATM系统);System.out.println(1. 用户登录);System.out.println(2. 用户开户);System.out.println(请选择);String choice scanner.next();switch (choice) {case 1:// 用户登录break;case 2:// 用户开户createAccount();break;default:System.out.println(没有该操作);}}}/** 系统开户功能 */private void createAccount() {System.out.println(系统开户操作);// 1. 创建账户对象用于封装用户的开户信息Account account new Account();// 2. 需要用户输入自己的开户信息赋值给账户对象System.out.println(请您输入您的账户名称);String name scanner.next();account.setUserName(name);while (true) {System.out.println(请您输入您的性别);char sex scanner.next().charAt(0);if (sex 男 || sex 女) {account.setSex(sex);break; // 跳出死循环}else {System.out.println(您输入的性别有误只能是男或女。);}}while (true) {System.out.println(请您输入您的账户密码);String passWord scanner.next();System.out.println(请您输入您的确认密码);String confirmPassWord scanner.next();if (confirmPassWord.equals(passWord)) {account.setPassWord(confirmPassWord);break; // 跳出死循环}else {System.out.println(您输入的2次密码不一致请您确认);}}System.out.println(请您输入您的取现额度);double limit scanner.nextDouble();account.setLimit(limit);// 重点我们需要为这个账户生成一个卡号肯定是由系统自动生成// 不能与其他账户的卡号重复会在下节课详细讲解String newCardId createCardId();account.setCardId(newCardId);// 3. 把账户对象存入账户集合中去accountList.add(account);System.out.println(恭喜您 account.getUserName() 开户成功您的卡号是 account.getCardId());}/** 返回一个8位数字的卡号而且这个卡号不能与其他账户的卡号重复*/private String createCardId() {while (true) {// 1. 定义一个String类型的变量记住8位数字作为一个卡号String cardId ;// 2. 使用一个循环循环8次每次产生一个随机数给我们的CardId连接起来Random r new Random();for (int i 0; i 8; i) {int data r.nextInt(10);cardId data;}// 3. 判断CardId中记住的卡号是否与其他账户的卡号重复没有重复才可以作为一个新卡号返回Account acc getAccountByCardId(cardId);if (acc null) {// 说明cardId没有找到账户对象因此CardId没有与其他卡号重复可以返回它作为一个新卡号return cardId;}}}/** 根据卡号查询对象返回*/private Account getAccountByCardId(String cardId) {for (int i 0; i accountList.size() ; i) {Account acc accountList.get(i);// 判断这个账户对象acc中的卡号是否是我们要找的卡号if(acc.getCardId().equals(cardId)) {return acc;}}return null; //查无此账户这个卡号不存在的}
} 实现登录功能
1如果系统中没有任何账户对象则不允许用户登录
2让用户输入登录的卡号先判断卡号是否正确如果不正确要给出提示
3如果卡号正确要让用输入账号密码如果密码不正确要给出提示如果密码也正确则给出登录成功的提示 /** 用户登录操作*/private void login() {System.out.println(系统登录);// 1. 判断系统中是否存在账户对象存在才能登录不存在结束登录登录if(accountList.size() 0) {System.out.println(当前系统中无任何账户请先开户再登录);return; // 退出登录操作}// 2. 系统中存在账户对象可以开始进行登录操作while (true) {System.out.println(请您输入您的登录卡号: );String cardId scanner.next();// 判断这个卡号是否存在Account acc getAccountByCardId(cardId);if(acc null) {// 说明这个卡号不存在System.out.println(您输入的卡号不存在);}else {while (true) {// 卡号存在了接着让用户输入密码System.out.println(请您输入您的密码);String passWord scanner.next();if(acc.getPassWord().equals(passWord)) {// 密码正确就是登录成功了System.out.println(恭喜您 acc.getUserName() 成功登录了系统您的卡号是 cardId);// ....}else {System.out.println(您输入的密码不正确请确认);}}}}} 用户操作页设计、查询账户、退出账户功能分析
1用户登录成功后需要进入用户操作页。
2查询就是直接展示当前成功的用户的账户信息。
3退出账户就是从我们登录等后的页面回到欢迎页面。 /** 用户登录操作*/private void login() {System.out.println(系统登录);// 1. 判断系统中是否存在账户对象存在才能登录不存在结束登录登录if(accountList.size() 0) {System.out.println(当前系统中无任何账户请先开户再登录);return; // 退出登录操作}// 2. 系统中存在账户对象可以开始进行登录操作while (true) {System.out.println(请您输入您的登录卡号: );String cardId scanner.next();// 判断这个卡号是否存在Account acc getAccountByCardId(cardId);if(acc null) {// 说明这个卡号不存在System.out.println(您输入的卡号不存在);}else {while (true) {// 卡号存在了接着让用户输入密码System.out.println(请您输入您的密码);String passWord scanner.next();if(acc.getPassWord().equals(passWord)) {loginAcc acc; // 这个账户登录成功了交给一个loginAcc变量记住// 密码正确就是登录成功了System.out.println(恭喜您 acc.getUserName() 成功登录了系统您的卡号是 cardId);// 登录后的操作页面将其设计为一个独立方法showUserCommand();return;}else {System.out.println(您输入的密码不正确请确认);}}}}} /** 展示登录后的操作界面 */private void showUserCommand() {while (true) {System.out.println(loginAcc.getUserName() 您可以选择如下功能进行账户的处理);System.out.println(1. 查询账户);System.out.println(2. 存款);System.out.println(3. 取款);System.out.println(4. 转账);System.out.println(5. 密码修改);System.out.println(6. 退出);System.out.println(7. 注销当前账户);System.out.println(请选择: );String choice scanner.next();switch (choice) {case 1:// 查询当前账户showAccountInfo();break;case 2:// 存款break;case 3:// 取款break;case 4:// 转账break;case 5:// 密码修改break;case 6:// 退出System.out.println(loginAcc.getUserName() 您退出系统成功);return; // 退出当前方法case 7:// 注销当前账户break;default:System.out.println(您当前选择的操作是不存在的请确认);}}}
return; 是退出当前方法 /*** 展示当前登录账户的信息*/private void showAccountInfo() {System.out.println(当前账户信息如下);System.out.println(卡号: loginAcc.getCardId());System.out.println(户主: loginAcc.getUserName());System.out.println(性别: loginAcc.getSex());System.out.println(余额: loginAcc.getMoney());System.out.println(取现额度: loginAcc.getLimit());} 用户存款功能
1就是用户为自己的账户存钱存钱后更新账户的余额即可。 /*** 存钱*/private void depositMoney() {System.out.println(存钱操作);System.out.println(请您输入存款金额);double money scanner.nextDouble(); // -5000, 网页判断// 更新当前账户的余额loginAcc.setMoney(loginAcc.getMoney() money);System.out.println(恭喜您你存钱 money 成功存钱的余额是 loginAcc.getMoney());} 用户取款功能
1就是从自己的账户中取钱取钱的要求
1、需要判断账户的余额是否大于等于100元如果够让用户输入取款金额
2、需要判断取款金额是否超过了档次限额以及余额是否足够。 /*** 取钱*/private void drawMoney() {System.out.println(取钱操作);// 1. 判断账户余额是否大于100元如果不够100元就不让取钱if(loginAcc.getMoney() 100) {System.out.println(您的账户不足100元不允许取钱);}// 2. 让用户输入取款金额while (true) {System.out.println(请您输入取款金额);double money scanner.nextDouble();// 3. 判断账户的余额是否足够足够才能取的if(loginAcc.getMoney() money) {// 账户中的余额是充足的// 4. 需要判断取款金额是否超过了限额if (loginAcc.getLimit() money) {System.out.println(您当前的取款金额超过了取钱限额 loginAcc.getLimit());}else if(// 代表可以取钱了loginAcc.setMoney(loginAcc.getMoney() - money);System.out.println(您取款 money 成功取款后的余额是 loginAcc.getMoney());)}else {// 否则余额不足System.out.println(余额不足您的账户的余额是 loginAcc.getMoney());}}}
转账功能
把自己的钱转给别人转账前的判断
1、自己账户是否有钱系统中是否有其他账户
2、接下来用户输入对方卡号判断对方账户是否存在账户如果存在还需要认证对方账户的户主姓氏
3、然后就可以转账了。 /*** 转账*/private void transferMoney() {System.out.println(用户转账);// 1. 判断系统中是否存在其他账户if(accountList.size() 2) {System.out.println(当前系统中只有您一个账户无法为其他账户转账);return;}// 2. 判断自己的账户是否有钱钱够不够if(loginAcc.getMoney() 0) {System.out.println(您自己都没钱就别转了);return;}// 3. 真正可以转账了while (true) {System.out.println(请您输入对方的卡号);String cardId scanner.next();// 4. 判断这个卡号是否正确Account acc getAccountByCardId(cardId);if(acc null) {System.out.println(您输入的对方的卡号不存在);}else {// 对方账户存在继续让用户确认姓氏String name * acc.getUserName().substring(1);System.out.println(请您输入[ name ]的姓氏);String preName scanner.next();// 判断这个姓氏是否正确if(acc.getUserName().startsWith(preName)) {// 认证通过了,真正可以转账了while (true) {System.out.println(请您输入转账给对方的金额);double money scanner.nextDouble();// 判断金额没有超过自己的余额不需要考虑限额if(loginAcc.getMoney() money) {// 转给对方了// 更新自己账户的余额// 更新对方账户的余额loginAcc.setMoney(loginAcc.getMoney() - money); // 自己账户acc.setMoney(acc.getMoney() money); // 对方账户return; // 跳出转账方法}else {System.out.println(您余额不足无法转给对方这么多钱最多可以转给对方 loginAcc.getMoney());}}}else {System.out.println(对不起您认证的姓氏有问题);}}}}
测试
存在自己转账给自己的问题需要在代码中进行判断。 销户功能
1销户是从系统中删除当前账户销户的要求
1、首先要询问用户是否确定要销户如果不确定则回到操作界面。
2、如果确定要判断用户的账户中是否有钱有则不允许销户并回到操作界面。
3、如果没钱则完成销户并回到欢迎页。 /*** 销户操作*/private boolean deleteAccount() {System.out.println(进行销户操作);// 1. 问问用户是否确认销户操作System.out.println(请问您确认销户操作y/n);String choice scanner.next();switch (choice) {case y:// 用户确实要注销// 判断用户的账户是否有钱loginAccif (loginAcc.getMoney() 0) {// 真的销户accountList.remove(loginAcc);System.out.println(您好您的账户已经成功销户);return true; // 销户成功} else {System.out.println(对不起您的账户中有存钱金额不允许销户);return false;}default:System.out.println(好的您的账户保留);return false;}} 修改密码功能
就是更改账户的密码修改密码的要求
1需要先验证用户当前的密码
2认证通过之后需要让用户输入2次新密码
3两次新密码都一样则更新账户密码并回到欢迎界面。
/*** 更新密码*/private void updatePassWord() {System.out.println(账户密码修改);// 1. 提醒用户认证当前密码while (true) {System.out.println(请您输入当前账户的密码);String passWord scanner.next();// 2. 认证当前密码是否正确if(loginAcc.getPassWord().equals(passWord)) {// 认证通过// 真正修改密码while (true) {System.out.println(请您输入新密码);String newPassWord scanner.next();System.out.println(请您输入确认密码);String confirmPassWord scanner.next();// 判断两次密码输入一致if(confirmPassWord.equals(newPassWord)) {// 真正修改密码loginAcc.setPassWord(newPassWord);System.out.println(密码修改成功);return; // 跳出这个方法}else {System.out.println(您两次输入的密码不一致);}}}else {System.out.println(您输入的当前密码不正确)}}} 代码开发好了要进行测试确认。