好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java实现ATM机系统(2.0版)

java实现银行ATM自助取款机,实现功能:用户登录、余额查询、存钱、取钱、转账、修改密码、退出系统。

用java实现一个ATM机系统(2.0版)

设计思路

设计五个类包括测试类:

1、ATM类也是主要的类,负责实现用户一系列的操作;
2、Data类,作为ATM类的一个属性,主要实现从java文件user中获取用户全部信息,并返回要找的用户,再将修改完之后的用户信息写入文件中。

这个类是ATM机与文件之间的桥梁;

3、Bank类,有ATM机(has-a),欢迎用户来使用ATM机;
4、User类,使用ATM机(use-a);
5、Demo类,测试类,创建一个环境,让类产生关系。

源码

需要注意java文件user的位置,Data类要进行操作它。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

package newBank;

 

import java.util.Scanner;

 

//ATM类

public class ATM {

  //有一个类操作数据的类

  private Data data = new Data();

  //ATM机里的数据

  private String userName; //用户账号且唯一

  private String userPassword; //用户密码

  private double userMoney; //用户账户里的钱

  private double money; //变量,存,取,转账的钱

  private String user; //使用该台ATM机的用户全部信息

 

  //ATM界面

  public void show(){

   System.out.println( "欢迎使用ATM机" );

   //使用登录方法,输入账号和密码

   int number = login();

   //如果登录成功

   if (number == 4 )

    working(); //ATM机办理业务

 

  }

  //登录方法

  private int login(){

   int number = 3 ; //用户输入次数

   while (number > 0 ) {

    Scanner input = new Scanner(System.in);

    System.out.println( "请输入账号:" );

    //输入账号

    String inUserName = input.nextLine();

    //输入密码

    System.out.println( "请输入密码:" );

    String inUserPassword = input.nextLine();

    String x = data.backUser(inUserName);

    //判断账户是否存在

    if (!x.equals( "null" )){

     user = x; //获取用户所有信息

     String[] str = user.split( "\\*" ); //将用户信息分割

     userName = str[ 0 ]; //用户名

     userPassword = str[ 1 ]; //用户密码

     userMoney = Double.parseDouble(str[ 2 ]); //用户余额

     //密码正确

     if (userPassword.equals(inUserPassword)){

      System.out.println( "登录成功" );

      number = 4 ; //次数变为4

      break ;

     }

    }

    number --; //次数减一

    System.out.println( "账号或密码输入错误。。。" );

    System.out.println( "您还有" + number + "次机会" );

   }

   return number; //是否登录成功

  }

 

  //功能界面

  private void functionShow(){

   System.out.println( "**********************" );

   System.out.println( "\t欢迎使用ATM" );

   System.out.println( "1,账户余额查询\n2,存钱\n3,取钱\n4,转账\n5,修改用户密码\n6,退出系统\n" );

   System.out.println( "**********************" );

  }

 

  //用户要进行的操作

  private void working(){

   String index; //业务序号

   do {

    functionShow(); //调用功能界面

    System.out.println( "请输入要办理的业务序号:" );

    Scanner input = new Scanner(System.in);

    index = input.nextLine();

    switch (index){

     case "1" :

      look();

      break ;

     case "2" :

      saveMoney();

      break ;

     case "3" :

      getMoney();

      break ;

     case "4" :

      giveMoney();

      break ;

     case "5" :

      changePassword();

      break ;

     case "6" :

      System.out.println( "欢迎下次光临!" );

      user = changeUser(userName,userPassword,userMoney);

      data.saveData(user, true ); //用户退出后保存用户信息

      break ;

     default :

      System.out.println( "您输入有误,请重新输入。。。。" );

    }

   } while (!index.equals( "6" ));

  }

 

  //是否继续某项操作

  private boolean isContinue(){

   System.out.println( "继续办理该项业务:请输入Y/y" );

   System.out.println( "返回上一级:请输入N/n" );

   Scanner input = new Scanner(System.in);

   String str = input.nextLine();

   if (str.equalsIgnoreCase( "Y" ))

    return true ;

   else

    return false ;

  }

 

  //存钱,取钱,转账共用

  private void howMuch(String str){

   System.out.println( "欢迎办理" + str + "业务。。。。。。" );

   System.out.println( "请输入金额(只能是整数且是100的倍数,最多为10000):" );

   Scanner input = new Scanner(System.in);

   Double money = input.nextDouble();

   if (money% 10 != 0 ) {

    System.out.println( "您输入有误!" );

    this .money = 0 ;

   }

   else

    this .money = money;

  }

 

  //查询实现

  private void look(){

   System.out.println( "用户余额为:" + userMoney);

   try {

    Thread.sleep( 2000 );

   } catch (Exception e){

    e.printStackTrace();

   }

  }

 

  //存钱实现

  private void saveMoney(){

   howMuch( "存钱" );

   if (money != 0 ) { //如果存的钱正确

    userMoney = userMoney + money; //存上

    System.out.println( "已存入" );

    look(); //显示余额

   }

   if (isContinue())

    saveMoney();

  }

 

  //判断余额是否充足

  private boolean isEnough(){

   if (money <= userMoney){

    userMoney = userMoney - money;

    return true ;

   }

   else {

    System.out.println( "您的余额不足!" );

    return false ;

   }

  }

 

