zoukankan      html  css  js  c++  java
  • 20145213《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    20145213《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)


    实验要求

    1. 使用JDK编译、运行简单的Java程序。
    2. 使用IDEA编辑、编译、运行、调试Java程序

    实验内容

    1. 命令行下Java程序开发
    2. IDEA下Java程序开发、调试
    3. 实现学生成绩管理功能,并进行测试。

    实验步骤(实现学生成绩管理功能,并进行测试)

    前期准备

    1. Java相关基础知识储备,参考书籍Java学习笔记(第8版),参考博客[20145213祁玮](http://www.cnblogs.com/qiwei/)
    2. 预先安装好JDK,并配置好环境变量
    3. 下载好IntelliJ IDEA Community Edition 15.0.3,安装完毕后在IDEA界面中配置JDK,为后期运行IDEA调试程序做准备
      功能分析
    4. 学生成绩管理系统要实现存储学生信息及相关成绩功能。
    5. 学生成绩管理系统要实现根据学生信息查找特定学生成绩功能。
    6. 学生成绩管理系统要实现计算各科目成绩平均数功能。
      代码结构分析
      1.需要一个功能类,提供各种方法,例如计算平均数,查找学生等。封装操作对象的流程.
      2.需要一个主类,提供功能选择界面,负责人机互动,调用方法。
      设计
    7. 功能类设计
    • 先定义学生学号,姓名,各科目成绩等数据成员
    • 再建立一个数组,索引范围为班级学生人数
    • 设计方法,根据功能分析可以判断要设计三个方法,分别实现添加学生信息,查询学生信息,计算平均值。
    1. 主类设计
    • 因为设计功能类为公开类,因此在主类开始先创建一个功能类实例。
    • 利用switch语法,了解用户的需求功能,准确调用相关方法。
      代码实现(IDEA环境下开发):
    1. 打开IDEA,创建“shiyan”包,将功能类代码与主类代码打包至其下。
    2. 分别创建主类test 与功能类score
    3. 主类代码如下:
    public class test{
        public static void main(String[] args){
            score sc = new score();
            Scanner input = new Scanner(System.in);
            for(;;){
                System.out.println("学生成绩管理系统");
                System.out.println("1.添加学生成绩");
                System.out.println("2.查询指定学生成绩");
                System.out.println("3.查询指定个科目平均成绩");
                int xz =input.nextInt();
                switch (xz){
                    case 1:
                        System.out.println("添加学生成绩");
                        score m= new score();
                        System.out.println("姓名:");
                        m.name=input.next();
                        System.out.println("学号:");
                        m.id=input.nextInt();
                        System.out.println("Chinese:");
                        m.Chinese=input.nextDouble();
                        System.out.println("English:");
                        m.English=input.nextDouble();
                        System.out.println("Math:");
                        m.Math=input.nextDouble();
                        sc.add(m);
                        break;
                    case 2:
                        System.out.println("请输入学生的学号");
                        int id =input.nextInt();
                        sc.selectById(id);
                        break;
                    case 3:
                        sc.showAvg();
                        break;
                }
            }
        }
    }
    

    功能类代码如下:

    package shiyan;
    import javax.swing.text.AbstractDocument.Content;
    public class score {
        public int id;
        public String name;
        public double Chinese;
        public double English;
        public double Math;
        score[] n = new score[50];
    public void add(score m) {
            for (int i = 0; i < n.length; i++) {
                if (n[i] == null) {
                    n[i] = m;
                    break;
                }
            }
        }
    public void selectById(int id) {
            for (int i = 0; i < n.length; i++) {
                if (n[i] != null && n[i].id == id) {
                    System.out.println("姓名" + n[i].name + "Chinese" + n[i].Chinese + "Ehglish" + n[i].English + "Math" + n[i].Math);
                }
            }
        }
    public void showAvg() {
            double sum1 = 0;
            double sum2 = 0;
            double sum3 = 0;
            int number = 2;
    for (int i = 0; i < n.length; i++) {
                number=i;
                if (n[i] != null) {
                    sum1 = n[i].Chinese + sum1;
                    sum2 = n[i].English + sum2;
                    sum3 = n[i].Math + sum3;
                    continue;
                } else
                    break;
            }
            System.out.println("Chinese的平均分:" + sum1/number  + "English的平均分:" + sum2 /number + "Math的平均分:" + sum3 / number);
    }
    }
    

    调试
    一开始我求平均数的方法代码如下:

    public void showAvg() {
            double sum1 = 0;
            double sum2 = 0;
            double sum3 = 0;
            int number = 2;
                    for (int i = 0; i < n.length; i++) {
                    if (n[i] != null) {
                    sum1 = n[i].Chinese + sum1;
                    sum2 = n[i].English + sum2;
                    sum3 = n[i].Math + sum3;
                    continue;
                }
            System.out.println("Chinese的平均分:" + sum1 / i + "English的平均分:" + sum2 / i + "Math的平均分:" + sum3 / i);
            }
        }
    

    执行结果如下

    第一次求平均数是正确,但接下来竟不断进行求平均数,很明显没有在适宜的时机退出for循环语句,因此我做出以下代码改变:

    public void showAvg() {
            double sum1 = 0;
            double sum2 = 0;
            double sum3 = 0;
            int number = 2;
                    for (int i = 0; i < n.length; i++) {
                    if (n[i] != null) {
                    sum1 = n[i].Chinese + sum1;
                    sum2 = n[i].English + sum2;
                    sum3 = n[i].Math + sum3;
                    continue;
                }
                else 
                    break;
            }
                System.out.println("Chinese的平均分:" + sum1 / (i-1) + "English的平均分:" + sum2 / (i-1) + "Math的平均分:" + sum3 / (i-1));
            
       }
    

    所以做出这样改变,我是想在n[i]读取到null的时候退出for循环,这个代码放在C语言中是没有问题的,但唉Java中却出现编译失败,显示未定义i。后来在咨询同学后才明白这个i我是放在for循环中定义的,在退出for循环后,i就定义失效了。因此,我又做出如下改变:

    public void showAvg() {
            double sum1 = 0;
            double sum2 = 0;
            double sum3 = 0;
            int number = 0;
                    for (int i = 0; i < n.length; i++) {
                    number=i;
                    if (n[i] != null) {
                    sum1 = n[i].Chinese + sum1;
                    sum2 = n[i].English + sum2;
                    sum3 = n[i].Math + sum3;
                    continue;
                } else
                    break;
            }
            System.out.println("Chinese的平均分:" + sum1/number  + "English的平均分:" + sum2 /number + "Math的平均分:" + sum3 / number);
       }
    

    最后总执行情况如下:




    分析总结

    这次抽到的题目是设计学生成绩管理系统,其实是一个比较老的题目了。早在学习C语言的时候,就已经做过类似的题目了。所以在设计代码之初,脑中就有一个整体大概构想了。这次用Java设计代码后,也是挺意外发现确实和C语言有一些共同之处,调用类中的方法和调用模块函数,类似的流程控制格式等。


    体会

    本次实验是学习Java基础知识,照敲书中代码这么久来第一次实战阅兵,我在设计之初时会有一种无处下嘴时的迷茫。先设计主类还是功能类?每次()中要填写什么?因为是用IDEA编译,边编译边纠错,一方面给我极大便利的同时,另一方面也莫名增加我心理压力。对Java代码基础格式我也不是特别熟,往往是一遍抱着课本一遍编译,照葫芦画瓢。


    PSP(Personal Software Process)时间

    步骤 耗时 百分比
    需求分析 10min 8.3%
    设计 30min 24.9%
    代码实现 50min 41.5%
    测试 15min 12.45%
    分析总结 15min 12.45%
  • 相关阅读:
    二分练习题4 查找最接近的元素 题解
    二分练习题5 二分法求函数的零点 题解
    二分练习题3 查找小于x的最大元素 题解
    二分练习题2 查找大于等于x的最小元素 题解
    二分练习题1 查找元素 题解
    code forces 1176 D. Recover it!
    code forces 1173 B. Nauuo and Chess
    code forces 1173 C. Nauuo and Cards
    吴恩达深度学习课程笔记-15
    吴恩达深度学习课程笔记-14
  • 原文地址:https://www.cnblogs.com/qiwei/p/5375557.html
Copyright © 2011-2022 走看看