一、课程设计的内容

背景简介:

学生成绩的手工录入及查询,是一项非常繁重而枯燥的劳动,耗费许多人力和物力,而且会因人的情绪烦躁而出现失误,因此在计算机飞速发展的今天,应用数据库技术实现学生成绩的计算机管理是可行而必要的工作。本系统旨在对学生成绩实现计算机管理,提高工作效率,提高管理水平。

系统目标:

建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平。  

 

基本需求:

成绩管理系统是一个专门为成绩管理而设计的系统。

管理员对成绩管理系统有如下需求:

1)原始数据录入(包括学生信息、课程信息、和学生成绩的录入)。

2)课程查询、学生信息和成绩查询。

3)报表输出。主要包括学生成绩汇总表、需重修的学生统计报表、班级成绩报表等。

 

二、课程设计的要求与数据

 

需求分析:

(1)功能划分:用户通过身份验证后进入主界面。主界面为用户提供3项选择,学生信息管理,课程信息管理,成绩信息管理。

(2)功能描述:

  1. 学生信息管理:

可以进行对新、老生信息(包括学号、姓名、性别、籍贯等)的输入、修改、删除等工作。可以按照特定的信息进行查找,并按照特定的要求进行排序。

  1. 课程信息管理:

可以加入、修改、删除课程信息(包括课程编号、课程名称、学时、学分、先修课等)。可以按照特定的信息进行查找,并按照特定的要求进行排序。

  1. 成绩信息管理:

可以录入、修改、删除成绩信息。

成绩的查询,可以按学号、姓名等进行成绩查询。

成绩的综合统计功能,包括学生成绩按照不同条件进行排名,管理人员可以选择不同的排序条件,并可以将排序结果进行打印输出。

计算每个学生的平均成绩,所有学生单科的平均成绩,找出平均成绩最高的学生并输出。

计算各班的平均分,并按照平均分将各班成绩进行排序。

统计不及格考生的信息。

学生奖励统计,自动生成每班获得奖学金的同学的信息。

(3)

数据字典:

数据项名称

学号

别名

 

编号

E0

含义说明

每个学号必须是唯一编号

类型

Char

长度

10B

取值范围及含义

 

相关元素

学生

 

 

 

数据项名称

姓名

别名

 

编号

E1

含义说明

学生姓名

类型

Varchar

长度

50B

取值范围及含义

可变长字符串,50字节以内

相关元素

学生

 

 

 

数据项名称

性别

别名

 

编号

E2

含义说明

学生性别

类型

Char

长度

1B

取值范围及含义

0代表女,1代表男

相关元素

学生

 

 

 

数据项名称

籍贯

别名

 

编号

E3

含义说明

学生籍贯

类型

Varchar

长度

50B

取值范围及含义

可变长字符串,50字节以内

相关元素

学生

 

 

数据项名称

专业

别名

 

编号

E4

含义说明

学生专业

类型

Varchar

长度

50B

取值范围及含义

可变长字符串,50字节以内

相关元素

学生

 

 

 

数据项名称

班级

别名

 

编号

E5

含义说明

学生班级

类型

Varchar

长度

50B

取值范围及含义

可变长字符串,50字节以内

相关元素

学生

 

 

 

数据项名称

院系

别名

 

编号

E6

含义说明

学生院系

类型

Varchar

长度

50B

取值范围及含义

可变长字符串,50字节以内

相关元素

学生

 

 

 

数据项名称

课程编号

别名

 

编号

E7

含义说明

每个课程编号必须是唯一编号

类型

Char

长度

10B

取值范围及含义

 

相关元素

课程

 

 

 

数据项名称

课程名称

别名

 

编号

E8

含义说明

课程名称

类型

Varchar

长度

50B

取值范围及含义

可变长字符串,50字节以内

相关元素

课程

 

 

 

数据项名称

学时

别名

 

编号

E9

含义说明

课程学时

类型

Decimal

长度

4,1

取值范围及含义

 

相关元素

课程

 

 

 

数据项名称

学分

别名

 

编号

E10

含义说明

课程学分

类型

Decimal

长度

2,1

取值范围及含义

 

相关元素

课程

 

 

数据项名称

先修课

别名

 

编号

E11

含义说明

课程先修课的名称

类型

Varchar

长度

50B

取值范围及含义

可变长字符串,50字节以内

相关元素

课程

 

 

数据项名称

分数

别名

 

编号

E12

含义说明

学生的一门课程的成绩分数

类型

Decimal

长度

4,1

取值范围及含义

范围是0~100,有一位小数

相关元素

学生,课程

 

 

 

数据结构名称

学生

别名

 

编号

S1

含义说明

 

组成

学号+姓名+性别+籍贯+专业+班级+院系

相关元素

学号,姓名,性别,籍贯,专业,班级,院系

 

 

 

数据结构名称

课程

别名

 

编号

S2

含义说明

 

组成

课程编号+课程名称+学时+学分+先修课

相关元素

课程编号,课程名称,学时,学分,先修课

 

 

 

数据结构名称

成绩

别名

 

编号

S3

含义说明

 

组成

学号+课程编号+分数

相关元素

学号,课程编号,分数

 

 

 

 

 

数据流名称

成绩

别名

 

编号

D1

说明

查询成绩时产生

数据流来源

 

数据流去向

 

组成

姓名+学号+课程名称+课程编号+成绩

相关元素

 

 

 

 

数据流名称

学生基本信息

别名

 

编号

D2

说明

录入,修改学生资料或查询成绩时产生

数据流来源

 

数据流去向

 

组成

学号+姓名+性别+籍贯+专业+班级+院系

相关元素

学号,姓名,性别,籍贯,专业,班级,院系

 

 

 

数据流名称

课程基本信息

