1.构思和分类
说到图书管理系统,我们首先要想到的对象是 书籍,再而就想到 图书管理员 和 读者,所以今天我们写 图书管理代码,就分为两个类 书籍(Book)、图书管理员(Librarian),关于读者类,到时候我会写一个图书管理系统,那时候我再仔细地讲解一下。
我们来了解一下这两个类的属性和行为。
(1)书籍(Book): 书籍的名字(name)、书籍的作者(author)、书号(id)、数量(number)
(2)图书管理员(Librarian):管理员的账号(account)、添加书籍(librarianAdd)、删除书籍(librarianDelete)
当然书籍我们还可以细分成科学类书籍、文学类书籍、艺术类书籍等等,不过今天我就不再细分了。
2.代码示例
我们先写一个书籍类(Book)
class Book {
public int id;
public String name;
public String author;
public int number;
public String information() {
return "书号:" + id + ",书名:" + name + ",作者:" + author + ",书的数量:" + number;
}
public Book( int id, String name, String author, int number) {
this.id = id;
this.name = name;
this.author = author;
this.number = number;
}
}
在书籍类中,我们定义了四个公共成员,因为书籍的信息是可以供他人查看的,我们通过 information() 方法返回书籍的信息。
图书管理员类(Librarian)
class Librarian {
private String account;
public void setAccount(String account) {
this.account = account;
}
private String getAccount() {
return account;
}
// 添加书籍
public Book librarianAdd() {
// 判断是不是管理员
if( getAccount().equals("123456789") ) {
Scanner s = new Scanner(System.in);
// 如果operate为1,新加的书是一本文学书
System.out.println("输入书籍信息:");
return new Book( s.nextInt(), s.next(), s.next(), s.nextInt());
}
else {
System.out.println("你还不是管理员,无法进行操作");
return null;
}
}
// 删除书籍
public void librarianDelete( ArrayList<Book> library) {
if( getAccount().equals("123456789") ) {
Scanner s = new Scanner(System.in);
System.out.println("输入要删除书籍的书号:");
int id = s.nextInt();
int locate = 0;
for( Book t : library) {
if( t.id == id ) {
break;
}
locate++;
}
library.remove(locate);
}
else {
System.out.println("你还不是管理员,无法进行操作");
}
}
}
我们在 图书管理员类(Librarian) 中定义了一个私有成员 acount(账号),因为管理员的账号是保密的只有管理员才知道,这样就起到了保密作用,有一个公共方法 setAccount() 用来接收用户输入的账号,有一个私有方法 getAccount() 用来得到用户输入的账号,且此方法只能在 图书管理员类(Librarian) 中使用。
然后我们有俩个公共方法 librarianAdd()、librarianDelete(),用来增加书籍和删除书籍, 我们可以清晰地在代码中看到,在添加或删除书籍之前,我们会先判断该账号是否是图书管理员的账号,如果是则可以进行下一步操作,如果不是则输出 "你还不是管理员,无法进行操作" 来提示用户。
主类(Main)
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
public static void main(String[] arr) {
Scanner s = new Scanner(System.in);
ArrayList<Book> library = new ArrayList<>();
System.out.println("输入 1 进入存书界面, 输入 0 退出程序");
int operate1 = s.nextInt();
while( operate1 != 0 ) {
System.out.println("输入管理员账号:");
String account = s.next();
System.out.println("输入 A 存入书籍, 输入 B 删除书籍");
String operate2 = s.next();
Librarian Alice = new Librarian();
Alice.setAccount(account);
if( operate2.equals("A") ) {
library.add(Alice.librarianAdd());
}
else {
Alice.librarianDelete(library);
}
System.out.println("输入 1 进入存书界面, 输入 0 退出程序");
operate1 = s.nextInt();
}
for( Book t : library) {
System.out.println(t.information());
}
}
}
在主类中我们创建了一个书籍类(Book)的动态数组(ArrayList),用来存书籍信息。关于java动态数组(ArrayList),我先来解释一下它是如何使用的,和它有何配套的操作方法。
ArrayList 是 Java 中常用的动态数组容器类
导入类:import java.util.ArrayList
创建ArrayList对象:ArrayList<数据类型> list = new ArrayList<>();
添加元素:list.add(添加的元素);
访问元素:list.get(访问元素的位置)
修改元素:list.set(修改元素位置,修改后元素)
删除元素:list.remove(删除位置)
遍历:for (String fruit : list) {
System.out.println(fruit);
}
3.代码综合
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
public static void main(String[] arr) {
Scanner s = new Scanner(System.in);
ArrayList<Book> library = new ArrayList<>();
System.out.println("输入 1 进入存书界面, 输入 0 退出程序");
int operate1 = s.nextInt();
while( operate1 != 0 ) {
System.out.println("输入管理员账号:");
String account = s.next();
System.out.println("输入 A 存入书籍, 输入 B 删除书籍");
String operate2 = s.next();
Librarian Alice = new Librarian();
Alice.setAccount(account);
if( operate2.equals("A") ) {
library.add(Alice.librarianAdd());
}
else {
Alice.librarianDelete(library);
}
System.out.println("输入 1 进入存书界面, 输入 0 退出程序");
operate1 = s.nextInt();
}
for( Book t : library) {
System.out.println(t.information());
}
}
}
class Book {
public int id;
public String name;
public String author;
public int number;
public String information() {
return "书号:" + id + ",书名:" + name + ",作者:" + author + ",书的数量:" + number;
}
public Book( int id, String name, String author, int number) {
this.id = id;
this.name = name;
this.author = author;
this.number = number;
}
}
class Librarian {
private String account;
public void setAccount(String account) {
this.account = account;
}
private String getAccount() {
return account;
}
// 添加书籍
public Book librarianAdd() {
// 判断是不是管理员
if( getAccount().equals("123456789") ) {
Scanner s = new Scanner(System.in);
// 如果operate为1,新加的书是一本文学书
System.out.println("输入书籍信息:");
return new Book( s.nextInt(), s.next(), s.next(), s.nextInt());
}
else {
System.out.println("你还不是管理员,无法进行操作");
return null;
}
}
// 删除书籍
public void librarianDelete( ArrayList<Book> library) {
if( getAccount().equals("123456789") ) {
Scanner s = new Scanner(System.in);
System.out.println("输入要删除书籍的书号:");
int id = s.nextInt();
int locate = 0;
for( Book t : library) {
if( t.id == id ) {
break;
}
locate++;
}
library.remove(locate);
}
else {
System.out.println("你还不是管理员,无法进行操作");
}
}
}