java期末课程设计----模拟银行业务(带界面)

java期末课程设计----模拟银行业务(带界面)
本项目包含存款,取款,查询,转账,修改密码等功能的银行管理系统的功能(不涉及数据库)。大致流程图如下:

在这里插入图片描述

一、设计思路

本系统采用JAVA语言并在eclipse环境下编写测试完成,涉及类的概念,以及面向对象的几大特性(继承,封装,多态,抽象),也有异常处理机制,采用集合(更好)存储账户数据。JAVA类的面向对象的应用,拥有异常处理机制,不会因为输入错误而导致程序崩溃。本系统各个类之间的相互关系,涉及继承、封装、多态、抽象,可以实现数据保存功能,数据将保存在文件中(即当你注册了一个账户,下次再登录系统时,可以实现与上次最后的操作相衔接)。最后账户号自动生成。注册时需要输入用户的个人信息,将信息保存到文件。忘记密码则需要验证用户卡号和身份证号来重新设置新密码,成功后则返回登录界面登录。系统的默认账户名是张三,卡号是123456,密码是123456,身份证号为123456。
通过对文件的操作进行数据保存和读取;用户注册,注册信息写入文件保存;用户登录首先输入卡号和密码,通过读取文件用户信息验证,验证通过显示操作界面,然后选择存或取及余额查询转账,系统会自动进行各种计算,最后将信息保存到文件中。存款及取款要有输入验证,输入金额不能为负数或字母,验证通过写入文件;查询余额从文件中读取数据;修改密码需要判断新密码是否与原密码相同,与输入的确认密码是否一致,验证通过则更新当前用户信息,返回登录界面重新登录。

二、界面展示

图1 主界面:
在这里插入图片描述

图2 注册界面:
在这里插入图片描述
图3 忘记密码界面:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图4 操作界面:
在这里插入图片描述
图5 存款界面:
在这里插入图片描述

图6 取款界面:
在这里插入图片描述
图7 查询记录界面:
在这里插入图片描述

图8 修改密码界面:

在这里插入图片描述

三、代码实现

登录注册界面

代码如下(示例):


import javax.swing.*;  
import java.awt.*;  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import java.io.*; 

public class Login implements ActionListener{//实现监听器的接口  
	 JFrame frame;  
	 JPanel jpanel_0,jpanel_1,jpanel_2,jpanel_3,jpanel_4,p0,p1; 
     JTextField cardhao,username,idcard;  
	 JPasswordField passWord,passwordCheck;   
	 JButton login,register,reset;  
	 Reader fw;  
	Boolean flag=true;//控制是否能注册的变量  

	public Login() {  
		frame=new JFrame("登录");  
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗口的点击右上角的x的处理方式,这里设置的是退出程序  
		
		jpanel_0=new JPanel(); 
		JLabel jlb1=new JLabel("模拟银行业务系统");
		jlb1.setFont(new java.awt.Font("Dialog",  1, 30));
		jlb1.setForeground(Color.blue);
		jpanel_0.add(jlb1);
		
		jpanel_1=new JPanel();  
		jpanel_1.add(new JLabel("\t账户名:"));  
		username=new JTextField(20);  
		jpanel_1.add(username);  

		jpanel_2=new JPanel();  
		jpanel_2.add(new JLabel("\t卡号:"));  
		cardhao=new JTextField(20);  
		jpanel_2.add(cardhao);  
		
		p1=new JPanel();  
		p1.add(new JLabel("\t身份证号:"));  
		idcard=new JTextField(20);  
		p1.add(idcard); 

		jpanel_3=new JPanel();  
		jpanel_3.add(new JLabel("\t密码:"));  
		passWord=new JPasswordField(20);  
		jpanel_3.add(passWord);   

		jpanel_4=new JPanel();  

		login=new JButton("   登录      ");  
		register=new JButton("   注册      ");  
		reset=new JButton("   忘记密码    ");
		jpanel_4.add(login);  
		jpanel_4.add(register);  
		jpanel_4.add(reset);	

		p0=new JPanel();  
		p0.add(new JLabel("确认密码:"));  
		passwordCheck=new JPasswordField(20);  
		p0.add(passwordCheck); 
		
		frame.add(jpanel_0);  
		frame.add(jpanel_1);
		frame.add(p1);//输入身份证号码
		frame.add(jpanel_2);
		frame.add(jpanel_3);		
		frame.add(p0);//确认密码框  	
		frame.add(jpanel_4);  

		frame.pack();  
		frame.setVisible(true);  
		p0.setVisible(false); 
		p1.setVisible(false);
		jpanel_1.setVisible(false);
		
		frame.setBounds(500,500,350,350);//设置大小  
		frame.setLayout(new FlowLayout());//设置流式布局  
		frame.setLocationRelativeTo(null);//居中 
		
		login.addActionListener(this);//添加监视器  
		register.addActionListener(this);  
		reset.addActionListener(this);  
		/*****************************Login****************************/  
		
	}  
		
	
	public void clear() {
		username.setText("");
		cardhao.setText("");
		idcard.setText("");
		passWord.setText("");
		passwordCheck.setText("");

	}
	
