java GUI实现ATM机系统(3.0版)

网友投稿 198 2023-01-25

java GUI实现ATM机系统(3.0版)

写个小项目了解一下GUI。用java GUI实现银行ATM自动取款机,实现登录界面、登录成功界面、各个操作功能实现界面。

用java GUI实现一个ATM机系统(3.0版)

设计思路

设计两个包(bank包,atmJFrame包)

1、bank包:

(1)、ATM类:实现用户各种操作;

(2)、Data类:从user文件中获取所有用户信息,并返回要找的用户,再将修改完之后的用户信息写入user文件中;

(3)、user文件储存所有用户信息。

2、atmJFrame包:

(1)、MyJFrame类:自己创建的界面父类;

(2)、LoginJFrame:登录界面;

(3)、WorkingJFrame:登录成功后显示的功能界面;

(4)、CentreJFrame:中间窗口,存钱、取钱、转账、修改密码界面的父类;

(5)、QuMoneyJFrame:取钱界面;

(6)、CunMoneyJFrame:存钱界面;

(7)、GiveMoneyJFrame:转账界面;

(8)、ChangePasswordJFrame:修改密码界面。

源码

bank包

package bank;

//ATM类

public class ATM {

//有一个类操作数据的类

private Data data = new Data();

//ATM机里的数据

private String userName;//用户账号且唯一

private String userPassword;//用户密码

private double userMoney;//用户账户里的钱

private String user;//使用该台ATM机的用户全部信息

private String antherUser;//被转账用户

//登录方法

public boolean login(String userNameString,String userPassword1){

boolean b= false;

String x = data.backUser(userNameString);

//判断账户是否存在

if(!x.equals("null")){

user = x;//获取用户所有信息

String[] str = user.split("\\*");//将用户信息分割

userName = str[0];//用户名

userPassword = str[1];//用户密码

userMoney = Double.parseDouble(str[2]);//用户余额

//密码正确

if(userPassword.equals(userPassword1))

b = true;

}

return b;

}

//获取账户余额

public Double getMoney1(){

return userMoney;

}

//存钱

public boolean saveMoney(Double money1){

boolean b = false;

if(money1%100 == 0) { //如果存的钱正确

userMoney = userMoney + money1;//存上

b = true;

}

retuhttp://rn b;

}

//取钱

public boolean quMoney(Double money1){

boolean b = false;

if(money1%100 == 0 && money1 <= userMoney){

userMoney = userMoney - money1;

b = true;

}

return b;

}

//只判断用户账户是否存在

public boolean anotherUser(String userName1){

boolean b = false;

String inUserName = userName1;

String str = data.backUser(inUserName);

//如果该账户存在

if(!str.equals("null")) {

antherUser = str;//获取被转账账户所有信息

b = true;

}

return b;

}

//进行转账

public void giveMoney(Double money1){

String[] str1 = antherUser.split("\\*");//分割

Double x = Double.parseDouble(str1[2]);//获取被转账账户余额

x = x + money1;

userMoney = userMoney - money1;

antherUser = changeUser(str1[0], str1[1], x);//改变被转账账户信息

data.saveData(antherUser,false);//将用户信息传给Data类保存被转账账户信息

}

//修改密码实现

public void changePassword(String newPassword){

userPassword = newPassword;

}

//办完业务后修改用户信息

private String changeUser(String n,String w,Double d){

String str = n + "*" + w + "*" + d;

return str;

}

//办完所有业务

public void over(){

user = changeUser(userName,userPassword,userMoney);

data.saveData(user,true);

}

}

package bank;

import java.io.*;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

//数据类是文件和ATM机之间操作用户信息的桥梁

