求教务支持管理连串

4) 实现自动排课功能。
5) 计算工作量
6) 能够进行各种数据统计。
7) 能够输出相应的报表。
8) 具有数据备份和数据恢复功能。
三、 设计要求
软件功能主要考虑实用,具体功能模块一定要先进行调研。

图1.1 系统功能模块图

数据库设计的一般步骤及例子

一、数据库设计的一般流程

1.概述

包括课程设计选题、项目背景、课程设计报告编写目的、课程设计报告的组织等内容。

2.课程设计任务的需求分析

2.1设计任务

2.2设计要求

2.3需求描述的规范文档

3.概念结构设计

3.1概念结构设计工具(E-R模型)

3.2XXX子系统(局部)

3.2.1子系统描述

3.2.2分E-R图

3.2.3说明

3.3YYY子系统

3.3.1子系统描述

3.3.2 分E-R图

3.3.3 说明

……

3.X 总体E-R图

3.X.1 E-R图的集成

3.X.2 总体E-R图

4.逻辑结构设计

4.1关系数据模式

4.2视图的设计

4.3优化

5.数据库物理设计与实施

5.1数据库应用的硬件、软件环境介绍

5.2物理结构设计

5.3 索引的设计

5.4建立数据库

5.5 加载数据库测试数据

6.数据操作要求及实现

6.1数据查询操作

6.2数据更新操作

6.3数据维护操作

6.4其他

7.数据库应用系统的实现

8.设计心得体会

9.参考文献

二、例子:学生选课管理系统

在高校教学管理系统中,学生选课管理是很重要的功能模块。

需求分析:

该系统应该能管理学校的教师信息、学生信息、专业信息、学校开设的所有课程信息、学生选修课程的信息等。选课系统主要满足三类用户的要求,这三类用户分别是教务处的系统管理员、教师和学生。他们所具有的操作权限以及操作内容是不同的。具体的需求分析如下:

系统管理员

  1. 维护学生的个人基本信息,实现对学生个人信息的增、删、改等。

学生信息包括…

  1. 维护教师的个人基本信息,实现对教师个人信息的增、删、改等。

教师信息包括…

  1. 维护课程的个人基本信息,实现对课程个人信息的增、删、改等。

课程信息包括…

学生用户

  1. 查询和修改个人信息。
  2. 进行选课操作
  3. 学生可以查看自己所选课程信息及以前所选课程的成绩信息。

教师用户

  1. 查询和修改个人信息
  2. 课程结束后,登记成绩
  3. 教师可查看自己的教学安排。

数据库概念结构设计:

概念结构设计的常用工具是ER图。分下面几步完成。

  1. 数据抽象(抽象出实体)。画出各实体属性图。
  2. 设计分ER图。找出实体及其联系,并画出分ER图。
  3. 合并分ER图,生成初步ER图。
  4. 全局ER图。将各个实体的属性加入初步ER图,消除各局部可能存在的冲突(包括属性冲突、命名冲突和结构冲突),形成全局ER图。

数据库逻辑结构设计:

首先,将概念模型ER图中实体和联系转换为数据模型,在RDBMS中,就是转换为关系模式,并确定关系模式的属性和主码。

ER图向关系数据模型转换的基本规则如下:

  • 一个实体转换为一个关系模式,实体的属性就是关系的属性,实体的键就是关系的键。
  • 若实体间的联系是1:1的,则联系不单独转换为关系模式,需在两个实体对应的关系模式中的任意一个中加入另一个关系模式的键和联系的属性。
  • 若实体间的联系是1:n的,则联系不单独转换为关系模式,需在n端实体对应的关系模式中加入1端实体对应的关系模式的键和联系的属性。
  • 若实体间的联系是m:n的,则将联系也转换成关系模式,其属性为两端实体类型的码加上和联系的属性,而联系的键为两端实体码的组合。

其次,对具有相同主码的关系模式进行必要的合并。

关系优化

以规范化理论为指导,对关系数据模型进行优化。规范化到第三范式。

数据库物理设计与实施:

主要包括以下工作:

  • 创建数据库
  • 创建基本表,设置约束条件,管理基本表。
  • 创建和管理索引。(DBMS会为主键自动建立索引。建立索引来提高查询效率。)
  • 创建和管理视图。
  • 向数据库中输入数据。
  • 用SQL语句
    实现对数据查询、修改、删除等操作。(可以先思考需要怎么操纵数据库,后面再实现)
  • 编写存储过程、触发器等,并调试通过。(比如创建一个触发器当学生表中某学号的学生被删除时,自动将选课表中的该选课记录删除)

数据库运行维护:

主要包括以下内容

  • 数据库的备份与恢复
  • 数据库的安全性与完整性控制
  • 数据库的性能监督、分析和改进

访问数据库,可以通过以下语句操纵数据。

  1. 对学生表的性别、年龄字段添加约束。
  2. 添加一个属性列“入学时间”。
  3. 修改“专业”的数据类型。
  4. 增加课程名必须取唯一值的约束。
  5. 在选课表的列“学号”、“课程号”上建立索引。
  6. 在选课表的“工号”、“课程号”上建立索引。
  7. 假设学生选课系统中有4个院系,为方便各个院系的教学管理人员查看本院系学生信息,每个院系分别建立一个学生视图。
  8. 建立一个反映学生选课情况的视图。
  9. 学生通过学号或姓名查询自己的选课信息。
  10. 学生通过学号或姓名查询自己的基本信息。
  11. 列出某个教师所授某门课程的成绩单,并按成绩升或降序显示。
  12. 列出某个教师所教授的所有课程信息。
  13. 查询某个学生已经获得的学分信息。
  14. 统计某个教师某门课的平均分、最高分、最低分。
  15. 添加一门新的课程。
  16. 修改某门课的学分。
  17. 创建删除触发器,当学生表中的某“学号”的学生被删除时,自动将选课表中的该学生的选课记录删除,即为学生表建立删除触发器,实现学生表和选课表的级联删除。
  18. 创建删除触发器,当课程表中的某“课程编号”的课程被删除时,自动将选课表中的选修该课程的记录都删除,即为课程表建立删除触发器,实现学生表和选课表的级联删除。
  19. 创建插入触发器,当往选课表中插入记录时,查询学生表中是否有该学号的学生,课程表中是否有该课程编号的课程,如果都有则可以插入,否则拒绝插入。
  20. 备份“学生选课系统”数据库到本地磁盘E盘下的BACKUPDB文件夹下面。

  sp_addumpdevice
‘disk’,’学生选课系统_bak’,’E:BACKUPDB学生选课系统_bak’

BACKUP DATABASE 学生选课系统TO DISK=’学生选课系统_bak’

图书借阅管理系统

需求分析:

系统应实现以下功能:图书管理员可以维护图书信息,包括增加新书、修改图书信息、办理图书借阅登记、归还登记、过期图书处理、丢失图书处理以及读者借阅证件信息的维护等。而读者可以实现借书、还书、查询图书信息、借书信息等。具体要求如下:

  • 图书信息管理:录入各图书信息、维护图书信息等。
  • 读者信息管理:维护读者信息并根据实际情况需要修改、更新、删除读者
  • 借阅管理:包括借书、还书、过期图书归还处理等。

图书借阅管理系统主要有2种用户。

  • 管理员:维护图书基本数据,包括图书种类、更新图书信息,进行读者的图书借阅和归还处理等。
  • 读者用户:可以查询图书信息、借阅图书。

语义:图书馆的图书情况和管理规定,每种类型图书有很多不同的图书,同样的书可以习多本;每本图书可以被多次借阅,每位读者可以借阅多本图书。每本图书的借阅期限是一个月。

数据库概念结构设计:

分3步完成:1)抽象出实体2)抽象出联系实际)确定实体的属性和键

图书类型,包括:图书分类号、图书分类名称、描述信息。

图书,包括:图书编号、图书名称、作者、出版社、价格。

读者,包括:证件号、姓名、性别、所在系、班级、证件状态(包括有效和失效)、联系方式等。

读者与图书之间是m:n,图书类型与图书之间是1:n,读者与图书类型之间无联系。

数据库逻辑结构设计:

将E-R图转换成关系模型。

对关系模型进行优化

规范化到第三范式

数据库物理设计与实施:

主要包括以下工作:

  • 创建数据库
  • 创建基本表,设置约束条件,管理基本表。
  • 创建和管理索引。(DBMS会为主键自动建立索引。建立索引来提高查询效率。)

  • 创建和管理视图。

  • 向数据库中输入数据。
  • 用SQL语句
    实现对数据查询、修改、删除等操作。(可以先思考需要怎么操纵数据库,后面再实现)
  • 编写存储过程、触发器等,并调试通过。
  • 操纵数据库中的数据
  1. 为了方便管理员分类管理,现在需要为多种图书类类型的图书建立视图。
  2. 建立读者借阅情况表。
  3. 为借阅表中的证件号和借阅日期建立组合次索引。
  4. 为图书表中的图书分类号、书名、出版社字段分别建立索引。
  5. 为借阅表建立一个插入触发器,以保证向借阅表插入的“证件号”在读者表中存在,如果不存在,就不会向借阅表中插入借阅信息记录。
  6. 在借阅表建立一个更新触发器,监视借阅表的“借阅日期”列,使其不能手工修改。
  7. 在读者表建立删除触发器,实现读者表和借阅表的级联删除。

运动会管理系统

需求分析:

引入计算机管理运动会,运动员可以在运动会管理系统中查询自己的比赛项目及比赛结果,裁判员或工作人员可以通过系统记录运动员各个比赛项目的成绩、进行成绩统计等。运动会管理系统保存运动员、比赛项目以及不同类型比赛的参赛数据。

运动会管理系统主要管理对象有代表队、运动员、比赛项目等。

本系统中,基本规定如下:一个代表队包含多个运动员,一个运动员只能属于一个代表队;一个运动员可以参加多个比赛项目,一个比赛项目可以被多个运动员参加;假设各个比赛项目结束后,按照成绩由高到低排出名次,并对前3名的运动员给予相应的积分,如第1、2、3名分别积分为3、2、1分,而获得其他名次的运动员积分为零分,将代表队中所有成员的积分累加,得到各代表队总积分,将总积分由高到低排序,得到各个代表队的排名情况。

为简化系统需求,本运动会管理系统只考虑田径运动会的管理,仅考虑代表队、、比赛项目的关系,不考虑裁判评分、比赛时间、地点等到的安排。

数据库概念结构设计:

代表队:代表队员、队名称、领队、总积分、总名次

运动员:运动员号,姓名、性别、年龄

比赛项目:项目号、项目类别、项目名称、成绩单位。

数据库逻辑结构设计:

4张表,

比赛详情,包括成绩、积分、名次

本文DOC文件附件下载

数据库设计的一般步骤及例子

一、数据库设计的一般流程 1.概述
包括课程设计选题、项目背景、课程设计报告编写目的、课程设计报告的…

图片 1图片 2

一、 设计目的
学生根据所学的数据库原理与程序设计的知识,能够针对一个小型的数据库管理系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库的目的。
二、 设计内容
1. 主要的数据表
教师基本信息表,课程表,教室资源表等2.功能模块
1) 对上课教师基本信息进行管理。
2) 对全院开设的课程进行管理。
3) 录入教师基本上课信息。

——————————————分割线——————————————

