当前位置: 首页 > news >正文

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&#xff1a;先创建增删改查四个接口 &#xff08;1&#xff09;QueryBook查询接口 package com.by.dao;import com.by.entity.Book;public interface QueryBook {/*** 查询所有图书信息* param bs*/void selectBook(Book[] bs);/*** 根据名字查询一个图书信息* param bookN…...

C# PrinterSettings修改打印机纸张类型,paperType

需求&#xff1a;直接上图&#xff0c;PrinterSettings只能改变纸张大小&#xff0c;打印质量&#xff0c;无法更改打印纸类型 爱普生打印机打印照片已经设置了最高质量&#xff0c;打印图片仍不清晰&#xff0c;需要修改打印纸类型&#xff0c;使用PrintDialog调出对话框&…...

TV端Web页面性能优化实践

01 背景 随着互联网技术的持续创新和电视行业的高速发展&#xff0c;通过电视观看在线视频已经逐渐成为大众的重要娱乐方式。奇异果App作为在TV设备上用户活跃度最高的应用之一&#xff0c;为广大用户提供了丰富的内容播放服务&#xff0c;除此之外&#xff0c;同样有会员运营、…...

2023年终总结

前言&#xff1a; 嘻嘻&#xff0c;12月底广州降温了又到了写年终总结的时间&#xff0c;这也是我第二年写年终总结。今年的年终总结主要记录了我大三下学期和大四上学期这两个时间段的学习和收获&#xff0c;也是我尝试走出校园&#xff0c;接触社会的第一年&#xff08;感触…...

深入探索MongoDB集群模式:从高可用复制集

MongoDB复制集概述 MongoDB复制集主要用于实现服务的高可用性&#xff0c;与Redis中的哨兵模式相似。它的核心作用是数据的备份和故障转移。 复制集的主要功能 数据复制&#xff1a;数据写入主节点&#xff08;Primary&#xff09;时&#xff0c;自动复制到一个或多个副本节…...

gem5学习(8):创建一个简单的缓存对象--Creating a simple cache object

目录 一、SimpleCache SimObject 二、Implementing the SimpleCache 1、getSlavePort() 2、handleRequest() 3、AccessEvent() 4、accessTiming() &#xff08;1&#xff09;缓存命中&#xff1a;sendResponse() &#xff08;2&#xff09;缓存未命中&#xff1a; 三、…...

【PTA-C语言】实验七-函数与指针I

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 目录——实验七-函数与指针I 6-1 弹球距离&#xff08;分数 10&#xff09;6-2 使用函数输出一个整数的逆序数&#xff08;分数 10&#xff09;6-3 使用函数求最大公约数&#xff08;分数 10&#xff09;6-4…...

C# 让数据保留小数后两位,不足的补充0

在C#中&#xff0c;可以使用Math.Floor、Math.Ceiling或者Math.Round方法结合字符串格式化来实现小数点后两位的保留&#xff0c;并在不足的情况下补充0。 以下是一个例子&#xff1a; double value 1.2345; string formattedValue value.ToString("0.00"); // 输…...

RK3568驱动指南|第九篇 设备模型-第92章 引用计数器实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…...

苹果电脑Dock栏优化软件 mac功能亮点

hyperdock mac是一款Dock优化软件&#xff0c;hyperdock支持使用窗口自动排列功能&#xff0c;您可以直接通过将窗口拖拉至屏幕上方来快速最大化至全屏&#xff0c;又或者拖动到左右来进行左分屏和右分屏。而且Dock优化软件还有一个特色便是对Dock的强大管理哪里能力&#xff0…...

【UE5蓝图】读取本地json文件修改窗口大小

效果 插件 蓝图 1.判断文件存在 2.1文件不存在&#xff0c;生成文件 {"ResolutionX":540, "ResolutionY":960} 2.2文件存在&#xff0c;直接读取 3.设置窗口大小 遇到的坑 1.分辨率太大&#xff0c;导致效果不理想&#xff0c;建议先往小填写。 2.选对…...

ACM32F403/F433 12 位多通道国产芯片,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理&#xff0c;支持单精度FPU处理浮点数据&#xff0c;同时还支持Memory Protection Unit &#xff08;MPU&#xff09;用于提升应用的…...

2024最新前端React面试题:JSX是什么,它和JS有什么区别

JSX是什么&#xff0c;它和JS有什么区别 回答思路&#xff1a;1.编写方式--->2.分别是什么&#xff1f;--->3.分别是怎么编译的&#xff1f;1.编写方式2.分别是什么&#xff1f;3.分别是怎么编译的&#xff1f; 回答思路&#xff1a;1.编写方式—>2.分别是什么&#x…...

3d导入模型怎样显示原本材质---模大狮模型网

要在导入3D模型时保留原本的材质&#xff0c;您可以尝试以下方法&#xff1a; 导入前检查文件格式&#xff1a;确保您所使用的3D软件支持导入模型的文件格式。不同的软件对文件格式的支持有所差异&#xff0c;选择正确的文件格式可以更好地保留原始材质。 使用正确的材质库&am…...

web前端开发网页制作html/css结课作业

效果图展示&#xff1a; 注意事项&#xff1a; 引用JQuery文件地址和图片地址要更换一下。 百度网盘链接&#xff1a; http://链接&#xff1a;https://pan.baidu.com/s/1wYkmLr7csjBwQY6GmlYm4Q?pwd4332 提取码&#xff1a;4332 html界面展示&#xff1a; main.css代码部…...

工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)

工业相机如何实现实时和本地Raw图像和Bitmap图像的保存和相互转换&#xff08;C#代码&#xff0c;UI界面版&#xff09; 工业相机图像格式工业相机实现Raw图像和Bitmap图像的保存和转换的技术背景在相机SDK中获取图像转换图像的代码分析工业相机回调函数里保存Bitmap图像数据工…...

C++初阶------------------入门C++

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…...

深度学习核心技术与实践之自然语言处理篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分。 自然语言处理简介 NLP的难点 &#xff08;1&#xff09;语言有很多复杂的情况&#xff0c;比如歧义、省略、指代、重复、更正、倒序、反语等 &#xff08;2&#xff09;歧义至少有如下几种&#xff1a; …...

AI-ChatGPTCopilot

ChatGPT chatGPT免费网站列表&#xff1a;GitHub - LiLittleCat/awesome-free-chatgpt: &#x1f193;免费的 ChatGPT 镜像网站列表&#xff0c;持续更新。List of free ChatGPT mirror sites, continuously updated. Copilot 智能生成代码工具 安装步骤 - 登录 github&am…...

网络安全-真实ip获取伪造与隐藏挖掘

目录 真实ip获取应用层网络层网络连接TOAproxy protocol ip伪造应用层网络层TOA攻击proxy protocol 隐藏代理 挖掘代理多地ping历史DNS解析记录国外主机解析域名网站RSS订阅网络空间搜索引擎 总结参考 本篇文章学习一下如何服务如何获取真实ip&#xff0c;隐藏自己的ip&#xf…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...