Top

JAVA Fundamental DAY03

  1. 闰年判断程序
  2. 完成收银柜台收款程序V2.0
  3. 完成收银柜台收款程序V3.0
  4. 完成成绩等级输出程序
  5. 完成命令解析程序

1 闰年判断程序

1.1 问题

闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。

地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年。公历的平年(非闰年)只有365日,比回归年短约0.2422 日,所余下的时间约为四年累计一天,故每四年则于2月加1天,使当年的历年长度为366日,这一年就为闰年。但是,如果按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是 100 的倍数的,必须同时也是400的倍数,才是闰年;不是400的倍数的,虽然是100的倍数,也是平年。这就是通常所说的:四年一闰,百年不闰,四百年再闰。 例如,2000年是闰年,1900年则是平年。

本案例需要使用交互的方式判断某年是否为闰年:用户从控制台输入需要判断的年份值,由程序判断该年是否为闰年,并将判断结果输出到控制台。程序交互过程如图-1所示:

图-1

1.2 方案

首先,此案例需要从控制台接收用户录入的年份值,使用 Scanner 类的相应方法即可接收控制台的录入;

其次,根据闰年的规则可以总结出,如果年份可以被 400 整除,则必然是闰年;另外,如果年份可以被 4 整除,但是不能被 100 整除,则也是闰年;其他年份则是平年(非闰年)。因此,需要使用取余运算符(%)判断整除,并需要使用逻辑运算符来构建判断表达式,以进行判断。

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义类及 main方法

首先定义一个名为 LeapYear的类,并在类中添加 main方法。代码如下所示:

public class LeapYear {
	public static void main(String[] args) {
	}
}

步骤二:读取控制台的输入

在main方法中,实例化Scanner类,并调用Scanner类的nextInt() 方法接收用户从控制台输入的年份数值,使用完毕后将scanner对象关闭。代码如下所示:

#cold_boldimport java.util.Scanner;
public class LeapYear {
	public static void main(String[] args) {
#cold_bold		Scanner scanner = new Scanner(System.in);
#cold_bold		System.out.println("请输入年份(例如:2012)");
#cold_bold		int year = scanner.nextInt();
#cold_bold		scanner.close();
	}
}

步骤三:闰年判断

某年份只需要满足下列两个条件之一,即可认定是闰年:

因此,需要使用 % 运算符、== 运算符、!= 运算符、&& 和 || 运算符,来综合判断某年份是否为闰年。代码如下所示:

import java.util.Scanner;
public class LeapYear {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入年份(例如:2012)");
		int year = scanner.nextInt();
		scanner.close();
#cold_bold		boolean isLeapYear = (year % 4 == 0 && year % 100 != 0)
#cold_bold				|| year % 400 == 0;
	}
}

步骤四:输出结果

使用三目运算符,构建表示判断结果的 String 类型信息,并输出到控制台。代码如下所示:

import java.util.Scanner;
public class LeapYear {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入年份(例如:2012)");
		int year = scanner.nextInt();
		scanner.close();
		boolean isLeapYear = (year % 4 == 0 && year % 100 != 0)
				|| year % 400 == 0;
#cold_bold		String msg = isLeapYear ? year + "是闰年" : year + "不是闰年";
#cold_bold		System.out.println(msg);
	}
}

1.4 完整代码

本案例的完整代码如下所示:

import java.util.Scanner;
public class LeapYear {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入年份(例如:2012)");
		int year = scanner.nextInt();
		scanner.close();
		boolean isLeapYear = (year % 4 == 0 && year % 100 != 0)
				|| year % 400 == 0;
		String msg = isLeapYear ? year + "是闰年" : year + "不是闰年";
		System.out.println(msg);
	}
}

2 完成收银柜台收款程序V2.0

2.1 问题

编写一个收银柜台收款程序。根据商品单价、购买数量以及收款金额计算并输出应收金额和找零;当总价大于或等于500时,享受8折优惠。控制台交互情况如图-2所示。

图- 2

2.2 方案

本案例的实现方案如图-3所示。图中T表示true,F表示false。

图- 3

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义类及 main方法

首先定义一个名为 Cashier的类,并在类中添加Java应用程序的主方法main,代码如下所示:

public class Cashier {
	public static void main(String[] args) {
		
	}
}

步骤二:读取控制台输入

在main方法中,实例化Scanner类,并调用Scanner类的nextDouble() 方法接收用户从控制台输入的商品单价、购买数量、收款金额,使用完毕后将scanner对象关闭,以释放资源。代码如下所示:

#cold_boldimport java.util.Scanner;

public class Cashier {
	public static void main(String[] args) {
#cold_bold		// 输入数据
#cold_bold		Scanner console = new Scanner(System.in);
#cold_bold		System.out.println("请输入单价(¥):");
#cold_bold		double unitPrice = console.nextDouble();
#cold_bold		System.out.println("请输入数量:");
#cold_bold		double amount = console.nextDouble();
#cold_bold		System.out.println("请输入金额(¥):");
#cold_bold		double money = console.nextDouble();
#cold_bold		console.close();
	}
}

在此需要注意导入Scanner类所在的包。

步骤三:计算所购商品总价并判断是否打折

首先,计算商品的总价;然后,使用if语句判断商品总价是否大于等于500,如果大于等于500,商品总价打八折;最后,计算打八折后的应收金额,代码如下所示:

import java.util.Scanner;

public class Cashier {
	public static void main(String[] args) {
		// 输入数据
		Scanner console = new Scanner(System.in);
		System.out.println("请输入单价(¥):");
		double unitPrice = console.nextDouble();
		System.out.println("请输入数量:");
		double amount = console.nextDouble();
		System.out.println("请输入金额(¥):");
		double money = console.nextDouble();
		console.close();

#cold_bold		// 计算商品总价
#cold_bold		double totalPrice = 0.0;
#cold_bold		totalPrice = unitPrice * amount;
#cold_bold		if (totalPrice >= 500) {
#cold_bold			totalPrice = totalPrice * 0.8;
#cold_bold		}
	}
}

步骤四:计算找零并输出结果

首先,将收款金额减去应收金额,即为找零;然后,输出应收金额和找零金额,代码如下所示:

import java.util.Scanner;

public class Cashier {
	public static void main(String[] args) {
		// 输入数据
		Scanner console = new Scanner(System.in);
		System.out.println("请输入单价(¥):");
		double unitPrice = console.nextDouble();
		System.out.println("请输入数量:");
		double amount = console.nextDouble();
		System.out.println("请输入金额(¥):");
		double money = console.nextDouble();
		console.close();

		// 计算商品总价
		double totalPrice = 0.0;
		totalPrice = unitPrice * amount;

		if (totalPrice >= 500) {
			totalPrice = totalPrice * 0.8;
		}
#cold_bold		// 计算找零
#cold_bold		double change = money - totalPrice;
#cold_bold		System.out.println("应收金额为:¥" + totalPrice + ",找零为:¥" + change);
	}
}

2.4 完整代码

本案例的完整代码如下所示:

import java.util.Scanner;

public class Cashier {
	public static void main(String[] args) {
		// 输入数据
		Scanner console = new Scanner(System.in);
		System.out.println("请输入单价(¥):");
		double unitPrice = console.nextDouble();
		System.out.println("请输入数量:");
		double amount = console.nextDouble();
		System.out.println("请输入金额(¥):");
		double money = console.nextDouble();
		console.close();

		// 计算商品总价
		double totalPrice = 0.0;
		totalPrice = unitPrice * amount;

		if (totalPrice >= 500) {
			totalPrice = totalPrice * 0.8;
		}
		// 计算找零
		double change = money - totalPrice;
		System.out.println("应收金额为:¥" + totalPrice + ",找零为:¥" + change);
	}
}

3 完成收银柜台收款程序V3.0

3.1 问题

编写一个收银柜台收款程序,根据商品单价、购买数量以及收款金额计算并输出应收金额和找零;当总价大于或等于500时,享受8折优惠。考虑程序的异常情况:收款金额小于应收金额。控制台交互情况如下:

当收款金额大于等于应收金额时,控制台交互情况如图-4所示。

图- 4

当收款金额小于应收金额时,控制台的交互情况如图-5所示。

