ASP.NET基于WEB的选课系统

news2024/12/24 20:35:37

摘要

设计本系统的目的是对选课信息进行管理。学生选课系统维护模块主要完成的是系统管理与维护功能。课题研究过程中,首先对系统管理模块进行了详尽的需求分析,经分析得到系统管理模块主要完成如下的功能:用户基本信息、选课信息的录入,查看,修改,删除等,同时还具有查询各个模块的功能,数据备份,数据还原 ,注销等功能。系统管理模块是整个系统的指挥中心,保证整个系统在校园网上安全有效地运作。之后根据需求提出了系统管理模块的总体设计方案,并据此进行了详细设计和编码实现。系统使用B/S结构设计和开发,系统的编码实现基于VS.NET平台,使用ASP.NET作为开发语言,SQL Server 2000作为数据库。代码中通过使用进程中的Session、尽量使用存储过程和尽量减少数据库连接的打开时间等手段来提高性能。

关键词:选课系统,系统管理,ASP .NET

1.2 关键技术介绍

1.2.1 ASP.NET简介

.NET框架(.NET Framework)主要有以下3部分组成:

        公共语言运行库(Common Language Runtime,CLR)

        基础库类(Base Class Libarary)

        ASP.NET、VB.NET、C#等语言运行库

ASP.NET的功能和特点:

ASP.NET是.NET框架中专门用来开发网上应用程序的,它其实不是一种语言,而更像一个框架,在这个框架下可以采用VB.NET,C#等其他.NET语言开发网上程序。

1.2.2 SQL Server

SQL Server 是一个具备完全 Web 支持的数据库产品,提供了对可扩展标记语言 (XML) 的核心支持以及在 Internet 上和防火墙外进行查询的能力,提供了以 Web 标准为基础的扩展数据库编程功能。丰富的 XML Internet 标准支持允许使用内置的存储过程以 XML 格式轻松存储和检索数据。

1.2.3 ADO.NET简介

ADO.NET是为.NET框架而创建的,提供对Microsoft SQL Server、Oracle的数据源以及通过OLEDB和XML公开的数据的一致访问。数据共享使用者应用程序可以使用 ADO.NET 来连接到这些数据源,并检索、操作和更新数据。

在连接环境下,整个数据存取的步骤如下:

        (1) 用SqlConnection对象和数据库开启连接。

        (2) 用SqlCommand对象向数据索取所要的数据。

        (3) 把取回来的数据,放在SqlDataReader对象中读取,或者是做其他的存取。

        (4) 在对数据库的存取、查询等操作做完后,关闭SqlDataReader对象。

        (5) 关闭SqlConnection对象。

连接环境下的数据库存取作业,从开始到结束,客户端与服务器端都是保持在联机的状态。

1.2.4 HTML

HTML的英文全称是"Hypertext Markup Language",中文译为“超文本标记语言”。“超文本”就是指页面内可以包含图片,联接,甚至音乐,程序等非文字的元素。在几年前作为SGML的一个子集开发的。一个HTML文件中包含了所有将显示在网页上的文字信息,其中也包括对浏览器的一些指示,如哪些文字应放置在何处,显示模式是什么样的等。如果你还有一些图片、动画、声音或是任何其它形式的资源,HTML文件也会告诉浏览器到哪里去查找这些资源,以及这些资源将放置在网页的什么位置。浏览的网页就是由HTML语言编写出来的。虽然HTML是一种语言,但HTML不是程序语言,如 C++ 和 Java 之类,它只是标示语言,你只要明白了各种标记的用法便算学会了HTML的格式非常简单,只是由文字及标记组合而成,因此任何文本编辑器都可以制作HTML页面。

1.2.5 Script

脚本语言现在流行的主要是JavaScript和VBScript,下面简单介绍一下这两种语言:

JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,有了JavaScript,可使网页变得生动。使用它的目的是与HTML超文本标识语言、Java 脚本语言一起实现在一个网页中链接多个对象,与网络客户交互作用,从而可以开发客户端的应用程序。它是通过嵌入或调入在标准的HTML语言中实现的。

VBScript的全称是:Microsoft Visual Basic Script Editon.(微软公司可视化BASIC脚本版). 正如其字面所透露的信息, VBS(VBScript的进一步简写)是基于Visual Basic的脚本语言. 我进一步解释一下, Microsoft Visual Basic是微软公司出品的一套可视化编程工具, 语法基于Basic脚本语言, 就是不编译成二进制文件, 直接由宿主(host)解释源代码并执行, 简单点说就是你写的程序不需要编译成.exe, 而是直接给用户发送.vbs的源程序, 用户就能执行了. 

