java实现简单的图书管理系统「建议收藏」

java实现简单的图书管理系统「建议收藏」一、项目分布Book类:定义了书的一些属性(书名,作者,价格,分类,状态)并且写了属性的get、set方法Library类:写了登录函数(1、普通用户,2、管理员,3、退出系统),Person类:定义的人的属性(姓名,性别,年龄)并且写了属性的get、set方法,定义了一些书。operate接口:操作的接口,操作方法:查询/查阅,删除/借阅,增加/还书,显示书籍列表Root类:继承…

大家好,又见面了,我是你们的朋友全栈君。

一、项目分布

在这里插入图片描述
Book类: 定义了书的一些属性(书名,作者,价格,分类,状态)并且写了属性的get、set方法
Library类: 写了登录函数(1、普通用户,2、管理员,3、退出系统),
Person类:定义的人的属性(姓名,性别,年龄)并且写了属性的get、set方法,定义了一些书。
operate接口:操作的接口,操作方法:查询/查阅,删除/借阅,增加/还书,显示书籍列表
Root类:继承了Person类,实现operate(查阅,删除,增加,显示书籍列表)接口
User类:继承了Person类,实现operate(查询,借阅,还书,显示书籍列表)接口
Main类:Main中的主函数开启整个项目。

模型图:

在这里插入图片描述
声明: 本项目只是一个简单的面向对象入门小项目,有一些基础理论需要掌握,比如对象,类,抽象类,接口,继承,实现,数组及数组的操作,for循环,while循环,switch语句,if语句。

二、代码展示:

  1. Book类
public class Book { 
   
	private String name; //书名
	private String author; //作者
	public double price; //价格
	private String category; //分类
	private boolean state; //状态 true-未借出 false-已借出

	//通过构造函数给定书的属性
	public Book(String name,String author,double price,String category,boolean state){ 
   
		this.author = author;
		this.name = name;
		this.price = price;
		this.category = category;
		this.state = state;
	}

	public Book() { 
     //默认10本书
		this(10);
	}
	public Book(int i) { 
   
		Person.books = new Book[i];
	}

	//属性的获取和设置
	public String getName() { 
   
		return name;
	}
	public void setName(String name) { 
   
		this.name = name;
	}
	public String getAuthor() { 
   
		return author;
	}
	public void setAuthor(String author) { 
   
		this.author = author;
	}
	public double getPrice() { 
   
		return price;
	}
	public void setPrice(double price) { 
   
		this.price = price;
	}
	public String getCategory() { 
   
		return category;
	}
	public void setCategory(String category) { 
   
		this.category = category;
	}
	public boolean getState() { 
   
		return state;
	}
	public void setState(boolean state) { 
   
		this.state = state;
	}
}

  1. Library类
import java.util.Scanner;

public class Library { 
   
	Scanner sc = new Scanner(System.in);
	//登录函数:显示登录界面进行选择登录
	public void login() { 
   
		int count = 0;
		Person p = null;
		while (count < 2) { 
   
			System.out.println("===============jewel图书管理系统===============");
			System.out.println("欢迎讨论指正! qq505791225"+"\n");
			System.out.println("请登录:1.普通用户 2.管理员登录 3.退出系统");

			int n = sc.nextInt();
			//通过输入的值进行登录判断
			if (n == 3) { 
   
				return;
			}
			switch (n) { 
   
				case 1:
					System.out.println("请输入姓名:");
					String Uname = sc.next();
					System.out.println("请输入性别:");
					String Usex = sc.next();
					System.out.println("请输入年龄:");
					int Uage = sc.nextInt();

					p = new User(Uname,Usex,Uage); //构造普通用户对象

					System.out.println("登录成功!");
					System.out.println("当前普通用户:"+"姓名:" + p.getName() + " "+"性别:" + p.getSex() + " "+"年龄"+ p.getAge());
					//普通用户循环操作
					while (true) { 
   
						System.out.println("请输入你的操作: 1.查询书籍 2.借阅书籍 3.归还书籍 4.显示书籍列表 5.退出");
						int i = sc.nextInt();
						if (i == 5) { 
   
							System.out.println("您已成功退出!");
							break;
						}else { 
   
							p.operate();  //调用普通用户的操作方法
						}
					}
					break;
				case 2:
					System.out.println("请输入管理员姓名:");
					String Rname = sc.next();
					System.out.println("请输入性别:");
					String Rsex = sc.next();
					System.out.println("请输入年龄:");
					int Rage = sc.nextInt();

					p = new Root(Rname,Rsex,Rage);//构造管理员对象

					System.out.println("登录成功!");
					System.out.println("当前管理员:"+"姓名:" + p.getName() + " "+"性别:" + p.getSex() + " "+"年龄" + p.getAge());
					while (true) { 
   
						System.out.println("请输入你的操作: 1.整理书籍 2.查阅书籍 3.增加书籍 4.删除书籍 5.显示书籍列表 6.退出");
						int j = sc.nextInt();
						if (j == 6) { 
   
							System.out.println("您已成功退出!");
							break;
						}else{ 
   
							p.operate();//调用管理员的操作方法
						}
					} break;
			}
		}
	}
}
  1. Person类(抽象类)
