教学材料《Web应用开发》-第九章_第1页
教学材料《Web应用开发》-第九章_第2页
教学材料《Web应用开发》-第九章_第3页
教学材料《Web应用开发》-第九章_第4页
教学材料《Web应用开发》-第九章_第5页
已阅读5页,还剩213页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9.1

系统总体设计随着无纸化办公的推进,信息的自动处理以及网络式的信息交互方式越来越多地得到人们的认可和应用。通过计算机来管理学生的信息是现在各个高校都在积极进行的工作,也是高校教学管理工作的重要内容。网上选课系统是高校教学领域的一个重要系统,它可以方便教务人员管理教师、学生、课程信息,方便教师评定学生成绩,方便学生选择课程,提高了教学过程中的工作效率,降低了学校的管理成本。下一页返回9.1

系统总体设计1.系统功能描述网上选课系统包括管理员、教师和学生三类用户。各类用户所具有的功能作以下介绍。(1)系统管理员①管理教师和学生的信息:可实现对教师和学生信息的添加和删除操作。②管理学校教室信息:可实现对学校所有可用教室信息的管理。③设置选课有效时间:可设置选课时间,在规定时间内,上一页下一页返回9.1

系统总体设计学生可以选择课程,超过时间,学生信息将被锁定不能实现选课功能。④开设课程:可实现开设课程,设置课程的信息,如选修、必修,课程的最大人数,上课教师等。⑤设置上课的时间、地点:可以设置上课的时间和地点。(2)教师①管理教师个人信息:可查看、修改教师本人的信息。②给学生评分:课程结束后,教师可为学生评定成绩,若成绩合格学生可得到相应学分。上一页下一页返回9.1

系统总体设计(3)学生①管理学生个人信息:可查看、修改学生本人的信息。②查看必修课:可以查看所有的必修课程情况。如课程信息、上课时间、地点等。③选择选修课:选择选修课,并可查看选课的课程情况,确定所选课程后,可锁定选课信息,以防不小心被修改。④查看选课情况:可以显示学生所选择的所有课程情况,若课程信息未被锁定,则可以退选。上一页下一页返回9.1

系统总体设计⑤查看成绩:课程结束后,可以查看自己的课程成绩和所得的学分。2.系统结构设计网上选课系统可分为管理员、教师、学生三种用户身份登录,登录成功后会自动跳转到对应的页面中,系统功能结构图如图9-1所示。3.系统预览由于篇幅所限,此处只展示部分页面的效果图。使用本系统需要首先登录,登录页面如图9-2所示,假设以管理员上一页下一页返回9.1

系统总体设计admin身份登录,如果输入错误,则转到报错页面Error.aspx(如图9-3所示),如果输入正确则进入管理员页面。管理员页面是以母版页形式实现的,点击页面左侧的各功能,可以跳转到相应页面,如教师信息管理页面(如图9-4所示)和教室信息管理页面(如图9-5所示)。上一页返回9.2

数据库设计本系统使用SQLServer2005数据库,所使用的数据库名为ChooseClass,共包括8张表。管理员表:用来存储系统管理员的信息,见表9-1。教师表:用来存储教师的个人信息,见表9-2。学生表:用来存储学生的个人信息,见表9-3。课程表:用来存储课程信息,见表9-4。选课信息表:用来存储学生的选课情况,见表9-5。上课时间地点表:用来存储课程的上课时间和上课起点信息。如表9-6所示。教学楼信息表:用来存储教学楼的情况,见表9-7。教室信息表:用来存储教室的情况,见表9-8。返回9.3

Web.Config与公共类1.Web.Config文件为了增加程序的灵活性,把数据库连接信息存放在Web.Config文件中。打开Web.Config文件,在<configuration>下面输入如下代码:<configuration><connectionStrings><addname="CString"connectionString="DataSource=localhost;InitialCatalog=ChooseClass;IntegratedSecurity=True"下一页返回9.3

Web.Config与公共类providerName="System.Data.SqlClient"/></connectionStrings></configuration>对上述代码作以下说明。①程序调用格式如下:stringconn=WebConfigurationManager.ConnectionStrings["CString"].ConnectionString;上一页下一页返回9.3

Web.Config与公共类②ASP.NET2.0连接字符串的设置是通过WebConfigurationMannager来管理的,它属于System.Web.Configuration命名空间,需要在应用程序中包含该命名空间,代码如下:usingSystem.Web.Configuration;③本例中的的SQLServer采用集成Windows身份验证方式登录,如果采用SQLServer身份验证方式登录,代码可写为:上一页下一页返回9.3

Web.Config与公共类<addname="CString"connectionString="DataSource=localhost;InitialCatalog=ChooseClass;UserID=sa;Password=sa"providerName="System.Data.SqlClient"/>2.数据库操作的公共类在选课系统中,需要经常操作数据库,为了避免代码的重复编写,把数据库操作的共同部分提炼出来,封装到一个类中上一页下一页返回9.3

