控制台新闻管理系统需严格分三层:News为纯数据载体,NewsManagement封装增删改查等业务逻辑,Main仅负责菜单循环与用户交互;三者缺一不可,否则将导致职责混乱、难以扩展。

用 Java 写控制台新闻管理系统,本质是绕过 Web 容器(如 Tomcat)和前端页面,直接在 main 方法里用 Scanner 读输入、System.out.println 输出中文菜单和新闻列表——它不联网、不涉及 HTTP 协议,适合练手 MVC 分层思想或应付课程设计。
怎么组织三层结构:News、NewsManagement、Main 缺一不可
这不是“写个 while 循环就完事”的脚本,而是要模拟真实系统职责分离。你必须显式拆出三个类:
-
News:纯数据载体,只有字段(id、title、content、publishTime)和 getter/setter,不带任何逻辑 -
NewsManagement:核心业务类,负责增删改查(addNews()、deleteById(int id))、按标题搜索(searchByTitle(String keyword))、打印全部新闻(listAll())。所有操作都基于一个ArrayList内存集合,不连数据库 -
Main:只做一件事——启动菜单循环,调用NewsManagement的方法,把用户输入的数字映射成对应操作
漏掉任一层,代码就会变成“意大利面条式”:输入处理、业务判断、输出格式全搅在一起,后期加个“按时间排序”功能就得重翻整个 main 方法。
中文乱码不是编码问题,而是控制台环境没设 UTF-8
即使你在 IDEA 里把文件编码、控制台编码都设成 UTF-8,运行时仍可能看到“???”——因为 Windows 默认终端(cmd/PowerShell)用的是 GBK,而 Java 字符串内部是 UTF-16,System.out 输出时会隐式转码失败。
立即学习“Java免费学习笔记(深入)”;
产品简介: 网奇IOS智能订单系统,是网奇公司研发的一款智能在线订单编辑以及管理系统。本系统适合使用在;在线报名、酒店预定、信息反馈、在线订单和在线投诉等等诸多应用上。本系统所有选项字段完全通过后台控制,在线报名系统可以变为在线预定系统,同时可以变为任何其它的系统,里面的栏目字段,可以任意添加、删除、 修改。本系统为网奇公司全国独家首创,顺应网络需求,安装十分便利,上传即可使用。产品特色:
- 最稳方案:在 IDEA 运行配置里勾选
Override default encoding,并强制设为UTF-8 - 备用方案:Windows 用户可临时执行
chcp 65001切换终端到 UTF-8 模式(重启后失效) - 别碰
new String(bytes, "GBK")这类手动转码,治标不治本,且容易抛UnsupportedEncodingException
输入异常处理不能只 catch Exception,要分类型拦截
用户输个字母代替数字选菜单,或输负数删新闻 ID,程序直接崩?常见错误是写成:
try {
int choice = scanner.nextInt();
} catch (Exception e) {
System.out.println("输入错了");
}
这掩盖了真实问题。正确做法是:
- 用
scanner.hasNextInt()预判是否为整数,再调nextInt();否则用nextLine()清空缓冲区 - 对 ID 类操作(如删除、修改),必须检查
id > 0 && id ,避免IndexOutOfBoundsException - 新闻标题/内容为空时,用
StringUtils.isBlank(title)(需引入 Apache Commons Lang)或手动判title == null || title.trim().length() == 0
为什么不用数据库?因为控制台项目默认内存存储
所有资料里提到的 user 表、news 表、jdbc.properties,都是 Web 版(JavaWeb/JDBC/Spring Boot)才需要的。控制台版连 mysql-connector-java jar 都不用导。
- 新闻数据存在
ArrayList里,程序退出即丢失——这恰恰是教学目的:让你专注逻辑,而非持久化细节 - 若硬要加文件保存,用
ObjectOutputStream序列化整个 List 到news.dat,但注意News必须实现Serializable接口,且 JDK 版本升级可能导致反序列化失败 - 别在控制台项目里强行塞 MyBatis 或 JPA,它们依赖 Spring 容器和 XML/注解配置,和
main方法天然冲突
真正容易被忽略的,是把“控制台”当成过渡态——它不等于简陋,而是剥离干扰后对业务模型最直接的验证。一旦你在内存里把增删改查、状态流转、异常分支都跑通了,迁移到 Web 或数据库,只是替换数据源和交互方式,核心逻辑纹丝不动。









