手记

Java入门第三季 1-9 《模拟借书系统》

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中???,欢迎指导,谢谢










4人推荐
随时随地看视频
慕课网APP

热门评论

写的很好啊

查看全部评论