Web.Config与公共类以后可以调用类中的方法实现数据库的操作。类Data.cs的关键代码如下:publicclassData{<!—数据库连接字符串-->protectedstaticstringconnString=WebConfigurationManager.ConnectionStrings["CString"].ConnectionString;<!—函数ExecuteSelectSql用来执行查询操作-->上一页下一页返回9.3

Web.Config与公共类publicstaticDataSetExecuteSelectSql(stringsqlSelect){//根据连接字符串创建数据库连接SqlConnectionconn=newSqlConnection(connString);//根据要执行的select语句和数据库连接创建数据适配器SqlDataAdaptersda=newSqlDataAdapter(sqlSelect,conn);上一页下一页返回9.3

Web.Config与公共类DataSetds=newDataSet();try{sda.Fill(ds);//执行语句,将结果填充到ds中}catch(SqlExceptione){thrownewException(e.Message);上一页下一页返回9.3

Web.Config与公共类}returnds;}<!—函数ExecuteSql用来执行修改、插入、删除操作-->publicstaticintExecuteSql(stringsql){introws=-1;//根据连接字符串创建数据库连接上一页下一页返回9.3

Web.Config与公共类SqlConnectionconn=newSqlConnection(connString);//根据要执行的sql语句和数据库连接创建数据适配器SqlCommandcmd=newSqlCommand(sql,conn);try{conn.Open();上一页下一页返回9.3

Web.Config与公共类rows=cmd.ExecuteNonQuery();//执行sql语句,并返回影响的行数}catch(SqlExceptione){thrownewException(e.Message);}finally{上一页下一页返回9.3

Web.Config与公共类cmd.Dispose();conn.Close();}returnrows;}<!—函数ExecuteInsertSql执行需要返回刚插入记录的identity的insert语句-->publicstaticintExecuteInsertSql(stringsqlInsert,refintidentity){上一页下一页返回9.3

Web.Config与公共类introws=-1;SqlConnectionconn=newSqlConnection(connString);SqlCommandcmd=newSqlCommand();try{conn.Open();}catch(SqlExceptione)上一页下一页返回9.3

Web.Config与公共类{thrownewException(e.Message);}SqlTransactiontrans=conn.BeginTransaction();try{cmd.Connection=conn;cmd.Transaction=trans;//执行insert语句上一页下一页返回9.3

Web.Config与公共类cmd.CommandText=sqlInsert;rows=cmd.ExecuteNonQuery();//select出identitycmd.CommandText="select@@identity";SqlDataReadersdr=cmd.ExecuteReader();if(sdr.Read()){identity=sdr.GetInt32(0);上一页下一页返回9.3

Web.Config与公共类}trans.Commit();}catch(System.Data.SqlClient.SqlExceptione){trans.Rollback();thrownewException(e.Message);}上一页下一页返回9.3

Web.Config与公共类finally{cmd.Dispose();conn.Close();}returnrows;}}上一页返回9.4

主要界面和相关代码9.4.1

登录界面在登录页面中可以根据不同用户的身份自动跳转到不同的功能页面。用户包括管理员、教师和学生,在用户身份验证通过后,系统利用Session变量记录其用户登录信息,分别进入管理员模块、教师模块和学生模块,并伴随用户对系统进行操作的整个生命周期。在项目中添加登录页面login.aspx,如图9-6所示进行布局,其中包括三个Label控件、两个TextBox控件、一个DropDownList控件和一个Button控件。下一页返回9.4

主要界面和相关代码当单击“登录”按钮时,需要对用户进行验证。首先根据用户不同的类型查询相应的数据表,将用户输入的密码用MD5加密后与数据表中取出的密码进行比较,若取出的密码为空说明用户不存在,若两者不匹配则说明用户输入的密码不正确,若两者相同则用户登录成功。“登录”按钮的Click事件代码如下:上一页下一页返回9.4

主要界面和相关代码protectedvoidbtnLogin_Click(objectsender,System.EventArgse){inttype=Int32.Parse(ddlType.SelectedItem.Value);//获取用户类型stringuser=txtUser.Text.Trim();上一页下一页返回9.4

主要界面和相关代码stringinputkey=txtKey.Text.Trim();stringkey="";stringsql="";DataSetds;switch(type){case1://验证学生身份上一页下一页返回9.4

主要界面和相关代码sql="selectSKeyfromStudentwhereSIdlike'"+user+"'";ds=Data.ExecuteSelectSql(sql);if(ds!=null&&ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0&&!ds.Tables[0].Rows[0].IsNull(0))//判断是否有返回数据,若无,则说明不存在该学生上一页下一页返回9.4

主要界面和相关代码{key=ds.Tables[0].Rows[0][0].ToString();if(MyUtility.MD5(inputkey)==key)//密码正确登录成功{Session["Id"]=user;//记录用户IDSession["Type"]=type;//记录用户类型上一页下一页返回9.4

主要界面和相关代码Response.Redirect("StudentMain.aspx");//转到学生主页}else//密码错误{Response.Redirect("Error.aspx?code="+ErrorInfo.ERR_KEYERROR.ToString());上一页下一页返回9.4

主要界面和相关代码}}else//不存在该学生{Response.Redirect("Error.aspx?code="+ErrorInfo.ERR_NOSTUDENT.ToString());上一页下一页返回9.4

主要界面和相关代码}break;case2://验证教师身份sql="selectTKeyfromTeacherwhereTIdlike'"+user+"'";ds=Data.ExecuteSelectSql(sql);if(ds!=null&&ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0&&!ds.Tables[0].Rows[0].IsNull(0))上一页下一页返回9.4

