赞
踩
(1)要求:通过用户输入,获取用户名和口令;与事先记录在程序中的用户信息进行对比,通过口令验证后登入系统。用户分为系统管理人员、档案录入人员,档案浏览人员三类,相关类图如下所示。
- abstract class User{//定义抽象类class private String name;
- private String password;
- private String role;//将访问权限设置为私有权限,体现了Java封装的特性
-
- User(String name,String password,String role){//定义构造方法,对name,password,role三个变量赋初值,注意构造方法无方法体
- this.name=name;
- this.password=password;
- this.role=role; //用this关键字代替User类的对象(因为还未创建对象)
- }
-
- public boolean changeSelfInfo(String password) {//定义修改用户密码的方法
- System.out.println("请输入新密码");
- Scanner sc=new Scanner(System.in);
- password=sc.next();
- if (Dateprocessing.update(name, password, role)){//update方法定义在另外一个类中
- this.password=password;
- System.out.println("修改成功");
- return true;
- }else
- return false;
- }
-
- public boolean downloadFile(String filename) throws IOException{//定义下载文件的方法
- System.out.println("下载文件... ...");
- return true;
- }
-
- public void showFileList(){
- System.out.println("列表... ...");
- }
-
- public abstract void showMenu();//将showMenu()方法定义为抽象方法,无方法体
-
- public void exitSystem(){//退出系统
- System.out.println("系统退出, 谢谢使用 ! ");
- System.exit(0);
- }
-
- public String getName() {//返回name
- return name;
- }
-
- public void setName(String name) {设置name值
- this.name = name;
- }
-
- public String getPassword() {//返回password
- return password;
- }
-
- public void setPassword(String password) {//定义password值
- this.password = password;
- }
-
- public String getRole() {//返回role值
- return role;
- }
-
- public void setRole(String role) {//设置role值
- this.role = role;
- }
-
-
- }
class Administrator extends User{//定义Administrator类
- Administrator(String name,String password,String role) {//定义构造方法
- super(name,password,role);}//super关键字用于对父类构造方法的调用
- public void showMenu() {//显示菜单
- System.out.println("******欢迎进入管理员菜单系统******\n"+ " 1.修改用户\n"
- +"2删除用户\n"
- +"3新增用户\n"
- +"4列出用户\n"
- +"5下载文件\n"
- +"6文件列表\n"
- +"7修改本人密码\n"
- +"8退出\n"+"*********");
- System.out.print("请选择菜单:"); }
- public void changeuser(String name,String password,String role) {//修改用户
- System.out.println("修改用户\n请输入用户名");
- Scanner Input2=new Scanner(System.in);
- name=Input2.next();
- System.out.println("请输入密码");
- password=Input2.next();
- System.out.println("请输入角色");
- role=Input2.next();
- Dateprocessing.update(name,password,role);//
- System.out.println("修改成功!");
- Input2.close();//关闭输入流}
- public void deluser(String name) {//删除用户
- System.out.println("删除用户\n请输入用户名");
- Scanner sc=new Scanner(System.in);
- name=sc.next();
- Dateprocessing.delete(name);//delete方法定义在public类中
- sc.close();//关闭输入流
- }
- public boolean downloadFile(String file) {//下载文件
- System.out.println("下载文件\n请输入档案号");
- Scanner scc=new Scanner(System.in);
- file=scc.next();
- System.out.println("下载文件。。。。\n下载成功!!!");
- scc.close();
- return true;
-
- }
-
- }
定义Operator类
- class Operator extends User{
- public Operator(String name,String password,String role) {//定义构造方法
- super(name,password,role);
- }
- public void showMenu() {
- System.out.println("****欢迎进入档案录入员菜单******\n"
- + " 1.上传文件 \n"+
- " 2.下载文件 \n"+
- " 3.文件列表 \n"+
- " 4.修改密码 \n"+
- " 5.退 出 \n"+
- "********************************");
- System.out.print("请选择菜单:");
- };
- public void uploadFile() {//上传文件
- System.out.println("上传文件\n请输入文件名:");
- Scanner input2=new Scanner(System.in);
- String file_0=input2.nextLine();
- System.out.println("请输入档案号:");
- String file_1=input2.nextLine();
- System.out.println("请输入档案描述:");
- String file_2=input2.nextLine();
- System.out.println("上传文件... ...\n上传成功!");
- input2.close();
- };
- public boolean downloadFile(String file) {//下载文件
- System.out.println("下载文件\n请输入档案号:");
- Scanner input2=new Scanner(System.in);
- file=input2.nextLine();
- System.out.println("下载文件... ...\n下载成功!");input2.close();
- return true;
-
- }
- public void adduser(String name,String password,String role) {//添加用户
- System.out.println("添加用户\n请输入用户名字");
- Scanner ssc=new Scanner(System.in);
- name=ssc.next();
- System.out.println("请输入密码");
- password=ssc.next();
- System.out.println("请输入角色");
- role=ssc.next();
- Dateprocessing.insert(name,password,role);ssc.close();//insert方法定义在public类中
- }
- //列出用户
- public void listUser() {//列出用户
- System.out.println("列出用户");
- Enumeration<User> e = Dateprocessing.users.elements();
-
- while(e.hasMoreElements())
- {User a=(User) e.nextElement();
- System.out.println("Name:"+a.getName()+" Password:"+
- a.getPassword()+" Role:"+
- a.getRole());
- }
- }
- }
定义Browser类
- class Browser extends User{
-
- public Browser (String name,String password,String role) {//定义 构造方法
- super(name,password,role);
- }
- public void showMenu() {
- System.out.println("****欢迎进入档案浏览员菜单******\n"
- + " 1.下载文件 \n"+
- " 2.文件列表 \n"+
- " 3.修改密码 \n"+
- " 4.退 出 \n"+
- "********************************");
- System.out.print("请选择菜单:");
- };
- public boolean downloadFile(String file) {//下载文件
- System.out.println("下载文件\n请输入档案号:");
- Scanner input2=new Scanner(System.in);
- file=input2.nextLine();
- System.out.println("下载文件... ...\n下载成功!");input2.close();return true;
- }
- }
按照上述方法,我们定义了一个超类User和三个子类Administrator,Operator,Browser,接下来需要定义一个public类来执行main进程,源代码如下:
- public class Dateprocessing {
-
-
- static Hashtable<String, User> users;//定义哈希表类,key项存放name,value项存放抽象类User,User类中存放了name,password,role等属性
- static {
- users = new Hashtable<String, User>();
- users.put("jack", new Operator("jack","123","operator"));
- users.put("rose", new Browser("rose","123","browser"));
- users.put("kate", new Administrator("kate","123","administrator"));
- }
- public static User search(String name, String password) //定义搜寻用户是否存在的方法
- {
- if (users.containsKey(name)) {
- User temp =users.get(name);
- if ((temp.getPassword()).equals(password))
- return temp;
- }
- return null;
- }
- public static Enumeration<User> getAllUser() {//列出用户
- Enumeration<User> e = users.elements();
- return e;
- }
- public static boolean update(String name, String password, String role) {更改用户的密码和角色
- User user;
- if (users.containsKey(name)) {
- if (role.equalsIgnoreCase("administrator"))
- user = new Administrator(name,password, role);
- else if (role.equalsIgnoreCase("operator"))
- user = new Operator(name,password, role);
- else
- user = new Browser(name,password, role);
- users.put(name, user);
- return true;
- }else
- return false;
- }
-
- public static boolean insert(String name, String password, String role) {//添加新用户
-
- User user;
- Scanner sc=new Scanner(System.in);
- System.out.println("请输入新增用户姓名");name=sc.next();
- System.out.println("请输入新增用户密码");password=sc.next();
- System.out.println("请输入新增用户角色");role=sc.next();
- if(!((role.equalsIgnoreCase("administrator"))||(role.equalsIgnoreCase("operator"))||(role.equalsIgnoreCase("browser")))){
- System.out.println("无此角色!");}
- if (users.containsKey(name))
- {System.out.println("该用户已存在!");sc.close();return false;}
- {
- if (role.equalsIgnoreCase("administrator"))
- user = new Administrator(name,password, role);
- else if (role.equalsIgnoreCase("operator"))
- user = new Operator(name,password, role);
- else
- user = new Browser(name,password, role);
- users.put(name, user);System.out.println("添加成功!");sc.close();
- return true;
- }
-
- }
-
- public static boolean delete(String name) {//删除用户
-
- if (users.containsKey(name)){
- users.remove(name);
- return true;
- }else
- return false;
-
- }
-
-
- }
-
- public static void main(String[] args) {//main方法
- // TODO Auto-generated method stub
- String name,password,role=null;
- String tip_system="档案系统";
- String tip_menu="请选择菜单";
- String tip_exit="退出系统,谢谢您的使用哦亲!!!";
- String info="*******欢迎使用"+tip_system+"******\n\t"+"1 登录\n\t"+"2 退出"+"******";
- System.out.println(info);
- System.out.println(tip_menu);
- Scanner Input1=new Scanner(System.in);
- int k=Input1.nextInt();
- if(k==1) {
- System.out.println("请输入用户姓名");
- name=Input1.next();
- System.out.println("请输入密码");password=Input1.next();
- if(!users.containsKey(name)) {System.out.println("不存在该用户哦亲!!!");System.exit(0);}
- if(!(users.get(name).getPassword().equals(password))) {System.out.println("密码错误!!!");System.exit(0);}
- switch(search(name,password).getRole()){
- case("administrator"):Administrator a=new Administrator(name,password,search(name,password).getRole());
- a.showMenu();int i=Input1.nextInt();
- switch(i) {
- case(1):a.changeuser(name,password,role );break;
- case(2):a.deluser(name);break;
- case(3):insert(name,password,role);break;
- case(4):getAllUser();break;
- case(5):a.downloadFile(name);break;
- case(6):a.showFileList();break;
- case(7):a.changeuser(name, password, role);break;
- case(8):a.exitSystem();break;
- } break;
- case("operator"):Operator o=new Operator(name,password,search(name,password).getRole());o.showMenu();int m=Input1.nextInt();
- switch(m) {
- case(1):o.uploadFile();break;
- case(2):o.downloadFile(name );break;
- case(3):o.showFileList();break;
- case(4):o.changeSelfInfo(password);break;
- case(5):o.exitSystem();break;
- }break;
- case("browser"):Browser b=new Browser(name,password,search(name,password).getRole());b.showMenu(); int n=Input1.nextInt();
- switch(n) {
- case(1):b.downloadFile(name);break;
- case(2):b.showFileList();break;
- case(3):b.changeSelfInfo(password);break;
- case(4):b.exitSystem();break;
- }break;
-
- }
- }
- else if(k==2) {
- System.out.println(tip_exit);
- System.exit(0);
- }
- else System.out.println("输入错误!!");
- Input1.close();
- }
- }
-
这次我们主要学习了如何利用封装,继承,多态三大特性来编写用户登入模板,代码看上去挺多,但通俗易懂,因本次是面向初学着,故把异常处理,数据库,多线程等方面的代码简化掉,如果读者有兴趣不妨点一波关注
,我会在日后更新这方面的内容。因我正读大二,各方面能力h还不足,希望读者能提供宝贵的建议,我会很高兴的,希望我们一起学习一起进步!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。