ATM系统 第一个面向对象程序

该程序主要是模仿ATM机的过程主要是为了练习面向对象

主要有三个类 ATM和 Bank和 Account 类

先粘贴代码如下

ATM

  1 package com.hpu.bai;
  2 import java.util.Scanner;
  3 public class ATM {
  4     Bank bank = Bank.getBank();
  5     Scanner input = new Scanner(System.in);
  6     Account nowAcc ;
  7     private boolean answer(String s){
  8         if("Y".equals(s)){
  9             return true;
 10         }
 11         return false;
 12     }
 13     public void start(){
 14         System.out.println("欢迎使用自助终端");
 15         System.out.println("-----------");
 16         System.out.println("1.开户");
 17         System.out.println("2.插卡");
 18         System.out.println("3.系统登录");
 19         System.out.println("4.退出系统");
 20         System.out.println("-----------");
 21         System.out.println("请输入你要操作的选项");
 22         String index = input.next();
 23         if("1".equals(index)){
 24             //创建新账户
 25             creatNew();
 26         }else if("2".equals(index)){
 27             //登录账户
 28             login();
 29         }else if("3".equals(index)){
 30             //系统管理
 31             adminLogin();
 32         }else if("4".equals(index)){
 33             //退出系统
 34             System.out.println("谢谢你的使用");
 35             System.exit(0);;
 36         }else {
 37             //System.out.println("你的输入有误,请重新输入");
 38         }
 39         start();
 40     }
 41     private void adminLogin() {
 42         System.out.println("请输入管理员密码");
 43         String pwd = input.next();
 44         if(pwd.equals("admin")){
 45             adminMenu();
 46         }else{
 47             System.out.println("密码错误");
 48         }
 49     }
 50     private void adminMenu() {
 51     System.out.println("管理员在线");
 52     System.out.println("-------------");
 53     System.out.println("1.显示所有账户");
 54     System.out.println("2.冻结账户");
 55     System.out.println("3.恢复账户");
 56     System.out.println("4.安全退出");
 57     System.out.println("-------------");
 58     String index = input.next();
 59     if("1".equals(index)){
 60         //显示所用账户
 61         allAcc();
 62     }else if("2".equals(index)){
 63         //冻结账户
 64         disableAcc();
 65     }else if("3".equals(index)){
 66         //恢复账户
 67         enableAcc();
 68     }else if("4".equals(index)){
 69         //安全退出
 70         System.out.println("你已经安全退出");
 71         start();
 72     }
 73         adminMenu();
 74     }
 75     private void enableAcc() {
 76         System.out.println("当前不可用账户");
 77         Account[] accs = bank.getAccounts();
 78         for (Account account : accs) {
 79             if(account != null && !account.isStatus()){
 80                 System.out.println("账户名称\t是否可用");
 81                 System.out.println(account.getName()+"\t"+(account.isStatus()?"是":"否"));
 82             }
 83         }
 84         System.out.println("请输入你要恢复的账户名称");
 85         String name = input.next();
 86         Account disAcc = bank.getAccountByName(name);
 87         if(disAcc != null && !disAcc.isStatus()){
 88             System.out.println("确定要恢复该账户(Y/N)");
 89             if(answer(input.next())){
 90                 disAcc.setStatus(true);
 91                 System.out.println("恢复成功");
 92             }else{
 93                 System.out.println("该账户未被恢复");
 94                 allAcc();
 95             }
 96         }else{
 97             System.out.println("输入有误");
 98         }
 99     }
100
101     private void disableAcc() {
102         System.out.println("当前可用账户");
103         Account[] accs = bank.getAccounts();
104         for (Account account : accs) {
105             if(account != null && account.isStatus()){
106                 System.out.println("账户名称\t是否可用");
107                 System.out.println(account.getName()+"\t"+(account.isStatus()?"是":"否"));
108             }
109         }
110         System.out.println("请输入你要冻结的账户名称");
111         String name = input.next();
112         Account disAcc = bank.getAccountByName(name);
113         if(disAcc != null && disAcc.isStatus()){
114             System.out.println("确定要冻结该账户(Y/N)");
115             if(answer(input.next())){
116                 disAcc.setStatus(false);
117                 System.out.println("冻结成功");
118             }else{
119                 System.out.println("该账户未被冻结");
120                 allAcc();
121             }
122         }else{
123             System.out.println("输入有误");
124         }
125     }
126
127     private void allAcc() {
128         Account[] accs = bank.getAccounts();
129         for (Account account : accs) {
130             if(account != null){
131                 System.out.println("账户名称\t是否可用");
132                 System.out.println(account.getName()+"\t"+(account.isStatus()?"是":"否"));
133             }
134         }
135
136     }
137     private void login() {
138         System.out.println("请输入你的账户名字");
139         String name = input.next();
140         nowAcc = bank.getAccountByName(name);
141         if(nowAcc == null){
142             System.out.println("你输入的账户不存在,请重新输入");
143             login();
144         }else{
145             System.out.println("请输入账户密码");
146             String pwd = input.next();
147             if(nowAcc.getPassword().equals(pwd)){
148                 System.out.println("登录成功");
149                 userMenu();
150             }else{
151                 System.out.println("你输入的密码错误,请重新输入");
152             }
153         }
154
155     }
156     private void userMenu() {
157         System.out.println("欢迎"+nowAcc.getName()+"的到来");
158         System.out.println("-----------");
159         System.out.println("1.查询余额");
160         System.out.println("2.存款");
161         System.out.println("3.取款");
162         System.out.println("4.转账");
163         System.out.println("5.修改密码");
164         System.out.println("6.退出登录");
165         System.out.println("-----------");
166         System.out.println("请输入你要操作的选项");
167         String index = input.next();
168         if("1".equals(index)){
169             //查询余额
170             queryMoney();
171
172         }else if("2".equals(index)){
173             //存款
174             saveMoney();
175         }else if("3".equals(index)){
176             //取款
177             drawMoney();
178         }else if("4".equals(index)){
179             //转账
180             transMoney();
181         }else if("5".equals(index)){
182             //修改密码
183             rePwd();
184         }else if("6".equals(index)){
185             start();
186         }else{
187             System.out.println("你的输入有误,请重新输入");
188         }
189         userMenu();
190     }
191
192     private void rePwd() {
193         System.out.println("请输入原始密码");
194         String pwd = input.next();
195         if(nowAcc.getPassword().equals(pwd)){
196             System.out.println("请输入新密码");
197             String pwd1 = input.next();
198             System.out.println("请再次输入新密码");
199             String pwd2 = input.next();
200             if(pwd1.equals(pwd2)){
201                 nowAcc.setPassword(pwd1);
202                 System.out.println("修改密码成功");
203             }else{
204                 System.out.println("两次密码输入不一样");
205                 rePwd();
206             }
207         }
208
209     }
210     private void transMoney() {
211         System.out.println("请输入你要转入的账户名字");
212         String name = input.next();
213         if(nowAcc.getName().equals(name)){
214             System.out.println("不能够给自己转账,请重新输入");
215         }else{
216             Account transAcc = bank.getAccountByName(name);
217             if(transAcc == null){
218                 System.out.println("你输入的账户不存在");
219             }else{
220                 System.out.println("请输入你要转入的金额");
221                 Float money = input.nextFloat();
222                 if(money > 0){
223                     if(money < nowAcc.getMoney()){
224                         System.out.println("请确保资金安全,你确实要转账(Y/N)");
225                         if(answer(input.next())){
226                             nowAcc.setMoney(nowAcc.getMoney()-money);
227                             transAcc.setMoney(transAcc.getMoney()+money);
228                             System.out.println("转账成功");
229                             queryMoney();
230                         }
231                     }else{
232                         System.out.println("余额不足,请重新输入");
233                     }
234                 }else{
235                     System.out.println("你输入的金额有误");
236                 }
237
238             }
239         }
240     }
241     private void drawMoney() {
242         //queryMoney();
243         System.out.println("请输入你要取的金额");
244         Float money = input.nextFloat();
245         if(money > 0){
246             if(money > nowAcc.getMoney()){
247                 System.out.println("当前余额不足");
248                 drawMoney();
249             }else{
250                 nowAcc.setMoney(nowAcc.getMoney()-money);
251                 System.out.println("取款成功");
252                 queryMoney();
253             }
254         }else{
255             System.out.println("你输入的金额有误,请重新输入");
256         }
257     }
258
259     private void saveMoney() {
260         System.out.println("请输入你要存入的金额");
261         Float money = input.nextFloat();
262         if(money>0){
263             nowAcc.setMoney(nowAcc.getMoney()+money);
264             System.out.println("存款成功");
265             queryMoney();
266         }else{
267             System.out.println("你输入的金额有误,请重新输入");
268         }
269     }
270     private void queryMoney() {
271         System.out.println("你当前的余额为¥: "+nowAcc.getMoney());
272         userMenu();
273     }
274     private void creatNew() {
275         //验证账户是否可用
276         System.out.println("请输入你所开账户的名字");
277         String name = input.next();
278         Account acc = bank.getAccountByName(name);
279         if(acc == null){
280             //账户可用后提示可以输入密码
281             System.out.println("检测你输入的账户可用");
282             System.out.println("请输入你要设置的密码");
283             String pwd1 = input.next();
284             System.out.println("请再次输入你要设置的密码");
285             String pwd2 = input.next();
286             if(pwd1.equals(pwd2)){
287                 Account newAcc = new Account();
288                 newAcc.setName(name);
289                 newAcc.setPassword(pwd2);
290                 System.out.println("你是否要存入现金(Y/N)");
291                 if(answer(input.next())){
292                     System.out.println("请输入你要存入的金额");
293                     Float money = input.nextFloat();
294                     newAcc.setMoney(money);
295                 }else{
296                     newAcc.setMoney(0F);
297                 }
298                 newAcc.setStatus(true);
299                 //要将新开好的账户传输到银行账户当中去
300                 if(bank.accSave(newAcc)){
301                     System.out.println("开户成功,请登录");
302                 }else{
303                     System.out.println("服务器忙,请稍后");
304                 }
305             }else{
306                 System.out.println("你两次输入的密码不同,请重新输入");
307                 creatNew();
308             }
309         }else{
310             System.out.println("你所开户的名字已重复,请重新输入开户名字");
311             creatNew();
312         }
313     }
314 }

