多线程实验一,无异常处理控制台输出

User与DataProcessing类由任课老师提供,解决了最难的部分

package 实验1;

public abstract class User {
    private String name;
    private String password;
    private String role;

    public User(String name,String password,String role){
        this.name=name;
        this.password=password;
        this.role=role;
    }
    public User(){//这个不加,子类自动创建的构造函数会报错

    }
    public boolean changeSelfInfo(String password){
        if (DataProcessing.update(name, password, role)){
            this.password=password;
            System.out.println("更改密码成功");
            return true;
        }else
            return false;
    }

    public abstract void showMenu();

    public boolean downloadFile(String filename){
        System.out.println("[下载文件中]······\n 下载成功!");
        return true;
    }

    public void showFileList(){
        System.out.println("文件列表\n");
    }

    public void exitSystem(){
        System.out.println("系统退出,谢谢使用\n");
        System.exit(0);
    }

    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;
    }


}

user类刚开始我的并没有空的User(),最后的整体架构可能重点不在user。

package 实验1;

import java.util.*;

public  class DataProcessing {
    static Hashtable<String, User> users;//静态对象
    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 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;

    }

}

DataProcessing可以说是精华所在,里面已经实现了绝大多数方法,其他的类只需要使用就好,另外有几点,大部分方法是类方法,可以直接使用而不用实例化对象,例如addministrator类实现增加函数时,简单把键盘输入的name,password,role用DataProcessing.insert(name,password,role).

hashtable可以理解为map的同等实现,以键/值的关系无重复无序插入,后面的修改只要put(name,user)可完成插入和覆盖。

Administrator类

package 实验1;

import java.util.Enumeration;

public class Administrator extends User{//管理员
       public Administrator(String name, String password, String role){
           super.setName(name);
           super.setPassword(password);
           super.setRole(role);
       }

       public boolean changeUserInfo(String name, String password, String role){
           if(DataProcessing.update(name,password,role)==true){//更新信息并返回是否成功
               return true;
           }else return false;
       }
       public boolean delUser(String name){
           if(DataProcessing.delete(name)==true) return true;//删除信息并返回是否成功
           else return false;
       }
       public boolean addUser(String name, String password, String role){//增加信息并返回是否成功
           if(DataProcessing.insert(name,password,role)==true) return true;
           else return false;
       }
       public void listUser(){//打印所有用户信息
           Enumeration<User> e=DataProcessing.getAllUser();
           User user;
           while( e.hasMoreElements() )
           {
               user=e.nextElement();
               System.out.println("Name:"+user.getName()+"\t Password:" +user.getPassword()+"\t Role:" +user.getRole());
           }

       }
       public void showMenu(){
            String tip_system="系统管理员菜单";
            String tio_menu="请选择菜单:";
            String infos="****欢迎进入"+tip_system+"****\n\t"+
                    "1.修改用户\n\t"+
                    "2.删除用户\n\t"+
                    "3.新增用户\n\t"+
                    "4.列出用户\n\t"+
                    "5.下载文件\n\t"+
                    "6.文件列表\n\t"+
                    "7.修改(本人)密码\n\t"+
                    "8.退出\n\t";
            while(true){
                System.out.println(tip_system+"\n"+tio_menu+"\n"+infos);
                int choice=Main.scanner.nextInt();
                switch (choice){
                    case 1:{
                        System.out.println("修改用户");
                        String name,password,role;
                        System.out.println("请输入修改的用户名");
                        name=Main.scanner.next();
                        System.out.println("请输入口令");
                        password=Main.scanner.next();
                        System.out.println("请输入角色");
                        role=Main.scanner.next();
                        if(changeUserInfo(name,password,role)==true){
                            System.out.println("修改成功");
                        }else{
                            System.out.println("或无此用户,修改失败");
                        }
                    }break;
                    case 2:{
                        System.out.println("删除用户");
                        String name=Main.scanner.next();
                        if(delUser(name)==true){
                            System.out.println("删除成功");
                        }else{
                            System.out.println("或无此用户,删除失败");
                        }
                    }break;
                    case 3:{
                        System.out.println("新增用户");
                        String name,password,role;
                        System.out.println("请输入新增的用户名");
                        name=Main.scanner.next();
                        System.out.println("请输入口令");
                        password=Main.scanner.next();
                        System.out.println("请输入角色");
                        role=Main.scanner.next();
                        if(addUser(name,password,role)==true){
                            System.out.println("增加成功");
                        }else{
                            System.out.println("或有此用户,增加失败");
                        }
                    }break;
                    case 4:{
                        System.out.println("列出用户");
                        listUser();
                    }break;
                    case 5:{
                        System.out.println("下载文件");
                        String filename=Main.scanner.next();
                        this.downloadFile(filename);
                    }break;
                    case 6:{
                        System.out.println("文件列表");
                        this.showFileList();
                    }break;
                    case 7:{
                        System.out.println("修改(本人)密码");
                        String passwrod=Main.scanner.next();
                        if(this.changeSelfInfo(passwrod)==true){
                        }else{
                            System.out.println("修改密码失败");
                        }
                    }break;
                    case 8:{
                        exitSystem();
                    }break;
                    default:{
                        System.out.println("输入命令有误,请重新输入");
                    }
                }
            }
       }
}

可以看到Administrator类可以直接使用Dataprocessing的静态方法,和用this的User父类里的方法实现,而listUser里的Enumeration可以理解成数组头地址般的存在。

Main类

至于Browser和Operator类,基本就是从Administrator类里分出去的,写的时候甚至没花10分钟

package 实验1;

import java.util.Scanner;

public class Main {
    public static Scanner scanner =new Scanner(System.in);
    public static void main(String args[]){
        String tip_system="档案系统";
        String tip_menu="请选择菜单:";
        String tip_exit="退出系统,谢谢使用!";
        String infos="****欢迎进入"+tip_system+"****\n\t"+"1.登录\n    2.退出\n"+"******************";
        while(true){
            System.out.println(infos+"\n"+tip_menu+"\n");
            int choice= scanner.nextInt();
            switch (choice){
                case 1:{
                    System.out.println("请输入名字");
                    String name = scanner.next();
                    System.out.println("请输入口令");
                    String password=scanner.next();
                    if(DataProcessing.search(name,password)!=null){
                        DataProcessing.search(name,password).showMenu();
                    }else{
                        System.out.println("登录错误,无此账号");
                        System.out.println("请重新输入");
                    }
                }
                break;
                case 2:{
                    System.out.println(tip_exit);
                    System.exit(0);
                }
                break;
                default:{
                    System.out.println("输入错误或者无此命令");
                    System.out.println("请重新输入");
                }
            }
        }
    }
}

Main类只要控制好循环和哪里使用menu就行,由于Administrator,Browser,Operator都继承了User,重写了showmenu方法,所以可以直接通过DataProcessing.search(name,password).showMenu();就可以进入别的界面

第一次实验完

代码还有问题,比如有点长,至于为什么现在写这个记录,当然是宿舍封控(武理特色)导致实验已经到第三次了,打算在来不及前写完,顺便存一下将来实验报告要用的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值