实例讲解
一. 系统登录
在各个应用系统中,都会看到用户登录的界面,下面就模拟一个系统用户登录的程序。为了方便理解,就将程序中的用户名和密码分别设置为:Java和java。程序采用初始化参数的方式输入用户名和密码。
程序分析:
既然使用初始化参数的方式输入用户名和密码,所以在程序运行之前首先必须判断输入的参数是否合法,如果不合法们则必须提示用户的程序执行错误,并退出程序。如果用户已经正确地输入了参数,则可以进行用户名及密码的验证。
实现一:基本功能实现
public class LoginDemo01 {
public static void main(String args[]) {
if(args.length!=2){
System.out.println("输入的参数不正确,系统推出");
System.out.println("格式:java LoginDemo01 用户名 密码");
System.exit(1);
}
String name=args[0];
String password=args[1];
if (name.equals("Java")&&password.equals("java")) {
System.out.println("欢迎"+name+"光临!");
} else {
System.out.println("错误的用户名或密码!");
}
}
}
程序运行结果(在cmd中输入参数):
(1) 参数格式错误:
输入的参数不正确,系统推出
格式:java LoginDemo01 用户名 密码
(2) 输入的用户名或者密码错误:
错误的用户名或密码!
(3) 输入正确的用户名及密码:
欢迎Java光临!
以上程序完成了基本的功能,但是读者现在思考一下,本程序并不能算是一个好程序,程序在主方法中编写了大量的代码,而主方法就好比是一个客户端,现在要求客户端自己比较、自己输出显然不合理,最简单的做法就是客户端只要得到最终的判断结果即可,至于中间是如何判断的,它根本就没有必要去关心,就好比进楼门要刷卡一样,用户只关心的是返回刷卡成功还是刷卡失败的信息。而不是关心里面是如何判断验证的。所以此处最好的做法是,单独做一些类,并使用这些类封装具体的判断过程。
修改后的代码:
class Check{
public boolean validate(String name,String password){
if (name.equals("Java")&&password.equals("java")) {
return true;
} else {
return false;
}
}
};
class Operate{
private String info[];
public Operate(String info[]){
this.info=info;
}
public String login(){
Check check=new Check();
this.isExit();
String name=this.info[0];
String password=this.info[1];
String str=null;
if (check.validate(name, password)) {
str="欢迎"+name+"光临!";
} else {
str="用户名或密码错误!";
}
return str;
}
public void isExit(){
if (this.info.length!=2) {
System.out.println("输入的参数不正确!系统退出!");
System.out.println("格式:java LoginDemo02 用户名 密码");
System.exit(1);
}
}
};
public class loginDemo02 {
public static void main(String args[]) {
Operate oper=new Operate(args);
System.out.println(oper.login());
}
}
程序的运行结果与之前相似。从本程序中可以发现:
*(1) 主方法处代码较少,因为是客户端,所以要方便客户使用;
(2) Check类的主要功能就是验证操作,只需要传入用户名和密码即可完成验证;
(3) Operate类的主要功能就是封装Check类的操作,并把Check的信息返回给调用处。*