小练习-银行ATM系统

小练习-银行ATM系统
一、要求及思路
1.要求
1.1用记事本.txt文件记录用户数据库,格式:按行存入:账号-密码-存款;
1.2实现功能:登陆、查询、存款、取款、转账功能。
2.思路
2.1创建一个包(bank),用于存放小项目资料;
2.2基本思路
2.2.1读取记事本文件中的数据到程序,因为记事本中按行存入,所以要用BufferedReader的readLine方法来读取
2.2.2程序中存放读取的数据的容器选用:数组–不能改变长度,不方便数据库扩容,所以选用集合,为了方便查找,而且账号没有重复数据,map集合的key也没有重复数据,所以选用map集合比较好,如果map集合存入的方式是形式,那么每次调用数据的时候都要截取字符串进行操作,很不方便,所以需要将数据库每一行数据做成一个对象,以对象的形式存入map集合,每次调用数据的时候可以直接调用该对象的三个数据,即:账号、密码、存款,然后进行功能操作后,将操作后的数据更新到集合,再将集合数据按照行写入记事本文件;
2.2.3为了更加优化程序结构,基本需要的类有:
User类:每一行数据的对象,需要账号、密码、存款三个私有属性,还有三个私有属性的封装方法;
FileLoaderAndCommit类:提供与文件读写相关的方法,即:读取文件到集合方法、将集合写入文件方法;
AtmDao类:持久化数据,为AtmService类提供通用的方法,如为业务提供服务的通用方法、更新集合方法;
AtmService类:主要提供实现的功能,包含:登陆、查询、存款、取款、转账的方法, AtmDao类作为一个属性提供通用方法。
这种需要多少类的思想叫做MVC架构思想:小练习-银行ATM系统_第1张图片
二、具体程序代码
1.User类:
package bank;
import java.io.Serializable;
public class User implements Serializable {

private String aname;
private  String apassword;
private  Float abalance;

//添加一个序列化接口:方便以后要将对象直接从文件中存入和取出
private static final long serialVersionUID = 3794624961456458461L;
public User() {}
public User(String aname, String apassword, Float abalance) {
    this.aname = aname;
    this.apassword = apassword;
    this.abalance = abalance;
}

public String getAname() {
    return aname;
}
public void setAname(String aname) {
    this.aname = aname;
}
public String getApassword() {
    return apassword;
}
public void setApassword(String apassword) {
    this.apassword = apassword;
}
public Float getAbalance() {
    return abalance;
}
public void setAbalance(Float abalance) {
    this.abalance = abalance;
}

}
2.FileLoaderAndCommit类:
package bank;
import java.io.*;
import java.util.HashMap;
import java.util.Iterator;
public class FileLoaderAndCommit {
private String filename=null;

public FileLoaderAndCommit(String filename) {
    this.filename = filename;
}

//读取文件内容,并存入集合
public HashMap loadFile() {
    HashMap userBox=new HashMap<>();
    FileReader fileReader= null;
    BufferedReader bufferedReader=null;
    try {
        File file=new File(filename);
        fileReader = new FileReader(file);
        bufferedReader=new BufferedReader(fileReader);
        String value=bufferedReader.readLine();
        while (value!=null){
            //拆开value,存入对象,再存入集合
            String[] userValue=value.split("-");
            User user=new User(userValue[0],userValue[1],Float.parseFloat(userValue[2]));
            userBox.put(user.getAname(),user);
            value=bufferedReader.readLine();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if (fileReader!=null){
            try {
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (bufferedReader!=null){
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return userBox;
}
//将操作后的数据写入文件中
public void commit(HashMap userBox){
    FileWriter fileWriter= null;
    BufferedWriter bufferedWriter=null;
    try {
        File file=new File(filename);
        fileWriter = new FileWriter(file);
        bufferedWriter=new BufferedWriter(fileWriter);
        Iterator names=userBox.keySet().iterator();
        while (names.hasNext()){
            String name=names.next();
            User user=userBox.get(name);
            StringBuilder builder=new StringBuilder(user.getAname());
            builder.append("-");
            builder.append(user.getApassword());
            builder.append("-");
            builder.append(user.getAbalance());
            //写入文件
            bufferedWriter.write(builder.toString());
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if (fileWriter!=null){
            try {
                fileWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (bufferedWriter!=null){
            try {
                bufferedWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

}
3.AtmDao类:
package bank;
import java.util.HashMap;
public class AtmDao {
//DAO作为一个层次—持久层
//负责加载文件 更新文件数据
private FileLoaderAndCommit flac=new FileLoaderAndCommit(“src\bank\User.txt”);
private HashMap userBox=flac.loadFile();
//更新集合

public void update(User user){
    userBox.put(user.getAname(),user);
    flac.commit(userBox);
    
}
//设计一个为业务服务的方法
public User selectOne(String aname){
    return userBox.get(aname);
}

}
4.AtmService类
package bank;
public class AtmService {

private AtmDao dao=new AtmDao();
//登陆
public String login(String aname,String apassword){
    User user=dao.selectOne(aname);
    if (user!=null && user.getApassword().equals(apassword)){
        return "登陆成功";
    }
    return "用户名或密码错误";
    
}
//查询余额
public Float balance(String aname){
    User user=dao.selectOne(aname);
    return user.getAbalance();
    
}
//存款
public void deposit(String aname,Float money){
    User user=dao.selectOne(aname);
    user.setAbalance(money+user.getAbalance());
    dao.update(user);
    
}
//取款
public void withdrewal(String aname,Float money){
    User user=dao.selectOne(aname);
    if (user.getAbalance()>money){
        user.setAbalance(user.getAbalance()-money);
        dao.update(user);
        
    }else {
        System.out.println("账户余额不足!");
    }
}
//转账
public void transfer(String outName,String inName,Float money){
    User outUser=dao.selectOne(outName);
    User inUser=dao.selectOne(inName);
    if (outUser.getAbalance()>money){
        if (inUser!=null) {
            outUser.setAbalance(outUser.getAbalance()-money);
            inUser.setAbalance(inUser.getAbalance()+money);
            dao.update(outUser);
            dao.update(inUser);
        }else {
            System.out.println("对不起,"+outName+"您输入的账户不存在!");
        }
    }else {
        System.out.println("对不起,"+outName+"的账户余额不足,无法转账!");
    }
}   

}
5.根据实际需求写一个模仿ATM的类,试一试功能

如有不妥之处,请各位指正,谢谢!

如有不妥之处,请各位指正,谢谢!

如有不妥之处,请各位指正,谢谢!

你可能感兴趣的:(Java小项目,java小练习,java小项目,项目,练习)