Проектирование и внедрение системы банкоматов на базе JavaSwing

Java задняя часть программист

Это пятый день моего участия в августовском испытании обновлений. Подробную информацию о мероприятии см.: [Августовское испытание обновлений] ​  

Предисловие:

Этот проект разработан с использованием Java Swing, который может реализовать базовый вход в систему, перевод, запрос баланса, депозит и снятие средств с системы банкомата / банковской системы. Дизайн интерфейса относительно краток, подходит для использования в качестве разработки курса Java и технологии обучения.

анализ спроса:

С улучшением жизненного уровня, ростом потребления и ростом расходов деньги, естественно, неразделимы. Кто-то хочет снять деньги, кто-то хочет сэкономить, но они могут только пойти в банк, а банк не очень распространен, он может быть установлен в месте с высокой плотностью людей, или создан в несколько большую площадь, но для жителей более отдаленных районов это, несомненно, вызвало большие трудности. Итак, как решить эту проблему?Развитие банкоматов обеспечивает удобство для большинства пользователей и улучшает их жизнь. Вам не нужно ждать в очереди в банке, чтобы выполнить какое-то простое дело, банкомат может предоставить вам такие функции, как снятие наличных, депозит, запрос баланса и изменение пароля. При этом охват банкоматов намного больше, чем у банков.Главная причина в том, что функции банкоматов просты в реализации и простоте развертывания.Не требует много места, людских и материальных ресурсов, и может быть установлен вверх во многих точках. Именно в этой ситуации банкоматы полюбились людям и приобрели большую популярность, что, можно сказать, очень выгодно банкам и людям. Благодаря дизайну и разработке системы Windows, эта система в основном выполняет функции запроса баланса, функции снятия, функции депозита, функции перевода и функции системы выхода.Цель состоит в том, чтобы реализовать некоторую простую кинетическую энергию с помощью автоматического депозита и снятия банкомата.

Основные модули:

Вход пользователя, регистрация, сброс, депозит, запрос баланса, снятие средств, перевод, смена пароля, возврат карты и другие специальные функции.

Функциональный скриншот:

войти Регистрация:

Запустите программу, чтобы начать метод Mian, чтобы ввести страницу входа

титульная страница

депозит

Внесите введенную сумму и нажмите «Подтвердить», чтобы завершить депозит,При внесении депозита ввод должен быть целым числом

Проверить баланс

Запросить собственный баланс и информацию об операциях

снять деньги со счета

Сумма вывода не может быть больше остатка на счете

перечислить

При переводе денег необходимо правильно ввести информацию о пользователе, иначе перевод не состоится

изменить пароль

После ввода исходного пароля для проверки дважды введите один и тот же новый пароль, чтобы завершить функцию изменения пароля.

Дизайн базы данных:

Этот банкомат пока не использует базу данных, он хранит данные в виде текстового txt, что более удобно, быстро и просто.

Некоторые ключевые коды:

Основная загрузка:

  public static void main(String[] args)throws Exception {  
	        usersList = new ArrayList<Account>();  
	        //System.out.println(usersList);  
	        /**********************用户文本**********************/  
	        File users = new File("users.txt");  
	        if (!users.exists()) {  
	            try {  
	                users.createNewFile();  
	                Writer fw = new FileWriter("users.txt");  
	                fw.write("123456  123456   10000");  
	                fw.flush();  
	                fw.close();  
	            } catch (Exception e1) {  
	                JOptionPane.showMessageDialog(null, "创建用户文档失败");  
	            }  
	  
	        }  
	        usersFile = users;//创建用户文档,存储用户账户,密码,余额信息;  
	        usersListRead();  
	        usersListUpdate();  
	        /*****************************Login****************************/  
	  
	        LoginGui loginGui = new LoginGui();  
	    } 

Связано с аккаунтом:

package atm;
//import com.sun.deploy.util.SyncFileAccess;  
//import com.sun.org.apache.regexp.internal.RE;  
  
import javax.swing.*;  
import  java.io.*;  
import java.text.SimpleDateFormat;  
import  java.util.*;
public class Account {
	  int money;  
	    String id;//账号名  
	  
