zoukankan      html  css  js  c++  java
  • JAVA测试编程

      本周我们上JAVA课的时候进行了一次测试,本次测试以模拟中国工商银行自助机ATM的功能为大致要求,要求我们进行编写调试,以求达到试题要求。

      测试要求我们能模拟ATM的功能设计,当用户插卡后显示,输入密码界面,用户输入正确密码(用户输入错误密码,则提示该卡已被锁定,无法操作),则弹出选择界面:存款、取款、转账汇款、修改密码、查询余额。accountinformation.txt和accountlist.txt数据库中的信息进行读写操作时,必须调用get()和set()方法。

      

    程序开始运行模拟用户插卡显示用户输入账号功能,

    1.用户在该界面输入账号信息,如果输入账号位数有误,提示“该卡不是工行卡”,如果输入账号信息在accountinformation.txt不存在,则提示“该账号不存在”,账号输入不成功,系统提示错误信息后返回输入账号界面;输入账号成功后,系统跳转到输入密码界面。

    2.用户在该界面输入账号密码信息,如果密码录入错误(出现位数不对或与文件中该账号对应的密码不服),则提示“密码录入错误”,如果密码录入三次错误,则提示“该账号三次录入密码错误,该卡已被系统没收,请与工行及时联系处理”。单次密码输入不成功,系统提示错误信息,返回输入密码界面;三次密码输入不成功,系统提示错误信息,返回输入账号界面,密码输入成功,系统跳转到主界面。

    3.用户在该界面输入存款金额后,如果输入不是正整数,提示用户“输入金额有误,返回取款界面;输入字母“q”,则返回系统输入账号界面,表示退出柜员机操作;输入正整数,则跳转到下图存款成功界面。

    4.存款成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户余额。

    取款功能:

    则显示100元、500元、1000元、1500元、2000元、5000元、其他金额、退卡、返回操作供用户选择。

    转账汇款功能。

    1.用户在该界面输入判断该账户是否存在accountinformation.txt文件中,如果没有提示“该账户不存在”,如果有则跳转到转账金额界面。

    2.判断账户余额是否不小于录入金额,如果小于,则提示“账户余额不足”,如果大于,则跳转到下图转账确认成功界面。

    3.单击“N”表示不确认转账,系统跳转到系统主界面;单击“Y”表示确认转账,系统跳转到转账成果界面,。

    4.转账汇款成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户余额。

    修改密码功能:

    1. 系统进入修改密码界面:

    2.当前密码录入错误,提示“当前密码录入错误”,系统返回修改密码界 面,清空数据重新录入;修改后密码与确认密码不一致,提示“修改密码与确认密码不一致”,系统返回修改密码界面,清空数据重新录入。

    3. 密码修改成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户密码。

    查询功能:

    1.系统显示当前用户余额和操作流水信息:

    2.点击“q”键,退回系统录入账号界面。

    该程序源代码为:

    //Account.java

    //梁汉丞 信1705-3 20173643

    package account1;

    public class Account {
    private String accountID;
    private String accountname;
    private String operatedate;
    private int operatetype;
    private int accountpassword;
    private int accountbalance;
    private int amount;
    public String getAccountID() {
    return accountID;
    }
    public void setAccountID(String accountID) {
    this.accountID = accountID;
    }
    public String getAccountname() {
    return accountname;
    }
    public void setAccountname(String accountname) {
    this.accountname = accountname;
    }
    public String getOperatedate() {
    return operatedate;
    }
    public void setOperatedate(String operatedate) {
    this.operatedate = operatedate;
    }
    public int getOperatetype() {
    return operatetype;
    }
    public void setOperatetype(int operatetype) {
    this.operatetype = operatetype;
    }
    public int getAccountpassword() {
    return accountpassword;
    }
    public void setAccountpassword(int accountpassword) {
    this.accountpassword = accountpassword;
    }
    public int getAccountbalance() {
    return accountbalance;
    }
    public void setAccountbalance(int accountbalance) {
    this.accountbalance = accountbalance;
    }
    public int getAmount() {
    return amount;
    }
    public void setAmount(int amount) {
    this.amount = amount;
    }
    public void set(String id,String name,int password,int yuer)
    {
    accountID=id;
    accountname=name;
    accountpassword=password;
    accountbalance=yuer;
    }
    public void set_1(String data,int liushui)
    {
    operatedate=data;

    amount=liushui;
    }

    }

    //AccountManage.java

    //梁汉丞 信1705-3 20173643

    package account1;

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.text.SimpleDateFormat;
    import java.util.Iterator;
    import java.util.Scanner;
    import java.util.Vector;
    import java.util.*;

    //梁汉丞 20173643 信1705-3
    public class AccountManager {
    private static/*静态*/ Scanner/*输入*/can=new Scanner(System.in);
    private Vector<Account> map=new Vector/*矢量*/<Account>();
    private Iterator<Account> it;
    private String cnum;//定义cnum,go,index,an变量
    private int go;
    private int index;
    private int an;
    private Account me=new Account();

    public static void main(String[] args) { //String args[]的意思是用于接收用户输入的参数,如果程序中需要用户输入参数,那么这些参数就保存在数据args中.
    AccountManager a=new AccountManager();
    try {
    a.daoru_1();
    a.daoru_2();
    } catch (IOException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    }

    a.start();

    }
    public void start()//线程开启的方法
    {
    go=3;//3次的输入机会
    index=0;
    an=0;
    System.out.println("***************************************************************");//输出第一个用户界面
    System.out.println(" 欢迎使用中国工商银行自动柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 请输入您的账号:");
    if(can.hasNext())
    {
    cnum=can.next();
    }
    if(cnum.length()==8)//如果输入的账号长度为8,则执行如下操作
    {
    // TODO 自动生成的方法存根


    if(isfind(cnum))//如果在信息库里找到了相同账号,则跳转到下一界面
    {
    index=lookp(cnum)-1;
    showpass();
    }
    else//否则输出"没有找到相关账户信息,请重新输入"
    {
    System.out.println(" 没有找到相关账户信息,请重新输入");
    start();
    }
    }
    else//如果账号长度不为8,则输出"输入的账户信息不是八位数,请重新输入"
    {
    System.out.println(" 输入的账户信息不是八位数,请重新输入");
    start();
    }


    }
    public void showpass()//声明showpass
    {
    System.out.println("***************************************************************");
    System.out.println(" 欢迎 "+me.getAccountname()+" 使用中国工商银行自助柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 请输入您的密码:");
    if(can.hasNext())
    {
    cnum=can.next();
    }
    if(cnum.length()==6)//如果输入的数字长度为6,则执行如下操作
    {
    if(Integer.parseInt(cnum)==me.getAccountpassword())//如果输入的密码正确,则跳转至下一界面
    {
    insystem();
    }
    else//否则执行如下操作
    {
    if(go>0)
    {
    go--;
    System.out.println(" 密码错误,请重新输入,还剩"+go+"次机会重新输入");
    showpass();

    }
    else//如果输入次数达到三次,则输出"密码错误输入次数过多,返回账号输入菜单"并且返回第一界面
    {
    System.out.println(" 密码错误输入次数过多,返回账号输入菜单");
    start();
    }
    }
    }
    else//输入的密码不是六位,输出"输入的密码信息不是六位数,请重新输入"
    {
    System.out.println(" 输入的密码信息不是六位数,请重新输入");
    showpass();
    }
    }
    public void insystem()
    {
    System.out.println("***************************************************************");
    System.out.println("***************************************************************");
    System.out.println(" 欢迎 "+me.getAccountname()+" 使用中国工商银行自助柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 1.存款");
    System.out.println(" 2.取款");
    System.out.println(" 3.转账汇款");
    System.out.println(" 4.修改密码");
    System.out.println(" 5.查询余额");
    int type=0;//声明type为0
    if(can.hasNextInt())
    {
    type=can.nextInt();
    }
    func(type);//传递函数体的规则

    }
    public void func(int type)
    {
    if(type==1)//输入1为存款
    {
    cunkuan();
    }
    else if(type==2)//输入2为取款
    {
    qukuan();
    }
    else if(type==3)//输入3为转账
    {
    zhuanzhang();

    }
    else if(type==4)//输入4为修改密码
    {
    xiugai();
    }
    else if(type==5)//输入5为查询
    {
    chaxun();
    }
    }
    public void zhuanzhang()//声明转账
    {
    System.out.println("***************************************************************");
    System.out.println(" 欢迎 "+me.getAccountname()+" 使用中国工商银行自助柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 请输入你要转账的账号:");
    String type=null;
    if(can.hasNext())
    {
    type=can.next();
    }
    if((an=lookp(type)-1)!=0)//
    {
    jine();
    }
    }
    public void jine()//声明金额
    {
    int c=0;
    System.out.println(" 请输入你要转账的金额:");
    if(can.hasNextInt())
    {
    c=can.nextInt();
    }
    if(me.getAccountbalance()>=c)
    {
    Account ss=new Account();
    me.setAccountbalance(me.getAccountbalance()-c);
    me.setAmount(me.getAmount()-c);
    ss=me;
    map.get(an).setAccountbalance(map.get(an).getAccountbalance()+c);
    map.get(an).setAmount(map.get(an).getAmount()+c);
    map.setElementAt(ss, index);
    try {
    daochu_2();
    daochu_1();
    } catch (IOException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    }
    System.out.println("***************************************************************");
    System.out.println(" 欢迎 "+me.getAccountname()+" 使用中国工商银行自助柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 当前账户转账成功");
    System.out.println(" 当前账户余额为:"+me.getAccountbalance());
    System.out.println("***************************************************************");
    insystem();
    }
    else
    {
    System.out.println("金额不够,不能转");
    zhuanzhang();
    }
    }



    public void xiugai()
    {
    System.out.println("***************************************************************");
    System.out.println(" 欢迎 "+me.getAccountname()+" 使用中国工商银行自助柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 请输入你原来的密码:");
    int type=0,g_old=0,g_new=0;
    if(can.hasNextInt())
    {
    type=can.nextInt();
    }
    if(type==me.getAccountpassword())
    {
    System.out.println(" 请输入你要修改的密码:");
    if(can.hasNextInt())
    {
    g_old=can.nextInt();

    }
    if(!(g_old>=100000&&g_old<=999999))
    {
    System.out.println(" 密码输入格式错误,请重新输入");
    xiugai();
    return;
    }
    System.out.println(" 请再次你输入你要修改的密码:");
    if(can.hasNextInt())
    {
    g_new=can.nextInt();
    }
    if(g_new==g_old)
    {
    Account ss=new Account();
    me.setAccountpassword(g_old);
    ss=me;
    map.setElementAt(ss, index);
    try {
    daochu_2();
    daochu_1();
    } catch (IOException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    }
    System.out.println(" 密码修改成功");
    insystem();
    }
    }
    }
    public void chaxun()//声明查询
    {
    System.out.println("***************************************************************");
    System.out.println(" 欢迎 "+me.getAccountname()+" 使用中国工商银行自助柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 当前账户余额为:"+me.getAccountbalance());
    System.out.println("***************************************************************");
    insystem();
    }
    public void qukuan()//声明取款
    {
    System.out.println("***************************************************************");
    System.out.println(" 欢迎 "+me.getAccountname()+" 使用中国工商银行自助柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 当前账户每日可以支取2万元。");
    System.out.println(" 1.100元");
    System.out.println(" 2.500元");
    System.out.println(" 3.1000元");
    System.out.println(" 4.1500元");
    System.out.println(" 5.2000元");
    System.out.println(" 6.5000元");
    System.out.println(" 7.其他金额");
    System.out.println(" 8.退卡");
    System.out.println(" 9.返回");
    int type=0;
    if(can.hasNextInt())
    {
    type=can.nextInt();
    }
    cunkuani(type);

    }
    public void cunkuani(int type)//声明存款
    {
    boolean g_test=false;
    Account ss=new Account();
    if(type==1)//输入1
    {

    if(me.getAccountbalance()>=100)
    {
    g_test=true;
    me.setAccountbalance(me.getAccountbalance()-100);
    me.setAmount(me.getAmount()-100);
    ss=me;
    map.setElementAt(ss, index);
    }
    }
    else if(type==2)//输入2
    {
    if(me.getAccountbalance()>=500)
    {
    g_test=true;
    me.setAccountbalance(me.getAccountbalance()-500);
    me.setAmount(me.getAmount()-500);
    ss=me;
    map.setElementAt(ss, index);
    }
    }
    else if(type==3)//输入3
    {
    if(me.getAccountbalance()>=1000)
    {
    g_test=true;
    me.setAccountbalance(me.getAccountbalance()-1000);
    me.setAmount(me.getAmount()-1000);
    ss=me;
    map.setElementAt(ss, index);
    }
    }
    else if(type==4)//输入4
    {
    if(me.getAccountbalance()>=1500)
    {
    g_test=true;
    me.setAccountbalance(me.getAccountbalance()-1500);
    me.setAmount(me.getAmount()-1500);
    ss=me;
    map.setElementAt(ss, index);
    }
    }
    else if(type==5)//输入5
    {
    if(me.getAccountbalance()>=2000)
    {
    g_test=true;
    me.setAccountbalance(me.getAccountbalance()-2000);
    me.setAmount(me.getAmount()-2000);
    ss=me;
    map.setElementAt(ss, index);
    }
    }
    else if(type==6)//输入6
    {
    if(me.getAccountbalance()>=5000)
    {
    g_test=true;
    me.setAccountbalance(me.getAccountbalance()-5000);
    me.setAmount(me.getAmount()-5000);
    ss=me;
    map.setElementAt(ss, index);
    }
    }
    else if(type==7)//输入7
    {
    int num=0;
    if(can.hasNextInt())
    {
    type=can.nextInt();
    }
    if(me.getAccountbalance()>=num)
    {
    g_test=true;
    me.setAccountbalance(me.getAccountbalance()-num);
    me.setAmount(me.getAmount()-num);
    ss=me;
    map.setElementAt(ss, index);
    }
    }
    else if(type==8)//输入8
    {
    System.out.println(" 8.退卡成功");
    start();
    return;
    }
    else if(type==9)//输入9
    {
    insystem();
    return;
    }
    if(g_test)
    {

    System.out.println("***************************************************************");
    System.out.println(" 欢迎 "+me.getAccountname()+" 使用中国工商银行自助柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 当前账户取款成功");
    System.out.println(" 当前账户余额为:"+me.getAccountbalance());
    System.out.println("***************************************************************");
    insystem();
    }
    }
    public void cunkuan()//声明存款
    {
    System.out.println("***************************************************************");
    System.out.println(" 欢迎 "+me.getAccountname()+" 使用中国工商银行自助柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 请输入存款金额:");
    int num=0;
    if(can.hasNextInt())
    {
    num=can.nextInt();
    }
    else
    {
    if(can.hasNext())
    {
    cnum=can.next();
    if(cnum.equals("q"))//实现输入q的时候返回第一界面
    {
    System.out.println("已经退出系统,返回账号界面");
    }
    else
    {
    System.out.println("输入错误,请重新输入");//
    cunkuan();
    }
    }

    }
    if(num>0)
    {
    Account ss=new Account();
    me.setAccountbalance(me.getAccountbalance()+num);
    me.setAmount(me.getAmount()+num);
    ss=me;
    map.setElementAt(ss, index);
    try {
    daochu_2();
    daochu_1();
    } catch (IOException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    }
    }
    else
    {
    System.out.println("输入错误,请重新输入");
    cunkuan();
    }
    qukuanchenggong();
    insystem();

    }
    void qukuanchenggong()
    {
    System.out.println("***************************************************************");
    System.out.println(" 欢迎 "+me.getAccountname()+" 使用中国工商银行自助柜员系统");
    System.out.println("***************************************************************");
    System.out.println(" 当前账户存款成功");
    System.out.println(" 当前账户余额为:"+me.getAccountbalance());
    System.out.println("***************************************************************");
    }
    public void daoru_1() throws IOException//声明导入1
    {

    File a=new File("accountinformation.txt");
    FileInputStream b = new FileInputStream(a);
    map.clear();
    InputStreamReader c=new InputStreamReader(b,"UTF-8");
    {
    BufferedReader bufr =new BufferedReader(c);
    String line = null;
    while((line = bufr.readLine())!=null){
    Account st=new Account();
    String ook[]=line.toUpperCase().split(" ");
    st.set(ook[0],ook[1], Integer.parseInt(ook[2]),Integer.parseInt(ook[3]));
    map.add(st);
    me=st;


    }
    bufr.close();
    //System.out.println(sb.toString());

    }
    c.close();
    b.close();
    }
    public void daoru_2() throws IOException//声明导入2
    {

    File a=new File("accountlist.txt");
    FileInputStream b = new FileInputStream(a);
    InputStreamReader c=new InputStreamReader(b,"UTF-8");
    {
    BufferedReader bufr =new BufferedReader(c);
    String line = null;
    int i=0;
    //map.clear();
    while((line = bufr.readLine())!=null){
    Account st=new Account();
    String ook[]=line.toUpperCase().split(" ");
    st.set(map.get(i).getAccountID(),map.get(i).getAccountname(),map.get(i).getAccountpassword(),map.get(i).getAccountbalance());
    st.set_1(ook[0],Integer.parseInt(ook[1]));
    String temp_str="";
    Date dt = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    temp_str=sdf.format(dt);

    if(!temp_str.equals(ook[0]))
    {
    st.setAmount(0);
    st.setOperatedate(temp_str);
    //index=i;
    }
    me=st;
    map.setElementAt(st, i);
    i++;
    }
    bufr.close();
    //System.out.println(sb.toString());

    }
    c.close();
    b.close();
    }
    public void daochu_1() throws IOException//声明导出1
    {
    Account st=new Account();
    File a=new File("accountinformation.txt");
    FileOutputStream b = new FileOutputStream(a);
    OutputStreamWriter c=new OutputStreamWriter(b,"UTF-8");
    it=map.iterator();
    int i=0;
    while(it.hasNext())
    {
    i++;
    if(i!=1)
    c.append(" ");
    st=it.next();
    c.append(st.getAccountID()+" "+st.getAccountname()+" "+st.getAccountpassword()+" "+st.getAccountbalance());

    }
    c.close();
    b.close();


    }
    public void daochu_2() throws IOException//声明导出2
    {
    Account st=new Account();
    File a=new File("accountlist.txt");
    FileOutputStream b = new FileOutputStream(a);
    OutputStreamWriter c=new OutputStreamWriter(b,"UTF-8");
    it=map.iterator();
    int i=0;
    while(it.hasNext())
    {
    i++;
    if(i!=1)
    c.append(" ");


    st=it.next();
    c.append(st.getOperatedate()+" "+st.getAmount());

    }
    c.close();
    b.close();


    }
    //-----------------------------
    public int lookp(String xuehao)
    {
    Account st=new Account();
    int i=0;
    it=map.iterator();
    while(it.hasNext())
    {
    i++;
    st=it.next();
    if(st.getAccountID().equals(xuehao))
    break;
    }
    return i;
    }
    public boolean isfind(String xuehao)
    {
    Account st=new Account();
    it=map.iterator();
    boolean ok=false;
    while(it.hasNext())
    {
    st=it.next();
    if(st.getAccountID().equals(xuehao))
    {
    me=st;
    ok=true;
    break;
    }
    }
    return ok;
    }

    }

    我们在调试这个程序之前需要创建accountinformation.txt和accountlist.txt两个文件,文件里保存用户信息。

    截图如下:

    以上是我的制作过程,经过这次测验,让我感受颇深。

  • 相关阅读:
    深入 聚集索引与非聚集索引(一)
    mysql 忘记root密码(linux ok, windows 没试)
    (转)关于中国的互联网
    log4j:启动tomcat发现 log4j:WARN No appenders could be found for logger 解决办法 转载
    log4j
    书签
    高级数据模型
    silverlight第三方控件
    实体框架资源
    RIASilverlight 程序开发框架3
  • 原文地址:https://www.cnblogs.com/990906lhc/p/9692803.html
Copyright © 2011-2022 走看看