abstract class Person { 
   
	public String name;
	public String sex;
	public int age;
	/** * 默认定义10本书籍。(预留3本新书的buffer,用来添加书籍) */
	public static Book[] books = new Book[]{ 
   
			new Book("西游记", "吴承恩", 10, "名著", true),
			new Book("红楼梦", "曹雪芹", 20, "名著", true),
			new Book("三国演义", "罗贯中", 15, "名著", true),
			new Book("小茗同学", "小明", 5, "杂志", true),
			new Book("C与指针", "马老师", 35, "计算机", true),
			new Book("Java编程思想", "王老师", 55, "计算机", true),
			new Book("新世界", "陈宇", 15, "杂志", true),
			new Book("阿衰与大头妹", "阿衰", 5, "漫画", true),
			new Book("一个人就一个人", "刘同", 35, "小说", true),
			new Book("活着", "陈彤", 36, "小说", true),
			new Book(),
			new Book(),
			new Book(),
	};

	public Person(String name, String sex, int age) { 
   
		this.age = age;
		this.name = name;
		this.sex = sex;
	}

	public String getName() { 
   
		return name;
	}
	public void setName(String name) { 
   
		this.name = name;
	}
	public String getSex() { 
   
		return sex;
	}
	public void setSex(String sex) { 
   
		this.sex = sex;
	}
	public int getAge() { 
   
		return age;
	}
	public void setAge(int age) { 
   
		this.age = age;
	}
	/** * 抽象类中的抽象方法 */
	public abstract void operate();
}

  1. operate接口
public interface operate{ 
     //操作的接口
    void select(Book[] books); //查询,查阅
    void delete(Book[] books);//删除,借阅
    void add(Book[] books); //增加,还书
    void list(Book[] books); //显示书列表
}
  1. Root类
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Root extends Person implements Operate { 
   
	//继承了人的类,需要重写它的抽象方法operate,实现了operate接口,需要重写接口内的方法
	
	public Root(String name, String sex, int age) { 
   
		//调用人基类的构造函数
		super(name, sex, age);
	}

	Scanner sc = new Scanner(System.in);

	/** * 管理员的操作 */
	@Override
	public void operate() { 
   
		System.out.print("请输入确认操作:");
		int i = sc.nextInt();
		switch (i) { 
   
			case 1:
				//整理
				sort(books);
				break;
			case 2:
				//查
				select(books);
				break;
			case 3:
				//加
				add(books);
				break;
			case 4:
				//删
				delete(books);
				break;
			case 5:
				//列表
				list(books);
				break;
			default:
				System.out.println("输入有误!");
				break;

		}
	}

	/** * compareable整理,重写compare to,如果数组中有空的,则会出现空指针异常,把不空的拷到另一个新的数组,然后实现 * @param books */
	public void sort(Book[] books) { 
   
		System.out.println("图书馆中的书按价格整理如下:" + "\n" + "【书名】—— 【作者】——【价格】——【分类】——状态");
		Arrays.sort(books, new Comparator<Book>() { 
   
			@Override
			public int compare(Book o1, Book o2) { 
   
				return (int) (o1.getPrice() - o2.getPrice());
			}
		});
		//遍历数组打印书的列表
		for (int i = 0; i < books.length; i++) { 
   
			if (books[i].price != 0) { 
   
				System.out.println(
						"【" + books[i].getName() + "】—— 【" + books[i].getAuthor() + "】——【" + books[i].getPrice()
								+ "】——【" + books[i].getCategory() + "】——" + books[i].getState());
			}
		}
	}

	@Override
	public void select(Book[] books) { 
   
		System.out.println("请输入书名进行查询:");
		String name = sc.next();
		if (name != null) { 
   
			boolean flag = false;
			int bookNum = 0;
			for (int i = 0; i < books.length; i++) { 
   
				if (books[i].getName() != null && name.equals(books[i].getName())) { 
   
					flag = true;
					bookNum = i;
					break;
				}
			}
			if (!flag) { 
   
				System.out.println("未查询到此书籍!");
			} else { 
   
				System.out.println("书籍信息为:" + "\n" + "【书名】—— 【作者】——【价格】——【分类】——状态");
				System.out.println(
						"【" + books[bookNum].getName() + "】—— 【" + books[bookNum].getAuthor() + "】——【" + books[bookNum]
								.getPrice() + "】——【" + books[bookNum].getCategory() + "】——" + books[bookNum]
								.getState());
			}
		}
	}

	@Override
	public void delete(Book[] books) { 
   
		System.out.println("请输入要删除的书名:");
		String str = sc.next();
		if (str != null) { 
   
			for (int i = 0; i < books.length; i++) { 
   
				if (books[i].getName().equals(str)) { 
   
					books[i] = null;
					System.out.println("删除成功!");
					break;
				}
			}
		}

	}

	@Override
	public void add(Book[] books) { 
   
		System.out.println("请输入书名:");
		String name = sc.next();
		System.out.println("请输入作者:");
		String author = sc.next();
		System.out.println("请输入价格:");
		double price = sc.nextDouble();
		System.out.println("请输入分类:");
		String category = sc.next();

		boolean flag = false;
		for (int i = 0; i < books.length; i++) { 
   
			if (books[i].getName() == null) { 
   
				flag = true;
				books[i].setName(name);
				books[i].setAuthor(author);
				books[i].setPrice(price);
				books[i].setCategory(category);
				books[i].setState(true);
				System.out.println("添加成功");
				break;
			}
		}
		if (!flag) { 
   
			System.out.println("【警告】数组预留buffer最多只能添加3本新书,没有位置放置新书了,如需添加多余3本,需要在‘Person’类中添加buffer!" + "\n");
		}

	}

	@Override
	public void list(Book[] books) { 
   
		System.out.println("图书列表如下:" + "\n" + "【书名】—— 【作者】——【价格】——【分类】——状态");  //打印Book数组
		for (int i = 0; i < books.length; i++) { 
   
			if (books[i] != null) { 
   
				if (books[i].price != 0) { 
   
					System.out.println(
							"【" + books[i].getName() + "】—— 【" + books[i].getAuthor() + "】——【" + books[i].getPrice()
									+ "】——【" + books[i].getCategory() + "】——" + books[i].getState());

				}
			}
		}
	}
}
  1. User类
