当前位置: 首页 > 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…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...