ASP.NET基于WEB的选课系统

摘要

设计本系统的目的是对选课信息进行管理。学生选课系统维护模块主要完成的是系统管理与维护功能。课题研究过程中,首先对系统管理模块进行了详尽的需求分析,经分析得到系统管理模块主要完成如下的功能:用户基本信息、选课信息的录入,查看,修改,删除等,同时还具有查询各个模块的功能,数据备份,数据还原 ,注销等功能。系统管理模块是整个系统的指挥中心,保证整个系统在校园网上安全有效地运作。之后根据需求提出了系统管理模块的总体设计方案,并据此进行了详细设计和编码实现。系统使用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.mzph.cn/news/828523.shtml

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

相关文章

【图论 单源最短路】100276. 最短路径中的边

本文时间知识点 单源最短路 图论知识汇总 LeetCode100276. 最短路径中的边 给你一个 n 个节点的无向带权图&#xff0c;节点编号为 0 到 n - 1 。图中总共有 m 条边&#xff0c;用二维数组 edges 表示&#xff0c;其中 edges[i] [ai, bi, wi] 表示节点 ai 和 bi 之间有一条…

Visual Studio调试C/C++指南

1. 前言 Visual Studio&#xff08;VS&#xff09;是微软开发的一款集成开发环境(IDE)软件&#xff0c;支持C/C、C#、VB、Python等开发语言&#xff0c;开发桌面、Web等应用程序。VS功能极其强大&#xff0c;使用极其便利&#xff0c;用户数量最多&#xff0c;被誉为"宇宙…

JDK的安装和配置

这里写自定义目录标题 1.Java 开发工具包在上方已关联资源下载使用2.JAVA_HOME3.CLASSPATH4.PATH5.包内含有visualvm 1.Java 开发工具包在上方已关联资源下载使用 2.JAVA_HOME JAVA_HOME C:\Program Files\Java\jdk1.8.0_1313.CLASSPATH CLASSPATH .;%JAVA_HOME%\lib\dt.jar…

5月计算机各省报名时间汇总报名流程

&#x1f4e3;5月有5省可进行计算机报名 天津&#xff1a;5月6日-5月10日 福建&#xff1a;5月6日9:00-5月12日17:00 广西&#xff1a;5月6日9:00-5月12日23:55 重庆&#xff1a;5月6日9:00-5月12日24:00 西藏&#xff1a;预计5月6日-12日 &#x1f50d;计算机等级考试报…

花粉过敏人群或超2亿?约克VRF中央空调助你健康鲜呼吸

“一朝春雨落,十里桃花开”,暖春、微风、阳光、花香……充满着生机的春天让人心情愉悦,然而对于易过敏人群来说却是“苦不堪言”,经常出现眼圈发红、发痒、睁不开,每天都在“流泪”中度过,同时伴随着咳嗽、打喷嚏、流鼻涕、鼻塞等症状,皮肤也可能会出现红疹、瘙痒等症状。 如何…

在Linux安装mysql

由于大多数开发&#xff0c;测试活动都是在linux中进行的&#xff0c;所以建议先学linux&#xff0c;可以看看下面这个文章&#xff1a; Linux命令超详细介绍-CSDN博客 1、先去下载mysql的linux安装包&#xff1a;MySQL :: Download MySQL Community Server (Archived Versio…

第十五届蓝桥杯省赛第二场C/C++B组G题【最强小队】题解

20pts 枚举所有可能的左端点、右端点&#xff0c;时间复杂度 O ( n 2 ) O(n^2) O(n2)。 对于每个区间进行遍历检测&#xff0c;时间复杂度 O ( n 3 ) O(n^3) O(n3)。 100pts 由于数据范围为 1 0 5 10^5 105&#xff0c;所以肯定只能进行一次枚举。 我们尝试枚举右端点&…

中小型企业网络实战topo

1、设备命名&#xff0c;务必按照规范进行命名规划&#xff1b; 2、子网划分&#xff0c;申请到了公网地址段&#xff0c;201.1.1.0/24&#xff0c;根据公司的实际情况&#xff0c;合理规划拓扑需要的公网地址&#xff0c; 做到合理规划不浪费&#xff1b; 3、子网划分&a…

ZooKeeper设置监听器

ZooKeeper设置监听器&#xff0c;通过getData()/getChildern()/xists()方法。 步骤&#xff1a; 1.创建监听器&#xff1a;创建一个实现Watcher接口的类&#xff0c;实现process()方法。这个方法会在ZooKeeper向客户端发送一个Watcher事件通知的时候被调用。 2.注册监听器&…

k-均值聚类

