更新版本

面向对象案例 - 学生信息管理系统V1.0

项目要求:

实体类:
学生类:
id, 姓名,年龄,性别,成绩
需要使用数组保存学生信息
Student[] allStu
需要完成的方法
1. 根据学生的ID,找到对应的学生对象
2. 完成方法,添加新学生
3. 完成方法,删除指定ID的学生
4. 完成方法,展示数组中所有的学生信息
5. 根据学生成绩,完成降序排序

项目分析

1.创建Student类,定义学生的各项信息
2.创建ArrayFunction类,定义学生信息的各项操作。
3.创建Demo主类

Student类分析实现

1.定义学生类,创建私有成员属性
private int id;
private String name;
private int age;
private char gender;
private float score;
其中需要注意的是,id项由程序生成,非人工自行输入,只累加,不减少
2.定义有参无参构造方法
3.实现各项成员属性getter,setter方法 public class Student {
private int id;
private String name;
private int age;
private char gender;
private float score; public Student() {} public Student(String name, int age, char gender, float score) { this.name = name;
this.age = age;
this.gender = gender;
this.score = score;
} 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 getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public char getGender() {
return gender;
} public void setGender(char gender) {
this.gender = gender;
} public float getScore() {
return score;
} public void setScore(float score) {
this.score = score;
}
}

ArrayFunc类分析实现

public class ArrayFunc {
//成员属性: int count = 0; // 累计学生数量累加
int size = 0; // 数组长度计数 == 5个
Student[] allStu = new Student[5]; // 初始化先设置容量Capacity == 5个 /**
* 根据传入的学生id查找对应的学生信息
*
* @param id 学生 目标id
*/
public void find(int id) {
int temp = -1; for (int i = 0; i < size; i++) {
if (id == allStu[i].getId()) {
temp = i;
break;
}
} if (temp < 0) {
System.out.println("你要查找的id不存在");
} else {
System.out.println("id是:" + allStu[id].getId() + ",姓名是:" + allStu[id].getName());
} } /**
* 传入一个学生元素,插入到对应数组中
* 插入数组之前调用check函数判断数组是否满员,check返回true就直接插入,返回false则调用扩容;
*
* @param student Student类型的元素
*/
public void insert(Student student) {
boolean flag = this.check(); if (flag) {
allStu[size] = student;
student.setId(count);
size++;
count++;
}
} /**
* 判断数组当前有效元素长度是否小于数组长度;
*
* @return 确认当前有效元素长度小于数组长度后返回true,否则扩容后返回true
*/
public boolean check() {
boolean flag = false;
if (size < allStu.length - 1) {//数组提前扩容,后续展示空间不需考虑越界问题
flag = true;
} else {
expand();
flag = true;
}
return flag;
} /**
* 数组扩容
*
*/
public void expand() {
Student[] newStu = new Student[allStu.length * 2];
System.arraycopy(allStu, 0, newStu, 0, allStu.length); allStu = newStu;
} /**
* 删除指定id的元素
*
* @param delId 要删除的指定id
*/
public void del(int delId) { int delIndex = size + 1;
boolean flag = true; for (int i = 0; i < size; i++) {
if (delId == allStu[i].getId()) {
delIndex = i;
flag = false;
size--;
break;
}
} if (flag) {
System.out.println("你要删除的id:" + delId + "不存在");
} for (int i = delIndex; i <= size; i++) {
allStu[i] = allStu[i + 1];
} } /**
* 根据学生分数排序算法
*
*/
public void sort() {
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (allStu[i].getScore() < allStu[j].getScore()) {
Student temp = allStu[i];
allStu[i] = allStu[j];
allStu[j] = temp;
}
}
}
} /**
* 展示数组
*/
public void show() {
for (int i = 0; i < size; i++) {
System.out.println("id是:" + allStu[i].getId() + ",姓名是:" + allStu[i].getName());
}
} }

Demo主类实现

