2023年6月21日发(作者:)

2008~2009学年度《WEB 程序设计》

课程设计

班级: 05网络3班

学号:

姓名: 周秋艳

2008年 12月 17日

2008—2009 学年度<>课程设计

基于WEB的高校教师排课系统

一、 用户需求分析(10分)

学校教务的管理作为高校教育信息化工作中的一项重要工作,如何构建一个具有开放性、实用性和灵活性的平台,是一个值得探讨的课题。其中,作为学校教务重点环节之一的排课系统也尤为重要。

先前,在统筹安排各班级上课的时间需要人工实现,而且经常会出现同时有多个班级要使用教室的冲突。既耗时又耗精力,随着计算机技术的不断发展,计算机技术在各领域的充分完美应用,以学校的教务管理为该系统的应用背景,开发一个教室智能排课系统。

此系统开发主要包括后台数据库的建立和前端应用程序的开发两个方面。系统采用Visual Basic 6.0开发工具和SQL Server 2000作为后台数据库开发的应用软件。该系统实现上机时间的安排,课程的安排,教室的安排,以及它们之间的不冲突和资源的高效利用;这更切合学院教学需要,降低了排课管理工作的工作量和节省了时间,同时课程安排完成后,学院可迅速获得课表情况信息,为教学工作带来方便。本系统界面友好,操作简单,使用方便。

二、 系统总体设计(15分)

1.系统功能描述

1.1 基本信息管理:教师、教室、班级、课程、教学任务等数据的输入、编辑功能;

1.2 数据处理:自动排课、课表修改、删除功能;

1

周秋艳 1.3 数据输出:桌面查询教师、教室、班级课程表,报表打印教师、教室、班级课程表;

1.4 帮助:指导用户使用该系统及其他相关说明。

2 系统功能设计

分析目前市场上流行的各种排课软件,它们都具有比较完善的功能,但在真正的排课算法上都会有些问题,因为排课算法最关键的问题是如何解决各式各样的冲突。在做需求分析的过程中,通过调查得知目前排课人员对排课算法的主要要求有:

2.1 怎样的合班组合能避免冲突?

目前采取的方式是相同或相近的专业的班级组合。

2.2 什么地方有空能排课?

对教室和班级而言是查空,对教师而言是有无排课需求。

2.3 有两个以上的空哪一个更好?

是要考虑离散和平衡问题。

2.4 排课前如何考虑教师宏观利用问题?

例如:多媒体大班课:大学英语、高等数学尽量排在上午,

思想道德修养、马克思主义哲学原理等尽量排在下午。

2.5 对于数量巨大的信息,系统仍具有较快的响应速度和较小的系统开销。

三、 系统功能模块分析(25分)

详细分析各功能模块之间的关系,以及各功能模块下的子模块构成。

2 2008—2009 学年度<>课程设计

1 系统总体模块分析如下

各类基本信息

1

信息管理

排课所需信息

2 排课

已排课表信息

2 登陆子模块分析如下

用户

3 管理员子模块分析如下

进入相应的角色页面

succeed

点击进入

3 输出排课

登录模块

管理员模块

教师模块

注销模块

登录页面

用户输入用户名,密码,并选择自己的角色

登录校验

failed

返回到登录页面

3

周秋艳

教师

班级

1.1 添加 教室

需添加信息

课程

管理员

详细信息 教学任务

查询关键字

1.2 查询 学院

专业系别

教室类型

需删除信息

1.3 删除

4 教师子模块分析如下

教师

查看自己被分配的课程

课程详细信息

查看课程表

5 注销子模块分析如下

用户

点击注销

返回到登录页面

注销

四、 数据库设计和建立(15分)

1、 与前面功能模块的划分相一致的建立合理的关系数据库,详细说明各关系表的属性与描述(每张关系表适当

4 2008—2009 学年度<>课程设计

添加说明)。

数据库名称是PK,此数据库包含10张关系表,它们分别是:

