6月4日笔记

面向对象三大核心特性

  1. 封装
    隐藏类的内部实现细节,仅对外暴露公共接口,保护数据安全,简化调用。
  2. 继承
    子类复用父类的属性和方法,实现代码复用,建立类的层级关系。
  3. 多态
    同一行为在不同对象上有不同表现,分为编译时多态(方法重载)和运行时多态(方法重写),提升代码扩展性。

代码练习

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    static ArrayList<User> userList = new ArrayList<>();
    static ArrayList<News> newsList = new ArrayList<>();
    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.nextLine();

            switch (choice) {
                case 1:
                    register();
                    break;
                case 2:
                    login();
                    break;
                case 3:
                    showNewsList();
                    break;
                case 4:
                    publishNews();
                    break; // 原代码缺break,补上
                case 5:
                    System.out.println("再见!");
                    scanner.close();
                    return;
                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;
                System.out.println("登录成功!");
                while (true) {
                    currentUser.showMenu();

                    System.out.print("请输入您的选择:");
                    int choice = scanner.nextInt();
                    scanner.nextLine();
                    if (choice == 0) {
                        currentUser = null;
                        System.out.println("已退出登录\n");
                        return;
                    }
                    switch (choice) {
                        case 1: publishNews(); break;
                        case 2: showNewsList(); break;
                        case 3: showNewsDetail(); break;
                        case 4:
                            if (currentUser instanceof Admin) {
                                deleteNews();
                            } else {
                                System.out.println("您没有权限执行此操作!\n");
                            }
                            break;
                        case 5: //管理员5是退出
                            currentUser = null;
                            System.out.println("已退出登录\n");
                            return;
                        default: System.out.println("无效选择\n");
                    }
                }
            }
        }
        // 循环走完没找到用户,密码错误
        System.out.println("用户名或密码错误!\n");
    }

    // 【已存在】发布新闻
    static void publishNews() {
        if (currentUser == null) {
            System.out.println("请先登录!");
            return;
        }

        System.out.print("标题:");
        String title = scanner.nextLine();
        System.out.print("内容:");
        String content = scanner.nextLine();

        newsList.add(new News(title, content));
        System.out.println("发布成功!");
    }

    // 【已存在】查看新闻列表
    static void showNewsList() {
        System.out.println("\n====== 新闻列表 ======");
        for (int i = 0; i < newsList.size(); i++) {
            News n = newsList.get(i);
            System.out.println((i+1) + ". " + n.getTitle() + " (" + n.getPublishTime() + ")");
        }
    }

    //【新增1】查看新闻详情
    static void showNewsDetail(){
        if(newsList.isEmpty()){
            System.out.println("暂无新闻!");
            return;
        }
        System.out.print("请输入要查看的新闻编号:");
        int index = scanner.nextInt()-1;
        scanner.nextLine();
        if(index >=0 && index<newsList.size()){
            News n = newsList.get(index);
            System.out.println("标题:"+n.getTitle());
            System.out.println("内容:"+n.getContent());
            System.out.println("发布时间:"+n.getPublishTime());
        }else {
            System.out.println("编号不存在!");
        }
    }

    //【新增2】管理员删除新闻
    static void deleteNews(){
        if(newsList.isEmpty()){
            System.out.println("暂无新闻可删除!");
            return;
        }
        showNewsList();
        System.out.print("输入要删除的新闻编号:");
        int idx = scanner.nextInt()-1;
        scanner.nextLine();
        if(idx>=0&&idx<newsList.size()){
            newsList.remove(idx);
            System.out.println("删除成功!");
        }else {
            System.out.println("编号错误!");
        }
    }
}
public class User {
    private String username;
    private 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. 退出登录");
    }
}
import java.text.SimpleDateFormat;
import java.util.Date;

public class News {
    private String title;
    private String content;
    private String publishTime;
    public String getContent(){
        return content;
    }

    public News(String title, String content) {
        this.title = title;
        this.content = content;
        this.publishTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }

    public String getTitle() {
        return title;
    }

    public String getPublishTime() {
        return publishTime;


    }

}
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. 退出登录");
    }
}
posted on 2026-06-07 23:10  毋凶  阅读(7)  评论(0)    收藏  举报