@[LZJ]ATM-GUI
关于ATM-GUI版,实现各自功能
用实体类之后,代码时变得简介,面向对象封装思想。
最重要的是,如果将来有所改动,只需要改动实体类, 方法间调用接口,完全不需要变动,大大减少了程序修改量,迎合了面向对象中接口不变的思想。
甚至在程序设计时,就把将来可能需要的属性预先放在实体类中,这样以后变动时,连实体类都不用变动了
一、建立账号实体类:通过账号,密码,账号余额,并创立相应的内容。
以下是相应的代码:
/**
* 账号实体类
* @author 一期一会
*
*/
public class CodeBean {
/**
* 账号
*/
private String code;
/**
* 密码
*/
private String pwd;
/**
* 账号余额
*/
private int money;
public CodeBean() {
super();
}
public CodeBean(String code, String pwd, int money) {
super();
this.code = code;
this.pwd = pwd;
this.money = money;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
@Override
public String toString() {
return "CodeBean [code=" + code + ", pwd=" + pwd + ", money=" + money + "]";
}
二、建立账号相关接口:账号业务接口(放入后面需要的方法,方便使用)。
什么是java接口:
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现。
不同于接口的概念,接口是一个类所具有的方法的特征集合,是一种逻辑上的抽象。
主要功能有:1、登录 2、查询 3、存款 4、取款 5、改密 6、转账
以下是相应的代码:
/**
* 账号业务接口
* @author 一期一会
*
*/
public interface IcondeService {
/**
* 登录
* @param code 账号
* @param pwd 密码
* @return 登录是否成功
*/
public boolean login(String code,String pwd);
/**
* 得到登录账号的金额
* @return 账号金额
*/
public int getCodeMoney();
/**
* 存款
* @param sm 存款金额
*/
public void saveMoney(int sm);
/**
* 取款
* @param gm 取款金额
* @return 取款是否成功,余额不足返回false,取款成功,返回true
*/
public boolean sellMoney(int gm);
/**
* 改密码
* @param oldPwd 旧密码
* @param newpwd 新密码
* @param repwd 确认新密码
* @return 出错信息,如果修改成功,返回null
*/
public String updatePwd(String oldPwd,String newpwd,String repwd);
/**
* 转账
* @param tranCodde 目标账号
* @param money 转账金额
* @return 出错信息,如果转账成功,返回null
*/
public String transferMoney(String tranCodde,int money);
三、建立实现相应账号相关接口的类:CodeServiceImpl(后面的主要操作都在这里进行,可以方便以后的更改,不需要对窗口等其他类中重复操作,造成编码人的混乱以及读码人不必要的麻烦。PS:在后面学习相应的读取、写入直接在这里进行修改就好)。
父接口引用子接口特征
夫接口引用可以访问子接口实现类重写的方法
接口的实现需要重写该接口和该接口的所有父接口的所有特征方法
以下是相应的代码:
/**
* 账号数组
*/
private static CodeBean[] codeArray = {
new CodeBean("1","111",5000),
new CodeBean("2","222",8000),
new CodeBean("3","333",4000)
};
/**
* 登录账号
*/
private static CodeBean loginCode;
@Override
public boolean login(String code, String pwd) {
for (int i = 0; i < codeArray.length; i++) {
if(codeArray[i].getCode().equals(code) && codeArray[i].getPwd().equals(pwd)) {
loginCode = codeArray[i];
return true;
}
}
return false;
}
@Override
public int getCodeMoney() {
return loginCode.getMoney();
}
@Override
public void saveMoney(int sm) {
loginCode.setMoney(loginCode.getMoney() + sm);
}
@Override
public boolean sellMoney(int gm) {
if(gm > loginCode.getMoney()) {
return false;
}
loginCode.setMoney(loginCode.getMoney() - gm);
return true;
}
@Override
public String updatePwd(String oldPwd, String newpwd, String repwd) {
String info = "";
if(oldPwd.equals(loginCode.getPwd()) == false){
info += "原密码错误\n";
}
if(newpwd.equals(repwd)==false) {
info += "两次密码不一致\n";
}
if(info.length() != 0) {
return info;
}
loginCode.setPwd(newpwd);
return null;
}
@Override
public String transferMoney(String tranCodde, int money) {
String info = "";
//得到转账账号
CodeBean transCode = checkCode(tranCodde);
if(transCode == null) {
info += "转账账号不存在\n";
}
if(money > loginCode.getMoney()) {
info += "余额不足\n";
}
if(info.length() != 0) {
return info;
}
loginCode.setMoney(loginCode.getMoney() - money);
transCode.setMoney(transCode.getMoney() + money);
return null;
}
/**
* 验证账号是否存在
* @param code 账号
* @return 是否存在
*/
private CodeBean checkCode(String code) {
for (int i = 0; i < codeArray.length; i++) {
if(code.equals(codeArray[i].getCode())) {
return codeArray[i];
}
}
return null;
}
**里面所用到通过定义数组来表示账号、密码、余额
通过:
private static CodeBean loginCode;来进行对各自账号相应的操作(避免了之前学习通过下标找相应的账号)。
通过:
checkCode()方法来对需要进行转账的账号进行判断账号是否正确。
通过:
String info = “”; 来对改密方法和转账方法进行判断。
_
四、建立图形界面。(这里使用的是跳转窗体)
一、建立窗体。
一、界面共有:1、登录界面 2、菜单界面3、查询界面 4、存款界面 5、取款界面 6、改密界面 7、转账界面。
二、建立相应的事件监听器,用来进行个界面之间的跳转。
Listener是监听者,比如你定义了一个按钮,用addActionListener就可以给这个按钮添加一个监听者,一旦有事件发生(比如鼠标点击),监听者都可以得到这个事件,并可以把事件信息(例如事件源)传给事件处理函数
二、建立了三个类用来封装JTextField、JLabel、JButton(简化代码)。
以下是三个自己建立的:JTextField、JLabel、JButton三个类:
public class MyTxt extends JTextField{
public MyTxt(String lable,int x,int y,Container jf) {
JLabel accountLabel = new JLabel(lable);
accountLabel.setBounds(x , y,150,50);
jf.add(accountLabel);
this.setBounds(x + 100, y, 150, 50);
jf.add(this);
}
}
public class MyJLable extends JLabel{
public MyJLable(String info,int x,int y,Container myJFram) {
//设置按钮的文本
this.setText(info);
//设置按钮位置和大小
this.setBounds(x,y, 100, 30);
//加入字体
this.setFont(new Font("宋体", Font.PLAIN, 25));
//将按钮加入窗体
myJFram.add(this);
}
}
public class MyButton extends JButton{
public MyButton(String name,int x,int y,Container jf) {
//设置按钮文本
this.setText(name);
//设置按钮位置和大小
this.setBounds(x, y, 140, 50);
//加入按钮字体
this.setFont(new Font("宋体", Font.PLAIN, 25));
//按钮加入窗体
jf.add(this);
}
}
总结
在此次编码过程中复习了之前相关的Java基础知识,也对学习新的知识得到了有效的巩固,但自己还有许多不足之处还需要加强学习。
作为一名小白,不会的还有很多,该ATM的图形界面版本在老师和同学们的帮助下完成。特此感谢老师和同学们的帮助!
做的如有不足之处敬请批评指正!