云南大学软件学院java实验九_学号 2018-2019-20175212 实验一 《Java开发环境的熟悉》...

学号 2018-2019-20175212 实验一 《Java开发环境的熟悉》

一、实验内容及步骤

1.使用JDK编译、运行简单的Java程序

mkdir 20175212exp1创建20175212epx1目录

cd 20175212exp1 进入20175212exp1目录

mkdir src , mkdir bin , cd src 创建子目录并进入

atom Hello.java 使用atom编辑器编写Hello.java文件

cd ..回到上级目录

javac -d bin src/Hello.java 编译代码并将可执行文件产生在bin目录中

cd bin java Hello 运行代码

实验截图如下

02aed6507ae67f69dfc7d76144e36aa8.png

2.使用IDEA调试Java程序

设置断点 (如下图)

10300c0c65b04c86ae62f859431e2fbe.png

单步运行

step into(F7)

step over(F8)

从一个断点到另一个断点 Resume(F9)

设置条件断点(如下图)

fcb46f0ddc693c47c8b37e16d03e60c1.png

设置临时断点(如下图)

f1cfda56b25d01805b351e34a673f892.png

3.练习

实验题目:4. 实现学生成绩管理功能(增删改,排序,查找),并进行测试(正常情况,异常情况,边界情况)。

代码为:

package student.score.manage;

public class Score {

String num;

String name;

double score;

public Score(){

}

public void setNum(String num) {

this.num = num;

}

public void setName(String name) {

this.name = name;

}

public void setScore(double score) {

this.score = score;

}

}

package student.score.manage;

import java.util.Scanner;

public class ScoreList {

int maxLength = 100;

int length = 0;

Score[] data = new Score[maxLength];

Scanner input = new Scanner(System.in);

public ScoreList() {

}

//添加记录方法

public void add() {

if(length < maxLength) {

data[length] = new Score();

System.out.print("请输入学生的学号: ");

data[length].setNum(input.next());

System.out.print("请输入学生的姓名:");

data[length].setName(input.next());

System.out.print("请输入学生的成绩:");

data[length].setScore(input.nextDouble());

length++;

System.out.println("添加成功!");

}

else {

System.out.println("添加失败!");

}

}

//显示成绩单方法

public void transcript() {

System.out.println("=====================================");

System.out.println(" 学号 姓名 成绩 ");

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

System.out.println(data[i].num + "\t" + data[i].name + "\t" + "\t" + data[i].score);

}

System.out.println("=====================================\n");

}

//成绩从高往低排序方法

public void sort() {

Score temp = new Score();

for(int i = 1; i < length; i++) {

for(int j = 0; j < length - i; j++) {

if(data[j].score < data[j + 1].score) { //冒泡法排序

temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp;

}

}

}

}

//平均分、最大最小值方法

public void average() {

double sum = 0.0;

double max = 0.0;

double min = 100.0;

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

sum += data[i].score;

max = max > data[i].score ? max : data[i].score;

min = min < data[i].score ? min : data[i].score; //三目运算法

}

System.out.printf("这门课的平均成绩为: %.2f\n", sum/length);

System.out.println("最高分为: " + max + "\n" + "最低分为: " + min + "\n");

}

//删除学生记录方法

public void delete() {

System.out.print("请输入您要删除信息的学生的学号: ");

String number1 = input.next();

int i, flag = length;

for(i = 0; i < length; i++) {

if(number1.equals(data[i].num)) {

flag = i; break;

}

}

if(i == length) {

System.out.println("查无此人!请核对后重新输入 \n");

delete();

}

else {

for(int j = flag; j < length; j++) {

data[j] = data[j + 1];

}

System.out.println("删除成功!\n");

length -= 1; //不减1会报数组越界的错误

}

}

//查询某个学生信息方法

public void inquire() {

System.out.print("请输入您要查询成绩的学生的学号:");

String number2 = input.next();

int i;

for(i = 0; i < length; i++) {

if(number2.equals(data[i].num)) {

System.out.println("====================================");

System.out.println(" 学号 姓名 成绩 ");

System.out.println(data[i].num + "\t" + data[i].name + "\t" + "\t" + data[i].score);

System.out.println("====================================\n");

break;

}

}

if(i == length) {

System.out.println("查无此人!请核对后重新输入学号 \n");

inquire();

}

}

//修改学生信息方法

public void recompose() {

System.out.print("请输入您要修改信息的学生的学号:");

String number3 = input.next();

int i;

for(i = 0; i < length; i++) {

if(number3.equals(data[i].num)) {

System.out.println("请输入该学生新的学号,姓名和成绩:");

data[i].setNum(input.next());

data[i].setName(input.next());

data[i].setScore(input.nextDouble());

System.out.println("修改成功!\n");

break;

}

}

if(i == length) {

System.out.println("查无此人!请核对后重新输入学号\n");

recompose();

}

}

}