import java.util.Scanner;

public class User extends Person implements Operate { 
      //user类继承了人的类, 实现operate接口

	public User(String name, String sex, int age) { 
   
		//调用人基类的构造函数(派生类不继承基类的构造函数)
		super(name, sex, age);
	}

	Scanner sc = new Scanner(System.in);

	@Override
	public void operate() { 
     //普通用户的操作

		System.out.print("请输入确认操作:");
		int i = sc.nextInt();
		switch (i) { 
   
			case 1:
				//查
				select(books);
				break;
			case 2:
				//借
				delete(books);
				break;
			case 3:
				//还
				add(books);
				break;
			case 4:
				//书列表
				list(books);
				break;
			default:
				System.out.println("输入有误!");
				break;
		}
	}

	@Override
	public void select(Book[] books) { 
   
		System.out.println("请输入书名进行查询:");
		String name = sc.next();
		if (name != null) { 
   
			boolean flag = false;
			int bookNum = 0;
			for (int i = 0; i < books.length; i++) { 
   
				if (books[i].getName() != null && name.equals(books[i].getName())) { 
   
					flag = true;
					bookNum = i;
					break;
				}
			}
			if (!flag) { 
   
				System.out.println("未查询到此书籍!");
			} else { 
   
				System.out.println("书籍信息为:" + "\n" + "【书名】—— 【作者】——【价格】——【分类】——状态");
				System.out.println(
						"【" + books[bookNum].getName() + "】—— 【" + books[bookNum].getAuthor() + "】——【" + books[bookNum]
								.getPrice() + "】——【" + books[bookNum].getCategory() + "】——" + books[bookNum]
								.getState());
			}
		}
	}

	@Override
	public void delete(Book[] books) { 
   
		System.out.println("请输入要借阅的书名:");
		String name = sc.next();
		if (name != null) { 
   
			for (int i = 0; i < books.length - 1; i++) { 
   
				if (books[i].getName().equals(name)) { 
   
					//借走书时设置状态为false
					if (!books[i].getState()) { 
   
						System.out.println("【" + name + "】" + "已经被借出!");
					} else { 
   
						books[i].setState(false);
						System.out.println("借阅成功!");
					}
					break;
				}
			}
		}
	}

