ATM-GUI版

tech2022-07-17  161

@[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的图形界面版本在老师和同学们的帮助下完成。特此感谢老师和同学们的帮助! 做的如有不足之处敬请批评指正!
最新回复(0)