	@Override  
	public void actionPerformed(ActionEvent e) {  
		
		if(e.getSource()==reset){ 
			 

			frame.setVisible(false);//隐藏窗口
	          new ForgetPassword();//跳转到忘记密码界面	
	          return;
			  
		}

		if(e.getActionCommand().equals("   注册      ")) {//注册,如果监听器获得的按钮文本是这个,也就是点击的按钮文本是这个的话,执行下面的语句  
			
			if(p0.isVisible()==false&&p1.isVisible()==false&&jpanel_1.isVisible()==false)  
			{  
				p0.setVisible(true);//检查密码输入栏  
				p1.setVisible(true);
				jpanel_1.setVisible(true);
				login.setText("   取消      ");
				flag=true;  
				return;  
			} 
	
			String content1=cardhao.getText();
			String content4=username.getText();
			String content5=idcard.getText();
			if(flag==true) {  
				if (content4.equals(""))//如果账户名的文本是空  
				{  
					JOptionPane.showMessageDialog(frame, "账户名不能为空");//弹窗  
					return;  
				} 
			}
			
			if(flag==true) {  
				if (content5.equals(""))//如果身份证号码的文本是空  
				{  
					JOptionPane.showMessageDialog(frame, "身份证号不能为空");//弹窗  
					return;  
				} 
			}
			
					if(flag==true) {  
						if (content1.equals(""))//如果卡号的文本是空  
						{  
							JOptionPane.showMessageDialog(frame, "卡号不能为空");//弹窗  
							return;  
						}  

				for (int i = 0; i < Bank.usersList.size(); i++) {  

					if (Bank.usersList.get(i).id.equals(content1)) {  
						JOptionPane.showMessageDialog(frame, "该账户已被注册");  					
						clear();
						return;//如果同名,结束方法,不在运行下面的语句  
					}  

				}  
				
				//如果执行到这里说明找到卡号 
				char[] a=passWord.getPassword();
				char[] b=passwordCheck.getPassword();
				String content2=new String(a);
				String content3=new String(b);
				
				if (content2.equals("")) { 
					
					JOptionPane.showMessageDialog(frame, "密码不能为空,请重新输入");  
					return;  

				} else {  
					if (content3.equals(content2)) {  
						Account registeraccount = new Account(content1,content2, "0",content4,content5);//实例化此账号  
						JOptionPane.showMessageDialog(frame, "注册成功,请登录");  
						Bank.usersList.add(registeraccount);//加入Bank类的静态用户list  
						Bank.usersListUpdate();//更新用户文档  

						return;  
					} else {  
						JOptionPane.showMessageDialog(frame, "两次输入的密码不一致,请重新输入");  
						return;  
					}  
				}  
			}  
		}  
		
		if(e.getActionCommand().equals("   登录      ")){  
			if (cardhao.getText().equals(""))//如果卡号的文本是空  
			{  
				JOptionPane.showMessageDialog(frame, "卡号不能为空");//弹窗  
				return;  
			}  
    		
			if(new String(passWord.getPassword()).equals(""))  								
			{ 
				JOptionPane.showMessageDialog(frame, "密码不能为空");//弹窗  
				return;
			}
			   
		            for (int i = 0; i < Bank.usersList.size(); i++) {

		            	if (Bank.usersList.get(i).id.equals(cardhao.getText())) { 
		            		
							if(new String(passWord.getPassword()).equals(Bank.usersList.get(i).password))  
							{  
								
		                        JOptionPane.showMessageDialog(frame, "登录成功");
		                        Bank.currentAccount=Bank.usersList.get(i);//将list中符合登陆输入的账户密码的类设为当前Bank类中的静态的“当前类”,以便后面各种操作;
		                        Bank.file=new File(Bank.currentAccount+".txt");
		                        Bank.recordString=new StringBuilder();//清空,避免将上一个用户的记录写进新登录的用户中
		                        //Bank.recordString.append("");//避免recordString空指针
		                        frame.setVisible(false);//隐藏登陆窗口  
		                        JOptionPane.showMessageDialog(null, "欢迎你"+","+Bank.currentAccount.userName);
		                        Menu menu=new Menu();//实例化菜单窗口

		                        Bank.menu=menu;
		                

		                        /************************创建记录文件**********************/
		                        File records = new File(Bank.currentAccount.id+".txt");//以账户id命名
		                        if(!records.exists())
		                        {
		                            try {
		                                records.createNewFile();
		                            }
		                            catch (Exception e1)
		                            {
		                                JOptionPane.showMessageDialog(null, "创建该用户的记录失败");
		                            }
		                        }
		                        Bank.file=records;
		                        /*****************读取记录文件************/
		                        try {
		                             fw = new FileReader(Bank.file);//字符流
		                        }
		                        catch (Exception e1)
		                        {
		                            JOptionPane.showMessageDialog(null, "读取记录失败");
		                        }
		                        BufferedReader bfr=new BufferedReader(fw);

		                        String temp="";
		                        try {


		                            while ((temp = bfr.readLine()) != null) {//不知为何读取出的字符串中最前面会出现Null,但不影响使用
		                                Bank.recordString .append(temp);//读取原先该账户的记录的每一行并拼接到Bank.recordString中,在inqury类中输出作为查询记录的结果
		                            }
		                            //将记录读取并合并为一个字符串
		                            fw.close();
		                        }
		                        catch (Exception e1)
		                        {
		                            System.out.println("读取记录过程中出现错误");
		                        }


		                        return;
		                    }
		                    else
		                    {
		                        JOptionPane.showMessageDialog(frame, "密码错误");
		                        passwordCheck.setText("");
		                        return;
		                    }

		                }
		            }
		            JOptionPane.showMessageDialog(frame, "该用户不存在");


		        }
		if(e.getActionCommand().equals("   取消      "))  
		{  
			p0.setVisible(false);  
			p1.setVisible(false); 
			jpanel_1.setVisible(false); 
			
			login.setText("   登录      ");  
			flag=false;//不可注册  
		}  
		}
	}  


忘记密码

