首页 > 其他分享 >BLOG_3

BLOG_3

时间:2023-12-09 23:01:12浏览次数:30  
标签:count cour temp int cla BLOG stucount

(1)前言:在pta第7,8次大作业和期末考试所包含的知识点主要有:

题目的难度根据题目不同也有所不同。

(2)  设计与分析

:定义课程(Course)、课程集合(Courses)、班级(Classx)、班级集合(Classes)以及学生(Student)这几个类来进行数据的存储和管理。

通过Scanner从标准输入读取数据,根据输入的内容进行不同的处理:

当输入为课程信息时,调用AddCourse方法添加课程到课程集合中。

当输入为学生成绩信息时,调用AddCoursegrades方法添加学生成绩,并调用AddStudent方法添加学生信息到班级集合中。

在处理完所有输入后,按照一定的规则对课程和学生成绩进行统计和输出:

遍历学生成绩列表,输出学生的成绩信息。

对课程列表进行排序,计算每门课程的平均成绩并输出。

对班级列表进行排序,计算每个班级学生的平均成绩并输出。

 程序的主函数中,使用了Scanner类从用户的输入读取输入信息,并根据Match判断的返回值判断其输入格式是否正确后转入相应的if语句中执行相应的操作。通过调用相关类的各种方法,结合课程的信息和学生的列表,可以进行课程的注册、查看学生列表、查找学生/教师信息等操作。最后,根据课程的计算方式和学生的信息,计算课程的成绩或教师的评价。通过将不同的功能分别封装在不同的类中,可以使得程序结构更加清晰,并且易于扩展和维护。

(3)踩坑心得:在对输入数据的处理过程中,一定要选择合适的输入数据判断方法,一定要能够兼顾完成对正常数据的输入和异常数据的判断和处理输出,以应对题目需求。对于

(4)主要困难以及改进建议:对于对输入数据的处理与判别尤其需要细心并且细致讨论各类情况,防止非法输入导致程序无法正常运行。

(5)总结:关于此次解题经验,我总结了部分要点:

1.明确题目要求与意义:根据题目说明和所提供的示例输入输出等辅助信息理解题目要求与目的。

2.理清解题思路再写代码:在理解了题意后,先理清题目的解题思路,避免在编写代码的过程中出现错误。

3.考虑边界条件和异常情况:在编写题目时要考虑到各种可能的输入情况,包括边界值和异常情况,以保证代码的稳定性。

4.不断学习更新知识:题目的编写过程也是对自己知识的回顾和巩固,通过编写题目可以不断学习并更新自己的知识体系,只有这样才能适应多变的题型。

总的来说,这次写题目对我来说是一次很有收获的经历。通过这次写题目,我锻炼了自己的问题设计和解决能力,并提高了对编程知识的理解和应用能力。希望在以后的学习和实践中能够继续加油,不断提升自己的技术水平。

 

以下是课程成绩统计程序-3的源代码:

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Scanner;

public class Main {

    public static class Course

    {

        String name= "";

        String Access=" ";

        String AccessMode= "";

        int judgecount=0,stucount=0;

        double[] judge= new double[10];

        Student[] stu=new Student[40];

 

    }

    public static class Courses

    {

        int count=0;

        ArrayList<Integer>  arry=new ArrayList<>();

        Course[] cour=new Course[20];

        public int SearchCourse(String namex)

        {

            int rex=-1;

            if(this.count!=0)

            {

                for (int i = 0; i < this.count; i++)

                {

                    if(namex.equals(cour[i].name))

                    {

                        rex=i;

                        break;

                    }

                }

            }

            return rex;

        }

 

        public double AddCoursegrades(String  str)

