Java入門第三季 1-9 《模擬借書系統》

lcc發表於2021-09-09
package com.imooc.exception_demo1;
import java.util.Scanner;
/**進入系統,查詢圖書主類(進入系統如果連續輸錯3次,則會提示是否重新進入系統,
*若提示重新進入系統的命令還是連續輸錯三次,則強制退出程式,以上是自己想法在練習基礎上增加了
*一些想法)
*/
public class PracticeOwn1_9 {
String bookname[] = { "JAVA", "語文", "數學", "英語", "建築設計" };
private static int count=0;//按照型別查詢輸入錯誤的統計數
private static int totle=0;//連續輸錯3次,統計重新進入系統輸入錯誤數
public static void main(String[] args) {
mainOperate();
}
private static void mainOperate(){int a = 0;//給a一個初始化值
Scanner input = new Scanner(System.in);
operate(a, input);//呼叫operate方法,把a傳參
}
private static void operate(int a, Scanner input) {
FindName dy = new FindName();
FindNo dx = new FindNo();
System.out.println("輸入命令:1-按照名稱查詢圖書;2-按照序號查詢圖書");
a=getA(a, input);//呼叫getA方法獲取鍵盤輸入的值賦值給a,用於判斷下面if語句
//	System.out.println("a:" + a);//列印當前a的值
if (a == 1) {//按照名稱查詢圖書
dy.findName(dy, a, input);
} else if (a == 2) {//按照序號查詢圖書
dx.findNO(dx, a, input);
}else {setCount(getCount() + 1);//因為count定義的私有變數,訪問需要get/set訪問
if(getCount()>=3){
System.out.println("對不起,您已經連續輸錯3次及以上!!!0-繼續進入系統查詢,1-退出程式");
count=0;input1();
}else{
System.out.println("你輸入的命令錯誤,請根據提示輸入數字命令!!");//判斷是否是非1和2的其他數字
,若其他數字,輸出該語句
}
}
operate(a, input);
}
public static void input1(){//判斷是否繼續進入系統查詢,若輸入命令錯誤,丟擲錯誤異常
Scanner input = new Scanner(System.in);
try{
int a=input.nextInt();
if(a == 0){
operate(a, input);
}else if (a == 1) {
System.out.println("退出程式,歡迎下次光臨!");
System.exit(0);
}else{
System.out.println("你輸入的命令錯誤,暫時無法進入系統查詢,請根據提示輸入正確的命令!!");//判斷輸
入的是否是非1和2的其他數字,若其他數字,輸出該語句
setTotle(getTotle() + 1);
if(getTotle()>=3){
System.out.println("對不起,您已經連續輸錯3次!!!已退出程式,如有需要請重新進入系統。");
System.exit(0);}
input1();}
}catch(Exception e){
setTotle(getTotle() + 1);
if(getTotle()>=3){
System.out.println("對不起,您已經連續輸錯3次及以上!!!已退出程式,如有需要請重新進入系統。");
System.exit(0);
}else{
System.out.println("111你輸入的命令錯誤,暫時無法進入系統查詢,請根據提示輸入數字命令!!");//為了
區別數字列印的和非數字列印的語句,文案前加了111}
input1();
}
}
private static int getA(int a, Scanner input){
try {a = input.nextInt();
} catch (Exception e) {//篩選類別輸入是否異常,判斷是否是非數字丟擲的異常setCount(getCount() + 1);
if(getCount()>=3){
System.out.println("對不起,您已經連續輸錯3次及以上!!!0-繼續進入系統查詢,1-退出程式");
count=0;input1();
}else{
System.out.println("輸入異常了!" + e.getMessage());
System.out.println("111你輸入的命令錯誤,請根據提示輸入數字命令!!");//為了區別數字列印的和非數字
列印的語句,文案前加了111
mainOperate();
}
}
return a;
}
public static int getCount() {
return count;
}
public static void setCount(int count) {
PracticeOwn1_9.count = count;
}
public static int getTotle() {
return totle;
}
public static void setTotle(int totle) {
PracticeOwn1_9.totle = totle;
}
}