(注:id为记录在数据表中的位置,与优先级有关,name为教师姓名,room为上课地点,bd1为不想上课的时间片1,bd2位不想上课的时间2,t1~t6为教师

具体下载目录在
/2016年资料/7月/12日/Oracle数据库应用开发综合设计实验PDF/

  1.
在工程目录中创建lib文件夹,将下载好的JDBC放到该文件夹下,如下图所示:

1.1 需求分析

package 实验室安排系统;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;

public class terxg extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    private JTextField textField_1;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        String str=null;
        new terxg(str);
    }

    /**
     * Create the frame.
     */
    public terxg(String s) {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblNewLabel = new JLabel("u4FEEu6539u6240u6559u73EDu7EA7");
        lblNewLabel.setBounds(161, 15, 252, 21);
        contentPane.add(lblNewLabel);

        JLabel lblNewLabel_1 = new JLabel("u8BF7u8F93u5165u8981u4FEEu6539u7684u73EDu7EA7ID:");
        lblNewLabel_1.setBounds(40, 69, 246, 21);
        contentPane.add(lblNewLabel_1);

        textField = new JTextField();
        textField.setBounds(301, 66, 96, 27);
        contentPane.add(textField);
        textField.setColumns(10);

        JLabel lblNewLabel_2 = new JLabel("u8BF7u8F93u5165u4FEEu6539u540Eu7684u73EDu7EA7IDuFF1A");
        lblNewLabel_2.setBounds(40, 133, 234, 21);
        contentPane.add(lblNewLabel_2);

        textField_1 = new JTextField();
        textField_1.setBounds(301, 130, 96, 27);
        contentPane.add(textField_1);
        textField_1.setColumns(10);

        JButton btnNewButton = new JButton("u786Eu8BA4u4FEEu6539");
        btnNewButton.setBounds(40, 186, 163, 29);
        btnNewButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String fid=textField.getText();
                String sid=textField_1.getText();                
                try {
                    xg(fid, sid);
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                JOptionPane.showMessageDialog(null,"修改成功!","提示消息",JOptionPane.WARNING_MESSAGE);

            }
        });;
        contentPane.add(btnNewButton);

        JButton btnNewButton_1 = new JButton("u8FD4u56DEu4E0Au4E00u7EA7");
        btnNewButton_1.setBounds(252, 186, 145, 29);
        btnNewButton_1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                dispose();
                new TerUI(s);

            }
        });
        contentPane.add(btnNewButton_1);
        this.setVisible(true);
        this.setLocation(500, 300);
    }

    public static void xg(String s1,String s2) throws SQLException{
        Connection con;
        String driver = "com.mysql.jdbc.Driver";      
        String url = "jdbc:mysql://localhost:3306/Demo";
        String user = "root";
        String password = "yfz";
        int rs=0;
        try {


            Class.forName(driver);
            con = (Connection)DriverManager.getConnection(url,user,password);
            PreparedStatement stmt=null;
            String sql="update teacher set classid = "+s2+" where classid = "+s1;
            stmt=(PreparedStatement) con.prepareStatement(sql);
            rs = stmt.executeUpdate();                        
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

下载方法见
http://www.linuxidc.com/Linux/2013-07/87684.htm

图片 3图片 4

——————————————分割线——————————————

生成6个上课的时间片,并写入到数据库课程表表单中,供老师查询,算法的流程图如下;

1.2.2  课程管理模块

图片 5图片 6

1.2.3  班级管理模块

7)
优先满足一些特殊要求(比如有些老师喜欢上上午的课,可以优先满足,有些老师不喜欢上某个时间片的课,我们尽量避免给他们在这个时间段排课)

1.2.7  系统管理模块

图片 7

系统功能描述。

 排课表算法的大致思路:

有关教师基本信息的录入、修改查询和删除。同时能够实现按照教师号、姓名等信息进行查询,并且登陆用户为学生时不能对此模块进行任何操作。

图片 8

图片 9

每天上午下午可各安排一次课,周末不安排上课。该系统包含两个程序:管理员程序教师申请程序:

有关学生基本信息的录入、修改查询和删除。同时能够实现按照学生的学号、姓名等条件进行查询,并且登陆用户身份是学生或者任课教师时只能进行学生信息查询。

 3,教师界面的设计:

1.2.1  成绩管理模块

上课的时间片)

1 系统分析

教师可以修改自己所教授的班级名称,如图:

学生成绩管理系统是高校不可缺少的一部分,对于学校教师而言,他们应该能够对系统的不同部分有各自不同的权限,对于学生而言,学生可以查询自己的成绩,对于管理员而言,系统应实现查询,记录学生成绩,对成绩进行各种操作的权限。本系统提供了学生成绩管理,课程信息管理,学生基本信息管理,教师基本信息管理,班级信息管理,以及系统的管理等功能。要求系统具备以下特点:

图片 10图片 11

Oracle数据库应用开发综合设计实验PDF
百度网盘下载:点击这里

1) 同一班级的学生在同一时间不能安排在两个实验室

对班级信息进行添加、删除和修改,并且当登陆用户身份是学生或这任课教师时,只能进行查询班级信息的操作。

  (3) 实物演示时要求能够说明所采用算法思想;

1.2 功能分析

提高要求:

本模块实现有关成绩基本信息的录入、修改、查询与删除。同时能够实现按照课程代码或者学生学号进行查询并且当登陆身份为学生时,只能查询自己的成绩,当身份为教师时,可以录入学生成绩和查询成绩的功能,但是不可以修改和删除学生成绩。

基本要求:

有关专业基本信息的录入、修改查询和删除。同时能够实现按照专业代码或专业名称进行查询,并且登陆身份是学生或者任课教师时,只能进行查询操作。

3.1 教师插入信息设计

(2)数据存储可靠,具备较高的处理效率。

2.2管理员修改信息设计

(4)开发技术先进、功能完善、扩展性强。

2) 同一教师在同一时间不能教授两个班级

系统功能模块图如图1.1所示。

  1. 右键工程名,在java build path中的Libraries分页中选择Add
    JARs…,选择刚才添加的JDBC,如下图:

或者到Linux公社资源站下载:

图片 12

(1)操作简单、易用。

package 实验室安排系统;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;

public class glyxg extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    private JTextField textField_1;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        new glyxg();
    }

    /**
     * Create the frame.
     */
    public glyxg() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblNewLabel = new JLabel("u4FEEu6539u5B9Eu9A8Cu5BA4u5BB9u91CF");
        lblNewLabel.setBounds(161, 32, 252, 21);
        contentPane.add(lblNewLabel);

        JLabel lblNewLabel_1 = new JLabel("u8BF7u8F93u5165u8981u4FEEu6539u7684u5B9Eu9A8Cu5BA4ID:");
        lblNewLabel_1.setBounds(40, 69, 246, 21);
        contentPane.add(lblNewLabel_1);

        textField = new JTextField();
        textField.setBounds(301, 66, 96, 27);
        contentPane.add(textField);
        textField.setColumns(10);

        JLabel lblNewLabel_2 = new JLabel("u8BF7u8F93u5165u4FEEu6539u540Eu7684u5B9Eu9A8Cu5BA4u5BB9u91CFuFF1A");
        lblNewLabel_2.setBounds(40, 133, 234, 21);
        contentPane.add(lblNewLabel_2);

        textField_1 = new JTextField();
        textField_1.setBounds(301, 130, 96, 27);
        contentPane.add(textField_1);
        textField_1.setColumns(10);

        JButton btnNewButton = new JButton("u786Eu8BA4u4FEEu6539");
        btnNewButton.setBounds(40, 186, 163, 29);
        btnNewButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String rid=textField.getText();
                String ru=textField_1.getText();
                int romnum=Integer.parseInt(ru);
                try {
                    xg(rid, romnum);
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                JOptionPane.showMessageDialog(null,"修改成功!","提示消息",JOptionPane.WARNING_MESSAGE);

            }
        });;
        contentPane.add(btnNewButton);

        JButton btnNewButton_1 = new JButton("u8FD4u56DEu4E0Au4E00u7EA7");
        btnNewButton_1.setBounds(252, 186, 145, 29);
        btnNewButton_1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                dispose();
                new GlyUI();

            }
        });
        contentPane.add(btnNewButton_1);
        this.setVisible(true);
        this.setLocation(500, 300);
    }

    public static void xg(String s1,int n) throws SQLException{
        Connection con;
        String driver = "com.mysql.jdbc.Driver";      
        String url = "jdbc:mysql://localhost:3306/Demo";
        String user = "root";
        String password = "yfz";
        int rs=0;
        try {


            Class.forName(driver);
            con = (Connection)DriverManager.getConnection(url,user,password);
            PreparedStatement stmt=null;
            String sql="update administrator set roomnum = "+String.valueOf(n)+" where roomid = "+s1;
            stmt=(PreparedStatement) con.prepareStatement(sql);
            rs = stmt.executeUpdate();                        
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

1.2.5  专业管理模块

View Code

(3)系统安全、稳定。

实现步骤:

对各专业课程信息进行添加、删除、修改同时能够实现按照课程编号、课程名称进行查询。并且当登陆用户身份为学生或者任课教师时,只能进行查询课程信息操作。

  申请和实验室信息,生成总课程安排,并写入数据库。

1.2.6  教师管理模块

3) 同一实验室在同一时间不能安排两个班级

发表评论

电子邮件地址不会被公开。 必填项已用*标注