实验概述
1.实现学生信息管理系统的基本功能,能对学生成绩进行浏览、查询及修改。
通过对学生信息集合的导入与导出,实现文件存取学生信息。
项目主要内容
设计一个简单的学生信息管理的程序,教学管理人员能够使用该程序对学生基本信息、课程信息进行管理,包括数据的添加、修改删除和浏览;能够对学生选课进行管理,包括添加学生选课信息、录入成绩;能使用查询功能,快速查看到指定学生的选课信息;能够对学生选课情况进行简单的统计,包括所选的总的课程数、总学分数及平均成绩。
在添加学生基本信息、课程基本信息相关数据时,学号和课程号不能重复;在添加学生选课信息时,要求该学生和课程必须是存在的,而且不能添加重复的选课信息。
应用程序提供操作界面,可以方便用户进行功能选择,实现 信息的管理和查询,并可以清晰地显示相关信息。
项目需求分析
(1)学生信息管理系统是用结构体数组来实现,该结构体数组中包括整型,字符型及其数组,实现系统功能的调用函数。
(2)学生信息系统的功能是对学生的学生信息的录入、显示、修改、添加、删除、查询、排序、保存、读取来对学生信息进行管理。
(3)该学生信息管理程序的要求是:结构清晰,书写规范;各种信息都保存在文件中;界面采用最简单的菜单,层次清楚,操作方便。
编程语言及开发环境
编程语言:JAVA
开发环境:IntelliJ IDEA 2022.2.3
实验思路
一、建立学生成绩档案集合
创建StudentDatebase类,在构造方法中对集合的数据进行初始化。
通过ArrayList方法将学生信息添加至集合。
二、编写学生信息录入函数
编写录入函数insert(),通过调用学生信息集合中的studentdatebase.getStudentsList().add(students)方法进行对学生信息的录入。
三、编写学生信息浏览及修改函数
1、浏览:编写print()函数,通过for循环对学生信息集合进行遍历,打印输出。
2、增加:通过insert()函数,对集合中学生信息进行增加。
3、删除:编写delete()函数,通过学生的学号,对学生信息进行删除。
4、修改:编写modify()函数,通过学生学号查找到该学生,通过set方法,对该学生的分数进行修改。
四、学生成绩排名及输出
1、排序
(1)双向冒泡排序:
①、传统冒泡气泡排序的双向进行,先让气泡排序由左向右进行,再来让气泡排由右往左进行,如此完成一次排序的动作;
②、使用left与right两个旗标来记录左右两端已排序的元素位置。
(2)希尔排序:
①、先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;
②、然后取d2<d1,重复上述分组和排序操作;
③、直至di=1,即所有记录放进一个组中排序为止。
(3)快速排序:
①、先从数列中取出一个数作为基准数;
②、区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边;
③、再对左右区间重复第二步,直到各区间只有一个数。
(4)堆排序:
①、创建一个堆 H[0……n-1];
②、把堆首(最大值)和堆尾互换;
③、把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;
④、重复第二个步骤 ,直到堆的尺寸为 1。
2、输出
通过排序方法,将名次结果放入RankList链表中,通过for循环对链表内容依次输出打印。
五、学生信息查询
1、编写findByID()函数,通过输入将要查询的学生的学号,系统遍历学生信息集合,找到相同的学号,打印输出该学生的信息。
2、编写findByName()函数,通过输入将要查询的学生的姓名,系统遍历学生信息集合,找到相同的姓名,打印输出该学生的信息。
六、文件存取学生信息
FileOutputStream:OutputStream的子类,用于存储文件当中的数据。
FileInputStream:InputStream的子类,用于读取文件当中的数据。
系统功能结构
总体结构我们采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。也可根据自己对题目的理解增加新的功能模块。
系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行。
【1】录入信息模块:将要入库的学生信息加到信息数据中。它包括学生的学号、姓名、性别、班级、年龄、电话、家庭地址等。
【2】显示学生信息:分为两个模块
(1)显示学生基本信息。它包括学生的学号、姓名、性别、班级、年龄、家庭住址、电话等。
(2)显示学生成绩信息。它包括学生的学号、姓名、数学、物理、英语、C语言成绩 。
【3】查找信息模块:分为两个模块
根据学生学号进行查找。
根据学生姓名进行查找。包括学号、姓名、成绩等。
【4】修改信息模块:对现存的学生信息进行修改分为两个模块
根据学生学号进行修改。
根据学生姓名进行修改。它包括各科成绩。
【5】删除信息模块:同样分为按学号与姓名进行把某学生的
学生信息删除。
【6】学生信息排序模块:把已存在的学生信息按照学号进行排序。
【7】信息查询统计模块:输入学号后,显示该生学生信息。
【8】退出模块:退出程序。
源码
import common.Constant;
import common.Response;
import entity.Student;
import java.util.Scanner;
import service.BusinessService;
import service.LoginService;
public class Main {
private static LoginService loginService = new LoginService();
private static BusinessService businessService = new BusinessService();
private static boolean isLogin = false;
private static boolean isExit = false;
private static boolean isMenu = false;
public Main() {
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("欢迎使用<<" + Constant.SYS_NAME + ">>");
String code;
while(!isLogin) {
System.out.print("请输入您的用户名:");
code = input.next().trim();
System.out.print("请输入您的密码:");
String password = input.next().trim();
Response loginRes = loginService.login(code, password);
System.out.println("\n\r" + loginRes.getMsg() + "\n\r");
if ("success".equals(loginRes.getCode())) {
isLogin = true;
}
}
while(!isMenu) {
isExit = false;
System.out.println("功能菜单:\n\r1.查询" + Constant.MAIN_CLASS + "(输入Q)\n\r2.新增" + Constant.MAIN_CLASS + "(输入A)\n\r3.修改" + Constant.MAIN_CLASS + "(输入E)\n\r4.删除" + Constant.MAIN_CLASS + "(输入D)\n\r5.退出(输入0)");
System.out.print("请输入对应的功能代号:");
code = input.next().trim();
while(!isExit) {
switch (code) {
case "Q":
query(input);
break;
case "A":
add(input);
break;
case "E":
edit(input);
break;
case "D":
delete(input);
break;
default:
isMenu = true;
isExit = true;
}
}
}
System.out.println("谢谢使用,Bye~");
}
public static void query(Scanner input) {
System.out.print("请输入您需要查询的" + Constant.MAIN_CLASS + "编号(输入0退出):");
String input_name = input.next().trim();
if ("0".equals(input_name)) {
isExit = true;
} else {
Response res = businessService.query(input_name);
System.out.println(res.getMsg());
if ("success".equals(res.getCode())) {
System.out.println("为您查询到的" + Constant.MAIN_CLASS + "信息:");
System.out.println(res.getData());
}
}
}
public static void add(Scanner input) {
System.out.print("请输入学生编号(输入0退出):");
String prop1 = input.next().trim();
if ("0".equals(prop1)) {
isExit = true;
} else {
System.out.print("请输入学生名字(输入0退出):");
String prop2 = input.next().trim();
if ("0".equals(prop2)) {
isExit = true;
} else {
System.out.print("请输入学生性别(输入0退出):");
String prop3 = input.next().trim();
if ("0".equals(prop3)) {
isExit = true;
} else {
System.out.print("请输入学生年龄(输入0退出):");
String prop4 = input.next().trim();
if ("0".equals(prop4)) {
isExit = true;
} else {
System.out.print("请输学生地址(输入0退出):");
String prop5 = input.next().trim();
if ("0".equals(prop5)) {
isExit = true;
} else {
Student student = new Student(prop1, prop2, prop3, prop4, prop5);
Response res = businessService.add(student);
System.out.println(res.getMsg());
if ("success".equals(res.getCode())) {
System.out.println("新增的" + Constant.MAIN_CLASS + "信息:");
System.out.println(res.getData());
}
}
}
}
}
}
}
public static void edit(Scanner input) {
System.out.print("请输入需要编辑的" + Constant.MAIN_CLASS + "编号(输入0退出):");
String name = input.next().trim();
if ("0".equals(name)) {
isExit = true;
} else {
Response res = businessService.query(name);
if ("success".equals(res.getCode())) {
System.out.println("为您查询到的" + Constant.MAIN_CLASS + "信息:");
System.out.println(res.getData());
System.out.print("请输入需要编辑的属性代码(例:如编辑" + Constant.MAIN_CLASS + "姓名请输入name,输入0退出):");
String prop = input.next().trim();
if ("0".equals(prop)) {
isExit = true;
} else {
System.out.print("请输入新的属性值(输入0退出):");
String newPropValue = input.next().trim();
if ("0".equals(newPropValue)) {
isExit = true;
} else {
Response checkRes = businessService.checkProp((Student)res.getData(), prop, newPropValue);
System.out.println(checkRes.getMsg());
if ("success".equals(checkRes.getCode())) {
System.out.println("编辑后的" + Constant.MAIN_CLASS + "信息:");
System.out.println(res.getData());
}
}
}
} else {
System.out.println("该" + Constant.MAIN_CLASS + "不存在。");
isExit = true;
}
}
}
public static void delete(Scanner input) {
System.out.print("请输入需要删除的" + Constant.MAIN_CLASS + "编号(输入0退出):");
String name = input.next().trim();
if ("0".equals(name)) {
isExit = true;
} else {
Response delRes = businessService.delete(name);
System.out.println(delRes.getMsg());
}
}
}