别名

 

编号

D3

说明

录入,修改课程资料或查询成绩时产生

数据流来源

 

数据流去向

 

组成

课程编号+课程名称+学时+学分+先修课

相关元素

课程编号,课程名称,学时,学分,先修课

 

 

 

数据存储名称

学生信息

别名

 

编号

F1

说明

储存学生信息

输入数据流

学生基本信息

输出数据流

学生基本信息,成绩

组成

学号+姓名+性别+籍贯+专业+班级+院系

数据量

 

存取方式

 

相关元素

学号,姓名,性别,籍贯,专业,班级,院系

 

数据存储名称

课程信息

别名

 

编号

F2

说明

储存课程信息

输入数据流

课程基本信息

输出数据流

课程基本信息,成绩

组成

课程编号+课程名称+学时+学分+先修课

数据量

 

存取方式

 

相关元素

课程编号,课程名称,学时,学分,先修课

 

 

 

 

处理逻辑名称

生成学生成绩

别名

 

编号

L1

说明

 

输入数据流

学生基本信息

输出数据流

成绩

处理逻辑

 

相关元素

 

 

 

 

(4)E-R图

 

关系模型为:

学生(学号,姓名,性别,籍贯,专业,班级,院系)

课程(课程编号,课程名称,学时,学分,先修课)

成绩(学号,课程编号,分数)

 

主要代码:

连接数据库类

public class DBConn {
    public static Connection conn;
    static{
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            conn= DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=ResultsMS;","NT SERVICE","NEVERGIVEUP");
            System.out.println("Connection Succeeded");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() {
        return conn;
    }
}

 

 

 

创建界面窗口类(节选其中一个简单的窗口,这里选择主界面)

public M1() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 783, 484);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);

    JButton btnNewButton = new JButton("学生信息管理");
    btnNewButton.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
        }
    });
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            S1.frames1.setVisible(true);
            frame1.setVisible(false);
        }
    });

    JButton btnNewButton_1 = new JButton("课程信息管理");
    btnNewButton_1.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {

            C1.framec1.setVisible(true);
            frame1.setVisible(false);
        }
    });

    JButton btnNewButton_2 = new JButton("成绩信息管理");
    btnNewButton_2.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {

            M2.frame2.setVisible(true);
            frame1.setVisible(false);

        }
    });
    GroupLayout gl_contentPane = new GroupLayout(contentPane);
    gl_contentPane.setHorizontalGroup(
            gl_contentPane.createParallelGroup(Alignment.TRAILING)
                    .addGroup(gl_contentPane.createSequentialGroup()
                            .addGap(150)
                            .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
                                    .addComponent(btnNewButton_2, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 245, Short.MAX_VALUE)
                                    .addComponent(btnNewButton_1, GroupLayout.DEFAULT_SIZE, 245, Short.MAX_VALUE)
                                    .addComponent(btnNewButton, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 245, Short.MAX_VALUE))
                            .addGap(150))
    );
    gl_contentPane.setVerticalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_contentPane.createSequentialGroup()
                            .addGap(65)
                            .addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE)
                            .addGap(80)
                            .addComponent(btnNewButton_1, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE)
                            .addGap(80)
                            .addComponent(btnNewButton_2, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE)
                            .addContainerGap(50, Short.MAX_VALUE))
    );
    contentPane.setLayout(gl_contentPane);
}
 
查询,更新等操作的实现方法(节选)
获取查询信息的按钮实现
JButton button = new JButton("查询");
button.setToolTipText("在左侧文本框中输入需要查询的数据项,点击查询");
button.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        try {
            DefaultTableModel model=new DefaultTableModel(columns,0);
            table.setModel(model);
            TableColumnModel columnModel=table.getColumnModel();
            s1.set_student_num(textField.getText());
            s1.set_student_name(textField_1.getText());
            s1.set_sex(textField_2.getText());
            s1.set_hometown(textField_3.getText());
            s1.set_major(textField_4.getText());
            s1.set_class_(textField_5.getText());
            s1.set_department(textField_6.getText());
            ResultSet rs = sql.search_stu(s1);
            while (rs.next()) {
                String s1=rs.getString("student_num");
                String s2=rs.getString("student_name");
                String s3=rs.getString("sex");
                String s4=rs.getString("hometown");
                String s5=rs.getString("major");
                String s6=rs.getString("class");
                String s7=rs.getString("department");
                String[] ss=new String[]{s1,s2,s3,s4,s5,s6,s7};
                model.addRow(ss);
            }
            succeedJframe.succeedJframe.setVisible(true);
        }catch (SQLException throwable) {
            throwable.printStackTrace();
        }
    }
});

 

获取查询条件并返回结果集

public ResultSet search_stu(Element_Stu s) {
    try {
        Connection conn=DBConn.getConnection();
        String sql ="SELECT * FROM student WHERE student_num LIKE '%"+s.get_student_num()
                +"%' AND student_name LIKE '%"+s.get_student_name()
                +"%' AND sex LIKE '%"+s.get_sex()
                +"%' AND hometown LIKE '%"+s.get_hometown()
                +"%' AND major LIKE '%"+s.get_major()
                +"%' AND class LIKE '%"+s.get_class_()
                +"%' AND department LIKE '%"+s.get_department()+"%'";
        PreparedStatement ptmt = conn.prepareStatement(sql);
        ResultSet rst=ptmt.executeQuery();
        return rst;
    } catch (SQLException throwable) {
        throwable.printStackTrace();
        return null;
    }
}

 完整代码下载:链接:https://pan.baidu.com/s/1Y-q8UIFEgv6T-eJeHTeFYw
提取码:i0p7

posted on 2020-06-17 22:44  翎凌零  阅读(788)  评论(1)    收藏  举报