目录
一、需求分析 4
二、概念设计 5
2.1 概念模型(E-R图) 6
2.2 数据字典 6
三、逻辑结构设计 5
3.1 关系模式 6
3.2 系统结构图 6
四、物理设计 5
4.1 存储安排 5
4.2 方法选择 5
五、系统实施 5
5.1 装入数据 5
5.2 编写代码 5
5.3 编译连接 5
六、系统维护 6
6.1 数据库转储 6
6.2 恢复数据库 6
七、系统操作指南 6
7.1 登录界面 6
7.2 学生端界面 6
7.3 教师端界面 10
7.4管理员端界面 11
八、附录 11
九、总结 28

一、需求分析
通过本次数据库课程设计实习题目可知,该大学生信息综合管理系统分为三个角色:学生、教师、管理员。
1、各个角色的功能权限
 学生
(1)查询功能
个人信息查询:系统登录之后,学生可在学生页面查询个人信息;
个人课表查询:学生进行选课操作之后,可查询学生个人课表并可取消选课;
个人成绩查询:教师端对学生成绩录入之后,学生可自行查询已选课程的成绩(课程成绩、成绩等级、课程绩点、课程学分绩点、所有课程的平均绩点);
课程信息查询:对已开设课程的查询(学生可按照不同条件进行查询、并能查看上课教室具体的空间位置信息);
院系部门查询:查询院系的具体信息;
(2)选课功能:按不同查询条件查询学生想要选修的课程信息并进行选课;
(3)个人特定信息修改功能(个人密码)。

 教师
(1)查询功能
个人信息查询:登录系统后,教师可在教师页面查询个人信息;
个人课表查询:查看个人已开设课程的课程信息;
学生信息查询:查看特定学生信息、查看已选个人开设课程的所有学生信息;
课程信息查询;查看所有已开设的课程信息;
(2)学生成绩录入功能:录入已选个人开设课程的所有学生的课程成绩;
(3)个人特定信息的修改功能(个人密码)。

 管理员
(1)学生信息管理:查询学生信息、添加学生信息、删除学生信息、修改学生信息
(2)教师信息管理:查询教师信息、添加教师信息、删除教师信息、修改教师信息
(3)班级信息管理:查看班级信息、添加班级信息、删除班级信息、修改班级信息
(4)课程信息管理:查看课程信息、增设课程、删除课程信息、修改课程信息
(5)院系信息管理:查看院系信息、修改院系信息、添加院系信息
(6)修改个人密码功能

2.教务管理系统中的实体
教师:工作证号、姓名、职称、电话、系代号;
学生:学号、姓名、性别、出生年月、班级号;
班级:班号、班主任工作证号、系代号、班级人数;
课程:课程号、课程名称、学分、课程类型、上课时间、名额、上课教室、授课教室工作证号;
教室:教室编号、层数、容纳人数、教室的空间位置;
系:系代号、系名、系办公室电话。

3.实体之间的联系
(1)每个学生只属于一个班级,每个班级属于一个系;每个教师只属于一个系;
(2)每个班级有一名班主任
(3)一名教师可以教授多门课程,一门课程可以有多个主讲老师
(4)一名同学可以选多门课程,一门课程可以被若干个学生选择、每门课有的学生人数有上限;
(5)一名同学选择的课程若已经学完,应该有相应的成绩;
(6)一间教室可以提供多门课程进行授课使用、一门课程只能在同一间教室开展教学。
二、概念设计
2.1 概念模型(E-R图)
(1)各实体E-R图
在这里插入图片描述

                        图2.1  学生实体E-R图

图2.2 教师实体E-R图
在这里插入图片描述

                   图2.3  班级实体E-R图

图2.4 系实体E-R图

在这里插入图片描述

图2.5 课程实体E-R图

在这里插入图片描述

图2.6 教室实体E-R图
在这里插入图片描述

图2.7 选课实体E-R图

在这里插入图片描述
在这里插入图片描述

                        图2.8  用户密码实体E-R图

(2)总体E-R图
在这里插入图片描述

                      图2.9 总体E-R图

