面向对象案例-学生信息管理系统V0.6
更新版本
项目要求:
实体类:
学生类:
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的更多相关文章
- 面向对象案例 - 学生信息管理系统V1.0
学生管理系统项目[所有知识点整合] 1. 学生管理系统项目 尝试完成以下功能 实体类: 学生类: id, 姓名,年龄,性别,成绩 需要使用数组保存学生信息 Student[] allStu 需要完成的 ...
- 面向对象案例-学生信息管理系统V1.1
1.学生类 package com.qfedu.student.entity; /** * 学生类实体 * * @author GGGXXC * */ public class Student { p ...
- PHP案例:学生信息管理系统
-- Database: test -- 表的结构 message CREATE TABLE `message` ( `id` tinyint(1) NOT NULL PRIMARY KEY AUTO ...
- Android(java)学习笔记195:学生信息管理系统案例(SQLite + ListView)
1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...
- Android(java)学习笔记188:学生信息管理系统案例(SQLite + ListView)
1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...
- Py学生信息管理系统 案例(优化版)
# 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...
- Python基础案例练习:制作学生信息管理系统
一.前言 学生信息管理系统,相信大家或多或少都有做过 最近看很多学生作业都是制作一个学生信息管理系统 于是,今天带大家做一个简单的学生信息管理系统 二.开发环境: 我用到的开发环境 Python 3. ...
- 基于数据库MySQL的简易学生信息管理系统
通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统. 一:基本要求 1.通过已知用户名和密码进行登录: 2.可以显示菜单: 3.可以随时插入学生 ...
- C++ 简单的学生信息管理系统
// // main.cpp // 2013-7-17作业1 // // Created by 丁小未 on 13-7-17. // Copyright (c) 2013年 dingxiaowei. ...
随机推荐
- #Week8 Advice for applying ML & ML System Design
一.Evaluating a Learning Algorithm 训练后测试时如果发现模型表现很差,可以有很多种方法去更改: 用更多的训练样本: 减少/增加特征数目: 尝试多项式特征: 增大/减小正 ...
- CodeForces - 224C. Bracket Sequence (栈模拟)简单做法
A bracket sequence is a string, containing only characters "(", ")", "[&quo ...
- csp-j2019游记
我一pj蒟蒻这点水平还来写游记? 算了,毕竟是第一次,记录一下吧 noip->csp 话说我跟竞赛是不是天生八字不合啊...... 小学的时候学小奥,等我开始报名比赛,当时似乎所有竞赛都被叫停了 ...
- 04_CSS入门和高级技巧(2)
上节课复习 HTML表格,table.tr.td(th):thead.tbody:caption. 一定要会根据图形,来写表格: <table border="1"> ...
- 整型和浮点型与QByteArray的转换
目录 QByteArray 整型 QByteArray 浮点型 QByteArray QByteArray The QByteArray class provides an array of byte ...
- 【Linux基础总结】Linux基本命令
Linux基本命令 Linux系统下的文件类型.权限.所属用户与组 文件类型 - (文件) d(目录) ->类似windows系统下的文件夹 l (链接) ->类似windows系统下的快 ...
- 想要年薪百万,阿里Sentinel支持RESTful接口都搞不定?
最近正准备用阿里Sentinel,发现RESTful接口支持的不是很好.有些童鞋可能对Sentinel不是很了解,我们先简单介绍一下. Sentinel简介 Sentinel是一套阿里巴巴开源的流量防 ...
- Linux --常见Linux目录名称
Linux文件系统结构是从Unix文件结构演进过来的,在Linux文件系统中,通用的文件系统中,通用的目录名用于表示一些常见的功能.如下所示: 目录 用途 / 虚拟目录的根目录,通常不会再这里存储文件 ...
- 关于layui数据表格的各种事件
table.on('tool(demo)', function(obj){}):监听工具条事件,tool 是工具条事件名,demo 是 table 原始容器的属性 lay-filter="对 ...
- 【基准测试】BenchmarkDotNet介绍
BenchmarkDotNet 概述 BenchmarkDotNet helps you to transform methods into benchmarks, track their perfo ...