主要界面和相关代码{key=ds.Tables[0].Rows[0][0].ToString();if(MyUtility.MD5(inputkey)==key)//密码正确登录成功{Session["Id"]=user;Session["Type"]=type;Response.Redirect("TeacherMain.aspx");上一页下一页返回9.4

主要界面和相关代码}else{Response.Redirect("Error.aspx?code="+ErrorInfo.ERR_KEYERROR.ToString());}上一页下一页返回9.4

主要界面和相关代码}else{Response.Redirect("Error.aspx?code="+ErrorInfo.ERR_NOTEACHER.ToString());}上一页下一页返回9.4

主要界面和相关代码break;case3://验证系统管理员sql="selectAKeyfromAdminwhereAIdlike'"+user+"'";ds=Data.ExecuteSelectSql(sql);if(ds!=null&&ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0&&!ds.Tables[0].Rows[0].IsNull(0))上一页下一页返回9.4

主要界面和相关代码{key=ds.Tables[0].Rows[0][0].ToString();if(MyUtility.MD5(inputkey)==key)//密码正确登录成功{Session["Id"]=user;Session["Type"]=type;上一页下一页返回9.4

主要界面和相关代码Response.Redirect("Admin.aspx");}else//密码错误{Response.Redirect("Error.aspx?code="+ErrorInfo.ERR_KEYERROR.ToString());}上一页下一页返回9.4

主要界面和相关代码}else//不存在该系统管理员{Response.Redirect("Error.aspx?code="+ErrorInfo.ERR_NOADMIN.ToString());}break;上一页下一页返回9.4

主要界面和相关代码default:break;}}上一页返回下一页9.4

主要界面和相关代码9.4.2

管理员操作模块管理员模块可以设置选课时间、管理教师和学生信息、管理课程信息、管理教室信息等操作。1.管理员操作中公共页面的制作在管理员操作的多个页面中,存在一个相同的功能区域,为了避免编写代码的重复,可以把它制作成一个母版页面,然后在所需要的页面中插入即可。母版页面的后缀名为.master。下一页返回上一页9.4

主要界面和相关代码在“添加新项”窗口中,选择“母版页”选项,保存为“AdminMaster.master”,布局如图9-7所示。切换到源代码窗口,母版页面的代码如下:<%@MasterLanguage="C#"AutoEventWireup="true"CodeFile="AdminMaster.master.cs"Inherits="AdminMaster"%>上一页下一页返回9.4

主要界面和相关代码<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http:///TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="/1999/xhtml"><headrunat="server">上一页下一页返回9.4

主要界面和相关代码<title></title></head><body><formid="form1"runat="server"><div><tableborder="2"bordercolordark="#0000ff"bordercolorlight="#6600cc"style="width:100%;height:513px;">上一页下一页返回9.4

主要界面和相关代码<tr><tdstyle="height:37px;"colspan="2"background="images/logo2.gif"align="center"><asp:LabelID="Label1"runat="server"Font-Bold="True"Font-Size=上一页下一页返回9.4

主要界面和相关代码

"XX-Large"ForeColor="White"Text="管理员"Font-Names="隶书"></asp:Label></td></tr><tr><tdstyle="width:200px;height:185px;"><asp:HyperLinkid="hlkAdmin"style="Z-INDEX:105;LEFT:36px;上一页下一页返回9.4

主要界面和相关代码POSITION:absolute;TOP:110px"NavigateUrl="Time.aspx"runat="server"Width="137px"Font-Bold="True"Font-Size="Larger">设置选课时间</asp:HyperLink><asp:HyperLinkid="hlkAdminUser"style="Z-INDEX:101;LEFT:36px;上一页下一页返回9.4

主要界面和相关代码POSITION:absolute;TOP:161px"ForeColor="Black"NavigateUrl="AdminTUser.aspx"runat="server"Width="139px"Font-Bold="True"Font-Size="Larger">教师信息管理</asp:HyperLink>上一页下一页返回9.4

主要界面和相关代码<asp:HyperLinkID="HyperLink3"runat="server"Font-Bold="True"Font-Size="Larger"ForeColor="Black"NavigateUrl="AdminSUser.aspx"Style="z-index:101;left:36px;position:absolute;top:210px"Width="139px">学生信息管理</asp:HyperLink>上一页下一页返回9.4

主要界面和相关代码<asp:HyperLinkid="hlkAdminRoom"style="Z-INDEX:102;LEFT:36px;POSITION:absolute;TOP:253px"Runat="server"ForeColor="Black"NavigateUrl="AdminRoom.aspx"Width="129px"Font-Bold="True"Font-Size="Larger">教室信息管理</asp:HyperLink>上一页下一页返回9.4

