武汉理工大学桂林老师java_武汉理工大学-Java面向对象与多线程综合实验-(1)封装、继承与多态...
實驗?zāi)繕?biāo)
實現(xiàn)一個檔案管理系統(tǒng)的用戶管理模塊的初步模型。功能包括:密碼機(jī)制的登錄界面;普通用戶對自身信息的查詢、修改;管理員用戶對其他用戶信息的增添、刪除、修改。
模塊解析
用戶分為:Administrator 檔案管理員,負(fù)責(zé)管理所有用戶的信息;Browser 檔案瀏覽員,負(fù)責(zé)文件的上傳與下載;Operator 檔案錄入員,可進(jìn)行文件的下載與瀏覽。三者對應(yīng)初始用戶分別為 kate、rose、jack,密碼均為123。
模塊結(jié)構(gòu)圖:
模塊具體實現(xiàn):
1)完成了用戶類 User 各屬性的封裝,并構(gòu)造 setter()、getter() 方法實現(xiàn)屬性訪問;
2)不同的角色類 Administrator、Operator、Browser 繼承于用戶類 User;
3)通過多態(tài)實現(xiàn)不同菜單的展示,根據(jù)用戶角色的不同,系統(tǒng)自動調(diào)用對應(yīng)角色的 showMenu() 方法;
4)本實驗未涉及數(shù)據(jù)庫,故使用 DataProcessing 類的成員 users 存儲用戶信息 (數(shù)據(jù)類型為 Hashtable 哈希表),且類內(nèi)部有一系列方法可對 users 進(jìn)行增刪查改。每次角色類需要對用戶進(jìn)行操作時,調(diào)用 DataProcessing 類中的方法實現(xiàn)操作。
5)本實驗未涉及I/O流,故對文件操作時僅打印語句。
源代碼
·DataProcessing
import java.util.*;
public class DataProcessing {
// 哈希表
// 存儲模式類似于python的字典,以鍵值對方式存儲
static Hashtable users;
// 三個初始化用戶
static {
users = new Hashtable();
users.put("rose", new Browser("rose", "123", "browser"));
users.put("jack", new Operator("jack", "123", "operator"));
users.put("kate", new Administrator("kate", "123", "administrator"));
}
// 查找用戶
public static User searchUser(String name) {
if (users.containsKey(name)) {
return users.get(name);
}
return null;
}<
24000
/span>
// 密碼查找用戶
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 getAllUser() {
Enumeration 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;
}
}
DataProcessing 類負(fù)責(zé)用戶信息的管理,需要注意的是 Hashtable 結(jié)構(gòu)的用法:例如 put() 加入新的鍵值對,get() 返回對應(yīng)鍵的值,containsKey() , remove() 等等,需要了解熟悉。
·User
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 String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public abstract void showMenu();
public boolean downloadFile(String fileID) {
System.out.println("下載文件... ...");
System.out.println("下載成功!");
return true;
}
public void showFileList() {
System.out.println("列表... ...");
}
public boolean changeSelfInfo(String password) {
if (DataProcessing.update(name, password, role)) {
this.password = password;
return true;
} else
return false;
}
public void exitSystem() {
System.out.println("系統(tǒng)退出, 謝謝使用 ! ");
System.exit(0);
}
}
·Administrator
import java.util.Map.Entry;
import java.util.Scanner;
public class Administrator extends User {
public Administrator(String name, String password, String role) {
super(name, password, role);
}
// 刪除用戶
public void delUser(String input_name) {
if (DataProcessing.delete(input_name)) {
System.out.println("刪除成功!");
} else {
System.out.println("刪除失敗!查找不到用戶名!");
}
}
// 添加用戶
public void addUser(String input_name, String input_password, String input_role) {
if (DataProcessing.insert(input_name, input_password, input_role)) {
System.out.println("添加成功!");
} else {
System.out.println("刪除失敗!用戶名已存在!");
}
}
// 列出用戶
public void listUser() {
for (Entry u : DataProcessing.users.entrySet()) {
String print_name = u.getValue().getName();
String print_password = u.getValue().getPassword();
String print_role = u.getValue().getRole();
System.out.println("Name:" + print_name + " Password:" + print_password + " Role:" + print_role);
}
}
@SuppressWarnings("resource")
public void showMenu() {
Scanner scan1 = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
Scanner scan3 = new Scanner(System.in);
Scanner scan4 = new Scanner(System.in);
// 控制界面的開關(guān)
boolean administrator_isopen = true;
// 記錄用戶的選擇
String administrator_choice;
while (administrator_isopen) {
// 界面顯示
System.out.println("=======歡迎進(jìn)入檔案管理員菜單=======");
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.退 出");
System.out.println("====================================");
System.out.print("請輸入選項:");
administrator_choice = scan1.next();
if (administrator_choice.equals("1")) {
// 輸入用戶信息
System.out.print("請輸入用戶名:");
String input_name = scan2.next();
System.out.print("請輸入密碼:");
String input_password = scan3.next();
// 密碼查找用戶
if (DataProcessing.search(input_name, input_password) != null) {
System.out.print("請輸入身份:");
String input_role = scan4.next();
// 修改用戶
if (DataProcessing.update(input_name, input_password, input_role)) {
System.out.println("修改成功!");
} else {
System.out.println("修改失敗!查找不到用戶名!");
}
} else {
System.out.println("用戶名與密碼不符!");
}
} else if (administrator_choice.equals("2")) {
System.out.print("請輸入用戶名:");
String input_name = scan2.next();
// 刪除用戶
this.delUser(input_name);
} else if (administrator_choice.equals("3")) {
System.out.print("請輸入用戶名:");
String input_name = scan2.next();
System.out.print("請輸入密碼:");
String input_password = scan3.next();
System.out.print("請輸入身份:");
String input_role = scan4.next();
// 添加用戶
this.addUser(input_name, input_password, input_role);
} else if (administrator_choice.equals("4")) {
// 列出用戶
System.out.println("用戶列表");
this.listUser();
} else if (administrator_choice.equals("5")) {
System.out.print("請輸入文件名:");
String filename = scan2.next();
// 下載文件
super.downloadFile(filename);
} else if (administrator_choice.equals("6")) {
// 列出文件
System.out.println("文件列表");
super.showFileList();
} else if (administrator_choice.equals("7")) {
System.out.print("請輸入新密碼:");
String newpassword = scan2.next();
// 修改密碼
if (this.changeSelfInfo(newpassword)) {
System.out.println("修改成功!");
} else {
System.out.println("修改失敗");
}
} else if (administrator_choice.equals("8")) {
// 界面關(guān)閉
administrator_isopen = false;
} else {
System.out.println("輸入格式有誤!請重新輸入!");
}
}
}
}
選項數(shù)字采用的是 String 字符串類型而不是 int 整形,這樣做是為了防止手賤輸入字母出現(xiàn)類型不匹配的異常。showMenu() 方法是通過 while 循環(huán) + 布爾型 isopen 變量實現(xiàn)界面的不斷顯示,當(dāng)選擇退出選項時 isopen 置為 false,實現(xiàn)界面的退出。
·Browser
import java.util.Scanner;
public class Browser extends User {
public Browser(String name, String password, String role) {
super(name, password, role);
}
@SuppressWarnings("resource")
public void showMenu() {
Scanner scan1 = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
// 控制界面的開關(guān)
boolean browser_isopen = true;
// 記錄用戶的選擇
String browser_choice;
while (browser_isopen) {
// 界面顯示
System.out.println("=======歡迎進(jìn)入檔案瀏覽員菜單=======");
System.out.println(" 1.下載文件");
System.out.println(" 2.文件列表");
System.out.println(" 3.修改密碼");
System.out.println(" 4.退 出");
System.out.println("====================================");
System.out.print("請輸入選項:");
browser_choice = scan1.next();
if (browser_choice.equals("1")) {
System.out.print("請輸入檔案號:");
String fileID = scan2.next();
// 下載文件
super.downloadFile(fileID);
} else if (browser_choice.equals("2")) {
// 列出文件
System.out.println("文件列表");
super.showFileList();
} else if (browser_choice.equals("3")) {
System.out.print("請輸入新密碼:");
String newpassword = scan2.next();
// 修改密碼
if (this.changeSelfInfo(newpassword)) {
System.out.println("修改成功!");
} else {
System.out.println("修改失敗");
}
} else if (browser_choice.equals("4")) {
// 關(guān)閉頁面
browser_isopen = false;
} else {
System.out.println("輸入格式有誤!請重新輸入!");
}
}
}
}
· Operator
import java.util.Scanner;
public class Operator extends User {
public Operator(String name, String password, String role) {
super(name, password, role);
}
// 上傳文件
@SuppressWarnings({ "resource", "unused" })
public void uploadFile() {
Scanner scan1 = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
Scanner scan3 = new Scanner(System.in);
System.out.println("上傳文件");
System.out.print("請輸入文件名:");
String filename = scan1.next();
System.out.print("請輸入檔案號:");
String fileID = scan2.next();
System.out.print("請輸入檔案描述:");
String fileDescrption = scan3.next();
System.out.println("上傳成功!");
}
@SuppressWarnings({ "resource" })
public void showMenu() {
Scanner scan1 = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
// 控制頁面的開關(guān)
boolean operator_isopen = true;
// 記錄用戶的選擇
String operator_choice;
while (operator_isopen) {
// 顯示頁面
System.out.println("=======歡迎進(jìn)入檔案錄入員菜單=======");
System.out.println(" 1.上傳文件");
System.out.println(" 2.下載文件");
System.out.println(" 3.文件列表");
System.out.println(" 4.修改密碼");
System.out.println(" 5.退 出");
System.out.println("====================================");
System.out.print("請輸入選項:");
operator_choice = scan1.next();
if (operator_choice.equals("1")) {
// 上傳文件
this.uploadFile();
} else if (operator_choice.equals("2")) {
System.out.print("請輸入文件名:");
String filename = scan2.next();
// 下載文件
super.downloadFile(filename);
} else if (operator_choice.equals("3")) {
// 列出文件
System.out.println("文件列表");
super.showFileList();
} else if (operator_choice.equals("4")) {
System.out.print("請輸入新密碼:");
String newpassword = scan2.next();
// 修改密碼
if (this.changeSelfInfo(newpassword)) {
System.out.println("修改成功!");
} else {
System.out.println("修改失敗");
}
} else if (operator_choice.equals("5")) {
// 關(guān)閉界面
operator_isopen = false;
} else {
System.out.println("輸入格式有誤!請重新輸入!");
}
}
}
}
·Main
import java.util.Scanner;
public class Main {
@SuppressWarnings({ "resource" })
public static void main(String[] args) {
Scanner scan1 = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
Scanner scan3 = new Scanner(System.in);
// 控制界面的開閉
boolean main_isopen = true;
// 用于記錄用戶的選擇
String main_choice;
while (main_isopen) {
// 界面顯示
System.out.println("=======歡迎進(jìn)入檔案系統(tǒng)=======");
System.out.println(" 1.登 錄 ");
System.out.println(" 2.退 出 ");
System.out.println("==============================");
System.out.print("請輸入選項:");
main_choice = scan1.next();
if (main_choice.equals("1")) {
// 輸入用戶信息
System.out.print("請輸入用戶名:");
String input_name = scan2.next();
System.out.print("請輸入密碼:");
String input_password = scan3.next();
// 對密碼正確性的檢查
User user = DataProcessing.search(input_name, input_password);
if (user == null) {
System.out.println("用戶名與密碼不符!");
} else {
// 打開對應(yīng)身份的界面
user.showMenu();
}
} else if (main_choice.equals("2")) {
// 退出情況,將界面關(guān)閉
main_isopen = false;
} else {
// 格式輸入錯誤的情況
System.out.println("輸入格式有誤!請重新輸入!");
}
}
System.out.println("系統(tǒng)退出,感謝使用!");
}
}
寫在最后
聲明:本文內(nèi)容來源于武漢理工大學(xué)2019-2020學(xué)年Java編程實驗,僅供學(xué)習(xí)參考。如有不足錯誤地方,還請指出。
代碼不要無腦抄,很多細(xì)節(jié)沒有詳細(xì)講解,需要讀者自行理解。編程是實踐練出來的,祝愿讀者在編程之路上不斷進(jìn)步!
點贊
收藏
分享
文章舉報
-Kingzy-
發(fā)布了12 篇原創(chuàng)文章 · 獲贊 0 · 訪問量 604
私信
關(guān)注
總結(jié)
以上是生活随笔為你收集整理的武汉理工大学桂林老师java_武汉理工大学-Java面向对象与多线程综合实验-(1)封装、继承与多态...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 方差分解_干货 :教你用P
- 下一篇: web3.js 实现调用狐狸钱包完成用户