        {

            String[]  temp=str.split("\\s");

            int x=this.SearchCourse(temp[2]);

 

            double tem=0;

            if(x==-1)

            {

                System.out.println(temp[2]+" does not exist");//temp[0]+" "+temp[1]+" :"+

                return -1;

            }

 

            if(cour[x].AccessMode.equals("实验"))

            {

                if(cour[x].judgecount==temp.length-3)

                {

                    for (int i = 0; i < temp.length-3; i++) {

                        tem=tem+cour[x].judge[i]*Double.parseDouble(temp[i+3]);

                    }

 

                    if(cour[x]==null)

                    {cour[x]=new Course();}

                    if(  cour[x].stu[cour[x].stucount]==null)

                    {  cour[x].stu[cour[x].stucount]=new Student();}

                    cour[x].stu[cour[x].stucount].Id=temp[0];

                    cour[x].stu[cour[x].stucount].Name=temp[1];

                    cour[x].stu[cour[x].stucount].grade=(int) Math.floor(tem);

                    cour[x].stucount++;

                    return (int) Math.floor(tem);

                }

                else

                {

                    System.out.print(temp[0]+" "+temp[1]+" : access mode mismatch\n");

                    return -1;

                }

            }

            else if(cour[x].AccessMode.equals("考试"))

            {

                if(temp.length==5)

                {

                tem=cour[x].judge[0]*Double.parseDouble(temp[3])+cour[x].judge[1]*Double.parseDouble(temp[4]);

 

                if(cour[x].stu[cour[x].stucount]==null)

                {

                    cour[x].stu[cour[x].stucount]=new Student();

                }

                cour[x].stu[cour[x].stucount].Id=temp[0];

                cour[x].stu[cour[x].stucount].Name=temp[1];

                cour[x].stu[cour[x].stucount].grade=(int) Math.floor(tem);

 

                cour[x].stucount++;

                return  (int) Math.floor(tem);

                }

                else

                {

                    System.out.print(temp[0]+" "+temp[1]+" : access mode mismatch\n");

                    return -1;

                }

 

            }

            else if(cour[x].AccessMode.equals("考察"))

            {

                if(temp.length==4)

                {

                    if(cour[x].stu[cour[x].stucount]==null)

                    {

                        cour[x].stu[cour[x].stucount]=new Student();

                    }

                    cour[x].stu[cour[x].stucount].Id=temp[0];

                    cour[x].stu[cour[x].stucount].Name=temp[1];

                    cour[x].stu[cour[x].stucount].grade=Integer.parseInt(temp[3]);

 

                    cour[x].stucount++;

                    return cour[x].stu[cour[x].stucount-1].grade;

                }

                else

                {

                    System.out.print(temp[0]+" "+temp[1]+" : access mode mismatch\n");

                    return -1;

                }

 

            }

 

            return -1;

        }

 

 

        public void AddCourse(String  str)

        {

          String[]  temp=str.split("\\s");

 

            if(this.SearchCourse(temp[0])!=-1)

            {

                return;

            }//排除重复课程信息

 

            if (temp[1].equals("实验"))//实验课的成绩必须为实验。

            {

                int n=Integer.parseInt(temp[3]);

                if(temp[2].equals("实验")) {

                    if (temp.length - 4 != n) {

                        System.out.println(temp[0] + " : number of scores does not match");

                        return;

                    }

                    else {

                        double weightSum = 0;

 

                        for (int i = 4; i < n+4;i++) {

                            weightSum =weightSum+Double.parseDouble(temp[i]);

                        }

                        weightSum=Math.floor(weightSum);

                        if (weightSum!=1) {

                            System.out.println(temp[0]+" : weight value error");

                            return;

                        }

                        else if(weightSum==1)

                        {

                            if( cour[this.count]==null)

                            {

                                cour[this.count]=new Course();

                            }

                            cour[this.count].name=temp[0];

                            cour[this.count].Access=temp[1];

                            cour[this.count].AccessMode=temp[2];

                            cour[this.count].judgecount=n;

                            for (int i = 4; i < n + 4; i++) {

                                cour[this.count].judge[i-4]=Double.parseDouble(temp[i]);

                            }

                            this.count++;

                        }

 

                    }

                }

                else//考核方式错误

                {

                    System.out.println(temp[0] + " : course type & access mode mismatch");

                    return;

                }

            }

            else if (temp[1].equals("必修")) //必修课的考核方式必须为考试。

            {

                if(temp[2].equals("考试"))

                {

                    if(temp.length==5)

                    {

                        double weightSum = 0;

                        weightSum=Double.parseDouble(temp[3])+Double.parseDouble(temp[4]);

                        if (weightSum != 1) {

                            System.out.println(temp[0] + " : weight value error");

                            return;

                        }

                        if( cour[this.count]==null)

                        {

                            cour[this.count]=new Course();

                        }

 

                        cour[this.count].name=temp[0];

                        cour[this.count].Access=temp[1];

                        cour[this.count].AccessMode=temp[2];

                        cour[this.count].judgecount=2;

                        cour[this.count].judge[0]= Double.parseDouble(temp[3]);

                        cour[this.count].judge[1]= Double.parseDouble(temp[4]);

 

                        this.count++;

                    }

                    else

                    {

                        System.out.print("wrong format\n");

                        return;

                    }

                }

                else//考察或实验//考核方式错误

                {

                    System.out.print(temp[0]+" : course type & access mode mismatch\n");

                    return;

                }

 

            }

            else if (temp[1].equals("选修"))//,选修课可以选择考试、考察任一考核方式。

            {

                if(temp[2].equals("考试"))

                {

                    if(temp.length==5)

                    {

                        double weightSum = 0;

                        weightSum=Double.parseDouble(temp[3])+Double.parseDouble(temp[4]);

                        if (weightSum != 1) {

                            System.out.println(temp[0] + " : weight value error");

                            return;

                        }

 

                        cour[this.count].name=temp[0];

                        cour[this.count].Access=temp[1];

                        cour[this.count].AccessMode=temp[2];

                        cour[this.count].judgecount=2;

                        cour[this.count].judge[0]= Double.parseDouble(temp[3]);

                        cour[this.count].judge[1]= Double.parseDouble(temp[4]);

 

                        this.count++;

                    }

                    else

                    {

                        System.out.print("wrong format\n");

                        return;

                    }

 

                }

                else if(temp[2].equals("考察"))

                {

                    if(temp.length==3)

                    {

 

                        if( cour[this.count]==null)

                        {

                            cour[this.count]=new Course();

                        }

                        cour[this.count].name=temp[0];

                        cour[this.count].Access=temp[1];

                        cour[this.count].AccessMode=temp[2];

                        cour[this.count].judgecount=1;

                        cour[this.count].judge[0]=1;

 

                        this.count++;

                    }

                    else

                    {

                        System.out.print("wrong format\n");

                        return;

                    }

 

                }

                else//实验//考核方式错误

                {

                    System.out.print(temp[0]+" : course type & access mode mismatch\n");

                    return;

                }

 

            }

 

        }//addcourse

 

    }//class course