表1:ChooseCourse

表2:ClassInfo

表3:CourseGeneral

表4:Department

表5:RoomInfo

表6:Speciality

表7:TermInfo

5

周秋艳 表8:TimeInfo

表9:Timetabel

表10:UserInfo

2、 建立数据库及表之间的关系图。

6 2008—2009 学年度<>课程设计

3、 说明系统与数据库的连接方式。

此系统使用的数据库是SQL Server2000,连接数据库时用的方法是在系统配置文件中添加一连接字符串:

五、 主要界面及相关代码分析(35分)

通过系统目标和数据分析创建好数据库后,接下来进行系统功能的开发和实现。

该系统流程图如图所示。

7

周秋艳

系统中采用的主要技术

1 用打开数据库的方法

程序中通过存取数据库的数据是以离线的数据为基础的,你可以在本地的机器上对数据集进行数据的添加、删除或修改,然后更新回真正的数据库。具体实现过程为以下几步:

1.第一种方案

1)首先要导入名称空间

<%@ Import namespace="System" %>

<%@ Import namespace="" %>

<%@ Import namespace="ent "%>

2)建立与数据库的连接

SqlConnection myconnection;

myconnection=new SqlConnection("server=localhost;uid=sa;pwd=;database=数据库名称");

3)在此数据连接上,执行SQL语句,返回所需的数据集

Stringc md="select * from数据表名称";

SqlDataAdapter mycommand = new SqlDataAdapter ( cmd,myconnection);

DataSet ds=new DataSet();

(ds,reg);

数据连接成功后,利用Sql的插入(INSERT)、删除(DELETE)和更新(UPDATE)命令

8 2008—2009 学年度<>课程设计

就可以很方便地实现数据库的管理。

2.第二种方案

当然我们也可以通过配置来实现

2 异常的捕获与控制

为了提高系统的交互性与运行的可靠性,系统对各类操作异常和运行异常进行捕获与控制。操作异常是利用提供的几个验证控件和设置下拉框来实现的,如录入试题时必须先选择章节、知识点、题型,采用下拉框的形式确保试题属于某一知识点;运行异常捕获是使用try()…catch()的结构实现的。如对数据库进行操作时,对用户输入的题目进行判断,若该题目存在,则提示数据已存在。具体实现如下:

try

{ eNonQuery();

="插入成功"; //插入成功

}

catch(SqlException exc)

{ if (==2627)

="数据已存在"; //数据已存在

else

=" error number is:" + exc. Number + e; //其它错误

}

其中lblout为一个label控件。

3 自动排课的算法分析

用户在自动排课时,可对排课提出多方面的要求,如从教师,教室,时间,课时数目等方面,同时满足多方面的要求并非易事;另外在数据量不是很大的时候要实现自动排课的成功率难度较大,因此排课的算法的优劣直接影响到所排课程的好坏,本系统采用随机排课方式,但是解决了排课算法中的冲突问题。(排课的具体实现代码在界面与代码分析中)

4 排课算法冲突解决方法分析

排课算法中的主要的冲突是教室冲突和教室冲突。我将再通过存储过程的来解决这样的冲突,下面介绍一学期16周,某一门课程32课时为例。

存储过程名为DetectArrangeCollision

CREATE PROCEDURE DetectArrangeCollision

@SureCourseID int,

@RoomID int,

@TimeID int,

@TermID int

as

declare @Arrange_id int

declare @UserID char(10)

select @UserID= from Timetabel inner join

ChooseCourse on urseID=urseID

where urseID=@SureCourseID

select @Arrange_id=Arrange_id from Timetabel where ( (RoomID

=@RoomID and TimeID=@TimeID ) or ( urseID in ( select

9

周秋艳 SureCourseID from ChooseCourse where UserID=@UserID)

and TimeID=@TimeID )) /*检查教室和教师冲突*/

if @Arrange_id <>null

begin

