图书管理系统
这个图书管理系统主要是分为两个功能根据输入的用户姓名来进行管理员以及普通用户的区分如下所示然后根据所选择的角色进行不同权限菜单的访问对于管理员对于普通用户:接下来进行用户的操作选择。1.寻找对象bookBOOK、BookListUser:AdmainUser、NormalUser2.主要实现2.1创建对象2.1.1书对于书在这里我们要将书籍这个类进行定义包括每一个变量注意这里要对于每一个书籍的权限一定要限制起来不能 全部都是public要注意隐私性、构造方法、以及Getter and Setter方法这里通过Getter and Setter来进行变量的访问public class Book { private String name; private String author; private int price; private String type; private boolean isBorrowed; public Book(String name, String author, int price, String type) { this.name name; this.author author; this.price price; this.type type; } //在进行构造方法的时候不能进行构造isBorrowed因为这个变量不是根据我们输入的时候决定的本身默认false未借出 public String getName() { return name; } public void setName(String name) { this.name name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author author; } public int getPrice() { return price; } public void setPrice(int price) { this.price price; } public String getType() { return type; } public void setType(String type) { this.type type; } public boolean isBorrowed() { return isBorrowed; } public void setBorrowed(boolean borrowed) { this.isBorrowed borrowed; } Override public String toString() { return Book{ name name \ , author author \ , price price , type type \ (isBorrowed? 已借出: 未借出) }; } }2.1.2书架书架这里 直接将上面的书放入到一个顺序表当中进行数据结构的封装注意这里private Book books[]new Book[10];对于books我们将Book数据类型对应的对象作为数组成员放入到booksp[]当中package Library.book; public class BookList { private Book books[]new Book[10]; //不可以在这里进行成员初始化操作 private int uesdSize;//有效的数据个数 public BookList() { this.books[0] new Book(三国演义,罗贯中,19,小说); this.books[1] new Book(西游记,吴承恩,28,小说); this.books[2] new Book(红楼梦,曹雪芹,22,小说);//这些都是默认值 this.books[3] new Book(偷偷藏不住,孙,221,小说);//这些都是默认值 this.books[4] new Book(你的我的,崇,22,小说);//这些都是默认值 this.books[5] new Book(他的,苗,22,小说);//这些都是默认值 this.uesdSize6; } public Book[] getBooks() { return books; } public Book getBook(int pos) { return books[pos]; } public void setBooks(int pos,Book books) { this.books[pos] books; this.uesdSize; } public void setBook(int pos,Book books) { this.books[pos] books; } public void delBook(int pos){ for (int i pos; i this.uesdSize-1; i) { books[i]books[i1]; } this.uesdSize--; } public int getUesdSize() { return uesdSize; } public void setUesdSize(int uesdSize) { this.uesdSize uesdSize; } }2.1.3用户用户User是一个大类可以将普通用户和管理员进行抽取共性抽取为抽象类抽象类的抽象方法当中方法无实体只有返回值、方法名、参数列表public abstract class User { protected String name; protected Ioperation[] operations; public User(String name) { this.name name; } public abstract int menu();//抽象类当中必须要明确权限只有接口当中才是省略的public abstract public void doOperations(int choice, BookList booklist){ this.operations[choice].work(booklist); }这里有一个小点需要注意对于行为protected Ioperation[] operations; public void doOperations(int choice, BookList booklist){ this.operations[choice].work(booklist); }对于用户public abstract int menu();//抽象类当中必须要明确权限只有接口当中才是省略的public abstract2.1.3.1管理员管理员里面要有自己的菜单public class AdmainUser extends User{ public AdmainUser(String name) { super(name); this.operationsnew Ioperation[]{ new ExitOperation(), new FindOperation(), new AddOperation(), new DelOperation(), new ShowOperation() }; } public int menu(){ System.out.println(********this.name管理员用户菜单****** ); System.out.println( 0. 退出系统 ); System.out.println( 1. 查找图书 ); System.out.println( 2. 新增图书 ); System.out.println( 3. 删除图书 ); System.out.println( 4. 显示图书 ); System.out.println(************************** ); System.out.println(请输入你的操作); Scanner scnew Scanner(System.in); int choicesc.nextInt(); return choice; } }2.1.3.2普通用户public class NormalUser extends User{ public NormalUser(String name) { super(name); this.operationsnew Ioperation[]{ new ExitOperation(), new FindOperation(), new BorrowOperation(), new ReturnOperation() }; } Override public int menu() { System.out.println(********this.name普通用户菜单****** ); System.out.println( 0. 退出系统 ); System.out.println( 1. 查找图书 ); System.out.println( 2. 借阅图书 ); System.out.println( 3. 归还图书 ); System.out.println(************************** ); System.out.println(请输入你的操作); Scanner scnew Scanner(System.in); int choicesc.nextInt(); return choice; } }2.2实现项目结构 2.2.1如何实现根据用户角色选择的不同分别调用各自的菜单列表 在主函数当中这样进行定义撰写一个登录方法public static User login(){ System.out.println(请输入你的姓名); Scanner scnew Scanner(System.in); String namesc.nextLine(); System.out.println(请输入你的身份1:管理员?2普通用户); int choicesc.nextInt(); if(choice1){ User admainnew AdmainUser(name); return admain; }else{ return new NormalUser(name); } }在psvm当中的调用public static void main(String[] args) { BookList bookListnew BookList();//实例化一个对象 User userlogin(); while(true) { int choice user.menu(); //要根据这个返回值来看调用了哪个对象的哪个方法 //1.哪个对象 // 已经进行了User userlogin(); // 2.哪个方法 // 就是user.doOperations(choice,bookList); user.doOperations(choice, bookList); } }其中对于这里我们首先要初始化一个书架对象BookList bookListnew BookList();直接调用User userlogin();这里有一个知识点就是运用了多态的思想向上转型因为User admainnew AdmainUser(name); return admain; }else{ return new NormalUser(name);他的返回值类型不统一一个是AdmainUser一个是NormalUser,只能通过他们的父类User进行接收所以对于login()方法他的返回值是User 。所以之后通过 user.menu();就可以实现了2.2.2如何实现根据用户选择的选项进行不同操作之间的调用首先观察这个操作对于用户还是管理员之间是有重叠部分的显然是有的但是为了避免方法的重复性我们可以将方法每一个分别包装在自己的类当中但是为了组织这些操作方法类我们该怎样进行组织呢通过接口接口是一个规范只要每一个操作方法类都遵循这一个规范就可以可以通过这一个接口来实现操作方法类的向上转型进而实现多态才能得到虽然是一个方法名但是是实现了不同的方法操作所以定义一个接口public interface Ioperation { void work(BookList booklist); }每一个操作方法类实现这一个方法work对于每一个不同用户操作的构成是不一样的那我们是怎样进行保证在User当中定义一个操作数组里面的每一个项都是一个操作方法实例对象 但是类型是接口的因为这些操作方法都实现了这个接口。protected Ioperation[] operations;然后对于不同的用户中分别进行定义定义的时候一定是在各自类的构造函数当中进行定义当实例化一个用户对象的时候就会调用管理员public AdmainUser(String name) { super(name); this.operationsnew Ioperation[]{ new ExitOperation(), new FindOperation(), new AddOperation(), new DelOperation(), new ShowOperation() }; }普通用户public NormalUser(String name) { super(name); this.operationsnew Ioperation[]{ new ExitOperation(), new FindOperation(), new BorrowOperation(), new ReturnOperation() }; }接下来在主方法当中接受菜单传来的选择int choice user.menu();最后是通过在User这里面定义一个方法来进行操作public void doOperations(int choice, BookList booklist){ this.operations[choice].work(booklist); }在Main当中进行调用user.doOperations(choice, bookList);以上是总流程~2.3部分代码AddOperationpackage Library.ioperation; import Library.book.Book; import Library.book.BookList; import java.util.Scanner; public class AddOperation implements Ioperation{ //判断书架是否是满的:在书架满的情况下就不能增加书籍了 Override public void work(BookList booklist) { int currentSizebooklist.getUesdSize(); if(currentSizebooklist.getBooks().length){ System.out.println(书架满了不能放书了); return; } System.out.println(实现了增加图书操作); System.out.println(请输入书籍的名称); Scanner scnew Scanner(System.in); String namesc.nextLine(); System.out.println(请输入书籍的作者); String authorsc.nextLine(); System.out.println(请输入书籍的价格); int pricesc.nextInt(); sc.nextLine(); System.out.println(请输入书籍的类型); String typesc.nextLine(); //实例化书籍 Book booknew Book(name,author,price,type); // 查看这个书架是否有这本书 for (int i 0; i currentSize; i) { Book bookibooklist.getBook(i); if(booki.getName().equals(name)){ System.out.println(存在这本书); return; } } //增加书籍 booklist.setBooks(currentSize,book); System.out.println(增加了书籍book); } }注意点就是其中查看这个书 的名字一定要用getName这个方法进行获取// 查看这个书架是否有这本书 for (int i 0; i currentSize; i) { Book bookibooklist.getBook(i); if(booki.getName().equals(name)){ System.out.println(存在这本书); return; } }2.4后续改进每次运行程序 上次运行的结果就没有了所以想存储数据1换成文件存储在文件当中2换成MySQL存储在数据库当中

相关新闻

PLL锁相环技术实现:SMIC55工艺下20MHz参考频率三阶二型CPPLL,快速锁定至1GM...

PLL锁相环技术实现:SMIC55工艺下20MHz参考频率三阶二型CPPLL,快速锁定至1GM...

pll锁相环 cppll cadence 三阶二型锁相环 工艺smic55 参考频率20MHz 分频比50 锁定频率1GMHz 锁定时间2us 环形振荡器 ring vco PFD模块 DIV模块 45分频,ps counter CP模块 工艺smic55最近在SMIC55工艺上折腾了个环形VCO的三阶二型锁相环,目标是把20…

2026/7/5 14:22:48 阅读更多 →
leetcode-hot100-7链表

leetcode-hot100-7链表

7.链表 文章目录 7.链表 160.相交链表 方法一:c(暴力解法) 方法一:js 方法二:c(哈希) 方法二:js 方法三:c(双指针) 方法三:js 206.反转链表 方法一:c++ 方法二:js 234.回文链表 方法一:c 方法一:js 方法二:c 方法二:js 方法三:c 方法三:js 141.环形链表 方…

2026/7/6 18:17:23 阅读更多 →
超级SIM卡 vs. eSIM卡:谁才是未来通信的主角?

超级SIM卡 vs. eSIM卡:谁才是未来通信的主角?

当你的一体式ETC无法识别时,你是否会怀念古早的插卡式ETC?——可断开的物理连接总是更让人心安。(图片来源:网络,侵删)概念起源:超级SIM卡是紫光国微创新推出,融合通信与大容量存储功…

2026/7/4 5:29:32 阅读更多 →

最新新闻

听歌不想只发截图?用MusicCard把喜欢的歌做成专属音乐海报

听歌不想只发截图?用MusicCard把喜欢的歌做成专属音乐海报

文章目录1.在极空间一键部署Music Card1.1ssh远程连接到极空间1.2安装docker1.3安装Music Card2.安装cpolar实现随时随地开发3.配置公网地址4.保留固定公网地址总结有些歌适合单曲循环,也适合被认真分享。只是很多时候,我们想表达的不只是“我在听这首歌…

2026/7/7 12:03:16 阅读更多 →
网盘直链下载助手完整指南:告别限速,一键获取真实下载链接

网盘直链下载助手完整指南:告别限速,一键获取真实下载链接

网盘直链下载助手完整指南:告别限速,一键获取真实下载链接 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国…

2026/7/7 11:57:12 阅读更多 →
如何免费解锁WeMod专业版:3个关键步骤与安全指南

如何免费解锁WeMod专业版:3个关键步骤与安全指南

如何免费解锁WeMod专业版:3个关键步骤与安全指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的高昂订阅费而烦恼吗&am…

2026/7/7 11:55:12 阅读更多 →
腾讯混元 Hy3 开源:多任务比肩大尺寸模型,多项指标显著优化

腾讯混元 Hy3 开源:多任务比肩大尺寸模型,多项指标显著优化

【导语:继 4 月底发布 Hy3 preview 后,腾讯混元 Hy3 现已开源,在推理、智能体、长上下文等任务上显著进步,多项指标优化明显,成为高性价比可靠选择。】混元 Hy3 开源:多维度升级亮点足 腾讯混元 Hy3 在发布…

2026/7/7 11:53:12 阅读更多 →
DAB单移相控制、双有源桥DCDC变换器(电压闭环)仿真(附参考文献)

DAB单移相控制、双有源桥DCDC变换器(电压闭环)仿真(附参考文献)

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、算法改进、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现私信🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、…

2026/7/7 11:53:12 阅读更多 →
Paperxie 毕业论文智能写作功能|一站式搞定本科硕博论文,告别熬夜凑稿难题

Paperxie 毕业论文智能写作功能|一站式搞定本科硕博论文,告别熬夜凑稿难题

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图毕业论文 - PaperXie智能写作PaperXieAi论文智能生成软件,10分钟生成万字毕业论文、期刊论文、文献综述、PPT,Aigc查重、降重报告、文献资料。只需一个标题,从开…

2026/7/7 11:49:11 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