教师管理系统

news2024/12/28 15:15:10

大概功能:

1.显示所有教师 2.按姓名查找教师 3.按工号查找教师 4.增加教师 5.删除教师 6.退出

数据会保存到 txt 文件里面

姓名:必须是中文

手机号码:必须是11位,必须是数字

效果展示:

代码展示:

TeacherSystem类:

package TEACHERSYSTEM;

import java.io.*;
import java.util.ArrayList;
import java.util.Objects;
import java.util.Random;
import java.util.Scanner;

public class TeacherSystem {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
        User u1 = new User("1238", "张三", "18716699212", "35612341243123@qq.com", 701);
        User u2 = new User("1234", "李四", "18716699212", "35612341243123@qq.com", 801);
        User u3 = new User("12345", "王五", "18716699212", "35612341243123@qq.com", 901);
        list.add(u1);
        list.add(u2);
        list.add(u3);

        // 从文件加载数据
        LoadFromFile(list);

        // 启动登录流程
        login(list);

        // 保存数据到文件
        SaveToFile(list);
    }

    private static void login(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入工号:");
        while (true) {
            String inputID = sc.next();
            boolean found = false;
            for (User user : list) {
                if (user.getId().equals(inputID)) {
                    found = true;
                    break;
                }
            }
            if (found) {
                break;
            } else {
                System.out.println("账号 " + inputID + " 不存在,请重新输入");
            }
        }

        System.out.println("请输入姓名:");
        while (true) {
            String inputName = sc.next();
            boolean found = false;
            for (User user : list) {
                if (Objects.equals(user.getName(), inputName)) {
                    found = true;
                    break;
                }
            }
            if (found) {
                break;
            } else {
                System.out.println("姓名 " + inputName + " 不存在,请重新输入");
            }
        }

        // 获取验证码
        while (true) {
            String rightCode = getCode();
            System.out.println("当前正确的验证码为:" + rightCode);
            System.out.print("请输入验证码:");
            String code = sc.next();
            if (code.equalsIgnoreCase(rightCode)) {
                System.out.println("验证码正确");
                OperaterTeacher(list);
                break;
            } else {
                System.out.println("验证码错误,请重新输入");
            }
        }
        sc.close();
    }

    public static void OperaterTeacher(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("---------------------------------------------------------------------");
            System.out.println("Welcome to the use 教师管理系统");
            System.out.println("请选择你需要进行的操作:1.显示所有教师 2.按姓名查找教师 3.按工号查找教师 4.增加教师 5.删除教师 6.退出");
            System.out.println("---------------------------------------------------------------------");
            int choose = sc.nextInt();
            switch (choose) {
                case 1:
                    ShowAllTeacher(list);
                    break;
                case 2:
                    SeekName(list);
                    break;
                case 3:
                    SeekId(list);
                    break;
                case 4:
                    AddTeacher(list);
                    break;
                case 5:
                    DeleteTeacher(list);
                    break;
                case 6:
                    System.out.println("退出管理员操作页面");
                    return;
                default:
                    System.out.println("没有该选项");
            }
        }
    }

    public static void ShowAllTeacher(ArrayList<User> list) {
        System.out.println("工号\t\t\t姓名\t\t\t电话\t\t\t\t邮箱\t\t\t\t\t班级");
        for (User user : list) {
            System.out.println(user.getId() + "\t\t\t" + user.getName() + "\t\t\t" + user.getPhoneNumber() + "\t\t\t" + user.getLetterbox() + "\t\t" + user.getClassNumber());
        }
    }

    public static void SeekName(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入姓名:");
            String inputName = sc.next();
            boolean found = false;
            for (User user : list) {
                if (user.getName().equals(inputName)) {
                    System.out.println("工号\t\t\t姓名\t\t\t电话\t\t\t\t邮箱\t\t\t\t班级");
                    System.out.println(user.getId() + "\t\t\t" + user.getName() + "\t\t\t" + user.getPhoneNumber() + "\t\t\t" + user.getLetterbox() + "\t\t" + user.getClassNumber());
                    found = true;
                }
            }
            if (!found) {
                System.out.println("输入的姓名不存在,请重新输入");
            } else {
                return; // 如果找到教师信息,退出循环
            }
        }
    }

    public static void SeekId(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入工号:");
            String inputID = sc.next();
            boolean found = false;
            for (User user : list) {
                if (user.getId().equals(inputID)) {
                    System.out.println("工号\t\t\t姓名\t\t\t电话\t\t\t\t邮箱\t\t\t\t班级");
                    System.out.println(user.getId() + "\t\t\t" + user.getName() + "\t\t\t" + user.getPhoneNumber() + "\t\t\t" + user.getLetterbox() + "\t\t" + user.getClassNumber());
                    found = true;
                }
            }
            if (!found) {
                System.out.println("输入的工号不存在,请重新输入");
            } else {
                return;
            }
        }
    }

    public static void AddTeacher(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入新教师工号:");
        String newID = sc.next();
        if (contain(list, newID)) {
            System.out.println("该工号已经存在,请选择其他工号");
            return;
        }
        String newName;
        while (true) {
            System.out.println("请输入新教师的姓名:");
            newName = sc.next();
            if (checkChineseName(newName)) {
                break;
            } else {
                System.out.println("输入无效,请输入中文姓名。");
            }
        }

        String newPhone;
        while (true) {
            System.out.println("请输入新教师的手机号码:");
            sc.nextLine();
            newPhone = sc.nextLine();
            boolean flag = checkPhoneNumber(newPhone);
            if (flag) {
                break;
            } else {
                System.out.println("手机号码格式错误,请重新输入");
            }
        }

        System.out.println("请输入新教师的邮箱账号:");
        String newLetterBox = sc.next();
        System.out.println("请输入新教师的所在班级:");
        int newClassNumber = Integer.parseInt(sc.next());

        User newUser = new User(newID, newName, newPhone, newLetterBox, newClassNumber);
        list.add(newUser);
        System.out.println("教师添加成功");
    }

    public static void DeleteTeacher(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的工号:");
        String IDToDelete = sc.next();
        User AimUser = findUserByAccount(list, IDToDelete);
        if (AimUser == null) {
            System.out.println("用户账号不存在");
            return;
        }
        list.remove(AimUser);
        System.out.println("用户删除成功");
    }

    private static boolean checkChineseName(String name) {
        return name.matches("^[\\u4e00-\\u9fa5]+$"); // 判断是否全为中文
    }

    private static boolean checkPhoneNumber(String phoneNumber) {
        int len = phoneNumber.length();
        // 检查手机号码长度并且只包含数字
        return len == 11 && phoneNumber.matches("\\d+");
    }

    // 用户者寻找用户
    private static User findUserByAccount(ArrayList<User> list, String ID) {
        for (User user : list) {
            if (user.getId().equals(ID)) {
                return user;
            }
        }
        return null;
    }

    public static boolean contain(ArrayList<User> list, String ID) {
        for (User user : list) {
            if (ID.equals(user.getId())) {
                return true;
            }
        }
        return false;
    }

    private static String getCode() {
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char) ('a' + i));
            list.add((char) ('A' + i));
        }
        Random r = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(list.size());
            char c = list.get(index);
            sb.append(c);
        }
        int number = r.nextInt(10);
        sb.append(number);
        char[] arr = sb.toString().toCharArray();
        int randomIndex = r.nextInt(arr.length);
        char temp = arr[randomIndex];
        arr[randomIndex] = arr[arr.length - 1];
        arr[arr.length - 1] = temp;
        return new String(arr);
    }

    private static void LoadFromFile(ArrayList<User> list) {
        try (BufferedReader br = new BufferedReader(new FileReader("teachers.txt"))) {
            String line;
            line = br.readLine(); // 读取并忽略第一行标题
            while ((line = br.readLine()) != null) {
                String[] parts = line.split(",");
                if (parts.length == 5) {
                    String id = parts[0];
                    String name = parts[1];
                    String phone = parts[2];
                    String email = parts[3];
                    int classNumber = Integer.parseInt(parts[4]);

                    User user = new User(id, name, phone, email, classNumber);
                    list.add(user);
                }
            }
        } catch (IOException e) {
            System.out.println("加载文件失败,可能是文件不存在。");
        }
    }

    private static void SaveToFile(ArrayList<User> list) {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("teachers.txt"))) {
            bw.write("工号\t\t\t姓名\t\t\t电话\t\t\t\t邮箱\t\t\t\t\t班级");
            bw.newLine();
            for (User user : list) {
                bw.write(user.getId() + "\t\t\t" + user.getName() + "\t\t\t" + user.getPhoneNumber() + "\t\t\t" + user.getLetterbox() + "\t\t" + user.getClassNumber());
                bw.newLine();
            }
        } catch (IOException e) {
            System.out.println("保存文件失败");
        }
    }
}

