更新版本

面向对象案例 - 学生信息管理系统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. mysql查询语句中like 的用法

    1.常见用法: (1)搭配%使用 %代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据: (2)搭配_使用 _代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出一 ...

  2. elementUI字体图标不显示问题

    原文链接: 点我 自己搭建的Vue项目,没有使用vue-cli,引入elementUI时提示字体图标404,找不到文件,如下错误: GET http://localhost:9090/WEB-INF/ ...

  3. 一张图告诉你UML图怎么画❀

    UML 能帮我们做什么? 我们在进行项目的时候,通过使用 UML 的面向对象图的方式来更明确.清晰的表达项目中的架设思想.项目结构.执行顺序等一些逻辑思维. UML 介绍: 1997年,OMG 组织( ...

  4. 数学--数论--HDU 2136(素数筛选法)

    Everybody knows any number can be combined by the prime number. Now, your task is telling me what po ...

  5. Codeforce 1251C. Minimize The Integer

    C. Minimize The Integer time limit per test2 seconds memory limit per test256 megabytes inputstandar ...

  6. undef用法

    #undef的语法 定义:#undef 标识符,用来将前面定义的宏标识符取消定义. 整理了如下几种#undef的常见用法. 1. 防止宏定义冲突在一个程序块中用完宏定义后,为防止后面标识符冲突需要取消 ...

  7. Android 讯飞语音听写SDK快速接入(附空指针解决和修改对话框文字方法)

    1.账号准备工作 首先要有一个讯飞的账号啦,为后面申请APPID.APPKey等东西做准备.顺带一提:讯飞对不同认证类型用户开 放的SDK的使用次数是有不同的,详情如下图. 账号申请完成后,需要去你自 ...

  8. 使用python绘制世界人口地图及数据处理

    本篇我们来说:下载和处理json格式的文件,并通过pygal中的地图工具来实现数据可视化 ------------------------------------------------------- ...

  9. spring的后台数据校验

    数据校验对于开发项目来说是必须的.校验一般分为前台校验和后台校验,前台校验是必须要做的,后台校验是可选的.后台校验相对前台校验来说配置起来一般更复杂.前台校验通过js做,前台校验一般非常容易绕过.sp ...

  10. 【Linux基础总结】Linux基本命令

    Linux基本命令 Linux系统下的文件类型.权限.所属用户与组 文件类型 - (文件) d(目录) ->类似windows系统下的文件夹 l (链接) ->类似windows系统下的快 ...