public class Data {

//Map储存数据库里所有用户的全部信息

Map userData = new HashMap();

//返回用户的信息

private String user;

//创建数据类加载所有用户信息

public Data(){

getUsers();

}

private void getUsers(){

String str;

String[] string;

File file = new File("src\\bank\\user");

FileReader fileReader = null;

BufferedReader bufferedReader = null;

try{

fileReader = new FileReader(file);

bufferedReader = new BufferedReader(fileReader);

while((str = bufferedReader.readLine())!=null){

string = str.split("\\*",2);

userData.put(string[0],string[1]);

}

}catch(Exception e){

e.printStackTrace();

if((fileReader!=null)&&(bufferedReader!=null)){

try {

bufferedReader.close();

fileReader.close();

} catch (IOException e1) {

e1.printStackTrace();

}

}

}

}

//告诉用户名,如果找到返回该用户所有信息,没找到返回null

public String backUser(String userName){

String str = "null";

if(userData.containsKey(userName))

str = userName + "*" + userData.get(userName);

user = str;

return user;

}

//修改用户数据并储存在userData图里

public void saveData(String user,boolean aBoolean){

String[] string = user.split("\\*",2);

userData.remove(string[0]);

userData.put(string[0],string[1]);

if(aBoolean)//判断用户是否操作结束

changeUser();

}

//用户操作完,将userData里所有的用户再写入文件里

private void changeUser(){

String str,string="";

Set keys = userData.keySet();

for(String key : keys){

str = key + "*" + userData.get(key);

string = string + str + "\n";

}

File file = new File("src\\bank\\user");

FileWriter out = null;

try {

out = new FileWriter(file);

out.write(string);

out.flush();

} catch (IOException e) {

e.printStackTrace();

}finally{

if(out != null){

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

//user文件

//需要注意文件位置"src\\bank\\user"

李四*234*7500.0

张三*123*13100.0

王五*123*1100.0

atmJFrame包

package atmJFrame.myJFrame;

import bank.ATM;

import javax.swing.*;

import java.awt.*;

//自己创造的界面的父类

public class MyJFrame extends JFrame {

//设置字体供子类使用

public static final Font FONT_SIZE_10 = new Font("宋体",Font.PLAIN,18);

public static final Font FONT_SIZE_20 = new Font("宋体",Font.PLAIN,20);

public static final Font FONT_SIZE_25 = new Font("宋体",Font.PLAIN,25);

//给一个静态公共不可改变的ATM对象作为属性,供子类使用

public static final ATM atm = new ATM();

//创建窗体

public MyJFrame(String title){

super(title);

//设置窗体不可改变

setResizable(false);

//设置窗体大小

setSize(600,600);

//设置窗体居中

setLocationRelativeTo(null);

}

//无参构造,创建无标题窗体

public MyJFrame(){

this("");

}

//设置弹窗方法供子类使用(传入字符串并显示出)

protected void showMessageDialog(String str){

JOptionPane.showMessageDialog(this,str);

}

}

package atmJFrame.myJFrame;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

//登录界面继承MyJFrame

public class LoginJFrame extends MyJFrame {

public LoginJFrame(){

super("欢迎使用ATM机");

//设置窗体可关闭

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置组件

init();

//界面可视化

setVisible(true);

}

//初始化界面

private void init(){

//创建面板对象,并定义为空布局

JPanel jp = new JPanel(null);

//添加标签

JLabel jl1 = new JLabel("账号:");

JLabel jl2 = new JLabel("密码:");

//设置标签字体

jl1.setFont(FONT_SIZE_20);

jl2.setFont(FONT_SIZE_20);

//设置标签在面板中的位置

jl1.setBounds(100,100,70,70);

jl2.setBounds(100,250,70,70);

//添加文本框

JTextField jtf = new JTextField(20);

//添加密码文本框

JPasswordField jpf = new JPasswordField(20);

//设置文本框位置

jtf.setBounds(200,115,200,40);

jpf.setBounds(200,265,200,40);

//添加按钮

JButton jb = new JButton("登录");

//设置按钮文字大小

jb.setFont(FONT_SIZE_20);

//设置按钮位置及大小

jb.setBounds(250,400,100,50);

//设置面板背景颜色

jp.setBackground(Color.YELLOW);

//内部类进行事件处理

jb.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

//获取输入的账号和密码

String userName = jtf.getText();

String userPassword = new String(jpf.getPassword());

//验证是否正确

boolean aBoolean = atm.login(userName,userPassword);

if(aBoolean){

//登录成功

dispose();//关闭登录界面

//打开功能界面

new WorkingJFrame();

}

else

showMessageDialog("账号或密码错误");//调用父类弹窗方法

}

});

//添加组件

jp.add(jl1);

jp.add(jtf);

jp.add(jl2);

jp.add(jpf);

jp.add(jb);

//窗体添加面板

add(jp);

}

public static void main(String[] args) {

new LoginJFrame();//先创建登录界面

}

}

package atmJFrame.myJFrame;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

//功能界面

public class WorkingJFrame extends MyJFrame {

public WorkingJFrame(){

super("功能界面");

init();

setVisible(true);

}

//初始化功能界面

private void init(){

//设置第一个面板对象

JPanel jp1 = new JPanel();

//创建标签,将标签添加到第一个面板上

JLabel jb = new JLabel("请选择要进行的操作:");

jb.setFont(FOyVeKbpZJaNT_SIZE_25);//设置标签字体大小

jp1.add(jb);

jp1.setBackground(Color.CYAN);

//将第一个面板添加到窗体上方(JFrame窗体是边界布局)

add(jp1, BorderLayout.NORTH);

//创建第二个面板对象(空布局,自己设置按钮位置及大小),然后将按钮添加

JPanel jp2 = new JPanel(null);

//字符串数组存储各个按钮名字,然后循环设置按钮名字

String[] str = {"1、余额查询","2、取钱","3、存钱","4、转账","5、修改密码","6、退出系统"};

//int二维数组储存各个按钮位置及大小信息,循环设置

int[][] xy = new int[][]{{50,100,200,50},{350,100,200,50},{50,200,200,50},{350,200,200,50},{50,300,200,50},{350,300,200,50}};

for(int i = 0;i < str.length;i ++){

JButton jButton = new JButton(str[i]);//创建按钮

jButton.setFont(FONT_SIZE_20);//设置按钮字体大小

jButton.setBounds(xy[i][0],xy[i][1],xy[i][2],xy[i][3]);//设置按钮位置及大小

jButton.addActionListener(listener);//按钮注册监听器

jp2.add(jButton);//将按钮添加

}

//设置jp2背景颜色

jp2.setBackground(Color.GRAY);

//将第二个面板添加到窗体(JFrame窗体中间)

add(jp2);

}

//创建事件监听器

private ActionListener listener = new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String actionCommand = e.getActionCommand();//获取按钮上的字

//switch选择功能,且每次功能结束回到该界面,关闭已操作完的功能界面

switch(actionCommand){

case "1、余额查询":

getMoney();

break;

case "2、取钱":

quMoney();

break;

case "3、存钱":

cunMoney();

break;

case "4、转账":

giveMoney();

break;

case "5、修改密码":

changePassword();

break;

case "6、退出系统":

over();

break;

}

}

};

