4.2 上机任务
(1)规范“蓝桥系统”中一个Java工程师信息
(2)重新组织“蓝桥系统”代码结构
(3)完成“蓝桥系统”第一个模块“输入Java工程师资料”功能,用户按提示逐行输入Java工程师信息;如果输入错误,重新开始输入Java工程师信息
主要代码如下:
package org.lanqiao.proj.java1.chap4;
import java.util.Scanner;
public class JavaEngineer {
//以下是Java工程师资料,在输入Java工程师资料时输入的内容
static int engNo = -1; //Java工程师编号
static String engName = ""; //Java工程师姓名
static int engSex = -1; //Java工程师性别(1代表男,2代表女)
static int engEdu = -1; //Java工程师学历(1代表大专,2代表本科,3代表硕士,4代表博士,5代表其他)
static int basSalary = 3000; //Java工程师底薪
static double insurance = 3000 * 0.105; //Java工程师月应扣保险金额
//以下是Java工程师月工作情况资料,在计算Java工程师月薪时再输入
static int comResult = 100; //Java工程师月工作完成分数(最小值为0,最大为150)
static double workDay = 22; //Java工程师月工作实际天数
//以下是有Java工程师资料和Java工程师月工作情况资料计算出来的Java工程师的月薪
static double engSalary = 0.0; //Java工程师月薪
static int userSel; //在用户主界面选择的输入
static boolean status = false; //status表示Java工程师资料是否输入完毕
//注意,不包括Java工程师月工作情况资料
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
while(true){
userSel = showMenu(); //调用showMenu()方法获得用户输入
switch(userSel){
case 1:
System.out.println("请现在输入Java工程师资料:");
inputEngInf(); //调用方法输入Java工程师资料
break;
case 2:
System.out.println("正删除Java工程师资料...");
deleteEngInf(); //调用方法删除Java工程师资料
break;
case 3:
System.out.println("正查询Java工程师资料...");
searchEngInf(); //调用方法查询Java工程师资料
break;
case 4:
System.out.println("正修改Java工程师资料...");
modifyEngInf(); //调用方法修改Java工程师资料
break;
case 5:
//调用方法计算Java工程师薪水,计算前需要获取月工作完成分数
//和月实际工作天数两个数值
calEngSalary();
break;
case 6:
System.out.println("本模块功能未实现");
break;
case 7:
System.out.println("本模块功能未实现");
break;
case 8:
System.out.println("本模块功能未实现");
break;
case 9:
System.out.println("本模块功能未实现");
break;
case 10:
System.out.println("本模块功能未实现");
break;
case 11:
System.out.println("本模块功能未实现");
break;
case 0:
System.out.println("程序结束!");
break;
default:
System.out.println("数据输入错误!");
break;
}
if(userSel == 0) //当用户输入0时,退出while循环,结束程序
{
break;
}
}
}
//该方法显示程序主界面,返回用户选择的功能菜单数
public static int showMenu() {
System.out.println("-----------------------------------------------------------------");
System.out.println(" 蓝桥Java工程师管理系统 ");
System.out.println("-----------------------------------------------------------------");
System.out.println("1.输入JAVA工程师资料");
System.out.println("2.删除指定JAVA工程师资料");
System.out.println("3.查询JAVA工程师资料");
System.out.println("4.修改JAVA工程师资料");
System.out.println("5.计算JAVA工程师的月薪");
System.out.println("6.保存新添加的工程师资料");
System.out.println("7.对JAVA工程师信息排序(1.编号剩序,2.姓名升序)");
System.out.println("8.输出所有JAVA工程师信息");
System.out.println("9.清空所有JAVA工程师数据");
System.out.println("10.打印所有JAVA工程师数据报表");
System.out.println("11.从文件重新导入JAVA工程师数据");
System.out.println("0.结束(编辑工程师信息后提示保存)");
System.out.println("请输入您的选择:");
System.out.println("您的选择是:");
userSel = input.nextInt();
return userSel;
}
//1.输入Java工程师资料,月工作完成分数月工作实际天数不在此处输入
public static void inputEngInf(){
if(status == true) //表示Java工程师资料已经输入完毕
{
System.out.println("Java工程师资料已输入完毕,可以选择4进行修改!");
}else{
while(!status) //如果Java工程师信息输入不完整,则全部重新输入
{
System.out.print("请输入Java工程师的编号:");
engNo = input.nextInt();
if(engNo <= 0) //Java工程师编号不能为负值
{
status = false; //Java工程师信息输入不正确
System.out.print("Java工程师编号不能为负值!");
continue; //t跳出本次循环,执行下一次输入Java工程师资料
//循环
}
else
{
status = true; //表示到目前为止,Java工程师信息输入正确
}
System.out.print("请输入Java工程师的姓名:");
engName = input.next();
if(engName.length() == 0) //没有输入姓名,姓名的长度为0
{
status = false; //Java工程师信息输入不正确
System.out.print("Java工程师姓名不能为空!");
continue; //跳出本次循环,执行下一次Java工程师资料
//循环
}
else
{
status = true; //表示目前为止,Java工程师信息输入正确
}
System.out.print("请输入Java工程师的性别:(1表示男,2代表女)");
engSex = input.nextInt();
if(engSex !=1 && engSex != 2){ //Java工程师性别既不是1也不是2
status = false; //Java工程师信息输入不正确
System.out.println("性别只能输入1或者2!");
continue; //跳出本次循环,执行下一次输入工程师资料
}
else{
status = true; //表示到目前为止,Java工程师信息输入正确
}
System.out.println("请输入Java工程师的学历:(1代表大专,2代表本科,3代表硕士,4代表博士,5代表其他)");
engEdu = input.nextInt();
if(engEdu != 1 && engEdu != 2 && engEdu != 3 && engEdu != 4 && engEdu !=5)
{
status = false; //Java工程师信息输入不正确
System.out.print("学历只能输入1、2、3、4、5---(1代表大专,2代表本科,3代表硕士,4代表博士,5代表其他)");
continue; //跳出本次循环,执行下一次输入工程师资料
}
else
{
status = true; //表示到目前为止,Java工程师信息输入正确
}
System.out.print("请输入Java工程师的底薪:");
basSalary = input.nextInt();
if(basSalary <= 0){ //Java工程师底薪不能为负
status = false;
System.out.print("Java工程师底薪不能为负");
continue;
}
else{
status = true;
}
System.out.print("请输入Java工程师月应扣保险金额:");
insurance = input.nextDouble();
if(insurance <= 0){
status = false;
System.out.print("Java工程师月应扣保险金额不能为负值!");
continue;
}
else{
status = true;
}
}
}
}
//2.删除Java工程师资料,实际是把Java工程师相关信息设置为初始值
public static void deleteEngInf(){}
//3.查询Java工程师资料,实际是把Java工程师信息资料逐行输出
public static void searchEngInf(){}
//4.修改Java工程师资料,和输入Java工程师资料类似,区别在于需要输出原信息
//再让用户输入新修改的信息
public static void modifyEngInf(){}
//5.计算Java工程师月薪,返回月薪值
//计算之前需要获取月工作完成分数和月实际工作天数两个数值
public static void calEngSalary()
{
if(status == false )
{
System.out.println("Java工程师资料未输入或已删除,不能计算!");
}
else
{
while(true)
{
System.out.print("请输入Java工程师月工作完成分数(最小值为0,最大值为150):");
comResult = input.nextInt(); //从控制台获取月工作完成分数赋值给comResult
if(comResult < 0 || comResult > 150)
{
System.out.println("输入错误,请重新输入!");
continue;
}
else{
break;
}
}
while(true)
{
System.out.print("请输入Java工程师月实际工作天数(最小值为0,最大值为31):");
workDay = input.nextDouble();
if(workDay < 0 || workDay > 31)
{
System.out.println("输入错误,请重新输入!");
continue;
}else{
break;
}
}
//调用CalEngSalaryValue计算Java工程师月薪
//输入底薪、月工作完成天数、月实际工作天数、月应扣保险数
engSalary = calEngSalaryValue(basSalary,comResult,workDay,insurance);
System.out.println("Java工程师"+engName+"月薪为"+engSalary);
}
}
public static double calEngSalaryValue(int basSalary,int comResult,double workDay,double insurance)
{
//Java工程师月薪 = 底薪 + 底薪 * 25% * 月工作完成分数 / 100 + 15 * 月工作实际天数 - 月应扣保险金额
return basSalary + basSalary * 0.25 * comResult / 100 + 15*workDay - insurance;
}
}