课程设计自动排课系统Word格式文档下载.docx

上传人:b****2 文档编号:5224148 上传时间:2023-05-04 格式:DOCX 页数:16 大小:119.38KB
下载 相关 举报
课程设计自动排课系统Word格式文档下载.docx_第1页
第1页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第2页
第2页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第3页
第3页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第4页
第4页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第5页
第5页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第6页
第6页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第7页
第7页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第8页
第8页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第9页
第9页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第10页
第10页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第11页
第11页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第12页
第12页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第13页
第13页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第14页
第14页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第15页
第15页 / 共16页
课程设计自动排课系统Word格式文档下载.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

课程设计自动排课系统Word格式文档下载.docx

《课程设计自动排课系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《课程设计自动排课系统Word格式文档下载.docx(16页珍藏版)》请在冰点文库上搜索。

课程设计自动排课系统Word格式文档下载.docx

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

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

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

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

例如:

多媒体大班课:

大学英语、高等数学尽可能排在上午,

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

 

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

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

详细分析各功能模块之间的关系,和各功能模块下的子模块组成。

1系统整体模块分析如下

2排课

各类大体信息1信息治理排课所需信息

已排课表信息

3输出排课

教师模块

登录模块注销模块

治理员模块

2登岸子模块分析如下

返回到登录页面

进入相应的角色页面

登录页面

登录校验

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

点击进入

用户succeedfailed

3治理员子模块分析如下

管理员

教师

班级

1.1添加教室

需添加信息

课程

1.3删除

详细信息教学任务

查询关键字

1.2查询学院

专业系别

教室类型

需删除信息

4教师子模块分析如下

教师

查看课程表

查看自己被分派的课程

课程详细信息

5注销子模块分析如下

用户

注销

点击注销

返回到登录页面

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

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

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

表1:

ChooseCourse

表2:

ClassInfo

表3:

CourseGeneral

表4:

Department

表5:

RoomInfo

表6:

Speciality

表7:

TermInfo

表8:

TimeInfo

表9:

Timetabel

表10:

UserInfo

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

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

此系统利用的数据库是SQLServer2000,连接数据库时用的方式是在系统配置文件Web.config中添加连续接字符串:

<

addkey="

dsn"

value="

server=(local);

database=Paike;

UserID=sa;

password=123;

MaxPoolSize=1000"

/>

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

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

该系统流程图如下图。

系统中采纳的要紧技术

1

ASP.NET程序中通过ADO.NET存取数据库的数据ADO.NET是以离线的数据为基础的,你能够在本地的机械上对数据集进行数据的添加、删除或修改,然后更新回真正的数据库。

具体实现进程为以下几步:

1)第一要导入名称空间

<

%@Importnamespace="

System"

%>

System.Data"

System.Data.SqlClient"

%>

2)成立与数据库的连接

SqlConnectionmyconnection;

myconnection=newSqlConnection("

server=localhost;

uid=sa;

pwd=;

database=数据库名称"

);

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

Stringcmd="

select*from数据表名称"

;

SqlDataAdaptermycommand=newSqlDataAdapter(cmd,myconnection);

DataSetds=newDataSet();

mycommand.Fill(ds,reg);

数据连接成功后,利用Sql的插入(INSERT)、删除(DELETE)和更新(UPDATE)命令就能够够很方便地实现数据库的治理。

value="

DataSource=(local);

UID=sa;

PWD=jianglian;

DATABASE=tkxt"

/>

2 异样的捕捉与操纵

为了提高系统的交互性与运行的靠得住性,系统对各类操作异样和运行异样进行捕捉与操纵。

操作异样是利用ASP.NET提供的几个验证控件和设置下拉框来实现的,如录入试题时必需先选择章节、知识点、题型,采纳下拉框的形式确保试题属于某一知识点;

运行异样捕捉是利用try()…catch()的结构实现的。

如对数据库进行操作时,对用户输入的题目进行判定,假设该题目存在,那么提示数据已存在。

具体实现如下:

try

{mycommand.ExecuteNonQuery();

lblout.Text="

插入成功"

//插入成功

}

catch(SqlExceptionexc)