输入卡号和身份证号,对用户的卡号,身份证号进行验证(你也可以再添加一个账户名的验证)
代码如下(示例):

   import javax.swing.*;
   import java.awt.*;
   import java.awt.event.ActionEvent;
   import java.awt.event.ActionListener;
   import java.io.*; 
public class ForgetPassword implements ActionListener{
JTextField cardhao, IDcard;
JFrame frame;
JPanel jpanel_0,jpanel_1,jpanel_2,jpanel_3;
JButton button_enter,button_cancel;
public ForgetPassword() {
    frame=new JFrame("忘记密码");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 
    jpanel_0=new JPanel(); 
	JLabel jlb1=new JLabel("忘记密码");
	jlb1.setFont(new java.awt.Font("Dialog",  1, 30));
	jlb1.setForeground(Color.blue);
	jpanel_0.add(jlb1);
		
    jpanel_1=new JPanel();
    jpanel_1.add(new JLabel("卡号:"));
    cardhao=new JTextField(20);
    jpanel_1.add(cardhao);
    
    jpanel_2=new JPanel();
    jpanel_2.add(new JLabel("身份证号:"));
    IDcard=new JTextField(20);
    jpanel_2.add(IDcard);

    jpanel_3=new JPanel();
    button_enter=new JButton("确定");
    jpanel_3.add(button_enter);       
    button_cancel=new JButton("返回");
    jpanel_3.add(button_cancel); 
    
    frame.add(jpanel_0);
    frame.add(jpanel_1);
    frame.add(jpanel_2);        
    frame.add(jpanel_3);
    frame.pack();
    frame.setLayout(new FlowLayout());
    frame.setVisible(true);
    frame.setBounds(500,500,350,300);
    frame.setLocationRelativeTo(null);
    
    button_enter.addActionListener(this);
    button_cancel.addActionListener(this);
}
public void  clear() {  	  	
	 cardhao.setText("");		
	 IDcard.setText("");		 
}
public void actionPerformed(ActionEvent e) {
	if(e.getSource()==button_cancel){//按返回按钮
	     frame.setVisible(false);//隐藏窗口
	     new Login();//跳转到操作界面
    	}
	 if(e.getSource()==button_enter){
		 if (cardhao.getText().equals(""))//如果卡号的文本是空  
			{  
				JOptionPane.showMessageDialog(frame, "卡号不能为空");//弹窗  
				return;  
			}
		 if (IDcard.getText().equals(""))//如果身份证号的文本是空  
			{  
				JOptionPane.showMessageDialog(frame, "身份证号不能为空");//弹窗  
				return;  
			}
   	 for (int i = 0; i < Bank.usersList.size(); i++) {

            	if (Bank.usersList.get(i).id.equals(cardhao.getText())) { 
            		
					if(Bank.usersList.get(i).idcard.equals(IDcard.getText()))  
					{  
						
                        JOptionPane.showMessageDialog(frame, "验证身份成功");
                        Bank.currentAccount=Bank.usersList.get(i);//将list中符合登陆输入的账户密码的类设为当前Bank类中的静态的“当前类”,以便后面各种操作;
                        Bank.file=new File(Bank.currentAccount+".txt");
                        Bank.recordString=new StringBuilder();//清空,避免将上一个用户的记录写进新登录的用户中
                     
                        frame.setVisible(false);//隐藏窗口  			
 						new Method();//跳转到重新设置新密码 

                        /************************创建记录文件**********************/
                        File records = new File(Bank.currentAccount.id+".txt");//以账户id命名
                        if(!records.exists())
                        {
                            try {
                                records.createNewFile();
                            }
                            catch (Exception e1)
                            {
                                JOptionPane.showMessageDialog(null, "创建该用户的记录失败");
                            }
                        }
                        Bank.file=records;
                        /*****************读取记录文件************/
                        try {
                             fw = new FileReader(Bank.file);//字符流
                        }
                        catch (Exception e1)
                        {
                            JOptionPane.showMessageDialog(null, "读取记录失败");
                        }
                        BufferedReader bfr=new BufferedReader(fw);

                        String temp="";
                        try {


                            while ((temp = bfr.readLine()) != null) {
                                Bank.recordString .append(temp);
                            }
                            //将记录读取并合并为一个字符串
                            fw.close();
                        }
                        catch (Exception e1)
                        {
                            System.out.println("读取记录过程中出现错误");
                        }
                        return;
                    }
                    else
                    {
                        JOptionPane.showMessageDialog(frame, "身份证号错误");
                        IDcard.setText("");
                        return;
                    }

                }
            }
            JOptionPane.showMessageDialog(frame, "该用户不存在"); 
	 }
   }	
 }    	

