2026.6.4

学习制作学生管理系统并从需求、分析、设计、测试四个方面进行答辩
1、

点击查看代码
// 导入ArrayList和Scanner
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    // 静态集合:存放所有注册的用户对象
    static ArrayList<User> userList = new ArrayList<>();//动态增删元素的容器
    // 静态集合:存放所有新闻对象
    static ArrayList<News> newsList = new ArrayList<>();
    // 当前登录的用户对象,未登录时为null
    static User currentUser = null;
    // 扫描器,用于接收键盘输入
    static Scanner scanner = new Scanner(System.in);

    //程序入口
    public static void main(String[] args) {

        while (true) {// 无限循环,一直显示主菜单除非用户主动退出
            System.out.println("\n====== 微头条主菜单 ======");
            System.out.println("1. 注册");
            System.out.println("2. 登录");
            System.out.println("3. 查看新闻列表");
            System.out.println("4. 发布新闻");
            System.out.println("5. 退出");
            System.out.print("请选择:");
            int choice = scanner.nextInt();//输入整数,创建scanner同时导入包
            scanner.nextLine(); // 吃掉换行符,否则会读到空字符,跳过输入

            switch (choice) {
                case 1:
                    register();      // 调用注册方法
                    break;//回到while
                case 2:
                    login();         // 调用登录方法
                    break;
                case 3:
                    showNewsList();  // 显示新闻列表
                    break;
                case 4:
                    publishNews();   // 发布新闻
                    break;
                case 5:
                    System.out.println(";再见!");
                    scanner.close();
                    return;          // 结束main方法,程序退出
                default:
                    System.out.println(";无效选择!");
            }
        }
    }

    // 注册方法
    static void register() {
        System.out.print(";用户名:");
        String name = scanner.nextLine();
        // 检查用户名是否已存在(代码不变)
        for (User u : userList) {
            if (u.getUsername().equals(name)) {
                System.out.println("用户名已存在!");
                return;
            }
        }
        System.out.print("密码:");
        String pwd = scanner.nextLine();
        System.out.print("请选择角色 1.普通用户 2.管理员):");
        int role = scanner.nextInt();
        scanner.nextLine();
        User user;
        if (role == 2) {
            user = new Admin(name, pwd);
        } else {
            user = new User(name, pwd);
        }
        userList.add(user);
        System.out.println("注册成功!");
    }

    // 登录方法
    static void login() {
        System.out.print("用户名:");
        String name = scanner.nextLine();
        System.out.print("密码:");
        String pwd = scanner.nextLine();
        for (User u : userList) {
            if (u.getUsername().equals(name) && u.getPassword().equals(pwd)) {
                currentUser = u;
                if (currentUser instanceof Admin) {
                    System.out.println("管理员登录成功!");
                } else {
                    System.out.println("普通用户登录成功!");
                }
                // 进入用户菜单循环
                while (true) {
                    currentUser.showMenu();  // 多态调用:实际执行的是子类重写的方法
                    int choice = scanner.nextInt();
                    scanner.nextLine();
                    if (choice == 1) {
                        publishNews();
                    } else if (choice == 2) {
                        showNewsList();
                    } else if (choice == 3) {
                        showNewsDetail();
                    } else if (choice == 4) {
                            // 判断当前用户是否是管理员
                            if (currentUser instanceof Admin) {
                                deleteNews();    //
                            } else {
                                // 普通用户选择4是退出登录
                                currentUser = null;
                                System.out.println("已退出登录");
                                return;
                            }
                        } else if (choice == 5 && currentUser instanceof Admin) {
                            currentUser = null;
                            System.out.println("已退出登录");
                            return;
                        } else {
                            System.out.println("无效选择");
                        }
                    }
                }
            }
            System.out.println("用户名或密码错误!");
        }

        // 发布新闻方法
        static void publishNews(){
            // 检查是否已登录
            if (currentUser == null) {
                System.out.println("请先登录!");
                return;
            }

            System.out.print("标题:我学会微头条控制台版了");
            String title = scanner.nextLine();
            System.out.print("内容:我是王宁梓,学号是723410628");
            String content = scanner.nextLine();

            // 创建News对象,自动生成发布时间,并添加到newsList集合中
            newsList.add(new News(title, content));
            System.out.println("发布成功!");
        }

        // 查看新闻列表方法
        static void showNewsList(){
            System.out.println("\n====== 新闻列表 ======");
            // 遍历newsList,按顺序显示每条新闻的标题和发布时间
            for (int i = 0; i < newsList.size(); i++) {
                News n = newsList.get(i);
                // 编号从1开始,所以用(i+1)
                System.out.println((i + 1) + ". " + n.getTitle() + " (" + n.getPublishTime() + ")");
            }
        }
        static void deleteNews(){
            if (newsList.isEmpty()) {
                System.out.println("没有新闻可删除。");
                return;
            }
            System.out.print("请输入要删除的新闻编号:");
            int index = scanner.nextInt();
            scanner.nextLine(); // 吃掉换行符

            if (index >= 1 && index <= newsList.size()) {
                newsList.remove(index - 1);
                System.out.println("删除成功!");
            } else {
                System.out.println("编号无效!");
            }
        }
        static void showNewsDetail() {
            if (newsList.isEmpty()) {
                System.out.println("暂无新闻可查看。");
                return;
            }

            System.out.print("请输入要查看的新闻编号:");
            if (scanner.hasNextInt()) {
                int index = scanner.nextInt();
                scanner.nextLine(); // 吃掉换行符

                if (index >= 1 && index <= newsList.size()) {
                    News n = newsList.get(index - 1);
                    System.out.println("\n------ 新闻详情 ------");
                    System.out.println("标题:" + n.getTitle());
                    System.out.println("时间:" + n.getPublishTime());
                    System.out.println("内容:" + n.getContent()); // 这里用到了News类新加的方法
                    System.out.println("----------------------");
                } else {
                    System.out.println("编号不存在!");
                }
            } else {
                scanner.next(); // 处理非数字输入
                System.out.println("请输入有效的数字编号。");
            }
        }
    }

