ATM管理系统

这个作业属于哪个课程 https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19
这个作业要求在哪里 https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11477
这个作业的目标 编写一个ATM管理系统包括以下主要功能:1.开户,销户2.查询账户余额3.存款4.取款5.转账(一个账户转到另一个账户)等...
学号 3190704143

<注:以下出现的方法均在存放于同一个Atm类中>

下面代码在主函数中出现,用于存放用户的信息
String[] cardNos = new String[10]; /* 账号 /
String[] passwords = new String[10];/
密码 /
String[] userNames = new String[10];/
用户名 /
double[] moneys = new double[10]; /
余额 */

showMenu方法是作为整个程序的最外围界面,用于用户的登入,创建账号以及删除账号

public void showMenu(String[] userNames,String[] passwords,String[] cardNos,double[] moneys) /*菜单功能*/
{	
      int out=10;
      System.out.println("yhj银行欢迎您,请选择服务!");
      while(out==10)
      {
            System.out.println("1 登入  2 开户  3 销户  4 退出");
            int getNum=scanner.nextInt();
            switch (getNum)
            {
                  case 1:
                        this.atmRun(userNames,passwords,cardNos,moneys);
                        break;
                  case 2:
                        this.kaihu(userNames,passwords,cardNos,moneys);
                        break;
                  case 3:
                        this.xiao(passwords,userNames,moneys,cardNos); 
                        break;
                  case 4: 
                        System.exit(0);
                        break;			  
            }
      }			 
}

kaihu方法用于创建账号

Scanner reader = new Scanner(System.in);
	static int ii = 0;

	public void kaihu(String[] name, String[] mima, String[] cardNos, double[] moneys2) // 开户服务
	{

		for (int j = 0; j <= 4;)                                           // 一次性最多可以创建4个
		{
			moneys2[ii] = 0;
			System.out.println();
			System.out.println("创建账户");
			int i = 1;
			while (i == 1)                                             // 保证密码错误后还能重新输入
			{
				System.out.print("请输入账号:");
				cardNos[ii] = reader.next();
				System.out.print("请输入用户名:");
				name[ii] = reader.next();
				System.out.print("请设置密码:");
				mima[ii] = reader.next();
				System.out.print("请确定密码:");
				String aaa = new String();
				aaa = reader.next();
				if (mima[ii].equals(aaa))                               // 确认密码
				{
					System.out.println();
					System.out.println("创建成功!");
					System.out.println("您创建的账户信息为:");
					System.out.println("账号:" + cardNos[ii]);
					System.out.println("姓名:" + name[ii]);
					System.out.println("密码:" + mima[ii]);
					i = 2;
				} else {
					System.out.println("两次输入的密码不一样!!");
					System.out.println("是否要重新创建账号(是 或 否)?");
					String aaaa = new String();
					aaaa = reader.next();
					if ("否".equals(aaaa))                   // 否 的话就i=2 结束循环,是 的话就i保持不变
						i = 2;
				}
			}
			System.out.println("是否新建第" + (ii + 2) + "个用户(是 或 否)?");
			String aaaa = new String();
			aaaa = reader.next();
			if ("否".equals(aaaa))
				j = 5;                                                 // 结束总循环
			else
				ii++;
			j++;
		}
	}

xiao方法用来删除账号

	public void xiao(String[] mima, String[] name, double[] moneys2, String[] cardNos) // 销户
	{
		String sn = new String();
		System.out.println();
		System.out.println("确认是否要销户(是 或 否):");
		sn = reader.next();
		if ("是".equals(sn)) {
			String[] aa = new String[2];                                     // 为输入的姓名和密码分配空间
			System.out.print("请输入用户名:");
			aa[1] = reader.next(); 
			int nm = 0;
			for (nm = 0; nm <= ii;) {
				if (aa[1].equals(name[nm])) {
					for (int i = 1; i == 1;) {
						System.out.print("请输入密码:");
						aa[0] = reader.next(); //
						if (mima[nm].equals(aa[0])) {
							name[nm] = "";                         // 给name[nm]清除值
							mima[nm] = "";
							cardNos[nm] = "";
							moneys2[nm] = 0;
							System.out.println("此用户已被销户!!");
							i = 2;
						} else {
							System.out.println("密码 错误!!");
							String aaa;
							System.out.println("是否要继续(是 或 否)?");
							aaa = reader.next();
							if ("否".equals(aaa))
								i = 2;
						}
						nm = ii + 1;
					}
				} else
					nm++;
			}
		}
	}

atmRun方法用于用户账号匹对,账号正确则进入下一个界面

	public void atmRun(String[] name, String[] mima, String[] cardNos, double[] moneys2) {
		int time = 3;                                                          /* 输入密码次数 */
		while (time > 0) {
			Scanner scanner = new Scanner(System.in);
			System.out.println("请输入姓名:");
			String cardNo = scanner.nextLine();
			System.out.println("请输入密码:");
			String pwd = scanner.nextLine();
			int userIndex = this.login(cardNo, pwd, mima, name);            /* 执行登录 */
			if (userIndex != 10) {	                                    /*判断是否登陆成功 */
				this.showMenu1(mima, name, cardNos, moneys2);            /*执行功能菜单 */
			} else {
				time--;
				System.out.println("您输入的姓名或密码有误");
				System.out.println("你还有" + time + "次机会");
			}
			                                                             /*次数用完退出系统 */
			if (time == 0) {
				System.exit(0);
			}
		}

	}