{if(exc.Number==2627)

数据已存在"

//数据已存在

else

lblout.Text="

errornumberis:

"

+exc.Number+exc.Message;

//其它错误

其中lblout为一个label控件。

3 自动排课的算法分析

用户在自动排课时,可对排课提出多方面的要求,如从教师,教室,时刻,课时数量等方面,同时知足多方面的要求并非易事;

另外在数据量不是专门大的时候要实现自动排课的成功率难度较大,因此排课的算法的好坏直接阻碍到所排课程的好坏,本系统采纳随机排课方式,可是解决了排课算法中的冲突问题。

(排课的具体实现代码在界面与代码分析中)

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

排课算法中的要紧的冲突是教室冲突和教室冲突。

我将再通过存储进程的来解决如此的冲突,下面介绍一学期16周,某一门课程32课时为例。

存储进程名为DetectArrangeCollision

CREATEPROCEDUREDetectArrangeCollision

@SureCourseIDint,

@RoomIDint,

@TimeIDint,

@TermIDint

as

declare@Arrange_idint

declare@UserIDchar(10)

select@UserID=ChooseCourse.UserIDfromTimetabelinnerjoin

whereChooseCourse.SureCourseID=@SureCourseID

select@Arrange_id=Arrange_idfromTimetabelwhere((RoomID=@RoomIDandTimeID=@TimeID)or(Timetabel.SureCourseIDin(selectSureCourseIDfromChooseCoursewhereUserID=@UserID)

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

if@Arrange_id<

>

null

begin

select*fromTimetabelwhereArrange_id=@Arrange_id/*查询出数据*/

end

else

begin

declare@currentIDint

select@currentID=count(*)

fromTimetabel

whereSureCourseID=@SureCourseIDandTermID=@TermID

if(@currentID<

=0)/*查看数据库中是不是有重复*/

insertintoTimetabelvalues(@TermID,@SureCourseID,@RoomID,@TimeID)

select*fromTimetabelwhereArrange_id=0

GO

1.登录界面login.aspx

publicstring[]UserLogin(stringUserName,stringpassword)

{String[]CheckLogin;

intPermit=0;

stringUserID="

SqlParameter[]parameters={newSqlParameter("

@UserName"

SqlDbType.VarChar,50),

newSqlParameter("

@UserPassword"

@UserID"

SqlDbType.Char,10),

@result"

@Permit"

SqlDbType.Int,4)};

parameters[0].Value=UserName;

parameters[1].Value=password;

parameters[2].Direction=ParameterDirection.Output;

tput;

parameters[4].Direction=ParameterDirection.Output;

introwsAffected;

RunProcedure("

sp_UserLogin"

parameters,outrowsAffected);

//result:

NoUser//success,ornouser,orpswerror,//Permit,若是角色还没分派如何办

ife)

{Permit=Convert.ToInt32(parameters[4].Value);

//设没有那个教师

if(parameters[2].Value!

=DBNull.Value)

{UserID=Convert.ToString(parameters[2].Value);

}

CheckLogin=newstring[]

{UserID,(String)(parameters[3].Value),Convert.ToString(Permit)};

return(CheckLogin);

2.自动排课界面

GenerateTimeTabl

privatevoidPK_Click(objectsender,System.EventArgse)

{intj;

intk;

stringr;

con.Open();

SqlCommanddel=newSqlCommand("

deleteTimetabelwhereTermID='

+Convert.ToInt32(ddl1.SelectedValue.ToString().Trim())+"

'

con);

del.ExecuteNonQuery();

//清空Timetabel内外面所有教师任课的信息

DataSetds=newDataSet();

SqlDataAdapterda=newSqlDataAdapter("

SELECTCourseIDFROMCourseGeneral"

con);

da.Fill(ds,"

CourseID"

for(inti=0;

i<

ds.Tables[0].Rows.Count;

i++)

{SqlCommandcoure=newSqlCommand("

selectCourseName,PeriodfromCourseGeneralwhereCourseID='

+ds.Tables[0].Rows[i][0]+"

"

SqlDataReaderreader1=coure.ExecuteReader();

if(reader1.Read())

{stringcr=reader1.GetValue(0).ToString();

pr=reader1.GetValue

(1).ToString();

reader1.Close();

if(int.Parse(pr)/16==2){

SqlCommandcmd=newSqlCommand("

selectRoomIDfromRoomInfo"

//挪用存储进程,挑选出某门课程某个班级上

SqlDataReaderdr=cmd.ExecuteReader();

j=0;

k=0;

while(dr.Read()){

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

j++;

}//取得该课程给按时刻的每一个可用处地,附值给数组field1[j]

dr.Close();

SqlCommandcmd1=newSqlCommand("

SELECTSureCourseIDFROMChooseCoursewhereCourseIDin(selectCourseIDfromCourseGeneralwhereCourseGeneral.Period=32)"

SqlDataReaderdr1=cmd1.ExecuteReader();

while(dr1.Read()){

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

k++;

}//取得确信,附值给class1[k]

dr1.Close();

Randomrnd=newRandom();

for(intm=0;

m<

10;

m++)//随即调换class1数组里面的成员{

intx=rnd.Next(j);

//得0~k的随机数

r=field1[x];

field1[x]=field1[0];

//第一个跟第x个调换

field1[0]=r;

for(intn=0;

n<

k;

n++)//下面为更新插入数据库的操作{

SqlCommandcm=newSqlCommand("

DetectArrangeCollision"

cm.CommandType=CommandType.StoredProcedure;

cm.Parameters.Add(newSqlParameter("

@SureCourseID"

SqlDbType.Int,4));

@RoomID"

@TimeID"

@TermID"

cm.Parameters["

].Value=Convert.ToInt32(class1[n]).ToString().Trim();

if(Convert.ToInt32(field1[n])!

=0){

].Value=Convert.ToInt32(field1[n]);

else{

intn1=rnd.Next(j);

].Value=Convert.ToInt32(field1[n1]);

].Value=rnd.Next(24)+1;

].Value=Convert.ToInt32(ddl1.SelectedValue.ToString().Trim());

cm.ExecuteNonQuery();

}}

elseif(int.Parse(pr)==64)

{SqlCommandcmd=newSqlCommand("

while(dr.Read())

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

SELECTSureCourseIDFROMChooseCoursewhereCourseIDin(selectCourseIDfromCourseGeneralwhereCourseGeneral.Period=64)"

while(dr1.Read())

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

m++)//随即调换class1数组里面的成员

{intx=rnd.Next(j);

for(intq=0;

q<

q++)//下面为更新插入数据库的操作

{for(intn=0;

n++){

DetectArrangeCollision1"

=0)

{intz=rnd.Next(j);

].Value=Convert.ToInt32(field1[z]);

}}}}

Response.Write("

script>

alert('

排课完毕!

)<

/script>

con.Close();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2