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%
  • 相关阅读:
    ArcObject获取ArcMap默认地理数据库的路径
    标准IO
    进程关系
    进程环境
    C语言基础知识位运算
    Bash 快捷键
    信号
    UNIX系统文件
    进程
    unix 文件属性
  • 原文地址:https://www.cnblogs.com/qiwei/p/5375557.html
Copyright © 2011-2022 走看看