	    String password;  
	    Date now=new Date();  
	    Date currentTime;  
	    SimpleDateFormat formatter;  
	    Reader fr;  
	    ;  
	    public Account(String id, String password, String money) {//构造方法  
	        this.id = id;  
	  
	        this.password = password;  
	        this.money=Integer.parseInt(money);  
	    }  
	  
	    public void outMoney (int money)throws Exception {//抛出异常,由相关的界面类弹窗处理异常,下面几个方法同理  
	        //如在取钱界面取钱,则会调用此函数,进行try/catch处理,获得这个函数的异常,弹窗说明异常  
	        if (money > this.money) {  
	            throw new Exception("余额不足");  
	        }
	        if(money<0)  
	        {  
	            throw new Exception("不能取出负数");  
	        }  
	        formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//时间格式  
	        currentTime = new Date();//当前时间  
	        String dateString = formatter.format(currentTime);//处理当前时间格式  
	        Writer fw = new FileWriter(Test.file);  
	        fw.write(Test.recordString.append(dateString + "\t" + Test.currentAccount.id + "\t取出" + money + "元\r\n").toString());//将这次的取钱行为添加到记录文件中  
	        fw.flush();//写进文件  
	        fw.close();  
	        this.money -= money;  
	        Test.usersListUpdate();//更新用户文档(信息)  
	    }  
	  
	    public void inMoney(int money)throws Exception  
	    {  
	        try {  
	            Writer fw = new FileWriter(Test.file);  
	           // System.out.println(Test.file);  
	            formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss");  
	            currentTime=new Date();  
	            String dateString=formatter.format(currentTime);  
	            fw.write(Test.recordString.append(dateString+"\t"+Test.currentAccount.id+"\t存入" + money + "元\r\n").toString());  
	            fw.flush();//写进文件  
	            fw.close();  
	  
	            this.money+=money;  
	  
	            Test.usersListUpdate();//更新当前用户信息  
	  
	        }  
	        catch (Exception e1)  
	        {  
	            throw new Exception("写入记录失败");  
	        }  
	  
	    }  
	  
	    public void transfer(int money,String id)throws Exception//转账  
	    {  
	        if(id.equals(Test.currentAccount.id))  
	        {  
	            throw new Exception("不能转给自己");  
	        }  
	        if(money>this.money)  
	        {  
	            throw new Exception("余额不足");  
	        }  
	        if(money<0) {  
	            throw new Exception("不能转入负数");  
	        }  
	  
	  
	        for(int i=0;i<Test.usersList.size();i++)  
	        {  
	            if(Test.usersList.get(i).id.equals(id))//找到要转帐的用户  
	            {  
	                Test.usersList.get(i).money+=money;//转入  
	                this.money-=money;//扣钱  
	  
	                FileWriter fw=new FileWriter(Test.file);  
	                formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//声明时间格式  
	                currentTime=new Date();//获取当前时间  
	                String dateString=formatter.format(currentTime);//转换时间格式  
	                fw.write(Test.recordString.append(dateString+"\t向"+id+"\t转出"+money+"元\r\n").toString());//Test类中的静态字符串拼接上这个字符串覆盖写入当前用户文档  
	                fw.close();  
	  
	                /********************向转入目标写入转账信息*************************/  
	                try {  
	                fr = new FileReader(id+".txt");//字符流  
	                 }  
	                 catch (Exception e)  
	                 {  
	                System.out.println("字符流创建失败");  
	                }  
	  
	                BufferedReader bfr = new BufferedReader(fr);  
	  
	                String temp="";  
	                String temp1;  
	  
	                while ((temp1 = bfr.readLine()) != null)  
	                {  
	                    temp+=temp1;  
	                }  
	                temp=temp.replace("元","元\n\r")+dateString+"\t由"+Test.currentAccount.id+"\t转进"+money+"元\r\n";  
	                System.out.println(temp);  
	                fw=new FileWriter(id+".txt");  
	                fw.write(temp);  
	                fw.close();  
	  
	  
	                JOptionPane.showMessageDialog(null,"转账成功");  
	                Test.usersListUpdate();//更新用户文档  
	  
	                return;  
	            }  
	        }  
	        throw new Exception("目标用户不存在");  
	    }  
	  