    public static class Classx

    {

 

        String classnum=" ";

        int  classgrade=0,stucount=0;

 

        Student[] stu =new Student[40];

 

 

    }

 

    public static class Classes

    {

       int clacount=0;

       Classx[] cla =new Classx[10];

 

       public  int SearchClass(String str)

       {

           int rex=-1;

           String temp=str.substring(0,6);

          // System.out.print("\n测试  :  "+temp+"\n");

           for (int i = 0; i < clacount; i++){

               if(cla[i].classnum.equals(temp))

               {

                   return i;

               }

           }

           return  rex;

       }

 

        public  void AddStudent(String str,int grade)

        {

            String[]  temp=str.split("\\s");

            int x=this.SearchClass(temp[0]);

            if(x==-1)//新的班级号

            {

                if(cla[this.clacount]==null)

                {

                    cla[this.clacount]=new Classx();

                }

                if(cla[this.clacount].stu[cla[this.clacount].stucount]==null)

                {

                    cla[this.clacount].stu[cla[this.clacount].stucount]=new Student();

                }

 

                cla[this.clacount].classnum=temp[0].substring(0,6);

                cla[this.clacount].stu[cla[this.clacount].stucount].Id=temp[0];

                cla[this.clacount].stu[cla[this.clacount].stucount].Name=temp[1];

                cla[this.clacount].stu[cla[this.clacount].stucount].grade=grade;

 

                if(grade!=-1){

                cla[this.clacount].stucount++;}

 

                this.clacount++;

            }

            else//存在的班级号

            {

                if(cla[x]==null)

                {

                    cla[x]=new Classx();

                }

                if(cla[x].stu[cla[x].stucount]==null)

                {

                    cla[x].stu[cla[x].stucount]=new Student();

                }

                cla[x].stu[cla[x].stucount].Id=temp[0];

                cla[x].stu[cla[x].stucount].Name=temp[1];

                cla[x].stu[cla[x].stucount].grade=grade;

 

                if(grade!=-1){

                cla[x].stucount++;}

            }

 

        }

 

 

 

    }//Classes

 

    public static class Student

    {

        String Name=" ";

        String Id=" ";

        int grade=-1;

 

    }

 

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

 

        Courses courses=new Courses();

        Classes classes=new Classes();

        Student[] students=new Student[50];

 

