实现图书管理系统

1. 图书管理系统菜单

如上图给用户选项

1. 管理员

2. 普通用户

2. 实现基本框架

 右键点src,选择new,选择Package命名三个包  book  operation  user

1.先选择book包,new两个类 book  bookList 

在book类中定义书的基本属性,并重写toString方法,构造方法 ,以及实现成员变量的Getter and Setter方法

在bookList类中定义一个一个数组储存图书Book[],以及一个usedSize记录图书的数量,重写构造方法,并实现成员变量的Getter and Setter方法

 

 

 2. 选择operation包,创建一个接口并创建work方法(抽象方法),规范包中的类

package operation;import book.BookList;public interface IOperation {void work();
}

 

命名以上的类,并重写work方法

3. 选择user包,创建User类,AdminUser类,NormalUser类,让前者作为父类

在User类中定义name接受用户名,并创建抽象方法menu模拟进入程序

public abstract class User {protected String name;public User(String name) {this.name = name;}public abstract int menu();
}

程序的入口 

package book;
import user.*;
import java.util.Scanner;public class Main {public static User login(){Scanner scanner = new Scanner(System.in);System.out.println("请输入你的名字: ");String name = scanner.nextLine();System.out.println("请输入你的身份: ");System.out.println("1. 管理员        0. 普通用户");int choice = scanner.nextInt();if(choice == 1){AdminUser adminUser = new AdminUser(name);return adminUser;}else{NormalUser normalUser = new NormalUser(name);return normalUser;}}public static void main(String[] args) {BookList bookList = new BookList();User user = login();while (true){int choice = user.menu();user.doOperation(choice,bookList);}}
}

3. 实现业务 

3.1 借阅图书

package operation;import book.*;import java.util.Scanner;public class BorrowedOperation implements IOperation{public void work(BookList booklist) {System.out.println("借阅图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入书名;");String name = scanner.nextLine();int currentSize = booklist.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book1 = booklist.getBook(i);if(book1.getName().equals(name)) {if(!book1.isBorrowed()){book1.setBorrowed(true);System.out.println("借阅成功");}else{System.out.println("这本图书已经被借走了:");}return;}}System.out.println("书架上内有你要借阅的图书:");}
}

3.2 查找图书

package operation;import book.*;import java.util.Scanner;public class FindOperation implements IOperation{public void work(BookList booklist) {System.out.println("查找图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要查找的图书: ");String name = scanner.nextLine();int currentSize = booklist.getUsedSize();for (int i = 0; i < booklist.getUsedSize(); i++) {Book book = booklist.getBook(i);if(book.getName().equals(name)){System.out.println("找到了你要找的书: ");System.out.println(book);return;}}System.out.println("书架上没有这本书!");}
}

3.3 归还图书

package operation;import book.*;import java.util.Scanner;public class ReturnOperation implements IOperation{public void work(BookList booklist) {System.out.println("归还图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入书名;");String name = scanner.nextLine();int currentSize = booklist.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book1 = booklist.getBook(i);if(book1.getName().equals(name)){if(!book1.isBorrowed()){System.out.println("这本图书没有被借走");}else{book1.setBorrowed(false);System.out.println("归还成功");}return;}}System.out.println("没有你要归还的图书");}
}

3.4 新增图书

package operation;import book.*;import java.util.Scanner;public class AddOperation implements IOperation{@Overridepublic void work(BookList booklist) {System.out.println("增加图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入书名;");String name = scanner.nextLine();System.out.println("请输入作者名;");String author = scanner.nextLine();System.out.println("请输入价格;");int price = scanner.nextInt();scanner.nextLine();System.out.println("请输入类型;");String style = scanner.nextLine();Book book = new Book(name,author,price,style);int currentSize = booklist.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book1 = booklist.getBook(i);if(book1.getName().equals(name)){System.out.println("书架上已经有这本书了");return;}}booklist.setBook(currentSize,book);booklist.setUsedSize(currentSize+1);}
}

3.5 删除图书

