南京市网站建设_网站建设公司_Windows Server_seo优化
2026/1/10 16:15:03 网站建设 项目流程

前言:该图书管理系统实现了查找、添加、删除、显示、借阅、归还等功能,分为两个用户群体:管理者和普通用户。使用了类与对象,封装继承多态,抽象类和接口等Java基础知识。

一.思路

面向对象三部曲:找对象,创建对象,使用对象。

1.找对象

图书馆管理系统中的对象有书和人。人通过一些方法操作书。操作方法是一个集合。

2.创建对象

这里可用使用包将它们整合在一起,人、书和功能各一个包。

书是一个类,还一个类是书架。书中是定义书的各种属性,书架是放书的地方,也是操作书的地方。

人分为两种,一种是管理员,一种是普通用户。创建一个父类将两人共有的属性放在这里,另外创建两个子类扩展父类。

功能这个包里放着各种各样我们实现的包,

3.脉络

public static void main(String[] args) { BookList bookList=new BookList();//实例化书架,形象的理解为创建了一个图书馆 Person person=logic(); //判断这个人是哪一个类,是管理员还是普通用户 while(true){ int choice=person.menu(); person.doFunction(choice,bookList); } }

这是main方法的全部。

我们可以看到,我们先实例化了书架,相当于建立起了一个书架,我们可以在这个书架上对书进行操作。

第二步,通过一个logic方法判断出用户是哪一类。

书架有了,身份有了,接下来就是书架进行操作,也就是下面while循环里的内容。

二.框架的具体实现

1.logic方法的实现

先上代码:

public static Person logic(){ System.out.println("欢迎来的图书管理系统"); System.out.println("请输入您的姓名:"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); System.out.println("输入1:管理员 2:普通用户"); int choice=scanner.nextInt(); if(choice==1){ return new Manager(name); }else{ return new Normal(name); } }

返回值是我们定义的父类Person。通过输入的选择,用if分出两种情况(这里不是很严谨,没有判别输入其他数字的情况),直接new一个对象返回,new完类也实例化完了。

这样我们就得到了我们要用户身份。

2.person.menu方法的实现

person现在是某一个具体的身份,可以调用其类里的menu方法。

//普通用户 public int menu(){ System.out.println("普通用户界面"); System.out.println("1:查阅图书"); System.out.println("2:借阅图书"); System.out.println("3:归还图书"); System.out.println("0.退出系统"); System.out.println("请输入你的操作:"); Scanner scanner=new Scanner(System.in); int choice= scanner.nextInt(); return choice; }
//管理员 public int menu(){ System.out.println("管理员界面"); System.out.println("1:查阅图书"); System.out.println("2:新增图书"); System.out.println("3:删除图书"); System.out.println("4:显示图书"); System.out.println("0.退出系统"); System.out.println("请输入你的操作:"); Scanner scanner=new Scanner(System.in); int choice= scanner.nextInt(); return choice; }

通过输入数字来选择我们要进行的操作,并将刚输入的数字作为返回值去返回。

获得具体数字后我们可以进行下面的操作来进行具体的实现。

3.person.doFunction方法的实现

public IFunction[] iFunctions; public void doFunction(int choice, BookList bookList){ iFunctions[choice].work(bookList); }

这是Person类中的内容,可以看到我们先定义了一个接口数组,使用了这个接口中的某一个方法。在一开始实例化两种用户时我们就用构造方法来实现了数组的“赋值”:

//普通用户 public Normal(String name) { super(name); this.iFunctions = new IFunction[]{ new Exit(), new Seek(), new Borrow(), new Back() }; }
//管理员 public Manager(String name) { super(name); this.iFunctions=new IFunction[]{ new Exit(), new Seek(), new Add(), new Del(), new Show() }; }

这里的顺序对应了menu方法里的顺序,大家可以去上面查看。

4.接口的实现

public interface IFunction { void work(BookList bookList); }

在接口里写了一个work方法,这个就是上面调用的方法。参数是书架,目的是为了操作书架。

三.功能的具体实现

0.前置内容

每一个具体的功能都通过接口连上了IFunction,都要再次实现work方法

iFunctions[choice].work(bookList);

另外在书架上定义一个int变量来记录书的数量

int size = 0;

1.查阅图书

public void work(BookList bookList) { System.out.println("查找图书"); System.out.println("请输入想要查找书的名称:"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); int size=bookList.getSize(); //利用BookList类的方法来获得书架上书的数量 for(int i=0;i<size;i++){ String bname=bookList.getname(i); if(bname.equals(name)){ //比较字符串 System.out.println("书找到了"); return ; } } System.out.println("没有这本书"); }

bookList.getSize()这个方法是获取现在书架上书的数量,然后进入循环去寻找是否有这本书,比较简单。

2.借阅图书

public void work(BookList bookList) { System.out.println("借阅图书"); System.out.println("输入要借阅书的名称:"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); int choice=bookList.getSize(); for(int i=0;i<choice;i++){ String bname= bookList.getname(i); if(bname.equals(name)){ bookList.changeType(i,true); //用人方法要说哪一个 bookList.changeSize(-1); System.out.println("借阅成功"); return ; } } System.out.println("没有这本书无法借阅"); }

借阅图书要实现的细节:

1.把书的属性设置为已借出;2.书架上书的数量减一。

3.归还图书

public void work(BookList bookList) { System.out.println("归还图书"); System.out.println("输入要归还书的名称:"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); int choice=bookList.getSize(); for(int i=0;i<choice;i++){ String bname= bookList.getname(i); if(bname.equals(name)){ bookList.changeType(i,false); //用人方法要说哪一个 bookList.changeSize(1); System.out.println("归还成功"); return ; } } System.out.println("没有这本书无法归还"); }

细节方面与上面的借阅相反。

4.新增图书

public void work(BookList bookList) { System.out.println("添加书籍"); int choice=bookList.getSize(); if(choice==10){ System.out.println("书架已满无法继续添加"); return; } Scanner scanner=new Scanner(System.in); System.out.println("请输入新增书的名称:"); String name=scanner.nextLine(); System.out.println("请输入新增书的作者:"); String author=scanner.nextLine(); System.out.println("请输入新增书的类型:"); String type=scanner.nextLine(); System.out.println("请输入新增书的价格:"); int price=scanner.nextInt(); Book newbook=new Book(name,author,price,type); for (int i = 0; i < choice; i++) { String name2=bookList.getname(i); if(newbook.equals(name2)){ System.out.println("书架上已经有这本书了"); return ; } } bookList.setBooks(choice,newbook); bookList.setSize(choice+1); System.out.println("添加成功"); }

5.删除图书

public void work(BookList bookList) { System.out.println("删除书籍"); Scanner scanner=new Scanner(System.in); System.out.println("输入要删除的书的名称"); String name=scanner.nextLine(); int choice=bookList.getSize(); int i = 0; int flag=-1; for (; i < choice; i++) { String bname=bookList.getname(i); if(bname.equals(name)){ flag=i; break; } } if(i==choice){ System.out.println("没有这本书"); return ; } for (int j = flag; j < choice-1; j++) { Book book = bookList.getBooks(j+1); bookList.setBooks(j,book); } bookList.setBooks(choice-1,null); bookList.setSize(choice-1); System.out.println("删除成功"); }

6.退出系统

public void work(BookList bookList) { System.out.println("成功退出系统"); System.exit(0); }

四.总结

以上功能的实现不是最主要的,代码的框架是最主要的。怎么实现一个图书管理系统,它的整个脉络是怎样的,这是重要的。上述功能代码的实现可能有不严谨的地方,大家可以自行修改。

Java开发的就业市场正在经历结构性调整,竞争日益激烈

传统纯业务开发岗位(如仅完成增删改查业务的后端工程师)的需求,特别是入门级岗位,正显著萎缩。随着企业技术需求升级,市场对Java人才的要求已从通用技能转向了更深入的领域经验(如云原生、微服务)或前沿的AI集成能力。这也导致岗位竞争加剧,在一、二线城市,求职者不仅面临技术内卷,还需应对学历与项目经验的高门槛。

大模型为核心的AI领域正展现出前所未有的就业热度与人才红利

2025年,AI相关新发岗位数量同比激增543%,单月增幅最高超过11倍,大模型算法工程师位居热门岗位前列。行业顶尖人才的供需严重失衡,议价能力极强,跳槽薪资涨幅可达30%-50%。值得注意的是,市场并非单纯青睐算法研究员,而是急需能将大模型能力落地于复杂业务系统的工程人才。这使得具备企业级架构思维和复杂系统整合经验的Java工程师,在向“Java+大模型”复合人才转型时拥有独特优势,成为企业竞相争夺的对象,其薪资天花板也远高于传统Java岗位。

说真的,这两年看着身边一个个搞Java、C++、前端、数据、架构的开始卷大模型,挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis,稳稳当当过日子。

结果GPT、DeepSeek火了之后,整条线上的人都开始有点慌了,大家都在想:“我是不是要学大模型,不然这饭碗还能保多久?”

先给出最直接的答案:一定要把现有的技术和大模型结合起来,而不是抛弃你们现有技术!掌握AI能力的Java工程师比纯Java岗要吃香的多。

即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地!大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇!

如何学习AGI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享**

一、2025最新大模型学习路线

一个明确的学习路线可以帮助新人了解从哪里开始,按照什么顺序学习,以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1级别:AI大模型时代的华丽登场

L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理,关键技术,以及大模型应用场景;通过理论原理结合多个项目实战,从提示工程基础到提示工程进阶,掌握Prompt提示工程。

L2级别:AI大模型RAG应用开发工程

L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3级别:大模型Agent应用架构进阶实践

L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体;同时还可以学习到包括Coze、Dify在内的可视化工具的使用。

L4级别:大模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调;并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握;而L3 L4更多的是通过项目实战来掌握大模型的应用开发,针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。

二、大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

三、大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

四、大模型项目实战

学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

五、大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询