零钱通
public class MoneyService {
boolean loop = true;
Date data = null;
String str = "-------------------零钱通明细-------------------";
double money = 0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//用于格式化日期
//零钱通明细功能
public void print() {
System.out.println(str + "\n");
}
//收益入账
public void getMoney() {
System.out.println("请输入金额");
double money1 = Utility.readInt();
if (money1 > 0) {
money += money1;
data = new Date();
str += "\n收益入账\t" + money1 + "\t\t" + sdf.format(data) + "\t\t余额\t" + money;
} else {
System.out.println("你的输入有误请重新输入");
}
}
String type = " ";
double outMoney = 0;
//消费
public void outMoney() {
boolean flag = true;
do {
System.out.println("请输入金额");
outMoney = Utility.readInt();
if (outMoney > money) {
System.out.println("余额不足,请重新输入");
} else {
money -= outMoney;
flag = false;
}
} while (flag);
System.out.println("请输入消费类型");
type = Utility.readString(5);
data = new Date();
str += "\n" + type + "\t\t" + outMoney + "\t\t" + sdf.format(data) + "\t\t余额\t\t" + money;
}
//退出
public boolean exit() {
System.out.println("你确定要退出吗");
char key = Utility.readConfirmSelection();
if (key == 'N') {
System.out.println("你放弃了退出系统");
} else {
loop = false;
}
return loop;
}
}
public class MoneyView {
public static void main(String[] args) {
boolean loop = true;
MoneyService moneyService = new MoneyService();
char key = ' ';
do {
System.out.println("-------------------零钱通菜单-------------------");
System.out.println("\t\t\t\t1.零钱通明细");
System.out.println("\t\t\t\t2.收益入账");
System.out.println("\t\t\t\t3.消 费");
System.out.println("\t\t\t\t4.退 出");
System.out.println("请输入你的操作(1-4)");
key = Utility.readChar();
switch (key) {
case '1':
moneyService.print();
break;
case '2':
moneyService.getMoney();
break;
case '3':
moneyService.outMoney();
break;
case '4':
loop = moneyService.exit();
// moneyService.logout();
break;
default:
System.out.println("你的输入有误请重新输入");
break;
}
} while (loop);
System.out.println("您退出了该系统");
}
}
import java.util.Scanner;
/**
工具类的作用:
处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。
*/
public class Utility {
//静态属性
private static Scanner scanner = new Scanner(System.in);
/**
* 功能:读取键盘输入的一个菜单选项,值:1——5的范围
* @return 1——5
*/
public static char readMenuSelection(){
char c ;
for (; ;){
String str = readKeyBoard(1,false);//包含一个字符的字符串
c = str.charAt(0);
if (c!='1'&&c!='2'&&c!='3'&c!='4'&c!='5'){
System.out.println("选择错误,请重新输入:");
}
else break;
}
return c;
}
/**
* 功能:读取键盘输入的一个字符
* @return 一个字符
*/
public static char readChar(){
String str = readKeyBoard(1,false);//读取字符
return str.charAt(0);
}
/**
* 功能:读取键盘输入的一个字符,如果直接按回车,则返回指定的默认值;否则返回输入的那个字符
* @param defaultValue 指定的默认值
* @return 默认值或输入的字符
*/
public static char readChar(char defaultValue){
String str = readKeyBoard(1,true);//读取结果不是字符就是一个空的字符串
return (str.length()==0)?defaultValue:str.charAt(0);
}
/**
* 功能:读取键盘输入的整型,长度小于2位
* @return 整数
*/
public static int readInt(){
int n;
for(; ;){
String str = readKeyBoard(10,true);//读取一个整数,长度<=10位
try {
n=Integer.parseInt(str);//进行转型,字符转换成整数
break;
}catch (NumberFormatException e){
System.out.println("数字输入的有错误,请重新输入!");
}
}return n;
}
/**
* 功能:读取键盘输入的 整数或默认值,如果直接回车,则返回默认值,否则返回输入的整数
*
* @param defaultValue 指定的默认值
* @return 整数或默认值
*
*/
public static int readInt(int defaultValue){
int n;
for(; ;){
String str = readKeyBoard(10,true);
if (str.equals("")){
return defaultValue;
}
//异常处理
try {
n = Integer.parseInt(str);
break;
}catch (NumberFormatException e){
System.out.println("数字输入的有错误,请重新输入!");
}
}
return n;
}
/**
* 功能:读取键盘输入的指定长度的字符串
* @param limit 限制的长度
* @return 指定长度的字符串
*/
public static String readString(int limit){
return readKeyBoard(limit,false);
}
/**
* 功能:读取键盘输入的指定长度的字符串或默认值,如果直接回车,返回默认值,否则返回字符串
* @param limit 限制的长度
* @param defaultValue 指定的默认值
* @return 指定长度的字符串
*/
public static String readString(int limit,String defaultValue){
String str = readKeyBoard(limit, true);
return str.equals("")? defaultValue : str;
}
/**
* 功能:读取键盘输入的确认选项,Y或N
* 将小的功能,封装到一个方法中.
* @return Y或N
*/
public static char readConfirmSelection(){
System.out.println("请输入你的选择(Y/N)");
char c ;
for(; ; ){
//将接受的字符转换成大写字母
String str = readKeyBoard(1,false).toUpperCase();
c = str.charAt(0);
if (c=='Y'||c=='N'){
break;
}else {
System.out.println("选择有错误,请重新输入!");
}
}
return c;
}
/**
* 功能: 读取一个字符串
* @param limit 读取的长度
* @param blankReturn 如果为true ,表示 可以读空字符串。
* 如果为false表示 不能读空字符串。
*
* 如果输入为空,或者输入大于limit的长度,就会提示重新输入。
* @return
*/
public static String readKeyBoard(int limit,boolean blankReturn){
//定义一个字符串
String line = "";
while (scanner.hasNextLine()){//判断是否有下一行
line = scanner.nextLine();
//如果line.length=0, 即用户没有输入任何内容,直接回车
if (line.length()==0){
if (blankReturn)return line;//如果blankReturn=true,可以返回空串
else continue; //如果blankReturn=false,不接受空串,必须输入内容
}
//如果用户输入的内容大于了 limit,就提示重写输入
//如果用户如的内容 >0 <= limit ,我就接受
if (line.length()<1||line.length()>limit){
System.out.print("输入长度(不能大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}
}
###运行截图