	    public void ChangePassword(String newPassword)throws Exception  
	    {  
	     if(newPassword.equals(this.password))  
	     {  
	         throw new Exception("原密码和新密码不能一样");  
	     }  
	  
	     else  
	     {  
	         if(newPassword.equals(""))  
	         {  
	             throw new Exception("密码不能为空");  
	         }  
	  
	     }  
	     password=newPassword;  
	        Test.usersListUpdate();  
	  
	  
	    }  
	  
	  
	  
}

изменить пароль:

package atm;
import javax.swing.*;  
import java.awt.*;  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener; 
public class ChangePassword implements ActionListener{
	public JPasswordField oldPassword,newPassword,checkPassword;  
    public JFrame iframe;  
    public JPanel ip0,ip1,ip2,ip3,ip4;  
    public JButton confirm,cancel,exit;  
    public ChangePassword() {  
        iframe=new JFrame("更改密码");  
        iframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  
  
        ip2=new JPanel();  
        ip2.add(new JLabel("原密码:"));  
        oldPassword=new JPasswordField(20);  
        ip2.add(new JLabel("<html><br/><html>"));//换行  
        ip2.add(oldPassword);  
  
        ip0=new JPanel();  
        ip0.add(new JLabel("新密码:"));  
        newPassword=new JPasswordField(20);  
        ip0.add(new JLabel("<html><br/><html>"));//换行  
        ip0.add(newPassword);  
  
        ip4=new JPanel();  
        ip4.add(new JLabel("再次输入新密码:"));  
        checkPassword=new JPasswordField(20);  
        ip4.add(new JLabel("<html><br/><html>"));//换行  
        ip4.add(checkPassword);  
  
        ip3=new JPanel();  
        confirm=new JButton("确定");  
        ip3.add(confirm);  
        cancel=new JButton("返回");  
        ip3.add(cancel);  
  
        iframe.add(ip2);  
        iframe.add(ip0);  
        iframe.add(ip4);  
        iframe.add(ip3);  
        iframe.add(confirm);  
        iframe.add(cancel);  
        iframe.setLayout(new FlowLayout());  
        iframe.setVisible(true);  
        iframe.setTitle("密码更改");//窗体标签  
        iframe.setSize(400, 200);//窗体大小  
        iframe.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)  
        confirm.addActionListener(this);  
  
        cancel.addActionListener(this);  
  
    } 
    public void  pw_clean() {
    	newPassword.setText("");
		oldPassword.setText("");
		checkPassword.setText("");
    }
  
    @Override  
    public void actionPerformed(ActionEvent e) {  
        if(e.getActionCommand().equals("确定")) {  
            if (Test.currentAccount.password.equals(oldPassword.getText())) {  
                try {  
                    if(newPassword.getText().equals(checkPassword.getText())) { 
                    	if(newPassword.getText().length()>=6) {
                    		Test.currentAccount.ChangePassword(newPassword.getText());  
                    		JOptionPane.showMessageDialog(null, "更改密码成功");  
                    		iframe.setVisible(false);  
                            Test.menu.mframe.setVisible(false);//关闭菜单界面  
                            new LoginGui();  
                    	}else {
                    		JOptionPane.showMessageDialog(null,"密码不能少于6位!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
                    		pw_clean();
                    	}
                    }  
                    else  
                    {  
                        JOptionPane.showMessageDialog(null, "两次输入的密码不一致");  
                        pw_clean();
                    }  
                }  
             catch (Exception e1) {//捕获账户类中更改密码函数的异常并弹窗显示  
                    JOptionPane.showMessageDialog(null, e1.getMessage()); 
                    pw_clean();
                }  
            } else {  
  
                JOptionPane.showMessageDialog(null, "原密码错误");  
                pw_clean();
            }  
        }  
        else//如果点击cancel  
        {  
            iframe.setVisible(false);  
        }  
    }  
}

Схема структуры документа:

Суммировать:

В этом дизайне курса я в основном отвечаю за часть интерфейса входа в систему и оптимизацию интерфейса. через этот дизайн курса. Я узнал много вещей, которые мне очень пригодились. Я чувствую, что дизайн интерфейса java похож на интерфейс mfc. Просто у java нет визуального интерфейса и это слишком утомительно. Другие в основном связаны с классами и объектами. Это довольно просто реализовать.

Вы можете лайкнуть, добавить в избранное, подписаться, прокомментировать меня

​