武汉理工大学桂林老师java_武汉理工大学-Java面向对象与多线程综合实验-(1)封装、继承与多态...
实验目标
实现一个档案管理系统的用户管理模块的初步模型。功能包括:密码机制的登录界面;普通用户对自身信息的查询、修改;管理员用户对其他用户信息的增添、删除、修改。
模块解析
用户分为:Administrator 档案管理员,负责管理所有用户的信息;Browser 档案浏览员,负责文件的上传与下载;Operator 档案录入员,可进行文件的下载与浏览。三者对应初始用户分别为 kate、rose、jack,密码均为123。
模块结构图:
模块具体实现:
1)完成了用户类 User 各属性的封装,并构造 setter()、getter() 方法实现属性访问;
2)不同的角色类 Administrator、Operator、Browser 继承于用户类 User;
3)通过多态实现不同菜单的展示,根据用户角色的不同,系统自动调用对应角色的 showMenu() 方法;
4)本实验未涉及数据库,故使用 DataProcessing 类的成员 users 存储用户信息 (数据类型为 Hashtable 哈希表),且类内部有一系列方法可对 users 进行增删查改。每次角色类需要对用户进行操作时,调用 DataProcessing 类中的方法实现操作。
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 类负责用户信息的管理,需要注意的是 Hashtable 结构的用法:例如 put() 加入新的键值对,get() 返回对应键的值,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("系统退出, 谢谢使用 ! ");
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);
// 控制界面的开关
boolean administrator_isopen = true;
// 记录用户的选择
String administrator_choice;
while (administrator_isopen) {
// 界面显示
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.退 出");
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")) {
// 界面关闭
administrator_isopen = false;
} else {
System.out.println("输入格式有误!请重新输入!");
}
}
}
}
选项数字采用的是 String 字符串类型而不是 int 整形,这样做是为了防止手贱输入字母出现类型不匹配的异常。showMenu() 方法是通过 while 循环 + 布尔型 isopen 变量实现界面的不断显示,当选择退出选项时 isopen 置为 false,实现界面的退出。
·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);
// 控制界面的开关
boolean browser_isopen = true;
// 记录用户的选择
String browser_choice;
while (browser_isopen) {
// 界面显示
System.out.println("=======欢迎进入档案浏览员菜单=======");
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")) {
// 关闭页面
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);
// 控制页面的开关
boolean operator_isopen = true;
// 记录用户的选择
String operator_choice;
while (operator_isopen) {
// 显示页面
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("====================================");
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")) {
// 关闭界面
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("=======欢迎进入档案系统=======");
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 {
// 打开对应身份的界面
user.showMenu();
}
} else if (main_choice.equals("2")) {
// 退出情况,将界面关闭
main_isopen = false;
} else {
// 格式输入错误的情况
System.out.println("输入格式有误!请重新输入!");
}
}
System.out.println("系统退出,感谢使用!");
}
}
写在最后
声明:本文内容来源于武汉理工大学2019-2020学年Java编程实验,仅供学习参考。如有不足错误地方,还请指出。
代码不要无脑抄,很多细节没有详细讲解,需要读者自行理解。编程是实践练出来的,祝愿读者在编程之路上不断进步!
点赞
收藏
分享
文章举报
-Kingzy-
发布了12 篇原创文章 · 获赞 0 · 访问量 604
私信
关注
武汉理工大学桂林老师java_武汉理工大学-Java面向对象与多线程综合实验-(1)封装、继承与多态...相关推荐
- 武汉理工大学-Java面向对象与多线程综合实验-(7)多线程基础
实验目标 本实验为此系列的最后一次实验,目标在实验 (6) 的基础上增加多线程功能,使得档案系统能允许多个用户同时进行登录操作,同时实现线程之间必要的同步互斥功能. 模块解析 此次实验模块与实验 (6 ...
- 段鹏飞java_面向对象与多线程综合实验-网络编程
教师:段鹏飞 实验5-实验目的 了解Java网络编程基础知识;掌握java.net包中关于网络的基本类及其属性和方法;掌握基于Socket的客户和服务器编程方法. 实验内容(必做) 编写程序,将前面课 ...
- java面向对象的特征封装_Java总结-Java面向对象的基本特征之一:封装性
作者:nyist-tc-岑国玉 来源:牛客网 Java面向对象的基本特征之一:封装性 封装性: 1.封装性的目的:保护某些属性和方法不被外部所看见. //这里说一下自己学linux时老师教我这个封装类 ...
- Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩
Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩 请定义一个Manager类,该类继承Employee类,并定义两个变量及一个构造方法,两个变量:depart ...
- java继承和多态的实验报告_Java继承与多态实验报告.doc
Java继承与多态实验报告 西 安 邮 电 大 学 (计算机学院) 课内实验报告 实验名称: 继承与多态 专业名称: 计算机科学与技术 班 级: 计科1405班 学生姓名: 高宏伟 学 号: 指导教师 ...
- java继承和多态的实验报告_JAVA,继承和多态实验报告
实验项目名称 : 继承和多态 ( 所属课程 : Java 语言程序设计 ) 院 系: 专业班级: 姓 名: 学号: 实验地点: 指导老师: 本实验项目成绩: 教师签字: 日期: 1.实验目的 (1)掌 ...
- java面向对象编程的三大基本特性--封装,继承,多态
文章目录 封装 private 继承 extends 多态 abstract/interface/implements 封装 private 封装是面向对象编程的基本特点之一,也是它最核心的思想 类的 ...
- Java进阶篇(一)——接口、继承与多态
前几篇是Java的入门篇,主要是了解一下Java语言的相关知识,从本篇开始是Java的进阶篇,这部分内容可以帮助大家用Java开发一些小型应用程序,或者一些小游戏等等. 本篇的主题是接口.继承与多态, ...
- java面向对象计算机与CD实验,Java面向对象上机实验指导书.doc
Java面向对象上机实验指导书 山东建筑大学实验报告 课 程 :Java面向对象程序设计语言 院 (部):商学院 专 业 :电子商务 班 级 : 学生姓名: 学 号: 指导教师:陈明志 完成时间:20 ...
最新文章
- GCC 连接器、链接标准库 gcc -l、链接手动创建库(指定目录的库 gcc -L)
- mongodb 监控项详解(mms)
- python爬虫和数据分析电脑推荐_大数据分析必备的5款Python爬虫库
- php 目录限制,限定某个目录禁止解析php,限制user_agent,php相关配置
- 如何将h5网页改成微信网页
- Java CharArrayReader mark()方法与示例
- android 蓝牙连接obd,Android蓝牙连接汽车OBD设备
- 重写需要注意哪些方面?
- python微信聊天机器人_教你用Python创建微信聊天机器人
- 5分钟内快速上手掌握springtx事务以及注解的使用
- java rx3x_GitHub - xkm123/oss-sdk-java: java sdk for oss
- WPF Blend 自定义控件
- 使用sunshine+moonlight 实现电脑串流到电视(Android 设备)低延迟投屏
- Typora DIY 主题背景,以及透明pre代码块。
- android相册幻灯片功能,玩机教程 篇四十五:「MIUI玩机技巧63」MIUI相册新增“幻灯片播放”功能...
- 儿童剧剧本话剧舞台剧戏剧情景剧红色课本剧英语剧音乐小品剧视频
- Scalar数据类型
- 华科计算机博导刘云生论文,AAAI 2020线上分享 | 华科Oral论文:点云中3D目标检测的鲁棒性...
- Android Studio键盘快捷键
- 基于Intel E5V4计算刀片的RapidIO性能测试
热门文章
- 2022最新大数据学习路线,超详细
- python爬取boss直聘招聘信息_Python爬虫实战-抓取boss直聘招聘信息
- 利用python对图像进行傅里叶变换_python用opencv 图像傅里叶变换
- F12控制视频倍速播放
- 计算机教师教学能手演讲,教学能手代表的发言稿(精选6篇)
- JavaScript作用域解析以及例题
- Java计算当前日期距离生日还有多少天
- 编程小白 邂逅C语言指针,画图分析真的是我滴神啊
- Select .....
- 奇兔recovery卡刷教程_奇兔开发者学院课程教学第四讲: Recovery备份提取制作ROM