实验日志四.预习过程+实验方案+源码

实验概述

1.实现学生信息管理系统的基本功能,能对学生成绩进行浏览、查询及修改。

  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());
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值