前言:该图书管理系统实现了查找、添加、删除、显示、借阅、归还等功能,分为两个用户群体:管理者和普通用户。使用了类与对象,封装继承多态,抽象类和接口等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大模型学习资源包》免费分享