java idea中做一个简易的图书管理系统(控制台输入输出,无数据库)
1:先创建增删改查四个接口
(1)QueryBook查询接口
package com.by.dao;import com.by.entity.Book;public interface QueryBook {/*** 查询所有图书信息* @param bs*/void selectBook(Book[] bs);/*** 根据名字查询一个图书信息* @param bookName* @param bs*/void selectBookByBookname(String bookName,Book[] bs);
}
(2)AddBook 增加接口
package com.by.dao;import com.by.entity.Book;public interface AddBook {/*** 在原图书数组末尾添加一个图书信息* @param book 被添加的图书对象* @param bs 图书数组* @return*/Book [] insertBook(Book book,Book[] bs);
}
(3)RemoveBook删除接口
package com.by.dao;import com.by.entity.Book;public interface RemoveBook {/*** 删除指定图书对象* @param bookName 删除的图书名,图书对象* @param bs 返回的数组* @return*/Book[] deleteBooksByName(String bookName, Book[] bs);
}
(4)UpdateBook修改接口
package com.by.dao;import com.by.entity.Book;public interface UpdateBook {/*** 根据图书名修改图书信息* @param bookName 图书名* @param bs 数组中内容改变*/void setBookByName(String bookName,Book book,Book []bs);
}
2:创建用户类实现查询接口
package com.by.entity;import com.by.dao.QueryBook;import java.util.Scanner;public class User implements QueryBook {private String userName;private String password;public User() {}public User(String userName, String password) {this.userName = userName;this.password = password;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic void selectBook(Book[] bs) {for (int i = 0; i <bs.length; i++) {System.out.println("图书名"+bs[i].getBookName()+" , "+"作者名"+bs[i].getBookAuthor()+" , "+"价格"+bs[i].getBookPrice()+" , "+"库存"+bs[i].getBookInventory());}}@Overridepublic void selectBookByBookname(String bookName, Book[] bs) {for (int i = 0; i <bs.length ; i++) {if (bookName.equals(bs[i].getBookName())){System.out.println("图书名"+bs[i].getBookName()+" , "+"作者名"+bs[i].getBookAuthor()+" , "+"价格"+bs[i].getBookPrice()+" , "+"库存"+bs[i].getBookInventory());}}}/* Scanner sc=new Scanner(System.in);public void login(){System.out.println("欢迎使用图书管理系统,请先登录");Scanner sc=new Scanner(System.in);System.out.println("请输入用户名:");String name=sc.nextLine();if (name.equals(this.userName)){System.out.println("请输入密码:");String password=sc.nextLine();if(password.equals(this.password)){System.out.println("登录成功");}else{System.out.println("用户名或密码有误");}}else{System.out.println("请输入密码:");String password1=sc.nextLine();System.out.println("用户名或密码错误");}*//*else {System.out.println("用户名错误");}*//*}*//* public void selectBook(){System.out.println("请输入操作指令");int num=sc.nextInt();switch (num){case 1:case 2:}}*/
}
3:创建普通用户继承用户,管理员账户继承用户类并实现增删改接口
(1)普通用户NormalUser类
package com.by.entity;import com.by.dao.QueryBook;import java.util.Scanner;public class NormalUser extends User {public NormalUser() {}public NormalUser(String userName, String password) {super(userName, password);}/* @Overridepublic void login() {System.out.println("欢迎使用图书管理系统,请先登录");Scanner sc=new Scanner(System.in);System.out.println("请输入用户名:");String name=sc.nextLine();if (name.equals(this.getUserName())){System.out.println("请输入密码:");String password=sc.nextLine();if(password.equals(this.getPassword())){System.out.println("登录成功");}else{System.out.println("用户名或密码有误");}}else{System.out.println("请输入密码:");String password1=sc.nextLine();System.out.println("用户名或密码错误");}}*/
}
(2)管理员用户AdminUser类
package com.by.entity;import com.by.dao.AddBook;
import com.by.dao.QueryBook;
import com.by.dao.RemoveBook;
import com.by.dao.UpdateBook;import java.util.Scanner;public class AdminUser extends User implements AddBook, UpdateBook, RemoveBook {public AdminUser() {}public AdminUser(String userName, String password) {super(userName, password);}Scanner sc = new Scanner(System.in);@Overridepublic Book[] insertBook(Book book, Book[] bs) {Book[] bs1 = new Book[bs.length + 1];for (int i = 0; i < bs.length; i++) {bs1[i] = bs[i];}bs1[bs.length] = book;return bs1;}@Overridepublic Book[] deleteBooksByName(String bookName, Book[] bs) {Book[] bs2 = new Book[bs.length - 1];for (int i = 0; i < bs.length; i++) {if (bs[i].getBookName().equals(bookName)) {for (int i1 = i; i1 < bs2.length; i1++) {bs2[i] = bs[i + 1];}} else {bs2[i] = bs[i];}}return bs2;}/* @Overridepublic void setBookByName(String bookName,Book[] bs) {for (int i=0;i< bs.length;i++){if (bookName.equals(bs[i].getBookName())){bs[i]=book;}}}*/@Overridepublic void setBookByName(String bookName, Book book, Book[] bs) {for (int i = 0; i < bs.length; i++) {if (bookName.equals(bs[i].getBookName())) {bs[i] = book;}}// @Override
// public void setBookByName(String bookName, Book[] bs) {
//
// }/* @Overridepublic void login() {System.out.println("欢迎使用图书管理系统,请先登录");Scanner sc=new Scanner(System.in);System.out.println("请输入用户名:");String name=sc.nextLine();if (name.equals(this.getUserName())){System.out.println("请输入密码:");String password=sc.nextLine();if(password.equals(this.getPassword())){System.out.println("登录成功");System.out.println("请输入操作:1:添加图书");insertBook();}else{System.out.println("用户名或密码有误");}}else{System.out.println("请输入密码:");String password1=sc.nextLine();System.out.println("用户名或密码错误");}}@Overridepublic void selectBook() {System.out.println("请输入操作指令");int num=sc.nextInt();switch (num) {case 1:case 2:case 3:case 4:case 5:}}*/}
}
4:创建图书类存放图书的属性
package com.by.entity;public class Book {private String bookName;private String bookAuthor;private double bookPrice;private int bookInventory;//库存public Book(){}public Book(String bookName,String bookAuthor,double bookPrice,int bookInventory){this.bookName=bookName;this.bookAuthor=bookAuthor;this.bookPrice=bookPrice;this.bookInventory=bookInventory;}public String getBookName(){return bookName;}public void setBookName(String bookName){this.bookName=bookName;}public String getBookAuthor() {return bookAuthor;}public void setBookAuthor(String bookAuthor) {this.bookAuthor = bookAuthor;}public double getBookPrice() {return bookPrice;}public void setBookPrice(double bookPrice) {this.bookPrice = bookPrice;}public int getBookInventory() {return bookInventory;}public void setBookInventory(int bookInventory) {this.bookInventory = bookInventory;}
}
5:创建测试类测试
package com.by.test;import com.by.entity.AdminUser;
import com.by.entity.NormalUser;
import com.by.entity.User;
import com.by.entity.Book;import java.sql.SQLOutput;
import java.util.Scanner;public class MainTest {public static void main(String[] args) {User[] users = {new AdminUser("张三", "123"), new NormalUser("李四", "321"),new NormalUser("王五", "456"), new NormalUser("haha", "123")};Book[] bs = {new Book("西游记", "吴承恩", 49.9, 999),new Book("三国演义", "罗贯中", 48.9, 888),new Book("水浒传", "施耐庵", 47.9, 777),new Book("红楼梦", "曹雪芹", 46.9, 666)};User user = login(users);fonction(user, bs);}public static User login(User[] users) {boolean result = false;System.out.println("欢迎使用图书管理系统,请先登录");Scanner sc = new Scanner(System.in);System.out.println("请输入用户名:");String name = sc.nextLine();System.out.println("请输入密码:");String password = sc.nextLine();for (int i = 0; i < users.length; i++) {if (name.equals(users[i].getUserName()) && password.equals(users[i].getPassword())) {System.out.println("登录成功");result = true;return users[i];}}System.out.println("用户名或密码错误,登录失败!");return null;}public static void fonction(User user, Book[] bs) {boolean a=true;while(a) {System.out.println("请选择你要进行的操作:1,查看所有图书信息 2。查看指定图书信息 " +" 3,添加图书信息 4,修改图书信息 5,删除图书信息 6,退出");Scanner scanner = new Scanner(System.in);int sum = scanner.nextInt();switch (sum) {case 1:user.selectBook(bs);break;case 2:System.out.println("请输入图书名:");String name = scanner.next();user.selectBookByBookname(name, bs);break;case 3:if (isAdmin(user)) {AdminUser adminUser = (AdminUser) user;System.out.println("请输入书名:");String bookName = scanner.next();System.out.println("作者");String author = scanner.next();System.out.println("请输入价格");double price = scanner.nextDouble();System.out.println("请输入库存");int kucun = scanner.nextInt();Book book = new Book(bookName, author, price, kucun);Book[] bs1 = adminUser.insertBook(book, bs);user.selectBook(bs1);} else {System.out.println("对不起,您太拉了,权限不够");}break;case 4:if (isAdmin(user)) {System.out.println("请输入你要修改的图书");String byname = scanner.next();AdminUser adminUser = (AdminUser) user;System.out.println("请输入改成的图书名");String gaiName=scanner.next();System.out.println("请输入作者");String author=scanner.next();System.out.println("请输入价格");double price=scanner.nextDouble();System.out.println("请输入库存");int kucun=scanner.nextInt();Book book=new Book(gaiName,author,price,kucun);adminUser.setBookByName(byname, book,bs);user.selectBook(bs);} else {System.out.println("对不起,您太拉了,权限不够");}break;case 5:if (isAdmin(user)) {System.out.println("请输入要删除的图书");String deleteName = scanner.next();AdminUser adminUser = (AdminUser) user;Book[] bs2=adminUser.deleteBooksByName(deleteName, bs);user.selectBook(bs2);break;}case 6:System.out.println("欢饮下次使用!");a=false;break;default:System.out.println("输入有误,请重新输入");break;}}}public static boolean isAdmin(User user) {if (user instanceof AdminUser) {return true;} else {return false;}}}
相关文章:
java idea中做一个简易的图书管理系统(控制台输入输出,无数据库)
1:先创建增删改查四个接口 (1)QueryBook查询接口 package com.by.dao;import com.by.entity.Book;public interface QueryBook {/*** 查询所有图书信息* param bs*/void selectBook(Book[] bs);/*** 根据名字查询一个图书信息* param bookN…...
C# PrinterSettings修改打印机纸张类型,paperType
需求:直接上图,PrinterSettings只能改变纸张大小,打印质量,无法更改打印纸类型 爱普生打印机打印照片已经设置了最高质量,打印图片仍不清晰,需要修改打印纸类型,使用PrintDialog调出对话框&…...
TV端Web页面性能优化实践
01 背景 随着互联网技术的持续创新和电视行业的高速发展,通过电视观看在线视频已经逐渐成为大众的重要娱乐方式。奇异果App作为在TV设备上用户活跃度最高的应用之一,为广大用户提供了丰富的内容播放服务,除此之外,同样有会员运营、…...
2023年终总结
前言: 嘻嘻,12月底广州降温了又到了写年终总结的时间,这也是我第二年写年终总结。今年的年终总结主要记录了我大三下学期和大四上学期这两个时间段的学习和收获,也是我尝试走出校园,接触社会的第一年(感触…...
深入探索MongoDB集群模式:从高可用复制集
MongoDB复制集概述 MongoDB复制集主要用于实现服务的高可用性,与Redis中的哨兵模式相似。它的核心作用是数据的备份和故障转移。 复制集的主要功能 数据复制:数据写入主节点(Primary)时,自动复制到一个或多个副本节…...
gem5学习(8):创建一个简单的缓存对象--Creating a simple cache object
目录 一、SimpleCache SimObject 二、Implementing the SimpleCache 1、getSlavePort() 2、handleRequest() 3、AccessEvent() 4、accessTiming() (1)缓存命中:sendResponse() (2)缓存未命中: 三、…...
【PTA-C语言】实验七-函数与指针I
如果代码存在问题,麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 目录——实验七-函数与指针I 6-1 弹球距离(分数 10)6-2 使用函数输出一个整数的逆序数(分数 10)6-3 使用函数求最大公约数(分数 10)6-4…...
C# 让数据保留小数后两位,不足的补充0
在C#中,可以使用Math.Floor、Math.Ceiling或者Math.Round方法结合字符串格式化来实现小数点后两位的保留,并在不足的情况下补充0。 以下是一个例子: double value 1.2345; string formattedValue value.ToString("0.00"); // 输…...
RK3568驱动指南|第九篇 设备模型-第92章 引用计数器实验
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...
苹果电脑Dock栏优化软件 mac功能亮点
hyperdock mac是一款Dock优化软件,hyperdock支持使用窗口自动排列功能,您可以直接通过将窗口拖拉至屏幕上方来快速最大化至全屏,又或者拖动到左右来进行左分屏和右分屏。而且Dock优化软件还有一个特色便是对Dock的强大管理哪里能力࿰…...
【UE5蓝图】读取本地json文件修改窗口大小
效果 插件 蓝图 1.判断文件存在 2.1文件不存在,生成文件 {"ResolutionX":540, "ResolutionY":960} 2.2文件存在,直接读取 3.设置窗口大小 遇到的坑 1.分辨率太大,导致效果不理想,建议先往小填写。 2.选对…...
ACM32F403/F433 12 位多通道国产芯片,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中
ACM32F403/F433 芯片的内核基于 ARMv8-M 架构,支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理,支持单精度FPU处理浮点数据,同时还支持Memory Protection Unit (MPU)用于提升应用的…...
2024最新前端React面试题:JSX是什么,它和JS有什么区别
JSX是什么,它和JS有什么区别 回答思路:1.编写方式--->2.分别是什么?--->3.分别是怎么编译的?1.编写方式2.分别是什么?3.分别是怎么编译的? 回答思路:1.编写方式—>2.分别是什么&#x…...
3d导入模型怎样显示原本材质---模大狮模型网
要在导入3D模型时保留原本的材质,您可以尝试以下方法: 导入前检查文件格式:确保您所使用的3D软件支持导入模型的文件格式。不同的软件对文件格式的支持有所差异,选择正确的文件格式可以更好地保留原始材质。 使用正确的材质库&am…...
web前端开发网页制作html/css结课作业
效果图展示: 注意事项: 引用JQuery文件地址和图片地址要更换一下。 百度网盘链接: http://链接:https://pan.baidu.com/s/1wYkmLr7csjBwQY6GmlYm4Q?pwd4332 提取码:4332 html界面展示: main.css代码部…...
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
工业相机如何实现实时和本地Raw图像和Bitmap图像的保存和相互转换(C#代码,UI界面版) 工业相机图像格式工业相机实现Raw图像和Bitmap图像的保存和转换的技术背景在相机SDK中获取图像转换图像的代码分析工业相机回调函数里保存Bitmap图像数据工…...
C++初阶------------------入门C++
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...
深度学习核心技术与实践之自然语言处理篇
非书中全部内容,只是写了些自认为有收获的部分。 自然语言处理简介 NLP的难点 (1)语言有很多复杂的情况,比如歧义、省略、指代、重复、更正、倒序、反语等 (2)歧义至少有如下几种: …...
AI-ChatGPTCopilot
ChatGPT chatGPT免费网站列表:GitHub - LiLittleCat/awesome-free-chatgpt: 🆓免费的 ChatGPT 镜像网站列表,持续更新。List of free ChatGPT mirror sites, continuously updated. Copilot 智能生成代码工具 安装步骤 - 登录 github&am…...
网络安全-真实ip获取伪造与隐藏挖掘
目录 真实ip获取应用层网络层网络连接TOAproxy protocol ip伪造应用层网络层TOA攻击proxy protocol 隐藏代理 挖掘代理多地ping历史DNS解析记录国外主机解析域名网站RSS订阅网络空间搜索引擎 总结参考 本篇文章学习一下如何服务如何获取真实ip,隐藏自己的ip…...
Boss-Key:Windows下一键隐藏窗口的终极隐私保护工具
Boss-Key:Windows下一键隐藏窗口的终极隐私保护工具 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在数字化办公时代…...
Adobe-GenP激活工具:5分钟解锁Adobe创意套件全功能
Adobe-GenP激活工具:5分钟解锁Adobe创意套件全功能 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP是一款专为Adobe Creative Cloud用户设计的…...
解决企业级日期处理难题:Vue3-DateTime-Picker的现代化架构设计与实战应用
解决企业级日期处理难题:Vue3-DateTime-Picker的现代化架构设计与实战应用 【免费下载链接】vue3-date-time-picker Datepicker component for Vue 3 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-date-time-picker Vue3-DateTime-Picker是一款基于Vue…...
ZipCPU/dspfilters:轻量级C++ IIR滤波器库的设计原理与嵌入式应用
1. 项目概述:从零开始理解一个数字信号处理滤波器库最近在整理一些嵌入式音频处理的项目,又翻出了ZipCPU/dspfilters这个仓库。这其实是一个在GitHub上存在了相当一段时间的C数字信号处理(DSP)滤波器库,由ZipCPU&#…...
2025届必备的十大AI写作工具实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 为科研从业者、学子以及技术研发人员,在人工智能领域,合规可靠的AI论…...
将随身WiFi变身微型服务器:基于高通410芯片刷入Debian实战
1. 为什么选择高通410随身WiFi改服务器? 去年我在整理抽屉时翻出三个闲置的随身WiFi设备,突然想到:这些搭载高通410芯片的小玩意,能不能变成微型Linux服务器?经过两周的折腾,不仅成功刷入Debian系统&#x…...
终极指南:调度系统架构设计的核心原理与实践技巧
终极指南:调度系统架构设计的核心原理与实践技巧 【免费下载链接】system-design-101 Explain complex systems using visuals and simple terms. Help you prepare for system design interviews. 项目地址: https://gitcode.com/GitHub_Trending/sy/system-desi…...
终极开源Spotify音乐下载指南:永久保存你的音乐收藏
终极开源Spotify音乐下载指南:永久保存你的音乐收藏 【免费下载链接】spotify-downloader Download your Spotify playlists and songs along with album art and metadata (from YouTube if a match is found). 项目地址: https://gitcode.com/gh_mirrors/spotif…...
保姆级教程:在HCL模拟器上给H3C路由器配置DHCP服务器(双网段实战)
从零构建H3C路由器双网段DHCP服务:模拟器实战与协议解析 在虚拟实验室中搭建网络环境已成为现代工程师的必备技能,而DHCP服务作为网络自动化的基石,其配置过程往往成为初学者接触企业级设备的第一个实战挑战。本文将使用H3C官方推出的HCL模拟…...
基于大语言模型的自动化代码审查实践:AutoReviewer部署与调优指南
1. 项目概述:当代码审查遇上AI,一场效率革命 在软件开发的日常中,代码审查(Code Review)是保障代码质量、促进知识共享、统一团队编码风格的关键环节。然而,对于许多开发团队,尤其是中小团队或…...
