Java面向物件與多執行緒綜合實驗(一)之封裝、繼承與多型
阿新 • • 發佈:2018-12-11
編寫一個程式,實現檔案管理系統中的使用者管理模組。要求模組中實現使用者的模擬登入過程。通過使用者輸入,獲取使用者名稱和口令;與事先記錄在程式中的使用者資訊進行對比,通過口令驗證後才能使用系統。使用者分為系統管理人員、檔案錄入人員,檔案瀏覽人員三類,相關類圖如下所示。
(1)要求在使用者類中實現封裝,並構造setter、getter方法實現屬性的訪問。
(2)通過繼承方式加以實現上述類。
(3)通過多型,實現使用者選單項的展示,根據使用者角色不同,系統自動呼叫對應showMenu()方法。
(4)在未講資料庫之前,系統中已存在使用者的資訊放置在Hashtable中。提供DataProcessing類實現資料的查詢、插入、更新和刪除。(此類可提供給學生直接使用)
(5)在未講I/O之前,系統中的檔案操作的方法可虛化,只用列印語句即可。
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; } }
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; } }
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();
}
}
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("上傳成功!");
}
}
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();
}
}
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面向物件與多執行緒綜合實驗(一)之封裝、繼承與多型