public class Demo {
public static void main(String[] args) { // 生成Student 对象
Student student = new Student("张0", 18, '男', 90F);//匿名对象 ArrayFunc arrFunc = new ArrayFunc(); arrFunc.insert(student); arrFunc.insert(new Student("张1", 26, '男', 91F));
arrFunc.insert(new Student("张2", 26, '男', 92F));
arrFunc.insert(new Student("张3", 26, '男', 93F));
arrFunc.insert(new Student("张4", 26, '男', 94F));
arrFunc.insert(new Student("张5", 26, '男', 95F));
arrFunc.insert(new Student("张6", 26, '男', 96F));
arrFunc.insert(new Student("张7", 26, '男', 97F));
arrFunc.insert(new Student("张8", 26, '男', 98F));
arrFunc.insert(new Student("张9", 26, '男', 99F)); arrFunc.find(6);// 根据下标找到对应同学
System.out.println("-----------------"); arrFunc.show();// 展示所有的学生信息
System.out.println("-----------------"); arrFunc.sort();// 这里加入allStu为什么报错?
arrFunc.show();
System.out.println("-----------------"); arrFunc.del(0);// 删除指定id学生
arrFunc.show();
System.out.println("-----------------"); arrFunc.insert(new Student("张10", 26, '男', 99F)); arrFunc.show();
System.out.println("-----------------"); arrFunc.sort();
arrFunc.show();
System.out.println("-----------------"); }
}

代码结果

id是:6,姓名是:张6
-----------------
id是:0,姓名是:张0
id是:1,姓名是:张1
id是:2,姓名是:张2
id是:3,姓名是:张3
id是:4,姓名是:张4
id是:5,姓名是:张5
id是:6,姓名是:张6
id是:7,姓名是:张7
id是:8,姓名是:张8
id是:9,姓名是:张9
-----------------
id是:9,姓名是:张9
id是:8,姓名是:张8
id是:7,姓名是:张7
id是:6,姓名是:张6
id是:5,姓名是:张5
id是:4,姓名是:张4
id是:3,姓名是:张3
id是:2,姓名是:张2
id是:1,姓名是:张1
id是:0,姓名是:张0
-----------------
id是:9,姓名是:张9
id是:8,姓名是:张8
id是:7,姓名是:张7
id是:6,姓名是:张6
id是:5,姓名是:张5
id是:4,姓名是:张4
id是:3,姓名是:张3
id是:2,姓名是:张2
id是:1,姓名是:张1
-----------------
id是:9,姓名是:张9
id是:8,姓名是:张8
id是:7,姓名是:张7
id是:6,姓名是:张6
id是:5,姓名是:张5
id是:4,姓名是:张4
id是:3,姓名是:张3
id是:2,姓名是:张2
id是:1,姓名是:张1
id是:10,姓名是:张10
-----------------
id是:9,姓名是:张9
id是:10,姓名是:张10
id是:8,姓名是:张8
id是:7,姓名是:张7
id是:6,姓名是:张6
id是:5,姓名是:张5
id是:4,姓名是:张4
id是:3,姓名是:张3
id是:2,姓名是:张2
id是:1,姓名是:张1
-----------------

代码优化

ArrayFunc类

package stuinfotwo;

import java.util.Scanner;

public class ArrayFunc {