package student.score.manage;

import java.util.Scanner;

public class Test {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

String choice = "1";

ScoreList studentScoreList = new ScoreList();

System.out.println("**********学生成绩管理系统********");

while(choice.equals("0") == false) {

System.out.println("1.查看学生成绩单");

System.out.println("2.添加学生成绩记录");

System.out.println("3.修改学生成绩记录");

System.out.println("4.删除学生成绩记录");

System.out.println("5.查看某位学生成绩记录");

System.out.println("6.统计这门课平均分、最高分和最低分");

System.out.println("7.按成绩从高往低排序,并输出");

System.out.println("0.退出程序");

System.out.print("Enter your choice: ");

choice = input.next();

switch(choice) {

case "0":

System.out.println("谢谢您的使用,欢迎下次光临!\n" + "**********按任意键结束程序**********");

break;

case "1":

studentScoreList.transcript();

System.out.println("请问您还需要什么服务?\n");

break;

case "2":

int i = 1;

do {

studentScoreList.add();

System.out.println("\n是否继续添加?" + "\n" + "0.否" + "\n" + "1.是");

i = input.nextInt();

}while(i == 1);

System.out.println("请问您还需要什么服务?\n");

break;

case "3":

studentScoreList.recompose();

System.out.println("请问您还需要什么服务?\n");

break;

case "4":

studentScoreList.delete();

System.out.println("请问您还需要什么服务?\n");

break;

case "5":

studentScoreList.inquire();

System.out.println("请问您还需要什么服务?\n");

break;

case "6":

studentScoreList.average();

System.out.println("请问您还需要什么服务?\n");

break;

case "7":

studentScoreList.sort();

studentScoreList.transcript();

System.out.println("请问您还需要什么服务?\n");

break;

default:

System.out.println("Invalid input! Please enter again.");

break;

}

}

}

}

运行结果截图:

正常情况:

添加学生

94b68f1a53462529fbcf4e7dd553cf4a.png

打印成绩单

a8ff375a32a8444672992ab30c6af794.png

添加学生

7eab8fbcb62cf5b85034619821f9bfec.png

删除学生

dc5a2fc13fab5e13d71572cbd360904b.png

查询学生

1f63af7e6b11381770b18b0b6936e86f.png

统计平均,最值

011dedf6fb6e572959ee2dd42c8c556b.png

按成绩排序

ac7ff0c52e632f539fd84096e9b98d45.png

退出程序

ce01e3be28090aa4bc5526ba93bca405.png

异常情况(当且不局限于 学号、成绩输入字符,名字输入数字时):

c92081d57331b6b638bdf981bf08aad6.png

用IDEA调试

8fa8b8c1654f52520b490c6e4a2e54d7.png

二、实验中遇到的问题

问题一: 由于练习题目中所需构建的方法较多,难度也各不相同,但因没有主类无法进行分布编译,导致心态略炸。

解决办法:利用IDAE的优点,利用软件的红波浪提醒,检查语法错误和遗漏,待完成主类之后再通过debug对程序进行调试并寻找逻辑错误。

6722cd167276fd361923b1fda6f2617f.png

问题二:在三个类文件中首先引入包名package student.score.manage;,但一直提示语法错误。

解决办法:为使成功编译运行,首先使用粗暴的办法,直接在windows目录下建立文件夹,如下图

71a18b801156f31daccc14a958a095cd.png

但回想起调试第四章代码,学习包时,编译时系统自动帮我建了文件夹。经过借鉴学习得知,原因为曾经使用的

javac -d的编译方式 带有创建包的文件夹的功能 。

实验总结和感悟

在类与程序的基本结构中,可以说java程序有一个个类所构成,各类均为主类所服务。另外的,如练习题四中,若一个类可在其他各类中使用,则可以选择带包编译,方便快捷。

由于我抽到的题目在代码量上对我而言有些许困难,免不了有借鉴学习之处,也理解了一些还未看到的内容。因此我认为无论使结对学习写代码,或是在网上 理解的 借鉴学习,都能对自身起到鞭策追赶的作用。

IDEA对于语法错误与遗漏有着鲜明的提示(红色下波浪),但程序中的逻辑错误肉眼很难辨别,因而掌握使用强大的调试功能显得尤为重要。

步骤

耗时

百分比

需求分析

10min

6.7%

设计

20min

13.3%

代码实现

90min

60%

测试

10min

6.7%

分析总结

20min

13.3%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值