文章目录

  • 前言
  • 一、任务介绍
    • 1.任务描述
    • 2.运行结果
    • 3.任务目标
    • 4.实现思路
  • 二、程序实现
    • 1.代码
    • 2.实验结果(包括输入数据和输出结果)
  • 总结

前言

记录学习中写的Java实验,我这里用的二维数组写的,一维的写法写了没保存直接改成二维写了…好吧我就是想看看二维是不是多好写


提示:以下是本篇文章正文内容,下面案例可供参考

一、任务介绍

1.任务描述

银行存取款的流程是人们非常熟悉的事情,用户可在银行对自己的资金账户进行存款、取款、查询余额等操作,极大的便利了人民群众对资金的管理。
本任务要求,使用所学知识编写一个银行存取款程序,实现存取款和查询余额功能。编写一个帐户类实现银行帐户的概念,创建帐户类的对象ba,假设ba的账号为:123456,初始的存款余额为500元。首先向该账户存入1000元,再取出800元,在每次存取之后,都会有最新的余额显示。

2.运行结果

Java实验2【银行存取款程序设计实验】-编程之家

3.任务目标

 学会分析“银行存取款”程序任务实现的逻辑思路。
 能够独立完成“银行存取款”程序的源代码编写、运行及编译。
 理解Java语言是如何体现面向对象编程基本思想的。
 掌握类的声明以及对象的创建。
 了解类的成员变量和成员方法的特性以及类的构造方法的使用。

4.实现思路

【任务分析】
(1)通过任务描述可知,需要定义一个银行帐户类BankAccount实现银行帐户的概念。
(2)账户的属性包括账号和存款余额,所以还需要在BankAccount类中定义两个变量:“帐号” (account_number) 和“存款余额”(leftmoney)。
(3)对账户的操作包括存款、取款、查询余额,所以再定义四个方法:“存款”(savemoney)、“取款”(getmoney) 、“查询余额”(getleftmoney)以及构造方法(BankAccount)。
(4)最后,编写测试类,在main()方法中创建一个BankAccount类的对象ba,假设ba的账号为:123456,初始的存款余额为500元。首先向该账户存入1000元,再第一次取出800元,第2次取出1000元。
【任务拓展】选做,这里我写了
1、在完成前面基础任务的前提下,考虑为BankAccount类添加透支额度creditLine,在取款时需要判定当前取款数是否超过透支额度,并测试效果。
2、为BankAccount类设置一个静态变量count用于统计生成的账户总数,再设置一个静态变量totalBanlance用于统计所有账户的总存款额,并测试效果。
3、为BankAccount类设置一个非静态成员变量passWord,在对当前账户进行取款和查询时都要求先正确输入当前账户的密码,否则无法进行取款和查询操作。(可考虑允许用户有三次输入密码的机会。)
4、为BankAccount类设置一个静态账户数组accountArray,用于存储所有账户对象,请注意每个账户对象的账号具有唯一性,并实现转账功能测试其效果。

二、程序实现

1.代码

