就像使用C語言寫代碼一樣。比如要用??????C語言寫一個小游戲的代碼,我們的邏輯實現(xiàn)是在哪里實現(xiàn)的啊?是不是在一個test.c源文件里面???沒錯,就是的!在之前的文章里,我說過我定義的Main函數(shù)就像C語言里的test.c文件一樣!所以,為了不打自己的臉。那我便在main函數(shù)里面實現(xiàn)我的圖書管理系統(tǒng)的邏輯。
?
目錄
邏輯實現(xiàn):
第一步:登錄界面
第二步:菜單的實現(xiàn)
第三步:增,刪,查,顯示等操作方法的實現(xiàn)和調(diào)用
?方法實現(xiàn):
?
邏輯實現(xiàn):
第一步:登錄界面
就像我們在日常生活中使用其它的系統(tǒng)有界面一樣,為了使我們的圖書館管理系統(tǒng)更好的使用我們就需要有一個登錄界面。
我的界面是這樣的:
登錄方法:landing
package User;
import java.util.Scanner;
import Library.Booklist;
public class Main {
public static User landing() {//登錄界面的方法
System.out.println("請輸入你的名字:>");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.println("請選擇:0->普通用戶,1——>管理員");
int choice = scanner.nextInt();
if(choice == 0 ) {
return new NormalUser(name);
}
else {
return new AdminUser(name);}
}
public static void main(String[] args) {
Booklist booklist = new Booklist();//準備數(shù)據(jù)
User user = landing();//用來選擇登錄那個界面的
}
}
說明:
1.這里最關(guān)鍵的一點是什么呢?其實是landing方法的返回類型!也就是這個:
?可以看到這里的返回類型是User!為什么要使用User來作為返回類型呢?是因為User是AdminUser與NormalUser的父類!父類?父類又能如何呢?其實這是因為我寫這段代碼時這個登陸的方法是為了先讓使用者選擇身份,所以我們在登陸時就要有AdminUser與NormalUser兩種不同的界面選擇!所以為了兼容AdminUser與NormalUser于是我就使用了這兩者的父類User來作為返回類型!
?2.接收也要用User類型的變量來接收
第二步:菜單的實現(xiàn)
經(jīng)過上述代碼,現(xiàn)在我能實現(xiàn)的效果就是這樣的:能輸入一個名字,能選擇一個身份。
?但是,我們要的是這樣的:
一步一步來,先加個菜單:?
首先來設(shè)想一下,菜單是用來干嗎的?菜單嗎,選擇的唄!那我們該如何選擇呢?想一下當初用C語言寫的游戲,無一例外都是用數(shù)字來進行選擇的!所以,這個菜單的返回類型就是int型,我們在main方法里面便用int 型的變量來接收返回值,于是我們在main方法里面就多加了一條語句:
有了設(shè)想,現(xiàn)在就可以來實現(xiàn)這個菜單了:
先在User父類里定義一個抽象方法menu(),返回類型為int。但是抽象方法只能放在抽象類里邊,所以User父類就被迫變成一個抽象類了!
代碼:
package User;
public abstract class User {
protected String name;
public User(String name) {
// TODO Auto-generated constructor stub
this.name = name;
}
public abstract int menu();
}
說明:可能大家對這個操作會有疑問:
1.為什么要用抽象類呢?這是因為你用了抽象方法menu()!
2.為什么要用抽象方法呢?這是因為menu()這個方法是不用在User父類中具體實現(xiàn)的。
3.既然不用實現(xiàn)那我們?yōu)槭裁匆愠鲞@么個玩意呢?這是因為我們在main方法中就是用User user來調(diào)用menu的,如果User(父類)沒有menu()這個方法,那user將會報錯!
?好了,解釋完畢!現(xiàn)在來看看menu()方法的具體實現(xiàn):
AdminUser中:
package User;
import java.util.Scanner;
public class AdminUser extends User{
public AdminUser(String name) {
// TODO Auto-generated constructor stub
super(name);//先幫父類構(gòu)造
this.name = name;//再自己構(gòu)造
}
public int menu() {
System.out.println("歡迎 "+name+"來到圖書管理系統(tǒng)");
System.out.println("*******************************");
System.out.println("0.退出系統(tǒng)");
System.out.println("1.添加圖書");
System.out.println("2.移除圖書");
System.out.println("3.查找圖書");
System.out.println("4.顯示圖書");
System.out.println("*******************************");
System.out.println("請選擇你的操作");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
NormalUser類中:
package User;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name) {
// TODO Auto-generated constructor stub
super(name);
this.name = name;
}
public int menu() {
System.out.println("歡迎 "+name+"來到圖書管理系統(tǒng)");
System.out.println("*******************************");
System.out.println("0.退出系統(tǒng)");
System.out.println("1.借閱圖書");
System.out.println("2.歸還圖書");
System.out.println("3.查找圖書");
System.out.println("4.顯示圖書");
System.out.println("請選擇你的操作");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
第三步:增,刪,查,顯示等操作方法的實現(xiàn)和調(diào)用
在介紹搭建圖書管理系統(tǒng)框架的那篇博客當中我已經(jīng)將圖書管理系統(tǒng)中的各種方法粗略的講了一遍了?,F(xiàn)在我就來實現(xiàn)一下這些方法!但是方法實現(xiàn)了又能怎樣呢?有了方法要用才是真的!所以我們先來講講如何用我們的選擇調(diào)用這些方法!
思路:
還記得我說這些方法就是一個多態(tài),但是他們都間接繼承于IOperation這個接口。所以我們是否能定義一個IOperation接口型的數(shù)組來通過下標來對這些方法來進行調(diào)用呢?答案是當然可以的。
?第一步:User(父類)中
第二步:在AdminUser(子類)中
??
?第三步:在NormalUser(子類)中
?
?
調(diào)用:
在搞清楚如何調(diào)用并且做了相關(guān)的準備以后我們就可以來寫調(diào)用方法了
調(diào)用方法:doOperation
這個方法要定義在User里,為什么呢?這是因為我們在main方法里面是要用User類型的user來對這個方法來進行使用的,假如我的User父類里面沒有這個方法那還怎么使用這個方法呢?所以這個方法就要定義在User(父類)中。
?
代碼:
public void doOperation(int choice,Booklist booklist) {
ioperations[choice].work(booklist);//利用之前定義的接口數(shù)組來訪問各種操作方法
}
?方法實現(xiàn):
1.AddOperation
代碼:
package Operation;
import java.util.Scanner;
import Library.Booklist;
public class AddOperation implements IOperation{
public void work(Booklist booklist) {//重寫方法,使這個方法變?yōu)锳ddoperation的方法
System.out.println("添加圖書!");
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入你要添加的圖書的名字:>");
String name = scanner.nextLine();
System.out.println("請輸入你要添加的圖書的類型:>");
String type = scanner.nextLine();
System.out.println("請輸入你要添加的圖書的作者:>");
String author = scanner.nextLine();
System.out.println("請輸入你要添加的圖書的價格:>");
int price = scanner.nextInt();
System.out.println("添加成功!");
}
}
2.DisplayOperation
代碼:
package Operation;
import Library.Book;
import Library.Booklist;
public class DisplayOperation implements IOperation {
public void work(Booklist booklist) {
System.out.println("顯示圖書!");
int curSize = booklist.getSize();
for(int i = 0;i<curSize;i++) {
Book book = booklist.getPos(i);
System.out.println(book);
}
}
}
當然,這個代碼要實現(xiàn)就要在原來的代碼中添加一些細節(jié)的東西,三處細節(jié):
因為我這里是使用遍歷的方法來對每一本書的信息進行打印的。所以,我就要知道整個數(shù)組的長度。所以,原來的booklist類中就要有代表數(shù)組長度的變量和獲取數(shù)組長度的方法,所以原來的代碼就被多加了:
獲取完長度以后,我們就要對一本書的各種信息進行打印了,一般是System.out.println(book)這樣來打印的。所以我們要獲取到每一本書,所以我們又要添加一個獲取每一本書的方法:
??但是很快你就會又發(fā)現(xiàn)一個錯誤:
打印出來了一堆奇奇怪怪的東西,為什么呢?沒有重寫唄。所以我們又要在Book這個類里面加一個重寫的方法:
?
搞完收工!??
?3.DelOperation
package Operation;
import java.util.Scanner;
import Library.Book;
import Library.Booklist;
public class DelOperation implements IOperation {
public void work(Booklist booklist) {//重寫方法,使work方法變成DelOperation的方法
Scanner scanner = new Scanner(System.in);
System.out.println("刪除圖書!");
System.out.println("請輸入你要刪除的圖書的名字:>");
String name = scanner.nextLine();
int curSize = booklist.getSize();
int index = -1;
for(int i = 0;i<curSize;i++) {
Book book = booklist.getPos(i);
if(name.equals(book.getName())) {
index = i;
break;
}
}
if(index == -1) {
System.out.println("沒有你要刪除的書!");
}
else {
for(int i = index;i<curSize-1;i++) {
Book book = booklist.getPos(i+1);
booklist.setBooks(book, i);
}
booklist.setSize(curSize-1);
booklist.setBooks(null, curSize);
System.out.println("刪除成功!");
}
}
}
當然這個代碼也要添加一些細節(jié)的東西,比如設(shè)置書架某一位置設(shè)置為下一本書東西的方法,setBooks:
?當然,在刪除完一本書以后書的數(shù)量就要減少,書的最后一個位置就要置空:
?
4.其它方法文章來源:http://www.zghlxwxcb.cn/news/detail-432763.html
?其實在寫完前面的幾個方法以后其它的代碼都很好寫了,這里我就不寫了!如果讀者感興趣的話可以自己思考一下來寫那幾個方法!文章來源地址http://www.zghlxwxcb.cn/news/detail-432763.html
到了這里,關(guān)于使用eclipse創(chuàng)建一個圖書管理系統(tǒng)(2)---------邏輯的實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!