----------------------------分割线-------------------------------
跳转到重新设置新密码界面
代码如下(示例):

  import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;

 public class Method implements ActionListener{
public JTextField newPassword,checkPassword;
public JFrame frame;
public JPanel jpanel_0,jpanel_1,jpanel_2,jpanel_3;
public JButton button_enter,button_cancel;
public Method() {
    frame=new JFrame("忘记密码");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
    jpanel_0=new JPanel(); 
	JLabel jlb1=new JLabel("忘记密码");
	jlb1.setFont(new java.awt.Font("Dialog",  1, 30));
	jlb1.setForeground(Color.blue);
	jpanel_0.add(jlb1);

    jpanel_1=new JPanel();
    jpanel_1.add(new JLabel("新密码:"));
    newPassword=new JTextField(20);   
    jpanel_1.add(newPassword);

    jpanel_2=new JPanel();
    jpanel_2.add(new JLabel("确认密码:"));
    checkPassword=new JTextField(20);   
    jpanel_2.add(checkPassword);

    jpanel_3=new JPanel();
    button_enter=new JButton("确定");
    jpanel_3.add(button_enter);
    button_cancel=new JButton("返回");
    jpanel_3.add(button_cancel);
    
    frame.add(jpanel_0);
    frame.add(jpanel_1);
    frame.add(jpanel_2);
    frame.add(jpanel_3);
    frame.add(button_enter);
    frame.add(button_cancel);
    frame.setLayout(new FlowLayout());
    frame.setVisible(true);
    frame.setBounds(500,500,350,300);
    frame.setLocationRelativeTo(null);
    
    button_enter.addActionListener(this);
    button_cancel.addActionListener(this);

}

 public void actionPerformed(ActionEvent e) {  
    if(e.getActionCommand().equals("确定")) {  
    	if(newPassword.getText().equals(""))  
         {  
    		JOptionPane.showMessageDialog(null,"新密码不能为空");
    		return;
         }   
      if(checkPassword.getText().equals(""))  
      {  
    	JOptionPane.showMessageDialog(null,"确认密码不能为空");  
    	return;
       }
            try {  
                if(newPassword.getText().equals(checkPassword.getText())) { 
                	
                		Bank.currentAccount.method(newPassword.getText());  
                		JOptionPane.showMessageDialog(null, "请妥善保管好你的新密码");  
                		frame.setVisible(false);                            
                        new Login();  
                	
                }  
                else  
                {  
                    JOptionPane.showMessageDialog(null, "两次输入的密码不一致");  
                   
                }  
            }  
         catch (Exception e1) {//捕获账户类中更改密码函数的异常并弹窗显示  
                JOptionPane.showMessageDialog(null, e1.getMessage()); 
                
            }  
        
    }  
    else//如果点击 button_cancel  
    {  
        frame.setVisible(false); 
        new Login();//跳转到操作界面
     }  
  }  
}

Account类(用户信息)

代码如下(示例):

    import  java.io.*;
     import java.text.SimpleDateFormat;
     import  java.util.*;
  public class Account {
    int money;
    String userName;//账户名
    String id;//卡号
    String idcard;//身份证号
    String  password; //卡号密码 
    Date now=new Date();  
    Reader fr;
    public Account(String id, String  password, String money,String userName,String idcard) {//构造方法  
    	this.userName=userName;
        this.id = id;        
        this.password = password;  
        this.idcard =idcard;
        this.money=Integer.parseInt(money);//parseInt(String s)方法是类Integer的静态方法,它的作用就是将形参 s 转化为整数,比如: Interger.parseInt("1")=1;
      
    }  
    public void drawMoney(int money) throws Exception {//抛出异常,由相关的界面类弹窗处理异常,下面几个方法同理  
        //如在取钱界面取钱,则会调用此函数,进行try/catch处理,获得这个函数的异常,弹窗说明异常  
        if (money > this.money) {  
            throw new Exception("余额不足");  
        }
        
         if(money<0)  
        {  
            throw new Exception("不能取出负数");  
        }  	  
         
        SimpleDateFormat formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//时间格式  
        Date  currentTime = new Date();//当前时间  
        String date = formatter.format(currentTime);//处理当前时间格式  
        Writer fw = new FileWriter(Bank.file);  
        fw.write(Bank.recordString.append(date + "\t" + Bank.currentAccount.id + "\t取出" + money + "元\r\n").toString());//将这次的取钱行为添加到记录文件中  
        fw.flush();//写进文件  
        fw.close();  
        this.money -= money;  
        Bank.usersListUpdate();//更新用户文档(信息)  
        
    }  
    
       public void saveMoney(int money)throws Exception  
		    {  
		    	 if(money<0) {
		             throw new Exception("不能存入负数");
		         }
		    	   
		    	 else{ 
		    		 try {  
		            Writer fw = new FileWriter(Bank.file);
		            SimpleDateFormat   formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss");  
		            Date   currentTime=new Date();  
		            String date=formatter.format(currentTime);  
		     
		            fw.write(Bank.recordString.append(date + "\t" + Bank.currentAccount.id + "\t存入" + money + "元\r\n").toString());  
		            fw.flush();//写进文件  
		            fw.close();  
		            this.money+=money;  
		            Bank.usersListUpdate();//更新当前用户信息  
		        }  
		        catch (Exception e1)  
		        {  
		            throw new Exception("写入记录失败");  
		        }  	  
		    }  
		    }
    
    public void transfer(int money,String id)throws Exception//转账
    {
        if(id.equals(Bank.currentAccount.id))
        {
            throw new Exception("不能转给自己");
        }
        if(money>this.money)
        {
            throw new Exception("余额不足");
        }
        if(money<0) {
            throw new Exception("不能转入负数");
        }	    
     
        for(int i=0;i<Bank.usersList.size();i++)
        {
            if(Bank.usersList.get(i).id.equals(id))//找到要转帐的用户
            {
                Bank.usersList.get(i).money+=money;//转入
                this.money-=money;//扣钱

                FileWriter fw=new FileWriter(Bank.file);
                SimpleDateFormat  formatter = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//声明时间格式
                Date currentTime=new Date();//获取当前时间
                String date=formatter.format(currentTime);//转换时间格式
                fw.write(Bank.recordString.append(date+"\t向"+id+"\t转出"+money+"元\r\n").toString());//Bank类中的静态字符串拼接上这个字符串覆盖写入当前用户文档
                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")+date+"\t由"+Bank.currentAccount.id+"\t转进"+money+"元\r\n";
                System.out.println(temp);
                fw=new FileWriter(id+".txt");
                fw.write(temp);
                fw.close();

                Bank.usersListUpdate();//更新用户文档

                return;
            }
        }
        throw new Exception("目标用户不存在");
    }
     public void method(String newPassword)throws Exception  
    {  
               
     password=newPassword;  
       Bank.usersListUpdate();  
  	  
    }   
    
  public void ChangePassword(String newPassword)throws Exception  
    {  
    	
     if(newPassword.equals(this.password))  
     {  
         throw new Exception("原密码和新密码不能一样");  
     }  

     password=newPassword;  
        Bank.usersListUpdate();  
  
    } 
}