Bank类

 1 package com.hpu.bai;
 2
 3 public class Bank {
 4     private Bank(){}
 5     private static Bank bank = null;
 6     public static Bank getBank() {
 7         if(bank == null){
 8             bank = new Bank();
 9         }
10         return bank;
11     }
12
13     public void setAccounts(Account[] accounts) {
14         this.accounts = accounts;
15     }
16     private Account[] accounts = new Account[100];
17
18     public Account[] getAccounts() {
19         return accounts;
20     }
21     public Account getAccountByName(String name){
22         for (int i = 0; i < accounts.length; i++) {
23             if(accounts[i] != null && accounts[i].getName().equals(name)){
24                 return accounts[i];
25             }
26         }
27         return null;
28     }
29     public boolean accSave(Account a){
30         for (int i = 0; i < accounts.length; i++) {
31             if(accounts[i]== null){
32                 accounts[i] = a;
33                 return true;
34             }
35         }
36         return false;
37     }
38 }

Account类

 1 package com.hpu.bai;
 2
 3 public class Account {
 4     private String name;
 5     private String password;
 6     private Float money ;
 7     private boolean status;
 8     public String getName() {
 9         return name;
10     }
11     public void setName(String name) {
12         this.name = name;
13     }
14     public String getPassword() {
15         return password;
16     }
17     public void setPassword(String password) {
18         this.password = password;
19     }
20     public Float getMoney() {
21         return money;
22     }
23     public void setMoney(Float money) {
24         this.money = money;
25     }
26     public boolean isStatus() {
27         return status;
28     }
29     public void setStatus(boolean status) {
30         this.status = status;
31     }
32
33 }

