一个小的图书管理系统可以很好地考察和训练我的java基础,用刚学的类和对象做一个图书管理系统再好不过了
首先运用面对对象的思想将与问题(或者说是需求 )有关的实体提取为java中的类
我提取出来两个类:
1.Book类,用JavaBean规范进行封装,使用get、set方法.用private 将成员变量保护起来
2.Test类,有main方法,可以跑程序.方法都写在里面.
Book类中有:
-
*num*(图书编号)
-
*name*(图书名字)
-
*sum*(图书数量)
-
一个 *message*成员方法:用来输出一条str字符串显示在图书目录上的
Test类中有:
-
*main()*方法
-
*menu()*:显示主菜单
-
*findBook()*:检索图书
-
*addBook()*:增加图书
-
*modifyBook()*:修改图书信息
-
*deleteBook()*:删除图书
-
*list()*:显示图书目录;实现查看所有图书功能
下面是具体的源码,注意Book类和Test类要放在同一个package里;就像这样
Book.java
/**
* <p>Title: Book.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2020</p>
* <p>Company: geminno</p>
* @author chenghouqing
* @date 2020年7月25日
* @version 1.0
*/
package com.gem.javacore.day08.book;
/*符合JavaBean规范,对Book类进行封装
* public class ClassName(){
* //成员变量
* //构造方法
* //无参构造方法(必须)---后面继承用得到
* //有参构造方法[建议]
* //成员方法
* //getXXX()
* //setXXX()
*/
public class Book {
private String num;// 书籍编号
private String name;// 书籍名称
private int sum;// 书籍数量
public Book() {// 无参构造方法
}
public Book(String num, String name, int sum) {// 有参数构造方法
this.num = num;//
this.name = name;
this.sum = sum;
}
public String message() {// 成员方法 显示一条图书信息
String str = "";// 局部变量必须初始化
str = this.num + "\t" + this.name + "\t" + this.sum;
return str;// 返回一条str字符串
}
public void setnum(String num) {// set方法
this.num = num;
}
public String getnum() {// 获得编号 get方法
return this.num;// 返回编号
}
public void setname(String name) {// set方法
this.name = name;
}
public String getname() {// 获得图书名 get方法
return this.name;// 返回一个图书名字
}
public void setsum(int sum) {// set方法
this.sum = sum;
}
public int getsum() {// get方法
return this.sum;
}
}
Test.java
/**
* <p>Title: Test.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2020</p>
* <p>Company: geminno</p>
* @author chenghouqing
* @date 2020年7月25日
* @version 1.0
*/
package com.gem.javacore.day08.book;
import java.util.Scanner;
/*
* 一个简单的图书管理系统,只用到数组、类和对象、基本控制语句、基本数据结构
* 基本上都用上了
*/
public class Test {
public static void main(String[] args) {
Book[] a = new Book[100];// 可以存100个图书对象
a[0] = new Book("A", "老人与海", 1);
a[1] = new Book("B", "时间简史", 4);
a[2] = new Book("C", "物种起源", 10);
a[3] = new Book("D", "那片星空,那片海", 30);
a[4] = new Book("E", "钢铁是怎样炼成的", 13);
int size = 5;// 记录图书信息的个数(已经有5本图书)
menu();// 输出主菜单
Scanner input = new Scanner(System.in);
int num = input.nextInt();
boolean flag = true;
while (flag) {
switch (num) {// 根据编号选择功能
case 1:
list(a, size);// 显示图书目录
menu();
num = input.nextInt();
break;
case 2:
findBook(a, size);// 调用findbook方法检索图书
menu();
num = input.nextInt();
break;
case 3:
size = addBook(a, size);// 将改变后的的size的值重新赋值
menu();
num = input.nextInt();
break;
case 4:
modifyBook(a, size);// 修改图书信息
menu();
num = input.nextInt();
break;
case 5:
size = deleteBook(a, size);// 删除图书信息 并且将最新的size值赋值给size
menu();
num = input.nextInt();
break;
case 6:
System.out.println("退出系统成功");
flag = false;
break;
default:
System.out.println("你输入的编号有误,请重新输入");
menu();
num = input.nextInt();
break;
}
}
}
public static void menu() {// 显示主菜单
System.out.println("--------------图书管理系统---------------");
System.out.println("1.图书目录");
System.out.println("2.检索图书(用书名)");
System.out.println("3.添加图书");
System.out.println("4.修改图书信息(用编号)");
System.out.println("5.删除图书(用编号)");
System.out.println("6.退出系统");
System.out.println("请输入功能编号:");
}
public static void findBook(Book[] a, int size) {// 检索图书(用书名)
int flag = 0;// 标记数
Scanner input = new Scanner(System.in);
System.out.println("请输入您要查找的图书名字:");
String name = input.next();// 输入图书名
for (int i = 0; i < size; i++) {
if (name.equals(a[i].getname())) {// 如果图书名字相同
// 注意要使用.equals方法,不能使用==号(后者只比较地址)
System.out.println("---------------图书目录----------------");
System.out.println("编号:\t名称:\t\t数量:");
System.out.println(a[i].message());// 就把图书信息输出
System.out.println("--------------------------------------");
flag = 1;
}
}
if (flag == 0) {
System.out.println("抱歉,图书库存中没有相关信息");
}
}
public static int addBook(Book[] a, int size) {// 添加书籍
Scanner input = new Scanner(System.in);
System.out.println("请输入书籍名字:");
String name = input.next();// 输入书籍名字
System.out.println("请输入书籍编号:");
String num = input.next();// 输入书籍编号
System.out.println("请输入书籍数量:");
int sum = input.nextInt();// 输入书籍数量
a[size] = new Book(num, name, sum);// 将对应的值赋给构造方法
size++;// 每次调用方法,就把新的对象赋给下一个数组元素
System.out.println("添加书籍成功");
return size;
}
public static void modifyBook(Book[] a, int size) {// 修改图书信息
int flag = 0;// 设置一个标记位置
Scanner input = new Scanner(System.in);
System.out.println("请输入你要修改的图书编号");
String num = input.next();// 输入编号
for (int i = 0; i < size; i++) {
if (num.equals(a[i].getnum())) {// 如果编号存在 编号匹配
System.out.println("请输入新的图书编号:");
String newnum = input.next();// 输入新的图书编号
a[i].setnum(newnum);// 设置新的图书编号
System.out.println("请输入新的图书名字");
String newname = input.next();// 输入新的图书名字
a[i].setname(newname);// 设置新的图书名字
System.out.println("请输入新的图书数量:");
int newsum = input.nextInt();// 输入新的图书数量
a[i].setsum(newsum);
System.out.println("修改图书信息成功");
flag = 1;// 将标记设为1
}
}
if (flag == 0) {
System.out.println("抱歉,没有在库存中找到你输入编号对应的图书");
}
}
public static int deleteBook(Book[] a, int size) {// 删除图书信息
Scanner input = new Scanner(System.in);
int flag = 0;
if (size == 0) {// 如果库存中已经没有图书了 size为图书信息个数
System.out.println("抱歉,图书库存为空.不能再删除图书了");
return size;
}
System.out.println("请输入你要删除的图书编号: ");
String num = input.next();// 输入图书编号
for (int i = 0; i < size; i++) {// 与现有库存中的图书逐一比较
if (num.equals(a[i].getnum())) {// 如果对应的图书存在
for (int j = i; j < size - 1; j++) {// 将删除的位置设为i,结束值设为size-1,因为a[j+1],否则会数组越界
a[j] = a[j + 1];// 将size位置后的元素依次前移一个位置,将要删除元素的位置(size)覆盖掉
}
System.out.println("删除图书信息成功");
flag = 1;// 改变标记值
}
}
if (flag == 0) {
System.out.println("对不起,在库存中没有找到你需要删除的图书");
}
// 删除成功之后,数组长度-1
size--;
return size;// 将size的值返回
}
public static void list(Book[] a, int size) {// 显示所有图书信息
System.out.println("---------------图书目录----------------");
System.out.println("编号:\t名称:\t\t数量:");
for (int i = 0; i < size; i++) {
System.out.println(a[i].message());
// 调用每一个对象中的message方法输出图书信息
}
System.out.println("--------------------------------------");
}
}