3 总体设计
3.1 系统软件体系结构
系统采用B/S结构,统一管理数据库和Web服务器。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构,第一层是客户端(用户界面),提供用户与系统的友好访问;第二层是应用服务器,负责业务逻辑的实现;第三层是数据服务器,负责数据信息的存储、访问及其优化。由于业务逻辑被提取到应用服务器,大大降低了客户端负担,因此也成为瘦客户结构,其系统软件体系结构示意图如图3.1所示:
图3.1 软件结构体系图
3.2 系统功能需求描述
本教学管理系统包含许多工作流程,围绕教学管理内容,分为学生核心,教师核心和课程核心,相互交织,共同构成学校教学管理的日常工作。以学生为核心的工作包括成绩管理,学籍管理等模块,以教师为核心的工作包括任课安排,教学评估等模块,以课程为核心的工作包括课程管理,排课等模块。
3.3 系统功能结构图
图3.2 系统功能结构图
3.4 数据库设计
数据库技术是当今信息时代赖以发展的重要基础技术之一,也是发展较快的计算机技术的重要分支。较好地理解数据库设计原理对于设计出性能高效的数据库系统是很重要的。
数据库技术是计算机软件领域的一个重要分支,已形成相当规模的理论体系和实用技术。它的出现使得计算机应用渗透到工农业生产、商业、行政、科学研究、工程技术和国防军事的各个部门,渗透到社会的每一角落,并正改变着人们的工作方式与生活方式。管理信息系统、办公自动化系统、决策支持系统、智能系统等都是使用了数据库技术的计算机应用系统。数据库已经成为信息高速公路的核心部分
。
B/S结构的教务管理系统,是一个数据库应用系统,许多信息都是保存在数据库中。在数据库应用系统的开发过程中,数据库的结构设计是一个很重要的问题。我们这里所说的数据库结构设计是指各个表结构的设计,包括信息保存在哪些表格中,各个表的结构如何,以及各个表之间的关系。
数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响,好的数据库结构设计会减少数据库的存储量,数据的完整性和一致性比较高,系统具有较快的响应速度,简化基于此数据库的应用程序的实现等等。
根据系统功能,设计出如下的ER图,来表示数据库概念结构:
图3.3 学生管理的ER图
图3.4 教师管理的ER图
图5.5 成绩课程管理ER图
根据上面的ER图,转化为关系模式如下:
1)
表3.1 学生表
字段名称 | 类型 | 长度 | 说明 |
stuID | Varchar | 50 | 学生编号 |
stuname | Varchar | 50 | 学生姓名 |
Sex | Char | 10 | 性别 |
Address | Varchar | 50 | 籍贯 |
Bir | Datetime | 8 | 生日 |
Password | Varchar | 50 | 登录密码 |
gradeID | Varchar | 50 | 入学时间 |
Specialty | Varchar | 50 | 所属专业 |
politicalappearance | varchar | 50 | 政治面貌 |
2)
表3.2 教师表
字段名称 | 类型 | 长度 | 说明 |
teacherID | Varchar | 50 | 教师编号 |
teachername | Varchar | 50 | 教师姓名 |
Sex | Char | 10 | 性别 |
Address | Varchar | 50 | 地址 |
Bir | Datetime | 8 | 生日 |
Password | Varchar | 50 | 登录密码 |
workyear | Varchar | 50 | 工作时间 |
Specialty | Varchar | 50 | 所教专业 |
politicalappearance | varchar | 50 | 政治面貌 |
3)
表3.3 系部表
字段名称 | 类型 | 长度 | 说明 |
departmentID | Varchar | 50 | 院系编号 |
departmentname | Varchar | 50 | 院系名称 |
telephone | varchar | 50 | 电话 |
4)
表3.4 专业表
字段名称 | 类型 | 长度 | 说明 |
specialtyID | Varchar | 50 | 专业编号 |
specialtyname | Varchar | 50 | 专业名称 |
departmentID | Varchar | 50 | 所在院系 |
表3.5 课程表
字段名称 | 类型 | 长度 | 说明 |
courseID | Varchar | 50 | 课程编号 |
coursename | Varchar | 50 | 课程名称 |
style | varchar | 50 | 课程类型 |
examstyle | Varchar | 50 | 考试类型 |
xueshi | Int | 4 | 学时 |
xuefen | int | 4 | 学分 |
表3.6 成绩表
字段名称 | 类型 | 长度 | 说明 |
stuID | Varchar | 50 | 学好 |
courseID | Varchar | 50 | 课程编号 |
teacherID | varchar | 50 | 教师编号 |
term | Varchar | 50 | 学期 |
score | Int | 4 | 所得学时 |
xuefen | int | 4 | 所得学分 |
表3.7 课表
字段名称 | 类型 | 长度 | 说明 |
teacherID | Varchar | 50 | 教师编号 |
ClassID | Varchar | 50 | 班级编号 |
courseID | varchar | 50 | 课程编号 |
classroomID | Varchar | 50 | 教室编号 |
term | varchar | 50 | 学期 |
keshi | int | 4 | 课时 |
表3.8 教室表
字段名称 | 类型 | 长度 | 说明 |
classroomID | Varchar | 50 | 教室编号 |
style | Varchar | 50 | 类型 |
studentsum | int | 4 | 容纳人数 |
address | Varchar | 50 | 地址 |
spare | char | 10 | 是否空闲 |
4 详细设计与实现
4.1 登录界面的设计与实现
1.系统登录界面供三种权限的用户登录:管理员,教师,学生。管理员在输入自己帐号和密码之后进入系统,可对整个教务业务进行操作,待教学计划和排课都完成后,教师输入自己的名称和密码,可进去查询相关信息;同样,学生根据自身的权限,可进入系统查询相关信息。
2. 程序流程图如下:
图4.1 登陆界面的流程图
3. 管理员选择“管理员”权限后,输入自己帐号和密码后点击“登录”,即可进入管理院界面。页面后台事件处理程序为:
protected void login_Click(object sender, EventArgs e)
{
string st_connstr = ConfigurationManager.ConnectionStrings["st_dbconn"].ToString();
SqlConnection st_conn = new SqlConnection(st_connstr);
string type = usertype.SelectedItem.Value.ToString();
string user = userID.Text.Trim();
string inputkey = txtkey.Text.Trim();
string key = "";
string sql = "";
DataSet ds;
ql = "select password from login where username like '" + user + "'";
st_conn.Open();
SqlDataAdapter st_da = new SqlDataAdapter(sql, st_conn);
ds = new DataSet();
int count = st_da.Fill(ds, "table");
if (Convert.ToInt32(Label1.Text) < 3)
{
if (count > 0)
{ Session["teacherID"] = user; Session["password"] = inputkey; Session["type"] = type; Response.Redirect("Default3.aspx"); }
else
{ Label2.Text = "登陆失败"; Label2.Style["color"] = "red"; int times = Convert.ToInt32(Label1.Text); Label1.Text = (times + 1).ToString(); }
}
else { Label2.Text = "您已经被禁止登陆,请稍候再登陆"; }
}
4. 登陆页面为Default.aspx,如下:
图4.2 系统登陆界面Default.aspx
教师选择“教师”权限后,输入自己帐号和密码后点击“登录”,即可进入教师界面。同样,学生也是如此。教师和学生登陆后台处理程序,与管理员相似,不再重复。
4.2 学生管理子系统的设计与实现
4.2.1 学生查询自己信息页面的设计与实现
1. 学生进入系统后,即可查看自己的基本信息。本页面使用了Repeater控件,并与数据库绑定,借助表格展现出来。
2. 核心代码如下:
<asp:Repeater ID="st_rp_information" runat="server">
<ItemTemplate>
<table border="1" width="80%">
<tr>
<td colspan="4" align="center"> 个人信息</td>
</tr>
<tr><td align="right">学号: </td>
<td><%#Eval("stuID")%></td>
<td align="right">姓名: </td>
<td><%#Eval("stuname")%></td>
</tr>
<tr><td align="right">性别: </td>
<td><%#Eval("sex")%></td>
<td align="right">生日: </td>
<td><%#Eval("bir")%></td>
</tr>
<tr><td align="right">籍贯: </td>
<td><%#Eval("address")%></td>
<td align="right">入学时间: </td>
<td><%#Eval("gradeID")%></td>
</tr>
<tr><td align="right">专业: </td>
<td><%#Eval("specialty")%></td>
<td align="right">学院: </td>
<td><%#Eval("department")%></td>
</tr>
<tr><td align="right">班级: </td>
<td><%#Eval("classname")%></td>
<td align="right">政治面貌: </td>
<td><%#Eval("politicalappearance")%></td>
</asp:Repeater>
string st_connstr = ConfigurationManager.ConnectionStrings["st_dbconn"].ToString();
SqlConnection st_conn = new SqlConnection(st_connstr);
string st_sqlstr = "select * from student where stuID=@stuID";
SqlCommand st_comm = new SqlCommand(st_sqlstr, st_conn);
st_comm.Parameters.Add(new SqlParameter("@stuID", SqlDbType.VarChar, 50));
3. 页面如下:
图4.3 学生查询自己信息页面st_query.aspx
4.2.2 学生个人密码修改页面的设计与实现
1. 本页面使用了2个panel控件,一个完成验证用户旧密码,一个完成修改功能,并且2个panel不能同时出现。
2. 程序流程图如下:
图4.4 修改密码流程图
3. 核心代码如下:
protected void st_btn_upst_date_Click(object sender, EventArgs e)
{
string st_connstr = ConfigurationManager.ConnectionStrings["st_dbconn"].ToString();
SqlConnection st_conn = new SqlConnection(st_connstr); st_conn.Open();
string st_sqlstr = "select * from student where stuID='" + st_tbx_id.Text+ "' and password='" + mimabefore.Text + "'";
SqlCommand cmd = new SqlCommand(st_sqlstr, st_conn);
if (st_dr1.Read())
{
panel2.Visible = true;
panel1.Visible = false;
st_lbl_note.Text = "";
}
else
{ st_lbl_note.Text = "无此用户或密码不对!"; }
}
protected void st_tbx_ok_Click(object sender, EventArgs e)
{
string st_connstr = ConfigurationManager.ConnectionStrings["st_dbconn"].ToString();
SqlConnection st_conn = new SqlConnection(st_connstr); st_conn.Open();
string st_sqlstr = "update student set password='" + st_tbx_new.Text + "' where stuID='" + st_tbx_id.Text + "'";
SqlCommand cmd = new SqlCommand(st_sqlstr, st_conn);
try
{ cmd.ExecuteNonQuery(); st_lbl_note.Text = "修改成功!"; }
catch (SqlException)
{ st_lbl_note.Text = "修改有误!"; panel1.Visible = true; }
st_conn.Close();
}
4. 页面如下:
图4.5 学生个人密码修改页面mima_student.aspx
图4.6 学生个人密码修改页面mima_student.aspx
4.2.3 学生查询成绩页面设计与实现
1. 学生选择学期和课程名后,可查询自己本课程的成绩和所得学分,也可查询自己学期所有课程成绩。本页面使用GridView控件,与数据库绑定。
2. 核心代码如下:
protected void st_btn_query_Click(object sender, EventArgs e)
{
string st_sqlstr;
string st_connstr = ConfigurationManager.ConnectionStrings["st_dbconn"].ToString();
SqlConnection st_conn = new SqlConnection(st_connstr);
if (st_tbx_course.Text == "")
{
st_sqlstr= "select subject.coursename,score.courseID,score.term,score.score,score.xuefen,subject.style from subject,score where term='" +st_tbx_term.Text +"'and subject.courseID=score.courseID and score.stuID='" + Session["stuID"].ToString() + "'";
}
else
{
st_sqlstr = "select subject.coursename,score.courseID,score.term,score.score,score.xuefen,subject.style from subject,score where term='" + st_tbx_term.Text + "'and subject.courseID=score.courseID and subject.coursename='"+st_tbx_course.Text+"' and score.stuID='" + Session["stuID"].ToString() + "'";
}
st_conn.Open();
SqlDataAdapter st_da = new SqlDataAdapter(st_sqlstr, st_conn);
DataSet st_ds = new DataSet();
st_da.Fill(st_ds);
st_dtg_grade.DataSource = st_ds;
st_dtg_grade.DataBind();
st_conn.Close();
display();
}
3. 页面如下:
图4.7 学生查询成绩页面st_grade_query.aspx
其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者