User类:

package TEACHERSYSTEM;

public class User {
    private String id;
    private String name;
    private String PhoneNumber;
    private String Letterbox;
    private int ClassNumber;

    public User(){}

    public User(String id, String name, String phoneNumber, String letterbox, int classNumber) {
        this.id = id;
        this.name = name;
        PhoneNumber = phoneNumber;
        Letterbox = letterbox;
        ClassNumber = classNumber;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhoneNumber() {
        return PhoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        PhoneNumber = phoneNumber;
    }

    public String getLetterbox() {
        return Letterbox;
    }

    public void setLetterbox(String letterbox) {
        Letterbox = letterbox;
    }

    public int getClassNumber() {
        return ClassNumber;
    }

    public void setClassNumber(int classNumber) {
        ClassNumber = classNumber;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSES-1687 Company Queries I(倍增法)

题目传送门https://vjudge.net/problem/CSES-1687#authorGPT_zh 解题思路 其实和倍增法求 LCA 是一样的…… 首先设 表示 号点的上面的第 个祖先是谁。 同倍增法&#xff1a; 然后&#xff0c;题目要求我们向上跳 个点。 枚举 &#xff08;从大到小&#xff0c;想想为…

自动驾驶控制算法-横向误差微分方程LQR前馈控制

本文是学习自动驾驶控制算法第六讲 前馈控制与航向误差以及前两节的学习笔记。 1 横向误差微分方程 以规划的轨迹作为自然坐标系&#xff0c;计算自车在轨迹上的投影点&#xff0c;进而计算误差&#xff1a; 如图所示&#xff0c;横向误差为 d d d&#xff0c;航向误差为 θ…

后端开发如何高效使用 Apifox?

Apifox 是一个 API 协作开发平台&#xff0c;后端、前端、测试都可以使用 Apifox 来提升团队的工作效率。对于后端开发者而言&#xff0c;Apifox 的核心功能主要包括四个模块&#xff1a;调用 API、定义 API、开发与调试 API 以及生成 API 文档。本文将详细介绍后端开发人员如何…

【Unity3D】ECS入门学习(六)状态组件 ISystemStateComponentData

当需要获知组件是否被销毁时&#xff0c;ECS是没有回调告知的&#xff0c;因此可以将组件继承于ISystemStateComponentData接口&#xff0c;这样即使组件的实体被销毁了&#xff0c;该组件本身是不会消失的&#xff0c;所以可以通过在组件实体销毁后&#xff0c;去设置状态组件…

LeetCode 19:删除链表的倒数第N 个结点

题目&#xff1a; 地址&#xff1a;https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 方法一&#xff1a; 方法二&#xff1a; 代码&#xff1a; package com.zy.leetcode.LeetCode_19;/*** Author: zy* Date: 2024-12-25-13:01* Description: 删除链表…

中学数学:一个函数值计算题

在数学的领域中&#xff0c;函数是一种描述变量之间关系的桥梁&#xff0c;它能够揭示出看似复杂现象背后的简洁规律。通过函数&#xff0c;我们可以预测、分析并解决实际问题。在这张图片中&#xff0c;我们看到了一位数学爱好者手写的解题过程&#xff0c;它展示了如何巧妙地…

kipotix4靶机实战

信息收集 1.判断靶机ip 原理&#xff1a;开靶机之前nmap扫一次网段&#xff0c;再开靶机之后扫一次&#xff0c;查看多出来的ip就是靶机ip ip192.168.98.1742.判断端口服务&#xff0c;系统版本 a.确定端口 b.-p指定端口进一步收集 c.信息筛选 1.端口&#xff1a;22,80,139,…

Xilinx FPGA的Bitstream比特流加密设置方法

关于Xilinx FPGA的Bitstream比特流加密设置方法更多信息可参阅应用笔记xapp1084。 使用加密bitstream分两个步骤&#xff1a; 将bitstream的AES密钥存储在FPGA芯片内将使用AES密钥加密的Bitstream通过SPI Flash或JTAG加载至FPGA芯片 AES密钥可以存储在两个存储区之一&#x…

菜鸟带新鸟——基于EPlan2022的部件库制作(3D)

设备逻辑的概念&#xff1a; 可在布局空间 中和其它对象上放置对象。可将其它对象放置在 3D 对象上。已放置的对象分到组件的逻辑结构中。 将此属性的整体标识为设备逻辑。可使用不同的功能创建和编辑设备逻辑。 设备的逻辑定义 定义 / 旋转 / 移动 / 翻转&#xff1a;组…

理解有放回和无放回抽样 (Python)

理解有放回和无放回抽样 (Python) 文章目录 一、说明二、放回抽样模型概念2.1 如何实现放回抽样2.2 使用 NumPy 进行替换抽样2.3 使用 Pandas 进行替换抽样 三、基本统计原理四、什么是无放回抽样4.1 使用 NumPy 进行无放回抽样4.1 数据科学中不重复抽样的例子 五、结论 一、说…

H5电子杂志制作工具推荐

什么样的电子杂志制作软件最好用呢&#xff1f;这里向大家介绍几款操作简易又稳定、功能满足工作的需求、效果非常精美大气的电子杂志制作软件。 1.FLBOOK&#xff1a;是一款专门为企业内刊、期刊设计的在线制作平台&#xff0c;用来制作企业电子期刊非常方便。它不需要下载安…

CAN201 Introduction to Networking(计算机网络)Pt.3 网络层

文章目录 4.Network Layter&#xff08;网络层&#xff09;4.1 Overview4.2 Router&#xff08;路由器&#xff09;4.3 Internet Protocol4.4 IPv4 addressing4.5 NAT&#xff08;network address translation&#xff0c;网路地址转换&#xff09;4.6 IPv64.7 Generalized For…

计算机网络——期末复习(4)协议或技术汇总、思维导图

思维导图 协议与技术 物理层通信协议&#xff1a;曼彻斯特编码链路层通信协议&#xff1a;CSMA/CD &#xff08;1&#xff09;停止-等待协议&#xff08;属于自动请求重传ARQ协议&#xff09;&#xff1a;确认、否认、重传、超时重传、 &#xff08;2&#xff09;回退N帧协…

uniapp中Nvue白屏问题 ReferenceError: require is not defined

uniapp控制台输出如下 exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught ReferenceError: require is not defined 或者 exception function:createInstanceContext, exception:white s…

http 请求总结get

关于get请求传递body的问题 错误代码 有400 , 415 等情况 <!doctype html><html lang"zh"><head><title>HTTP Status 400 – 错误的请求</title><style type"text/css">body {font-family:Tahoma,Arial,sans-seri…

【微信小程序】4plus|搜索框-历史搜索 | 我的咖啡店-综合实训

升级版1-清空全部的再次确认 实现功能: 历史搜索记录展示-历史搜索记录展示10条点击跳转-点击历史搜索记录可同步到搜索框并自动搜索全部删除-可一次性全部删除历史搜索记录全部删除-有再次确认操作展示 进行搜索后留下搜索记录 点击垃圾桶图标,显示【清空全部】 点击【清…

Kubernetes 安装 Nginx以及配置自动补全

部署 Nginx &#xff1a; [rootk8s-master ~]# kubectl create deployment nginx --imagenginx:1.14-alpine deployment.apps/nginx created暴露端口&#xff1a; [rootk8s-master ~]# kubectl expose deployment nginx --port80 --typeNodePort service/nginx exposed查看服…

“库存管理软件的用户体验”:界面与交互设计

3.1可行性分析 开发者在进行开发系统之前&#xff0c;都需要进行可行性分析&#xff0c;保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该库存管理软件所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识&#xff0c;同…

基于openEuler22.09部署OpenStack Yoga云平台(一)

OpenStack Yoga部署 安装OpenStack 一、基础准备 基于OpenStack经典的三节点环境进行部署&#xff0c;三个节点分别是控制节点&#xff08;controller&#xff09;、计算节点&#xff08;compute&#xff09;、存储节点&#xff08;storage&#xff09;&#xff0c;其中存储…

AutoDL服务器深度学习使用过程

前期准备 Xshell,Xftp,Pycharm专业版 step 1:实例开机&#xff08;无卡or有卡&#xff09;&#xff0c;Xshell连接 新建xshell会话&#xff1a; 登录指令格式为&#xff1a; ssh -p 38076 rootregion-1.autodl.com 在ssh -p 38076 rootregion-1.autodl.com命令中&#xff0…