import java.io.*;
import java.util.Scanner;
class Main
{
static class student
{
String num,name;
double grade1,grade2,grade3,sumgrade;
int no;
student(){grade1=grade2=grade3=sumgrade=0;
num="-1";name="未知";}
student(String a,String b,double c,double d,double e)
{
num=a;name=b;
grade1=c;grade2=d;grade3=e;
sumgrade=c+d+e;
}
void changeno(int x) {no=x;}
String getnum() {return num;}
double getsum() {return sumgrade;}
void display() {
System.out.print(num+"\t"+name+"\t"+grade1+"\t"+grade2+"\t"+grade3+"\t"+sumgrade+"\t");
if(no==0) System.out.println("未知");
else System.out.println(no);
}
}
static student getstudent()throws IOException
{
BufferedReader cins=new BufferedReader(new InputStreamReader(System.in));
Scanner cin=new Scanner(System.in);
String snum=new String();
int ok=-1;
String sname=new String();
String S=new String("-1");
String p=new String();
double d[]=new double[4];
student s=new student();
while(true)
{
try
{
snum=cins.readLine();
ok=Integer.parseInt(snum);
}
catch(NumberFormatException ee)
{
System.out.println("输入有误,请重新输入"); //只要数字组成的学号。
continue;
}
if(snum.equals(S)) {break;}
System.out.println("请输入学生姓名");
sname=cin.next();
for(int i=1;i<=3;i++)
{
System.out.println("请输入学生第"+i+"门学科成绩");
while(true)
{
try
{
p=cins.readLine();
if (cins.equals("-1"))
System.exit(0);
d[i]=Double.parseDouble(p);
}
catch(NumberFormatException ee)
{
System.out.println("输入有误,请重新输入");
continue;
}
break;
}
}
student ss=new student(snum,sname,d[1],d[2],d[3]);
s=ss;
break;
}
return s;
}
static int scanf(int x,student stu[])throws IOException
{
while(true)
{
System.out.println("请输入学生学号,输入-1结束输入");
student s=getstudent();
if(s.getnum().equals("-1")) break;
stu[++x]=s;
}
return x;
}
static void sort(int n,student stu[])
{
student s=new student();
for(int i=1;i<n;i++)
{
for(int j=1;j<n;j++)
{
if(stu[j].getsum()<stu[j+1].getsum())
{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
else if(stu[j].getsum()==stu[j+1].getsum())
{
if(stu[j].getnum().compareTo(stu[j+1].getnum())>0)
{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
}
}
int num=1;
if(n>0) stu[1].changeno(1);
for(int i=2;i<=n;i++)
{
if(stu[i].getsum()==stu[i-1].getsum())
{
stu[i].changeno(num);
}
else stu[i].changeno(++num);
}
}
static void display(int n,student stu[])
{
System.out.println("学号 \t\t 姓名 \t 成绩1 \t 成绩2 \t 成绩3 \t 总成绩 \t 名次");
for(int i=1;i<=n;i++)
{
stu[i].display();
}
}
static void change(int n,student stu[])throws IOException
{
BufferedReader cins=new BufferedReader(new InputStreamReader(System.in));
Scanner cin=new Scanner(System.in);
String S=new String();
int ch=-1;
FOR:
while(true)
{
System.out.println("请输入您要修改的学生的原学号,停止修改输入-1");
try
{
S=cins.readLine();
if(S.equals("-1")) break FOR;
ch=Integer.parseInt(S);
}
catch(NumberFormatException ee)
{
System.out.println("输入有误,请重新输入");
continue;
}
for(int i=1;i<=n;i++)
{
if(stu[i].getnum().equals(S))
{
stu[i].display();
System.out.println("请输入学生的新学号");
stu[i]=getstudent();
}
}
}
}
public static void main(String arg[])throws IOException
{
BufferedReader cins=new BufferedReader(new InputStreamReader(System.in));
student stu[]=new student[20];
int n=0;
int ok=1,x;
System.out.println("欢迎使用!");
Scanner cin=new Scanner(System.in);
int ch=-1;
FOR:
while(true)
{
System.out.println("请输入您的选择前的序号:");
System.out.println(" 0: 退出");
System.out.println(" 1: 输入学生信息");
System.out.println(" 2: 根据学生成绩排序");
System.out.println(" 3: 输出学生信息");
System.out.println(" 4: 修改学生信息");
try
{
String s=cins.readLine();
if(s.equals("0"))
System.exit(0);
ch=Integer.parseInt(s);
}
catch(NumberFormatException ee)
{
System.out.println("输入有误,请重新输入");
continue;
}
switch(ch)
{
case 1:{n=scanf(n,stu);break;}
case 2:{sort(n,stu);
System.out.println("排序完成");
break;}
case 3:{display(n,stu);break;}
case 4:{change(n,stu);break;}
default: {System.out.println("输入有误,请重新输入");break;}
}
}
}
}