摘要:随着在校大学生人数的不断增加,教务系统的数据量也不断的上涨。针对学生选课这一环节,本系统从学生网上自主选课以及教师的课程发布两个大方面进行了设计,基本实现了学生的在线信息查询、选课功能以及教师对课程信息发布的管理等功能。本程序由SQL Server数据库支持,通过使用ASP语言实现。本文对学生网上选课系统进行了系统分析,详细讲述了系统功能,并对数据库设计等方面加以说明。
关键词:选课;课程信息发布;MySQL;ASP
1绪论
1.1课题背景
随着教学的不断改革,尤其是学分制、选课制的展开和深入,教务日常管理工作日趋繁重、复杂。如何把教务工作信息化,模块化,便捷化是现代大学发展的重点,所以迫切需要研制开发一种综合教务管理软件。在数字校园理论逐步应用的过程中,各校一方面不断投资购建各种硬件、系统软件和网络,另一方面也不断开发实施了各类教学、科研、办公管理等应用系统,形成了一定规模的信息化建设体系。但是,由于整体信息化程度相对落后,经费短缺,理论体系不健全等原因,国内各校教务管理系统在机构设置、服务范围、服务质量及人员要求上与国外高校相比都有一定的差距。
目前国家的教育也正处在不断改革、创新的阶段,教育部门充分吸取国外优秀的教学模式,结合国内多年的办学经验,逐步探索出适合中国特色的教学形式,国家教育部面向各级各类学校开展了全面学分制改革。随着无纸化办公的一步步实现,信息的自动处理以及网络式的信息交互方式越来越被人们认可和应用。让计算机来管理学生的信息是现在各个高校都在积极进行的工作之一,也是高校教学管理工作的重要内容之一。网上选课与传统的选课方式相比更加节约资源,同时,随着学生选课自主权的增加,网上选课有效的避免了“走关系”等不良现象,使教学更加透明,为进一步实现完善的计算机教务管理系统和全校信息系统打下良好的基础。
1.2所用软件的基本知识
1.2.1MySQL
MySQL有关数据库方面的操作。注意:必须首先登录到mysql中,以下操作都是在mysql
的提示符下进行的,而且每个命令以分号结束。操作技巧:如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。
基本命令:
列出数据库 show databases; 选择数据库 use 库名; 列出表格 show tables;
显示数据表的结构 describe 表名; 建库 create database 库名; 建表 use 库名;
create table 表名(字段设定列表); 删库和删表 drop database 库名;
drop table 表名;
将表中记录清空 delete from 表名; 显示表中的记录 select * from 表名;
将文本数据转到数据库中 load data local infile \"文件名\" into table 表名; (注意:文本数据应符合的格式:字段数据之间用tab键隔开)
1.2.2ASP(Active Server Page)
Active Server Pages (ASP) 是服务器端脚本编写环境,是由Server端脚本、对象以及组件拓展过的标准主页使用它可以创建和运行动态、交互的Web 页和基于 Web 的功能强大的应用程序.ASP采用的工作模型是典型的B/S过程:
(1)一个用户在浏览器的网址栏中添入Active Server Pages文件名称,并回车触发这个Active Server Pages的申请。
(2)浏览器将这个Active Server Pages的求发送给IIS
(3)Web Server接收这个申请要求并由于其.asp的后缀意识到这是个Active Server Pag的对象来实现服务器与客户端间的交互;可扩充服务器端功能.ASP与浏览器无关,ASP可以将运行结果一HTML的格式传送到客户端浏览器,因而可以使用于各种浏览器。
2系统分析
2.1可行性分析
可行性分析是指在当前组织内外的具体条件下,系统开发工作必须具备资源和条件,
看其是否满足系统目标的要求。在系统开发过程中进行可行性分析,对于保证资源的合理使用,避免浪费和一些不必要的失败,都是十分重要的。
(1)目标和方案的可行性:如果采用人工操作的方式,不仅操作不方便,耗费人力、物力、财力,而且还容易出现错误。所以当前迫切需要一个计算机化的管理信息系统。有了这个系统,就能用较少的人力去管理完成较大的工作量,而各种管理的效率也会大大提高。开发这个系统,能更好地满足学校要求,使学校的各种信息管理实现无纸化,高效化。
(2)技术方面的可行性:本系统是用ASP结合MySql数据库来开发的一个信息管理软件。ASP在数据库方面的特长显得尤为突出:适用于多种数据库结构,通过访问各种数据库通用组件,结合客户端能够创建出完美漂亮且高效的各种软件系统。
(3)经济方面的可行性:系统结构采用当前流行的B/S结构,对客户的配置要求低,客户端只需要有浏览器可以上网就可以登录服务器进行各种信息的管理。而服务器端也不需要太高的配置,只要有可以运行asp程序的解释器,可以说整个系统是以最少的投入完成最好的功能,这就保证了系统的经济可行性。
(4)管理方面的可行性:作为学校教务信息管理系统之一的选课系统,对它的管理也是很方便的,只需要先将系统配置运行起来,然后分配好系统的三个主要角色,就可以投入实际使用,作为系统使用者如管理员,教师和学生基本都是会知道如何进行电脑操作的。
根据以上几方面的可行性分析,可以得出结论:学生网上选课系统的开发可行。
2.2功能分析
本系统的使用是面向大学院校,系统的使用对象包括系统管理员,教师和学生三种身份,系统管理员登录系统后可以管理学生的信息,管理教师的信息,管理每学期各个班级的必修课程信息,各个专业每个学期的选修课程信息,可以为这些课程进行排课;而教师用户登录系统后可以查询任意学生的信息,可以查询自己的授课信息,可以登记自己所教学生的成绩信息,可以修改自己的登录密码和个人信息;学生用户登录系统后可以查询任一学期自己的成绩信息,如果系统开放了选课功能,可以在指定的日期内登录系统后选修该学期的选修课,可以生成某个学期的课程上课信息表,可以修改自己的个人信息和登录密码。本系统一共有4个主模块(身份验证|学生管理|教师管理|管理员管理),其中每个管理部分又包含了几个子模快,主要功能可概括为为浏览、查询、修改、添加。
2.3系统程序流程图
登录界面 用户权限 学生 教师 管理员 N 登录验证 Y 主界面 操作 结束 图3-1 系统程序流程图
3系统总体设计
3.1系统结构设计
3.1.1主要功能
本系统主要功能。
(1)身份验证:通过登录才可进入选课系统,登录信息提交后检验登录者的身份是
否合法,合法,则转入对应的操作界面。在本系统中,只有三种身份:学生、教师、管理员。
(2)信息浏览:信息浏览包括已选课程浏览、已发布课程信息浏览。已选课程浏览
是为学生提供的查看自己已经选择的课程信息以及删除选择课程。已发布课程信息浏览用于各代课老师查询自己已经发布的课程信息,主要用于浏览、核对。
(3)信息查询:信息查询包括教师个人信息查询、课程查询、选课查询。课程查询即
查询该课程的相关介绍,包括课程内容、开课地点等内容。教师个人信息是查看及修改对应的老师个人信息。通过选课查询可以查看要选择的课程情况。 (4)信息修改:信息修改包括密码的修改,学生信息的修改,教师信息的修改。 (5)信息添加:信息添加包括学生选课、教师课程发布、管理员。学生选课即通过
选择选修的课程,添加到学生已选课程中,完成选课任务。教师课程发布即教师添加新的课程信息,新信息发布后,学生可看到发布的信息。管理员添加学生、教师、课程的基本信息。
3.1.2系统模块功能图
学生网上选课系统 登录功能 学生管理功能 教师管理功能 管理员管理功能 登录 学生信息 必修课程 选修课程 已选课程 教师信息 发布课程 已发课程 教师信息 学生信息 课程信息 密码修改 密码修改
图3-2 系统功能图
3.2数据库设计
根据系统功能设计的要求以及功能模块的划分,可以列出以下主要数据项和数据库,主要分为6个表:表Course、表Student、表Teacher、表Admin、表Selected、表Published
表3.1 课程信息表(Course)
名称 课程编码 教师编号 课程名称 课程类别 供选学院 供选专业 学分 最多人数 上课地点 课程介绍 字段名称 CId TId CName CType CCollege CProfessional CCredit CMax CRoom CIntroduction 类别 int varchar varchar varchar varchar varchar varchar varchar varchar text 主键 Yes No No No No No No No No No 非空 Yes No No No No No No No No No 表3.2 学生信息表(Student)
名称 学号 姓名 性别 所属学院 所在专业 班级 密码 字段名称 SId SName SSex SCollege SProfessional SClass SKey 类别 varchar varchar char varchar varchar varchar varchar 主键 Yes No No No No No No 非空 Yes No No No No No No 表3.3 教师信息表(Teacher)
名称 身份证号 姓名 性别 所属学院 所属专业 密码 字段名称 TId TName TSex TCollege TProfessional TKey 类别 varchar varchar char varchar varchar varchar 主键 Yes No No No No No 非空 Yes No No No No No 表3.4 管理员信息表(Admin)
名称 登录号 密码 字段名称 AId AKey 类别 varchar varchar 主键 Yes No 非空 Yes No 表3.5 学生选课信息表(Selected)
名称 学号 课程编码 字段名称 SId CId 类别 varchar int 主键 No No 非空 No No 表3.6 教师发布课程信息表(Published)
名称 教师证件号 课程编码 字段名称 TId CId 类别 varchar int 主键 No No 非空 No No
4系统详细设计
4.1身份验证
4.1.1登录功能
在登录页面对应的地方输入用户名(学号或身份证号或其它有效证件),密码;确认后登录。在提交后,首先通过学号\身份证号或其它有效证件对数据库中的Student/Teacher/Admin表进行检索,若检索到的记录集为空,则说明学号/身份证号或其它有效证件错误,从而转到相应的出错处理程序,若记录集不为空,再进行密码判断,检查密码是否相等,不相等,作出错处理,相等则转入学生\老师\管理员登录成功的操作页面,并将姓名,密码,学号\身份证号或其它有效证件以session对象保存起来。
出错及系统提示如下:
(1)学号或身份证号或其它有效证件错误,系统这时会提醒“没有该学生!”或“没有该老师!”或“没有该系统管理员!”; (2)密码错误,系统提示“密码错误”。
4.1.2密码修改功能
密码的修改的前提是用户成功登录,选择密码修改后,按照页面上的提示,在相应的文本框中输入新密码(两次),确定后提交。转入执行的asp文件后,判断两次输入的新密码是否相等,若不等,出错;否则,用新密码代替旧密码,更新数据库表Student/Teacher中的“密码”字段。本系统密码采用MD5加密。
出错及系统提示:新密码两次输入不同,系统提示“两次输入密码不相符合”。
4.2学生信息管理功能
4.2.1选课信息查询及选课
登录成功后,点击菜单“选修课程”,确定后进入浏览页面。进入页面后,可以对页面上表格内带链接的信息进行查询,例如点击“教师”可查询教师信息。要选择课程,点击“选修该课程”后,该课程就会出现在“已选课程”的表格中。若已选过该课程,系统提示“您已经选了该课程!”。
4.2.2必修课程信息查询
点击菜单“必修课程”,可看到学生所在专业所开设的必修课程。其中查询数据库所需要的参数是学生的专业信息传递来的。专业信息的获得是通过session(SId)对数据表Student查询得到的。进入页面后,可以对页面上表格内带链接的信息进行查询,例如点击“课程名称”可查询课程信息。
4.2.3已选课程信息查询
点击菜单“已选课程”,在选课信息浏览页面中可以查询已经选的课程。课程信息的查询是通过条件对数据表Course,表Selected,表Teacher等进行查询,将符合条件的信息列出。想要退选课程,点击“取消该课程”按钮即可。
4.2.4学生个人信息
点击菜单“学生信息”,进入选课信息浏览页面查询即可。学生信息的修改首先是通过条件对数据表Student进行查询,符合条件后在文本框中输入完整信息后进行覆盖写入,就可以进行信息修改。
4.2.5密码修改
点击菜单“学生信息”,进入选课信息浏览页面。按照页面上的提示,在相应的文本框中输入新密码(两次),确定后提交。转入执行的asp文件后,判断两次输入的新密码是否相等,若不等,出错;否则,用新密码代替旧密码,更新数据库表Student中的“SKey”字
段。
出错及系统提示:新密码两次输入不同,系统提示“两次输入密码不相符合”。
4.3教师课程信息管理功能
4.3.1课程信息发布
登录成功后,点击菜单“发布课程”,进入选课信息浏览页面。如果想要单独查看某专业该教师可发布课程,在查询条件“课程专业”对应的文本框内输入查询信息(不输入信息时,表中显示该教师可发布课程的所有课程信息),点击“查询”按钮,即可查询。若要发布课程,按要求输入完整信息(课程名称与课程专业不能改变),点击“开设课程”按钮。若输入信息不完整,系统会提示“请输入……!”;当发布的课程的记录已经存在时,系统提示“您已经发布了该课程!”。当输入的课程名称或课程专业有误,系统提示“发布失败!”。
4.3.2对已发布信息查询
对数据表Course,表Published等进行检索,将其中符合条件的信息全部输出;查询需要的参数是由session对象获得的身份证号来确定的,由这二者确定出的即是该老师所发布过的课程信息。想要取消发布课程,点击“取消发布课程”按钮即可。
4.3.3教师个人信息
点击菜单“教师信息”,进入选课信息浏览页面查询即可。教师信息的修改首先是通过条件对数据表Teacher进行查询,符合条件后在文本框中输入完整信息后进行覆盖写入,就可以进行信息修改。
4.3.4密码修改
点击菜单“教师信息”,进入选课信息浏览页面。按照页面上的提示,在相应的文本框中输入新密码(两次),确定后提交。转入执行的asp文件后,判断两次输入的新密码是否相等,若不等,出错;否则,用新密码代替旧密码,更新数据库表Teacher中的“TKey”字段。
出错及系统提示:新密码两次输入不同,系统提示“两次输入密码不相符合”。
4.4系统管理员信息管理功能
4.4.1管理教师功能
教师信息的添加、修改、删除、查询由管理员完成,教师无权使用。
(1)添加:对数据表“Teacher”进行添加操作,生成新记录。在管理员登录成功后,选择“教师信息”即进入教师信息添加页面,输入要添加的教师身份证号、教师姓名等教师信息后(初始密码admin),点击添加按钮即可。
出错及系统提示:
输入的教师的身份证号已存在,系统则提示“添加失败,请检查教师证件号是否已经存在!”。
(2)修改:在管理员登录成功后,选择“教师信息”即进入教师信息页面。对数据库中的表“Teacher”查询,在网页相应的的地方显示所要的信息。列出教师信息表后,在表中查询要修改的教师身份证号后,点击“修改”按钮,修改所要修改的教师的信息,点击“更新”按钮,若不修改,则点击“取消”按钮。
(3)删除:在管理员登录成功后,选择“教师信息”即进入教师信息页面。查询要删除的教师身份证号,点击“删除”按钮进行删除。
(4)查询:在教师信息页面,输入要查询专业,点击“查询”按钮即可查询该专业的教师情况。
4.4.2管理学生功能
学生信息的添加、修改、删除、查询功能与管理教师信息基本相同,不再赘述。
4.4.3管理课程功能
课程信息的添加、修改、删除查询功能与管理教师信息基本相同,不再赘述。
5设计过程中的问题及解决方法
5.1数据库的连接
MySQL与SQL server的连接方式大致相同,当MySQL与VS连接时,需要组件mysql-connector-net,通过查找及实践,完成了数据库的建立和连接。如图5-1:
图5-1 mysql数据库的连接
数据库连接操作类主要代码: //数据库连接字符串 private
const
String
connString
=@\"Server=localhost;Database=ChooseCourse;Uid=root;Pwd=sa\";
//返回select得到的数据集
public static DataSet ExecuteSelectSql( string sqlSelect ) {
MySqlConnection conn = new MySqlConnection(connString); MySqlDataAdapter sda = new MySqlDataAdapter(sqlSelect,conn); DataSet ds = new DataSet(); try
{ sda.Fill(ds); } catch(MySqlException e)
{ throw new Exception(e.Message); } return ds; }
//执行insert,update,delete等语句,返回改变的行数
public static int ExecuteSql( string sql ) {
int rows = -1;
MySqlConnection conn = new MySqlConnection(connString); MySqlCommand cmd = new MySqlCommand(sql,conn);
try {
conn.Open();
rows = cmd.ExecuteNonQuery(); }
catch(MySqlException e) {
throw new Exception(e.Message); } finally {
cmd.Dispose(); conn.Close(); } return rows; }
5.2参数的传递
在模块的建立时,很多时候发现功能不能正常运行,在检查完程序语句的结构之后,发现并没有错误,于是在检查页面与页面交互时发现了问题,很多地方传递的参数并没有真正的执行,还有些地方没有进行参数的设置,才导致了程序的错误。
5.3公共数据
由于一开始没有使用session对象,致使很多功能无法实现,在学习了session的相关内容后才解决了一些具体的问题,包括网页间的参数的传递,公共信息的保存及提取等。
6系统的实现
6.1登录模块
6.1.1登录模块简介
登录模块在本系统中用于区别学生、教师、管理员。出于保密性和方便管理等方面的考
虑,不同身份在登录本系统后有不同权限。例如:学生登录系统后可查询及选课,教师登录系统后可发布课程。管理员登录系统后可添加教师、学生及课程信息。通过用户权限,选择正确身份,然后输入用户名(学号或身份证号或其它有效证件)、密码,登录信息提交后检验登录者的身份是否合法,合法,则转入对应的操作界面。(初始密码均为admin,管理员登录用户名admin)
登录界面 选择用户类型 输入用户名+密码 N
登录验证 Y 操作主界面 图6-1 登录模块流程图
6.1.2登录模块关键代码
主要代码如下:
protected void btnLogin_Click(object sender, EventArgs e) {// 登录代码
int type = Int32.Parse(ddlLogin.SelectedItem.Value);//用户类型选择分三种,用switch (type)来区分
string user = txtUser.Text.Trim();//用户证件号,文本框内容赋值给user string inputkey = txtKey.Text.Trim();//用户密码,文本框内容赋值给inputkey string key = \"\"; string sql = \"\"; DataSet ds; switch (type)
{//选择学生,即type值为1,执行case 1;选择教师,即type值为2,执行case 2;选择
系统管理员,即type值为3,执行case 3 case 1:// 验证学生身份代码
sql = \"select SKey from Student where SId like '\" + user + \"'\";//从表Student中
查询学号SId为输入证件号"user"的学生密码
ds = Db.ExecuteSelectSql(sql);// 执行select类型的sql语句,返回select得到的数据集
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0
&& !ds.Tables[0].Rows[0].IsNull(0))//判断select得到的数据集是否为空,若为空,
执行else
{
key = ds.Tables[0].Rows[0][0].ToString();//将查询到的密码赋值给key
if (MyUtility.MD5(inputkey) == key)//输入密码经过MD5加密,并与key相比较
{//相等,便可成功登陆学生选课管理主页面
Session[\"Id\"] = user;// 内置对象Session记录用户登录学号 Session[\"Type\"] = type; // 内置对象Session记录用户登录类型 Response.Redirect(\"StudentMain.aspx\");//进入学生选课管理主页面
}
else//密码错误
{Response.Redirect(\"Error.aspx?code=\" +
ErrorInfo.ERR_KEYERROR.ToString());}//系统提示:密码错误
}
else//不存在该学生 {
Response.Redirect(\"Error.aspx?code=\" +
ErrorInfo.ERR_NOSTUDENT.ToString());
//系统提示:不存在该学生 }
break;
case 2:// 验证教师身份代码 …//与验证学生身份代码类似 break;
case 3:// 验证管理员身份代码 …//与验证学生身份代码类似 break;
}
}
6.1.3登录模块截图
图6-2 登录页面
图6-3 学生登录错误页面
6.2学生选课模块
6.2.1学生选课模块简介
学生选课模块是系统主要模块之一,主要用于学生的网上选课,不同专业学生通过登录选课系统,选择本专业的课程,完成选课任务。菜单:学生信息|必修课程|选修课程|已选课程,包括选课信息查询及选课、必修课程信息查询、已选课程信息查询、学生个人信息修改、密码修改等。
6.2.2学生选课模块关键代码
学生个人信息:
protected void Page_Load(object sender, EventArgs e)
{// 显示学生信息代码
if (!IsPostBack) //表示第一次访问页面时要执行的程序,有点像初始化页面,
当你点击了当前页面的一些按钮后,将不会再执行这些程序
{
string sql = \"select * from Student where SId like '\" + Session[\"Id\"].ToString()
+ \"'\";//从表Student查询学生的所有信息,条件是:学号SId为内置对象Session记录的用户登录学号
DataSet ds = Db.ExecuteSelectSql(sql); // 执行select类型的sql语句,返回
select得到的数据集
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)//判
断select得到的数据集是否为空
{
lbSId.Text = Session[\"Id\"].ToString();//将Session记录的用户登录学号
在Label控件lbSId上显示出来
txtSName.Text = ds.Tables[0].Rows[0][\"SName\"].ToString();//在
TextBox控件txtSName中显示select得到的学生姓名
if (ds.Tables[0].Rows[0][\"SSex\"].ToString() == \"女\") ddlSSex.SelectedIndex = 0; else
ddlSSex.SelectedIndex = 1;
//在DropDownList控件ddlSSex中显示select得到的学生性别 txtSCollege.Text = ds.Tables[0].Rows[0][\"SCollege\"].ToString();//在
TextBox控件txtSCollege中显示select得到的学生学院
txtSProfessional.Text =
ds.Tables[0].Rows[0][\"SProfessional\"].ToString();//在TextBox控件txtSProfessional中显示select得到的学生专业
txtSClass.Text = ds.Tables[0].Rows[0][\"SClass\"].ToString();//在
TextBox控件txtSClass中显示select得到的学生班级
} } }
密码修改:
protected void btnUpdateKey_Click(object sender, EventArgs e) {//密码修改代码
if (txtKey.Text.Trim() != txtKeyOk.Text.Trim())//判断输入的新密码与密码确认
输入的密码是否相等,若不相等,执行if语句;相等,不执行if语句
{
Response.Write(MyUtility.Alert(\"两次输入密码不相符合\"));//系统提示:两
次输入密码不相符合
return; //返回密码修改页面 }
string sql = \"update Student set SKey = '\" + MyUtility.MD5(txtKey.Text.Trim()) +
\"' where SId = '\" + Session[\"Id\"] + \"'\";//将表Studen中学号SId为内置对象Session记录的用户登录
学号的学生密码更新为修改的密码
if (Db.ExecuteSql(sql) == 1) //判断执行update语句,改变的行数是否为1(即表
Studen中只有该登录学生的那一行密码信息改变),若为1,则修改成功;否则,则修改失败
Response.Write(MyUtility.Alert(\"修改成功!\")); else
Response.Write(MyUtility.Alert(\"修改失败!\")); }
学生信息修改:
protected void btnUpdateInfo_Click(object sender, EventArgs e) {//学生信息修改代码
string sql = \"update Student set SName = '\" + txtSName.Text.Trim() + \"'\" + \ \ \ \
\" where SId like '\" + Session[\"Id\"].ToString() + \"'\";//将表Studen中学号SId为
内置对象Session记录的用户登录学号的学生信息更新为修改后的信息
if (Db.ExecuteSql(sql) == 1)//判断执行update语句,改变的行数是否为1(即表
Studen中只有该登录学生的那一行信息改变),若为1,则修改成功;否则,则修改失败
Response.Write(MyUtility.Alert(\"修改成功!\")); else
Response.Write(MyUtility.Alert(\"修改失败!\")); }
选课:
protected void Page_Load(object sender, EventArgs e)
{// 可选课程显示代码 if ( ! IsPostBack ) {
string sql = \"select Course.CId,Course.CName,Course.CProfessional,
Teacher.TName, Teacher.TId,Course.CCredit, Course.CMax, Course.CRoom from Teacher inner join Course on Teacher.TId =
Course.TId inner join Published on Course.CId = Published.CId inner join Student on Student.SProfessional = Course.CProfessional where CType like '选修' and Student.SId = '\" + Session[\"Id\"] + \"'\";//从表Teacher、
表Course中查询要在GridView控件表格中显示的内容,要求课程类型CType为选修,课程编号CId为教师已发布课程表Published中已存在课程编号,教师编号TId为课程信息表Course中已存在的教师编号,课程专业Cprofessional为Session记录的用户登录学号的学生的专业(即GridView控件表格中显示的内容为教师已发布的本专业的选修课程) DataSet ds = Db.ExecuteSelectSql(sql);
if (ds != null && ds.Tables.Count > 0) {
gvXxCourse.DataSource = ds.Tables[0];
gvXxCourse.DataBind();//将查询结果绑定到GridView控件
gvXxCourse(选修课程表)中
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)//循环条件:查询所得的
表(选修课程表)的数据总行数
{
sql = \"select count(*) from Selected where CId = \" +
ds.Tables[0].Rows[i][\"CId\"].ToString();//查询表Selected中的记录数,条
件:课程编号CId等于GridView控件gvXxCourse中第i+1行的课程编
号
DataSet ds1 = Db.ExecuteSelectSql(sql); if (ds1 != null && ds1.Tables.Count > 0 &&
ds1.Tables[0].Rows.Count > 0)
{
gvXxCourse.Rows[i].Cells[6].Text =
ds1.Tables[0].Rows[0][0].ToString();//将从表Selected中返回的记录数(即已选该课程人数)在gvXxCourse中第i+1行、第7列(即已选人数那一列)显示 }
} } }
}
protected void gvXxCourse_RowCommand(object sender,
GridViewCommandEventArgs e) {//判断是否已选课代码
if (e.CommandName == \"Select\") //控件的CommandName 属性
{
gvXxCourse.DataKeyNames = new string[] { \"CId\" };//主键 int index = Convert.ToInt32(e.CommandArgument);
string cid = gvXxCourse.DataKeys[index].Values[0].ToString();//获取要选择
的课程的课程编号cid
string sql = \"select * from Selected where CId = \" + cid + \" and SId like '\"
+Session[\"Id\"].ToString() + \"'\";//从表Selected中查询登录学生的学号及选择的课程
的课程编号
Db.ExecuteSelectSql(sql);
DataSet ds = Db.ExecuteSelectSql(sql); bool flag = false; //选修课程判断标志
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) flag = true; if (flag)//已选修过 {
Response.Write(MyUtility.Alert(\"您已经选了该课程了!\")); return; }
else//未选修过 {
SelectCourse(Int32.Parse(cid)); //选课
} } }
private void SelectCourse(int cid)
{//选课代码
int max=0,current=0;
string sql = \"select CMax from Course where CId = \"+cid;
//查询所选课程允许的最大人数
DataSet ds = Db.ExecuteSelectSql(sql);
if ( ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0 ) {
max = Int32.Parse(ds.Tables[0].Rows[0][0].ToString());//最大人数赋值给max } 值给current else return;
sql = \"select count(*) from Selected where CId = \"+cid; //查询表Selected中所选
择课程的课程编号的记录数(即已选该课程人数)
DataSet ds1 = Db.ExecuteSelectSql(sql);
if ( ds1 != null && ds1.Tables.Count > 0 && ds1.Tables[0].Rows.Count > 0 ) {
current = Int32.Parse(ds1.Tables[0].Rows[0][0].ToString());//将记录数赋
} else return;
if ( current > max )// 判断已选该课程人数是否超出允许的最大人数 {//超出
Response.Write(MyUtility.Alert(\"人数已满!\")); return; }
sql = \"insert into Selected values('\" + Session[\"Id\"].ToString() + \"',\" + cid + \")\"; //
符合条件,将登录学生学号及所选课程插入表Selected中
if ( Db.ExecuteSql(sql) == 1 ) //判断执行insert语句,改变的行数是否为1(即表
Selected中只有该登录学生的所选的课程的课程编号那一行信息改变),若为1,则选课成功;否则,则选课失败
{
Response.Write(MyUtility.Alert(\"选课成功\")); sql = \"select count(*) from Selected where CId = \" + cid; DataSet ds2 = Db.ExecuteSelectSql(sql);
if (ds2 != null && ds2.Tables.Count > 0 && ds2.Tables[0].Rows.Count > 0) gvXxCourse.Rows[index].Cells[6].Text =
ds2.Tables[0].Rows[0][0].ToString();//更新已选人数
} else
Response.Write(MyUtility.Alert(\"选课失败\")); }
6.2.3学生选课模块截图
图6-4 学生信息修改页面
图6-5选课页面
图6-6课程信息查询页面
6.3教师课程管理模块
6.3.1教师课程管理模块简介
教师课程管理模块主要用于教师发布新的课程信息,新信息发布后,不同专业的学生可看到发布的关于本专业的课程信息。菜单:教师信息|发布课程|已发课程,包括课程信息发布、对已发布信息查询、教师个人信息、密码修改等。
6.3.2教师课程管理模块关键代码
开设课程:
protected void Page_Load(object sender, EventArgs e)
{// 在此处放置用户代码以初始化页面,显示登录教师可以发布的课程 if (!IsPostBack) {
string sql = \"select * from Course where TId like '\" + Session[\"Id\"].ToString() + \"'
or TId like '0'\";//从表Course中查询教师证件号TId为登录教师证件号或为'0'(管理员设置的教师
证件号初始值,表示没有教师发布该课程)的所有信息
DataSet ds = Db.ExecuteSelectSql(sql); if (ds != null && ds.Tables.Count > 0) {
gvNewCourse.DataSource = ds.Tables[0]; gvNewCourse.DataBind(); }
//课程类别分为选修和必修 ddlCType.Items.Clear(); ddlCType.Items.Add(\"请选择\"); ddlCType.Items.Add(\"必修\"); ddlCType.Items.Add(\"选修\"); ddlCType.SelectedIndex = 0; //课程学分从1-6共分为12种 ddlCCredit.Items.Clear(); ddlCCredit.Items.Add(\"请选择\"); ddlCCredit.Items.Add(\"1\"); ddlCCredit.Items.Add(\"1.5\"); …
ddlCCredit.Items.Add(\"6\"); ddlCType.SelectedIndex = 0;
//课程最大人数分为4种:50、100、150、200 ddlCMax.Items.Clear(); ddlCMax.Items.Add(\"请选择\"); ddlCMax.Items.Add(\"50\"); …
ddlCMax.Items.Add(\"200\"); ddlCMax.SelectedIndex = 0; } }
protected void btnAddCourse_Click(object sender, EventArgs e) {//发布课程代码
if ( txtCName.Text.Trim() == \"\" ) {
Response.Write(MyUtility.Alert(\"请输入课程名称!\")); return; } …
if (ddlCMax.SelectedIndex <= 0) {
Response.Write(MyUtility.Alert(\"请选择课程最大人数!\")); return; }
string sql = \"select Published.CId from Published inner join Course on
Published.CId=Course.CId where Published.TId like '\" +
Session[\"Id\"].ToString() + \"' and CName like '\" + txtCName.Text.Trim() + \"' and CProfessional like '\" + txtCProfessional.Text.Trim() + \"'\";
//按输入的课程名称、课程专业及登录教师号查询表Published中课程编号,
看是否已存在
Db.ExecuteSelectSql(sql);
DataSet ds = Db.ExecuteSelectSql(sql);
bool flag = false; //发布课程判断标志
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
flag = true; //表Published中已存在该发布课程,true 赋给flag }
if (flag) //是否已经发布过了 { //已经发布过了
Response.Write(MyUtility.Alert(\"您已经发布了该课程!\")); return; } else { //未发布
string sql1 = \"update Course set TId = '\" + Session[\"Id\"].ToString() + \"'\" + \ \ \ \
\ \" where(TId like '\" + Session[\"Id\"].ToString() + \"' or TId like '0')and
CName like '\" + txtCName.Text.Trim() + \"' and CProfessional like '\" + txtCProfessional.Text.Trim() + \"'\";//所发布课程的课程名称CName及课程专业CProfessional不变,教师证件号
更新为Session记录的登录教师证件号,其余按发布内容在表Course中更
新
DataSet ds1 = Db.ExecuteSelectSql(sql1); …//数据绑定到GridView中
string sql2 = \"insert into Published(TId,CId) select TId,CId from Course
where TId like '\" + Session[\"Id\"].ToString() + \"' and CName like '\" + txtCName.Text.Trim() + \"' and CProfessional like '\" + txtCProfessional.Text.Trim() + \"'\";//将登录教师证件号TId 及所发布课程的课程编号CId插入表Published
if (Db.ExecuteSql(sql2) == 1) {
Response.Write(MyUtility.Alert(\"发课成功\")); return; } else
{
Response.Write(MyUtility.Alert(\"发课失败\")); return; } } }
protected void btntview_Click(object sender, EventArgs e)
{//教师通过输入搜索条件“课程专业“来查询该专业该教师可发布课程 if (txtViewCProfessional.Text.Trim() != \"\")//判断搜索条件是否为空 {//不为空,按所输入专业显示课表
string sql = \"select * from Course where(TId like '\" + Session[\"Id\"].ToString() +
\"' or TId like '0') and CProfessional like '\" + txtViewCProfessional.Text.Trim() + \"'\";
…//数据绑定到GridView中 } else
{//为空,显示教师可发布的所有课程
string sql = \"select * from Course where TId like '\" + Session[\"Id\"].ToString() + \"'
or TId like '0'\";
…//数据绑定到GridView中 }
6.3.3教师课程管理模块截图
图6-7 教师信息修改页面
图6-8 课程发布页面
图6-9 已发布课程页面
6.4系统管理员管理模块
6.4.1系统管理员管理模块简介
系统管理模块主要用于学生、教师及课程信息的查询(按专业)、添加、修改、删除等。菜单:教师信息|学生信息|课程信息,包括管理教师功能、管理学生功能、管理课程功能等。
6.4.2系统管理员管理模块关键代码
添加学生(教师、课程与之类似):
protected void Page_Load(object sender, EventArgs e)
{// 在此处放置用户代码以初始化页面,从表Student查询信息并绑定到GridView中 if (!IsPostBack) {
string sql = \"select * from Student\"; DataSet ds = Db.ExecuteSelectSql(sql); …//数据绑定到GridView中 }
}
protected void btnAddStudent_Click(object sender, EventArgs e) {//添加学生代码
if ( txtSId.Text.Trim() == \"\") {
Response.Write(MyUtility.Alert(\"请输入学生学号!\")); return; } …
if (txtSKey.Text.Trim() == \"\") {
Response.Write(MyUtility.Alert(\"请输入初始密码!\")); return; }
string sql = \"insert into
Student(SId,SName,SSex,SCollege,SProfessional,SClass,SKey) values('\" + txtSId.Text.Trim() + \"','\" + txtSName.Text.Trim() + \"','\" + txtSSex.Text.Trim()+ \"','\" + txtSCollege.Text.Trim() + \"','\" + txtSProfessional.Text.Trim() + \"','\" + txtSClass.Text.Trim() + \"','\" + MyUtility.MD5(txtSKey.Text.Trim()) + \"')\";// 向表Student添加学生
try//捕捉异常:学生是否已存在 {
if (Db.ExecuteSql(sql) == 1)//该学生不存在 {
sql = \"select * from Student\";
DataSet ds = Db.ExecuteSelectSql(sql); if (ds != null && ds.Tables.Count > 0) {
gvStudentIn.DataSource = ds.Tables[0]; gvStudentIn.DataBind(); } }
else//该学生已存在 {
Response.Write(MyUtility.Alert(\"添加失败,请检查学号是否已经存在!\")); return; } }
catch//学生已存在异常 {
Response.Write(MyUtility.Alert(\"添加失败,请检查学号是否已经存在!\")); return; } }
GridView控件中的分页、编辑(更新及取消)、删除操作: protected void DataBind()//数据绑定
{//管理员通过输入搜索条件“学生专业“来查询该专业的学生 if (txtViewSProfessional.Text.Trim() != \"\") {//输入搜索条件不为空,按专业显示学生
string sql = \"select * from Student where SProfessional like '\" +
txtViewSProfessional.Text.Trim() + \"'\";
DataSet ds = Db.ExecuteSelectSql(sql); …//绑定数据到GridView中 } else
{//输入搜索条件为空,显示所有学生 string sql = \"select * from Student\"; DataSet ds = Db.ExecuteSelectSql(sql); …//绑定数据到GridView中 }
protected void gvStudentIn_PageIndexChanging(object sender, GridViewPageEventArgs e) {//分页,当GridView表中行数太多时,会分成几页来显示 gvStudentIn.PageIndex = e.NewPageIndex; DataBind();//数据绑定到GridView中 }
protected void gvStudentIn_RowEditing(object sender, GridViewEditEventArgs e) {//编辑,点击编辑按钮,会出现文本框,可以在文本框修改信息 gvStudentIn.EditIndex = e.NewEditIndex;
DataBind();//数据绑定到GridView中 }
protected void gvStudentIn_RowCancelingEdit(object sender,
GridViewCancelEditEventArgs e)
{//取消编辑,修改过程中,想恢复原来的信息,点击取消按钮即可 gvStudentIn.EditIndex = -1;
DataBind();//数据绑定到GridView中 }
protected void gvStudentIn_RowUpdating(object sender, GridViewUpdateEventArgs e) {//更新编辑内容
gvStudentIn.DataKeyNames = new string[] { \"SId\" };//主键 int index = e.RowIndex;
string sid = gvStudentIn.DataKeys[index].Values[0].ToString();//获得学生学号sid TextBox TextBox = new TextBox();
string SId = ((TextBox)(gvStudentIn.Rows[e.RowIndex].Cells[0].Controls[0])).
Text.ToString().Trim();
…
string SKey = ((TextBox)(gvStudentIn.Rows[e.RowIndex].Cells[6].Controls[0])).
Text.ToString().Trim();
//将编辑后的文本框内容赋值给相应字符串,例如将所在行第1列(学生学号)
赋值给SId
string sql = \"update Student set SId='\" + SId + \"',SName='\" + SName + \"',
SSex='\" + SSex + \"',SCollege='\" + SCollege + \"',SProfessional='\" + SProfessional + \"',SClass='\" + SClass + \"',SKey='\" + SKey + \"' where SId=\" + sid;//更新表Student
Db.ExecuteSelectSql(sql); gvStudentIn.EditIndex = -1; DataBind();//数据绑定到GridView中 }
protected void gvStudentIn_RowDeleting(object sender, GridViewDeleteEventArgs e) {//删除
string sid = gvStudentIn.DataKeys[e.RowIndex].Values[0].ToString();//获取学号sid
string sql = \"delete from Student where SId = \" + sid;//从表Student删除学号为sid的学生信息
Db.ExecuteSelectSql(sql);
DataBind();//数据绑定到GridView中 }
通过专业对表查询:
protected void btnAdminViewStudent_Click(object sender, EventArgs e)
{//管理员通过输入搜索条件“学生专业“来查询该专业的学生 DataBind();//数据绑定到GridView中 }
6.4.3系统管理员管理模块截图
图6-10 添加学生页面
图6-11 添加课程页面
7结论
通过这次毕业论文的撰写,我对学生网上选课系统有了更明确的认识。网上选课系统的实现,使我对数据库软件MySQL、ASP等软件应用有了更深一步的理解。由于在此之前对于ASP.NET及数据库的使用知识掌握不太好,所以实现中遇到许多困难。在整个设计阶段感受最为深刻的是掌握学习的方式和解决问题的方法。首先是解决问题的方式,虽然面临的信息很多,但是如何从大量的信息中筛选出所需的信息,有用的信息,才是解决问题的关键。另外一个就是解决问题的方法,就像我在解决设计中的很多问题一样,通过看书或在网上寻找有关资料,虽然得到的信息大部分都是有价值,正确的,但实际上每个人编程的思路和对数据处理的方法、思想都是不同的,这就要求我们从大量的信息中筛选出所需的信息,而通过实践才能最快的找到解决问题的方案。我深刻的体会到了这一点的重要性,也牢记主了这一点,在今后的学习和研究中我也会继续将这种方法延续下去。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务