Bank类(对用户信息读取和更新)

代码如下(示例):

import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Bank{
public static List<Account> usersList;
public static Account currentAccount;//登录的用户
public static File file;//当前用户的记录文件
public static StringBuilder recordString=new StringBuilder();
public static Menu menu;
public static File usersFile;
public static StringBuilder usersString=new StringBuilder();
public static Reader fw;
public static void main(String[] args)throws Exception {
    usersList = new ArrayList<Account>();
    File users = new File("users.txt");
    if (!users.exists()) {
    
        try {
            users.createNewFile();
            FileWriter fw = new FileWriter("users.txt");
            fw.write("123456  123456  0   张三    123456");
            fw.flush();
            fw.close();
        } catch (Exception e1) {
            JOptionPane.showMessageDialog(null, "创建用户文档失败");
        }
    }
    usersFile = users;//创建用户文档,存储用户账户,密码,余额信息;
    usersListRead();
    usersListUpdate();
    /*****************************Login****************************/
    new Login();
   
}

public static void usersListRead() 
{
    /**********************按照用户文档读取用户列表并创建所有用户**********************/   
    try {
        fw = new FileReader("users.txt");//字符流
    } catch (Exception e) {
        System.out.println("字符流创建失败");
    }
    BufferedReader buf = new BufferedReader(fw);// 提高FileWriter的写数据效率与拓展FileWriter的功能。
    try {
        String line="";
        System.out.println("欢迎你!");
        while ((line = buf.readLine())!= null) {
            String[] a= new String[5];
            a = line.split("\\s+");//分割空格
            Account b = new Account(a[0], a[1], a[2],a[3],a[4]);
            usersList.add(b);
            System.out.println("读取到"+b.userName+",实例化用户" + b.userName);
            System.out.println("余额:" + a[2]);
        }
        buf.close();
        fw.close();
       
    } catch (Exception e) {
        System.out.println("读取用户文档失败");
    }
}

public static void usersListUpdate()
{
    try {
    	FileWriter fw = new FileWriter("users.txt");
    StringBuilder c = new StringBuilder();
    for (int i = 0; i < usersList.size(); i++) {           
        c.append(usersList.get(i).id + "    " + usersList.get(i).password + "    " + usersList.get(i).money  + "    " + usersList.get(i).userName+ "    " + usersList.get(i).idcard + "\r\n");
    }
    fw.write(c.toString());
    fw.flush();
    fw.close();
}
catch (Exception e)
{
    e.printStackTrace();
    System.out.println("更新用户失败");
        }
    }
  }

Menu类(操作界面)

操作类型包括六种(存款:1 取款:2 查询余额:3 退出:0 转账:4 修改密码:5)

代码如下(示例):

 import javax.swing.*;  
 import java.awt.*;  
 import java.awt.event.ActionEvent;  
 import java.awt.event.ActionListener;  
 public class Menu implements ActionListener{//操作界面
 JFrame mframe;  
 JPanel jpanel_0,jpanel_1,jpanel_2;
 JButton button_enter,button_cancel;
 JTextField number;
public Menu()  
{  
	mframe=new JFrame("操作界面");  
	mframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  
	
    jpanel_0=new JPanel(); 
	JLabel jlb1=new JLabel("银行业务选择");
	jlb1.setFont(new java.awt.Font("Dialog",  1, 30));
	jlb1.setForeground(Color.blue);
	jpanel_0.add(jlb1);  
	
	jpanel_1=new JPanel();
    jpanel_1.add(new JLabel("请输入操作数字:"));
	number=new JTextField (10);
	jpanel_1.add(number);
	
	jpanel_2=new JPanel();
    button_enter=new JButton("确定");
    jpanel_2.add(button_enter);
    button_cancel=new JButton("返回");
    jpanel_2.add(button_cancel);
	
    mframe.add(jpanel_0);  
	mframe.add(jpanel_1);  
	mframe.add(jpanel_2);
   
	mframe.pack();  
	mframe.setVisible(true);  
	mframe.setLayout(new FlowLayout());  
    mframe.setBounds(500,500,350,300);  		
	mframe.setLocationRelativeTo(null);
	
	button_enter.addActionListener(this);
    button_cancel.addActionListener(this);

}  

@Override  
public void actionPerformed(ActionEvent e) {  
			String m=number.getText();
			if(e.getSource()==button_cancel){
		     	mframe.setVisible(false);
			    new Login();
			    }
			else if(e.getSource()==button_enter){
  if(m.equals("0")){  
					mframe.setVisible(false);//隐藏  
					new Login();  
					JOptionPane.showMessageDialog(null,"请记得取走你的银行卡");  
				  }
	else if(m.equals("1"))  
	{   
		mframe.setVisible(false);
		new SaveMoney();
	}  
	else if(m.equals("2"))  
	{ 
		mframe.setVisible(false);
		new DrawMoney();
	}  
	else if(m.equals("3"))  
	{   
		mframe.setVisible(false);
		new Inqury();  			
	}		
	else if(m.equals("4"))
    { 
		mframe.setVisible(false);
        new Transfer();
    }
	else if(m.equals("5"))
    { 
		mframe.setVisible(false);
        new ChangePassword();
    }
	else if(m.equals(""))
    { 
		JOptionPane.showMessageDialog(null,"输入操作数字不得为空");
    }
	else {
		JOptionPane.showMessageDialog(null,"输入错误,请重新输入数字!");
	     }		
		}				
      } 
   }

