java期末项目-银行管理系统(properties类+io流)

  1. 目的:

①通过运用java基础来实现一个银行管理系统,学习和使用properties类和io流进行数据的存储和读取。对这一学期所学知识进行一个系统的复习,并且了解更多java知识,为下学期学习java高阶进行铺垫。

②需求分析:对每一个用户可以进行开户,开户成功后可以进行登录系统,每个用户可以进行存款,取款,转账,查询余额,修改密码,销户的操作。

2.项目内容

1)维导图

2)建立四个包

base包:实现user用户类 ,这里把银行类和用户类就一起写了一个

Dao包:实现存放数据的类

Main包:主函数的入口,以及界面的实现

service包:实现功能类

3)模块代码

base包:user类

package base;

public class User {
    String name;
    String balance;
    String id;
    String password;

    public User() {

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getBalance() {
        return balance;
    }

    public void setBalance(String balance) {
        this.balance = balance;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Dao包:文件处理

主要使用Properties类实现键值对的写入和写出(键值对存储)

这里使用了四个txt文件保存:

balance.txt保存的是:账号=余额

data.txt保存的是:用户名=密码

id.txt保存的是用户名=账号

password.txt保存的是:账号=密码

使用了properties与io流结合的方式存取数据:

Filereader类:文件的字符输入流(从文件中读取字符数据)

Filewriter类:文件的字符输出流

1.创建一个空的Properties对象:Properties pro1 = new Properties();

2.Properties对象调用load(…)方法,将创建的字节/字符输入流对象作为参数传递,读取文件中的数据到Properties集合中 pro1.load(reader1);

3.释放资源: reader1.close();

4.添加属性(键值对):使用setproperty()pro1.setProperty(user.getName(),user.getId()

5.Properties调用store(… , …)方法,将字节流/字符流对象作为参数传进去,第二个参数用来给配置文件添加注释。pro1.store(writer1, "账号");

6.释放资源: writer1.close();

另外:在写销户是用到了remove():props.remove(key);

package Dao;

import base.User;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;


public class FileData {
    public void save_id(User user) throws IOException {
//      实现从文本取出到集合中的操作
        FileReader reader1 = new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\id.txt");
        Properties pro1 = new Properties();
        pro1.load(reader1);//load方法将文件中的数据以键值对的方式加载到集合中,文件中存储格式“key=value”
        reader1.close();
        pro1.setProperty(user.getName(), user.getId());
        FileWriter writer1 = new FileWriter("D:\\JAVA\\IdeaProject\\ATMSystem\\id.txt");
        pro1.store(writer1, "账号");
        writer1.close();
    }
    public void save_data(User user) throws IOException {
        FileReader reader = new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\data.txt");
        //创建属性列表对象
        Properties pro = new Properties();
        pro.load(reader);
        reader.close();
        //添加映射关系
        pro.setProperty(user.getName(), user.getPassword());
        //创建输出流对象
        FileWriter writer = new FileWriter("D:\\JAVA\\IdeaProject\\ATMSystem\\data.txt");
        pro.store(writer, "xinxi");
        //释放资源
        writer.close();

    }
    public void save_balance(User user,String money) throws IOException {
        FileReader reader = new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\balance.txt");
        Properties pro1 = new Properties();
        pro1.load(reader);
        reader.close();
        pro1.setProperty(user.getId(), money);
        FileWriter writer1 = new FileWriter("D:\\JAVA\\IdeaProject\\ATMSystem\\balance.txt");
        pro1.store(writer1, "余额");
        writer1.close();

    }
    public void save_password(User user) throws IOException {

        FileReader reader3 = new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\password.txt");
        Properties pro3 = new Properties();
        pro3.load(reader3);
        reader3.close();
        pro3.setProperty(user.getId(), user.getPassword());
        FileWriter writer = new FileWriter("D:\\JAVA\\IdeaProject\\ATMSystem\\password.txt");
        pro3.store(writer, "账号密码");
        writer.close();

    }
    public String read_id(User user) throws IOException {
        FileReader reader = new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\id.txt");
        Properties pro = new Properties();
        pro.load(reader);
        reader.close();
        return  pro.getProperty(user.getName());

    }
    public String read_balance(User user) throws IOException {
        FileReader reader = new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\balance.txt");
        Properties pro = new Properties();
        pro.load(reader);
        reader.close();

        return pro.getProperty(user.getId());
    }
    public String read_password(User user) throws IOException {
        FileReader reader = new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\password.txt");
        Properties pro = new Properties();
        pro.load(reader);
        reader.close();
        return pro.getProperty(user.getId());
    }
    public  void  delete_p(User user) throws IOException {
        String key = user.getId();
        Properties props = new Properties();
        FileReader r=new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\password.txt");
        props.load(r);
        props.remove(key);

        FileWriter w=new FileWriter("D:\\JAVA\\IdeaProject\\ATMSystem\\password.txt");
        props.store(w,"账号密码");
        w.close();
    }
    public  void  delete_id(User user) throws IOException {

        String key = user.getName();
        Properties props = new Properties();

        FileReader r=new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\id.txt");
        props.load(r);
        props.remove(key);

        FileWriter w=new FileWriter("D:\\JAVA\\IdeaProject\\ATMSystem\\id.txt");
        props.store(w,"账号密码");
        w.close();

    }
    public  void  delete_n(User user) throws IOException {

        String key = user.getName();
        Properties props = new Properties();

        FileReader r=new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\data.txt");
        props.load(r);
        props.remove(key);

        FileWriter w=new FileWriter("D:\\JAVA\\IdeaProject\\ATMSystem\\data.txt");
        props.store(w,"账号密码");
        w.close();

    }
    public  void  delete_b(User user) throws IOException {

        String key = user.getId();
        Properties props = new Properties();

        FileReader r=new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\balance.txt");
        props.load(r);
        props.remove(key);

        FileWriter w=new FileWriter("D:\\JAVA\\IdeaProject\\ATMSystem\\balance.txt");
        props.store(w,"账号密码");
        w.close();

    }


}

service包:实现功能类

ps:产生随机卡号使用了:

Math.random()取得是0-1之间的随机小数(事实上取不到 0 和1),乘以9之后应该是0-9之间的随机小数,实际上也就是0.**到8.****之间的小数(大于0而小于 9),经过int类型转换之后,应该是 0-8 之间的随机整数,所以"+1"之后就会得到1-9之间的的小数,乘以100000000来获取范围在(100000000-9999999999)之间的9位的整型数字。

package service;

import Dao.FileData;
import base.User;

import java.io.*;
import java.util.Properties;
import java.util.Set;


public class bankservice {
    FileData file = new FileData();

    /**
     * 开户
     * @param user
     * @throws IOException
     */
    public void save(User user) throws IOException {
        file.save_data(user);
        int randomNum = (int) ((Math.random() * 9 + 1) * 100000000);
        user.setId(String.valueOf(randomNum));
        file.save_id(user);
        file.save_password(user);
        file.save_balance(user, user.getBalance());
    }
    /**
     * 登录方法
     * @param user
     * @return
     * @throws IOException
     */
    public boolean login(User user,String password) throws IOException {
        boolean flag;
        String a=file.read_password(user);
        if (password.equals(a)) {
            System.out.println("登录成功!");
            flag=true;
        } else {
            System.out.println("登录失败!");
            flag=false;
        }
        return flag;

    }

    /**
     * 查询卡号
     * @param user
     * @return
     * @throws IOException
     */
    public String getid(User user) throws IOException {
        String id = file.read_id(user);
        System.out.println("你的开户账号为:" + id);
        return id;

    }


    /**
     * 查询余额
     * @param user
     * @return
     * @throws IOException
     */
    public String balance(User user) throws IOException {
        String balance = file.read_balance(user);
        return balance;
    }

    /**
     * 存钱方法
     * @param user
     * @param money
     * @throws IOException
     */
    public void depoistsave(User user, String money) throws IOException {

        int money1 = Integer.parseInt(money);
        if(money1>=100){
            String b = balance(user);
            int c = Integer.parseInt(b);
            int a = money1 + c;
            file.save_balance(user, String.valueOf(a));
            System.out.println("存钱成功!");
        }else{
            System.out.println("存钱失败!");
        }
    }



    /**
     * 取钱方法
     * @param user
     * @param money
     * @throws IOException
     */
    public void withdraw(User user, String money) throws IOException {
        int money1 = Integer.parseInt(money);
        String b = balance(user);
        int c = Integer.parseInt(b);
        if(money1<=c && money1>0){
            int a = c - money1;
            file.save_balance(user,String.valueOf(a));
            System.out.println("取钱成功!");
        }else{
            System.out.println("取钱失败!");
        }
    }

    /**
     * 销户方法
     * @param user
     * @throws IOException
     */
    public boolean xiaohu(User user,String name) throws IOException {
        boolean flag=false;
        FileReader reader = new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\id.txt");
        Properties pro = new Properties();
        pro.load(reader);
        reader.close();
        if(user.getId().equals(pro.getProperty(name))){
            user.setName(name);
            file.delete_id(user);
            file.delete_n(user);
            file.delete_b(user);
            file.delete_p(user);
            System.out.println("销户成功!");
            flag=true;
        }else{
            System.out.println("销户失败!用户名与账号不匹配");
        }
        return flag;
    }


    /**
     * 修改密码
     * @param user
     * @throws IOException
     */
    public void change(User user)throws IOException {
        file.save_password(user);
    }

    /**
     * id是否存在
     * @param id
     * @param user
     * @return
     * @throws IOException
     */
    public boolean have_id(String id,User user) throws IOException {
        boolean flag =false;
        FileReader reader = new FileReader("D:\\JAVA\\IdeaProject\\ATMSystem\\id.txt");
        Properties pro = new Properties();
        pro.load(reader);
        reader.close();
        Set<String> set = pro.stringPropertyNames();
        for (String key: set) {
            if(id.equals(pro.getProperty(key))){
                flag=true;
                user.setId(id);
                break;
            }
        }
        return flag;
    }
}

注意这里:

Set是集合的意思,Set<String>说明这种对象都是String类型的对象。

使用stringPropertyNames把Properties集合中的键取出,存储到一个Set集合中,再遍历Set集合,取出Properties集合的每一个键。

Main包:主函数入口和系统菜单

package Main;
import base.User;
import service.bankservice;

import java.util.Scanner;

public class main {
    public static void main(String[] args) throws Exception {
         view p=new view();
         p.views();

    }
}

class view{
    public void views() throws Exception {
        boolean flag=true;
        while(flag) {
            bankservice per=new bankservice();
            Account per1=new Account();
            User p=new User();
            System.out.println("************银行管理系统*************");
            System.out.println("             1.开户");
            System.out.println("             2.登录");
            System.out.println("             3.退出");
            System.out.println("***********************************");

            System.out.println("请选择服务类型:");
            Scanner sc = new Scanner(System.in);
            int choose = sc.nextInt();
            switch (choose) {
                case 1:
                    Scanner sc1=new Scanner(System.in);
                    System.out.println("请输入用户名:");
                    String name=sc1.next();
                    p.setName(name);
                    System.out.println("请输入密码:");
                    String pwd=sc1.next();
                    p.setPassword(pwd);
                    System.out.println("你当前余额:");
                    String money=sc1.next();
                    p.setBalance(money);
                    per.save(p);
                    per.getid(p);
                    break;
                case 2:
                    Scanner sc2=new Scanner(System.in);
                    System.out.println("请输入账号:");
                    String id= sc2.next();
                    if(per.have_id(id,p)){
                        System.out.println("请输入密码:");
                        String pwd1=sc2.next();
                        per.login(p,pwd1);
                        if(per.login(p,pwd1)){
                            per1.mnue(p);
                        }else{
                            views();
                        }
                    }else{
                        System.out.println("账号不存在!");
                        views();
                    }
                case 3:
                    flag = false;
                    break;
            }
        }
    }

}


class Account{
    bankservice per3=new bankservice();
    User user1=new User();
    view p=new view();
    public void mnue(User user) throws Exception {
        boolean flag=true;
        Scanner sc2=new Scanner(System.in);
         while(flag) {
             System.out.println("**************************");
             System.out.println("          1.存款");
             System.out.println("          2.取款");
             System.out.println("          3.销户");
             System.out.println("          4.修改密码");
             System.out.println("          5.转账");
             System.out.println("          6.查询");
             System.out.println("          7.退出");

             System.out.println("请选择你要实现的功能:");
             int choose = sc2.nextInt();
             switch (choose){
                 case 1:

                     System.out.println("你的存款金额为:");
                     String money=sc2.next();
                     per3.depoistsave(user,money);
                     System.out.println("你当前账户余额为:"+per3.balance(user));

                     break;
                 case 2:
                     System.out.println("你的取款金额为:");
                     String money1=sc2.next();
                     per3.withdraw(user,money1);
                     System.out.println("你当前账户余额为:"+per3.balance(user));
                     break;
                 case 3:
                     System.out.println("你要进行销户的户名为:");
                     String name=sc2.next();
                     if(per3.xiaohu(user,name)){
                         p.views();
                     }
                     break;
                 case 4:
                     System.out.println("请输入新密码:");
                     String password=sc2.next();
                     System.out.println("再次输入密码:");
                     String password2= sc2.next();
                     if(password.equals(password2)){
                         user.setPassword(password);
                         per3.change(user);
                         System.out.println("修改成功");
                         p.views();
                     }else{
                         System.out.println("修改失败!");
                     }
                     break;
                 case 5:
                     System.out.println("你转账的卡号为:");
                     String Id=sc2.next();
                     if(per3.have_id(Id,user1)){
                         System.out.println("你的转账金额为:");
                         String money2= sc2.next();
                         int m=Integer.parseInt(money2);
                         int n=Integer.parseInt(per3.balance(user));
                         if(m<=n){
                             per3.depoistsave(user1,money2);
                             per3.withdraw(user,money2);
                             System.out.println("转账成功!");
                             System.out.println("你的账户余额为:"+per3.balance(user));
                         }else{
                             System.out.println("转账失败,余额不足!");
                         }
                         }else{
                         System.out.println("转账失败!卡号不存在");
                     }

                     break;
                 case 6:
                     System.out.println("你的账户余额为:"+per3.balance(user));
                     break;
                 case 7:
                     flag=false;
                     break;
             }

         }

    }
}

3.系统流程

4.测试

我这里在转账偷懒直接用的存款取款来写的,想写的完整一点的可以自己改进以下。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值