软件设计掌握软件内部结构至关重要,初次接触编程的我们可以从代码中学习软件内部结构,本次对该程序的学习充分理解到软件工程中系统分析的重要性。
下面是对最近学习的无界面虚拟ATM机的一些学习:
1. 代码认识
代码如下:
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类
虽然只用到两个类,但类中的结构设计确实是一门学问,只有在大量的生活经历或是经过详细调查,分析,抽象才能将方法设计的足够全面。
2. 结构分析:
这个简单的程序两个类实现用户存钱,取钱,简单查询功能,其结构分析如下:
account类需要从纵向的角度考虑其数据成员,一个账户包括账号,密码,余额基本信息。对账户的操作只要获得用户名即可,修改只能通过银行窗口;密码操作涉及的就是密码修改,但是改程序中未能体现该功能;余额要涉及的是存钱,取钱,后的更新以及获取。
Atm类从操作流程上理解,进入银行,插上银行卡,进行的第一步操作就是输入自己的账户与密码(该程序中所有的操作流程通过start()方法执行,清晰度明显增强,这样主函数中如果再添加其他操作也不会显得很乱),这时Atm机要查询自己数据库中的信息进行核对检查,查询正确后才能进行具体操作;然后就是具体操作,像查询,改密,取款,存款等操作。
3.总结:
正确的软件开发过程应是先进行软件结构设计,然后代码编写,处于初级阶段的我们多操作一些实例,相信一定可以建立一种结构化设计模型的思维,然后逐渐走向正规化软件设计过程。