java学习之借书系统
实现的图书借阅系统要处理用户输入的非法参数,并引导用户正确使用
测试结果:


主要目的就是练习异常处理中的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学习之借书系统的更多相关文章
- java学习之租车系统
背景:有三种类型的车供给用户来租用 要求:控制台用户交互界面,根据用户需求输出租车价格,结果如下: 创建租车类主要设计过程: 创建租车类 创建Car父类,包含四种属性成员,重写构造方法 创建三种 ...
- Java 学习(14):接口 & 包(设置 CLASSPATH 系统变量)
Java 接口(英文:Interface) 定义:在JAVA编程语言中,接口是一个抽象类型,是抽象方法的集合,接口通常以 interface 来声明. 一个类通过继承接口的方式,从而来继承接口的抽象方 ...
- 20145230《java学习笔记》第七周学习总结
20145230 <Java程序设计>第7周学习总结 教材学习内容 Lambda语法概览 我们在许多地方都会有按字符串长度排序的需求,如果在同一个方法内,我们可以使用一个byName局部变 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- (转)如何学习Java技术?谈Java学习之路
51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...
- Java学习之路:不走弯路,就是捷径
1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...
- Java 学习
effective+java第三版 2016-09-23 15:25 effective+java第三版 相关问答 EffectiveJava第28条中关于泛型的一个疑问? @又名耶稣谢邀 一.先说说 ...
- 转:Java学习路线图
作者: nuanyangyang 标 题: Java学习路线图(整理中,欢迎纠正) 发信站: 北邮人论坛 (Mon Aug 11 19:28:16 2014), 站内 [以下肯定是不完整的列表, ...
- Java[1] Java学习书籍汇总(转)
原文:http://www.cnblogs.com/hyl8218/p/5067000.html 学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: ...
随机推荐
- LookupError: unknown encoding: cp65001解决方案
本人遇到这个问题搜索了很多网站,有人建议在cmd中执行命令chcp 936,然而,,,最终决定更换cmd窗口,window的cmd真的很烂, 果断使用git cmd,完美解决...
- 界面编程之QT的事件20180727
/*******************************************************************************************/ 一.事件 1 ...
- 3分钟读懂移动端rem使用方法
1.为什么要用rem 博客很久没写了,原因很简单. 最近接手了一个项目,要同时做PC和移动端的页面,之前没接触过,但毕竟给钱的是大爷,所以还是硬着头皮上了. 移动端最麻烦的是什么? 不同分辨率适配! ...
- node爬虫进阶版
手写了一个方便爬虫的小库: const url = require('url') const glib = require('zlib') //默认头部 const _default_headers ...
- C#的Struct
- Spring RedisTemplate操作-List操作(4)
@Autowired @Resource(name="redisTemplate") private RedisTemplate<String, String> rt; ...
- HTTP Methods
简介 HTTP 定义了一组请求方法,以表明要对给定资源执行的操作.指示针对给定资源要执行的期望动作, 虽然他们也可以是名词,但这些请求方法有时被称为HTTP动词.每一个请求方法都实现了不同的语义,但一 ...
- C++(vs)多线程调试 (转)
在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”.利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后 ...
- 针对Jigsaw勒索软件的解锁工具
针对Jigsaw勒索软件的解锁工具 据了解, 用户的计算机系统一旦感染了勒索软件Jigsaw,如果用户没有在一个小时之内支付赎金(0.4个比特币,价值约为150美金),那么恶意软件将会把系统中的上千份 ...
- 大数据系列之并行计算引擎Spark部署及应用
相关博文: 大数据系列之并行计算引擎Spark介绍 之前介绍过关于Spark的程序运行模式有三种: 1.Local模式: 2.standalone(独立模式) 3.Yarn/mesos模式 本文将介绍 ...