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("请输入有效的数字编号。");
}
}
}
点击查看代码
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("请选择:");
}
}
点击查看代码
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;
}
}
点击查看代码
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("请选择:");
}
}

浙公网安备 33010602011771号