• Java面向对象课程设计——学生管理系统


    一、前期调查

    此学生管理系统旨在实现学生信息的增加、删除、查询、修改功能,另外又单独添加查看某个班级的学生名单功能。从中可以分析出学生与班级为两个对象,增加、删除、查询、修改为四种方法,以此为基础构建系统模型。

    二、系统功能逻辑图

     三、UML类图

     四、包结构

     

     五、核心代码

    StuData

     1 package model;
     2 
     3 public class StuData {
     4     Student stuArray[] = new Student[10];
     5     int dataindex = 0;
     6 
     7     public void insertStu(Student stu) {   //新增学生
     8         if (dataindex == stuArray.length) {
     9             Student newArray[] = new Student[stuArray.length + (stuArray.length >> 1)]; // 如果学生人数超十人则扩大数组
    10             for (int i = 0; i < dataindex; i++) {
    11                 newArray[i] = stuArray[i];        //把原数组值赋给新数组
    12             }                                        
    13             stuArray = newArray;   //把新数组赋给旧数组,方便后续代码赋值
    14         }
    15         stuArray[dataindex] = stu;
    16         dataindex++;
    17     }
    18 
    19     public Student checkStuNo(String stuNo) {
    20         for (int i = 0; i < dataindex; i++) {
    21             if (stuArray[i].getStuNo().equals(stuNo)) //检查是否存在改学号
    22             {
    23                 return stuArray[i];
    24             }
    25         }
    26         return null;
    27     }
    28 
    29     public void delateStu(String stuNo) {   //按学号删除对应学生
    30         boolean flag = false;
    31         for (int i = 0; i < dataindex; i++) {
    32             if (stuArray[i].getStuNo().equals(stuNo)) {
    33                 for(int k=i;k<dataindex;k++) {
    34                 stuArray[i] = stuArray[i + 1];
    35                 }
    36                 flag = true;
    37                 dataindex--;
    38             }
    39         }
    40         
    41 
    42     }
    43 
    44     public void updateStu(Student stu) {
    45         for (int i = 0; i < dataindex; i++) {
    46             if (stuArray[i].getStuNo().equals(stu.getStuNo())) {
    47                 stuArray[i] = stu;
    48             }
    49         }
    50     }
    51 
    52     public static void printStu(Student stu) {
    53         System.out.println("-------------------------------------------------------------");
    54         System.out.print("学生学号 " + stu.getStuNo() + "  ");
    55         System.out.print("学生姓名 " + stu.getStuName() + "  ");
    56         System.out.print("学生性别 " + stu.getGender() + "  ");
    57         System.out.print("学生年龄 " + stu.getAge() + "  ");
    58         System.out.println("学生班级 " + stu.getStuClass() + "  ");
    59         
    60     }
    61 
    62     public void printAllstuInf() {
    63         for (int i = 0; i < dataindex; i++) {
    64             printStu(stuArray[i]);
    65         }
    66 
    67     }
    68 }

    功能:

    • 提供新增学生的方法
    • 检查学号是否存在
    • 提供删除学生的方法
    • 提供更新学生信息的方法
    • 提供展示所有学生信息的方法

    Student

    (以下代码省略Getters and Setters)

     1 public Student() {
     2     }
     3 
     4     private String stuName;
     5     private String stuNo;
     6     private String gender;
     7     private String stuClass;
     8     private byte age;
     9 public Student(String stuNo, String stuName, String gender, byte age, String stuClass) {
    10         super();
    11         this.stuName = stuName;
    12         this.stuNo = stuNo;
    13         this.gender = gender;
    14         this.stuClass = stuClass;
    15         this.age = age;
    16     }
    17 
    18 }

    功能:

    • 接收学生信息
    • 存储学生信息

    Classes

     1 package model;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.Scanner;
     6 
     7 public class Classes extends Student{
     8     public static List<Student> class1=new ArrayList<>();
     9     public static List<Student> class2=new ArrayList<>();
    10     public static List<Student> class3=new ArrayList<>();
    11     static Scanner scan=new Scanner(System.in);
    12     public static void classmenu() {
    13         System.out.println("请输入你想查看的班级");
    14         int n=scan.nextInt();
    15         if (n == 1) {
    16             for (int i = 0; i < class1.size(); i++)
    17                 StuData.printStu(class1.get(i));
    18         }
    19         else if (n == 2) {
    20             for (int i = 0; i < class2.size(); i++)
    21                 StuData.printStu(class2.get(i));
    22         }
    23         else if (n == 3) {
    24             for (int i = 0; i < class3.size(); i++)
    25                 StuData.printStu(class3.get(i));
    26         }
    27         else {
    28             System.out.println("输入错误,请重新输入");
    29             classmenu();
    30         }
    31     }
    32 }

    功能:

    • 根据输入的学生信息将学生录入对应班级
    • 可根据班级查询学生信息

    StuSys

      1 package system;
      2 
      3 import java.util.Scanner;
      4 
      5 import model.Classes;
      6 import model.StuData;
      7 import model.Student;
      8 
      9 public class StuSys {
     10     StuData stud = new StuData();
     11     Classes clas=new Classes();
     12     public void insertStu(Scanner sc) {
     13         System.out.println("请输入学生的学号 姓名 性别 年龄 班级(数据之间请保持间隔):");
     14         String stuNo = sc.next();
     15         String stuName = sc.next();
     16         String gender = sc.next();
     17         byte age = sc.nextByte();
     18         String stuClass = sc.next();
     19         int i = 0;
     20 
     21         if (stud.checkStuNo(stuNo) == null) {  //确认是否重复
     22             Student stu = new Student(stuNo, stuName, gender, age, stuClass);
     23             stud.insertStu(stu);
     24             switch (stuClass) {
     25             case "1":
     26                 Classes.class1.add(stu);
     27                 break;
     28             case "2":
     29                 Classes.class2.add(stu);
     30                 break;
     31             case "3":
     32                 Classes.class3.add(stu);
     33             default:
     34                 break;
     35             }
     36             System.out.println("学生信息添加成功!!!");
     37         } else {
     38             System.out.println("您输入的学生学号已存在,请选择下一步操作");
     39             System.out.println("1、继续添加  2、退出系统");
     40             i = sc.nextInt();
     41             if (i == 1) {
     42                 insertStu(sc); /// 递归
     43             } else if (i == 2) {
     44                 System.exit(0);
     45             }
     46 
     47             else {
     48                 System.out.println("输入错误,请重新输入");
     49             }
     50         }
     51     }
     52 
     53     public void delateStu(Scanner sc) {
     54         showAllStuInfo();
     55         int i = 0;
     56         System.out.println("请输入要删除学生的学号:");
     57         String stuNo = sc.next();
     58         if (stud.checkStuNo(stuNo) != null) {
     59             stud.delateStu(stuNo);
     60             System.out.println("学成信息删除成功!!!");
     61         } else {
     62             System.out.println("您输入的学号不存在,请选择下一步操作");
     63             System.out.println("1、继续删除 2、退出系统");
     64             if (i == 1) {
     65                 delateStu(sc);
     66             } else if (i == 2) {
     67                 System.exit(0);
     68             } else {
     69                 System.out.println("输入错误,请重新输入");
     70             }
     71         }
     72     }
     73 
     74     public void updateStu(Scanner sc) {
     75         int i = 0;
     76         showAllStuInfo();
     77         System.out.println("请输入要修改的学生的学号:");
     78         String stuNo = sc.next();
     79         Student stu = new Student();
     80         /// 非要等与null吗??调试后的总结:1不能直接= new student 因为构造方法里没有student() (无参数的构造方法)
     81         /// 解决方法:加一个无参的构造方法
     82         if (stud.checkStuNo(stuNo) != null) {
     83             
     84             System.out.println("请输入学生的姓名 性别 年龄 班级 (数据之间请保持间隔)");
     85             stu.setStuNo(stuNo);
     86             stu.setStuName(sc.next());
     87             stu.setGender(sc.next());
     88             stu.setAge(sc.nextByte());
     89             stu.setStuClass(sc.next());
     90             stud.updateStu(stu);
     91             System.out.println("学生信息修改成功!!!");
     92         } else {
     93             System.out.println("您输入的学号不存在,请选择下一步操作");
     94             System.out.println("1、继续修改  2、退出系统");
     95             i = sc.nextInt();
     96             if (i == 1) {
     97                 insertStu(sc);
     98             } else if (i == 2) {
     99                 System.exit(0);
    100             }
    101 
    102             else {
    103 
    104                 System.out.println("输入错误,请重新输入");
    105             }
    106 
    107         }
    108     }
    109 
    110     public void showStuInfo(Scanner sc) {  //显示学生信息
    111         int i = 0;
    112         Student stu = new Student();
    113         System.out.println("请输入查看学生的学号");
    114         String stuNo = sc.next();
    115         if ((stu = stud.checkStuNo(stuNo)) != null) {
    116             stud.printStu(stu);
    117         } else {
    118             System.out.println("学号不存在,请选择下一步操作");
    119             System.out.println("1、继续查看 2、退出系统");
    120             i = sc.nextInt();
    121             if (i == 1) {
    122                 showStuInfo(sc);
    123             }
    124 
    125             else if (i == 2) {
    126                 System.exit(0);
    127             }
    128 
    129             else {
    130                 System.out.println("输入错误,请重新输入");
    131             }
    132         }
    133     }
    134 
    135     public void showAllStuInfo() {
    136         stud.printAllstuInf();
    137         
    138     }
    139 }

    功能:

    • 提供与用户交互的通道
    • 根据用户的输入给予提示
    • 根据用户的输入调用相应的方法

    六、程序运行展示

    进入菜单并选择增加学生

    录入信息完毕后查询

     

    也可按班级查询

     

     删除学生

    修改学生信息

  • 相关阅读:
    ES6 Symbol类型 附带:Proxy和Set
    why updating the Real DOM is slow, what is Virtaul DOM, and how updating Virtual DOM increase the performance?
    React高级指南
    池(Pool)
    计算机网络Intro
    React基础
    CommonJS 与 ES6 的依赖操作方法(require、import)
    webpack初识(biaoyansu)
    关于时间安排贪心算法正确性的证明
    DP总结
  • 原文地址:https://www.cnblogs.com/Reaches/p/14083042.html
Copyright © 2020-2023  润新知