主要界面和相关代码[<asp:HyperLinkID="HyperLink2"runat="server"NavigateUrl="NewCourse.aspx"Style="z-index:103;left:36px;position:absolute;top:303px"Width="150px"Font-Bold="True"Font-Size="Larger">课程信息管理</asp:HyperLink>上一页下一页返回9.4

主要界面和相关代码<asp:HyperLinkid=“hlkLogout”style=“Z-INDEX:103;LEFT:36px;POSITION:absolute;TOP:355px”ForeColor=“Red”NavigateUrl=“Logout.aspx”runat=“server”Width=“91px”Font-Bold=“True”Font-Size=“Larger”>退出</asp:HyperLink></td>上一页下一页返回9.4

主要界面和相关代码<tdalign="left"valign="top"style="height:185px"><tableheight="100%"width="100%"border="0"><tr><tdstyle="height:123%;width:57%;"><asp:ContentPlaceHolderID="ContentPlaceHolder1"runat="server">上一页下一页返回9.4

主要界面和相关代码</asp:ContentPlaceHolder></td></tr></table></td></tr></table></div>上一页下一页返回9.4

主要界面和相关代码</form></body></html>上面代码中标出的粗体部分,Master指的是母版页,控件ContentPlaceHolder声明的是页面中可编辑区域。2.设置选课时间对于网上选课系统应设置它的有效选课时间,只有在这个上一页下一页返回9.4

主要界面和相关代码时间段中学生才能进行选课,否则不允许进行选课操作。在设置选课时间页面Admin.aspx中,加入母版页AdminMaster.master,然后在可编辑区中进行如图9-8所示的布局。Label控件lbTime用来显示当前设定的选课时间。两个TextBox控件用来填写新设置的时间。当单击“设置”按钮时,可以将TextBox文本框中的时间设置为新的选课时间,上一页下一页返回9.4

主要界面和相关代码并存入到time.txt文件中,文件中第一行为开始时间,第二行为结束时间。Page_Load事件及“确定”按钮的Click代码如下:protectedvoidPage_Load(objectsender,System.EventArgse){//在此处放置用户代码以初始化页面上一页下一页返回9.4

主要界面和相关代码if(!IsPostBack){Label2.Visible=false;Label3.Visible=false;Label1.Visible=false;txttimeStart.Visible=false;btnNew.Visible=false;上一页下一页返回9.4

主要界面和相关代码txtTimeEnd.Visible=false;//打开文件StreamReadersr=newStreamReader(WebConfigurationManager.AppSettings[“time.txt”]);stringstrStart=sr.ReadLine();stringstrEnd=sr.ReadLine();上一页下一页返回9.4

主要界面和相关代码sr.Close();DateTimedtStart=DateTime.Parse(strStart);//获取选课开始时间DateTimedtEnd=DateTime.Parse(strEnd);//获取选课结束时间lbTime.Text="选课时间为:"+dtStart.ToString()+"到"+dtEnd.ToString();}上一页下一页返回9.4

主要界面和相关代码}protectedvoidbtnNew_Click(objectsender,System.EventArgse){DateTimedtStart,dtEnd;try{上一页下一页返回9.4

主要界面和相关代码dtStart=DateTime.Parse(txttimeStart.Text);dtEnd=DateTime.Parse(txtTimeEnd.Text);}catch{Response.Write(MyUtility.Alert("输入错误"));return;上一页下一页返回9.4

主要界面和相关代码}StreamWritersw=newStreamWriter("http://localhost/sc/login.aspx",false);sw.WriteLine(dtStart.ToString());//写入开始时间sw.WriteLine(dtEnd.ToString());//写入结束时间sw.Close();上一页下一页返回9.4

主要界面和相关代码

lbTime.Text="选课时间为:"+dtStart.ToString()+"到"+dtEnd.ToString();Label2.Visible=false;Label3.Visible=false;Label1.Visible=false;txttimeStart.Visible=false;btnNew.Visible=false;上一页下一页返回9.4

主要界面和相关代码

txtTimeEnd.Visible=false;}3.教师信息管理教师信息管理页面AdminTUser.aspx用来添加和删除教师信息。在页面中加入母版页AdminMaster.master,并进行如图9-9所示的布局。单击“添加”按钮时,应先判断教师编号是否已经存在,若存上一页下一页返回9.4

主要界面和相关代码在则提示管理员,若不存在则添加到数据库中。“添加”按钮的Click代码如下:protectedvoidbtnAddTearcher_Click(objectsender,System.EventArgse){stringvarId=txtTId.Text.Trim();//密码为教师编号,用MD5算法加密后存储上一页下一页返回9.4

主要界面和相关代码stringvarKey=MyUtility.MD5(txtTId.Text.Trim());stringvarName=txtTName.Text.Trim();stringvarSex=RadioButtonList1.SelectedItem.Text;stringvarAge=txtTAge.Text.Trim();stringvarTitle=DropDownList1.SelectedItem.Text;上一页下一页返回9.4

主要界面和相关代码stringvarPost=txtTPost.Text.Trim();stringvarDep=DropDownList2.SelectedItem.Text;stringvarPhone=txtTPhone.Text.Trim();stringvarMail=txtTMail.Text.Trim();stringvarNote=txtTNote.Text.Trim();stringsql="insertinto上一页下一页返回9.4

主要界面和相关代码Teacher(TId,TKey,TName,TSex,TAge,TTitle,TPost,TDep,TPhone,TMail,TNote)values('"+varId+"','"+varKey+"','"+varName+"','"+varSex+"','"+varAge+"','"+varTitle+"','"+varPost+"','"+varDep+"','"+varPhone+"','"+varMail+"','"+varNote+"')";上一页下一页返回9.4

主要界面和相关代码

{if(Data.ExecuteSql(sql)==1)//添加教师成功{sql="select*fromTeacher";DataSetds1=Data.ExecuteSelectSql(sql);if(ds1!=null&&ds1.Tables.Count>0){上一页下一页返回9.4

主要界面和相关代码dgViewT.DataSource=ds1.Tables[0];dgViewT.DataBind();}}else//添加失败{Response.Write(MyUtility.Alert("添加失败,请检查编号是否已经存在!"));上一页下一页返回9.4

主要界面和相关代码return;}}catch{Response.Write(MyUtility.Alert("添加失败,请检查编号是否已经存在!"));上一页下一页返回9.4

主要界面和相关代码return;}}“删除”按钮用来删除指定的教师记录,首先应先得到按钮所在行的索引,根据索引得到教师编号,然后从数据库中找到对应教师记录,将此记录删除。删除完成后要更新GridView控件的显示。“删除”按钮的RowDeleting事件代码如下所示:上一页下一页返回9.4