        ArrayList<Classx>  arryclass=new ArrayList<>();

        ArrayList<Student> arrystu=new ArrayList<>();

 

        int stucout=0;

        String line =scan.nextLine();

        while(!line.equals("end"))

        {

            String[] temp = line.split("\\s");

 

            if(temp[1].equals("实验")||temp[1].equals("选修")||temp[1].equals("必修"))

            {

              //  System.out.print("\n     "+line+"    为课程输入"+"\n");

                courses.AddCourse(line);

 

            }

            else if(temp[0].matches("\\d{8}"))

            {

              //  System.out.print("     "+line+"    为学生与成绩输入"+"\n");

 

 

                int grade=(int)Math.round(courses.AddCoursegrades(line));

 

                classes.AddStudent(line,grade);

 

                if(students[stucout]==null)

                {

                    students[stucout]=new Student();

                }

                int t=Integer.parseInt(temp[0]);

                students[stucout].Id=temp[0];

                students[stucout].Name=temp[1];

                students[stucout].grade=grade;

                if(stucout==0)

                {

                    arrystu.add(students[stucout]);

                }

                else

                {

                   Student stux=new Student();

                    for (int i = 0; i < arrystu.size(); i++)

                    {

                        stux=arrystu.get(i);

 

                        if(Integer.parseInt(stux.Id)>Integer.parseInt(temp[0]))

                        {

                            arrystu.add(i,students[stucout]);

                            break;

                        }

                        else if(Integer.parseInt(stux.Id)<Integer.parseInt(temp[0])&&i+1==arrystu.size())

                        {

                            arrystu.add(students[stucout]);

                            break;

                        }

                        else if(Integer.parseInt(stux.Id)==Integer.parseInt(temp[0]))

                        {

                            i=i+1;

                            arrystu.add(i,students[stucout]);

                            break;

                        }

                    }//for

 

                }

                    stucout++;

            }//学生成绩输入

 

 

            line= scan.nextLine();

        }//while

        //end以后

 

        for (int i = 0; i < stucout; i++) {

            Student stux=new Student();

            stux=arrystu.get(i);

            if(stux.grade==-1) {

                System.out.print(stux.Id+" ");

                System.out.print(stux.Name+" did not take any exams\n");

            }

            else

            {

                System.out.print(stux.Id+" "+stux.Name+" "+stux.grade+"\n");

            }

        }//学生成绩输出

 

 

        String[] cou =new String[courses.count];

        for (int i = 0; i < courses.count; i++) {

            cou[i]=courses.cour[i].name;

        }

        Arrays.sort(cou);

 

        for(int i = 0; i < courses.count; i++) {

            double tempx=0;

            int tempy=0;

            int sear=courses.SearchCourse(cou[i]);

 

            for (int j = 0; j < courses.cour[sear].stucount; j++)

            {

                tempx=tempx+courses.cour[sear].stu[j].grade;

          //      System.out.print("\n    "+tempx+"\n");

            }

 

            if(tempx==-1||tempx==0)

            {

                System.out.print(courses.cour[sear].name+" has no grades yet\n");

            }

            else

            {

                tempy=(int)Math.floor(tempx/courses.cour[sear].stucount);

                System.out.print(courses.cour[sear].name+" "+tempy+"\n");

            }

 

        }//课程输出

 

        String[] st=new String[classes.clacount];

        for (int i = 0; i < classes.clacount; i++) {

            st[i]=classes.cla[i].classnum;

        }

        Arrays.sort(st);

 

        for (int i = 0; i < classes.clacount;i++)

        {

            double tempx=0;

            int tempy=0;

 

            String temp=" ";

 

            for (int j = 0; j < stucout; j++) {

                temp=arrystu.get(j).Id.substring(0,6);

                if(st[i].equals(temp))

                {

                    if(arrystu.get(j).grade!=-1)

                    tempx=tempx+arrystu.get(j).grade;

                }

            }

 

            int num=classes.SearchClass(st[i]);

 

            if(tempx==-1||tempx==0)

            {

                System.out.print(classes.cla[num].classnum+" has no grades yet\n");

            }

            else

            {

                tempy=(int)Math.floor(tempx/classes.cla[num].stucount);

                System.out.print(classes.cla[num].classnum+" "+tempy+"\n");

            }

        }//班级输出

    }//main

}//Main