2、
点击查看代码
public class User {
    private final String username;
    private final String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() { return username; }
    public String getPassword() { return password; }

    // 普通用户的菜单
    public void showMenu() {
        System.out.println("\n====== 普通用户菜单 ======");
        System.out.println("1. 发布新闻");
        System.out.println("2. 查看新闻列表");
        System.out.println("3. 查看新闻详情");
        System.out.println("4. 退出登录");
        System.out.print("请选择:");
    }
}

3、
点击查看代码
import java.text.SimpleDateFormat;    // 导入日期格式化工具类,用于将日期转换为指定格式的字符串
import java.util.Date;    // 导入Date日期类,用于获取当前系统时间

public class News {    // 定义一个公开的News类(新闻类),用于封装新闻信息
    private final String title;    // 私有属性:新闻标题,只能在当前类内部访问
    private final String content;    // 私有属性:新闻内容,只能在当前类内部访问
    private final String publishTime;    // 私有属性:发布时间(字符串类型),存储格式化后的时间

    public News(String title, String content) {    // 有参构造方法,创建新闻对象时必须传入标题和内容
        this.title = title;    // 将参数title赋值给当前对象的title属性
        this.content = content;    // 将参数content赋值给当前对象的content属性
        this.publishTime = new SimpleDateFormat(";yyyy-MM-dd HH:mm:ss").format(new Date());
    }//  获取当前系统时间,格式化为";年-月-日 时:分:秒";后存入publishTime

    public String getTitle() {    // getter方法:获取新闻标题
        return title;    // 返回当前对象的title属性值
    }

    public String getPublishTime() {    // getter方法:获取发布时间
        return publishTime;    // 返回当前对象的publishTime属性值
    }
    public String getContent() {
        return content;
    }
}
4、
点击查看代码
public class Admin extends User {
    public Admin(String username, String password) {
        super(username, password);   // 调用父类构造器,初始化用户名和密码
    }

    @Override
    public void showMenu() {
        System.out.println("\n====== 管理员菜单 ======");
        System.out.println("1. 发布新闻");
        System.out.println("2. 查看新闻列表");
        System.out.println("3. 查看新闻详情");
        System.out.println("4. 删除任意新闻");   // 管理员特有选项
        System.out.println("5. 退出登录");
        System.out.print("请选择:");
    }
}
posted @ 2026-06-04 15:04  Daisy!  阅读(7)  评论(0)    收藏  举报