//查询余额功能

private void getMoney(){

showMessageDialog("您的账户余额为:" + atm.getMoney1());//调用父类方法弹窗

}

//取钱功能

private void quMoney(){

new QuMoneyJFrame();//创建取钱界面

dispose();//关闭该界面

}

//存钱功能

private void cunMoney(){

new CunMoneyJFrame();

dispose();

}

//转账功能

private void giveMoney(){

new GiveMoneyJFrame();

dispose();

}

//修改密码功能

private void changePassword(){

new ChangePasswordJFrame();

dispose();

}

//退出系统功能

private void over(){

atm.over();//调用方法操作文件

dispose();

}

}

package atmJFrame.myJFrame;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

//中间窗口,存钱、取钱、转账、修改密码界面的父类

public class CentreJFrame extends MyJFrame {

//空布局面板,自己设置组件位置及大小

protected JPanel jp = new JPanel(null);

//输入金额标签

protected JLabel jl = new JLabel("请输入金额:");

//输入金额文件框

protected JTextField jtf = new JTextField(20);

//确认、取消按钮

protected JButton jb1 = new JButton("确认");

protected JButton jb2 = new JButton("取消");

//转账时转账账号标签

protected JLabel jLabel = new JLabel("请输入转账账号:");

//转账时转账账号文本框

protected JTextField jTextField = new JTextField(20);

//修改密码时新密码标签

protected JLabel jLabelCP = new JLabel("请输入新密码(只能为数字):");

//修改密码时新密码文本框

protected JTextField jTextFieldCP = new JTextField(20);

//提醒用户输入金额为100的倍数

private JLabel jle = new JLabel("( 提示:只能输入100的倍数 )");

public CentreJFrame(String str){

super(str);

//判断要进行的操作

if(str.equals("转账"))

init1();

else if(str.equals("修改密码"))

init2();

else

init();

one();//最后调用共有

}

//取钱和取钱特有组件

private void init(){

//输入金额标签,设置字体,位置及大小

jl.setFont(FONT_SIZE_25);

jl.setBounds(100,100,200,100);

//输入金额文本框

jtf.setBounds(300,250,200,50);

//添加输入金额标签和输入金额文本框

jp.add(jl);

jp.add(jtf);

setJLE();

}

//转账特有组件

private void init1(){

init();

//输入账户标签

jLabel.setFont(FONT_SIZE_25);

jLabel.setBounds(100,10,200,40);

//输入账户文本

jTextField.setBounds(300,80,200,50);

//添加输入账户标签和输入账户文本

jp.add(jLabel);

jp.add(jTextField);

}

//修改密码特有组件

private void init2(){

//输入新密码标签

jLabelCP.setFont(FONT_SIZE_25);

jLabelCP.setBounds(50,100,400,70);

//输入新密码文本框

jTextFieldCP.setBounds(300,215,200,40);

//添加输入新密码标签和输入新密码文本框

jp.add(jLabelCP);

jp.add(jTextFieldCP);

}

//共有组件及操作

private void one(){

//按钮设置

jb1.setFont(FONT_SIZE_20);

jb2.setFont(FONT_SIZE_20);

jb1.setBounds(300,350,100,50);

jb2.setBounds(450,350,100,50);

jp.add(jb1);

jp.add(jb2);

jp.setBackground(Color.GREEN);

jb1.addActionListener(listener);

jb2.addActionListener(listener);

//添加到窗体

add(jp);

setVisible(true);

}

//设置提示

private void setJLE(){

jle.setFont(FONT_SIZE_10);

jle.setBounds(100,180,300,50);

jp.add(jle);

}

//创建监听器

private ActionListener listener = new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {//按钮被点击后

String actionCommand = e.getActionCommand();//获取按钮上的字

switch(actionCommand){

case "确认":

change();

break;

case "取消":

new WorkingJFrame();//创建功能界面

dispose();//关闭此界面

break;

}

}

};

