【摘要】 本次项目中我们选用当前热门的MVC框架来简单搭建
经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。
要求:实现银行ATM机基本功能
我这边采用的是二级菜单,**第一层就是登录、注册两个功能。登录成功后进入操作界面,1.存款 …
本次项目中我们选用当前热门的MVC框架来简单搭建
经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。
要求:实现银行ATM机基本功能
我这边采用的是二级菜单,**第一层就是登录、注册两个功能。登录成功后进入操作界面,1.存款 2.取款3.余额4.修改密码5.转账 6.退出当前账号 7.退出, 这7个功能。**基本功能还是蛮简单的哈,因为要采用MVC模式,所以我们先把层分好,再开始思考该怎么一步步的实现。
项目分层
我这边定义了四个包,bean包用来创建实例化对象,dao包用来创建存储所有的对象,sevice包服务层用来创建操作实例化的对象,view展示层顾名思义,就是用来给用户看的撒,实现用户看到的界面。
理清逻辑——一切easy、easy
大家不要看到这么多的包就觉得很复杂哈,它就和我们之前写的项目一样,只是把它细分出来了,其实一个包里面也就只有一个类。所以不要慌张,我们还是一步步的来。
第一步先创建实体类嘛,就在bean包下新建一个Acount类,它有姓名(name)、密码(password)、卡号(cardid)、余额(blance)四个基本属性,为了方便测试可以重写它的toString()方法。这里为了规范属性都有私有化哦!然后在生成属性的get()、set()方法,创建两个构造方法,一个无参,一个有参的。
第二步,那实体类创建完了,我们该干嘛呢?我们还需要一个存放Acount对象的集合是不,所以我们在dao包下创建一个AcountDao类,它只有一个私有的ArrayList集合acountDaos,同样的需要生成它的get()、set()方法!
第三步,实体类和装它对象的集合都有了,下一步我们就需要创建一个方法类,来一一实现需要的操作,所以我们在Service包下创建一个AcountService类,注册、登录、存钱、取钱、查看余额、修改密码方法这些方法都是在它里面实现的。
最后就是在view包中创建一个AcountView类,用来给用户进行展示,也就相当于我们当初的Test测试类!
一步一个脚印
按照咱们的逻辑,先编写bean包下的Acount类,具体代码如下:
package bean;
/*
账户类 拥有姓名、密码、卡号、余额四个基本属性
*/
public class Acount { private String name; private String password; private String cardid; private Double blance; public Acount() { } public Acount(String name, String password, String cardid, Double blance) { this.name = name; this.password = password; this.cardid = cardid; this.blance = blance; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getCardid() { return cardid; } public void setCardid(String cardid) { this.cardid = cardid; } public Double getBlance() { return blance; } public void setBlance(Double blance) { this.blance = blance; } @Override public String toString() { return "您的用户名为" + name + ", 密码为:" + password + ", 卡号为:" + cardid + ", 余额为:" + blance; }
}
这就不给大家过多解释了哈!easy、easy
再来编写我们dao层下的AcountDao()类,具体代码如下:
package dao;
import bean.Acount;
import java.util.ArrayList;
/*
*/
public class AcountDao { private ArrayList<Acount> acountDaos = new ArrayList<>(); public ArrayList<Acount> getAcountDaos() { return acountDaos; } public void setAcountDaos(ArrayList<Acount> acountDaos) { this.acountDaos = acountDaos; }
/* @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Acount)) return false; Acount acount = (Acount) o; for (Acount a: getAcountDaos()) { if (acount.getCardid().equals(a.getCardid())){ return true; } } return false; }*/
/* @Override public int hashCode() { return 0; }*/
}
这里我注释的代码是当时想着将Acount对象添加进去时,如果它的银行卡号相同,就添加失败。相当于银行卡号是唯一的,不可重复。后来想了想,没必要。因为我银行卡号是随机创建的,相同的概率是十万分之一,大家写上也可以。
好,前两个解决之后,咱们就开始第三个service包下的AcountService类实现,具体代码如下:
package service;
import bean.Acount;
import dao.AcountDao;
import java.util.Random;
import java.util.Scanner;
/*
账户操作类 。拥有 注册、登录、存钱、取钱、查看余额、修改密码方法
*/
public class AcountService { public Acount acount = new Acount(); public AcountDao acountDao = new AcountDao(); public Scanner sc = new Scanner(System.in); /* 注册 */ public void register(){ Acount acount = new Acount(); System.out.println("请输入用户名:"); acount.setName(sc.next()); System.out.println("请输入密码:"); acount.setPassword(sc.next()); //生成一个13位的随机数来表示用户的唯一标识卡号 Random random = new Random(); String cardid = String.valueOf(random.nextInt(100000000)+999999999); acount.setCardid(cardid); acount.setBlance(0.0); this.acount = acount; // 将用户添加进用户集合 acountDao.getAcountDaos().add(acount); for (Acount a:acountDao.getAcountDaos()) { System.out.println(a); } System.out.println("注册成功"); System.out.println("*******************************************************************************************"); } /* 登录 */ public Acount login(){ Acount acount = new Acount(); System.out.println("请输入卡号:"); acount.setCardid(sc.next()); System.out.println("请输入密码:"); acount.setPassword(sc.next()); int n = 0; for (Acount a: acountDao.getAcountDaos()) { if(acount.getCardid().equals(a.getCardid()) && acount.getPassword().equals(a.getPassword())){ n = 1; System.out.println("登录成功"); this.acount = a; System.out.println("*******************************************************************************************"); return a; } } if (n == 0){ System.out.println("卡号或密码错误,请重新输入:"); } return null; } /* 存钱 */ public void saveMoney(){ System.out.println("要存多少钱呢"); double money = sc.nextInt(); if (money<0){ System.out.println("好家伙,你到底是存还是取?"); return; } this.acount.setBlance(this.acount.getBlance()+money); System.out.println("存钱成功"); System.out.println("*******************************************************************************************"); } /* 取钱 */ public void drawMoney(){ System.out.println("要取多少钱呢?"); double money = sc.nextInt(); if (money<0){ System.out.println("好家伙,你到底是存还是取?"); return; } if (money > this.acount.getBlance()){ System.out.println("好家伙,你都没有这么多钱?怎么取呢"); }else { acount.setBlance(this.acount.getBlance()-money); System.out.println("取钱成功"); System.out.println("*******************************************************************************************"); } } /* 查看余额 */ public void checkMoney(){ System.out.println("您的余额为:"+this.acount.getBlance()); System.out.println("*******************************************************************************************"); } /* 修改密码 */ public void updatePwd(){ System.out.println("请输入新密码:"); String pwd = sc.next(); acount.setPassword(pwd); System.out.println("修改完成,请重新登录"); System.out.println("*******************************************************************************************"); } /* 转账 */ public void transferAcount(){ System.out.println("请输入转账的卡号:"); String cardid = sc.next(); int n =0; for (Acount a:acountDao.getAcountDaos()) { if (cardid.equals(a.getCardid())){ n = 1; } } if (n == 0){ System.out.println("没有找到该卡号!"); return; } System.out.println("请输入转账的金额:"); double d = sc.nextDouble(); if (d > this.acount.getBlance()){ System.out.println("???空手套白狼,你有这么多钱吗?就转账??"); return; } for (Acount a:acountDao.getAcountDaos()) { if (cardid.equals(a.getCardid())){ n = 1; this.acount.setBlance(this.acount.getBlance() - d); a.setBlance(a.getBlance()+d); System.out.println("转账成功"); } } }
}
看着代码有点多,不慌,咱们一个个的来解决,首先我们看到的第一个注册login()方法我创建了一个Acount对象和一个AcountDao对象,acount是为了我们登录之后用来记住当前对象的,acountdao是让我们来调用它的getAcoutDao方法的。在第一个注册方法中,我首先新new了一个Acount对象,用来将用户输入的信息,保存到其中,随后生成了一个随机数,因为int类型最大取不到13位,我就取了10位~,用来当做它的银行卡号。随后将acount的对象的初始余额赋值为0。随后将它添加进咱们的用户集合。随后将acountdao集合中的所有属性全部打印出来。
接着就是我们的第二个登录login()方法,前面的代码和注册一样,在foreach循环这儿,我判断用户输入的卡号和密码,是否都和我整个aountDao集合中的其中一个对象相等,如果相等,就提示登录成功,并将集合中的这个对象赋给我的成员变量acount,这样,我登录之后所有的操作都是该账户的改动。这一步大家可以多看看。我语言组织的不是很好哈~~~
第三个存钱的方法,就很easy啦。先判断用户输入的金额是否合理,合理就将用户输入的金额加上用户原本的金额通过setBlance方法写入到对象中。
第四个取钱的方法,大同小异,就不赘述咯!
第五、六个查看余额、修改密码的方法…easy
第七个方法,转账。这儿我们首先获取用户输入的要转账的卡号,进行循环判断,如果不存在返回。如果存在,再要求用户输入转账金额,如果输入的金额大于用户账户的金额,返回。如果金额<用户账户的金额,则将用户的金额 – 转账的金额。将转账银行卡号的金额 + 转账的金额。也就结束啦!
最后就是咱们View包下的AcountView类实现,具体代码如下:
package view;
import bean.Acount;
import service.AcountService;
import java.util.Scanner;
public class AcountView { public static Scanner sc = new Scanner(System.in); public static AcountService acountService = new AcountService(); public static Acount acount = new Acount(); public static void main(String[] args) { showMenu(); } public static void showMenu() { while (true) { System.out.println("请选择操作:1.注册\t2.登录"); int n = sc.nextInt(); switch (n) { case 1: acountService.register(); break; case 2: acount = acountService.login(); if (acount != null) { succeedLogin(); } break; default: System.out.println("输入有误,请重新输入"); break; } } } public static void succeedLogin() { while (true) { System.out.println("请选择操作:1.存款\t2.取款\t3.余额\t4.修改密码\t5.转账\t6.退出当前账号\t7.退出"); int n = sc.nextInt(); switch (n) { case 1: acountService.saveMoney(); break; case 2: acountService.drawMoney(); break; case 3: acountService.checkMoney(); break; case 4: acountService.updatePwd(); showMenu(); break; case 5: acountService.transferAcount(); break; case 6: showMenu(); break; case 7: System.exit(0); break; default: System.out.println("输入有误,请重新输入"); } } }
}
这个我写了两个页面,第一个登录注册页,登录成功后进入第二个页面,退出当前账户就是回到也页面一!!!全部代码就是这些咯。最后再给大家看看具体效果!
今天的分享就到这儿咯!大家看完记得给个一键三连哇!!!!
文章来源: blog.csdn.net,作者:小顿爱编程,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_45053664/article/details/115962511