废话少说,上代码!!!
先写一个图书类.(我一般称这个类有手就行)
package homework.test5;
public class Book {
private String booklist;
private double pirce;
//出版日期
private int publishMonth;
private int publishYear;
//生成构造方法、toString(),getter/setter方法
public Book() {
}
@Override
public String toString() {
return "Book{" +
"booklist='" + booklist + '\'' +
", pirce=" + pirce +
", publishMonth=" + publishMonth +
", publishYear=" + publishYear +
'}';
}
public String getBooklist() {
return booklist;
}
public void setBooklist(String booklist) {
this.booklist = booklist;
}
public double getPirce() {
return pirce;
}
public void setPirce(double pirce) {
this.pirce = pirce;
}
public int getPublishMonth() {
return publishMonth;
}
public void setPublishMonth(int publishMonth) {
this.publishMonth = publishMonth;
}
public int getPublishYear() {
return publishYear;
}
public void setPublishYear(int publishYear) {
this.publishYear = publishYear;
}
}
登录类:
package homework.test5;
import java.util.Objects;
import java.util.Scanner;
public class Login {
Scanner input = new Scanner(System.in);
/**
* 登录 类
*/
private String count = "admin";
private String password = "123";
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Login login = (Login) o;
return Objects.equals(count, login.count) && Objects.equals(password, login.password);
}
@Override
public int hashCode() {
return Objects.hash(count, password);
}
public Login() {
}
public void log() {
while (true) {
System.out.println("请输入账户名:");
//使用input.nextLine()接收数据不会出错
String countIn = input.nextLine();
System.out.println("请输入密码:");
String passwordIn = input.nextLine();
//调用equals方法判断是否登陆重成功,这一点我也有一点懵逼
if (count.equals(countIn) && password.equals(passwordIn)) {
System.out.println("登陆成功!");
break;
} else {
System.out.println("账户/密码错误,请重新操作");
}
}
}
}
图书馆类_重头戏:
(增删改查_这个查就比较讲究了)
- 添加: 注意输入的数据的合法性 年份和月份和价格都要合理
package homework.test5;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Librarin {
Scanner input = new Scanner(System.in);
//新增图书
public void add(ArrayList<Book> arrayList){
//创建Librarin,Book对象
Librarin lib = new Librarin();
Book book = new Book();
Scanner input = new Scanner(System.in);
//提示并且获取图书名称
System.out.println("请输入图书名称:");
String booklist = input.nextLine();
//获取图书价格并且判断输入的价格是否合理
System.out.println("请输入图书价格");
String p = input.nextLine();
//用于判断是否符合要求
boolean x = true;
double price = -1;
try{
price = Double.parseDouble(p);
}catch (NumberFormatException e){
System.out.println("价格输入有误,请重新操作");
//不符合要求,x = false
x = false;
}if(price < 0){
System.out.println("价格不能小于0,请重新操作");
x = false;
}
if(x == true) {
boolean ym = true;
System.out.println("请输入图书出版的年份:");
String y = input.nextLine();
System.out.println("请输入图书出版的月份:");
String m = input.nextLine();
int year = -1;
int mon = -1;
try {
year = Integer.parseInt(y);
mon = Integer.parseInt(m);
} catch (NumberFormatException e) {
System.out.println("输入有误,请重新操作");
}
//判断输入的年月是否再合理范围
if ((year>1000 && year<lib.getSystemYear()) && (mon>0 && mon<=12)) {
}else if(year == lib.getSystemYear() && (mon>0 && mon<=12)){
if(mon <= lib.getSystemMonth()){
}
}else{
System.out.println("输入的年份/月份不合理请重新操作");
ym = false;
}
if(ym == true){
//以上全部操作合理以后把数据存入book
book.setBooklist(booklist);
book.setPirce(price);
book.setPublishYear(year);
book.setPublishMonth(mon);
//把数据存入集合
arrayList.add(book);
System.out.println("该图书存储成功!");
}
}
}
//修改图书信息
public void update(ArrayList<Book> arrayList){
Book book1 = new Book();
if(arrayList.size() == 0){
System.out.println("还未存储图书,请重新操作");
}else {
//获取系统的年月
int yearSystem = getSystemYear();
int monSystem = getSystemMonth();
boolean b = false;
System.out.println("请输入需要修改的图书的名称:");
String booklist = input.nextLine();
System.out.println("请输入需要修改的图书的出版年份");
String y = input.nextLine();
System.out.println("请输入需要修改的图书的出版月份");
String m = input.nextLine();
int year = -1;
int mon = -1;
try {
year = Integer.parseInt(y);
mon = Integer.parseInt(m);
} catch (NumberFormatException e) {
System.out.println("输入的年份/月份有误,请重新操作");
}
if ((year > 1000 && year < yearSystem) && (mon > 0 || mon <= 12)) {
b = true;
} else if ((year == yearSystem) && (mon > 0 && mon <= monSystem)) {
b = true;
}else {
System.out.println("未找到匹配信息,请重新操作");
}
if (b == true) {
for (int i = 0; i < arrayList.size(); i++) {
//获取集合指定元素
book1 = arrayList.get(i);
if ((book1.getBooklist().equals(booklist)) && (book1.getPublishYear() == year)
&& (book1.getPublishMonth() == mon)) {
//输入的图书名称和年月符合,进入修改
System.out.println("需要修改的图书:"+arrayList.get(i));
System.out.println("请选择需要修改的选项:");
System.out.println("1.图书名称\n2.出版年份\n3.出版月份\n4.价格\n0.退出修改");
String index = input.nextLine();
switch (index) {
case "0":
break;
case "1": {
System.out.println("请输入修改后的图书名称");
String booklistChange = input.nextLine();
book1.setBooklist(booklistChange);
//修改完成以后删除修改前的数据
arrayList.remove(i);
//存入原来的位置
arrayList.add(i,book1);
System.out.println("图书名称修改成功!");
System.out.println("修改后的图书信息为:"+arrayList.get(i));
break;
}
case "2": {
System.out.println("请输入修改后的年份");
String yIn = input.nextLine();
int yearIn = -1;
try {
yearIn = Integer.parseInt(yIn);
} catch (NumberFormatException e) {
System.out.println("年份输入有误请重新操作");
}
if (yearIn > 1000 && yearIn <= getSystemYear()) {
book1.setPublishYear(yearIn);
arrayList.remove(i);
arrayList.add(i,book1);
System.out.println("图书年份修改成功");
System.out.println("修改后的图书信息为:"+arrayList.get(i));
} else {
System.out.println("年份输入有误请重新操作");
}
break;
}
case "3": {
System.out.println("请输入修改后的月份");
String mIn = input.nextLine();
int monIn = -1;
try {
monIn = Integer.parseInt(mIn);
} catch (NumberFormatException e) {
System.out.println("月份输入有误请重新操作");
}
if (((monIn > 0 && monIn <= 12) && (book1.getPublishYear() < getSystemYear()))
|| ((monIn > 0 && monIn <= getSystemMonth()) &&
(book1.getPublishYear() == getSystemYear()))) {
//符合年月要求,进行修改
book1.setPublishMonth(monIn);
arrayList.remove(i);
arrayList.add(i,book1);
System.out.println("图书年份修改成功");
System.out.println("修改后的图书信息为:"+arrayList.get(i));
} else {
System.out.println("月份输入有误请重新操作");
}
break;
}
case "4": {
System.out.println("请输入修改后的价格:");
String p = input.nextLine();
int price = -1;
try {
price = Integer.parseInt(p);
} catch (NumberFormatException e) {
System.out.println("价格输入有误,请重新操作");
}
if (price < 0) {
System.out.println("价格输入有误,请重新操作");
} else {
book1.setPirce(price);
arrayList.remove(i);
arrayList.add(i,book1);
System.out.println("图书价格修改成功!");
System.out.println("修改后的图书信息为:"+arrayList.get(i));
}
break;
}
default:
System.out.println("输入有误请重新操作");
break;
}
//查找到指定数据就break该循环,不再进行查找
break;
}
if (i == arrayList.size() - 1) {
System.out.println("未找到指定图书,请重新操作");
break;
}
}
}
}
}
//删除
public void delete(ArrayList<Book> arrayList){
Book book2 = new Book();
if(arrayList.size() == 0){
System.out.println("还未存储图书,请重新操作");
}else{
int yearSystem = getSystemYear();
int monSystem = getSystemMonth();
boolean b = false;
System.out.println("请输入需要删除的图书的名称:");
String booklist = input.nextLine();
System.out.println("请输入需要删除的图书的出版年份");
String y = input.nextLine();
System.out.println("请输入需要删除的图书的出版月份");
String m = input.nextLine();
int year = -1;
int mon = -1;
try{
year = Integer.parseInt(y);
mon = Integer.parseInt(m);
}catch (NumberFormatException e){
System.out.println("输入的年份/月份有误,请重新操作");
}if((year>1000 && year<yearSystem) && (mon>0 || mon<=12)){
b = true;
}else if((year == yearSystem) && (mon>0 && mon<=monSystem)){
b = true;
}if(b == true) {
for (int i = 0; i < arrayList.size(); i++) {
book2 = arrayList.get(i);
if ((book2.getBooklist().equals(booklist)) && (book2.getPublishYear() == year)
&& (book2.getPublishMonth() == mon)){
System.out.println(arrayList.remove(i)+"\n以被删除成功!");
break;
}
if(i == arrayList.size()-1){
System.out.println("未找到指定图书,请重新操作");
break;
}
}
}
}
}
//根据图书名称模糊查找
public void search(ArrayList<Book> arrayList,ArrayList<Book> arraySearch){
if(arrayList.size() == 0){
System.out.println("还未存储过图书,请重新操作");
}else {
System.out.println("请输入您需要查找的图书名称:");
String lookBook = input.nextLine();
//模糊查找精华--注意详细看我的专门说模糊匹配的博客
Pattern pattern = Pattern.compile(lookBook,Pattern.CASE_INSENSITIVE);
for(int i=0;i<arrayList.size();i++){
Matcher matcher = pattern.matcher(arrayList.get(i).getBooklist());
if(matcher.find()){
//把找到的图书放入arraySearch集合
arraySearch.add(arrayList.get(i));
}
}
if(arraySearch.size() == 0){
System.out.println("为找到相关图书,请重新操作");
}else {
Book book = new Book();
System.out.println("查找到的图书有:");
for(int i=0;i<arraySearch.size();i++){
book = arraySearch.get(i);
System.out.println((1+i)+".\t"+book);
}
//输出以后清空存储模糊查找图书的集合
arraySearch.clear();
}
}
}
//查看所有图书
public void seeAll(ArrayList<Book> arrayList, ArrayList<Book> looklist){
if(arrayList.size() == 0){
System.out.println("还未存储图书,请重新操作");
}else{
Book book = new Book();
//把arrayList里面的数据全部复制到looklist里面
for(Book a:arrayList){
book = a;
looklist.add(book);
}
System.out.println("请输入查看方式的选项:");
System.out.println("1.价格从高到低查看\n2.价格从低到高查看\n3.新到旧查看\n4.随即查看\n0.退出查看");
String text = input.nextLine();
int index = -1;
try{
index = Integer.parseInt(text);
}catch (NumberFormatException e){
System.out.println("输入有误请重新操作");
}if(index >= 0 && index <= 4){
switch (index){
case 0:
break;
case 1:{
//冒泡排序,price大的在前
Book temp1;
Book temp2;
for(int i=0;i<looklist.size()-1;i++){
for(int j=0;j<looklist.size()-1-i;j++){
if(looklist.get(j).getPirce() < looklist.get(j+1).getPirce()){
//这里会不会有bug,ArrayList线程不安全?
temp1 = looklist.get(j);
temp2 = looklist.get(j+1);
looklist.remove(j);
looklist.add(j,temp2);
looklist.remove(j+1);
looklist.add(j+1,temp1);
}
}
}
for (Book l:looklist) {
System.out.println(l);
}
//遍历结束以后情况集合,便于下次存储
looklist.clear();
break;
}
case 2:{
//冒泡排序,price小的在前
Book temp1;
Book temp2;
for(int i=0;i<looklist.size()-1;i++){
for(int j=0;j<looklist.size()-1-i;j++){
if(looklist.get(j).getPirce() > looklist.get(j+1).getPirce()){
temp1 = looklist.get(j);
temp2 = looklist.get(j+1);
looklist.remove(j);
looklist.add(j,temp2);
looklist.remove(j+1);
looklist.add(j+1,temp1);
}
}
}
for (Book l:looklist) {
System.out.println(l);
}
looklist.clear();
break;
}
case 3:{
//冒泡排序,年份大的在前,若年份相同,月份大的在前
Book temp1;
Book temp2;
for(int i=0;i<looklist.size();i++){
for(int j=0;j<looklist.size()-1-i;j++){
if((looklist.get(j).getPublishYear() < looklist.get(j+1).getPublishYear())
|| ((looklist.get(j).getPublishYear() == looklist.get(j+1).getPublishYear())
&& (looklist.get(j).getPublishMonth() < looklist.get(j+1).getPublishMonth()))){
temp1 = looklist.get(j);
temp2 = looklist.get(j+1);
looklist.remove(j);
looklist.add(j,temp2);
looklist.remove(j+1);
looklist.add(j+1,temp1);
}
}
}
for (Book l:looklist) {
System.out.println(l);
}
looklist.clear();
break;
}
case 4:{
for (Book a:arrayList) {
System.out.println(a);
}
break;
}
default:
System.out.println("输入有误,请重新操作");
break;
}
}else {
System.out.println("您的输入有误,请重新操作");
}
}
}
//获取系统的年份
public int getSystemYear(){
Calendar date = Calendar.getInstance();
int year = Integer.valueOf(date.get(Calendar.YEAR));
return year;
}
//获取系统月份
public int getSystemMonth(){
Calendar date = Calendar.getInstance();
int month = Integer.valueOf(date.get(Calendar.MONTH));
return month;
}
}
主函数:
package homework.test5;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//创建集合用于存储图书的数据
ArrayList<Book> arrayList = new ArrayList<>();
//存储模糊查找的图书数据
ArrayList<Book> arraySearch = new ArrayList<>();
//存储指定排序后的图书数据
ArrayList<Book> looklist = new ArrayList<>();
//创建Librarin、LogIn、Main的对象
Librarin lib = new Librarin();
Login log = new Login();
Main m = new Main();
//调用welcom方法
m.welcome();
//进入登陆界面
log.log();
//boolean类型的bool用于判断输入的主菜单选项是否符合要求
boolean bool = true;
//使用whiel(true)死循环
p:while (true){
System.out.println("输入您的选项");
System.out.println("1.图书新增\n2.图书修改\n3.图书删除\n" +
"4.根据图书名称模糊查找图书\n5.查看所有图书\n0.退出");
//全局使用input.nextLine()接收数据,避免输入错误
String index = input.nextLine();
int num = -1;
//使用try-catch处理异常
try{
num = Integer.parseInt(index);
}catch (NumberFormatException e){
System.out.println("输入有误,请重新操作");
//不符合要求,bool = false
bool =false;
}if(num<0 || num>5){
System.out.println("输入有误,请重新操作");
//不符合要求,bool = false
bool = false;
}
if(bool == true){
switch (num){
//输入的数据符合要求,进入分支语句
case 1:
//图书新增
lib.add(arrayList);
break;
case 2:
//图书修改
lib.update(arrayList);
break;
case 3:
//图书删除
lib.delete(arrayList);
break;
case 4:
//根据图书名称模糊查找图书
lib.search(arrayList,arraySearch);
break;
case 5:
//根据要求查看图书
lib.seeAll(arrayList,looklist);
break;
default:
break p;
}
}
}
//调用bey()方法
m.bye();
}
//无参构造方法
public Main() {
}
//自定义welcome(),bey()方法
public void welcome(){
System.out.println("欢迎使用图书管理系统");
}
public void bye(){
System.out.println("感谢您的使用,期待下次再见!");
}
}