跟着视频做一个数组知识的小案例,最开始想自己写来着,突然一懵,犹如老虎吃天——无处下爪。。。。无奈,还是看了视频里面的,突然就觉着熟悉了,也不用跟着视频做了,真爽,只是功能是完成了,bug多多!先不管啦,至少实现了某些功能,有一起学习的可以互相交流。
话不多说,做的案例是一个录入学生信息和分数并实现排序的小案例,虽然小,知识点却不少,细节点也不少,不一一缀述,请看:
1、先定义一个学生类(这没啥说的,该有的属性必须有,get、set方法搞起来,重写toString方法):
package stuManagement;
public class StuInfo {
private int num; // 编号
private String stuName; // 姓名
private int age; // 年龄
private int java; // java成绩
private int c_shap; // c#成绩
private int html; // html成绩
private int sql; // sql成绩
private int sum; // 总分
private int avg; // 平均分
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
public int getC_shap() {
return c_shap;
}
public void setC_shap(int c_shap) {
this.c_shap = c_shap;
}
public int getHtml() {
return html;
}
public void setHtml(int html) {
this.html = html;
}
public int getSql() {
return sql;
}
public void setSql(int sql) {
this.sql = sql;
}
public int getSum() {
return sum;
}
public void setSum() {
this.sum = java+c_shap+html+sql;
}
public int getAvg() {
return avg;
}
public void setAvg() {
this.avg = sum/4;
}
@Override
public String toString() {
String msg="\t"+num+"\t"+stuName+"\t"+age+"\t"+java+"\t"+c_shap+"\t"+html+"\t"+sql+"\t"+sum+"\t"+avg;
/*
* 这是eclipse自动生成的toString方法,可惜用不成,非得自个写
* return "StuInfo [num=" + num + ", stuName=" + stuName + ", age=" + age +
* ", java=" + java + ", c_shap=" + c_shap + ", html=" + html + ", sql=" + sql +
* ", sum=" + sum + ", avg=" + avg + "]";
*/
return msg;
}
}
2、写执行类(所有的功能方法都在此处调用,不用所有代码挤在一起,整洁大方,小葱豆腐,非黑即白…不知道在说啥了):
package stuManagement;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请定义学生人数:");
StuInfo[] stuArr = new StuInfo[sc.nextInt()]; // 学生对象数组
Function excute = new Function();
boolean flag = true;
while (flag) { // 每次执行一个功能完成后,继续弹出询问用户操作
System.out.println("--你要执行的功能--");
System.out.println("10:添加一个学生");
System.out.println("11:查找一个学生");
System.out.println("12:根据编号更新学生的基本信息");
System.out.println("13:根据编号删除学生");
System.out.println("14:根据编号输入学生的和门成绩");
System.out.println("15:根据某门成绩进行排序");
System.out.println("16:根据总分进行排序");
System.out.println("99:退出系统");
int no = sc.nextInt(); // 输入代码来选择对应的功能
if (no == 10) { // 执行添加成员
System.out.println("请输入学生姓名:");
String stuName = sc.next(); // 输入学生姓名
System.out.println("请输入学生年龄:");
int age = sc.nextInt(); // 输入学生年龄
excute.addStu(stuName, age, stuArr);
}else if (no==11) { // 执行查询
System.out.println("--执行查找学生的基本信息操作--");
System.out.println("请输入学生编号进行查找:");
int stuNum=sc.nextInt(); // 输入学生编号
excute.select(stuNum,stuArr);
}else if (no==12) { // 执行修改
System.out.println("--执行修改学生的基本信息--");
System.out.println("请输入学生的编号:");
int stuNum=sc.nextInt(); // 输入学生编号
System.out.println("请输入学生的姓名:");
String stuName = sc.next(); // 输入学生姓名
System.out.println("请输入学生的年龄:");
int age = sc.nextInt(); // 输入学生年龄
excute.modify(stuNum, stuName, age, stuArr);
}else if (no==13) {
System.out.println("--执行删除学生--");
System.out.println("请输入学生的编号:");
int stuNum=sc.nextInt(); // 输入学生编号
excute.delete(stuNum, stuArr);
}else if (no==14) {
System.out.println("--执行添加学生成绩--");
System.out.println("请输入学生编号:");
int stuNum = sc.nextInt();
excute.modifyScore(stuNum, stuArr);
}else if (no==15) {
System.out.println("--根据指定课程进行排序--");
System.out.println("请输入需要排序的科目(1、java 2、c# 3、html 4、sql):");
int num=sc.nextInt();
excute.sortCourse(num, stuArr);
}else if (no==16) {
System.out.println("--按总分来进行排序--");
excute.sortSum(stuArr);
}
if (no == 99) {
System.out.println("退出成功!");
flag=false;
}
}
sc.close();
}
}
3、执行功能的类(初步了解和实现封装,虽然了解不那么深,但慢慢来么):
package stuManagement;
import java.util.Scanner;
public class Function { // function:功能————进行管理学生的类
String title = "\t编号" + "\t姓名" + "\t年龄" + "\tjava" + "\tc#" + "\thtml" + "\tsql" + "\t总分" + "\t平均分";
Scanner sc = new Scanner(System.in);
public void print(StuInfo[] stuArr) { // 每次执行操作完成后刷新数据
System.out.println(title);
for (int i = 0; i < stuArr.length; i++) {
if (stuArr[i] != null) {
stuArr[i].setSum();
stuArr[i].setAvg();
System.out.println(stuArr[i]);
}
}
}
public boolean exist(int stuNum, StuInfo stu) { // 判断查找的学生是否存在
if (stu != null) {
if (stu.getNum() == stuNum) {
return true;
} else {
return false;
}
}
return false;
}
public void addStu(String name, int age, StuInfo[] stuArr) { // 添加
StuInfo stu = new StuInfo();
stu.setStuName(name);
stu.setAge(age);
int i = setIndex(stuArr); // 调用setIndex方法,将该方法的返回值赋值给变量i
stu.setNum(i); // 将i的值作为学生数组的索引
if (i == 9999) {
System.out.println("学生人数已最大,无法添加了!");
}
stuArr[i] = stu;
print(stuArr);
}
public int setIndex(StuInfo[] stuArr) { // 返回数组为空的索引
for (int i = 0; i < stuArr.length; i++) {
if (stuArr[i] == null) {
return i;
}
}
return 9999;
}
public void select(int stuNum, StuInfo[] stuArr) { // 查询
System.out.println(title);
for (int i = 0; i < stuArr.length; i++) {
if (exist(stuNum, stuArr[i]) == true) {
System.out.println(stuArr[i]);
return; // 注意:此处如果用break,则执行完成后还会执行下面的打印语句;而用return则不会
}
}
System.out.println("要查找的学生不存在");
}
public void modify(int stuNum, String stuName, int age, StuInfo[] stuArr) { // 修改学生基本信息
for (int i = 0; i < stuArr.length; i++) {
if (exist(stuNum, stuArr[i])) { // 先执行判断,再进行修改(==true可以不用写)
stuArr[i].setStuName(stuName);
stuArr[i].setAge(age);
System.out.println("更新学生信息成功!");
print(stuArr);
return; // 此处用return原因同上
}
}
System.out.println("要修改的学生不存在");
}
public void delete(int stuNum, StuInfo[] stuArr) { // 删除
for (int i = 0; i < stuArr.length; i++) {
if (exist(stuNum, stuArr[i])) {
stuArr[i] = null;
print(stuArr);
return;
}
}
System.out.println("要删除的学生不存在");
}
public void modifyScore(int stuNum, StuInfo[] stuArr) { // 添加成绩
for (int i = 0; i < stuArr.length; i++) {
if (exist(stuNum, stuArr[i])) {
System.out.println("请输入" + stuArr[i].getStuName() + "的java成绩:");
stuArr[i].setJava(sc.nextInt());
System.out.println("请输入" + stuArr[i].getStuName() + "的c#成绩:");
stuArr[i].setC_shap(sc.nextInt());
System.out.println("请输入" + stuArr[i].getStuName() + "的html成绩:");
stuArr[i].setHtml(sc.nextInt());
System.out.println("请输入" + stuArr[i].getStuName() + "的sql成绩:");
stuArr[i].setSql(sc.nextInt());
print(stuArr);
return;
}
}
System.out.println("找不到该学生,请确认学生编号!");
}
public void sortCourse(int num, StuInfo[] stuArr) { // 按某一门成绩进行排序(1、java 2、c# 3、html 4、sql)
if (num == 1) {
for (int i = 0; i < stuArr.length - 1; i++) {
for (int j = i + 1; j < stuArr.length; j++) {
if (stuArr[i] != null && stuArr[j] != null) { // 选择的成绩不为空才排序
if (stuArr[i].getJava() < stuArr[j].getJava()) {
StuInfo temp = stuArr[i];
stuArr[i] = stuArr[j];
stuArr[j] = temp;
}
}
}
}
} else if (num == 2) {
for (int i = 0; i < stuArr.length - 1; i++) {
for (int j = i + 1; j < stuArr.length; j++) {
if (stuArr[i] != null && stuArr[j] != null) { // 选择的成绩不为空才排序
if (stuArr[i].getC_shap() < stuArr[j].getC_shap()) {
StuInfo temp = stuArr[i];
stuArr[i] = stuArr[j];
stuArr[j] = temp;
}
}
}
}
} else if (num == 3) {
for (int i = 0; i < stuArr.length - 1; i++) {
for (int j = i + 1; j < stuArr.length; j++) {
if (stuArr[i] != null && stuArr[j] != null) { // 选择的成绩不为空才排序
if (stuArr[i].getHtml() < stuArr[j].getHtml()) {
StuInfo temp = stuArr[i];
stuArr[i] = stuArr[j];
stuArr[j] = temp;
}
}
}
}
} else if (num == 4) {
for (int i = 0; i < stuArr.length - 1; i++) {
for (int j = i + 1; j < stuArr.length; j++) {
if (stuArr[i] != null && stuArr[j] != null) { // 选择的成绩不为空才排序
if (stuArr[i].getSql() < stuArr[j].getSql()) {
StuInfo temp = stuArr[i];
stuArr[i] = stuArr[j];
stuArr[j] = temp;
}
}
}
}
}
print(stuArr);
}
public void sortSum(StuInfo[] stuArr) { // 按总分排序
for (int i = 0; i < stuArr.length - 1; i++) {
for (int j = i + 1; j < stuArr.length; j++) {
if (stuArr[i] != null && stuArr[j] != null) { // 选择的成绩不为空才排序
if (stuArr[i].getSum() < stuArr[j].getSum()) {
StuInfo temp = stuArr[i];
stuArr[i] = stuArr[j];
stuArr[j] = temp;
}
}
}
}
print(stuArr);
}
}