2.2 数据字典
1)数据项
数据项是数据记录中最基本的、不可再分的有名数据单位,是具有独立含义的最小标识单位。数据项描述包含数据项名、数据项含义说明、别名、数据类型、长度、取值范围、与其他数据项的逻辑关系。本题目数据项如下表:
表2.1 数据项表
表名 序号 字段名 含义 数据类型及长度 约束控制 取值范围
Student
学生表 1 Sno 学生学号 Char(9) Primary key 000000000-999999999
2 Sname 学生姓名 Char(10) Not null
3 Ssex 性别 Char(2) Not null “男”、“女”
4 Sbirth 出生年月 Char(10) 可为null
5 ClassNo 班级号 Char(6) 可为null

Teacher
教师表 1 Tno 教师工号 Char(9) Primary
key 000000000-
999999999
2 Tname 教师姓名 Char(10) Not null
3 Ttit 教师职称 Char(10) 可为null
4 Ttel 联系电话 Char(11) 可为null 00000000000-99999999999
5 Dno 所属院系 Dno(6) 可为null

Course
课程表 1 Cno 课程号 Char(6) Primary
key 000001-99999
2 Cname 课程名 Char(20) 可为null
3 Credit 课程学分 Float 可为null
4 Cnum 课程容量 Int 可为null
5 Ctime 上课时间 Varchar(30) 可为null
6 Tno 教师工号 Char(9) Not null 000000000-999999999
7 Ctype 课程类别 Char(10) 可为null 基础必修、
专业选修、
专业选修
8 Croom 上课教室 Char(3) 可为null 000-999

ClassInfo
班级表 1 ClassNo 班级号 Char(6) Primary
Key 000000-999999
2 Dno 所属系 Char(6) 可为null
3 Tno 班主任工号 Char(9) 可为null

ClassRoom
教室信息表 1 Rno 教室编号 Char(3) Primary
key 000-999
2 Rce 教室层数 Int 可为null 1-9
3 Rcap 教室容量 int 可为null
4 Rlocation 空间位置 Char(30) 可为null
Department
系信息表 1 Dno 系代号 Char(6) Not null 000-999
2 Dname 系名 Char(20) 可为null
3 Dtel 系办公室电话 Char(11) 可为null

SC
选课表 1 Sno 选课学生学号 Char(9) Foreign key 000000000-999999999
2 Cno 课程号 char(6) Foreign
key
3 Grade 课程成绩 Int 可为null 0-100
4 Crank 成绩等级 Char(4) 可为null
5 CGPA 课程绩点 Numeric(4,2) 可为null
6 CRG 课程学分绩点 Numeric(4,2) 可为null
7 AVG_GPA 平均绩点 Numeric(5,2) 可为null
8 NUM_GPA 总课程学分绩点 Numeric(5,2) 可为null
User
用户密码表 1 Username 用户名 Char(9) 可为null
2 Passwrod 密码 Varchar(20) 可为null

2)数据结构
数据结构反应了数据之间的组合关系,一个数据结构可以由多个数据项组成,也可以由若干个数据结构组合。
表2.2 数据结构
数据结构 含义说明 组成数据项
学生信息 学生的个人信息、选课信息及其学业情况 学号、姓名、性别、出生年月、班级号、成绩、课程
教师信息 教师的个人信息及其授课情况 工作证号、姓名、职称、电话、系、课程号
课程信息 课程信息 课程号、课程名、学分、类别、时间、名额、上课教室、教师工作证号
班级信息 班级信息 班级号、所属系代号、班主任工作证号
教室信息 教室的信息 教室编号、层数、容量、空间位置
选课信息 学生选课的信息 学号、课程号、成绩、平均绩点
院系信息 系的信息 系代号、系名、系办公室主任

3)数据流
 功能模块
学生信息管理与成绩评价系统主要分为三个部分:管理员界面、教师界面、学生界面。
 管理员界面主要有5个模块:学生信息管理、教师信息管理、班级信息管理、课程信息管理、修改个人密码;
I. 学生信息管理
在这里插入图片描述

           图2.10  学生信息管理

II. 教师信息管理
在这里插入图片描述

             图2.11  教师信息管理

III. 班级信息管理
在这里插入图片描述

              图2.12 班级信息管理

IV. 课程信息管理
在这里插入图片描述

              图2.13  课程信息管理

 教师界面主要有4个模块:个人信息查询、查询学生信息、查询课程信息、修改个人密码;
 学生界面有7个模块:个人信息查询、个人课表查询、个人成绩查询、课程信息查询、院系信息查询、选课功能、修改个人密码.

总功能模块图
在这里插入图片描述

                      图2.14 功能模块图

