目的:
①通过运用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.测试
我这里在转账偷懒直接用的存款取款来写的,想写的完整一点的可以自己改进以下。