在实现“删除学生信息功能”时遇到了问题,比如:一共5条学生信息,在删掉第3条后,再查询全部信息时发现第4条信息没有成功赋给第3条。。。
附上源代码,求各位大神帮忙看一下
class StudentManager
{
//定义3个数组为信息录入做准备
static int[] arrNum= new int[5];
static String[] arrName= new String[5];
static double[] arrScore= new double[5];
//计数器
static int count=0;
//用于记录角标
static int index;
public static void main(String[] args)
{
systemMain();
}
public static void systemMain()
{
System.out.println("************学生信息管理小系统**********");
core();
System.out.println("****************************************");
}
public static void core()
{
System.out.println("1,添加学生信息");
System.out.println("2,修改学生信息");
System.out.println("3,删除学生信息");
System.out.println("4,查询学生信息");
System.out.println("5,退出系统");
System.out.print("请选择功能序号:");
//接收用户输入的功能序号(键盘录入)
int code = returnInt();
choose(code);
}
public static void choose(int code)
{
switch(code)
{
case 1:
//调用添加学生信息的方法
addStudent();
break;
case 2:
//调用修改学生信息的方法
updateStudent();
break;
case 3:
//调用删除学生信息的方法
delStudent();
break;
case 4:
//调用查询学生信息的方法
queryStudent();
break;
default:
System.exit(1);
break;
}
}
//接收字符串类型的数据
public static String returnString()
{
java.util.Scanner input=new java.util.Scanner(System.in);
return input.next();
}
//接收int类型的数据
public static int returnInt()
{
java.util.Scanner input=new java.util.Scanner(System.in);
return input.nextInt();
}
//接收double类型的数据
public static double returnDouble()
{
java.util.Scanner input=new java.util.Scanner(System.in);
return input.nextDouble();
}
//这个方法是用来打印录入学生信息界面
public static void addStudent()
{
System.out.println();
System.out.println("***************录入学生信息*************");
//接收用户输入的学号(键盘录入)
System.out.print("请输入学生学号:");
int stuNum = returnInt();
arrNum[count]=stuNum;
//接收用户输入的姓名(键盘录入)
System.out.print("请输入学生姓名:");
String stuName = returnString();
arrName[count]=stuName;
//接收用户输入的成绩(键盘录入)
System.out.print("请输入学生成绩:");
double stuScore = returnDouble();
arrScore[count]=stuScore;
count++;
System.out.println();
System.out.println("学生信息添加完成!");
System.out.println();
systemMain();
}
//这个方法是用来打印学生信息查询界面
public static void queryStudent()
{
System.out.println();
System.out.println("***************学生信息查询*************");
System.out.println("1,查询全部学生信息");
System.out.println("2,按学号查询全部信息");
System.out.println("3,按学生成绩显示学生信息(降序)");
System.out.println("");
System.out.print("请选择查询的功能:");
//接收用户输入的功能序号(键盘录入)
int query = returnInt();
chooseQuery(query);
}
//这个方法用来调用查询功能的函数
public static void chooseQuery(int query)
{
switch(query)
{
case 1:
//调用查询全部学生信息的方法
queryAll();
systemMain();
break;
case 2:
//调用按学生学号查询全部信息的方法
queryNum();
systemMain();
break;
case 3:
//调用按学生成绩显示学生信息的方法
queryScore();
systemMain();
break;
default:
System.exit(1);
break;
}
}
//这个方法用来查询全部学生信息
public static void queryAll()
{
System.out.println("学号"+"\t"+"\t"+"姓名"+"\t"+"\t"+"成绩");
for (int x=0; x<count; x++)
{
System.out.println(arrNum[x]+"\t"+"\t"+arrName[x]+"\t"+"\t"+arrScore[x]);
}
System.out.println("");
}
//这个方法用来通过学号查询全部信息
public static void queryNum()
{
//接收用户输入的学号(键盘录入)
System.out.print("请输入学生学号:");
int testNum = returnInt();
int[] tempNum= new int[count];
String[] tempName= new String[count];
double[] tempScore= new double[count];
for (int x=0; x<count; x++)
{
if (arrNum[x]==testNum)
{
tempNum[x]=arrNum[x];
tempName[x]=arrName[x];
tempScore[x]=arrScore[x];
System.out.println("学号"+"\t"+"\t"+"姓名"+"\t"+"\t"+"成绩");
System.out.println(tempNum[x]+"\t"+"\t"+tempName[x]+"\t"+"\t"+tempScore[x]);
}
}
System.out.println("");
}
//这个方法是通过分数来排名
public static void queryScore()
{
int[] rankNum= new int[count];
String[] rankName= new String[count];
double[] rankScore= new double[count];
System.out.println("");
System.out.println("学号"+"\t"+"\t"+"姓名"+"\t"+"\t"+"成绩");
for (int x=0; x<count; x++)
{
rankNum[x]=arrNum[x];
rankName[x]=arrName[x];
rankScore[x]=arrScore[x];
}
for(int x=0; x<=count-1; x++)
{
for(int y=x+1; y<count; y++)
{
if(rankScore[x]<rankScore[y])
{
double tempScore = rankScore[x];
rankScore[x] = rankScore[y];
rankScore[y] = tempScore;
String tempName = rankName[x];
rankName[x] = rankName[y];
rankName[y] = tempName;
int tempNum = rankNum[x];
rankNum[x] = rankNum[y];
rankNum[y] = tempNum;
}
}
}
for(int x=0; x<count; x++)
{
System.out.println(rankNum[x]+"\t"+"\t"+rankName[x]+"\t"+"\t"+rankScore[x]);
}
System.out.println("");
}
//这个方法用来修改学生信息
public static void updateStudent()
{
System.out.println("");
System.out.println("***************学生信息修改*************");
//接收用户输入的学号(键盘录入)
System.out.println("");
System.out.print("请输入学生学号:");
int updateNum = returnInt();
System.out.println("");
System.out.print("请输入要修改的成绩:");
double updateScore = returnDouble();
System.out.println("");
if (getIndex(updateNum))
{
System.out.println("原成绩为"+arrScore[index]);
arrScore[index]=updateScore;
System.out.println("成绩修改成功!");
System.out.println("现成绩为"+arrScore[index]);
}
else
{
System.out.println("查无此人,请重新输入");
updateStudent();
}
System.out.println("");
systemMain();
}
//这个方法是用来判断学号是否存在,并获取角标
public static boolean getIndex(int a)
{
for(int x=0; x<count; x++)
{
if (arrNum[x]==a)
{
index=x;
return true;
}
}
return false;
}
public static void delStudent()
{
System.out.println("");
System.out.println("***************学生信息删除*************");
//接收用户输入的学号(键盘录入)
System.out.println("");
System.out.print("请输入学生学号:");
int delNum = returnInt();
if (getIndex(delNum))
{
leftArr(index);
System.out.println("信息删除成功!");
}
else
{
System.out.println("查无此人,请重新输入");
delStudent();
}
System.out.println("");
systemMain();
}
public static void leftArr(int index)
{
for (int x=index; x<count; x++)
{
arrNum[index]=arrNum[index+1];
arrName[index]=arrName[index+1];
arrScore[index]=arrScore[index+1];
}
count--;
}
} |
|