K均值聚类&#xff08;K-means clustering&#xff09;是一种常用的无监督学习方法&#xff0c;用于将一组数据点划分为K个簇&#xff08;cluster&#xff09;。 它的目标是将相似的数据点归到同一个簇中&#xff0c;同时使得不同簇之间的数据点尽可能不相似。K均值聚类算法的…

数据库MySQL的初级基础操作

文章目录 1. 介绍2. 数据库相关概念3. 启动4. 数据模型5. SQL6. DDL数据库DDL-表操作DDL-表操作-数据类型DDL-表操作-修改DDL-表操作-删除 7. 图形化界面工具DataGrip8. DML(数据操作语言)DML-添加数据DML-修改数据 9. DQL&#xff08;数据查询语言&#xff09;基本查询条件查询…

第十五届蓝桥杯省赛第二场C/C++B组F题【狡兔k窟】题解(AC)

题意分析 有一个 n n n 个点&#xff0c; n − 1 n-1 n−1 条边的无向图&#xff0c;边权均为 1 1 1。 每个点隶属于一个集合&#xff0c;同一个集合的点可以互相传送。 给定 m m m 个询问&#xff0c;求 x , y x, y x,y 的最短距离。 最短路解法 步骤&#xff1a; 建…

N5245B PNA-X 微波网络分析仪

N5245B PNA-X 微波网络分析仪 " 900 Hz/10 MHz 至 50 GHz " N5245B PNA-X 微波网络分析仪&#xff0c;900 Hz/10 MHz 至 50 GHz&#xff0c;2 端口和 4 端口&#xff0c;多达三个信号源。 特点 实现卓越性能 这款 PNA-X 分析仪不仅仅是一款矢量网络分析仪&a…

《QT实用小工具·四十》显示帧率的控件

1、概述 源码放在文章末尾 该项目实现了可以显示帧率的控件&#xff0c;项目demo演示如下所示&#xff1a; 、 项目部分代码如下所示&#xff1a; #ifndef FPSITEM_H #define FPSITEM_H#include <QQuickItem>class FpsItem : public QQuickItem {Q_OBJECTQ_PROPERTY(i…

ubuntu20 解决网线不能联网 RTL8111/8168/8411

这种问题一般是驱动没有正确安装。 ----RTL8111/8168/8411是一块比较坑的网卡。 1、 查看网卡信息 lspci |grep Ethernet2、 对于高版本的Ubuntu&#xff0c;能直接使用命令安装驱动。下面的r8168-dkms需根据网卡信息修改&#xff0c;上面的网卡信息还有8111&#xff0c;但逐个…

CUDA的应用场景

CUDA的应用场景随着技术的发展不断扩展&#xff0c;其核心优势在于能够显著提高并行计算任务的处理速度&#xff0c;这对于任何需要处理大量数据和执行复杂计算的领域都是极其有价值的。CUDA开发的应用场景非常广泛&#xff0c;主要得益于其强大的并行计算能力&#xff0c;以下…

buuctf——[CISCN2019 华北赛区 Day2 Web1]Hack World

buuctf——[CISCN2019 华北赛区 Day2 Web1]Hack World 1.根据提示&#xff0c;说明flag在表里 2.那就猜测存在sql注入&#xff0c;反手测试一波id1 3.尝试使用1--进行注释 4.直接丢进salmap里吧&#xff0c;不出意外多半是跑不出来 5.直接放入fuzz里进行测试 6.发现当我…

iOS - 多线程-GCD

文章目录 iOS - 多线程-GCD1. 常见多线程方案2. GCD2.1 GCD的常见函数GCD中有2个用来执行任务的函数 2.2 GCD的队列2.2.1 GCD的队列可以分为2大类型 2.3 容易混淆的术语2.4.1 有4个术语比较容易混淆&#xff1a;同步、异步、并发、串行 2.4 各种队列的执行效果 3. 死锁3.1 死锁…

Composer初次接触

php一直都是简单处理一下单片机的后台服务&#xff0c;没什么深入研究 今天安装一个 php composer.phar require qiniu/php-sdkComposer完全不懂&#xff0c;照着一试&#xff0c;就报错了 - topthink/think-installer v1.0.12 requires composer-plugin-api ^1.0 -> found…

ThreeJs模拟工厂生产过程三

上节课绘制了车间模型&#xff0c;但是车间里只有一条产线&#xff0c;这节把产线多铺设几条&#xff0c;放满整个车间&#xff0c;但是随着放满车间吗&#xff0c;也就意味着要创建更多的模型&#xff0c;而更多的模型会导致浏览器卡顿&#xff0c;所以这个节讲如何做模型合并…