SaveMoney类(存款)

输入操作数字1,进入存款界面。
进入存款界面,输入存款金额。按确定按钮,则消息框会显示:“存款成功”。存款成功后会自动清空存款金额(仍留在存款界面),读取存款金额,将信息写入文本文件并更新当前用户信息 。若想继续存款,则可进一步输入存款金额;若按返回按钮,则隐藏存款窗口,返回操作界面。
代码如下(示例):


import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class SaveMoney  implements ActionListener{
	     JTextField money;  
         JFrame frame;  
         JPanel jpanel_1,jpanel_2,jpanel_3,jpanel_4;  
         JButton button_enter,button_cancel;  
         JLabel yue; 
    public SaveMoney () {  
    	 frame=new JFrame("存款");

         jpanel_1=new JPanel();
         jpanel_1.add(new JLabel("账户卡号:"+Bank.currentAccount.id));

         jpanel_2=new JPanel();
         yue=new JLabel("账户余额:"+Bank.currentAccount.money);
         jpanel_2.add(yue);

         jpanel_3=new JPanel();
         jpanel_3.add(new JLabel("存款金额:"));
         money=new JTextField(20);
         jpanel_3.add(money);

         jpanel_4=new JPanel();
         button_enter=new JButton("确定");
         jpanel_4.add(button_enter);
         button_cancel=new JButton("返回");
         jpanel_4.add(button_cancel);

         frame.add(jpanel_1);
         frame.add(jpanel_2);
         frame.add(jpanel_3);
         frame.add(jpanel_4);
         
         frame.setLayout(new FlowLayout());
         frame.setVisible(true);
         frame.setBounds(500,500,350,300);
         frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)  
         
         button_enter.addActionListener(this);
         button_cancel.addActionListener(this);
    }  
  
    @Override  
    public void actionPerformed(ActionEvent e) {  
    	  if(e.getActionCommand().equals("确定"))//按下确定按钮
          {
             
              try {
            	  if(!money.getText().equals("")){
            	 int m= Integer.parseInt(money.getText());           	 
                  Bank.currentAccount.saveMoney(m);//调用当前登陆账户的存钱函数               
                  JOptionPane.showMessageDialog(null, "存款成功");//弹窗
                  yue.setText("账户余额:"+Bank.currentAccount.money);
                  money.setText("");//把存款金额清空
            	  }
                  else
                  {
                      JOptionPane.showMessageDialog(null, "输入的存款金额不得为空");
                      
                  }
                }   
              catch (NumberFormatException e1)
              {

                  JOptionPane.showMessageDialog(null, "输入数据类型错误,请输入整数");
                  money.setText("");//把存款金额清空
              }
              catch (Exception e1)
              {
                  JOptionPane.showMessageDialog(null, e1.getMessage());
                  money.setText("");//把存款金额清空
              }
          }
          else//按返回按钮
          {
          frame.setVisible(false);//隐藏窗口
          new Menu();//跳转到操作界面
          }
    	
      } 
  }

DrawMoney类(取款)

输入操作数字2,进入取款界面。
按确定按钮,则消息框会显示:“取款成功”。取款成功后会自动清空取款金额(仍留在取款界面),读取取款金额,将信息写入文本文件并更新当前用户信息 。若想继续取款,则可进一步输入取款金额;若按返回按钮,则隐藏取款窗口,返回操作界面。
代码如下(示例):

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;

 public class DrawMoney implements ActionListener{
JTextField money;
JFrame frame;
JPanel jpanel_1,jpanel_2,jpanel_3,jpanel_4;
JButton button_enter,button_cancel;
JLabel yue;//余额
public DrawMoney() {
    frame=new JFrame("取款");

    jpanel_1=new JPanel();
    jpanel_1.add(new JLabel("账户卡号:"+Bank.currentAccount.id));

    jpanel_2=new JPanel();
    yue=new JLabel("账户余额:"+Bank.currentAccount.money);
    jpanel_2.add(yue);

    jpanel_3=new JPanel();
    jpanel_3.add(new JLabel("取款金额:"));
    money=new JTextField(20);
    jpanel_3.add(money);

    jpanel_4=new JPanel();
    button_enter=new JButton("确定");
    jpanel_4.add(button_enter);
    button_cancel=new JButton("返回");
    jpanel_4.add(button_cancel);

    frame.add(jpanel_1);
    frame.add(jpanel_2);
    frame.add(jpanel_3);
    frame.add(jpanel_4);
    
    frame.setLayout(new FlowLayout());
    frame.setVisible(true);
    frame.setBounds(500,500,350,300);
    frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)  
    
    button_enter.addActionListener(this);
    button_cancel.addActionListener(this);

}