4.1 系统实现

4.1.1 系统主界面

登录界面如图4.1所示。      

                                                               图 4.1 主界面

主界面main.aspx的主要设计如下

插入两行两列的表,将第一行单元格合并,分别在上、左、右单元格中加入Panel控件,分别设置ID为p3,pl,pr。在page_load中添加代码:

    P3.Controls.Add(Page.LoadControl("header.ascx")) '加载图片控件

    Pl.Controls.Add(Page.LoadControl("menu1.ascx")) '加载左侧菜单

    Pr.Controls.Add(Page.LoadControl("js.ascx")) '初始时加载简介信息

        If Request.QueryString("type") = "0" Then '学生登录

            Pr.Controls.Clear()

            Pr.Controls.Add(Page.LoadControl("login.ascx"))

            Exit Sub

        End If

        If Request.QueryString("type") = "1" Then '教师登录

            Pr.Controls.Clear()

            Pr.Controls.Add(Page.LoadControl("login.ascx"))

            Exit Sub

        End If

        If Request.QueryString("type") = "2" Then '管理登录

            Pr.Controls.Clear()

            Pr.Controls.Add(Page.LoadControl("login.ascx"))

            Exit Sub

        End If

header.ascx为一图片控件, menu1.ascx为用户登录菜单,添加3个LinkButton控件,分学生、教师、管理员身份, js.ascx为登录介绍。

在menu1.ascx中学生的LinkButton_Click中添加代码

         Response.Redirect("main.aspx?type=0")

在menu1.ascx中教师的LinkButton_Click中添加代码

         Response.Redirect("main.aspx?type=1")

在menu1.ascx中管理员的LinkButton_Click中添加代码

         Response.Redirect("main.aspx?type=2")

4.1.2 登录功能

当点击不同的用户后,进入同一登录界面,通过识别不同的标识,即type值的不同而进入不同的用户界面。在登录页面对应的地方输入用户名、密码,确认后登录。调用存储过程login,根据编号、密码、type值的不同来判断用户身份。登录界面如图4.2所示。

                                                        图 4.2  登录界面

Login.ascx中的设计如下:

确定按扭中添加代码:

   Dim s As String

        If Request.QueryString("reboot") = "1" Then

            s = Session("type")

        Else

            s = Request.QueryString("type")

        End If

        Dim db As New dbaccess

        db.para.Add("@user", bianhao.Text.Trim)

        db.para.Add("@pwd", pwd.Text.Trim)

        db.para.Add("@type", s)

        db.runproc("login")

        If db.retok Then

            Session("user") = bianhao.Text.Trim

            Session("type") = s

            Select Case s

                Case "0"

                    Response.Redirect("student.aspx")

                Case "1"

                    Response.Redirect("teacher.aspx")

                Case "2"

                    Response.Redirect("admin.aspx")

            End Select

        Else

            Response.Redirect("登陆错误.aspx")

        End If

重置按扭中添加代码:

        bianhao.Text = ""

pwd.Text = ""

4.1.3 学生模块功能   

当点击学生后,通过输入学号和密码进入学生登录界面,右边的表格中列出登录者的相关信息,如输入错误跳转到登陆错误界面。教师、管理员的也相同。学生、教师登录成功后都可重新登陆、修改密码、查询相关内容和退出系统等功能。登录界面如图4.3所示。

                                                        图 4.3  学生登录成功界面

1)重新登陆会跳转到Login.ascx的界面。

2)退出系统中代码如下:

      Session.Abandon()'清空会话信息

       Response.Redirect("main.aspx")

为了安全,退出后注销用户的Session信息,跳转到主界面。

3)修改密码中代码如下:

If  pwd2.Text.Trim <> pwd3.Text.Trim Then

Response.Write("<script> alert('两次输入的密码不一致!');</script>")

Else

Dim db As New dbaccess

            Response.Write(Session("type"))

            db.para.Add("@id", Session("user"))

            db.para.Add("@oldpwd", pwd1.Text.Trim)

            db.para.Add("@pwd", pwd2.Text.Trim)

            Dim temp As String

            temp = Session("type")

            db.para.Add("@type", temp.Trim)

            db.runproc("changepwd")

            If (db.retok) Then

        Response.Write("<script> alert('修改成功!');</script>")

            Else

        Response.Write("<script> alert('原始密码错误!');</script>")

            End If