package operation;import book.*;import java.util.Scanner;public class DelOperation implements IOperation{public void work(BookList booklist) {System.out.println("删除图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要删除的图书;");String name = scanner.nextLine();int currentSize = booklist.getUsedSize();if(currentSize == 0){System.out.println("书架为空:");return;}int index = -1;for (int i = 0; i < currentSize; i++) {Book book1 = booklist.getBook(i);if(book1.getName().equals(name)) {index = i;break;}}if(index == -1){System.out.println("书架上没有这本书:");return;}for (int i = index; i < currentSize; i++) {Book book1 = booklist.getBook(i+1);booklist.setBook(i,book1);}booklist.setUsedSize(currentSize-1);}
}

3.6 显示图书

package operation;import book.*;public class ShowOperation implements IOperation{public void work(BookList booklist) {System.out.println("展示图书");int currentSize = booklist.getUsedSize();for (int i = 0; i < booklist.getUsedSize(); i++) {Book book = booklist.getBook(i);System.out.println(book);}}
}

3.7 退出系统

package operation;import book.Book;
import book.BookList;public class ExitOperation implements IOperation{public void work(BookList booklist) {System.out.println("退出系统");for (int i = 0; i < booklist.getUsedSize(); i++) {booklist.setBook(i,null);}booklist.setUsedSize(0);System.exit(0);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/2806.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

黑马官网最新2024前端就业课V8.5笔记---CSS篇(1)

Css 定义 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容) Css 引入方式 内部样式表&#xff1a; CSS 代码写在 style 标签里面 外部样式表: 开发使用 CSS 代码写在单独的 CSS 文件中(.css) 在 HTML 使用 link …

下载pytorch报错:没有发现某个版本

报错如下&#xff1a; 解决&#xff1a; 降级python版本&#xff0c;显卡小于等于 11.3 时&#xff0c;下载pytorch gpu时&#xff0c;python版本选择&#xff1a;3.7即可。

cuda、pytorch-gpu安装踩坑!!!

前提&#xff1a;已经安装了acanoda cuda11.6下载 直接搜索cuda11.6 acanoda操作 python版本3.9 conda create -n pytorch python3.9conda activate pytorch安装Pytorch-gpu版本等包 要使用pip安装&#xff0c;cu116cuda11.6版本 pip install torch1.13.1cu116 torchvi…

音视频入门基础:H.264专题(17)——FFmpeg源码中,获取H.264视频的profile的实现

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

LeetCode --- 421周赛

题目列表 3334. 数组的最大因子得分 3335. 字符串转换后的长度 I 3336. 最大公约数相等的子序列数量 3337. 字符串转换后的长度 II 一、数组的最大因子得分 数据范围足够小&#xff0c;可以用暴力枚举移除的数字&#xff0c;得到答案&#xff0c;时间复杂度为O(n^2)&#…

Linux下Java的多种方式安装

Linux下Java的多种方式安装 博客&#xff1a; www.lstar.icu 开源地址 Gitee 地址&#xff1a; https://gitee.com/lxwise/iris-blog_parent Github 地址&#xff1a; https://github.com/lxwise/iris-blog_parent 序言 Java是一门面向对象的编程语言&#xff0c;不仅吸收了…

易灵思fpga pwm生成报错

避免复杂总线 选择正确板子 这个是是全部执行 但是不会自动保存 注意设置 或者使用其他文本显示工具 可能约束会掉 注意复位后没有程序 注意软件不同电脑可能报错 问题未知 尽量简单逻辑

JavaEE初阶--servlet篇(三)HttpServlet/response/request对应方法使用

文章目录 1.总括说明2.httpservlet父类2.1方法介绍2.2dopost方法的演示2.3doput方法的演示 3.HttpServletRequest类3.1方法说明3.2方法使用演示3.3getparameter方法使用3.4使用form表单的方式3.5jackson获取参数 4.HttpResponse类4.1设置状态码4.2自动进行刷新4.3重定向跳转4.3…

矩阵起源 CEO 王龙出席 1024 超互联(苏州)总部节点发布会

10月24日&#xff0c;矩阵起源 CEO & 创始人王龙出席了由中关村超互联新基建产业创新联盟、数字人民币研究院联合主办&#xff0c;世纪互联承办的“超互联&#xff08;苏州&#xff09;总部节点发布会”&#xff0c;并分享了矩阵起源及世纪互联在多模态AI数据智能平台与超互…

大数据-202 数据挖掘 机器学习理论 - 决策树 sklearn 绘制决策树 防止过拟合

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

LTE及EPC技术原理(笔记)

无线网络发展历史 20世纪80年代&#xff1a;模拟技术和FDMA 20世纪90年代&#xff1a;数字技术和TDMA 21世纪初&#xff1a;数字技术和CDMA LTE进步 下行100Mbps&#xff0c;上行50Mbps 用户面时延10-20ms&#xff0c;控制面时延小于100ms 带宽从1.4MHz~20MHz&#xff0…

域用户账户与域组账户管理实战

Windows Server 通过建立账户(包括用户账户和组账户)并赋予账户合适的权限&#xff0c;保证使用网络和计算机资源的合法性&#xff0c;以确保数据访问、存储和交换服从安全需要。 如果是单纯的工作组模式的网络&#xff0c;需要使用“计算机管理”工具来管理本地用户和组&#…

C++类与对象(中)

类的默认成员函数 1. 默认成员函数&#xff0c;就是用户没有去显式实现&#xff0c;而编译器会自动生成的成员函数。 2. 对于⼀个类&#xff0c;一般情况下&#xff0c;编译器会默认生成6个默认成员函数。我们主要学习前面4个默认成员函数&#xff0c;对于后面两个默认成员函数…

HFSS 3D Layout中Design setting各个选项的解释

从HFSS 3D LAYOUT菜单中&#xff0c;选择Design Settings打开窗口&#xff0c;会有六个选项&#xff1a;DC Extrapolation, Nexxim Options, Export S Parameters, Lossy Dielectrics, HFSS Meshing Method, and HFSS Adaptive Mesh. DC Extrapolation 直流外推 直流外推分为标…

Python绘制爱心

文章目录 系列目录写在前面技术需求完整代码代码分析写在后面 系列目录 序号直达链接爱心系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代…

C++ | Leetcode C++题解之第538题把二叉搜索树转换为累加树

题目&#xff1a; 题解&#xff1a; class Solution { public:TreeNode* getSuccessor(TreeNode* node) {TreeNode* succ node->right;while (succ->left ! nullptr && succ->left ! node) {succ succ->left;}return succ;}TreeNode* convertBST(TreeNo…

Linux基础命令(十)之 压缩命令 zip,gzip,bzip2,xz,tar

目录 一&#xff0c;zip和unzip 常见用法 二&#xff0c;gzip和ungzip命令 常见用法 三&#xff0c;bzip2和bunzip2命令 常见用法 四&#xff0c;xz和unxz命令 常见用法 五&#xff0c;归档命令tar 参数及其作用 常见用法 一&#xff0c;zip和unzip 语法&#xff1a;…

已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘

部署GPTSoVITS过程中&#xff0c;开启一键三连进程发生&#xff0c;报错AsyncRequest object has no attribute _json_response_data 具体报错内容为 (GPTSoVITS) PS D:\Code\GPT-SoVITS-beta0706> python webui.py Running on local URL: http://0.0.0.0:9874 IMPORTANT:…

ISUP协议视频平台EasyCVR视频融合平台接入各类摄像机的方法

安防视频监控ISUP协议视频平台EasyCVR兼容性强、支持灵活拓展&#xff0c;平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 想要将摄像机顺利接入EasyCVR平台&#xff0c;实现视频监控的集中管理和分发&#x…

to_sql报错not all arguments converted during string formatting

报错&#xff1a; DatabaseError: Execution failed on sql SELECT name FROM sqlite_master WHERE typetable AND name?;: not all arguments converted during string formattingb 报错的代码如下&#xff1a; import pymysql import pandas as pd con pymysql.connect(…