表2.3 数据流
数据流 说明 数据流来源 数据流去向 组成
登录界面 用户用来登录系统的用户个人信息 学生、教师、管理员 用户信息认证 用户名、登录密码、权限
学生个人信息查询结果 学生点击查看个人信息得到的结果 查询个人信息 学生 学号、姓名、性别、出生年月、班级号
课程信息查询结果 学生查看开设课程信息得到的结果 查询课程信息 学生 课程号、课程名、学分、类别、时间、教师、名额、教师工号
学生个人课表查询结果 学生查看个人选课课表的结果 个人课表查询 退选或不退选 课程号、课程名、学分、类别、时间、教师、名额、教师工号
学生个人成绩查询结果 学生查看个人成绩后的结果 个人成绩查询 学生或打印 课程号、课程名、类别、学分、成绩、等级、课程绩点、学分绩点
院系信息查询结果 学生查看院系信息的结果 院系信息查询 学生 系代号、系名、系办公室电话
选课结果 学生查询开设课程并选课 学生选课 学生选课表 课程号、课程名、学分、类别、时间、教师、名额、教师工号
学生修改个人密码结果 学生修改个人密码的结果 修改个人密码 学生用户密码表 密码
教师查询个人信息结果 教师个人信息的查询结果 个人信息查询 教师 教师工号、姓名、职称、所属院系、联系电话
教师查询学生信息的结果 查询选修本人课程的学生名单、查看指定学生名单 查询学生信息 教师 学生学号、姓名、性别、出生年月、班级号
教师查询课程信息的结果 教师查询本人已开设课程的信息、查看所有课程信息的结果 查询课程信息 教师 课程号、课程名、学分、类别、时间、教师、名额、教师工号
教师成绩录入的结果 教师对已有的学生成绩的录入结果 成绩录入 选课表或学生 成绩
学生信息管理的结果 对学生信息表的增删改查操作的结果 学生信息管理(增加学生、修改、删除、查询学生信息) 教师、学生或管理员 学生学号、姓名、性别、出生年月、班级号
教师信息管理的结果 对教师信息表的查增删改操作的结果 教师信息管理(增加教师、修改、删除、查询教师信息) 教师或管理员 教师工号、姓名、职称、所属院系、联系电话
班级信息管理的结果 对班级信息表的查增删改操作的结果 班级信息管理(增加班级、修改、删除、查询班级信息) 管理员 班级号、系代号、班主任工作证号

 数据流图
数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中的流动和处理的过程,是一种功能模型。本系统的数据流图如图2.15所示。

图2.15 总数据流图
在这里插入图片描述

三、逻辑结构设计
3.1 关系模式
 学生(学号、姓名、性别、出生年月、班级号)
 教师(教师工作证号、姓名、职称、系代号、联系电话)
 课程(课程号、课程名、课程类别、学分、名额、授课教师工号、上课教室、上课时间)
 选课(学号、课程号、成绩、成绩等级、课程绩点、课程学分绩点、平均绩点)
 教室(教室编号、层数、容量、空间位置)
 班级(班级号、系代号、班主任工作证号)
 系(系代号、系名、系办公室电话)
 用户(用户名、密码)

3.2 系统结构图
在这里插入图片描述

                         图3.1 系统结构图

四、物理设计
4.1 存储安排
 学生基本表
表4.1 学生表物理设计表
字段名 数据类型 长度 取值范围 唯一性 说明
Sno Char 9 9位数字 唯一 主码
Sname Char 20 不唯一
Ssex Char 2 男、女 不唯一
Sbirth Char 10 XXXX.XX 不唯一
CLassNo Char 6 6位数字 不唯一 外码

图4.1 学生表的创建

 教师基本表
表4.2 教师表物理设计表
字段名 数据类型 长度 取值范围 唯一性 说明
Tno Char 9 9位数字 唯一 主码
Tname Char 20 不唯一
Ttit Char 10 讲师、副教授、教授 不唯一
Ttel Char 11 11位数字 唯一
Dno Char 6 6位数字 不唯一 外码

      图4.2 教师表的创建

 课程信息表
表4.3 课程信息表物理设计
字段名 数据类型 长度 取值范围 唯一性 说明
Cno Char 6 6位数字 唯一 主码
Cname Char 20 唯一
Credit float 0-10.0 不唯一
Cnum Int 不唯一
Ctime VarChar 50 不唯一
Ctype Char 10 基础必修、专业必修、专业选修 不唯一
Croom Char 3 3位数字 不唯一
Tno Char 9 9位数字 不唯一 外码