End If

4.1.4 教师模块功能

教师登陆也同样传递session值,将教工号和type值保留以备调用不同的用户控件。其它功能同学生模块相同。登录界面如图4.4所示。

                                                     图 4.4  教师登录成功界面

4.1.5 管理员模块功能

管理员登陆成功后,界面如图4.4所示,重新登陆、修改密码、退出系统同上。系统还原调用存储过程hy,备份调用存储过程bf,添加、修改、删除课程信息分别调用存储过程ins_c、del_c、course_update,添加、修改、删除学生信息分别调用存储过程ins_s、del_s、student _update,添加、修改、删除课程信息分别调用存储过程ins_t、del_t、teacher_update。   

                                                      图 4.5  管理员登录成功界面

  1)还原的LinkButton_Click中添加代码

            db.runproc("hy", True)

            If db.retok Then

       Response.Write("<script> alert('还原成功!');</script>")

            Else

       Response.Write("<script> alert('还原失败!');</script>")

            End If

2)addstudent.ascx中的代码如下

page_load中的代码

 db.runproc("grade")

        If db.retok Then

      g.DataSource = db.ds.Tables(0) '绑定班级信息

      g.DataTextField = db.ds.Tables(0).Columns(1).ToString '显示班级名

      g.DataValueField = db.ds.Tables(0).Columns(0).ToString '值为班级号

      g.DataBind()

        End If

submit_Click中的代码

       If studentid.Text.Trim <> "" And pwd.Text.Trim <> "" Then

            Dim db As New dbaccess

            db.para.Add("@sid", studentid.Text.Trim)

            db.para.Add("@pwd", pwd.Text.Trim)

            db.para.Add("@sname", studentname.Text.Trim)

            db.para.Add("@sex", sex.Text.Trim)

            db.para.Add("@gradeid", g.SelectedValue)

            db.para.Add("@telep", telep.Text.Trim)

            db.runproc("ins_s")

            If db.retok Then

                msg.Text = "insert success !"

            Else

                msg.Text = "insert failure! record may exists !"

                studentid.Text = ""

                pwd.Text = ""

                studentname.Text = ""

                sex.Text = ""

                telep.Text = ""

            End If

          Else

            msg.Text = "学号或密码不能为空!"

       End If

4.1.6 存储过程

为了提高效率,使代码简单,大量使用了存储过程。

下面是登陆时调用的存储过程:

CREATE proc login

@user char(10),@pwd char(10),@type int=0

as

if @type=0

begin

select *  from 学生信息 as b

where b.学号=@user and b.密码=@pwd

end

if @type=1

begin

select * from 教师信息 as b

where b.教工号=@user and b.密码=@pwd

end

if @type=2

begin

select * from 管理员信息 as b

where b.账号=@user and b.密码=@pwd

end

下面是还原时调用的存储过程:

CREATE PROCEDURE hy AS

DECLARE   @spid   smallint  

DECLARE   @sql   char(10)

DECLARE deluser CURSOR FAST_FORWARD

FOR

SELECT  spid  FROM sysprocesses as p

where dbid in (select s.dbid from sysdatabases as s where s.name='cc')

OPEN deluser

FETCH   NEXT   FROM  deluser   INTO   @spid

WHILE   @@FETCH_STATUS != -1

begin

SET  @sql = 'KILL  ' +   CAST(@spid   AS   char(10))

EXEC(@sql)

FETCH NEXT FROM deluser INTO @spid

end

CLOSE deluser

DEALLOCATE deluser

restore database cc from bf

if @@error=0 select 'ok'

4.1.7 类的使用

在 OOP(面向对象的编程)中,类定义一类对象,通过将大量逻辑添加到自定义类中,不仅能使代码更易于重复使用,还可以扩展现有的类,添加新的功能或修改现有的功能。本程序中编写了一个类,供各摸块使用,代码如下:

Imports System.Data

Imports System.Data.SqlClient

Imports System.Collections.Specialized

Public Class dbaccess  '使用sql访问数据库的对象

    Public Shared ds As New Data.DataSet

    Public retok As Boolean   '如果返回的第一个表不为空,则为1,反之为0

    Public para As New ListDictionary

'出错返回Nothing