最后还有个test类

1 package com.hpu.bai;
2
3 public class Test {
4     public static void main(String[] args) {
5         ATM atm = new ATM();
6         atm.start();
7     }
8 }

时间: 2025-01-02 16:53:22

ATM系统 第一个面向对象程序的相关文章

java模仿atm系统实验感想

对于自己制作的ATM模仿系统,我自己都有些不敢看,简直是惨不忍睹,我都不敢称之为一个系统,在我看来这样一个错误百出的系统,都没法拿出去让人看,我不禁回想起自己学习java的过程. 学习了一暑假的Java课程,.开始学习任何一门课(包括java),兴趣最重要.一直觉得自己在学计算机编程语言,学习了很多,但每门语言都停留在知识边缘地带,都没深入到它们的精华部分,对它们的精华部分知之甚少,虽然没有自己的老师讲解但我鼓足信心,开始了漫长的java征途. 还记得我编写的第一个经典程序“hello Word

实战第一个云程序

一. 摘要 首先圣殿骑士很高兴云计算系列能得到大家的关注和支持,这个系列准备了几个月,终于在今天发布第一篇了(由于文章太长,拆成了两篇,这是其中一篇).在这几个月中通过不断的使用和实践,对云计算总算有了一个较粗浅的认识,所以也希望能够和大家一起分享.在发布这篇文章之前也考虑了很久,因为一开始就讲概念的话,势必会得不到很好的效果,毕竟大家都不太熟悉这个新事物.与其"人云亦云"还不如先来一个简单的实例,所以我就先选择一个实践应用来看到底云计算能给我们带来什么好处,从开发者角度,随着这个概念

