面向对象案例-学生信息管理系统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. ...
随机推荐
- 理解CAS算法在JAVA中的作用
- Codeforce 1311A Add Odd or Subtract Even
Add Odd or Subtract Even time limit per test2 seconds memory limit per test256 megabytes inputstanda ...
- LCA 学习总结
怎么说,LCA裸题直接套板子,大家都会做,这样的题没必要看,剩下的题发先LCA只是一个工具就像是搜索一样,只是一个工具而不是一种算法,所以借助这套工具在其图论问题如最长路,数据结构等问题上再去发挥作用 ...
- Jmeter 后置处理器
1.JSON Extractor Json extractor 后置处理器用在返回格式为 Json 的 HTTP 请求中,用来获取返回的 Json 中的某个值.并保存成变量供后面的请求进行调用或断言等 ...
- Python编程求解第1天1分钱之后每天两倍持续一个月的等比数列问题
一.问题 问题1 场景:如果你未来的丈母娘要求你,第1天给她1分钱,第2天给2分钱,第3天给4分钱,以此类推,每天给前一天的2倍,给1个月(按30天)算就行.问:第30天给多少钱,总共给多少钱? 问题 ...
- 虚拟机上图片服务器搭建(FastDFS+nginx)
文件服务器 0.提前建好需要的文件夹(/home/fastdfs) /home/fastdfs/tracker /home/fastdfs/storage /home/fastdfs/storage/ ...
- Java面试题:抽象类和接口的区别
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系.但是,一个类却可以实现多个interface. 2.在abstract class 中可以有自己 ...
- Nginx入门资料
最近在学习Nginx,记录一下自己的学习历程. 1. Nginx开发从入门到精通 (淘宝技术团队编写,值得一看) 2. <深入理解Nginx:模块开发与架构解析> 3. Nginx模块开发 ...
- 【Hadoop离线基础总结】Hadoop High Availability\Hadoop基础环境增强
目录 简单介绍 Hadoop HA 概述 集群搭建规划 集群搭建 第一步:停止服务 第二步:启动所有节点的ZooKeeper 第三步:更改配置文件 第四步:启动服务 简单介绍 Hadoop HA 概述 ...
- 一看就懂的Ubuntu系统下samba服务器安装配置教程
文章目录 前言 环境搭建 安装 配置 Examples 1 创建共享(任何人都可以访问) 2 单用户权限(需要密码访问) 添加samba用户 配置参数 3 支持游客访问(单用户拥有管理员权限) 前言 ...