@Override
public void actionPerformed(ActionEvent e) {
	 if(e.getActionCommand().equals("确定"))//按下确定按钮
     {
		 
		 try {
       	  if(!money.getText().equals("")){
       	 int m= Integer.parseInt(money.getText());           	 
             Bank.currentAccount.drawMoney(m);//调用当前登陆账户的取钱函数               
             JOptionPane.showMessageDialog(null, "取款成功");//弹窗
             yue.setText("账户余额:"+Bank.currentAccount.money);
             money.setText("");//把取款金额清空
       	  }
             else
             {
                 JOptionPane.showMessageDialog(null, "输入的取款金额不得为空");
                 
             }
           }   
         catch (NumberFormatException e1)
         {

             JOptionPane.showMessageDialog(null, "输入数据类型错误,请输入整数");
             money.setText("");//把取款金额清空
         }
         catch (Exception e1)
         {
             JOptionPane.showMessageDialog(null, e1.getMessage());
             money.setText("");//把取款金额清空
         }
     }
     else//按返回按钮
     {
     frame.setVisible(false);//隐藏窗口
     new Menu();//跳转到操作界面
     } 	
 } 
}

Inqury类(查询余额)

输入操作数字3,进入查询界面。
若按查询记录按钮,则查询当前账户的金额(仍留在查询界面);若按返回按钮,则隐藏查询窗口,返回操作界面。
代码如下(示例):

 import javax.swing.*;  
 import java.awt.*;  
 import java.awt.event.ActionEvent;  
 import java.awt.event.ActionListener;

public class Inqury implements ActionListener{
    JFrame frame;  
    JPanel jpanel_1,jpanel_2,jpanel_3,jpanel_4;
    JTextArea inquryresult;  
    JButton button_enter,button_cancel;  
    JLabel yue;  
    public Inqury() {  
        frame=new JFrame("查询");  
  
        jpanel_1=new JPanel();
        jpanel_1.add(new JLabel("账户卡号:"+Bank.currentAccount.id));

        jpanel_2=new JPanel();
        yue=new JLabel("账户余额:"+Bank.currentAccount.money);
        jpanel_2.add(yue);
        
        jpanel_3=new JPanel();  
        inquryresult=new JTextArea(10,30);  
        jpanel_3.add(inquryresult);  
       
        jpanel_4=new JPanel();
        button_enter=new JButton("查询记录");
        jpanel_4.add(button_enter);
        button_cancel=new JButton("返回");
        jpanel_4.add(button_cancel);
        
        frame.add(jpanel_1);
        frame.add(jpanel_2);
        frame.add(jpanel_3);
        frame.add(button_enter);
        frame.add(button_cancel);
        frame.setLayout(new FlowLayout()); 	       
        frame.setVisible(true);
        frame.setBounds(500,500,400,350);
        frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)  
    
        
        button_enter.addActionListener(this);
        button_cancel.addActionListener(this);
    }  
  
    @Override  
    public void actionPerformed(ActionEvent e) {  
    	if(e.getSource()==button_cancel){//按返回按钮
	     frame.setVisible(false);//隐藏窗口
	     new Menu();//跳转到操作界面
    	}	    	
    	 if(e.getSource()==button_enter);  
        {  
            inquryresult.setText(Bank.recordString.toString().replace("元","元\n").replace("null",""));
            yue.setText("账户余额:"+Bank.currentAccount.money);//更新显示余额  
            inquryresult.setEditable(false);
        }  	   	              	                      
    }  
}

Transfer类(转账)

输入操作数字4,进入转账界面。
按确定按钮,则消息框会显示:“转账成功”。转账成功后会自动清空转账账户卡号和转账金额(仍留在转账界面),读取转账账户卡号和转账金额,将信息写入文本文件并更新当前用户信息 。若想继续转账,则可进一步输入转账账户卡号和转账金额;若按返回按钮,则隐藏转账窗口,返回操作界面。
代码如下(示例):

import javax.swing.*;
import java.awt.*;      
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Transfer implements ActionListener{
 JTextField money,other;
 JFrame frame;
 JPanel jpanel_0,jpanel_1,jpanel_2,jpanel_3,jpanel_4;
 JButton button_enter,button_cancel;
 JLabel yue;
 Transfer() {
    frame=new JFrame("转账");

    jpanel_0=new JPanel();
    jpanel_0.add(new JLabel("账户卡号:"+Bank.currentAccount.id));

    jpanel_1=new JPanel();
    yue=new JLabel("账户余额:"+Bank.currentAccount.money);
    jpanel_1.add(yue);

    jpanel_2=new JPanel();
    jpanel_2.add(new JLabel("转账账户卡号:"));
    other=new JTextField(10);
    jpanel_2.add(other);

    jpanel_3=new JPanel();
    jpanel_3.add(new JLabel("转账金额:"));
    money=new JTextField(10);
    jpanel_3.add(money);

    jpanel_4=new JPanel();
    button_enter=new JButton("确定");
    jpanel_4.add(button_enter);
    button_cancel=new JButton("返回");
    jpanel_4.add(button_cancel);

    frame.add(jpanel_0);
    frame.add(jpanel_1);
    frame.add(jpanel_2);
    frame.add(jpanel_3);
    frame.add(jpanel_4);
    frame.setLayout(new FlowLayout());
    frame.setVisible(true);
    frame.setBounds(500,500,350,300);
    frame.setLocationRelativeTo(null);
    
    button_enter.addActionListener(this);
    button_cancel.addActionListener(this);

}

@Override
public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("确定"))
    {
    	
        try {
        	if(!money.getText().equals("")&&!other.getText().equals("")){
            Bank.currentAccount.transfer(Integer.parseInt(money.getText()),other.getText());
            JOptionPane.showMessageDialog(null,"转账成功");
            yue.setText("账户余额:"+Bank.currentAccount.money);//更新面板上的余额
            other.setText("");
            money.setText("");
        }
        
        else
        {
            JOptionPane.showMessageDialog(null, "输入的转账金额和转账账号卡号不得为空");
            
        }
        	
      }
        catch (NumberFormatException e1)
        {

            JOptionPane.showMessageDialog(null, "输入数据类型错误,请正确输入转账金额");
            money.setText("");
         
        }
        catch (Exception e1)
        {
            JOptionPane.showMessageDialog(null, e1.getMessage());
            other.setText("");
            money.setText("");
        }
       
    }
    else//按下返回按钮
    {
        frame.setVisible(false);//隐藏窗口
        new Menu();//跳转到操作界面
    }        
  }
}