// 根據書名查詢,新建一個類繼承於父類(正常的按照影片給的模樣,未自己新增其他判斷)
package com.imooc.exception_demo1;
import java.util.InputMismatchException;
import java.util.Scanner;
public class FindName extends PracticeOwn1_9 {	
@SuppressWarnings("resource")	
public boolean findName(int order) {
// TODO Auto-generated method stub		
boolean isExist = false;		
try {			
System.out.println("請輸入圖書名稱:");			
Scanner input = new Scanner(System.in);			
String b = input.next();			
for (int i = 0; i < bookname.length; i++) {				
// System.out.println("b:" + b);				
if (bookname[i].equals(b)) {					
isExist = true;					
System.out.println("book:" + bookname[i]);					
break;				
}			
}			
if (!isExist) {				
throw new Exception("圖書名稱不存在!!1-繼續查詢,2-退出程式");//自定義異常丟擲問題			
}
} catch (Exception e) {	
System.out.println(e);
}
//System.out.println("isExist:" + isExist);//列印isExist,判斷返回狀態
return isExist;	}
public  void findName(FindName dy, int a, Scanner input) {
boolean isTrue = findName(a);
//System.out.println("isTrue:" + isTrue);//列印isTrue的狀態,定位當前返回的值
if (isTrue) {
findName(dy, a, input);	
} else {
input();
findName(dy, a, input);	
}
}
public void input(){
Scanner input = new Scanner(System.in);	
try{
int a=input.nextInt();
if(a == 1){
FindName dy = new FindName();
findName(dy, a, input);	
}else if( a == 2){
System.out.println("退出程式,歡迎下次光臨!");	
System.exit(0);	
}else{//判斷數字是否符合
System.out.println("輸入的命令有誤,請重新輸入:1-繼續查詢,2-退出程式");
}
input();
}catch(InputMismatchException e){//輸入異常判斷,如:英文字母、特殊字元	
System.out.println("111輸入的命令有誤,請重新輸入:1-繼續查詢,2-退出程式");
input();
}
}
}


/**
*按照序號查詢圖書,新建類繼承於父類(該類設定了查詢次數,錯誤查詢和正確查詢超過3次,即提示是否繼
*續查詢,以上是新增了自己的想法)
*/
public class FindNo extends PracticeOwn1_9 {
int count1=0;//正確查詢次數統計
int sum1=0;//錯誤查詢次數統計
int totle=0;//繼續查詢次數統計
@SuppressWarnings("resource")
public boolean findNO(int order) {
// TODO Auto-generated method stubboolean 
isExist = false;
System.out.println("請輸入圖書序號:");
try{Scanner input=new Scanner(System.in);
int c=input.nextInt() - 1;
System.out.println("book:"+bookname[c]);
count1++;//若走正常查詢,統計數+1
sum1=0;//只要正常查詢一次,即錯誤統計數清零
isExist=true;
}catch(ArrayIndexOutOfBoundsException e){//判斷下標是否異常
//e.printStackTrace();
System.out.println("圖書id不存在,請重新輸入!");
count1=0;//只要錯誤查詢一次,即正確查詢統計數清零
sum1++;//若走錯誤查詢,統計數+1(不管是哪種異常統計數都+1)
}catch(InputMismatchException e){//判斷輸入是否為正整數
System.out.println("請輸入正整數!!圖書不存在,請重新輸入!");
count1=0;//只要錯誤查詢一次,即正確查詢統計數清零
sum1++;//若走錯誤查詢,統計數+1(不管是哪種異常統計數都+1)
}
//System.out.println("isExist:" + isExist);//列印返回狀態
return isExist;//返回查詢狀態,false:沒找到,true:已查詢到
}
public void findNO(FindNo dx, int a, Scanner input) {
boolean isTrue = findNO(a);//判斷是否查詢到圖書,false否,true是//	
System.out.println("isTrue:" + isTrue);//列印返回狀態
if (isTrue) {//正常查詢
if(count1>=3){
System.out.println("查詢已經超過3次了,你還繼續查詢嗎?1-是,2-否");
count1=0;
totle=0;
input();
}
findNO(dx, a, input);
} else {
if(sum1>=3){
System.out.println("您已連續錯了三次了,是否繼續查詢?1-是,2-否");
sum1=0;
totle=0; 
input();
}
findNO(dx, a, input);
}
input();
}
public void input(){
Scanner input = new Scanner(System.in);
try{int a=input.nextInt();
if(a == 1){
FindNo dx = new FindNo();
findNO(dx, a, input);
}else if( a == 2){
System.out.println("退出程式,歡迎下次光臨!");
System.exit(0);
}
else{
totle++;
if(totle>=3){
System.out.println("1111您已連續錯了三次了,是否繼續查詢?1-是,2-否");
input();
}else{
System.out.println("輸入的命令有誤,請重新輸入:1-繼續查詢,2-退出程式");
}
input();
}
input();
}catch(InputMismatchException e){
totle++;
if(totle>=3){
System.out.println("1111您已連續錯了三次了,是否繼續查詢?1-是,2-否");
input();
}else{
System.out.println("輸入的命令有誤,請重新輸入:1-繼續查詢,2-退出程式");
}input();
}
}
}

小測試一枚,學習JAVA中???,歡迎指導,謝謝










來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2331/viewspace-2823248/,如需轉載,請註明出處,否則將追究法律責任。

相關文章