图- 5

3.2 方案

本案例的实现方案如图-6所示。图中T表示true,F表示false。

图- 6

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:使用if-else修改上一案例

在本案例中,直到计算折扣之前与上一案例都是相同的。在此,只需要在上一案例的基础上修改为如下代码即可:

import java.util.Scanner;

public class Cashier {
	public static void main(String[] args) {
		// 输入数据
		Scanner console = new Scanner(System.in);
		System.out.println("请输入单价(¥):");
		double unitPrice = console.nextDouble();
		System.out.println("请输入数量:");
		double amount = console.nextDouble();
		System.out.println("请输入金额(¥):");
		double money = console.nextDouble();
		console.close();

		// 计算商品总价
		double totalPrice = 0.0;
		totalPrice = unitPrice * amount;
     
     	if (totalPrice >= 500) {
			totalPrice = totalPrice * 0.8;
		}

#cold_bold		if (money >= totalPrice) {
#cold_bold			double change = money - totalPrice;
#cold_bold			System.out.println("应收金额为:¥" + totalPrice + ",找零为:¥" + change);
#cold_bold		}else{
#cold_bold			System.out.println("输入信息有误!");
#cold_bold		}

	}
}

从上述代码中,可以看出使用了if-else分支来判断收款金额和应收金额的大小。当收款金额大于等于应收金额时,计算找零,然后输出信息;当收款金额小于应收金额时,输出错误提示信息。

3.4 完整代码

本案例的完整代码如下所示:

import java.util.Scanner;

public class Cashier {
	public static void main(String[] args) {
		// 输入数据
		Scanner console = new Scanner(System.in);
		System.out.println("请输入单价(¥):");
		double unitPrice = console.nextDouble();
		System.out.println("请输入数量:");
		double amount = console.nextDouble();
		System.out.println("请输入金额(¥):");
		double money = console.nextDouble();
		console.close();

		// 计算商品总价
		double totalPrice = 0.0;
		totalPrice = unitPrice * amount;
     
     	if (totalPrice >= 500) {
			totalPrice = totalPrice * 0.8;
		}

		if (money >= totalPrice) {
			double change = money - totalPrice;
			System.out.println("应收金额为:¥" + totalPrice + ",找零为:¥" + change);
		}else{
			System.out.println("输入信息有误!");
		}
	}
}

4 完成成绩等级输出程序

4.1 问题

学员成绩等级计算程序要求根据学员的分数计算该分数的所属等级并输出结果。首先,用户输入学员分数,该分数要求在0-100之间,如果录入错误,则提示错误信息,交互过程如图-7所示。

图- 7

如果用户录入的分数正确(在0到100之间),则根据表-1中的规则计算该分数所对应的级别,并输出计算结果,交互过程如图-8所示。

表-1 成绩和级别关系表

图- 8

另外,本案例要求使用if-else结构来实现。

4.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义类及 main 方法

首先定义一个名为 LevelForIf的类,并在类中定义Java 应用程序的入口方法main ,代码如下所示:

public class LevelForIf {
	public static void main(String[] args) {
	}
}

步骤二:读取控制台的输入

在main方法中,实例化Scanner类,并调用Scanner类的nextInt 方法接收用户所录入的学员分数,使用完毕后将scanner对象关闭。代码如下所示:

import java.util.Scanner;
public class LevelForIf {
	public static void main(String[] args) {
#cold_bold		Scanner scanner = new Scanner(System.in);
#cold_bold		System.out.println("请输入该学员的分数(0-100):");
#cold_bold		int score = scanner.nextInt();
#cold_bold		scanner.close();
	}
}

步骤三:使用 if-else 语句进行判断

先使用if语句判断所录入的分数是否在0到100之间;如果不在正确的范围,则先输出提示信息,再使用 return 终止方法的运行。

如果录入的分数确实在 0-100 之间,则使用 if-else 结构判断不同的分数段并输出不同的级别。代码如下所示:

import java.util.Scanner;
public class LevelForIf {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入该学员的分数(0-100):");
		int score = scanner.nextInt();
		scanner.close();
#cold_bold		if(score<0 || score>100){
#cold_bold			System.out.println("请输入0到100以内的分数");
#cold_bold		}else if (score >= 90) {
#cold_bold			System.out.println("A");
#cold_bold		} else if (score >= 80) {
#cold_bold			System.out.println("B");
#cold_bold		} else if (score >= 60) {
#cold_bold			System.out.println("C");
#cold_bold		} else {
#cold_bold			System.out.println("D");
#cold_bold		}
	}
}

4.3 完整代码

本案例的完整代码如下所示:

import java.util.Scanner;
public class LevelForIf {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入该学员的分数(0-100):");
		int score = scanner.nextInt();
		scanner.close();
		if(score<0 || score>100){
			System.out.println("请输入0到100以内的分数");
		}else if (score >= 90) {
			System.out.println("A");
		} else if (score >= 80) {
			System.out.println("B");
		} else if (score >= 60) {
			System.out.println("C");
		} else {
			System.out.println("D");
		}
	}
}

5 完成命令解析程序

5.1 问题

有命令解析程序,该程序提供三个功能选项供用户选择,用户选择某功能后,程序在界面上输出用户所选择的功能名称。程序的交互效果如图-9所示。

图-9

由图-9可以看出,程序提供的功能有:显示全部记录、查询登录记录和退出。如果用户在控制台输入1,则表示用户选择的功能为“显示全部记录“,此时,需要在界面上输出该功能的名称。

如果用户在控制台输入2,则表示用户选择的功能为“查询登录记录“,此时,也需要在界面上输出该功能的名称,交互效果如图-10所示。

图- 10

如果用户在控制台输入0,则表示用户选择的功能为“退出“。此时,在界面上输出”欢迎使用“,表示程序结束。交互效果如图-11所示。

图- 11

如果用户输入除0,1,2以外的其它数字,则表示选择错误,此时,在界面上输出“输入错误“。程序交互情况如图-12所示。

图- 12

另外,本案例要求使用switch-case结构来实现。

5.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义类及 main 方法

首先定义一个名为 CommandBySwitch的类,并在类中定义Java 应用程序的入口方法main ,代码如下所示:

public class CommandBySwitch {
	public static void main(String[] args) {
	}
}

步骤二:读取控制台的输入

在main方法中,实例化Scanner类,并调用Scanner类的nextInt方法接收用户所选择的功能,使用完毕后将scanner对象关闭。代码如下所示:

#cold_boldimport java.util.Scanner;
public class CommandBySwitch {
	public static void main(String[] args) {
#cold_bold		Scanner scanner = new Scanner(System.in);
#cold_bold		int command = 0;
#cold_bold		System.out.println("请选择功能: 1.显示全部记录  2.查询登录记录  0.退出");
#cold_bold		command = scanner.nextInt();
#cold_bold		scanner.close();
	}
}

步骤三:使用 switch-case 解析命令

将switch-case结构配合break语句一起使用,判断用户所选择操作,并输出解析结果。代码如下所示:

import java.util.Scanner;
public class CommandBySwitch {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int command = 0;
		System.out.println("请选择功能: 1.显示全部记录  2.查询登录记录  0.退出");
		command = scanner.nextInt();
		scanner.close();
#cold_bold		switch (command) {
#cold_bold		case 1:
#cold_bold			System.out.println("显示全部记录");
#cold_bold			break;
#cold_bold		case 2:
#cold_bold			System.out.println("查询登录记录");
#cold_bold			break;
#cold_bold		case 0:
#cold_bold			System.out.println("欢迎使用");
#cold_bold			break;
#cold_bold		default:
#cold_bold			System.out.println("输入错误");
#cold_bold		}
	}
}

5.3 完整代码

本案例的完整代码如下所示:

import java.util.Scanner;
public class CommandBySwitch {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int command = 0;
		System.out.println("请选择功能: 1.显示全部记录  2.查询登录记录  0.退出");
		command = scanner.nextInt();
		scanner.close();
		switch (command) {
		case 1:
			System.out.println("显示全部记录");
			break;
		case 2:
			System.out.println("查询登录记录");
			break;
		case 0:
			System.out.println("欢迎使用");
			break;
		default:
			System.out.println("输入错误");
		}
	}
}