select * from Timetabel where Arrange_id=@Arrange_id /*查询出数据*/

end

else

begin

declare @currentID int

select @currentID=count(*)

from Timetabel

where SureCourseID= @SureCourseID and TermID= @TermID

if ( @currentID <=0)/*查看数据库中是否有重复*/

insert into Timetabel values (@TermID,@SureCourseID,@RoomID ,@TimeID)

select * from Timetabel where Arrange_id=0

end

GO

1.登录界面

public string[] UserLogin(string UserName,string password)

{String[] CheckLogin;int Permit=0;string UserID="";

SqlParameter[] parameters={new SqlParameter("@UserName",r ,50),

new SqlParameter("@UserPassword",r ,50),

new SqlParameter("@UserID", ,10),

new SqlParameter("@result", ,10),

new SqlParameter("@Permit", ,4) };

parameters[0].Value =UserName;

parameters[1].Value =password;

parameters[2].Direction=;

parameters[3].Direction=;

parameters[4].Direction=;

int rowsAffected;

RunProcedure("sp_UserLogin",parameters,out rowsAffected);

if (parameters[4].Value!=)

{Permit= 32(parameters[4].Value);}

//设没有这个老师,2008.9.26

if (parameters[2].Value!=)

// result: NoUser// success,or nouser,or pswerror,// Permit, 如果角色还没分配怎么办

10 2008—2009 学年度<>课程设计

{UserID=ng(parameters[2].Value); }

CheckLogin=new string []

{ UserID, (String)(parameters[3].Value), ng(Permit)

};return (CheckLogin);}

2.自动排课界面

private void PK_Click(object sender, rgs e)