	// 初始化先设置容量Capacity == 5个
int size = 0;
Student[] allStu = new Student[5]; /**
* 根据传入的学生id查找对应的学生信息
*
* @param id 学生 目标id
* @return 考虑增加return的范围,把打印功能独立。。。。。。。。。。。。。。
*/
public void find(int id) { int temp = -1;
for (int i = 0; i < size; i++) {
if (id == allStu[i].getId()) {
temp = i;
break;
}
} if (temp < 0) {
System.out.println("你要查找的id不存在");
} else {
System.out.println("学生id:" + allStu[id].getId() + ",姓名:" + allStu[id].getName() + ",年龄:"+ allStu[id].getAge() + ",性别:" + allStu[id].getGender() + ",成绩:" + allStu[id].getScore());
} } /**
* 生成学生对象
*/ public void gene() {
Scanner sc = new Scanner(System.in); System.out.println("请输入姓名:");
String name = sc.next(); System.out.println("请输入年龄:");
int age = sc.nextInt();
System.out.println("请输入性别:");
char gender = sc.next().charAt(0);
System.out.println("请输入分数:");
float score = sc.nextFloat(); Student stuTemp = new Student(name, age, gender, score); insert(stuTemp);
} /**
* 传入一个学生元素,插入到对应数组中 插入数组之前调用check函数判断数组是否满员,check返回true就直接插入,返回false则调用扩容;
*
* @param student Student类型的元素
*/ public void insert(Student student) {
boolean flag = this.check();// this指代当前对象,调用该对象的check方法 if (flag) {
allStu[size] = student;
student.setId(size);
size++;
}
} /**
* 判断数组当前有效元素长度是否小于数组长度;
*
* @return 确认当前有效元素长度小于数组长度后返回true,否则扩容后返回true
*/ public boolean check() {
boolean flag = false;
if (size < allStu.length) {
flag = true;
} else {
expand();
flag = true;
}
return flag;
} /**
* 数组扩容
*
*/
public void expand() {
Student[] newStu = new Student[allStu.length * 2];
System.arraycopy(allStu, 0, newStu, 0, allStu.length); allStu = newStu; } /**
* 删除指定id的元素
*
* @param delId 要删除的指定id
*/ public void del(int delId) { int delIndex = size; // 要删除的id在数组中的下标
boolean flag = true; // 标记数组中是否有该下标元素 for (int i = 0; i < size; i++) {
if (delId == allStu[i].getId()) {
delIndex = i; // 找到该元素在数组中的下标
flag = false; // 设为false,说明找到了
size--; // 数组元素减1
break; // 跳出循环
}
} // 输出元素不存在
if (flag) {
System.out.println("你要删除的id:" + delId + "不存在");
return;
} // 元素存在,置换位置
for (int i = delIndex; i < size; i++) {
allStu[i] = allStu[i + 1];
}
allStu[size] = null;
} /**
* 展示数组
*/
public void show() {
for (int i = 0; i < size; i++) {
System.out.println("学生id:" + allStu[i].getId() + ",姓名:" + allStu[i].getName() + ",年龄:" + allStu[i].getAge()+ ",性别:" + allStu[i].getGender() + ",成绩:" + allStu[i].getScore());
}
} /**
* 根据成员分数排序算法
*
*/ public void sort() {
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (allStu[i].getScore() < allStu[j].getScore()) {
Student temp = allStu[i];
allStu[i] = allStu[j];
allStu[j] = temp;
}
}
}
} }

Demo主类

package stuinfotwo;

import java.util.Scanner;
//import java.util.Arrays;
//System.out.println(Arrays.toString(ns)) /**
* @author GGGXXC
*
*/
public class Demo {
public static void main(String[] args) { ArrayFunc arrFunc = new ArrayFunc();
Student student = new Student("张0", 18, '男', 90F); arrFunc.insert(student); arrFunc.insert(new Student("张1", 26, '男', 91F));
arrFunc.insert(new Student("张2", 26, '男', 92F));
arrFunc.insert(new Student("张3", 26, '男', 93F));
arrFunc.insert(new Student("张4", 26, '男', 94F));
arrFunc.insert(new Student("张5", 26, '男', 95F));
arrFunc.insert(new Student("张6", 26, '男', 96F));
arrFunc.insert(new Student("张7", 26, '男', 97F));
arrFunc.insert(new Student("张8", 26, '男', 98F));
arrFunc.insert(new Student("张9", 26, '男', 99F)); Scanner sc = new Scanner(System.in);
int choice = -1;
do {
System.out.println();
System.out.println("1.插入 2.查找 3.删除 4.排序 5.展示 6.退出");
System.out.print("请输入你的操作:");
choice = sc.nextInt();
switch (choice) {
case 1:
System.out.println("插入");
arrFunc.gene();
break;
case 2:
System.out.println("查找");
System.out.print("请输入你要查找的id:");
int id = sc.nextInt(); arrFunc.find(id);
System.out.println("-----------------"); break;
case 3:
System.out.println("删除");
System.out.print("请输入你要删除的id:");
id = sc.nextInt();
arrFunc.del(id);
arrFunc.show();
break;
case 4:
System.out.println("排序");
arrFunc.sort();// 这里加入allStu为什么报错?
arrFunc.show();
System.out.println("-----------------");
break;
case 5:
System.out.println("展示");
arrFunc.show();
System.out.println("-----------------");
break;
case 6:
System.out.println("退出");
return;
default:
System.out.println("输入错误");
break;
}
} while (choice != 6); }
}