主要界面和相关代码protectedvoiddtGridT_RowDeleting(objectsender,GridViewDeleteEventArgse){stringTId=dtGridT.DataKeys[e.RowIndex][0].ToString();//对应行的索引stringsql="deletefromTeacherwhereTIdlike'"+TId+"'";上一页下一页返回9.4

主要界面和相关代码Data.ExecuteSql(sql);//删除相应编号的教师sql="select*fromTeacher";//更新控件显示DataSetds1=Data.ExecuteSelectSql(sql);if(ds1!=null&&ds1.Tables.Count>0){dtGridT.DataSource=ds1.Tables[0];dtGridT.DataBind();上一页下一页返回9.4

主要界面和相关代码}}当更新GridView控件时,对于分页也应该设置成新的页面索引,在该控件的PageIndexChanged事件中输入如下代码:privatevoiddtGridT_PageIndexChanged(objectsource,GridViewPageEventArgse)上一页下一页返回9.4

主要界面和相关代码{dtGridT.PageIndex=e.NewPageIndex;//设置新的页面索引stringsql="select*fromTeacher";//绑定数据DataSetds1=Data.ExecuteSelectSql(sql);//重新加载数据显示if(ds1!=null&&ds1.Tables.Count>0){上一页下一页返回9.4

主要界面和相关代码dtGridT.DataSource=ds1.Tables[0];dtGridT.DataBind();}}程序说明:MyUtility是自定义的一个类;MD5是编写的一个静态成员函数,用来实现MD5算法加密。MD5算法代码如下:上一页下一页返回9.4

