黑马程序员技术交流社区

标题: 写作业遇到的问题了,关于《学生信息管理系统》 [打印本页]

作者: fht92226    时间: 2015-7-15 17:49
标题: 写作业遇到的问题了,关于《学生信息管理系统》
在实现“删除学生信息功能”时遇到了问题,比如:一共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--;
        }
}
作者: fht92226    时间: 2015-7-15 17:53


如图,在线等。

作者: fht92226    时间: 2015-7-15 19:06
没人吗。。。
作者: 勤奋的小和尚    时间: 2015-7-16 21:13
看起来就是高端,,,,,期待楼下大神帮你解决吧
作者: Excalibur    时间: 2015-7-16 21:28
本帖最后由 Excalibur 于 2015-7-16 21:34 编辑






作者: gongyanfa123    时间: 2015-7-16 21:32
代码太多了。晕倒
作者: 不怕黑人    时间: 2015-7-16 21:57
看的好晕- -




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2