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…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
