1. 程式人生 > >Java面向物件與多執行緒綜合實驗(一)之封裝、繼承與多型

Java面向物件與多執行緒綜合實驗(一)之封裝、繼承與多型

編寫一個程式,實現檔案管理系統中的使用者管理模組。要求模組中實現使用者的模擬登入過程。通過使用者輸入,獲取使用者名稱和口令;與事先記錄在程式中的使用者資訊進行對比,通過口令驗證後才能使用系統。使用者分為系統管理人員、檔案錄入人員,檔案瀏覽人員三類,相關類圖如下所示。
類圖
(1)要求在使用者類中實現封裝,並構造setter、getter方法實現屬性的訪問。

(2)通過繼承方式加以實現上述類。

(3)通過多型,實現使用者選單項的展示,根據使用者角色不同,系統自動呼叫對應showMenu()方法。

(4)在未講資料庫之前,系統中已存在使用者的資訊放置在Hashtable中。提供DataProcessing類實現資料的查詢、插入、更新和刪除。(此類可提供給學生直接使用)

(5)在未講I/O之前,系統中的檔案操作的方法可虛化,只用列印語句即可。

  • User.java

public abstract class User {
     private String name;
     private String password;
     private String role;
     User(String name,String password,String role){
    	 this.name=name;
    	 this.password=password;
    	 this.role=role;
     }
     public abstract  void showMenu();
     public void showFileList() {
    	 System.out.println("以下是檔案列表:");
     }
     public void downloadFile() {
    	 System.out.println("下載檔案成功!");
     }
     public boolean changeSelfInfo(String password) {
    	if(DataProcessing.update(name,password,role)) {
    		this.password=password;
    		System.out.println("修改成功!");
    		return true;
    	}
    	else {
    		System.out.println("修改失敗!");
    		return false;
    	}
     }
     public void exitSystem() {
    	 System.out.println("系統退出,謝謝使用!");
    	 System.exit(0);
     }
     public void setName(String name) {
    	 this.name=name;
     }
     public String getName() {
    	 return name;
     }
     public void setPassword(String password) {
    	 this.password=password;
     }
     public String getPassword() {
    	 return password;
     }
     public void setRole(String role) {
    	 this.role=role;
     }
     public String getRole() {
    	 return role;
     }
}

  • DataProcessing.java

import java.util.Enumeration;
import java.util.Hashtable;

public class DataProcessing {
    static Hashtable<String,User> users;
    static {
    	users=new Hashtable<String,User>();
    	users.put("hjy", new Operator("hjy","111","operator"));
    	users.put("cr", new Browser("cr","000","browser"));
    	users.put("myk", new Administrator("myk","250","administrator"));
    }
    public static User searchUser(String name) {
    	if(users.containsKey(name)) {
    		return users.get(name);
    	}
    	return null;
    }
    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;
    	if(users.containsKey(name)) 
    		return false;
    	else {
    		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;
    	}
    }
    public static boolean delete(String name) {
    	if(users.containsKey(name)) {
    		users.remove(name);
    		return true;
    	}
    	else return false;
    }
}

  • Administrator.java

import java.util.Enumeration;
import java.util.Scanner;
public class Administrator extends User{
	private Scanner sc;
    Administrator(String name, String password, String role) {
		super(name, password, role);
	}
	public void changeUserInfo() {
		System.out.println("請輸入要修改的使用者姓名:");
    	String cn=sc.next();
    	System.out.println("請輸入新的使用者密碼:");
    	String cm=sc.next();
    	System.out.println("請輸入新的使用者角色:");
    	String cr=sc.next();
    	if(DataProcessing.update(cn, cm, cr)) {
    		System.out.println("修改使用者資訊成功!");
    	}
    	else System.out.println("修改失敗!");
     }
    public void delUser() {
    	System.out.println("請輸入要刪除的使用者姓名:");
    	String dn=sc.next();
    	if(DataProcessing.delete(dn)) {
    		System.out.println("刪除成功!");
    	}
    	else System.out.println("刪除失敗!該使用者不存在");
    }
    public void addUser() {
    	System.out.println("請輸入要增加的使用者姓名:");
    	String an=sc.next();
    	System.out.println("請輸入要增加的使用者密碼:");
    	String am=sc.next();
    	System.out.println("請輸入要增加的使用者角色:");
    	String ar=sc.next();
    	if(DataProcessing.insert(an, am, ar)) {
    		System.out.println("增加使用者"+an+"成功!");
    	}
    	else System.out.println("增加使用者"+an+"失敗!");
    	
    }
    public void listUser() {
    	 Enumeration<User> e=DataProcessing.getAllUser();
    	 User user;
    	 while(e.hasMoreElements()) {
    		 user=e.nextElement();
    		 System.out.println("姓名:"+user.getName()+"密碼:"+user.getPassword()+"角色:"+user.getRole());
    	 }
    }
	public void showMenu() {
		System.out.println("歡迎進入檔案操作員選單!");
    	System.out.println("1.修改使用者");
    	System.out.println("2.刪除使用者");
    	System.out.println("3.新增使用者");
    	System.out.println("4.列出使用者");
    	System.out.println("5.下載檔案");
    	System.out.println("6.檔案列表");
    	System.out.println("7.修改(本人)密碼");
    	System.out.println("8.退出");
    	sc=new Scanner(System.in);
    	int i=sc.nextInt();
    	switch(i) {
    	    case 1:{
    	    	changeUserInfo();
	    	    break;
    	    }
    	    case 2:{
	            delUser();
	            break;
    	    }
    	    case 3:{
    	        addUser();
    	    	break;
        	}
    	    case 4:{
    	        listUser();
    	        break;
        	}
    	    case 5:{
    	    	downloadFile();
    	    	break;
    	    }
    	    case 6:{
    	    	showFileList();
    	    	break;
    	    }
    	    case 7:{
    	    	System.out.println("請輸入新密碼:");
    	    	String psd=sc.next();
    	    	changeSelfInfo(psd);
    	    	break;
    	    }
    	    case 8:{
    	    	exitSystem();
    	    }
    	    default:{
    	    	System.out.println("輸入非法!請重新輸入!");
    	    	break;
    	    }
    	}
    	showMenu();
	}
}

  • Operator.java