//点击确认按钮执行的操作,子类重写覆盖实现各自功能

protected void change(){

}

//正则表达式判断输入是否为数字

protected boolean isNumber(String str){

Pattern pattern = Pattern.compile("[0-9]*");

Matcher isNum = pattern.matcher(str);

if(!isNum.matches())

return false;

return true;

}

}

package atmJFrame.myJFrame;

//取钱界面

public class QuMoneyJFrame extends CentreJFrame {

public QuMoneyJFrame(){

super("取钱");

}

protected void change(){

String s = jtf.getText();

if(isNumber(s)){

Double money = Double.parseDouble(s);

boolean b = atm.quMoney(money);

if(b){

showMessageDialog("请收好您的钱\n您的账户余额为:" + atm.getMoney1());

}

else

showMessageDialog("您输入有误" );

}

else

showMessageDialog("您输入有误" );

jtf.setText("");

}

}

package atmJFrame.myJFrame;

//存钱界面

public class CunMoneyJFrame extends CentreJFrame {

public CunMoneyJFrame(){

super("存钱");

}

protected void change(){

String s = jtf.getTeyVeKbpZJaxt();

if(isNumber(s)){

Double money = Double.parseDouble(s);

boolean b = atm.saveMoney(money);

if(b)

showMessageDhttp://ialog("您的钱钱已存入\n您的账户余额为:" + atm.getMoney1());

else

showMessageDialog("您输入有误" );

}

else

showMessageDialog("您输入有误" );

jtf.setText("");

}

}

package atmJFrame.myJFrame;

//转账界面

public class GiveMoneyJFrame extends CentreJFrame {

public GiveMoneyJFrame(){

super("转账");

}

protected void change(){

String s = jTextField.getText();

boolean b = atm.anotherUser(s);

if(b){

//获取输入金额

String s1 = jtf.getText();

if(isNumber(s1)){//如果输入是数字

Double money = Double.parseDouble(s1);

atm.giveMoney(money);

showMessageDialog("钱已转入\n您的账户余额为:" + atm.getMoney1());

}

else

showMessageDialog("您输入有误" );

}

else

showMessageDialog("您输入有误" );

new WorkingJFrame();//创建功能界面

dispose();//关闭此界面

}

}

package atmJFrame.myJFrame;

//修改密码界面

public class ChangePasswordJFrame extends CentreJFrame{

public ChangePasswordJFrame(){

super("修改密码");

}

protected void change(){

String s = jTextFieldCP.getText();

if(isNumber(s)){

atm.changePassword(s);

showMessageDialog("密码修改成功");

}

else

showMessageDialog("您输入有误" );

new WorkingJFrame();//创建功能界面

dispose();//关闭此界面

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:c 开放api接口吗(开放的api接口)
下一篇:券商股票接口api(券商数据接口)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~