import java.util.*;
public class score {
/**
* 输入裁判人数x
* @return 一个长度为x的裁判数组
*/
public static double[] JudgesNumber(){
System.out.print("请输入评委人数:");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
return new double[number];
}
/**
* 输入选手人数x
* @return 一个长度为x的选手数组
*/
public static int[] PlayersNumber(){
System.out.print("请输入选手人数:");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
return new int[number];
}
/**
* 成绩表信息中每列的属性名
* 不整合进total是为了更方便的进行升序降序的排序
* @param total 成绩信息表
*/
public static void TableValues(String[][]total){
int columns = total[0].length;
String[] keys = new String[columns];
keys[0] = "选手序号";
keys[1] = "选手名字";
for (int i = 2;i<columns-1;i++){
keys[i] = "评委"+(i-1);
}
keys[columns-1] = "平均分";
for (int i = 0;i<columns;i++){
System.out.print(keys[i]+"\t");
}
System.out.print("\n");
}
/**
* 打分总流程
* @param Judges 裁判数组 用于提供成绩表的列数,存储每位评审的打分及平均分的计算
* @param Players 选手数组 用于提供成绩表的行数
* @return total成绩表
*/
public static String[][] grade(double[] Judges,int[] Players){
Scanner scan = new Scanner(System.in);
String[][] total = new String[Players.length][Judges.length+3];
System.out.println("评分规则如下:");
System.out.println("************************************");
System.out.println("* 请每位评委对选手进行0到10分的整数打分 *");
System.out.println("************************************");
for (int i = 0;i< Players.length;i++){
total[i][0] = "选手:"+(i+1);
System.out.print("请输入选手"+(i+1)+"的姓名:");
String PlayName = scan.next();
total[i][1] = PlayName;
float sum = 0.0F;
float avg;
for(int j = 0;j< Judges.length;j++){
System.out.print("请评委"+(j+1)+"对选手"+(i+1)+" "+total[i][1]+"进行打分:");
String score = scan.next();
while(Double.parseDouble(score)<0||Double.parseDouble(score)>10||String.valueOf(score).contains(".")){
System.out.print("请评委"+(j+1)+"对选手"+(i+1)+"重新进行打分:");
score = scan.next();
}
Judges[j] = Double.parseDouble(score);
total[i][j+2] = "评委"+(j+1)+":"+score;
}
Arrays.sort(Judges);
for (int z = 1;z< Judges.length-1;z++){
sum += Judges[z];
}
avg = sum/ ((Judges.length)-2F);
total[i][Judges.length+2] = String.valueOf(avg);
}
return total;
}
/**
* 查询系统的菜单面
* @param total 总表
* @param Players 选手表 提供行长度
* @param Judges 裁判表 提供列长度
*/
public static void ShowMenu(String[][] total,int[] Players,double[] Judges){
boolean flag = true;
Scanner scan = new Scanner(System.in);
while(flag){
System.out.println("键入 1 升序排序");
System.out.println("键入 2 降序排序");
System.out.println("键入 3 序号排序");
System.out.println("键入 4 查询信息");
System.out.println("键入 0 退出总排名查看程序");
int choice = scan.nextInt();
if(choice == 1){
UpShowTotal(total, Players, Judges);
}else if(choice == 2){
DownShowTotal(total, Players, Judges);
}else if (choice == 3){
ShowTotal(total, Players, Judges);
}else if(choice == 4){
SearchPlayerResult(total,Players,Judges.length+3);
}else if(choice == 0){
flag = false;
}else {
System.out.println("请重新输入");
}
}
}
/**
* 降序排序总成绩表
* @param total 总表
* @param Players 选手表 提供行长度
* @param Judges 裁判表 提供列长度
*/
public static void DownShowTotal(String[][] total,int[] Players,double[] Judges) {
boolean flag = true;
String[][] temp = total;
Scanner scan = new Scanner(System.in);
Arrays.sort(temp, Comparator.comparingDouble(e -> Double.parseDouble(e[Judges.length + 2])));
TableValues(temp);
while (flag) {
for (int i = Players.length-1; i >= 0; i--) {
for (int j = 0; j < Judges.length + 3; j++) {
System.out.print(temp[i][j] + "\t");
}
System.out.println("\n");
}
System.out.println("do you want to quit DownShowTotal System?");
System.out.println("enter 1 you will quit");
int choice = scan.nextInt();
if (choice == 1){
flag = false;
}
}
}
/**
* 升序排序总成绩表
* @param total 总表
* @param Players 选手表 提供行长度
* @param Judges 裁判表 提供列长度
*/
public static void UpShowTotal(String[][] total,int[] Players,double[] Judges){
boolean flag = true;
Scanner scan = new Scanner(System.in);
String[][] temp = total;
Arrays.sort(temp, Comparator.comparingDouble(e -> Double.parseDouble(e[Judges.length + 2])));
TableValues(total);
while(flag){
for (int i = 0;i< Players.length;i++){
for (int j = 0;j<Judges.length+3;j++){
System.out.print(temp[i][j]+"\t");
}
System.out.println("\n");
}
System.out.println("do you want to quit UpShowTotal System?");
System.out.println("enter 1 you will quit");
int choice = scan.nextInt();
if (choice == 1){
flag = false;
}
}
}
/**
* 选手序号排序总成绩表
* @param total 总表
* @param Players 选手表 提供行长度
* @param Judges 裁判表 提供列长度
*/
public static void ShowTotal(String[][] total,int[] Players,double[] Judges){
boolean flag = true;
Scanner scan = new Scanner(System.in);
TableValues(total);
while(flag){
for (int i = 0;i< Players.length;i++){
for (int j = 0;j<Judges.length+3;j++){
System.out.print(total[i][j]+"\t");
}
System.out.println("\n");
}
System.out.println("do you want to quit ShowTotal System?");
System.out.println("enter 1 you will quit");
int choice = scan.nextInt();
if (choice == 1){
flag = false;
}
}
}
/**
* 单条信息查询模式
* @param total 总表
* @param Players 选手表 提供行长度
* @param length 裁判表 提供列长度
*/
public static void SearchPlayerResult(String[][] total,int[] Players,int length){
boolean flag= true;
Scanner scan = new Scanner(System.in);
int number;
int PlayerNumber = Players.length;
while (flag){
System.out.print("请输入您想查询的选手序号:");
number = scan.nextInt();
while(number>PlayerNumber||number<=0){
System.out.print("请重新输入您想查询的选手序号:");
number = scan.nextInt();
}
TableValues(total);
for(int i = 0;i<length;i++){
System.out.print(total[number-1][i]+"\t");
}
flag = SelectChoiceSelectResultSystem();
}
}
/**
* 单条信息模式是否继续查询的结果
* @return 用于返回单条信息模式是否继续查询的结果
*/
public static boolean SelectChoiceSelectResultSystem(){
int choice;
boolean flag;
Scanner scan = new Scanner(System.in);
System.out.println("\n"+"*****************************************");
System.out.println("*** Enter 1 Continue Search Result ***");
System.out.println("** Enter 0 Quit Search Result System **");
System.out.println("*****************************************");
choice = scan.nextInt();
flag = choice != 0;
return flag;
}
/**
* 主函数
*/
public static void main(String[] args) {
int[] Players;
double[] Judges;
String[][] total;
Judges = JudgesNumber();
Players = PlayersNumber();
total = grade(Judges,Players);
ShowMenu(total,Players,Judges);
System.out.println("NicMark");
}
}
某java大作业
最新推荐文章于 2024-05-17 13:43:01 发布