主要界面和相关代码publicstaticstringMD5(stringstr){stringresult="";result=FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5");returnresult;}上一页下一页返回9.4

主要界面和相关代码4.学生信息管理学生信息管理页面AdminSUser.aspx与教师信息管理页面基本相同,这里不作介绍。5.教室信息管理教室信息管理页面AdminRoom.aspx用来添加和删除教室信息。在页面中加入母版页AdminMaster.master,并按照图9-10进行布局。下拉列表框用来显示所有的教学楼,GridView控件用来显示相应教学楼的教室信息。上一页下一页返回9.4

主要界面和相关代码“查看”教学楼教室情况的代码如下:protectedvoidlkbView_Click(objectsender,System.EventArgse){if(ddlBuilding.SelectedIndex<0){Response.Write(MyUtility.Alert("请选择一个教学楼!"));上一页下一页返回9.4

主要界面和相关代码return;}dgView.DataSource=null;dgView.DataBind();stringsql="selectRoomId,RoomName,RoomSizefromRoomwhereBuildingId=上一页下一页返回9.4

主要界面和相关代码"+ddlBuilding.SelectedItem.Value;DataSetds=Data.ExecuteSelectSql(sql);if(ds!=null&&ds.Tables.Count>0){dgView.DataSource=ds.Tables[0];dgView.DataBind();}}上一页下一页返回9.4

主要界面和相关代码“删除”教学楼信息时,应先删除对应教学楼的教室信息,再删除教学楼信息。相应代码如下:protectedvoidlkbDeleteBuilding_Click(objectsender,System.EventArgse){if(ddlBuilding.SelectedIndex<0){上一页下一页返回9.4

主要界面和相关代码Response.Write(MyUtility.Alert("请选择一个教学楼!"));return;}stringsql="selectcount(*)fromRoomwhereBuildingId="+ddlBuilding.SelectedItem.Value;上一页下一页返回9.4

主要界面和相关代码DataSetds=Data.ExecuteSelectSql(sql);introomNum=0;if(ds!=null&&ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0){roomNum=(int)ds.Tables[0].Rows[0][0];}上一页下一页返回9.4

主要界面和相关代码if(roomNum>0){Response.Write(MyUtility.Alert("请先删除该教学楼所有教室!"));return;}else//不存在教室,可以删除教学楼上一页下一页返回9.4

主要界面和相关代码{sql="deletefromBuildingwhereBuildingId="+ddlBuilding.SelectedItem.Value;Data.ExecuteSql(sql);sql="select*fromBuilding";DataSetds2=Data.ExecuteSelectSql(sql);上一页下一页返回9.4

主要界面和相关代码if(ds2!=null&&ds2.Tables.Count>0){DataViewdv=newDataView(ds2.Tables[0]);ddlBuilding.DataSource=dv;ddlBuilding.DataTextField="BuildingName";ddlBuilding.DataValueField="BuildingId";上一页下一页返回9.4

主要界面和相关代码ddlBuilding.DataBind();}}}单击“添加教学楼”按钮可以添加一幢教学楼的信息,其Click事件代码如下:protectedvoidbtnAddBuilding_Click(objectsender,System.EventArgse)上一页下一页返回9.4

主要界面和相关代码

{if(txtBuilding.Text.Trim()==""){Response.Write(MyUtility.Alert("请输入教学楼名称!"));return;}上一页下一页返回9.4

主要界面和相关代码

stringsql="insertintoBuilding(BuildingName)values('"+txtBuilding.Text.Trim()+"')";Data.ExecuteSql(sql);sql="select*fromBuilding";DataSetds=Data.ExecuteSelectSql(sql);if(ds!=null&&ds.Tables.Count>0)上一页下一页返回9.4

主要界面和相关代码{DataViewdv=newDataView(ds.Tables[0]);ddlBuilding.DataSource=dv;ddlBuilding.DataTextField="BuildingName";ddlBuilding.DataValueField="BuildingId";ddlBuilding.DataBind();}上一页下一页返回9.4

主要界面和相关代码}单击“添加教室”按钮可以在指定教学楼中添加教室信息,其Click事件代码如下:protectedvoidbtnAddRoom_Click(objectsender,System.EventArgse){if(ddlBuilding.SelectedIndex<0)上一页下一页返回9.4

主要界面和相关代码{Response.Write(MyUtility.Alert("请选择一个教学楼!"));return;}if(txtRoomName.Text.Trim()==""){上一页下一页返回9.4

主要界面和相关代码

Response.Write(MyUtility.Alert("请输入教室名称!"));return;}if(txtRoomSize.Text.Trim()==""){Response.Write(MyUtility.Alert("请输入教室能容纳的人数!"));上一页下一页返回9.4

主要界面和相关代码

return;}intsize=0;try{size=Int32.Parse(txtRoomSize.Text.Trim());}上一页下一页返回9.4

主要界面和相关代码catch{Response.Write(MyUtility.Alert("请输入正确的教室能容纳的人数!"));return;}stringsql="insertintoRoom(RoomName,BuildingId,RoomSize)values('"上一页下一页返回9.4

主要界面和相关代码+txtRoomName.Text.Trim()+"',"+ddlBuilding.SelectedItem.Value+","+size.ToString()+")";Data.ExecuteSql(sql);sql="selectRoomId,RoomName,RoomSizefromRoomwhereBuildingId="+ddlBuilding.SelectedItem.Value;上一页下一页返回9.4

主要界面和相关代码DataSetds=Data.ExecuteSelectSql(sql);if(ds!=null&&ds.Tables.Count>0){dgView.DataSource=ds.Tables[0];dgView.DataBind();}}上一页下一页返回9.4

主要界面和相关代码程序说明:MyUtility是自定义的一个类;Alert静态成员函数显示一个提示对话框。Alert方法代码如下:publicstaticstringAlert(strings){return"<scriptlanguage=\"javascript\">alert(\""+s+"\");</script>";}上一页下一页返回9.4

主要界面和相关代码6.课程信息管理课程信息管理页面NewCourse.aspx。在页面中加入母版页

AdminMaster.master,并进行如

图9-11所示的布局。页面加载时,将对控件进行初始化,代码如下:protectedvoidPage_Load(objectsender,System.EventArgse){上一页下一页返回9.4

主要界面和相关代码if(!IsPostBack){//显示控件设置stringsql="selectx.*,(selectCNamefromCourseasywherey.CId=x.CPreCId)asCPreCNamefromCourseasx";DataSetds=Data.ExecuteSelectSql(sql);if(ds!=null&&ds.Tables.Count>0)上一页下一页返回9.4

主要界面和相关代码{if(ds.Tables[0].Rows.Count>0){lbCount.Text="共开设的课程"+ds.Tables[0].Rows.Count.ToString()+"门";dgCourse.DataSource=ds.Tables[0];dgCourse.DataBind();上一页下一页返回9.4

主要界面和相关代码for(inti=0;i<ds.Tables[0].Rows.Count;i++){//若课程类型为必修则显示必修,若为选修则显示选课人数if(dgCourse.Items[i].Cells[3].Text=="必修")dgCourse.Items[i].Cells[8].Text="必修";else{//从数据库中查询选修课程的人数上一页下一页返回9.4

主要界面和相关代码stringsql1="selectcount(*)fromCoursewhereCId="+ds.Tables[0].Rows[i]["CId"].ToString();DataSetds1=Data.ExecuteSelectSql(sql1);if(ds1!=null&&ds1.Tables.Count>0&&ds1.Tables[0].Rows.Count>0)dgCourse.Items[i].Cells[8].Text=ds1.Tables[0].Rows[0][0].上一页下一页返回9.4

主要界面和相关代码ToString();}}else{lbCount.Text="还没有开设课程!";}上一页下一页返回9.4

主要界面和相关代码//课程类别下拉列表框ddlCType.Items.Clear();ddlCType.Items.Add("请选择");ddlCType.Items.Add("必修");ddlCType.Items.Add("选修");ddlCType.SelectedIndex=0;//课程学分下拉列表框上一页下一页返回9.4

主要界面和相关代码ddlCCredit.Items.Clear();ddlCCredit.Items.Add("请选择");ddlCCredit.Items.Add("1");ddlCCredit.Items.Add("1.5");ddlCCredit.Items.Add("2");ddlCCredit.Items.Add("2.5");ddlCCredit.Items.Add("3");上一页下一页返回9.4

主要界面和相关代码ddlCCredit.Items.Add("3.5");ddlCCredit.Items.Add("4");ddlCCredit.Items.Add("4.5");ddlCCredit.Items.Add("5");ddlCCredit.Items.Add("5.5");ddlCCredit.Items.Add("6");ddlCType.SelectedIndex=0;上一页下一页返回9.4

主要界面和相关代码//课程最大人数下拉列表框ddlCMax.Items.Clear();ddlCMax.Items.Add("请选择");ddlCMax.Items.Add("50");ddlCMax.Items.Add("100");ddlCMax.Items.Add("150");ddlCMax.Items.Add("200");上一页下一页返回9.4

主要界面和相关代码ddlCMax.SelectedIndex=0;//前导课程下拉列表框ddlCPreCId.Items.Clear();ddlCPreCId.Items.Add("请选择");stringsql2="selectCId,CNamefromCourse";DataSetdss=Data.ExecuteSelectSql(sql2);if(dss!=null&&dss.Tables.Count>0)上一页下一页返回9.4

主要界面和相关代码{for(inti=0;i<dss.Tables[0].Rows.Count;i++)ddlCPreCId.Items.Add(newListItem(dss.Tables[0].Rows[i]["CName"].ToString(),dss.Tables[0].Rows[i]["CId"].ToString()));}上一页下一页返回9.4

主要界面和相关代码ddlCPreCId.SelectedIndex=0;//教师编号下拉列表框ddlTid.Items.Clear();ddlTid.Items.Add("请选择");stringsql3="selectTId,TNamefromteacher";DataSetdsss=Data.ExecuteSelectSql(sql3);if(dsss!=null&&dsss.Tables.Count>0)上一页下一页返回9.4

主要界面和相关代码{for(inti=0;i<dsss.Tables[0].Rows.Count;i++)ddlTid.Items.Add(newListItem(dsss.Tables[0].Rows[i]["TName"].ToString(),dsss.Tables[0].Rows[i]["TId"].ToString()));}上一页下一页返回9.4

主要界面和相关代码ddlTid.SelectedIndex=0;}}}单击“开设课程”按钮,可以向数据库中的Course表中写入记录,其Click事件部分代码如下:protectedvoidbtnAdd_Click(objectsender,System.EventArgse)上一页下一页返回9.4

主要界面和相关代码{if(txtCName.Text.Trim()==""){Response.Write(MyUtility.Alert("请输入课程名称!"));return;}上一页下一页返回9.4

主要界面和相关代码if(ddlCType.SelectedIndex<=0){Response.Write(MyUtility.Alert("请选择课程类型!"));return;}if(ddlCCredit.SelectedIndex<=0)上一页下一页返回9.4

主要界面和相关代码{Response.Write(MyUtility.Alert("请选择课程学分!"));return;}if(ddlCMax.SelectedIndex<=0){上一页下一页返回9.4

主要界面和相关代码Response.Write(MyUtility.Alert("请选择课程最大人数!"));return;}if(ddlCPreCId.SelectedIndex<=0)//没有前导课程{上一页下一页返回9.4

主要界面和相关代码sql="insertintoCourse(TId,CName,CType,CCredit,CMax,CNote)values("+TxtTeacher.Text+",'"+txtCName.Text.Trim()+"','"+ddlCType.SelectedItem.Text+"',"+ddlCCredit.SelectedItem.Text+","+ddlCMax.SelectedItem.Text+",'"+MyUtility.Encode(txtCNote.Text)+"')";上一页下一页返回9.4

主要界面和相关代码}Else{//有前导课程sql="insertintoCourse(TId,CName,CType,CCredit,CMax,CNote,CPreCId)values("+TxtTeacher.Text+",'"+txtCName.Text.Trim()+"','"+ddlCType.上一页下一页返回9.4

主要界面和相关代码SelectedItem.Text+"',"+ddlCCredit.SelectedItem.Text+","+ddlCMax.SelectedItem.Text+",'"+MyUtility.Encode(txtCNote.Text)+"',"+ddlCPreCId.SelectedItem.Value+")";}上一页下一页返回9.4

主要界面和相关代码Data.ExecuteSql(sql);…}若单击“时间地点编排”按钮,则会进入CourseTime.aspx页面,并同时从URL参数中传递课程编号,如CourseTime.aspx?Cid=2。在CourseTime.aspx页面中可以设置上课的时间和地点,进行如图9-12所示的布局。上一页下一页返回9.4

主要界面和相关代码当向数据库中添加新的时间地点之前,应先检测新的时间地点与数据库中的已有信息是否相同,若相同说明有冲突,要提示管理员。代码如下:stringsql="select*fromCourseTimewhereRoomId="+ddlRoom.SelectedItem.Value+"andCTimelike'"+ddlWeek.SelectedItem.Text+ddlTime.SelectedItem.Text+"'";上一页下一页返回9.4

主要界面和相关代码DataSetds=Data.ExecuteSelectSql(sql);boolflag=true;if(ds!=null&&ds.Tables.Count>0){intws=Int32.Parse(ddlCWeekStart.SelectedItem.Text);上一页下一页返回9.4

主要界面和相关代码intwe=Int32.Parse(ddlCWeekEnd.SelectedItem.Text);for(inti=0;i<ds.Tables[0].Rows.Count;i++){intnws=Int32.Parse(ds.Tables[0].Rows[i]["CWeekStart"].ToString());上一页下一页返回9.4

主要界面和相关代码intnwe=Int32.Parse(ds.Tables[0].Rows[i]["CWeekEnd"].ToString());if(we<nws||ws>nwe)flag=true;elseflag=false;上一页下一页返回9.4

主要界面和相关代码}}if(flag==false){Response.Write(MyUtility.Alert("选择的时间地点和其他课程有冲突,请再次选择!"));return;上一页下一页返回9.4

主要界面和相关代码}else{if(CId!=0){sql="insertintoCourseTime(CId,RoomId,CWeekStart,CWeekEnd,CTime)"+"values("+CId.ToString()+","+上一页下一页返回9.4

主要界面和相关代码+ddlRoom.SelectedItem.Value+","+ddlCWeekStart.SelectedItem.Text+","+ddlCWeekEnd.SelectedItem.Text+",'"+ddlWeek.SelectedItem.Text+ddlTime.SelectedItem.Text+"')";Data.ExecuteSql(sql);}}上一页下一页返回9.4

主要界面和相关代码9.4.3

教师操作模块教师操作模块可以管理教师个人信息、修改教师密码、设置学生成绩。1.教师操作模块中公共页面的制作在教师操作的多个页面中,存在一个相同的功能区域,为了避免编写代码的重复,同样可以把它制作成一个母版页,然后在所需要的页面中插入即可。母版页面的后缀名为.master。上一页下一页返回9.4

主要界面和相关代码在“添加新项”窗口中,选择“母版页”选项,保存为“TeacherMaster.master”,布局如图9-13所示。制作方法请参照管理员母版面“AdminMaster.master”。2.教师个人信息管理教师个人信息管理页面Teacher.aspx,在页面中加入母版页TeacherMaster.master,并进行如图9-14所示的布局。上一页下一页返回9.4

主要界面和相关代码页面在初始加载时,可以从数据库中读取教师的信息并显示出来,在Page_Load事件中输入如下代码:privatevoidPage_Load(objectsender,System.EventArgse){if(!IsPostBack){上一页下一页返回9.4

主要界面和相关代码lbTId.Text=Session["Id"].ToString();//在文本框中显示教师的编号ddlTSex.Items.Clear();//填充性别下拉列表框ddlTSex.Items.Add("男");ddlTSex.Items.Add("女");stringsql="select*fromTeacherwhereTIdlike'"+lbTId.Text.Trim()+"'";上一页下一页返回9.4

主要界面和相关代码DataSetds=Data.ExecuteSelectSql(sql);//从数据库中读取教师信息if(ds!=null&&ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0){txtTName.Text=ds.Tables[0].Rows[0]["TName"].ToString();//教师姓名上一页下一页返回9.4

主要界面和相关代码txtTAge.Text=ds.Tables[0].Rows[0]["TAge"].ToString();//年龄txtTPhone.Text=ds.Tables[0].Rows[0]["TPhone"].ToString();//电话txtTMail.Text=ds.Tables[0].Rows[0]["TMail"].ToString();//E-mailif(ds.Tables[0].Rows[0]["TSex"].ToString()=="男")//性别上一页下一页返回9.4

主要界面和相关代码ddlTSex.SelectedIndex=0;elseddlTSex.SelectedIndex=1;}}}上一页下一页返回9.4

