更新版本

面向对象案例 - 学生信息管理系统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. 在sun jdk 8镜像基础上构建maven 3的docker镜像

    2019独角兽企业重金招聘Python工程师标准>>> 在https://my.oschina.net/ytqvip/blog/1595054文章的sun jdk 8镜像基础上构建m ...

  2. 百度Openrasp开源的应用运行时自我保护产品,安装教程。

    第一步: 下载最新版本的安装包 https://packages.baidu.com/app/openrasp/release/latest/rasp-php-linux.tar.bz2 解压到目录: ...

  3. POJ - 2387 Til the Cows Come Home (最短路入门)

    Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before ...

  4. [bzoj2427]P2515 [HAOI2010]软件安装(树上背包)

    tarjan+树上背包 题目描述 现在我们的手头有 \(N\) 个软件,对于一个软件 \(i\),它要占用 \(W_i\) 的磁盘空间,它的价值为 \(V_i\).我们希望从中选择一些软件安装到一台磁 ...

  5. pycharm(py 文件中添加作者、时间)

    1.打开 Pycharm,点击 File,再找到 Settings... 2.选择 Editor ----> File and Code Templates ----> Python Sc ...

  6. js 如何保存代码段并执行以及动态加载script

    1.模块化开发 通常使用的是 export和import 实现代码的共享和导入 2.特殊情况下需要将代码段作为参数传递 可以使用function 的toString方法将整合函数和里面的代码批量转化为 ...

  7. V - Can you answer these queries? HDU - 4027 线段树 暴力

    V - Can you answer these queries? HDU - 4027 这个题目开始没什么思路,因为不知道要怎么去区间更新这个开根号. 然后稍微看了一下题解,因为每一个数开根号最多开 ...

  8. Prime Path素数筛与BFS动态规划

    埃拉托斯特尼筛法(sieve of Eratosthenes ) 是古希腊数学家埃拉托斯特尼发明的计算素数的方法.对于求解不大于n的所有素数,我们先找出sqrt(n)内的所有素数p1到pk,其中k = ...

  9. LeetCode--LinkedList--141.Linked List Cycle(Easy)

    141. Linked List Cycle(Easy)2019.7.10 题目地址https://leetcode.com/problems/linked-list-cycle/ Given a l ...

  10. echarts 中 symbol 自定义图片

    首先我使用的技术框架的VUE,当然该方法在其他框架也是适用的,这点大家注意一下~ 在官方文档里面,修改标记的图形(symbol)的方法有三种: 一:ECharts 提供的标记类型有 'circle', ...