在程序中,使用了面向对象的编程思想,定义了课程、班级和学生这几个类,并且提供了对应的方法来处理相关操作。同时,程序还使用了数组、ArrayList 和基本的输入输出操作来实现功能。

需要注意的是,程序中存在一些功能逻辑判断和数据处理的地方,例如添加课程时对课程类型和考核方式的匹配判断、对学生成绩的处理和计算等。此外,程序中还有一些排序和搜索的操作,用于输出结果时的数据整理。

总体来说,这个程序是一个简单的学生成绩管理系统的雏形,通过对课程、班级和学生信息的管理和处理,实现了一些基本的功能。如果需要进一步完善,可能需要考虑更多的输入验证、异常处理、用户交互界面等方面的功能。

 

标签:count,cour,temp,int,cla,BLOG,stucount
From: https://www.cnblogs.com/21207312blog/p/17891965.html

相关文章

  • BLOG3
    一、前言麻烦各位帅哥美女给高点分儿,我每次互评都给了90分以上!感谢!1.知识点:LinkedHashMap和HashMap是有区别的,前者是按插入顺序储存元素,后者是哈希表排序会在后面讲Listab=studenttotalscoremap.computeIfAbsent(grade.student,k->Arrays.asList(0.0,0.0));ab.set(0......
  • 第三次blog-7-8次PTA题目集及期末考试总结
    一、前言第三次作业主要针对课程成绩统计程序的迭代以及期末考试的总结课程程序2是在第一次的基础上增加了实验课的情况,由于我程序1的框架打的不好,时间过了很久之后记忆不深,加之程序2开始的比较晚,又重新打了一个框架,但仍然很乱很碎,最后匆忙赶了两天也只拿了80分课程程序3在第二......
  • blog-3
      前言:本学期面向对象程序设计课程已经结束,但学习和巩固的知识点仍有很多需要继续深入掌握。在PTA6~8次大作业中,电信计费系列题目是我们重点讲解的内容。这个系列的题目涉及到正则表达式、类图的分析能力、抽象类和继承关系以及集合框架List等多个知识点,需要我们全面运用所学知......
  • BLOG-3
    一、前言本次博客主要涵盖了Java题目的几个主要知识点,包括:1.面向对象的基础知识:这部分主要包括了类和对象的基本概念,构造方法,访问权限和成员变量的相关内容。在面向对象编程中,对这些基础知识的理解至关重要。2.面向对象的设计原则:这个题目强调了两个重要的设计原则,即继承......
  • BLOG-3
    一、前言此次博客主要讲述PTA中的第七次、第八次以及期末考试的心得体会。第七次共有4个题目,包括7-1容器-HashMap-检索,容器-HashMap-排序,7-3课程成绩统计程序-2,7-4动物发声模拟器(多态)。这次作业唯一的难点就是7-3课程成绩统计程序-2,由于这个题目是在课程成绩统计程......
  • Blog_3
    (1)前言:本次实验主要涉及面向对象编程的知识,在实验过程中我们学习了继承和组合两种类之间的关系,并通过具体的案例演示了它们的应用。同时,我们也深入掌握了Java中的接口、集合等相关知识。(2)设计与分析作业七:课程成绩统计程序-2在第一次的基础上增加了实验课,以下加粗字体显示为......
  • java-blog3
    一、前言1、知识点:主要是java中类与类之间的关系和类图的构建以及对数据的处理2、题量:不多3、难度:难度在不断的变大,每一题所花的时间也在不断的增加二、设计与分析:7-3课程成绩统计程序-2分数60全屏浏览题目切换布局作者 蔡轲单位 南昌航空大学......
  • blog3
    前言题目主要包含7-1容器-HashMap-检索 7-2容器-HashMap-排序 7-3课程成绩统计程序-2 7-4动物发声模拟器(多态)7-1容器-ArrayList-排序 7-2课程成绩统计程序-3 7-3jmu-Java-02基本语法-03-身份证排序 7-4jmu-Java-04面向对象进阶-03-接口-自定义接口ArrayIntegerStack 7-5jm......
  • BLOG3
    作业总结1.1前言面向对象的基础知识:包括类和对象的基础概念、构造方法、访问权限和成员变量面向对象的设计原则:这个题目着重讲述了两个重要的面向对象设计原则:继承和组合。要求学生对两者的区别有深入的理解,并能根据实际需求选择使用哪种设计原则。异常处理:这个题目中涉及......