20165230 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
20165230 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
一、实验报告封面
课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩:
指导教师:娄嘉鹏 实验日期:2018年4月2日
实验时间:13:45 - 3:25
实验序号:实验一 实验名称:Java开发环境的熟悉
实验题目:实现学生成绩管理功能(增删改,排序,查找),并进行测试(正常情况,异常情况,边界情况)
实验内容:
- 使用JDK编译、运行简单的Java程序;
- 使用IDEA 编辑、编译、运行、调试Java程序。
实验要求:
- 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;
- 完成实验、撰写实验报告,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);
- 实验报告中统计自己的PSP(Personal Software Process)时间;
- 严禁抄袭。
二、实验内容及步骤
(一)使用JDK编译、运行简单的java程序
建立“20165230exp1”的目录 ;
在“20165230exp1”目录下建立src,bin等目录;
在“20165230exp1”目录下通过
javac -d bin src/Hello.java
编译;通过java -cp bin tky.Hello
运行,得到结果再用
tree
查看目录结构,截图如下:
代码提交码云:
(二)IDEA下Java程序开发、调试
1、创建HelloJDB项目,输入如下代码:
package tky;
public class HelloJDB {
public static void main(String[] args) {
int i = 5;
int j = 6;
int sum = add(i, j);
System.out.println(sum);
sum = 0;
for (i = 0; i < 100; i++)
sum += i;
System.out.println(sum);
}
public static int add(int augend, int addend) {
int sum = augend + addend;
return sum;
}
}
2、运行代码
- 通过
run
运行(或快捷键Alt+Shift+F10
):
3、设置断点
- 通过在左侧行数栏单击行数(或快捷键
Ctrl+F8
)
4、单步调试
通过
Debug
开始调试(或使用Alt+Shift+F9
快捷键)使用
Step Into
(或快捷键F7
)和Step Over
(或快捷键F8
)继续向下运行程序
注意区别
- 使用
Step Into
(或快捷键F7
):单步执行,遇到子函数就进入并且继续单步执行 Step Over
(或快捷键F8
):在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步Run to Cursor
:程序将运行至光标处
5、设置条件断点
- 设置断点后点击右键,在
Condition
栏里设置判断条件,此处将条件设置为i==50
6、继续运行程序
- 通过
Resume
(或快捷键F9
),或者直接点击红色方框处的图标,程序将从上一个断点运行至下一个断点(此处为运行至条件断点
(三)练习
1、设计思路
根据题目要求初步设计四个类:
- 首先设计一个Student类封装学生的基本信息,包括学号、姓名、成绩、平均成绩、总成绩
- 设计主程序,显示所要操作的界面与结果输出
- 具体设计一个Operation操作类,实现各种功能,包括增删改,排序,查找
- 最后设计一个wrongException测试类,用来测试异常情况
2、代码
(1)Student.java
class Student{
private int ID;
private String name;
private int grade;
public int getID(){
return ID;
}
public void setID(int ID){
this.ID=ID;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
}
(2)Test.java
import java.lang.*;
import java.io.*;
import java.util.*;
public class Test{//主程序
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入学生人数:");
Student[] stuArr = new Student[in.nextInt()];
Operation adminStu = new Operation();
while(true){
System.out.println("-----请选择你要执行的功能-----");
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:退出系统");
String number = in.next();
if(number.equals("1")){
System.out.println("请输入学生的学号:");
int num = in.nextInt();
System.out.println("请输入学生的姓名:");
String name = in.next();
System.out.println("请输入学生的成绩:");
int grade = in.nextInt();
try{
adminStu.Create(num,name,grade,stuArr);//添加学生
}
catch(wrongException e){
System.out.println("出现错误");
System.out.println(e.warnMess());
}
}else if(number.equals("2")){
System.out.println("请输入学生的学号进行查找:");
int num = in.nextInt();
try{
adminStu.find(num,stuArr);//查找学生
}
catch(wrongException e){
System.out.println("出现错误");
System.out.println(e.warnMess());
}
}else if(number.equals("3")){
System.out.println("请输入需要更改的学生的学号:");
int num = in.nextInt();
System.out.println("请输入学生的姓名:");
String name = in.next();
System.out.println("请输入学生的成绩:");
int grade = in.nextInt();
try{
adminStu.update(num,name,grade,stuArr);//更新学生基本信息
}
catch(wrongException e){
System.out.println("出现错误");
System.out.println(e.warnMess());
}
}else if(number.equals("4")){
System.out.println("执行输入成绩操作");
System.out.println("请输入学生的学号:");
int num = in.nextInt();
try {
adminStu.input(num, stuArr);//输入成绩
}
catch(wrongException e){
System.out.println("出现错误");
System.out.println(e.warnMess());
}
}else if(number.equals("5")){
System.out.println("根据成绩排序操作");
adminStu.Sort(stuArr);//按总分排序
}else if(number.equals("6")) {
System.out.println("请输入需要删除的学生学号");
int num = in.nextInt();
try {
adminStu.delete(num, stuArr);
}
catch(wrongException e){
System.out.println("出现错误");
System.out.println(e.warnMess());
}
} else if(number.equals("7")){
System.out.println("程序已退出");
//break;
System.exit(0);
}
}
}
}
(3)Operation.java
import java.util.*;
public class Operation {//用来管理学生的一个类
public boolean exist(int num, Student stu) {//判断学生是否存在的方法
if (stu != null) {
if (stu.getID() == num) {
return true;
} else {
return false;
}
}
return false;
}
public void Create(int num,String name,int grade,Student[] arr)throws wrongException{//添加学生的方法
Student stu = new Student();
stu.setID(num);
stu.setName(name);
stu.setGrade(grade);
int i = this.setIndex(arr);
if(i==99999){
throw new wrongException("学生人数已添满,不能再添加了");
}
else {
arr[i] = stu;
}
System.out.println("学号:" + arr[i].getID() + " 姓名:" + arr[i].getName() + " 成绩: " + arr[i].getGrade());
}
public int setIndex(Student[] arr){//返回数组为空的下标
for(int i=0;i<arr.length;i++){
if(arr[i]==null){
return i;
}
}
return 99999;
}
public void delete(int num, Student[] arr) throws wrongException {//删除学生成绩
for (int i = 0; i < arr.length; i++) {
if (this.exist(num, arr[i])) {
if (arr[i].getID() == num) {
arr[i] = null;
System.out.println("已成功删除");
return;
}
}
}
throw new wrongException("没有这个学生存在");
}
public void find(int num, Student[] arr) throws wrongException {//查询学生的方法
for (int i = 0; i < arr.length; i++) {//判断学生是否存在
if (this.exist(num, arr[i])) {
System.out.println("有这个学生,信息如下");
System.out.println("学号:" + arr[i].getID() + " 姓名:" + arr[i].getName() + " 成绩: " + arr[i].getGrade());
return;
}
}
throw new wrongException("没有这个学生的存在");
}
public void update(int num, String name, int grade, Student[] arr) throws wrongException {//更新学生基本信息的方法
for (int i = 0; i < arr.length; i++) {
if (this.exist(num, arr[i])) {
arr[i].setName(name);
arr[i].setGrade(grade);
System.out.println("更新学生信息成功!");
return;
}
}
throw new wrongException("没找到这个学生更新信息失败");
}
public void input(int num, Student[] arr) throws wrongException {//输入学生成绩的方法
for (int i = 0; i < arr.length; i++) {
if (this.exist(num, arr[i])) {
System.out.println("请输入成绩:");
Scanner in = new Scanner(System.in);
if (in.hasNextInt()) {//输入非整形数则不执行
arr[i].setGrade(in.nextInt());
} else {
return;
}
System.out.println("学号:" + arr[i].getID() + " 姓名:" + arr[i].getName() + " 成绩: " + arr[i].getGrade());
return;
}
}
}
public void Sort(Student[] arr) {//根据成绩从高到低排序的方法
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] != null && arr[j] != null) {
if (arr[i].getGrade() < arr[j].getGrade()) {
Student t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] != null) {
System.out.println("学号:" + arr[i].getID() + " 姓名:" + arr[i].getName() + " 成绩: " + arr[i].getGrade());
}
}
}
}
(4)wrongException.java
class wrongException extends Exception { //自定义异常
String Message;
public wrongException(String s) {
Message = s;
}
public String warnMess( ){
return Message;
}
}
3、运行结果
命令行实现:
功能1:添加一个学生
功能2:查找一个学生
功能3:更新学生信息
功能4:录入学生成绩
功能5:根据成绩排序
功能6:删除一个学生
IDEA测试:
功能1调试:
功能2调试:
异常情况:
4、实验遇到的问题
问题1:录入同样的学号,没有提示添加同一个人的错误,而是继续往里添加
问题1解决方案:通过
throw
添加抛出异常情况,解决问题问题2:在测试异常的时候出现两句"学生已存在,不能添加"
问题2解决方案:发现是将该句写入了for循环里
问题3:排序功能无法实现
问题3解决方案: 通过检查代码发现是在添加学生的方法里,没有实现上一个学生添加完后保存进数组,而是在添加下一个后将上一个覆盖,最后通过反复修改与测试,成功实现排序功能
5、实验心得
本次实验需要实现的要求比较多,一开始拿到题目时没有思路,通过学习教材和学长学姐的博客,找到了设计基本的思路:首先根据需求构建框架,进行抽象与封装;然后设计主类与具体实现的类;最后还需要进行异常测试。在实验的过程中,遇到了很多问题,通过在网上查询和询问同学都一一解决。我意识到写一个程序就是逐步精益求精的过程,刚开始程序只能实现简单的功能,通过慢慢向功能类中添加功能代码并测试,再加上异常测试,不断的完善与进步。同时还有许多知识需要我不断的学习与积累,才能实现功能的强大。
6、码云代码链接
https://gitee.com/BESTI-IS-JAVA-2018/20165230/commit/14789a6afe780ca47651d866afc347036ff493c1
7、PSP时间
步骤 | 耗时 | 百分比 |
---|
|需求分析 | 10min | 2% | |
| 设计 | 40min | 10% |
| 代码实现 | 30min | 8% | |
|分析总结 | 120min | 30% |
20165230 《Java程序设计》实验一(Java开发环境的熟悉)实验报告的更多相关文章
- 20145308刘昊阳 《Java程序设计》实验一 Java开发环境的熟悉 实验报告
20145308刘昊阳 <Java程序设计>实验一报告 实验名称 Java开发环境的熟悉 实验内容 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试J ...
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验一 Java开发环境的熟悉 实验报告
20175316 盛茂淞 2018-2019-2 <Java程序设计>实验一 Java开发环境的熟悉 实验报告 一.实验要求 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA ...
- 20165327《Java程序设计》实验一 Java开发环境的熟悉 实验报告
20165327<Java程序设计>实验二 <Java面向对象程序设计>实验报告 实验二 <Java面向对象程序设计> 一.实验报告封面 课程:Java程序设计 班 ...
- 20165205 实验一 java开发环境的熟悉 实验报告
20165205 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:刘喆君 学号:20165205 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验 ...
- 实验一《开发环境的熟悉》&实验二《固件设计》
20145312&20145338 实验一<开发环境的熟悉>&实验二<固件设计> 合作博客链接:http://www.cnblogs.com/yx2014531 ...
- 20162327实验一Java开发环境的熟悉实验报告
20162327 <程序设计与数据结构>第一次实验报告 基础知识 1.JDB的使用 使用JDB调试程序需要以下五个步骤: 1.设置断点 stop in 2.run 3.print 4.ne ...
- 20145233韩昊辰 《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)
20145233 <Java程序设计>实验报告一:Java开发环境的熟悉 实验要求 使用JDK编译.运行简单的Java程序: 使用IDEA 编辑.编译.运行.调试Java程序. 实验内容 ...
- 20175236 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:温丰帆 学号:20175236 指导教师:娄嘉鹏 实验日期:2019年4月2日 实验时间:13:45 - 15:25 实验序号:实验一 ...
- 20165234 《Java程序设计》实验一 Java开发环境的熟悉
一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:刘津甫 学号:20165234 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验时间:15:35 - 17:15 实验序 ...
随机推荐
- 给表格控件DBGrid加上记录序号的列
DBGrid使用起来还是很方便的,但就是没有显示记录序号的功能,必须自己加,参照老外给的解决方案如下: 方案1: 1- 在DBGrid建一个第一列 (列的名字起“NO”) 2- 在DBGrid事件 D ...
- ML科普向
转载自http://www.cnblogs.com/qscqesze/ Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方 ...
- JeeSite 4.x SAAS 多租户技术设计方案
SaaS 是 Software-as-a-Service(软件即服务)的简称,从技术角度上可称之为 “多租户技术或称多重租赁技术”.它与 “按需软件.应用服务提供商.托管软件” 所具有相似的含义.它是 ...
- Nagios通过企业微信报警
主要分两部分进行: 注册企业微信,自建应用,获取与发送消息相关的信息: 编写调用微信API脚本(bash),配置Nagios微信报警: 一.企业微信 1.注册企业微信:https://work.wei ...
- Linux中的防火墙----iptables
防火墙,它是一种位于内部网络与外部网络之间的网络安全系统.一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过. 防火墙根据主要的功能可分为网络层防火墙.应用层防火墙.数据库防火墙. 网 ...
- 【hdu4057】 恨7不成妻
http://acm.hdu.edu.cn/showproblem.php?pid=4507 (题目链接) 题意 求区间${[a,b]}$中的某些数的平方和,这些数要满足1.不是7的倍数,2.不含有7 ...
- bzoj2564集合的面积
题目描述 对于一个平面上点的集合P={(xi,yi )},定义集合P的面积F(P)为点集P的凸包的面积. 对于两个点集A和B,定义集合的和为: A+B={(xiA+xjB,yiA+yjB ):(xiA ...
- 卡特兰数Catalan——定义、公式、模型总结
推荐:卡特兰数总结 定义: f(i)表示,从(0,0)出发,到(i,i),每次只能向上或者向右走,并且不越过红线的方案数. 这个图片的点上的数字,其实告诉我们f[i],就可以根据这个n方dp得到. 其 ...
- Linux上给php配置redis扩展
说明,在项目开发中难免会遇到redis中,那我应该如何配置redis这样的一个扩展呢,看下面流程: 一.安装Redis PHP在安装redis扩展时,难免要看一下官网下载安装流程,链接如下: http ...
- C#线程篇---Windows调度线程准则(3)
Windows本身就是一个抢占式操作系统,它的实现,必定有某种算法在里面,比如什么时候调度哪些线程,需要花费多长时间等问题. 我们时时在用Windows,作为程序员,我们有必要知道其中最贴近我们的算法 ...