面向对象程序设计方法学

面向对象程序设计方法学 面向对象程序设计吸取了结构化程序设计的一切优点,又考虑了现实世界与面向对象解空间的映射关系,它所追求的目标是将现实世界问题的求解尽可能的简单化.  面向对象程序设计将数据及对数据的操作放在一起,作为一个相互依存.不可分割的整体来处理,它采用数据抽象和信息隐藏技术.它将对象及对对象的操作抽象成一种新的数据类型—类,并且考虑不同对象之间的联系和对象类的重用性. 下面我将就本人了解的一些面向对象基本概念和大家分享.希望对大家有所帮助. 一.对象的基本概念 面向对象=对象+类+继

简易ATM系统练习

执行简单的ATM功能:主要练习JavaOO参考了阿里巴巴java内部规范,希望自己所书写的程序能够更加的规范性: package com.lovo.ATM.bean; import java.util.Scanner; /** * ATM系统类 * @author 侯熙 * @version 1.1 * @since jdk1.8.0_25 */ public class ATM { private UserInfo[] users; private UserInfo user; private

MFC第一节-windows程序内部运行机制

一.窗口 设计窗口类时: 1 typedef struct _WNDCLASS{ 2 UINT style; //如水平.垂直变化是否重绘,禁用Close,检测双击 3 WNDPROC lpfnWndProc;//窗口过程函数句柄 4 int cbClsExtra;//类附加内存 5 int cbWndExtra;//窗口附加内存 6 HANDLE hInstance;//实例句柄 7 HANDLE hIcon;//图标 8 HCURSOR hCursor;//光标 9 HBRUSH hbrBa

第一个小程序

学习java到现在,尝试写了第一个小程序. 程序内容:一个输入日期然后可以打印日历并标注日期的小程序. 遇到的问题:1.如何解决遍历数组到星期6然后换行的问题. 2.如何解决判断是否换行和遍历数字的先后问题. 解决方法:1.用除7的余数来解决,一周只有7天,用7减去前面得到的开始于星期几的数字,因为开始的第一天也算的,所以还要加1就得到了第一行末端的数字.因为后面都是7天一次换行了,所以用从0开始的一个计数器判断在除七余数是这个数字的时候换行.但是要排除一种特殊情况,如何这个月从星期日开始,就变

python 初探,第一个小程序

8-9年前有过一段时间的C语言编程经验,最近接触了一下python,解释性编程语言的结构相较于C语言还是更加方便的. 亲手写的第一个小程序实现的是系统登录功能,同一用户名输错3次密码,将会锁定此帐号. 写的过程中有几点感觉和C语言的差别, 代码行末不需要':'结尾, 程序段是通过相同的缩进,而不是{}.

ASP.NET MVC 03 - 安装MVC5并创建第一个应用程序

不知不觉 又逢年底, 穷的钞票 所剩无几. 朋友圈里 各种装逼, 抹抹眼泪 MVC 继续走起.. 本系列纯属学习笔记,如果哪里有错误或遗漏的地方,希望大家高调指出,当然,我肯定不会低调改正的.(开个小玩笑.哈哈.) 参考书籍:<ASP.NET MVC 4 Web编程>.<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业及应用>.度娘谷歌等. -= 安

第一章 Windows程序内部运行机制(3)消息与消息队列

在Windows中,用户程序可以调用系统的API函数,系统也会调用用户程序,这个调用时通过消息来进行的. Windows程序设计是一种事件驱动方式的程序设计模式,主要基于消息. [例]当用户在窗口中画图的时候,按下鼠标左键,操作系统就会感知到这一事件,于是将这个事件包装成一个消息,投递到应用程序的消息队列中,然后应用程序从消息队列中取出消息进行响应.在处理过程中,操作系统会给应用程序“发送消息”.“发送消息”实际上是指操作系统调用程序中一个专门负责处理消息的函数,这个函数称为窗口过程. 1.消息