本文是大二时期所写,在我的博客上发布,现在在语雀上再次整理一下,我的博客地址:用JAVA写一个学生管理系统
1.知识铺垫:(非常非常基础的知识)
1.1我们先创建一个Student类
public class Student {//属性私有是为了保护数据安全private int sno;private String name;private int age;private String gender;private int score;}
1.2然后我们再建立一个HelloStudent的类
public class HelloStudent {public static void main(String[] args) {// 根据类创建对象(创建一个叫studentXM的学生对象)Student studentXm=new Student();// 当我们Student中private int sno写出public int sno的时候,我们才能通过studentXm.sno属性来使用studentXm.sno=100;}}
2.1我们在Student类中加入Geter() and Seter()方法,使我们用方法来访问这些私有属性
//创建getName()和setName()方法,使我们用方法来访问这些私有属性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 String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getSno() {return sno;}public void setSno(int sno) {this.sno = sno;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}
2.2在HelloStudent的类中,我们就可以通过方法的方式对私有属性的访问
//我们这是通过方法的方式对私有属性的访问studentXm.setSno(100);System.out.print(studentXm.getSno());
3.1在Students类中设置toString 方法,使可以直接使用对象
//设置toString 方法,使可以直接使用对象@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +", sno=" + sno +", score=" + score +'}';}
//toString()底层代码如下public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}
3.2在HelloStudent的类中
// 我们使用了toString方法,可以直接输出studentXm这个对象studentXm.setSno(100);studentXm.setName("小明");System.out.print(studentXm);
2.写学生管理系统
1.Student类如下
public class Student {// 属性私有是为了数据安全private String name;private int age;private String gender;private int sno;private int score;/*** 构造器* 使用有参构造器之前必须生成一个无参构造器* @param*/public Student() {}// public Student(String name, int age, String gender, int sno, int score) {public Student(int sno,String name,int age,String gender,int score){this.sno=sno;this.name=name;this.age=age;this.gender=gender;this.score=score;}public Student(String name, int sno, int score) {this.name = name;this.sno = sno;this.score = score;}//设置toString 方法,使可以直接使用对象@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +", sno=" + sno +", score=" + score +'}';}//创建getName()和setName()方法,使我们用方法来访问这些私有属性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 String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getSno() {return sno;}public void setSno(int sno) {this.sno = sno;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}}
2.StudentOS类如下
/*** 这是一个学生的管理系统* 对学生的管理包括* 1.添加学生信息* 2.删除学生信息* 3.修改学生信息* 4.查询学生信息* 5.按照学生分数排序,然后展示学生信息* 6.展示学生信息*/public class StudentOs {//学生数组的最大容量private int capacity = 10;//存放学生信息private Student[] students = new Student[capacity];//实际存放学生数量private int size = 0;//声明当前可用的学生编号private int nextSno = 10000;/*** 动态获取下一个学号** @return*/public int getNextSno() {nextSno++;return nextSno;}/*** 添加学生信息** @param student*/public void add(Student student) {//确定容量是否足够ensureEnough();//将学生信息添加到系统students[size] = student;size++;}/*** 根据索引获取学生信息** @param index* @return*/public Student get(int index) {if (index < 0 || index > size - 1) {System.out.println("您输入的索引有误,请重新输入");return null;}return students[index];}/*** 确定数组的容量是足够的*/private void ensureEnough() {//判断是否已经装满,对数组进行扩容if (size == capacity) {//计算扩容后的大小capacity += capacity / 2;//创建新的数组Student[] newStudents = new Student[capacity];//将原来数组的数据拷贝到新数组for (int i = 0; i < students.length; i++) {newStudents[i] = students[i];}//将学生数组的地址指向新的数组students = newStudents;System.out.println("数组扩容成功,扩容后的大小为[" + capacity + "]");}}/*** 根据学生删除学生信息** @param sno*/public void deleteBySno(int sno) {//首先遍历学生数组(已有)for (int i = 0; i < size; i++) {//判断是否学号相等if (students[i].getSno() == sno) {//获取被删除学生信息Student student = students[i];//学号相同,可以删除数据for (int j = i; j < size - 1; j++) {students[j] = students[j + 1];}//删除最后一个数据students[size - 1] = null;size--;//打印信息System.out.println("学生[" + student + "]删除成功");//删除成功,直接退出循环return;}}}/*** 根据学号修改学生的成绩** @param sno* @param score*/public void updateScoreBySno(int sno, int score) {//首先遍历学生数组(已有)for (int i = 0; i < size; i++) {//判断是否学号相等if (students[i].getSno() == sno) {//开始修改分数students[i].setScore(score);//打印信息System.out.println("学生[" + students[i] + "]分数修改成功");//修改成功,直接退出循环return;}}}/*** 根据学生学号查询对应的学生信息** @param sno* @return*/public int queryBySno(int sno) {//首先遍历学生数组(已有)for (int i = 0; i < size; i++) {//判断是否学号相等if (students[i].getSno() == sno) {//根据学号查询到索引,直接返回return i;}}return -1;}/*** 展示现有全部学生的信息*/public void showAll() {System.out.println("============当前系统学生信息为:============");//遍历学生信息for (int i = 0; i < size; i++) {System.out.println(students[i]);}}/*** 根据用户输入的用户名和密码验证是否登录成功** @param username* @param password* @return*/public boolean login(String username, String password) {//假设用户名是admin 密码是123456 就算成功//“equals()”比较字符串中所包含的内容是否相同。if ("admin".equals(username) && "123456".equals(password)) {return true;}return false;}/*** 根据学生的分数进行排序*/public void sortByScore() {}}
3.StudentOsMenu类如下:
import java.util.Scanner;//简单来说Scanner是一个扫描器,我们录取到键盘的数据,先存到缓存区等待读取,他判断读取结束的标示是 空白符;比如空格,比如回车,比如tab…//next()方法读取到空白符就结束;nextLin()读取到回车结束也就是“\r”/*** 学生管理系统*/public class StudentOsMenu {public static void main(String[] args) {//创建一个学生系统对象StudentOs studentOs = new StudentOs();//声明一个Scanner 常用于控制台的输入,当需要使用控制台输入时即可调用这个类Scanner scanner = new Scanner(System.in);//声明一个变量判断是否退出系统boolean quitFlag = true;//声明一个变量存放管理员的登录状态boolean loginFlag = false;//死循环进入待机状态for (; quitFlag; ) {//显示菜单System.out.println("-------------学生管理系统-------------");System.out.println("|1.登录系统");System.out.println("|2.添加学生信息");System.out.println("|3.删除学生信息");System.out.println("|4.修改学生信息-成绩");System.out.println("|5.查询学生信息-学号");System.out.println("|6.显示所有学生信息");System.out.println("|0.退出系统");System.out.println("------------(请输入要执行的菜单编号)-----------");//获取用户的输入的菜单int menu = scanner.nextInt();if (menu == 1) {System.out.println("|1.登录系统");System.out.println("请输入您的用户名!");String username = scanner.next();System.out.println("请输入您的密码!");String password = scanner.next();//判断用户名和密码是否正确loginFlag = studentOs.login(username, password);if (loginFlag) {System.out.println("恭喜您登录成功!");} else {System.out.println("您输入的用户名和密码不匹配,请重新输入【" + username + "】【" + password + "】!");}} else if (menu == 0) {System.out.println("|0.退出系统");quitFlag = false;} else if (!loginFlag) {System.out.println("|警告:您还没有登录学生管理系统,请执行菜单[1]");} else if (menu == 2) {addMenu(studentOs, scanner);} else if (menu == 3) {deleteMenu(studentOs, scanner);} else if (menu == 4) {updateMenu(studentOs, scanner);} else if (menu == 5) {queryMenu(studentOs, scanner);} else if (menu == 6) {showMenu(studentOs);} else if (menu == 0) {System.out.println("|0.退出系统");quitFlag = false;} else {System.out.println("您输入的菜单编号有误,请重新输入!");}}}/*** 显示所有的学生信息** @param studentOs*/private static void showMenu(StudentOs studentOs) {System.out.println("|6.显示所有学生信息");studentOs.showAll();}/*** 查询学生信息** @param studentOs* @param scanner*/private static void queryMenu(StudentOs studentOs, Scanner scanner) {System.out.println("|5.查询学生信息-学号");System.out.println("请输入学生学号!");int sno = scanner.nextInt();int index = studentOs.queryBySno(sno);System.out.println("学号为【" + sno + "】的学生信息为:" + studentOs.get(index));}/*** 修改学生分数** @param studentOs* @param scanner*/private static void updateMenu(StudentOs studentOs, Scanner scanner) {System.out.println("|4.修改学生信息-成绩");System.out.println("请输入学生学号!");int sno = scanner.nextInt();System.out.println("请输入学生成绩!");int score = scanner.nextInt();//调用方法studentOs.updateScoreBySno(sno, score);}/*** 删除学生信息** @param studentOs* @param scanner*/private static void deleteMenu(StudentOs studentOs, Scanner scanner) {System.out.println("|3.删除学生信息");System.out.println("请输入你要删除的学生学号!");int sno = scanner.nextInt();studentOs.deleteBySno(sno);}/*** |2.添加学生信息** @param studentOs* @param scanner*/private static void addMenu(StudentOs studentOs, Scanner scanner) {System.out.println("|2.添加学生信息");int sno = studentOs.getNextSno();// java.lang.Math.random()// 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。int score = (int) (Math.random() * 101);System.out.println("请输入学生姓名!");String name = scanner.next();System.out.println("请输入学生年龄!");int age = scanner.nextInt();System.out.println("请输入学生性别!");String gender = scanner.next();//创建一个新的学生对象Student student = new Student(sno, name, age, gender, score);//将学生信息存放到系统studentOs.add(student);//开发阶段,每次添加后都显示全部学生信息studentOs.showAll();}}