ChangePassword类(修改密码)

输入操作数字5,进入修改密码界面。
若按确认按钮,则则消息框会显示:“修改密码成功”。修改密码成功后会更新当前用户信息,返回登录界面重新登录;若按返回按钮,则隐藏查询窗口,返回操作界面。
代码如下(示例):

import javax.swing.*;  
import java.awt.*;  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener; 
public class ChangePassword implements ActionListener{
 JTextField oldPassword,newPassword,checkPassword;  
 JFrame frame;  
 JPanel jpanel_0,jpanel_1,jpanel_2,jpanel_3;  
 JButton button_enter,button_cancel;  
public ChangePassword() {  
    frame=new JFrame("更改密码");  
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  

    jpanel_0=new JPanel();  
    jpanel_0.add(new JLabel("原密码:"));  
    oldPassword=new JTextField(20);        
    jpanel_0.add(oldPassword);  

    jpanel_1=new JPanel();  
    jpanel_1.add(new JLabel("新密码:"));  
    newPassword=new JTextField(20);         
    jpanel_1.add(newPassword);  

    jpanel_2=new JPanel();  
    jpanel_2.add(new JLabel("确认密码:"));  
    checkPassword=new JTextField(20);         
    jpanel_2.add(checkPassword);  

    jpanel_3=new JPanel();  
    button_enter=new JButton("确定");  
    jpanel_3.add(button_enter);  
    button_cancel=new JButton("返回");  
    jpanel_3.add(button_cancel);  

    frame.add(jpanel_0);  
    frame.add(jpanel_1);  
    frame.add(jpanel_2);  
    frame.add(jpanel_3);  
    
    frame.setLayout(new FlowLayout());  
    frame.setVisible(true);  
    frame.setTitle("修改密码");//窗体标签  
    frame.setBounds(500,500,350,300);
    frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)  
    button_enter.addActionListener(this);  

    button_cancel.addActionListener(this);  

} 
public void  clean() {
	newPassword.setText("");
	oldPassword.setText("");
	checkPassword.setText("");
}

@Override  
public void actionPerformed(ActionEvent e) {  
    if(e.getActionCommand().equals("确定")) {  
    	if(oldPassword.getText().equals(""))  
         {  
  		JOptionPane.showMessageDialog(null,"原密码不能为空");
  		return;
         }
    	if(newPassword.getText().equals(""))  
         {  
   		JOptionPane.showMessageDialog(null,"新密码不能为空");
   		return;
         }   
       if(checkPassword.getText().equals(""))  
     {  
     	JOptionPane.showMessageDialog(null,"确认密码不能为空");  
   	   return;
      }
        if (Bank.currentAccount.password.equals(oldPassword.getText())) {  
            try {  
                if(newPassword.getText().equals(checkPassword.getText())) { 
             
                		Bank.currentAccount.ChangePassword(newPassword.getText());  
                		JOptionPane.showMessageDialog(null, "修改密码成功");  
                		frame.setVisible(false);  
                        Bank.menu.mframe.setVisible(false);//关闭菜单界面  
                        new Login();  
                	
                }  
                else  
                {  
                    JOptionPane.showMessageDialog(null, "两次输入的密码不一致");  
                    clean();
                }  
            }  
         catch (Exception e1) {//捕获账户类中更改密码函数的异常并弹窗显示  
                JOptionPane.showMessageDialog(null, e1.getMessage()); 
                clean();
            }  
        } else {  

            JOptionPane.showMessageDialog(null, "原密码错误");  
            clean();
        }  
    }  
    else//如果点击cancel  
    {  
        frame.setVisible(false);  
        new Menu();//跳转到操作界面
    }  
 }  
}

有什么问题欢迎在评论区评论

  • 37
    点赞
  • 264
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
很高兴听到你正在进行这样的大作业!服装管理系统可以是一个非常有用的应用,特别是对于服装店和品牌来说。 在设计这样一个系统时,你需要考虑以下几个方面: 1. 系统的用户界面:这是用户与系统交互的主要方式。你需要设计一个简单易用的界面,以便用户能够方便地浏览、搜索、添加、修改和删除服装信息。 2. 数据库设计:你需要设计一个数据库来存储服装的信息,如名称、品牌、颜色、大小、价格等。你需要考虑如何优化数据库的性能,以便在系统中进行高效的搜索和过滤。 3. 系统的业务逻辑:你需要考虑如何实现系统的业务逻辑,如如何添加、修改和删除服装信息,如何管理库存,如何处理交易等。 4. 系统的安全性:你需要确保系统的安全性,防止未经授权的访问和数据泄漏。你可以考虑实现用户认证和权限控制等功能。 5. 系统的可扩展性:你需要考虑如何实现系统的可扩展性,以便在需要时添加新的功能或模块。 在设计系统时,你可以考虑使用一些常见的软件设计模式,如MVC(Model-View-Controller)模式、观察者模式、工厂模式等。这些模式可以帮助你更好地组织代码,并提高系统的可维护性和可扩展性。 最后,你可以考虑使用一些流行的技术和框架来实现系统,如Java、Python、MySQL、Spring框架等。这些技术和框架可以帮助你更快地构建系统,并提供一些有用的功能和工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阮小怂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值