项目要求:
0:系统管理员登陆:
需输入用户名,和密码,和数据库中的用户名和密码一致则登陆成功,否则登陆失败。
1:增加图书
添加一个图数信息(图书编号、名称、价格、类别、简介)
2:删除图书
允许管理员输入要删除的图书编号,然后完成图书的删除
3:修改图书信息
允许管理员输入要修改的部门的编号,然后输入该图书修改后的新名称、新价格、新类别、新简介。最后完成修改
4:查看所有图书信息
展示该系统中所有图书信息。
5:根据价格区间查找图书
管理员输入,最小价格,和最大价格,然后展示所有图书价格处于这个之间的所有图书信息。
6:根据类别查找图书
管理员输入类别名称,然后展示该类别的所有图书。
1. 图书对应的实体类
package library;
public class Book {
private Integer bookId;//图书编号
private String name;//图书名称
private Double price;//图书价格
private String category;//图书类别
private String description;//图书的简介
//构造方法(无参数)
public Book() {
super();
// TODO Auto-generated constructor stub
}
//构造方法(有参数)
public Book(Integer bookId, String name, Double price, String category, String description) {
super();
this.bookId = bookId;
this.name = name;
this.price = price;
this.category = category;
this.description = description;
}
//覆盖toString方法
@Override
public String toString() {
return bookId + "\t"+"\t" + name+" " +"\t" + price + "¥\t"+"\t" + category
+ "\t"+"\t" + description;
}
//get、set方法设置或者获取私有属性
public Integer getBookId() {
return bookId;
}
public void setBookId(Integer bookId) {
this.bookId = bookId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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 String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
2. 管理员对应的实体类
//包名
package library;
//创建类(管理员)
public class Manger{
private String username;//用户名
private String password;//密码
//构造方法(无参)
public Manger() {
super();
// TODO Auto-generated constructor stub
}
//构造方法(有参)
public Manger(String username, String password) {
super();
this.username = username;
this.password = password;
}
//get、set方法设置或者获取私有属性
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;
}
}
3. 数据类
//包
package library;
//导包
import java.util.ArrayList;
import java.util.List;
//创建类(Datebase)
public class Datebase {
//用List集合存放book类
public static List<Book> books=new ArrayList<>();
//用List集合存放manger类
public static List<Manger> mangers=new ArrayList<>();
//声明接口(多态)
public static LibrarySystem librarysystem = new MyLibrarySystem();
//静态代码块初始化属性
static {
//初始化管理员数据
mangers.add(new Manger("admin","123456"));
//初始化图书数据
books.add(new Book(10000,"基督山伯爵",10.0,"小说","法国作家大仲马的杰出作品。说的是十九世纪一名叫爱德蒙唐泰斯的大副受到陷害后的悲惨遭遇以及日后以基督山伯爵成功复仇的故事"));
books.add(new Book(10001,"红楼梦",20.0,"小说","又名“石头记”,中国古典四大名著之一,清代作家曹雪芹创作的章回体长篇小说"));
books.add(new Book(10002,"水浒传",30.0,"小说","是中国古典四大名著之一,全书描写了北宋末年以宋江为首的108位好汉在梁山起义,以及聚集以后接受招安,四处征战的故事"));
books.add(new Book(10003,"高等数学",40.0,"数学","鬼知道里面写了什么东西"));
books.add(new Book(10004,"大学英语",40.0,"英语","I can speak hehe!"));
books.add(new Book(10005,"奥数",40.0,"数学","从来没看懂过里面一道题,呵呵……"));
}
}
4. 接口
package library;
import java.util.List;
/**
* 图书管理系统功能标准(接口)
*/
public interface LibrarySystem {
/**
* 描述:TODO 通过判断参数的usenrame,和password是否和数据仓库类中管理员信息一致,决定是否登陆成功
*/
public boolean login(String username, String password);
/**
* 描述:TODO 将参数book对象添加到数据仓库类中
*/
public void addBook(Book book);
/**
* 描述:TODO 根据参数bookId在数据仓库中找到对应的图书,然后删除。
* 提示:1.遍历数据仓库中的books属性中所有的图书,找到图书编号和bookId相同的图书下标
* 2.在遍历的循环外面,通过list的remove(index)方法删除图书
*/
public void removeBook(Integer bookId);
/**
* 描述:TODO 根据bookId找到对应的图书,将图书的其余属性分别修改为参数中传递过来的值
*/
public void updateBook(Integer bookId, String newName, Double newPrice,
String newCategory, String newDesc);
/**
* 描述:TODO 获得所有图书
*/
public List<Book> getAllBooks();
/**
* 描述:TODO 根据价格区间找到 minPrice<=price<=maxPrice的所有图书
*/
public List<Book> getBooksByPriceRange(double minPrice, double maxPrice);
/**
* 描述:TODO 根据类名查找所有的图书
*/
public List<Book> getBooksByCategory(String category);
}
5. 接口实现
//包
package library;
//导包
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//创建一个实现类,实现接口LibrarySystem中的方法
public class MyLibrarySystem extends Datebase implements LibrarySystem{
//获取键盘功能
Scanner sc = new Scanner(System.in);
//1.通过判断参数的username和password是否和数据库类中管理员信息一致,决定是否登陆成功
public boolean login(String username,String password) {
//遍历所有的管理人员信息
for (Manger manger : mangers) {
//如果管理员的用户名和密码都匹配的话返回true
if(manger.getUsername().equals(username)&&manger.getPassword().equals(password)) {
return true;
}
}
//输出错误提示信息
System.out.println("您输入的用户名或密码错误");
//返回错误
return false;
}
//2.将参数book对象添加到数据仓库类中
public void addBook(Book book) {
//调用List中的add方法,进行添加
books.add(book);
//输出添加成功提示信息
System.out.println("添加成功");
}
/*根据参数bookId在数据仓库中找到对应的图书,然后删除。
提示:1.遍历数据仓库中的books属性中所有的图书,找到图书编号和bookId相同的图书下标
2.在遍历的循环外面,通过list的remove(index)方法删除图书
*/
public void removeBook(Integer bookId) {
//遍历所有图书
for (int i = 0; i < books.size(); i++) {
//判断传入的图书编号和集合中所有的图书是否有相同
if (books.get(i).getBookId().equals(bookId)) {
//如果相同,通过list的remove(index)方法删除图书
books.remove(i);
}
}
//输出删除成功的提示信息
System.out.println("删除成功");
}
//3.根据bookId找到对应的图书,将图书的其余属性分别修改为参数中传递过来的值
public void updateBook(Integer bookId, String newName, Double newPrice,
String newCategory, String newDesc) {
//遍历图书集合
for (int i = 0; i < books.size(); i++) {
//判断传入的图书编号和集合中所有的图书是否有相同
if (books.get(i).getBookId().equals(bookId)) {
//如果相同,通过list的set(index i,object o)方法将下表i位置的对象替换成传入的o
books.set(i, new Book(bookId,newName,newPrice,newCategory,newDesc));
}
}
//输出修改成功的提示信息
System.out.println("修改成功");
}
//4.获得所有图书
public List<Book> getAllBooks(){
//打印输出标头
System.out.println("图书编号"+ "\t"+"\t" +"图书书名称"+ "\t" +"图书价格"+ "\t"+"\t" +"图书类别"+ "\t"+"\t" +"图书简介");
//遍历图书集合
for (Book book : books) {
//调用Book类中的toString方法
System.out.println(book);
}
//返回集合
return books;
}
//5.根据价格区间找到 minPrice<=price<=maxPrice的所有图书
public List<Book> getBooksByPriceRange(double minPrice, double maxPrice){
//创建一个新的集合(存储满足要求的图书)
List <Book> list = new ArrayList<>();
//打印输出标头
System.out.println("图书编号"+ "\t"+"\t" +"图书书名称"+ "\t" +"图书价格"+ "\t"+"\t" +"图书类别"+ "\t"+"\t" +"图书简介");
//遍历books集合
for (Book book : books) {
//将Double转换成double
double price = book.getPrice().doubleValue();
//判断每本图书的价格是否在给定的区间中
if(minPrice<=price&&price<=maxPrice) {
//将符合判断标准的图书添加到list集合中
list.add(book);
//输出符合要求的图书信息
System.out.println(book);
}
}
//判断是否没有符合给定价格区间的图书
if(list.size()==0||list==null) {
//输出"没找到您查询的价格区间"提示信息
System.out.println("没找到您查询的价格区间");
}
//返回新的集合
return list;
}
//6.根据类名查找所有的图书
public List<Book> getBooksByCategory(String category){
//创建一个新的集合(存储满足要求的图书)
List <Book> list = new ArrayList<>();
//打印输出标头
System.out.println("图书编号"+ "\t"+"\t" +"图书书名称"+ "\t" +"图书价格"+ "\t"+"\t" +"图书类别"+ "\t"+"\t" +"图书简介");
//遍历books集合
for (Book book : books) {
判断每本图书的类别是否是传入的类别
if(book.getCategory().equals(category)) {
//将符合判断标准的图书添加到list集合中
list.add(book);
//输出符合要求的图书信息
System.out.println(book);
}
}
//判断是否没有符合给定类别的图书
if(list.size()==0||list==null) {
//输出"没找到您查询的类型"提示信息
System.out.println("没找到您查询的类型");
}
//返回新的集合
return list;
}
}
6. 主方法(根据需求调用各个功能)
//包
package library;
//导包
import java.util.Scanner;
//创建类
public class Realization extends Datebase{
//主方法
public static void main(String[] args) {
//获取键盘
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
//提示输入用户名
System.out.println("用户名:");
//获取输入的用户名
String username = sc.next();
//提示输入用户名
System.out.println("密码:");
//获取输入的密码
String password = sc.next();
//通过调用login(String username, String password)方法判断输入的密码和用户名是否正确
if(librarysystem.login(username, password)) {
//正确进入功能选项界面
//输出使用说明
System.out.println("请根据说明输入对应的数值:");
System.out.println("1.增加图书"+'\n'
+ "2.删除图书"+'\n'
+ "3.修改图书信息"+'\n'
+ "4.查看所有图书"+'\n'
+ "5.根据价格区间查找图书"+'\n'
+ "6.根据类别名称查找图书");
//输入对应的数值获取对应功能
Integer num = sc.nextInt();
//保证可以一次登录多次实现功能
while(true) {
//通过判断输入的值不同,实现不同的方法
switch (num) {
//添加图书
case 1:
System.out.println("请输入您要添加的图书名");//提示信息
String name = sc.next();//获取输入内容(图书名)
System.out.println("请输入您要添加的图书价格");//提示信息
Double price = sc.nextDouble();//获取输入内容(图书价格)
System.out.println("请输入您要添加的图书类型");//提示信息
String category = sc.next();//获取输入内容(图书类别)
System.out.println("请输入您要添加的图书简介");//提示信息
String description = sc.next();//获取输入内容(图书简介)
//获取最大的图书编号+1
Integer bookId =books.get(books.size()-1).getBookId()+1;
//调用addBook(Book book)方法进行元素添加
librarysystem.addBook(new Book(bookId,name,price,category,description));
break;//跳出switch
//删除图书
case 2:
System.out.println("请输入你想要的删除的图书编号");//提示信息
Integer id = sc.nextInt();//获取输入内容(图书标号)
//通过调用removeBook(Integer bookId)方法实现删除图书信息
librarysystem.removeBook(id);
break;//跳出switch
//更改图书信息
case 3:
System.out.println("请输入要更改的图书编号");//提示信息
Integer newBookId = sc.nextInt();//获取输入内容(图书标号)
System.out.println("新的图书名");//提示信息
String newName = sc.next();//获取输入内容(新的图书名)
System.out.println("新的图书价格");//提示信息
Double newPrice=sc.nextDouble();//获取输入内容(新的图书价格)
System.out.println("新的图书类型");//提示信息
String newCategory = sc.next();//获取输入内容(新的图书类别)
System.out.println("新的图书简介");//提示信息
String newDescription = sc.next();//获取输入内容(新的图书简介)
//通过调用updateBook方法实现修改图书信息
librarysystem.updateBook(newBookId,newName,newPrice,newCategory,newDescription);
break;//跳出switch
//获取所有的图书信息
case 4:
//通过调用getAllBooks方法实现修改图书信息
librarysystem.getAllBooks();
break;//跳出switch
//根据价格区间查找图书
case 5:
System.out.println("请输入价格区间的最大值");//提示信息
Double maxPrice = sc.nextDouble();//获取最高价格的值
System.out.println("请输入价格区间的最小值");//提示信息
Double minPrice = sc.nextDouble();//获取最低价格的值
//通过调用getBooksByPriceRange方法找出对应价格区间的图书
librarysystem.getBooksByPriceRange(minPrice,maxPrice);
break;//跳出switch
case 6:
System.out.println("请输入您想要查找的图示类别");//提示信息
String cate = sc.next();//获取查找的类别
//通过调用getBooksByPriceRange方法找出对应类别的图书
librarysystem.getBooksByCategory(cate);
break;//跳出switch
//输出提示指令错误信息
default:System.out.println("您输入的指令错误");
break;//跳出switch
}
//当跳出switch,再次输出对应的提示信息
System.out.println("请根据说明输入对应的数值:");
System.out.println("1.增加图书"+'\n'
+ "2.删除图书"+'\n'
+ "3.修改图书信息"+'\n'
+ "4.查看所有图书"+'\n'
+ "5.根据价格区间查找图书"+'\n'
+ "6.根据类别名称查找图书");
//当跳出switch,再次循环对功能键进行选择
num = sc.nextInt();
}
}
}
}