Public Sub runproc(ByVal procNAME As String, Optional ByVal master As Boolean = False)

        Dim db As String

        If master Then

            db = "master"

        Else

            db = "cc"

        End If

        Dim conn As New SqlConnection("server=.;database=" + db + ";uid=csf;pwd=csf")

        Dim comm As New SqlCommand

        Dim adp As New SqlDataAdapter(comm)

        comm.Connection = conn

        comm.CommandType = CommandType.StoredProcedure

        comm.CommandText = procNAME

        comm.Parameters.Clear()

        Dim myDE As DictionaryEntry '加入参数

        For Each myDE In para

            comm.Parameters.Add(myDE.Key, myDE.Value)

        Next myDE

        para.Clear() '参数已无用,回收空间

        If Not (ds Is Nothing) Then '清空已有表

            ds.Reset()

        End If

        retok = 0

        conn.Open()

        adp.Fill(ds)

        conn.Close()

        If ds.Tables.Count > 0 Then

            If ds.Tables(0).Rows.Count > 0 Then

                retok = 1 '如果有结果返回,则为真

            End If

        Else

            retok = 0 '反之,返回零

        End If

    End Sub

End Class 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云优惠服务器购买攻略,想省钱,看这篇文章就够了

购买腾讯云服务器省钱攻略&#xff0c;先搞个腾讯云新用户身份&#xff0c;然后先领取云服务器优惠代金券&#xff0c;最后在腾讯云官方特价活动上下单购买。目前腾讯云服务器优惠价格61元一年、新老同享2核2G4M带宽99元一年、2核4G5M服务器165元一年、4核8G服务器646元15个月&…

基于Vue3的openlayers地图显示

基于Vue3的openlayers地图显示 &#xff08;1&#xff09;接着上一篇将讲&#xff0c;在components文件夹下创建BaseMap.vue文件夹 &#xff08;2&#xff09;在App.vue文件里面引入BaseMap.vue文件&#xff0c;如下代码所示&#xff1a; &#xff08;3&#xff09;在BaseMa…

upload-labs第十七十八关

第十七关 $is_upload false; $msg null;if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_name $_FILES[upload_file][name];$temp_file $_FILES[upload_file][tmp_name];$file_ext substr($file_name,strrpos($file_name,".")1);$upload_file …

上位机图像处理和嵌入式模块部署(树莓派4b进行驱动的编写)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 树莓派4b上面还支持驱动代码的编写&#xff0c;这是我没有想到的。这里驱动&#xff0c;更多的是一种框架的编写&#xff0c;不一定是编写真正的驱…

大珩PPT助手一键颜色设置

大珩PPT助手最新推出的一键设置文字颜色和背景色功能&#xff0c;为用户在创建演示文稿时带来了更便捷、高效的体验。这一功能使用户能够轻松调整演示文稿中文字的颜色和幻灯片的背景色&#xff0c;以满足不同场合和主题的需要。 以下是该功能的几个关键特点和优势&#xff1a…

opencv的cmake报错

opencv编译报错 CMakeDownloadLog.txt #use_cache "D:/opencv/.cache" #do_unpack "ippicv_2021.8_win_intel64_20230330_general.zip" "71e4f58de939f0348ec7fb58ffb17dbf" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/1…

【Linux系统编程】第六弹---权限的概念

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、什么是权限 2、权限的本质 3、Linux中的用户 4、Linux中文件的权限 4.1、文件访问者的分类(角色) 4.2、文件类型和访问权…

书生浦语训练营第2期-第4节笔记

一、为什么要微调&#xff1f; 1. 适应特定任务或领域&#xff1a;虽然预训练的模型通常具有广泛的知识和理解能力&#xff0c;但它们可能不完全适应特定任务的需求。通过在特定的数据集上微调模型&#xff0c;可以使模型更好地理解和处理与特定任务或领域相关的数据。 2. 提高…

氮气柜是如何进行温度、湿度和氧含量控制的?

氮气柜的温湿度控制标准并不统一&#xff0c;具体设定值主要取决于所存储物料的特性与存储要求。 氮气柜的温度一般不直接控制&#xff0c;而是显示并反映柜内当前的环境温度&#xff0c;因为氮气柜的设计重点在于除湿而非降温。在某些高端应用场合&#xff0c;尤其是精密电子元…

软件杯 深度学习实现语义分割算法系统 - 机器视觉

