实现的图书借阅系统要处理用户输入的非法参数,并引导用户正确使用

测试结果:

主要目的就是练习异常处理中的Exception类的使用

使用的相关语法

 try{
//可能产生异常的代码块
}catch(Exception e){
//处理异常的代码块
}finally{//可以根据需要选择
//最终执行的代码块
}

实现过程:

创建BorrowBook类

import java.util.InputMismatchException;
import java.util.Scanner;
public class BorrowBook { Scanner scn = new Scanner(System.in);
}

定义三种异常类:输入的编号没有对应图书的异常、输入的书名没有对应的图书的异常、其他正常异常

private static class commanException extends Exception{
private commanException() {}
}
private static class bookNumException extends Exception{
private bookNumException() {}
}
private static class bookNameException extends Exception{
private bookNameException() {}
}

创建抛出异常方法,并抛出三种异常

private void commanExc() throws commanException{
throw new commanException();
}
private void bookNumExc() throws bookNumException{
throw new bookNumException();
}
private void bookNameExc() throws bookNameException{
throw new bookNameException();
}

创建用于存储图书的Box的方法(以两类书为例)

private static String[] bookBox() {
String[] bookBox = new String[] {"高数","线性代数"};
return bookBox;
}

创建借书入口方法

private static void borrowBook() throws Exception{
System.out.println("输入命令:1-根据名称查找图书;2-根据序号查找图书");
try {
int inputNum = new BorrowBook().scn.nextInt();
try {
if(inputNum == 0) {
borrowBkByName(bookBox());
}else if(inputNum == 1){
borrowBkByNum(bookBox());
}else {
new BorrowBook().commanExc();
}
}catch(Exception e){
System.out.println("命令输入错误,请根据提示输入数字命令!");
borrowBook();
}
}catch(InputMismatchException eInput) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
borrowBook();
}
}

创建依据书名借书的方法

private static void borrowBkByName(String[] books) throws Exception{
System.out.println("输入图书名称:");
String bookName = new BorrowBook().scn.next();
try {
switch(bookName) {
case "高数":
System.out.println("book:" + bookName);
break;
case "线性代数":
System.out.println("book:" + bookName);
break;
default:
new BorrowBook().bookNameExc();
}
}catch(Exception e) {
System.out.println("图书不存在!");
borrowBkByName(books);
}
}

创建依据图书序号借书的方法

private static void borrowBkByNum(String[] books) throws Exception{
System.out.println("输入图书序号:");
try {
int bookNum = new BorrowBook().scn.nextInt();
try {
switch(bookNum) {
case 1:
System.out.println("book:" + books[bookNum]);
break;
case 2:
System.out.println("book:" + books[bookNum]);
break;
default:
new BorrowBook().bookNumExc();
}
}catch(Exception e) {
System.out.println("图书不存在!");
borrowBkByNum(books);
}
}catch(InputMismatchException e) {
System.out.println("命令输入错误,请根据提示输入数字命令!");
borrowBkByNum(books);
}
}

用于初始化的main方法

public static void main(String[] args) throws Exception{
borrowBook();
new BorrowBook().scn.close();
}

java学习之借书系统的更多相关文章

  1. java学习之租车系统

    ​背景:有三种类型的车供给用户来租用​ ​要求:控制台用户交互界面,根据用户需求输出租车价格,结果如下: 创建租车类主要设计过程: 创建租车类 创建Car父类,包含四种属性成员,重写构造方法 创建三种 ...

  2. Java 学习(14):接口 & 包(设置 CLASSPATH 系统变量)

    Java 接口(英文:Interface) 定义:在JAVA编程语言中,接口是一个抽象类型,是抽象方法的集合,接口通常以 interface 来声明. 一个类通过继承接口的方式,从而来继承接口的抽象方 ...

  3. 20145230《java学习笔记》第七周学习总结

    20145230 <Java程序设计>第7周学习总结 教材学习内容 Lambda语法概览 我们在许多地方都会有按字符串长度排序的需求,如果在同一个方法内,我们可以使用一个byName局部变 ...

  4. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  5. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  6. Java学习之路:不走弯路,就是捷径

    1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...

  7. Java 学习

    effective+java第三版 2016-09-23 15:25 effective+java第三版 相关问答 EffectiveJava第28条中关于泛型的一个疑问? @又名耶稣谢邀 一.先说说 ...

  8. 转:Java学习路线图

    作者: nuanyangyang 标  题: Java学习路线图(整理中,欢迎纠正) 发信站: 北邮人论坛 (Mon Aug 11 19:28:16 2014), 站内   [以下肯定是不完整的列表, ...

  9. Java[1] Java学习书籍汇总(转)

    原文:http://www.cnblogs.com/hyl8218/p/5067000.html 学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: ...

随机推荐

  1. c++桥接模式

    可以简记为pointer to implement:”指向实现的指针”. [DP]书上定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化.考虑装操作系统,有多种配置的计算机,同样也有多款操作系 ...

  2. 20145215卢肖明《网络对抗》逆向及Bof基础

    20145215卢肖明<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...

  3. P1858 多人背包

    P1858 多人背包 题目描述 求01背包前k优解的价值和 要求装满 调试日志: 初始化没有赋给 dp[0] Solution 首先补充个知识点啊, 要求装满的背包需要初始赋 \(-inf\), 边界 ...

  4. Java基础-时间复杂度计算方式

    Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

  5. 解决linux mysql命令 bash: mysql: command not found 的方法

    错误: root@DB-02 ~]# mysql -u root-bash: mysql: command not found 原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这 ...

  6. Spring RedisTemplate操作-xml配置(1)

    网上没能找到全的spring redistemplate操作例子,故特意化了点时间做了接口调用练习,基本包含了所有redistemplate方法. 该操作例子是个系列,该片为spring xml配置, ...

  7. Sublime Text 2 绿化与汉化 [Windows篇]

    其实 ST3 已经出了很久了,可是我这个人恋旧,一直钟爱 ST2,所以就选择她了.最近我的 ST2 越来越卡,甚至有时候输入都会延迟1秒,所以打算自己搞个绿化版. 打开 Sublime Text 官网 ...

  8. ie6下的line-height属性

    line-height这个属性是被ie6所支持的. 当是当一个父级元素内的子元素,包含了文字,且文字和img,input,label,span这些内联元素连接在一起的时候,你对父级元素设置line-h ...

  9. 五行代码终极完美解决从IE6到Chrome所有浏览器的position:fixed;以及闪动问题

    这个方法其实已经使用很久了,之前主要在嵌入式WebQQ等产品中用过,现在拿出来分享一下吧,是目前最简洁的方式来实现ie6的position:fixed; 失效bug,以及的其他方法的闪动问题,CSS代 ...

  10. JavaScript继承详解(五)

    在本章中,我们将分析John Resig关于JavaScript继承的一个实现 - Simple JavaScript Inheritance. John Resig作为jQuery的创始人而声名在外 ...