login方法用于判断账号是否存在

public int login(String cardNo, String pwd, String[] passwords,
			String[] cardNos) {                   /* cardNo 卡号 pwd 密码 userIndex:10 表示登录失败 否则为成功 */
		for (int i = 0; i < cardNos.length; i++) {                  /*循环判断账号是否存在 */
			if (cardNo.equals(cardNos[i])) {
				userIndex = i;
				break;
			}
		}                                                             /* 继续判断密码是正确 */
		if (userIndex != 10) {
			if (pwd.equals(passwords[userIndex])) {                        /*正确 */
				return userIndex;
			} else {
				userIndex = 10;
			}
		}
		return userIndex;
	}

showMenu1方法是登入ATM后的界面,存放ATM的基本功能

        public void showMenu1(String[] mima, String[] userNames, String[] cardNos, double[] moneys) {
		int out = 1;
		System.out.println(userNames[userIndex] + ",下午好!");
		while (out == 1) {
			System.out.println("1 查询  2 取款  3 存账  4 转账  5 退出");
			int getNum = scanner.nextInt();
			switch (getNum) {
			case 1:
				System.out.println("您当前余额为:" + moneys[userIndex]);
				break;
			case 2:
				this.getMoneys(mima, userNames, moneys, cardNos);
				break;
			case 3:
				this.savaMoney(mima, userNames, moneys, cardNos);
				break;
			case 4:
				this.transMoneys(mima, userNames, moneys, cardNos);
				break;
			case 5:
				System.out.println("退出成功!");
				System.exit(0);
			}
		}

	}

getMoneys方法是用来用户取款,会判断用户的账户余额,若余额不够则取款失败

	public void getMoneys(String[] mima, String[] userNames, double[] moneys, String[] cardNos) {
		System.out.println("请输入您的取款金额:");
		int getMoney = scanner.nextInt();
		if (getMoney > moneys[userIndex]) {
			System.out.println("您的余额不足哦!!!");
			System.out.println("您的余额为:" + moneys[userIndex]);
		} else {
			moneys[userIndex] -= getMoney;
			System.out.println("成功取款" + getMoney + "您的余额为:  " + moneys[userIndex]);
		}
	}

savaMoney方法是用来用户存入金额

	public void savaMoney(String[] mima, String[] userNames, double[] moneys, String[] cardNos) {
		System.out.println("请输入您的存款金额:");
		int savaMoney = scanner.nextInt();                               //用户存入的金额
		moneys[userIndex] += savaMoney;
		System.out.println("成功存款" + savaMoney + "您的余额为:  " + moneys[userIndex]);
	}

transMoneys方法实现转账功能,根据转入用户的账号进行

public void transMoneys(String[] mima, String[] userNames, double[] moneys, String[] cardNos) {
		int hasUser = 10;
		int transIndex = 0;
		System.out.println("请输入转账的账号:");
		String transCard = scanner.next();
		for (int i = 0; i < cardNos.length; i++) {
			if (transCard.equals(cardNos[i])) {
				hasUser = 5;
				transIndex = i;
				break;
			}
		}
		if (hasUser == 10) {
			System.out.println("此账号不存在!!");
		} else {
			System.out.println("请输入转账金额:");
			double transMoney = scanner.nextDouble();
			if (transMoney > moneys[userIndex]) {
				System.out.println("转账失败!!");
				System.out.println("失败原因:转账金额大于余额,您的余额为:" + moneys[userIndex]);
			} else {
				transCard += transMoney;
				moneys[userIndex] -= transMoney;
				System.out.println("成功向:" + userNames[transIndex] + "转账:" + transMoney);
				System.out.println("您剩余金额为:" + moneys[userIndex]);
			}
		}
	}

}

主函数先创建Atm类对象再调用showMenu方法

	public static void main(String[] args) {
		String[] cardNos = new String[10]; /* 账号 */
		String[] passwords = new String[10];/* 密码 */
		String[] userNames = new String[10];/* 用户名 */
		double[] moneys = new double[10]; /* 余额 */
		Atm atm = new Atm();
		atm.showMenu(userNames, passwords, cardNos, moneys);
	}

以下为程序运行过程测试:



|psp2.1 |任务内容 |计划完成需要的时间(min) |实际完成需要的时间(min)|
| ---- | ---- | ---- | ---- | ---- |
|Planning |计划 |20 |25|
|Estimate |估计这个任务需要多少时间,并规划大致工作步骤 |36 |12 |
|Development |开发 |360 |420|
|Analysis |需求分析(包括学习新技术) |50 |60|
|Design Spec |生成设计文档 |50 |50|
|Design Review |设计复审 |20 |30 |
|Coding Standard |代码规范 |10 |20|
|Design |具体设计 |20 |40 |
|Coding |具体编码 |240|300|
|Code Review |代码复审 |20 |20 |
|Test |测试(自我测试,修改代码,提交修改) |30 |120|
|Reporting |报告 |20|150|
|Test Report |测试报告 |20 |30|
|Size Measurement |计算工作量 |10 |12|
|Postmortem & Process Improvement Plan |事后总结,并提出过程改进计划 |10 |15|

posted @ 2020-11-14 22:46  yhj143  阅读(346)  评论(0编辑  收藏  举报