import java.util.Scanner;public class BankAccount {private String account_number; //账号:123456 private String passWord; //密码:123456 private double leftmoney; //存款余额private double creditLine; //透支额度static int count=0; //账户总数static double totalBanlance; //账户的总存款额static String[][] accountArray = new String[5][4];//存储所有账户对象private static int index = 0;static int shuju = -1;//查看账户的总存款额public static void TotalBanlance(){int i,p;for(i=0;i<accountArray.length&&accountArray[i][0]!=null;i++){p =  Integer.parseInt(accountArray[i][2]);totalBanlance=totalBanlance+p;}System.out.println("账户总存款余额为:"+totalBanlance);}//为当前账户存款public static void savemoney(double money) {  int i =  Integer.parseInt(accountArray[shuju][2]);//本账号余额i+=money;accountArray[shuju][2]=String.valueOf(i);}//从当前账户取款public static void getmoney (double money){  int i =  Integer.parseInt(accountArray[shuju][2]);//本账号余额int k =  Integer.parseInt(accountArray[shuju][3]);//本账号透支额度if(i>money){i-=money;accountArray[shuju][2]=String.valueOf(i);System.out.println("您已取出" + money + "元,目前余额为:" + i);}else if(i<money&&i+k>money){System.out.println("您账户余额不足,将为您使用透支额度支付");System.out.println("您的透支额度还有:"+k);i-=money;k+=i;accountArray[shuju][2]=String.valueOf(i);accountArray[shuju][3]=String.valueOf(k);System.out.println("您已取出" +money + "元,目前余额为:" + i+"目前透支额度为"+k);}else{System.out.println("您的透支额度还有:"+k);System.out.println("您账户余额、透支额度不足,取款失败");}}//从当前账户转账public static void transfermoney (){  String zhuanzhang=new String();//存转账的账号Scanner sc = new Scanner(System.in);System.out.println("您的账户目前余额为:" +accountArray[shuju][2]);System.out.println("请输入您要转入的账号:");zhuanzhang=sc.next();index=-1;for (int a=0;a<accountArray.length;a++){  if (zhuanzhang.equals(accountArray[a][0])){  index = a;  }}if (index == -1){  System.out.println("该用户不存在!请核对后再操作!");  }else {while(true){ System.out.println("请输入您要转入的金额:");double money = sc.nextInt();int i =  Integer.parseInt(accountArray[shuju][2]);//本账号余额int k =  Integer.parseInt(accountArray[shuju][3]);//本账号透支额度int j =  Integer.parseInt(accountArray[index][2]); //转账账号余额if(i>money){i-=money;j+=money;accountArray[shuju][2]=String.valueOf(i); accountArray[index][2]=String.valueOf(j);System.out.println("您已转出" + money + "元,目前余额为:" +accountArray[shuju][2]);break;	}else if(i<money&&i+k>money){System.out.println("您账户余额不足,将为您使用透支额度进行转账");System.out.println("您的透支额度还有:"+k+"元");i-=money;k+=i;j+=money;accountArray[shuju][2]=String.valueOf(i); accountArray[index][2]=String.valueOf(j);accountArray[shuju][3]=String.valueOf(k);System.out.println("您已转出" +money + "元,目前余额为:" +i+"元,"+"目前透支额度为"+k+"元");break;}else{System.out.println("您的透支额度还有:"+k+"元");System.out.println("您账户余额、透支额度不足,转账失败");break;}}}}//实现注册功能public static void registe(){if (count >= accountArray.length) {System.out.println("用户已满,无法进行注册");return;}Scanner sc = new Scanner(System.in);System.out.println("请输入您的账号:");String account_number = sc.nextLine();System.out.println("请输入您的密码:");String passWord = sc.nextLine();accountArray[count][0]=String.valueOf(account_number);accountArray[count][1]=String.valueOf(passWord);accountArray[count][2]=String.valueOf(500);accountArray[count][3]=String.valueOf(5000);count++;System.out.println("注册成功");}//实现用密码账号登录public static int login (){  int x;Scanner sc = new Scanner(System.in);System.out.println("请输入您的账号:");	String i=sc.next();System.out.println("请输入您的密码:");String j=sc.next();for (x = 0; x < accountArray.length; x++) {if (i.equals(accountArray[x][0]) && j.equals(accountArray[x][1])){System.out.println("登录成功");break;								}else {x=-1;System.out.println("用户名或密码错误!");break;	}}return x;	}//敏感功能确认密码public static void logining (){String k;int times=3;Scanner sc = new Scanner(System.in);while(times>=0){System.out.println("请输入您的密码进行确认:");k=sc.next();if(k.equals(accountArray[shuju][1])){k="0";times=3;break;}else {times-=1;System.out.println("密码输入错误,您还有"+times+"次输入次数");if(times==0){System.out.println("密码连续输入错误三次,即将为您退出系统");System.out.println("按除回车外任意键确认退出");sc.next();System.exit(0);}continue;}}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int select=0;System.out.println("--------你好!欢迎光临西又银行--------");while (true) {System.out.println("1.注册");System.out.println("2.登录");System.out.println("3.查看总账户数量");System.out.println("4.查看所有账户的总存款");System.out.println("5.退出");select = sc.nextInt();switch (select) {case 1:registe();break;case 2:String choose = "Y";shuju=login();if(shuju!=-1){while (choose.equals("Y")||choose.equals("y")){System.out.println("--------欢迎来到业务大厅--------");System.out.println("--------请选择您要办理的业务--------");System.out.println("1.查询当前账户余额");System.out.println("2.为当前账户存款");System.out.println("3.从当前账户取款");System.out.println("4.从当前账户转账");int  id=sc.nextInt( );switch(id){case 1:logining ();//密码保护System.out.println("目前您的账户余额为:" + accountArray[shuju][2]);break;case 2:while (choose.equals("Y")||choose.equals("y")){System.out.println("请输入您要存入的金额:");double cmoney = sc.nextInt();savemoney(cmoney);System.out.println("您已存入" + cmoney + "元,目前余额为:" + accountArray[shuju][2]);System.out.println("是否继续进行存款(Y,继续 N,取消):");choose = sc.next();}break;case 3:logining ();//密码保护while (choose.equals("Y")||choose.equals("y")){System.out.println("您的账户目前余额为:" +accountArray[shuju][2]);System.out.println("请输入您要取出的金额:");double qmoney = sc.nextInt();getmoney(qmoney);System.out.println("是否继续进行取款(Y,继续 N,取消):");choose = sc.next();}	break;case 4:logining ();//密码保护transfermoney();break;}System.out.println("是否返回业务大厅(Y,返回业务大厅 N,返回主页面):");choose = sc.next();}}else{break;}break;case 3:System.out.println("总账户数量为:"+count);break;case 4:TotalBanlance();break;case 5:System.out.println("西又银行欢迎您的下次光临!");System.exit(0);default:break;}}}
}

2.实验结果(包括输入数据和输出结果)

Java实验2【银行存取款程序设计实验】-编程之家
Java实验2【银行存取款程序设计实验】-编程之家
Java实验2【银行存取款程序设计实验】-编程之家
Java实验2【银行存取款程序设计实验】-编程之家
Java实验2【银行存取款程序设计实验】-编程之家

总结

【在实验中遇到的主要问题及解决方法】

  1. 问题:引用方法时出现无法从静态上下文中引用非静态的提示
    解决:将被调用的方法设置成静态方法;

  2. 问题:if (accountArry[a][0].equals(zhuanzhang));在.前没有判断数组为空的可能,导致系统报错
    如果写为if (zhuanzhang.equals(accountArray[a][0])); 程序就能正确运行,是因为数组有空项并且代码中没有排除这个可能,因为"xxx".equals(null)在java中是合法的,所以不会报错
    解决方法:可以把不确定的数组放在后面,也可以在前面加上数组不为空的判断

  3. for(i=0;i<accountArray.length;i++){
    p = Integer.parseInt(accountArray[i][2]);
    totalBanlance=totalBanlance+p;
    }
    与上一个问题类似,因为数组没有每一项都赋值所以可能出现空指针的情况
    解决方法:for(i=0;i<accountArray.length&&accountArray[i][0]!=null;i++){
    p = Integer.parseInt(accountArray[i][2]);
    totalBanlance=totalBanlance+p;
    }
    加上对于数组为空的判断即可解决该问题,同样可以使用类似
    Book[] bookname = new Book[100];
    for(int i=0;i<100;i++)
    {
    bookname[i] = new Book();