1.插入 2.查找 3.删除 4.排序 5.展示 6.退出
请输入你的操作:5
展示
学生id:0,姓名:张0,年龄:18,性别:男,成绩:90.0
学生id:1,姓名:张1,年龄:26,性别:男,成绩:91.0
学生id:2,姓名:张2,年龄:26,性别:男,成绩:92.0
学生id:3,姓名:张3,年龄:26,性别:男,成绩:93.0
学生id:4,姓名:张4,年龄:26,性别:男,成绩:94.0
学生id:5,姓名:张5,年龄:26,性别:男,成绩:95.0
学生id:6,姓名:张6,年龄:26,性别:男,成绩:96.0
学生id:7,姓名:张7,年龄:26,性别:男,成绩:97.0
学生id:8,姓名:张8,年龄:26,性别:男,成绩:98.0
学生id:9,姓名:张9,年龄:26,性别:男,成绩:99.0
----------------- 1.插入 2.查找 3.删除 4.排序 5.展示 6.退出
请输入你的操作:1
插入
请输入姓名:
张15
请输入年龄:
15
请输入性别:

请输入分数:
12 1.插入 2.查找 3.删除 4.排序 5.展示 6.退出
请输入你的操作:5
展示
学生id:0,姓名:张0,年龄:18,性别:男,成绩:90.0
学生id:1,姓名:张1,年龄:26,性别:男,成绩:91.0
学生id:2,姓名:张2,年龄:26,性别:男,成绩:92.0
学生id:3,姓名:张3,年龄:26,性别:男,成绩:93.0
学生id:4,姓名:张4,年龄:26,性别:男,成绩:94.0
学生id:5,姓名:张5,年龄:26,性别:男,成绩:95.0
学生id:6,姓名:张6,年龄:26,性别:男,成绩:96.0
学生id:7,姓名:张7,年龄:26,性别:男,成绩:97.0
学生id:8,姓名:张8,年龄:26,性别:男,成绩:98.0
学生id:9,姓名:张9,年龄:26,性别:男,成绩:99.0
学生id:10,姓名:张15,年龄:15,性别:男,成绩:12.0
----------------- 1.插入 2.查找 3.删除 4.排序 5.展示 6.退出
请输入你的操作:4
排序
学生id:9,姓名:张9,年龄:26,性别:男,成绩:99.0
学生id:8,姓名:张8,年龄:26,性别:男,成绩:98.0
学生id:7,姓名:张7,年龄:26,性别:男,成绩:97.0
学生id:6,姓名:张6,年龄:26,性别:男,成绩:96.0
学生id:5,姓名:张5,年龄:26,性别:男,成绩:95.0
学生id:4,姓名:张4,年龄:26,性别:男,成绩:94.0
学生id:3,姓名:张3,年龄:26,性别:男,成绩:93.0
学生id:2,姓名:张2,年龄:26,性别:男,成绩:92.0
学生id:1,姓名:张1,年龄:26,性别:男,成绩:91.0
学生id:0,姓名:张0,年龄:18,性别:男,成绩:90.0
学生id:10,姓名:张15,年龄:15,性别:男,成绩:12.0
----------------- 1.插入 2.查找 3.删除 4.排序 5.展示 6.退出
请输入你的操作:6
退出