  //取钱实现

  private void getMoney(){

   howMuch( "取钱" );

   //如果取的钱正确且如果转账账户余额够

   if (money != 0 && isEnough()){

    look();

    System.out.println( "请收好您的钱" );

   }

   if (isContinue())

    getMoney();

  }

 

  //转账实现

  private void giveMoney(){

   //只判断用户账户是否存在

   Scanner input = new Scanner(System.in);

   System.out.println( "请输入要转账账号:" );

   //输入账号

   String inUserName = input.nextLine();

   String str = data.backUser(inUserName);

   //如果该账户存在

   if (!str.equals( "null" )) {

    String antherUser = str; //获取被转账账户所有信息

    String[] str1 = antherUser.split( "\\*" ); //分割

    Double x = Double.parseDouble(str1[ 2 ]); //获取被转账账户余额

    howMuch( "转账" );

    //如果转的钱正确且如果转账账户余额够

    if (money != 0 && isEnough()) {

     x = x + money;

     antherUser = changeUser(str1[ 0 ], str1[ 1 ], x); //改变被转账账户信息

     data.saveData(antherUser, false ); //将用户信息传给Data类保存被转账账户信息

     System.out.println( "转账成功" );

     look();

    }

   }

   else

    System.out.println( "被转账账户不存在。。。" );

   if (isContinue())

    giveMoney();

  }

 

  //修改密码实现

  private void changePassword(){

   System.out.println( "请输入新密码:" );

   Scanner input = new Scanner(System.in);

   userPassword = input.nextLine();

   System.out.println( "密码修改成功!" );

  }

 

  //办完业务后修改用户信息

  private String changeUser(String n,String w,Double d){

   String str = n + "*" + w + "*" + d;

   return str;

  }

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

package newBank;

 

import java.io.*;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

 

//数据类是文件和ATM机之间操作用户信息的桥梁

public class Data {

  //Map储存数据库里所有用户的全部信息

  Map<String,String> userData = new HashMap();

  //返回用户的信息

  private String user;

 

  //创建数据类加载所有用户信息

  public Data(){

   getUsers();

  }

 

  private void getUsers(){

   String str;

   String[] string;

   File file = new File( "src\\newBank\\user" );

   FileReader fileReader = null ;

   BufferedReader bufferedReader = null ;

   try {

    fileReader = new FileReader(file);

    bufferedReader = new BufferedReader(fileReader);

    while ((str = bufferedReader.readLine())!= null ){

     string = str.split( "\\*" , 2 );

     userData.put(string[ 0 ],string[ 1 ]);

    }

   } catch (Exception e){

    e.printStackTrace();

    if ((fileReader!= null )&&(bufferedReader!= null )){

     try {

      bufferedReader.close();

      fileReader.close();

     } catch (IOException e1) {

      e1.printStackTrace();

     }

    }

   }

  }

 

  //告诉用户名,如果找到返回该用户所有信息,没找到返回null

  public String backUser(String userName){

   String str = "null" ;

   if (userData.containsKey(userName))

    str = userName + "*" + userData.get(userName);

   user = str;

   return user;

  }

  //修改用户数据并储存在userData图里

  public void saveData(String user, boolean aBoolean){

   String[] string = user.split( "\\*" , 2 );

   userData.remove(string[ 0 ]);

   userData.put(string[ 0 ],string[ 1 ]);

   if (aBoolean) //判断用户是否操作结束

    changeUser();

  }

 

  //用户操作完,将userData里所有的用户再写入文件里

  private void changeUser(){

   String str,string= "" ;

   Set<String> keys = userData.keySet();

   for (String key : keys){

    str = key + "*" + userData.get(key);

    string = string + str + "\n" ;

   }

   File file = new File( "src\\newBank\\user" );

   FileWriter out = null ;

   try {

    out = new FileWriter(file);

    out.write(string);

    out.flush();

   } catch (IOException e) {

    e.printStackTrace();

   } finally {

    if (out != null ){

     try {

      out.close();

     } catch (IOException e) {

      e.printStackTrace();

     }

    }

   }

  }

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

package newBank;

 

//银行类

public class Bank {

  //银行有ATM机供给用户使用

  private ATM atm = new ATM();

  //欢迎用户使用

  public void welcome(User user){

   System.out.println( "欢迎用户来我行使用ATM机" );

   user.useATM(atm);

  }

 

}

?

1

2

3

4

5

6

7

8

9

package newBank;

 

//用户类

public class User {

  //用户使用ATM机办理业务

  public void useATM(ATM atm){

   atm.show();

  }

}

?

1

2

3

4

//java文件当数据库

李四* 123 * 1000.0

张三* 456 * 10000.0

王五* 789 * 100000.0

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

package newBank;

 

//测试类

public class Demo {

 

  public static void main(String[] args){

   //创建一个银行

   Bank bank = new Bank();

   //创建一个用户

   User user = new User();

   //银行欢迎用户

   bank.welcome(user);

 

  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://blog.csdn.net/weixin_46085748/article/details/112095767

查看更多关于java实现ATM机系统(2.0版)的详细内容...

  阅读:9次