import java.util.Scanner;

public class Operator extends User{
	private Scanner sc;
	Operator(String name, String password, String role) {
		super(name, password, role);
	}
    public void showMenu() {
    	System.out.println("歡迎進入檔案操作員選單!");
    	System.out.println("1.上傳檔案");
    	System.out.println("2.下載檔案");
    	System.out.println("3.檔案列表");
    	System.out.println("4.修改密碼");
    	System.out.println("5.退出");
    	Scanner sc = new Scanner(System.in);
    	int i=sc.nextInt();
    	switch(i) {
    	    case 1:{
    	        uploadFile();
    	        break;
        	}
    	    case 2:{
    	    	downloadFile();
    	    	break;
    	    }
    	    case 3:{
    	    	showFileList();
    	    	break;
    	    }
    	    case 4:{
    	    	System.out.println("請輸入新密碼:");
    	    	String psd=sc.next();
    	    	changeSelfInfo(psd);
    	    	break;
    	    }
    	    case 5:{
    	    	exitSystem();
    	    }
    	    default:{
    	    	System.out.println("輸入非法!請重新輸入!");
    	    	break;
    	    }
    	}
    	showMenu();
    }
    public void uploadFile() {
    	//上傳檔案
    	System.out.println("上傳成功!");
    }
}

  • Browser.java

import java.util.Scanner;
public class Browser extends User{
	Browser(String name, String password, String role) {
		super(name, password, role);
	}
	public void showMenu() {
    	System.out.println("歡迎進入檔案瀏覽員選單!");
    	System.out.println("1.下載檔案");
    	System.out.println("2.檔案列表");
    	System.out.println("3.修改密碼");
    	System.out.println("4.退出");
    	System.out.print("請選擇:");
    	Scanner sc = new Scanner(System.in);
    	int i=sc.nextInt();
    	switch(i) {
    	    case 1:{
    	    	downloadFile();
    	    	break;
    	    }
    	    case 2:{
    	    	showFileList();
    	    	break;
    	    }
    	    case 3:{
    	    	System.out.println("請輸入新密碼:");
    	    	String psd=sc.nextLine();
    	    	changeSelfInfo(psd);
    	    	break;
    	    }
    	    case 4:{
    	    	exitSystem();
    	    }
    	    default:{
    	    	System.out.println("輸入非法!請重新輸入!");
    	    	break;
    	    }
    	}
    	showMenu();
    }
}

  • Main.java

import java.util.Scanner;
public class Main {
    public static void main(String args[]) {
    	while(true) {
        	System.out.println("歡迎進入檔案管理系統!");
        	System.out.println("1.登入");
        	System.out.println("2.退出");
        	Scanner sc=new Scanner(System.in);
        	int i=sc.nextInt();
        	if(i==1) {
        		System.out.println("請輸入使用者名稱:");
        		String name=sc.next();
        		if(DataProcessing.searchUser(name)!=null) {
        			System.out.println("請輸入密碼:");
            		String password=sc.next();
        			if(DataProcessing.search( name ,password)!=null)
        			    DataProcessing.search(name, password).showMenu();
        			else System.out.println("密碼錯誤!");  
        		}
        	    else {
        		   System.out.println("使用者不存在!");   
        	    }
            }
        	else if(i==2) {
        		System.exit(0);
        	}
        	else {
        		System.out.println("輸入非法!請重新輸入。");
        	}
    	}
    }
}

以下是需要完成的結果展示:Java面向物件與多執行緒綜合實驗(一)之封裝、繼承與多型