Это пятый день моего участия в августовском испытании обновлений. Подробную информацию о мероприятии см.: [Августовское испытание обновлений]
Предисловие:
Этот проект разработан с использованием 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 нет визуального интерфейса и это слишком утомительно. Другие в основном связаны с классами и объектами. Это довольно просто реализовать.
Вы можете лайкнуть, добавить в избранное, подписаться, прокомментировать меня