基于 web教学管理系统设计与实现

devtools/2024/10/22 10:37:12/

3  总体设计

3.1  系统软件体系结构

系统采用B/S结构,统一管理数据库和Web服务器。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构,第一层是客户端(用户界面),提供用户与系统的友好访问;第二层是应用服务器,负责业务逻辑的实现;第三层是数据服务器,负责数据信息的存储、访问及其优化。由于业务逻辑被提取到应用服务器,大大降低了客户端负担,因此也成为瘦客户结构,其系统软件体系结构示意图如图3.1所示:

图3.1 软件结构体系图

 3.2  系统功能需求描述

本教学管理系统包含许多工作流程,围绕教学管理内容,分为学生核心,教师核心和课程核心,相互交织,共同构成学校教学管理的日常工作。以学生为核心的工作包括成绩管理,学籍管理等模块,以教师为核心的工作包括任课安排,教学评估等模块,以课程为核心的工作包括课程管理,排课等模块。

3.3  系统功能结构图

        

图3.2 系统功能结构图

3.4  数据库设计

数据库技术是当今信息时代赖以发展的重要基础技术之一,也是发展较快的计算机技术的重要分支。较好地理解数据库设计原理对于设计出性能高效的数据库系统是很重要的。

数据库技术是计算机软件领域的一个重要分支,已形成相当规模的理论体系和实用技术。它的出现使得计算机应用渗透到工农业生产、商业、行政、科学研究、工程技术和国防军事的各个部门,渗透到社会的每一角落,并正改变着人们的工作方式与生活方式。管理信息系统、办公自动化系统、决策支持系统、智能系统等都是使用了数据库技术的计算机应用系统。数据库已经成为信息高速公路的核心部分

B/S结构的教务管理系统,是一个数据库应用系统,许多信息都是保存在数据库中。在数据库应用系统的开发过程中,数据库的结构设计是一个很重要的问题。我们这里所说的数据库结构设计是指各个表结构的设计,包括信息保存在哪些表格中,各个表的结构如何,以及各个表之间的关系。

数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响,好的数据库结构设计会减少数据库的存储量,数据的完整性和一致性比较高,系统具有较快的响应速度,简化基于此数据库的应用程序的实现等等。

3.4.1  数据库概念结构设计

根据系统功能,设计出如下的ER图,来表示数据库概念结构:

图3.3 学生管理的ER图

图3.4 教师管理的ER图

图5.5 成绩课程管理ER图

3.4.2  数据库逻辑结构设计

根据上面的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

其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者


http://www.ppmy.cn/devtools/104670.html

相关文章

Java框架myBatis(三)

一、特殊符号转义 特殊符号处理 在mybatis中的xml文件中&#xff0c;存在一些特殊的符号&#xff0c;比如&#xff1a;、"、&、<> 等&#xff0c;正常书写mybatis会报错&#xff0c;需要对这些符号进行转义。 具体转义如下所示&#xff1a; 特殊字符 转义字符…

关于几道计算机网络题的解答

2017年12月28日&#xff0c;星期四&#xff0c; 照片上的第一题中多项式的指数看不清&#xff0c;但没关系&#xff0c;就现在的情形&#xff0c;说一下大概的思路&#xff0c;参考着再结合题目中实际的参数&#xff0c;再套一遍就能把题目解出来了&#xff0c; 假设&#xf…

Java算法之堆排序(Heap Sort)

堆排序简介 堆排序是一种基于比较的排序算法&#xff0c;它使用二叉堆数据结构来实现。二叉堆是一种特殊的完全二叉树&#xff0c;其中每个父节点的键值都大于&#xff08;或等于&#xff09;其子节点的键值&#xff08;大顶堆&#xff09;&#xff0c;或者小于&#xff08;或…

Qt: QComboBox

示例1&#xff1a;隐藏某一个下拉选项&#xff0c;并不改变索引序号 //QComboBox::view() 方法返回的是 QListView 类型的指针&#xff0c;表示 QComboBox 中下拉列表的视图部分。 QListView* listView static_cast<QListView*>(ui->combo_box_initial_guess->vi…

从自动驾驶看无人驾驶叉车的技术落地和应用

摘 要 &#xff5c; 介绍无人驾驶叉车在自动驾驶技术中的应用&#xff0c;分析其关键技术&#xff0c;如环境感知、定位、路径规划等&#xff0c;并讨论机器学习算法和强化学习算法的应用以提高无人叉车的运行效率和准确性。无人叉车在封闭结构化环境、机器学习、有效数据集等方…

在使用React Hooks中,如何避免状态更新时的性能问题?

在React Hooks中避免状态更新时的性能问题&#xff0c;可以采取以下一些最佳实践&#xff1a; 避免不必要的状态更新&#xff1a; 使用React.memo、useMemo、和useCallback来避免组件或其子组件进行不必要的渲染。 使用useMemo&#xff1a; 对于基于状态或props的复杂计算&…

单片机内存区域划分

目录 一、C 语言内存分区1、栈区2、堆区3、全局区&#xff08;静态区&#xff09;4、常量区5、代码区6、总结 二、单片机存储分配1、存储器1.1 RAM1.2 ROM1.3 Flash Memory1.4 不同数据的存放位置 2、程序占用内存大小 一、C 语言内存分区 C 语言在内存中一共分为如下几个区域…

【ceph学习】ceph如何进行数据的读写(2)

本章摘要 上文说到&#xff0c;librados/IoctxImpl.cc中调用objecter_op和objecter的op_submit函数&#xff0c;进行op请求的封装、加参和提交。 本文详细介绍相关函数的调用。 osdc中的操作 初始化Op对象&#xff0c;提交请求 设置Op对象的时间&#xff0c;oid&#xff0c…