	@Override
	public void add(Book[] books) { 
   

		System.out.println("请输入要还的书名:");
		String name = sc.next();

		if (name != null) { 
   
			boolean flag = true;
			int i = 0;
			while (flag) { 
   
				if (books[i].getName().equals(name)) { 
   
					if (!books[i].getState()) { 
   
						books[i].setState(true);
						System.out.println("还书成功!");
						flag = false;
					} else { 
   
						System.out.println("该书籍已经被还回!");
						break;
					}
				}
				i++;
			}
		}
	}


	@Override
	public void list(Book[] books) { 
   
		System.out.println("图书列表如下:" + "\n" + "【书名】—— 【作者】——【价格】——【分类】——状态");  //打印Book数组
		for (int i = 0; i < books.length; i++) { 
   
			if (books[i] != null) { 
   
				if (books[i].price != 0) { 
   
					System.out.println(
							"【" + books[i].getName() + "】—— 【" + books[i].getAuthor() + "】——【" + books[i].getPrice()
									+ "】——【" + books[i].getCategory() + "】——" + books[i].getState());

				}
			}
		}
	}
}
  1. Main类
public class Main { 
   
    public static void main(String[] args) { 
   
        Library library = new Library(); //构造Library对象
        library.login(); //调用对象的登录方法。
    }
}

三、实现结果

  1. 登录界面
    普通用户登录
    在这里插入图片描述
    2.普通用户:查询、借阅、归还 、显示列表
    在这里插入图片描述
    在这里插入图片描述
    3.管理员登录,按图书价格整理书籍
    在这里插入图片描述
  2. 管理员添加书籍
    在这里插入图片描述
  3. 管理员删除书籍
    在这里插入图片描述

如有错误欢迎讨论指正 qq 505791225

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158714.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是反射机制?_java的反射是如何实现的

    什么是反射机制?_java的反射是如何实现的   Java反射学习步骤:1、 什么是反射机制?2、 获取字节码文件对象(class)3、 (Consrtuctor)用字节码对象(class)new一个对象4、 获取和设置字段(Field)对象的值5、获取指定class的函数(Method)并对其调用6、反射实例什么是反射机制?说全:Java反射机制是在运行状态中,对于任意一个类(Class文件),都能够知道这个类的属性和方法;  …

    2025年7月1日
    5
  • arm与stm32的关系_STM32系列处理器常见型号与特性

    arm与stm32的关系_STM32系列处理器常见型号与特性ARM介绍1978年,奥地利籍物理学博士HermannHauser,和他朋友,一位英国工程师ChrisCurry,共同创建了一家名为“CambridgeProcessorUnit,CPU”的公司,中文字面意思就是“剑桥处理器单元”,主要从事研发当地电子仪器设备的业务,比如街头游戏机之类的。1979年,在经营逐渐进入正规后,原来的公司名不怎么合适了,那个年代喜欢找个吉祥物作为公司名字,比如Apple公司。这俩就以橡子为吉祥物,取名为“AcronComputer”,中文字面意思就是“橡果公

    2022年10月9日
    3
  • 【spring】bean管理

    【spring】bean管理【spring】bean管理

    2022年4月25日
    46
  • 最新视频磨皮降噪神器 轻轻松松完成视频磨皮!Beauty box

    最新视频磨皮降噪神器 轻轻松松完成视频磨皮!Beauty box在视频后期中为了追求更好的视觉效果我们经常需要为画面中人物进行磨皮不过这种技术门槛还是比较高的那么有没有一款插件可以帮助我们让PR\FCP等软件也可以像PS一样轻松实现人像磨皮及小伙伴们所想为小伙伴带来一款全新的插件视频磨皮插件Beautybox(含WIN&MAC版本)支持PR\AECS6-CC2020或更高版本支持FCPX10.1.2或更高版本【插件介绍】▼它是人像润色磨皮滤镜,用于人像图片润色,磨.

    2022年7月22日
    38
  • SQLldr_sqlldr远程数据库

    SQLldr_sqlldr远程数据库1.SQLLDR导入 1.1简介 SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。 2.2语法和参数语法:SQLLDRkeyword=value[,keyword=value,..

    2025年7月30日
    3
  • flash怎么强制gc_Adode Flash初级教程

    flash怎么强制gc_Adode Flash初级教程AdodeFlash初级教程(湖南信息职业技术学院xxgc.hniu.cn教务处,湖南长沙410200)第一章入门一、概述1、定义:矢量二维动画2、适用范围:1.针对与网页2.动漫3、特点:a矢量动画制作模式,文件容量小b支持多类型文件导入(图片、视频、音频)c支持流媒体技术d交互动画4、网页四剑客简介adobedreamweaver:是一个网页排版软件,不是设计软件,唯一体现设计软件的地方是c…

    2022年9月2日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号