主要界面和相关代码单击“修改信息”按钮,可以修改教师的个人信息,代码如下:stringsql="updateTeachersetTName='"+txtTName.Text.Trim()+"',TAge="+txtTAge.Text.Trim()+",TSex='"+ddlTSex.SelectedItem.Text+"',TPhone='"+txtTPhone.Text.Trim()+"',TMail='"+txtTMail.Text.Trim()+上一页下一页返回9.4

主要界面和相关代码"'whereTId='"+Session["Id"].ToString()+"'";if(Data.ExecuteSql(sql)==1)Response.Write(MyUtility.Alert("修改成功!"));3.教师修改密码教师修改密码页面

Tkey.aspx,在页面中加入母版页

TeacherMaster.master,并进行如图9-15所示的布局。上一页下一页返回9.4

主要界面和相关代码单击“修改密码”按钮,可以修改教师的密码,两次输入的密码应一致,不一致时给出提示,代码如下:if(txtKey.Text.Trim()!=txtKeyConfirm.Text.Trim()){Response.Write(MyUtility.Alert("两次输入密码不相符合"));return;上一页下一页返回9.4

主要界面和相关代码}stringsql="updateTeachersetTKey='"+MyUtility.MD5(txtKey.Text.Trim())+"'whereTId='"+Session["Id"].ToString()+"'";if(Data.ExecuteSql(sql)==1)Response.Write(MyUtility.Alert("修改成功!"));else上一页下一页返回9.4

主要界面和相关代码Response.Write(MyUtility.Alert("修改失败!"));4.所教课程所教课程页面TeacherCourse.aspx,在页面中加入母版页TeacherMaster.master,布局如图9-16所示。页面加载的时候,应从数据库中读取教师开设的课程及选修每门课程的学生人数,代码如下:上一页下一页返回9.4

主要界面和相关代码stringsql="selectx.*,(selectCNamefromCourseasywherey.CId=x.CPreCId)asCPreCNamefromCourseasxwherex.TIdlike'"+Session["Id"].ToString()+"'";DataSetds=Data.ExecuteS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论