# 高校教学管理系统
## 一、前言
教学管理系统对于学校的决策者和管理者来说都至关重要,所以应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据 ,这对于查找、更新和维护都带来了不少的困难。
教学管理系统主要提供成绩查询和更新平台,学生可以通过该系统查询到自己各科目的学习成绩以及学籍信息等。利用该系统,教师可以清晰全面地了解学生的学习情况和档案,对系统的不同部分设置各自不同的权限。可以最大限度的利用计算机的各种优势,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等,又可以利用计算机系统对数据的处理能力,方便分析和数据规整。
1、**项目背景**:数据库原理课程设计
2、**编写目的**:掌握数据库设计原理及相关软件的使用
3、**软件定义**:高校教学管理系统
4、**开发环境**:Visual Studio 2017,SQL Server Management Studio2008。
## 二、系统设计
### (一)系统功能设计
教师模块 教师模块是用来管理教师的信息,其中包含教授的管理信息,对管理教师的一些信息有作用,用来对教师进行记录和分配。在网上的信息查询中,教师的系统有着更多的功能,可以浏览学生的一些信息和成绩更正,对学生进行管理以及对学校的一些信息的浏览。
学生模块 学生模块是用来管理学生的信息,可以将其中分为两个模块,一个是学籍管理模块,一个是课程管理模块,这个模块可以对学生的成绩进行查询和对课程的查询,对学生进行统一的管理,在网上可以通过此模块对一些信息进行确定和接受一些的学校的信息,对此可以进行一些必要的操作。
### (二)系统功能模块设计
## 三、数据库设计
### (一)需求分析
教学管理是所有高校都应具备的最基本的管理功能。高校教学管理系统可实现高等院校的简单教学管理,包括学生人学登记、学生选课、教师登记考试成绩、补考处理、学生成绩统计、教师教学工作量统计,可随时查询院系、教师、学生、课程、选课、成绩等情况。
### (二)概念结构设计
#### (1)将各个实体转换为关系模式:
学院(编号、院系名、负责人)
教师(工号、姓名、性别、所属院系、职称、年龄、 出生年月、基本工资)
学生(学号、姓名、性别、年龄、所属院系)
课程(课程代号、课程名、课时数、课程类型、学分)
#### (2)实体间的联系做以下处理:
1、学院与学生间的1:n 属于联系:与学生关系模式合并,将学院号加入学生关系
学生(学号、姓名、性别、年龄、所属院系,学院编号)
2、学院与教师间的1:n 属于联系:与教师关系模式合并,将学院号加入教师生关系
教师(工号、姓名、性别、所属院系、职称、年龄、 出生年月、基本工资,学院编号)
3、课程与教师间的1:1 负责联系:与课程关系模式合并,将教师工号加入课程关系
课程(课程代号、课程名、课时数、课程类型、学分,负责教师工号)
4、课程与教师间的m:n 参与联系,转换成一个独立的关系模式:
教师参与课程(课程号,参与教师工号)
#### (3)该ER图转换成以下关系模式:
学院(编号、院系名、负责人)
学生(学号、姓名、性别、年龄、所属院系,学院编号)
教师(工号、姓名、性别、所属院系、职称、年龄、 出生年月、基本工资,学院编号)
课程(课程代号、课程名、课时数、课程类型、学分,负责教师工号)
教师参与课程(课程代号,参与教师工号)
## 四、数据库实现
数据库由以下表组成:
Student:学生信息表
Teacher:教职工信息表
Depart : 系信息表
Class :课程信息表
Sc : 选课信息表
Tc : 教师课程表
```sql
create table depart
(
dno char(3),
dname char(20),
principal char(20)
)
create table student
(
sno char(12) primary key,
sname char(20) not null,
ssex char(2),
sage int,
sdept char(20)
)
create table teacher
(
tno char(3) primary key,
tname char(20) not null,
tsex char(2),
tdept char(20),
title char(20),
tage int,
tbirthday date,
wage int
)
create table class
(
cno char(3) primary key,
cname char(20) not null,
chours int,
ctype char(20),
credit float
)
create table sc
(
sno char(12),
cno char(3),
grade int,
primary key(sno,cno),
foreign key(sno) references student(sno),
foreign key(cno) references class(cno)
)
create table tc
(
tno char(12),
cno char(3),
chours smallint,
primary key(tno,cno),
foreign key(tno) references teacher(sno),
foreign key(cno) references class(cno)
)
create view t_workload_view
as
select tno,SUM(chours) as t_workload
from tc
group by tno
```
## 五、系统实现
### (一)查询函数
```csharp
//查询,返回DataTable
public DataTable QuerySQL(string sql)
{
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = @"server=DESKTOP-5T68OT4\SQLEXPRESS;database=jxgl;integrated security=true";
conn.Open();
using (SqlCommand command = conn.CreateCommand())
{
command.CommandText = sql;
SqlDataAdapter da = new SqlDataAdapter(command);
try
{
da.Fill(ds);
}
catch
{
}
}
}
DataTable dt = new DataTable();
try
{
dt = ds.Tables[0].Copy();
}
catch
{
}
return dt;
}
```
### (二)修改函数
```csharp
//修改数据
public void AlterSQL(string sql)
{
// 连接数据库
SqlConnection conn = new SqlConnection();
conn.ConnectionString = @"server=DESKTOP-5T68OT4\SQLEXPRESS;database=jxgl;integrated security=true";
conn.Open();
//将数据存入数据库
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
//断开连接,释放资源
conn.Close();
}
```
### (三)学分统计
```csharp
string sql3 = string.Format("select SUM(credit) from class where cno in (select cno from sc where sno = '{0}' and grade >= 60)",Program.loginId);
dt3 = linkSql.QuerySQL(sql3);
int loginCredit = 0;
try
{
loginCredit = Convert.ToInt32(dt3.Rows[0][0].ToString());
}
catch
{
}
label1.Text = string.Format("您已选修学分为{0}学分,最高可选修120学分", loginCredit);
//如果学分大于120,则不能选课
if(loginCredit > 120)
{
//将复选框关闭
listView1.CheckBoxes = false;
}
```
### (四)选课人数统计
```csharp
string sql4 = "select sc.cno,count(distinct sno) as snoCount,count(distinct tno) as tnoCount from sc,tc where sc.cno = tc.cno group by sc.cno";
dt4 = linkSql.QuerySQL(sql4);
foreach(DataRow dr in dt4.Rows)
{
//选课人数小于教师数*15,不开课
if (Convert.ToInt32(dr["snoCount"].ToString()) < 15 * Convert.ToInt32(dr["tnoCount"].ToString()))
{
Program.startClass = false;
}
//选课人数大于教师数*50,无法选课
else if (Convert.ToInt32(dr["snoCount"].ToString()) > 50 * Convert.ToInt32(dr["tnoCount"].ToString()))
{
cnoList.Add(dr["cno"].ToString()); //记录下课程号
}
//正常选课,开课
else
{
Program.startClass = true;
}
}
```
![在这里插入图片描