0

0

Java如何开发一个简易的图书管理系统_面向对象建模练习

P粉602998670

P粉602998670

发布时间:2026-03-05 12:45:05

|

639人浏览过

|

来源于php中文网

原创

图书类设计应区分业务属性与存储需求:isbn用string存,作者用list,状态用枚举,集合首选arraylist,输入统一用nextline()校验,业务逻辑拆至bookmanager和consoleui类。

java如何开发一个简易的图书管理系统_面向对象建模练习

图书类怎么设计才不会后期改崩

图书信息不是只有书名和编号,硬编码成 String title + int id 会很快卡死在借阅状态、ISBN校验、多作者处理上。必须从建模起点就区分「业务属性」和「存储/展示需求」。

  • ISBNString 存,别用 long —— 带短横线(如 "978-7-04-050694-5")或可能以 0 开头,数值类型会丢精度或抛异常
  • 作者字段别直接写 String author,改成 List<string> authors</string>,哪怕当前只填一个,否则加个合著者就得重构所有 getter/setter 和 toString
  • 状态字段用枚举,别用 int statusString status
    public enum BookStatus { AVAILABLE, BORROWED, LOST, RESERVED }
    后期加新状态、做 switch 判断、序列化输出都更稳

为什么 ArrayList 足够起步,但别碰 LinkedList

新手常以为“链表增删快”,但在图书管理系统里,你几乎不会在中间插入一本新书,也不会随机删掉第 17 本——主要操作是遍历查书、按 ID 查单本、批量导出。这时候 ArrayList 的缓存友好性和 O(1) 随机访问压倒一切。

  • ArrayList<book></book> 存全部图书,get(int index)size() 快;add(Book) 在末尾也基本是 O(1)
  • 避免用 LinkedList:它每次遍历都有指针跳转开销,get(int) 是 O(n),查 ISBN 得全扫一遍时反而更慢
  • 真要优化查询(比如按 ISBN 快速定位),等系统跑起来再说——先用 stream().filter(b -> b.getIsbn().equals(input)).findFirst(),别一上来就上 HashMap<string book></string>,容易过早复杂化

Scanner.nextLine() 吃掉输入的坑怎么绕过去

控制台交互时,输完数字再调 nextLine() 经常读到空字符串,这是 nextInt() 不吞换行符导致的典型 bug,不是 Scanner 有毛病,是没理解它的行为边界。

WebmengWeb 2020网站管理系统11.0.1
WebmengWeb 2020网站管理系统11.0.1

WebmengWeb企业管理系统也简称“WebmengWeb”,是由创梦公司历时3年开发一款以电脑版+微信站+APP+手机版+PAD网站的多语言网站全方组合的营销型企业网站管理系统。WebmengWeb以PHP5+MYSQL做为技术基础进行开发,采用OOP(面向对象)方式进行基础运行框架搭建。模块化开发方式做为功能开发形式,框架易于功能扩展,代码维护,优秀的二次开发能力,可满足所有网站的应用需求。

下载
  • 统一用 nextLine() 读所有输入,数字字段后续用 Integer.parseInt() 转,避免混用 nextInt()/nextDouble()nextLine()
  • 用户输错时别直接退出,加一层校验:
    String input = scanner.nextLine().trim();
    if (input.isEmpty()) { System.out.println("不能为空"); continue; }
  • ISBN 输入建议加简单格式提示(比如“请输入13位或带短横线的ISBN”),但不要在输入时强行格式化——用户粘贴 "9787040506945""978-7-04-050694-5" 都应接受,校验逻辑放在 Book 构造器里 normalize

main 方法里别写业务逻辑,哪怕只有一百行

把所有功能塞进 main,看似快,实则让「改一个菜单选项」变成满屏找 if-else、变量作用域混乱、根本没法单元测试。面向对象建模的第一道坎,就是把“谁该负责什么”划清楚。

立即学习Java免费学习笔记(深入)”;

  • 拆出 BookManager 类,只管增删改查集合、持久化(哪怕只是存文件)、基础搜索逻辑
  • 拆出 ConsoleUI 类,只管 printMenu()、readInput()、showResult(),不碰 Book 实例的任何字段
  • main 只剩三行:
    BookManager manager = new BookManager();
    ConsoleUI ui = new ConsoleUI(manager);
    ui.start();
    后面加图形界面、换数据库,只动构造参数,不动核心流程
实际跑起来最常卡住的地方,是把「用户看到的菜单序号」和「List 下标」直接等同——忘了 List 从 0 开始,而菜单从 1 开始编号。这个偏移量漏加,会导致 ArrayIndexOutOfBoundsException 或永远找不到那本书。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

930

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

839

2023.08.22

switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

567

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

440

2024.03.13

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

62

2025.11.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

718

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.1万人学习

C# 教程
C# 教程

共94课时 | 10.7万人学习

Java 教程
Java 教程

共578课时 | 77.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号