软件设计掌握软件内部结构至关重要,初次接触编程的我们可以从代码中学习软件内部结构,本次对该程序的学习充分理解到软件工程中系统分析的重要性。
下面是对最近学习的无界面虚拟ATM机的一些学习:
代码如下:
Atm类
<span style="font-size:18px;">import java.util.*; //引用数据类 public class Atm { Scanner sc =new Scanner(System.in); //设置可以输入项sc--scanner缩写。 Vector<Account> v =new Vector<Account>(); // <Account>将容器范围限定为只能放Account类 Account current; //ATM类中定义使用的account对象 public Atm( ){ //构造函数---数组容器V存储4个用户 v.add(new Account("a","1",100)); v.add(new Account("b","2",100)); v.add(new Account("c","3",100)); v.add(new Account("d","4",100)); } public boolean check(String account,String pw){ //循环检查用户与密码是否对应 int i; Account a; //对象a只在该方法中作用,用于调用Account类check方法 for(i =0;i <v.size();i++){ a =v.get(i); if(a.check(account,pw)){ current =a; //输入的账户赋值给current return true; } } current =null; return false; } public void inputNoPassword(){ //输入用户账户与密码 String account,pw; boolean b; do{ System.out.print("Please enter account:"); account =sc.next(); System.out.print("Please enter password:"); pw =sc.next(); b =check(account,pw); //检查结果付给b if(b ==false) System.out.println("Your No or password error! Please try again."); }while(b ==false); //循环输入直到正确为止 } public void operate(){ //功能操作部分(前面加数字建立索引) int i; do{ System.out.println("please choose:"); //选择功能 System.out.println("1:Get out money;");//取钱 System.out.println("2:Put into money;");//存钱 System.out.println("3:search");//检查 System.out.println("4:quit"); //退出 try{ i =sc.nextInt(); if(i ==1) getMoney(); else if(i ==2) putMoney(); else if(i ==3) search(); else if(i ==4) break;//输入数字4时程序退出 else System.out.println("Your choose error,please try again!"); }catch(InputMismatchException e){ //错误处理机制,输入的项目不为数字时避免程序报错使用 System.out.println("Your input error!\nPlease choose1-4:"); sc.nextLine(); } }while(true); //循环输入操作执行 } private void getMoney(){ int i,num; System.out.print("Please enter number : "); i =sc.nextInt(); //输入取出金额 num =current.getMoney(i);//调用account类中的getmoney()方法 System.out.println("You have got out:"+num); } private void putMoney(){ int i,num; System.out.print("Please enter number : "); i =sc.nextInt(); num =current.putMoney(i); System.out.println("You have put into: "+num); } private void search(){ //查询操作 int num; num =current.getBalance(); System.out.println("Your balance: "+num); } public void start(){ //程序的执行入口 do{ inputNoPassword(); operate(); System.out.print("Are you quit? y/n"); if(sc.next().equals("y")) break; }while(true); } public static void main(String[] args){ Atm atm =new Atm(); //atm对象生成,执行构造函数 atm.start(); }</span>Account类
虽然只用到两个类,但类中的结构设计确实是一门学问,只有在大量的生活经历或是经过详细调查,分析,抽象才能将方法设计的足够全面。
这个简单的程序两个类实现用户存钱,取钱,简单查询功能,其结构分析如下:
account类需要从纵向的角度考虑其数据成员,一个账户包括账号,密码,余额基本信息。对账户的操作只要获得用户名即可,修改只能通过银行窗口;密码操作涉及的就是密码修改,但是改程序中未能体现该功能;余额要涉及的是存钱,取钱,后的更新以及获取。
Atm类从操作流程上理解,进入银行,插上银行卡,进行的第一步操作就是输入自己的账户与密码(该程序中所有的操作流程通过start()方法执行,清晰度明显增强,这样主函数中如果再添加其他操作也不会显得很乱),这时Atm机要查询自己数据库中的信息进行核对检查,查询正确后才能进行具体操作;然后就是具体操作,像查询,改密,取款,存款等操作。
正确的软件开发过程应是先进行软件结构设计,然后代码编写,处于初级阶段的我们多操作一些实例,相信一定可以建立一种结构化设计模型的思维,然后逐渐走向正规化软件设计过程。