面向对象案例-学生信息管理系统V0.6的更多相关文章

  1. 面向对象案例 - 学生信息管理系统V1.0

    学生管理系统项目[所有知识点整合] 1. 学生管理系统项目 尝试完成以下功能 实体类: 学生类: id, 姓名,年龄,性别,成绩 需要使用数组保存学生信息 Student[] allStu 需要完成的 ...

  2. 面向对象案例-学生信息管理系统V1.1

    1.学生类 package com.qfedu.student.entity; /** * 学生类实体 * * @author GGGXXC * */ public class Student { p ...

  3. PHP案例:学生信息管理系统

    -- Database: test -- 表的结构 message CREATE TABLE `message` ( `id` tinyint(1) NOT NULL PRIMARY KEY AUTO ...

  4. Android(java)学习笔记195:学生信息管理系统案例(SQLite + ListView)

    1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...

  5. Android(java)学习笔记188:学生信息管理系统案例(SQLite + ListView)

    1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...

  6. Py学生信息管理系统 案例(优化版)

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  7. Python基础案例练习:制作学生信息管理系统

    一.前言 学生信息管理系统,相信大家或多或少都有做过 最近看很多学生作业都是制作一个学生信息管理系统 于是,今天带大家做一个简单的学生信息管理系统 二.开发环境: 我用到的开发环境 Python 3. ...

  8. 基于数据库MySQL的简易学生信息管理系统

    通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统. 一:基本要求 1.通过已知用户名和密码进行登录: 2.可以显示菜单: 3.可以随时插入学生 ...

  9. C++ 简单的学生信息管理系统

    // // main.cpp // 2013-7-17作业1 // // Created by 丁小未 on 13-7-17. // Copyright (c) 2013年 dingxiaowei. ...

随机推荐

  1. 理解CAS算法在JAVA中的作用

  2. Codeforce 1311A Add Odd or Subtract Even

    Add Odd or Subtract Even time limit per test2 seconds memory limit per test256 megabytes inputstanda ...

  3. LCA 学习总结

    怎么说,LCA裸题直接套板子,大家都会做,这样的题没必要看,剩下的题发先LCA只是一个工具就像是搜索一样,只是一个工具而不是一种算法,所以借助这套工具在其图论问题如最长路,数据结构等问题上再去发挥作用 ...

  4. Jmeter 后置处理器

    1.JSON Extractor Json extractor 后置处理器用在返回格式为 Json 的 HTTP 请求中,用来获取返回的 Json 中的某个值.并保存成变量供后面的请求进行调用或断言等 ...

  5. Python编程求解第1天1分钱之后每天两倍持续一个月的等比数列问题

    一.问题 问题1 场景:如果你未来的丈母娘要求你,第1天给她1分钱,第2天给2分钱,第3天给4分钱,以此类推,每天给前一天的2倍,给1个月(按30天)算就行.问:第30天给多少钱,总共给多少钱? 问题 ...

  6. 虚拟机上图片服务器搭建(FastDFS+nginx)

    文件服务器 0.提前建好需要的文件夹(/home/fastdfs) /home/fastdfs/tracker /home/fastdfs/storage /home/fastdfs/storage/ ...

  7. Java面试题:抽象类和接口的区别

    1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系.但是,一个类却可以实现多个interface. 2.在abstract class 中可以有自己 ...

  8. Nginx入门资料

    最近在学习Nginx,记录一下自己的学习历程. 1. Nginx开发从入门到精通 (淘宝技术团队编写,值得一看) 2. <深入理解Nginx:模块开发与架构解析> 3. Nginx模块开发 ...

  9. 【Hadoop离线基础总结】Hadoop High Availability\Hadoop基础环境增强

    目录 简单介绍 Hadoop HA 概述 集群搭建规划 集群搭建 第一步:停止服务 第二步:启动所有节点的ZooKeeper 第三步:更改配置文件 第四步:启动服务 简单介绍 Hadoop HA 概述 ...

  10. 一看就懂的Ubuntu系统下samba服务器安装配置教程

    文章目录 前言 环境搭建 安装 配置 Examples 1 创建共享(任何人都可以访问) 2 单用户权限(需要密码访问) 添加samba用户 配置参数 3 支持游客访问(单用户拥有管理员权限) 前言 ...