图4.3 课程信息表的创建
 班级信息表
表4.4 班级信息表物理设计
字段名 数据类型 长度 取值范围 唯一性 说明
ClassNo Char 6 6位数字 唯一 主码
Dno Char 6 6位数字 不唯一 外码
Tno Char 9 9位数字 不唯一 外码

      图4.4 班级信息表的创建

 教室信息表
表4.5 教室信息表物理设计
字段名 数据类型 长度 取值范围 唯一性 说明
Rno Char 3 3位数字 唯一 主码
Rce Int 不唯一
Rcap Int 不唯一
Rlocation Char 30 不唯一

图4.5 教室信息表的创建

 系信息表
表4.6 系信息表物理设计
字段名 数据类型 长度 取值范围 唯一性 说明
Dno Char 6 6位数字 唯一 主码
Dname Char 20 不唯一
Dtel Char 11 不唯一

图4.6 系信息表的创建
 选课表
表4.7 选课表物理设计
字段名 数据类型 长度 取值范围 唯一性 说明
Sno Char 9 9位数字 唯一 主码
Cno Char 6 6位数字 唯一 主码
Credit Char 44,2 0-10.0 不唯一
Ctype(类型) Char 10 基础必修、专业必修、专业选修 不唯一
Crank(等级) Char 4 不唯一
CGPA(课程绩点) Numeric(4,2) 不唯一
CRG(课程学分绩点) Numeric(4,2) 不唯一
NUM_GPA(总课程学分绩点) Numeric(5,2) 不唯一
AVG_GPA(平均学分绩点) Numeric(5,4) 不唯一
Tno Char 9 9位数字 不唯一 外码

图4.7 选课信息表的创建
 用户信息表
表4.8 用户信息表物理设计
字段名 数据类型 长度 取值范围 唯一性 说明
Username Char 9 唯一 主码
Password VarChar 35 不唯一

图4.8 用户信息表的创建

4.2 方法选择
数据库存取方法的选择:B+树索引存取方法
本系统中,学生表中的学号,教师表中的教师工作证号,课程信息表中的课程号,选课表中的学号、课程号,班级信息表中的班级号,系信息表中的系代号在查询条件中经常出现,则考虑在相应的关系表中的主码上建立唯一索引或组合索引。
CREATE UNIQUE INDEX Stu_sno ON Student(Sno);
CREATE UNIQUE INDEX Cou_cno ON Course(Cno);
CREATE UNIQUE INDEX Tea_tno ON Teacher(Tno);
CREATE UNIQUE INDEX Class_no ON ClassInfo(ClassNo);
CREATE UNIQUE INDEX Dept_dno ON Department(Dno);
CREATE UNIQUE INDEX SCno ON SC(Sno,Cno);

五、系统实施
5.1 装入数据
 学生信息表的插入

 教师信息表的插入

 班级信息的录入

 课程信息的录入

 院系信息的录入

 学生用户信息的录入

 教师用户信息的录入