{int j;int k;string r;

();

SqlCommand del = new SqlCommand("delete Timetabel where

TermID='"+32(ng().Trim())+"'", con);

eNonQuery();//清空Timetabel表里面所有教师任课的信息

DataSet ds = new DataSet();

SqlDataAdapter da = new SqlDataAdapter("SELECT CourseID FROM CourseGeneral",con);

(ds, "CourseID");

for (int i = 0; i < [0].; i++)

{SqlCommand coure = new SqlCommand("select CourseName,Period from CourseGeneral where

CourseID='" + [0].Rows[i][0] + "' ", con);

SqlDataReader reader1 = eReader();

if(())

{string cr = ue(0).ToString();

pr = ue(1).ToString();}

();

if((pr)/16==2){

SqlCommand cmd = new SqlCommand("select RoomID from RoomInfo", con);//调用存储过程,筛选出某门课程某个班级上

11

周秋艳 SqlDataReader dr = eReader();

j = 0;

k = 0;

while (()){

field1[j] = dr[0].ToString();

j++;} //获得该课程给定时间的每个可用场地,附值给数组field1[j]

();

SqlCommand cmd1 = new SqlCommand("SELECT SureCourseID FROM ChooseCourse where CourseID in

(select CourseID from CourseGeneral where =32) ", con);

SqlDataReader dr1 = eReader();

while (()){

class1[k] = dr1[0].ToString();

k++;}//获得确定,附值给class1[k]

();

Random rnd = new Random();

for (int m =0; m<10; m++)//随即调换class1数组里面的成员{

int x = (j);//得0~k的随机数

r = field1[x];

field1[x] = field1[0];//第一个跟第x个调换

field1[0] = r;}

for (int n = 0;n

SqlCommand cm=new SqlCommand("DetectArrangeCollision",con);

dType=Procedure;

(new SqlParameter("@SureCourseID",,4));

(new SqlParameter("@RoomID",,4));

(new SqlParameter("@TimeID",,4));

(new SqlParameter("@TermID",,4));

ters["@SureCourseID"].Value=32(class1[n]).ToString().Trim();

if(32(field1[n])!=0){

ters["@RoomID"].Value=32(field1[n]);}

else{

int n1=(j);

12 2008—2009 学年度<>课程设计

ters["@RoomID"].Value=32(field1[n1]);}

ters["@TimeID"].Value=(24)+1;

ters["@TermID"].Value=32(ng().Trim());

eNonQuery();}}

else if((pr)==64)

{SqlCommand cmd = new SqlCommand("select RoomID from RoomInfo", con);//调用存储过程,筛选出某门课程某个班级上

SqlDataReader dr = eReader();

j = 0;k = 0;

while (())

{field1[j] = dr[0].ToString();

j++;} //获得该课程给定时间的每个可用场地,附值给数组field1[j]

();

SqlCommand cmd1 = new SqlCommand("SELECT SureCourseID FROM ChooseCourse where CourseID in

(select CourseID from CourseGeneral where =64) ", con);

SqlDataReader dr1 = eReader();

while (())

{class1[k] = dr1[0].ToString();

k++;}//获得确定,附值给class1[k]

();

Random rnd = new Random();

for (int m =0; m<10; m++)//随即调换class1数组里面的成员

{int x =(j);//得0~k的随机数

r = field1[x];

field1[x] = field1[0];//第一个跟第x个调换

field1[0] = r;}

for (int q = 0;q

{for(int n= 0;n

SqlCommand cm=new SqlCommand("DetectArrangeCollision1",con);

dType=Procedure;

(new SqlParameter("@SureCourseID",,4));

(new SqlParameter("@RoomID",,4));

(new SqlParameter("@TimeID",,4));

13

周秋艳 (new SqlParameter("@TermID",,4));

ters["@SureCourseID"].Value=32(class1[n]).ToString().Trim();

if(32(field1[n])!=0)

{ int z= (j);

ters["@RoomID"].Value=32(field1[z]);}

else{

int n1=(j);

ters["@RoomID"].Value=32(field1[n1]);}

ters["@TimeID"].Value=(24)+1;

ters["@TermID"].Value=32(ng().Trim());

eNonQuery();}}}}

("");

();}

14

2023年6月21日发(作者:)

2008~2009学年度《WEB 程序设计》

课程设计

班级: 05网络3班

学号:

姓名: 周秋艳

2008年 12月 17日

2008—2009 学年度<>课程设计

基于WEB的高校教师排课系统

一、 用户需求分析(10分)

学校教务的管理作为高校教育信息化工作中的一项重要工作,如何构建一个具有开放性、实用性和灵活性的平台,是一个值得探讨的课题。其中,作为学校教务重点环节之一的排课系统也尤为重要。

先前,在统筹安排各班级上课的时间需要人工实现,而且经常会出现同时有多个班级要使用教室的冲突。既耗时又耗精力,随着计算机技术的不断发展,计算机技术在各领域的充分完美应用,以学校的教务管理为该系统的应用背景,开发一个教室智能排课系统。

此系统开发主要包括后台数据库的建立和前端应用程序的开发两个方面。系统采用Visual Basic 6.0开发工具和SQL Server 2000作为后台数据库开发的应用软件。该系统实现上机时间的安排,课程的安排,教室的安排,以及它们之间的不冲突和资源的高效利用;这更切合学院教学需要,降低了排课管理工作的工作量和节省了时间,同时课程安排完成后,学院可迅速获得课表情况信息,为教学工作带来方便。本系统界面友好,操作简单,使用方便。

二、 系统总体设计(15分)

1.系统功能描述

1.1 基本信息管理:教师、教室、班级、课程、教学任务等数据的输入、编辑功能;

1.2 数据处理:自动排课、课表修改、删除功能;

1

周秋艳 1.3 数据输出:桌面查询教师、教室、班级课程表,报表打印教师、教室、班级课程表;

1.4 帮助:指导用户使用该系统及其他相关说明。

2 系统功能设计

分析目前市场上流行的各种排课软件,它们都具有比较完善的功能,但在真正的排课算法上都会有些问题,因为排课算法最关键的问题是如何解决各式各样的冲突。在做需求分析的过程中,通过调查得知目前排课人员对排课算法的主要要求有:

2.1 怎样的合班组合能避免冲突?

目前采取的方式是相同或相近的专业的班级组合。

2.2 什么地方有空能排课?

对教室和班级而言是查空,对教师而言是有无排课需求。

2.3 有两个以上的空哪一个更好?

是要考虑离散和平衡问题。

2.4 排课前如何考虑教师宏观利用问题?

例如:多媒体大班课:大学英语、高等数学尽量排在上午,

思想道德修养、马克思主义哲学原理等尽量排在下午。

2.5 对于数量巨大的信息,系统仍具有较快的响应速度和较小的系统开销。

三、 系统功能模块分析(25分)

详细分析各功能模块之间的关系,以及各功能模块下的子模块构成。

2 2008—2009 学年度<>课程设计

1 系统总体模块分析如下

各类基本信息

1

信息管理

排课所需信息

2 排课

已排课表信息

2 登陆子模块分析如下

用户

3 管理员子模块分析如下

进入相应的角色页面

succeed

点击进入

3 输出排课

登录模块

管理员模块

教师模块

注销模块

登录页面

用户输入用户名,密码,并选择自己的角色

登录校验

failed

返回到登录页面

3

周秋艳

教师

班级

1.1 添加 教室

需添加信息

课程

管理员

详细信息 教学任务

查询关键字

1.2 查询 学院

专业系别

教室类型

需删除信息

1.3 删除

4 教师子模块分析如下

教师

查看自己被分配的课程

课程详细信息

查看课程表

5 注销子模块分析如下

用户

点击注销

返回到登录页面

注销

四、 数据库设计和建立(15分)

1、 与前面功能模块的划分相一致的建立合理的关系数据库,详细说明各关系表的属性与描述(每张关系表适当

4 2008—2009 学年度<>课程设计

添加说明)。

数据库名称是PK,此数据库包含10张关系表,它们分别是:

表1:ChooseCourse

表2:ClassInfo

表3:CourseGeneral

表4:Department

表5:RoomInfo

表6:Speciality

表7:TermInfo

5

周秋艳 表8:TimeInfo

表9:Timetabel

表10:UserInfo

2、 建立数据库及表之间的关系图。

6 2008—2009 学年度<>课程设计

3、 说明系统与数据库的连接方式。

此系统使用的数据库是SQL Server2000,连接数据库时用的方法是在系统配置文件中添加一连接字符串:

五、 主要界面及相关代码分析(35分)

通过系统目标和数据分析创建好数据库后,接下来进行系统功能的开发和实现。

该系统流程图如图所示。

7

周秋艳

系统中采用的主要技术

1 用打开数据库的方法

程序中通过存取数据库的数据是以离线的数据为基础的,你可以在本地的机器上对数据集进行数据的添加、删除或修改,然后更新回真正的数据库。具体实现过程为以下几步:

1.第一种方案

1)首先要导入名称空间

<%@ Import namespace="System" %>

<%@ Import namespace="" %>

<%@ Import namespace="ent "%>

2)建立与数据库的连接

SqlConnection myconnection;

myconnection=new SqlConnection("server=localhost;uid=sa;pwd=;database=数据库名称");

3)在此数据连接上,执行SQL语句,返回所需的数据集

Stringc md="select * from数据表名称";

SqlDataAdapter mycommand = new SqlDataAdapter ( cmd,myconnection);

DataSet ds=new DataSet();

(ds,reg);

数据连接成功后,利用Sql的插入(INSERT)、删除(DELETE)和更新(UPDATE)命令

8 2008—2009 学年度<>课程设计

就可以很方便地实现数据库的管理。

2.第二种方案

当然我们也可以通过配置来实现

2 异常的捕获与控制

为了提高系统的交互性与运行的可靠性,系统对各类操作异常和运行异常进行捕获与控制。操作异常是利用提供的几个验证控件和设置下拉框来实现的,如录入试题时必须先选择章节、知识点、题型,采用下拉框的形式确保试题属于某一知识点;运行异常捕获是使用try()…catch()的结构实现的。如对数据库进行操作时,对用户输入的题目进行判断,若该题目存在,则提示数据已存在。具体实现如下:

try

{ eNonQuery();

="插入成功"; //插入成功

}

catch(SqlException exc)

{ if (==2627)

="数据已存在"; //数据已存在

else

=" error number is:" + exc. Number + e; //其它错误

}

其中lblout为一个label控件。

3 自动排课的算法分析

用户在自动排课时,可对排课提出多方面的要求,如从教师,教室,时间,课时数目等方面,同时满足多方面的要求并非易事;另外在数据量不是很大的时候要实现自动排课的成功率难度较大,因此排课的算法的优劣直接影响到所排课程的好坏,本系统采用随机排课方式,但是解决了排课算法中的冲突问题。(排课的具体实现代码在界面与代码分析中)

4 排课算法冲突解决方法分析

排课算法中的主要的冲突是教室冲突和教室冲突。我将再通过存储过程的来解决这样的冲突,下面介绍一学期16周,某一门课程32课时为例。

存储过程名为DetectArrangeCollision

CREATE PROCEDURE DetectArrangeCollision

@SureCourseID int,

@RoomID int,

@TimeID int,

@TermID int

as

declare @Arrange_id int

declare @UserID char(10)

select @UserID= from Timetabel inner join

ChooseCourse on urseID=urseID

where urseID=@SureCourseID

select @Arrange_id=Arrange_id from Timetabel where ( (RoomID

=@RoomID and TimeID=@TimeID ) or ( urseID in ( select

9

周秋艳 SureCourseID from ChooseCourse where UserID=@UserID)

and TimeID=@TimeID )) /*检查教室和教师冲突*/

if @Arrange_id <>null

begin

select * from Timetabel where Arrange_id=@Arrange_id /*查询出数据*/

end

else

begin

declare @currentID int

select @currentID=count(*)

from Timetabel

where SureCourseID= @SureCourseID and TermID= @TermID

if ( @currentID <=0)/*查看数据库中是否有重复*/

insert into Timetabel values (@TermID,@SureCourseID,@RoomID ,@TimeID)

select * from Timetabel where Arrange_id=0

end

GO

1.登录界面

public string[] UserLogin(string UserName,string password)

{String[] CheckLogin;int Permit=0;string UserID="";

SqlParameter[] parameters={new SqlParameter("@UserName",r ,50),

new SqlParameter("@UserPassword",r ,50),

new SqlParameter("@UserID", ,10),

new SqlParameter("@result", ,10),

new SqlParameter("@Permit", ,4) };

parameters[0].Value =UserName;

parameters[1].Value =password;

parameters[2].Direction=;

parameters[3].Direction=;

parameters[4].Direction=;

int rowsAffected;

RunProcedure("sp_UserLogin",parameters,out rowsAffected);

if (parameters[4].Value!=)

{Permit= 32(parameters[4].Value);}

//设没有这个老师,2008.9.26

if (parameters[2].Value!=)

// result: NoUser// success,or nouser,or pswerror,// Permit, 如果角色还没分配怎么办

10 2008—2009 学年度<>课程设计

{UserID=ng(parameters[2].Value); }

CheckLogin=new string []

{ UserID, (String)(parameters[3].Value), ng(Permit)

};return (CheckLogin);}

2.自动排课界面

private void PK_Click(object sender, rgs e)

{int j;int k;string r;

();

SqlCommand del = new SqlCommand("delete Timetabel where

TermID='"+32(ng().Trim())+"'", con);

eNonQuery();//清空Timetabel表里面所有教师任课的信息

DataSet ds = new DataSet();

SqlDataAdapter da = new SqlDataAdapter("SELECT CourseID FROM CourseGeneral",con);

(ds, "CourseID");

for (int i = 0; i < [0].; i++)

{SqlCommand coure = new SqlCommand("select CourseName,Period from CourseGeneral where

CourseID='" + [0].Rows[i][0] + "' ", con);

SqlDataReader reader1 = eReader();

if(())

{string cr = ue(0).ToString();

pr = ue(1).ToString();}

();

if((pr)/16==2){

SqlCommand cmd = new SqlCommand("select RoomID from RoomInfo", con);//调用存储过程,筛选出某门课程某个班级上

11

周秋艳 SqlDataReader dr = eReader();

j = 0;

k = 0;

while (()){

field1[j] = dr[0].ToString();

j++;} //获得该课程给定时间的每个可用场地,附值给数组field1[j]

();

SqlCommand cmd1 = new SqlCommand("SELECT SureCourseID FROM ChooseCourse where CourseID in

(select CourseID from CourseGeneral where =32) ", con);

SqlDataReader dr1 = eReader();

while (()){

class1[k] = dr1[0].ToString();

k++;}//获得确定,附值给class1[k]

();

Random rnd = new Random();

for (int m =0; m<10; m++)//随即调换class1数组里面的成员{

int x = (j);//得0~k的随机数

r = field1[x];

field1[x] = field1[0];//第一个跟第x个调换

field1[0] = r;}

for (int n = 0;n

SqlCommand cm=new SqlCommand("DetectArrangeCollision",con);

dType=Procedure;

(new SqlParameter("@SureCourseID",,4));

(new SqlParameter("@RoomID",,4));

(new SqlParameter("@TimeID",,4));

(new SqlParameter("@TermID",,4));

ters["@SureCourseID"].Value=32(class1[n]).ToString().Trim();

if(32(field1[n])!=0){

ters["@RoomID"].Value=32(field1[n]);}

else{

int n1=(j);

12 2008—2009 学年度<>课程设计

ters["@RoomID"].Value=32(field1[n1]);}

ters["@TimeID"].Value=(24)+1;

ters["@TermID"].Value=32(ng().Trim());

eNonQuery();}}

else if((pr)==64)

{SqlCommand cmd = new SqlCommand("select RoomID from RoomInfo", con);//调用存储过程,筛选出某门课程某个班级上

SqlDataReader dr = eReader();

j = 0;k = 0;

while (())

{field1[j] = dr[0].ToString();

j++;} //获得该课程给定时间的每个可用场地,附值给数组field1[j]

();

SqlCommand cmd1 = new SqlCommand("SELECT SureCourseID FROM ChooseCourse where CourseID in

(select CourseID from CourseGeneral where =64) ", con);

SqlDataReader dr1 = eReader();

while (())

{class1[k] = dr1[0].ToString();

k++;}//获得确定,附值给class1[k]

();

Random rnd = new Random();

for (int m =0; m<10; m++)//随即调换class1数组里面的成员

{int x =(j);//得0~k的随机数

r = field1[x];

field1[x] = field1[0];//第一个跟第x个调换

field1[0] = r;}

for (int q = 0;q

{for(int n= 0;n

SqlCommand cm=new SqlCommand("DetectArrangeCollision1",con);

dType=Procedure;

(new SqlParameter("@SureCourseID",,4));

(new SqlParameter("@RoomID",,4));

(new SqlParameter("@TimeID",,4));

13

周秋艳 (new SqlParameter("@TermID",,4));

ters["@SureCourseID"].Value=32(class1[n]).ToString().Trim();

if(32(field1[n])!=0)

{ int z= (j);

ters["@RoomID"].Value=32(field1[z]);}

else{

int n1=(j);

ters["@RoomID"].Value=32(field1[n1]);}

ters["@TimeID"].Value=(24)+1;

ters["@TermID"].Value=32(ng().Trim());

eNonQuery();}}}}

("");

();}

14