文章目录 1 前言2 概念介绍2.1 什么是图像语义分割 3 条件随机场的深度学习模型3\. 1 多尺度特征融合 4 语义分割开发过程4.1 建立4.2 下载CamVid数据集4.3 加载CamVid图像4.4 加载CamVid像素标签图像 5 PyTorch 实现语义分割5.1 数据集准备5.2 训练基准模型5.3 损失函数5.4 归…

Spring Boot中JUnit 4与JUnit 5的如何共存

文章目录 前言一、先上答案二、稍微深入了解2.1 maven-surefire-plugin是什么2.2 JUnit4和JUnit5有什么区别2.2.1 不同的注解2.2.2 架构 前言 在maven项目中&#xff0c;生成单测时是否有这样的疑问&#xff1a;该选JUnit4还是JUnit5&#xff1f;在执行 mvn test 命令时有没有…

NetFlow 监控工具

NetFlow 是流量数据统计使用最广泛的标准&#xff0c;它是由思科公司开发&#xff0c;用于监控和记录传入或传出接口的所有流量&#xff0c;NetFlow 分析其收集的流量数据&#xff0c;以提供流量和流量的可见性&#xff0c;并跟踪流量的来源、去向以及随时产生的流量。记录的信…

使用selenium时出现element click intercepted报错的解决办法

win10&#xff0c;python3.8.10。 selenium版本如下&#xff08;用pip38 show selenium查看&#xff09;&#xff1a; 在定位中&#xff0c;定位了一个按钮&#xff08;特点&#xff1a;button下还有span然后才是文本&#xff09;&#xff0c;代码如下&#xff1a; from sele…

Scala 03 —— Scala OOP Extension

Scala 2.1 —— Scala OOP Extension 一、正则 文章目录 Scala 2.1 —— Scala OOP Extension一、正则1.1 Java正则和Scala正则的区别1.2 Java正则和Scala正则的的基本知识点Java正则Scala正则 1.3 练习练习一&#xff1a;使用正则表达式解析日志方法一&#xff1a;使用findAl…

Oracle交换分区测试

1、用exchange分区表减少初始化过程中对业务中断的影响 2、创建分区表 create table t_p (id number,name varchar2(30),addr varchar2(50)) partition by range(id) (partition p1 values less than(10), partition p2 values less than(20), partition p3 values less …

冯唐成事心法笔记

文章目录 卷首语 管理是一生的日常&#xff0c;成事是一生的修行PART 1 知己 用好自己的天赋如何管理自我用好你的天赋成大事无捷径如何平衡工作和生活做一个真猛人做自己熟悉的行业掌控情绪如何对待妒忌和贪婪如何战胜自己&#xff0c;战胜逆境真正的高手都有破局思维有时候…

【支付宝】对接手机网站支付踩坑点记录

前言 简单记录一下对接Wap支付的问题&#xff0c;alipay和wxpay认证过程差不多&#xff0c;有个体商户或企业即可&#xff0c;前者文档不易懂后者还好&#xff0c;但是wxpay门槛高&#xff0c;个人认为pc网站支付(native支付)就是为了收300认证费&#xff01; 应用公私钥 第一…

《剑指 Offer》专项突破版 - 面试题 112 : 最长递增路径(C++ 实现)

题目链接&#xff1a;最长递增路径 题目&#xff1a; 输入一个整数矩阵&#xff0c;请求最长递增路径的长度。矩阵中的路径沿着上、下、左、右 4 个方向前行。例如&#xff0c;下图中矩阵的最长递增路径的长度为 4&#xff0c;其中一条最长的递增路径为 3->4->5->8&…

护眼落地灯哪个牌子好?落地灯十大知名品牌

一款优异的落地灯不只有照明的作用&#xff0c;更有装修作用。只不过&#xff0c;市面上的落地灯产品很多&#xff0c;质量良莠不齐&#xff0c;很多人不知道怎么挑选是好。小编的主张是从品牌下手&#xff0c;挑选口碑上佳的品牌落地灯产品。若问护眼落地灯哪个牌子好&#xf…

Flask-SQLAlchemy 中使用显式主主数据库设置

1、问题背景 在一个 Flask-SQLAlchemy 项目中&#xff0c;用户想要使用显式主主数据库设置。具体而言&#xff0c;他想要能够从默认数据库中读取数据&#xff0c;并将数据持久化到两个主数据库中。他希望知道是否可以使用 Flask-SQLAlchemy 和 binds 来实现这一目标。 2、解决…