5.2 编写代码
2.1、登录界面(关键代码)
private void button1_Click(object sender, EventArgs e) //登录按钮
{
UserName.User_name = textBox1.Text;
string Username = this.textBox1.Text;
string password = this.textBox2.Text;

        if (Username.Equals("") || password.Equals(""))//用户名或密码为空
        {
            MessageBox.Show("用户名或密码不能为空!","提示");
        }
        else if (radioButton3.Checked == true)   //若登录用户为管理员
        {              
            string sql = "Select * from User_Admin where Username='" + Username + "' and Password='" + password + "'";               
            Zon zon = new Zon();  //数据库操作类
            zon.command(sql);
            IDataReader dr = zon.Read(sql);
            if (dr.Read())
            {                          
                MessageBox.Show("登录成功!", "提示",MessageBoxButtons.OK);
                F2_Admin f = new F2_Admin();
                f.ShowDialog();
                this.Hide();
                dr.Close();
            }
            else
            {
                MessageBox.Show("用户名或密码错误!", "提示",MessageBoxButtons.OK);
                return;
            }
        }     

2.2、学生信息管理(关键代码)
private void button1_Click(object sender, EventArgs e) /查询所有学生信息/
{
SqlConnection conn = new SqlConnection(str);
string sql = “select * from Student”;
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
sda.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.Columns[0].HeaderText = “学号”;
dataGridView1.Columns[1].HeaderText = “姓名”;
dataGridView1.Columns[2].HeaderText = “性别”;
dataGridView1.Columns[3].HeaderText = “出生年月”;
dataGridView1.Columns[4].HeaderText = “班级”;
conn.Close();
}
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) /右击删除学生信息/
{
int row = this.dataGridView1.CurrentRow.Index;
string sno = dataGridView1.SelectedCells[0].Value.ToString();
string sname = dataGridView1.SelectedCells[1].Value.ToString();
this.dataGridView1.Rows.Remove(this.dataGridView1.Rows[row]);
string sql = “delete from Student where Sno=’” + sno + “‘and Sname=’” + sname + “’”;
Zon zon = new Zon();
zon.Excute(sql);
}
2.3、教师信息管理(关键代码)
private void button5_Click(object sender, EventArgs e) /根据教师工号修改教师信息/
{
SqlConnection conn = new SqlConnection(str);
String Update_by_tno = textBox4.Text.Trim();
String Item_name = comboBox1.SelectedItem.ToString();
String Update_item = textBox3.Text.Trim();
int flag1 = 0; //该变量表示组合框是否选中项
int flag2 = 0; //该变量表示是否修改成功
try
{
conn.Open();
String Update_str = "UPDATE Teacher SET “;
switch (Item_name)
{
case “Tname”:
{
Update_str += “Tname = '” + Update_item + “’”;
break;
}
case “Ttit”:
{
Update_str += “Ttit = '” + Update_item + “’”;
break;
}
case “Ttel”:
{
Update_str += “Ttel = '” + Update_item + “’”;
break;
}
case “Dno”:
{
Update_str += “Dno = '” + Update_item + “’”;
break;
}
default:
{
flag1 = 1;
MessageBox.Show(“请选择你要修改的项!”, “Tips”, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
break;
}
}
if (flag1 == 0)
{
Update_str += " Where Tno = '” + Update_by_tno + “’”;
SqlCommand cmd = new SqlCommand(Update_str, conn);
cmd.ExecuteNonQuery();
conn.Close();

            }
        }
        catch
        {
            flag2 = 1;
            MessageBox.Show("输入数据有误,请输入有效数据!", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {                
            conn.Close(); 
        }
        if (flag2 == 0)
        {
            MessageBox.Show("修改成功!", "Tips", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            textBox3.Text = null;
            textBox4.Text = null;
            comboBox1.Text = null;
        }
    }

2.4 课程信息管理(关键代码)
private void button1_Click(object sender, EventArgs e) /添加课程信息/
{
string CNO = textBox1.Text;
string CName = textBox2.Text;
string CRedit = textBox3.Text;
string CNum = textBox4.Text;
string CTime = textBox5.Text;
string TNo= textBox6.Text;
string CType = comboBox1.Text;
String CRoom = textBox8.Text;

        if (string.IsNullOrEmpty(CNO) && string.IsNullOrEmpty(CName))
        {
            MessageBox.Show("请输入课程号和课程名!", "添加提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
        try
        {              
     string sql = "Insert into Course(Cno,Cname,Credit,Cnum,Ctime,Tno,Ctype,Croom)values('" + CNO + "','" + CName + "','" + CRedit + "','" + CNum + "','" + CTime + "','" + TNo + "','" + CType + "','" + CRoom + "')";
     string sql1 = "select *from Course Where Cno='" + CNO + "' and Tno='" + TNo + "'";
            Zon zon = new Zon();
            zon.command(sql1);
            IDataReader dr = zon.Read(sql1);
            if (dr.Read())
            {
                MessageBox.Show("该课程已经存在,请勿重复添加!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                dr.Close();
                zon.command(sql);
                int i = zon.Excute(sql);
                if(i>0)
                {
                    MessageBox.Show("添加课程成功!", "提示");
                    textBox1.Text = null;
                    textBox2.Text = null;
                    textBox3.Text = null;
                    textBox4.Text = null;
                    textBox5.Text = null;
                    textBox6.Text = null;
                    comboBox1.Text = null;
                    textBox8.Text = null;
                }
            }                                  
        }
        catch (Exception ex)
        {
            MessageBox.Show("出现错误!" + ex.Message);
        }
        finally
        {     
        }
    }  

以上为部分源码。

Logo

更多推荐