目 录
引言………………………………………………………………………………… 2
一、问题提出…………………………………………………………………………2
二、可行性分析………………………………………………………………………
(一)技术可行性………………………………………………………………… 3
(二)经济可行性………………………………………………………………… 3
(三)操作可行性………………………………………………………………… 3
三、需求分析………………………………………………………………………
(一)功能描述………………………………………………………………… 3
(二)顶层数据流图……………………………………………………………… 4
四、数据库设计……………………………………………………………………
(一)物理数据库………………………………………………………………… 5
(二)数据库关系图……………………………………………………………… 8
(三)系统所需要的视图………………………………………………………… 9
五、用户层设计………………………………………………………………………
(一)用户层设计实现工具…………………………………………………… 10
(二)ASPX页面关系及页面介绍……………………………………………… 11
(三)用户层与其它层的配合………………………………………………… 17
(四)界面设计所用控件 Controls…………………………………………… 17
(五)界面设计编程部分所用对象(非控件) Objects……………………… 20
(六)界面设计编程部分所用命名空间 namespace………………………… 21
六、总结………………………………………………………………………………21
七、致谢………………………………………………………………………………22
八、参考文献…………………………………………………………………………22
九、附录………………………………………………………………………………23
计算机公共课成绩管理子系统
谢一
西南师范大学计算机与信息科学学院,重庆 400715
摘要:计算机公共课成绩管理子系统以网络为基础,利用.Net平台、SQL Server 2000数据库、支持ASP.net 的IIS服务器建构一个供多种用户使用的管理系统,与MyCollege.Net中的其它子系统结合,从这些子系统中获取系科、学生的基本信息,与本地数据库结合,在传统校园教学计划管理及学生成绩管理的基础上构建一个数字空间,实现教学计划、课程、教师信息、学生成绩的方便查询和管理,达到提高教育管理水平和效率的目的。
Abstract:On the basis of network, Computer Public Course Management System (CPCMS) combines with the other child systems of MyCollege.Net using the .net platform、SQL Server 2000 data base and IIS server which surppot ASPsp.net ,.CPCMS gets departments information and basic students information from these child systems to connect with local data base . Foundation as traditional teaching plan management and score management ,CPCMS build a digital space to achieve convenient search and manage for the teaching plans、courses、teachers、scores .Having it , we can improve management efficiency.
关键词:计算机公共课成绩管理子系统 ASP.net SQL Server 2000
引言
在MyCollege.Net系统的开发中,我主要参与应用子系统——计算机公共课成绩管理子系统的设计与实现。针对需求分析和总体设计,我详细设计了该子系统的数据库,并在SQL Server 2000 上得以实现,为本子系统的后续工作奠定了基础。根据总体设计,我还利用.Net 上的ASP.Net技术设计了本子系统的用户层,并编写代码加以实现。在该层,通过调用统一身份认证子系统和公共资源管理与共享子系统分别实现了对访问计算机公共课成绩管理子系统得用户的身份验证和导入公共资源与共享子系统的数据 。
一﹑问题提出
一直以来,我校公共计算机部对计算机课程以及课程成绩的管理都是手工操作,由教师登记好学生的成绩,上交给教学秘书,再由教学秘书对这些成绩做整合调整,最后再发送给各班。这样既浪费人力,物力,又容易出错和不易保存,与当今高度发达的自动化严重脱节。由此,我们考虑编写一个公共课成绩管理系统来对此进行管理。
二﹑可行性分析
(一)技术可行性
公共课成绩管理系统主要是用于高校公共计算机教育部关于教学计划﹑课程﹑教师信息﹑成绩的查询和管理。通过使用Microsoft公司提供的VisualStudio.net工具以及SQL Server数据库可以实现对有关公共课的教学计划﹑课程等的网上查询和管理。
(二)经济可行性
由于本系统只是作为我们的毕业设计,所以对它的经济可行性不做过多的
考虑。但它非常适合于高校的公共课管理,因为该系统实现了将管理和查询网络
化,极大地方便了管理员﹑教师﹑学生。
(三)操作可行性
本系统的界面设计简单直观,易于理解。它使用的控件都是用户常用的或常见的,操作起来很容易上手。除此之外,该系统是在网络上发布,用户可以随时随地地对此进行访问。不需要特别的培训和讲解,用户便能使用该系统。
三﹑需求分析
(一)功能描述
1.教学管理功能(公共计算机教育部使用)包括:
① 新本学期所开设课程的录入与查询:例如在2004年上学期开设课程:C语言与Vfor。
说明:所有的课程成绩均由三部分组成:平时成绩,上机成绩, 笔试成绩。所占的比重分别为:10%,10%,80%,在该系统中这三部分及其比重是固定不变的。
② 对各系科的课程安排的录入与查询,课程安排即是该学期每个系科
的选课课程、任课教师以及上课时间和上课地点。
说明:每一个院系中所有的不同专业所选的课程都是一样的。但是同一院系的学生不一定有同一个教师授课。
2.成绩管理的功能(教师使用)如下:
① 录入成绩:既可以单个录入也可以批量录入,其中批量录入以成绩单为单位,每次从系统中调出一张成绩单,编辑完成后一次性提交。
成绩单:成绩单包括学期、院系、专业、课程、任课教师、学生成绩。
② 查询成绩:单个查询(学生可使用),根据学生的学号或姓名查询出该学生的所有课程的成绩信息。
批量查询以成绩单为单位,每次查询出一张成绩单。
③ 打印成绩:可以一次打印一张成绩单,也可以按要求批量打印。
④ 统计调整:对成绩单中的成绩进行统计,指出各个分数段的人数分布情况。因为有时学生的成绩整体上偏低,需要进行调整,一次系统可以按照用户设置的规则对成绩单中的成绩进行调整。
成绩调整规则:将成绩单中总分在某一分数段的学生成绩调整到另外一个分数段。例如将50到60分的学生成绩全部调整到60到65分之间。为了使调整过程尽可能合理,还可以对待调整分数段的学生成绩进行限制,例如设置其笔试成绩必须在50分以上,而平时成绩则可以适当放宽。
⑤ 每学期考试不及各的学生自动纳入新学期的教学计划中。
3.权限说明:
① 管理员可使用功能:教师信息管理、系科显示、课程管理、教学计划管理、学生成绩查询;
② 教师可使用成绩管理各项功能:对学生成绩的添、删除、修改、查询、分析、调整;
③ 学生可使用的功能:查询单个学生所有成绩。
4.系统数据更新功能:
从MyCollege.Net下公共资源管理与共享子系统CResource中获取有关学生、系科、专业的基本信息,更新本地数据库,使本地数据库保存的数据与主系统基本数据保持同步。
(二)顶层数据流图
1.管理员可操作管理顶层数据流图:
2.成绩管理顶层数据流图:
本系统按功能划分模块,使用B-S结构,采用.net和SQL Server作为开发工具。系统的开发只采用四层结构:数据库、数据库访问层、商业逻辑层、用户层。我主要负责数据库和用户层的实现。下面分别介绍:
四﹑数据库设计
本系统的数据库采用SQL Server 2000来实现。它是一种关系数据库产品,该系统具有很高的可靠性,可伸缩性,可用性,可管理性,数据仓库等特点,为各种用户提供了完整的数据库解决方案。SQL Server 2000 着眼于Internet 背景下的网络数据库的应用与开发,除了具备现代数据库管理系统所具备的各种强大的功能外,在支持Internet 技术方面,提供了HTTP 的支持,还为Web 用户提供了功能完善的网络数据管理与数据分析解决方案。它作为网络编程的后台数据库,可以用于ASP.net 技术或JSP 技术制作的Web 网页与数据库之间的连接。这也正是本系统所需要的。
(一)物理数据库
下面详细介绍为本系统开发所设计的基本表:
1.课程 TCourses
课程表是用来存储本学期所开设课程的基本信息。对于课程来说,它只有两个基本属性,课程名以及唯一标志它的课程号。设置课程号还可以简化表示。对于课程号,规定只能用整型数字表示,不能超过4位,这样有利于实现课程号的动态增加;对于课程名,由于无法确定它的长度,用可变长字符串表示,但不能超过50个字符。
2.系科 TDepts
系科表是用来存储本校所有开设的系科。对于系科来说,它也只需要两个属性,系科名及唯一标志它的系科号。对于系科号,规定只能用整型数字表示,但不能超过4位,这样有利于实现系科号的动态增加;对于系科名,由于长度无法确定,用可变字符串表示,但不能超过20个字符。
在这里,之所以要将系科单独提出来作为一张表,而不在需要时从学生表或者教学计划表里去查取,是因为这样有利于保证数据的一致性,避免了某张表中系科更新后其它表中相同数据没有更新的情况。
3.专业 TMajors
专业表里存储的是每个系科下对应的专业。对于专业来说,它是将系科再进行细化,因此专业就有三个属性:它所对应的系科,以及专业名和唯一标致它的专业号。对于专业号,规定只能用整形数字表示,不能超过4位,这样有利于实现专业号的自动增加;对于专业名,由于长度不确定,用可变长字符串表示,但不能超过50个字符。
4.学生 TStudents
学生表是用来存储本校所有学生的基本信息。对于学生来说,他对应有姓名,性别,民族,系科,专业,年级,因为多个学生的姓名可能相同,而性别,民族,系科,年级这些也会有相同,所以设学号来唯一地标志一个学生。对于学号,规定只能用10位整形数字表示;对于学生名,用可变长字符串表示,但不能超过20个字符;对于性别,只需要两个字符表示,即一个汉字;对于民族,用可变字符串来表示,但不能超过10个字符;对于年级,规定用整形数字表示,但不能超过4位。
由于根据专业号就可以推出系科名和专业名,所以就去掉了系科名和专业名这两个属性,以免造成冗余信息。
5.教学计划TTeachingPlans
教学计划表是用来存储本学期公共课的教学计划,它指出每学期每个院系每个年级上什么课以及由哪位教师来上。因为系科,专业,课程,教师都能通过各自的代号从其它基本表中导出,所以这里只需其代号即可。由于所有这些合起来才能推出一条教学计划,因此设一个教学计划号来唯一地标志这些信息。
对于教学计划号,规定用整形数字表示,但不能超过4位,这样有利于实现教学计划号的动态添加。
6.成绩 TScores
成绩表是用来存储参与计算机公共课学习的所有学生的所有计算机课的成绩。只有在教学计划中存在的专业的学生才会有成绩,因此一条信息由学生学号和教学计划号唯一确定。而通常一门课程的成绩可能会由平时成绩,上机成绩,笔试成绩中的所有或部分来组成总成绩,因此各部分成绩允许为空。
对于各部分成绩,规定用浮点数来表示,长度为8位。
7.教师 TTeachers
教师表是用来存储公共计算机教育部的教师信息。对于教师来说,一般对应有教师名,性别,职称等,因为教师名可能会有重复,因此就设教师号来唯一地标志某位教师。但对于本系统来说,只需要教师名和教师号,不需要其它信息。
对于教师号,规定只能用整型数字表示,不能超过4位;对于教师名,由于长度无法确定,用可变字符串表示,但不能超过20个字符。
(二)数据库关系图:
该关系图确定了各张表之间的对应关系,明确了主键和外键,保证了数据的一致性。
(三)系统所需要的视图
1.VStudents
该视图用于查询学生的基本信息:学号,姓名,性别,民族,系科,专业,年级。通过该视图,可查询出学生的完整信息。
2.VScores
该视图用于查询学生的成绩,可以是单科成绩,所有科目成绩,各部分成绩,总成绩。通过该视图,可以知道有关学生及其所修课程的完整信息,包括课程名,任课教师等。
3.VTeachingPlans
该视图用于查询,教学计划的信息,包括:教学计划号,学期,系科,专业,年级,课程,教师名。因为对于用户来说,他一般只需要知道直观的信息,而不需要系科,课程,教师,专业的代号,代号一般只用于内部操作。
五﹑用户层设计
(一)用户层设计的实现工具
本系统的界面设计主要运用的是Microsoft公司的VisualStudio.Net2003中提供的asp.net,它是当今先进的Web开发平台,运行在服务器端。运用它可以建立强大的Web应用。它提供给用户以下一些特征:
1.它可以选择任何一种可用的.NET程序设计语言。
2.提供了一些对数据库访问的数据控件,如DataGrid﹑DataList控件,使得数据显示更加灵活。
3.提供了HTML 和WEB两种服务器控件,增加了方法﹑事件驱动能力,实现HTML代码与程序的分离,便于修改和阅读。
4.采用了强大的缓存和状态管理技术,asp.net提供了两种缓存可能,一种对页面缓存,一种对数据缓存,从而提高了数据访问的速度。
5.采用了Code behind技术,使得界面设计与程序设计分开,便于代码的重复使用,利于程序调试和维护,提高了程序的安全性。
6.应用范围增大,不局限于Web应用。不管操作系统和程序设计语言是否相同,利用XML Web services就可以通过Internet共享数据。
在网页设计部分,我主要运用asp.net中提供的丰富的控件和网上下载的部
分控件,根据系统规划和系统分析合理地布局;在程序设计部分,我运用程序设计语言C#来实现对控件的控制和响应及部分控件与数据库中数据的绑定。
(二)ASPX页面关系及页面介绍
1.总界面设计
公共课成绩管理系统的界面根据功能来设计,主要包括四个部分:教学管理,成绩管理,学生查询,公共资源导入.
如图一所示,我们将首先进入默认页面。这是一个重要信息发布界面,同时也是一个管理员登录界面,我们可以根据需要在页面上方的主导航条里选择其中任意一个模块,点击相应链接即可进入,但成绩管理模块和公共资源导入模块需要有权限才能进入。在所有的页面都放入了主导航条,因此在所有的页面中都可以切换到任意一个模块,有利于用户操作,同时也节约了时间。由于每个页面均会用到主导航条,因此在设计时,将该主导航条做成了用户自定义控件,减少了重复的工作。
若没有登录或登录后没有权限,点击成绩管理和公共资源导入模块将不会进入到你想访问的页面,而是跳出一个信息提示页面。从该页面可以直接返回到登录页面,让浏览者登录。为了方便用户进行操作,运用参数传递,实现了用户登录后,直接返回到刚刚登陆前被中断访问的页面。
图1 默认页面2.下面分别来介绍各个模块:
① 教学管理模块
该模块包括教学计划,课程管理,教师管理三个子模块。在该模块内部的所有页面中,都设置了一个访问三子模块的教学管理子导航条,通过选择链接可以任意在各子模块中进行切换,子导航条的设置将方便用户的操作。由于多个页面都需要用到该子导航条,因此在设计时将该子导航条做成了用户自定义控件,减少了重复的工作。
在通过主导航条访问该模块时将首先进入到教学计划子模块,而不是进入一个总页面后,再选择进入某个子模块。这样将简化用户的选择,同时也减少了不必要的页面设计,让界面看起来不显得冗余。然后可以通过对教学管理子导航条的选择,进入你想到的子模块。
这三个子模块均采用统一的界面设计方式:
每个子模块将首先进入查询页面,该页面所有浏览者都可以访问,而不是进入子模块的导航页面,再进行选择。同理,这样不仅简化了用户的选择,也减少了不必要的页面设计。
管理员登录后,从查询页面中的链接可以直接跳转到删除页面和添加页面 ,而在删除页面和添加页面里又可以直接返回到查询页面,这样可以让用户看到删除和添加信息后的情况,可以直接看出删除信息和添加信息是否成功。若不是管理员或没有登录,浏览者将不能进入删除页面和添加页面,而是进入一个信息提示页面,从该页面可以进入到登录界面进行登录后再直接返回到登陆前被中断页面。
1)教学计划子模块——对浏览者提供对本学期教学计划的查询功能,对管理员提供对本学期教学计划的查询,删除,添加的功能。
图2 教学计划查询页面如图2所示,在查询教学计划页面中采用数据表格DataGrid来显示所有教学计划信息。该控件能很好地与数据集进行绑定,且可以把信息以表格的形式清楚地显示出来。
在添加教学计划页面中,由于采用了下拉列表DropDownList,因此对于教学计划的所有项都只需要进行选择即可,若当需要选择的教师和课程不存在的时候,可以通过添加教师和添加课程链接进入到添加页面,先添加该教师信息或课程信息,之后直接返回到被中断的添加教学计划页面。这样设计将简化管理员的录入工作,也会减少在录入过程中出现的失误。
2) 课程管理子模块——对浏览者提供对本学期课程信息的查询功能,
对管理员提供对本学期课程信息的查询,删除,添加的功能.
在查询课程页面中采用数据表格DataGrid来显示所有课程信息。
3) 教师管理子模块——对浏览者提供对教师信息的查询功能,对管理员提供对本学期教师信息的查询,删除,添加的功能.
在查询教师页面中采用数据表格DataGrid来显示所有教师信息。
②成绩管理模块
该模块对教师提供学生课程的各个部分的成绩的查询,更新,录入,删除,统计,调整,打印的功能;对管理员提供成绩的查询,更新,录入,删除,打印的功能。在该模块内部的所有页面中,都设置了一个访问所有功能页面的教学管理子导航条,通过选择链接可以任意在各功能页面中进行切换,子导航条的设置将方便用户的操作。由于多个页面都需要用到该子导航条,因此在设计时将该子导航条做成了用户自定义控件,减少了重复的工作。
成绩管理模块只有教师和管理员可以进入。登录后,在通过主导航条进入该模块时,首先进入成绩管理主页面,根据左方提供的树形导航结构选择系科,专业,年级,课程进入所选学生的该门课程的成绩显示界面。从该页面可以选择成绩管理子导航条的链接进入相应的录入,统计,调整,打印的页面。而在这些页面里又可以直接返回到成绩显示页面,这样可以让用户看到修改信息后的情况,可以直接看出信息修改是否成功。若没有权限访问或没有登录,浏览者将不能进入成绩管理模块或相应页面,而是进入一个信息提示页面,从该页面可以进入到登录界面进行登录后再直接返回到的登陆前被中断页面。
在该模块内部所有页面中,都设置了教学计划树形导航结构。通过它对不同教学计划的选择,可以在所有不同年级和不同专业所修的不同科目中进行切换。由于多个页面都用到了该教学计划树形导航结构,因此在设计时将该子导航条做成了用户自定义控件,减少了重复的工作。该导航结构用TreeView控件来实现,而没有采用下拉列表DropDownList,因为这涉及到多层选择,用下拉列表来实现的话,会让界面显得繁杂凌乱,影响操作和界面美观。
图3 成绩管理查询页面
1)在查询成绩页面中采用数据表格DataGrid来显示所成绩信息。
2)要编辑成绩显示信息中的某条记录,选择编辑链,进入该条信息编辑
状态,输入更改信息,该功能由DataGrid提供。
3)要录入成绩,则进入所选课程成绩录入界面,输入学生成绩信息。
4)要统计成绩,则进入所选专业及年级的这门课程的成绩统计界面,将
直接显示各分数段人数,可从此页面返回到学生成绩显示界面.
5)成绩调整页面通过对各部分成绩分数段的选择来调整成绩,同时考
虑到由于管理员的误操作,而将成绩调整出错,于是提供一个成绩
恢复链接来恢复调整前的成绩。
6)要打印成绩,则进入所选专业及年级的这门课程的成绩打印
界面,进行打印.打印功能由水晶报表来实现。
③学生查询模块
图4 学生查询页面该模块对学生提供学生基本信息查询和学生所有课程总成绩的查询.学生只需要输入学号和姓名便可查询。由于学生总成绩是公开的,因此不对此查询设置权限。对学生基本信息和成绩信息的显示用DataGrid来实现。
④公共资源导入模块
该模块是将公共资源系统中的部分有用资源通过局域网导入到公共课成绩管理系统中的数据库中,对本系统的数据进行更新和维护。
三﹑结论
经过几个月的努力,在小组所有成员的大力合作下,我们完成了基于XML的松散耦合开放系统的开发。这是我们大家汗水的结晶,是我们自我能力的一种实现,是我们进入社会的一个阶梯,是我们的一次宝贵经验。
大学四年,理论学习时间居多,实践的时间较少,像这样完整地做好一个系统还是第一次。通过毕业设计,我将所学知识系统地总结了一遍,同时详细地了解了关于数据库系统的所有开发过程:从问题定义到需求分析,从需求分析到可行性研究,从可行性研究到总体设计,再到详细设计﹑编码测试。它同时让我们了解到系统开发是一项工程性的工作。除此之外,毕业设计还培养了我的自学能力。在具体实现的过程中,我通过到图书馆找资料,自学相关书上的知识和向人请教,从而比较熟练地掌握了C#编程语言以及对ASP.net和SQL Server 2000的操作和使用。
通过毕业设计,我不仅学到了技术上的知识,更重要的是学会了如何与人合作和协调,如何将自己融合到小组中去。在毕业设计过程中,小组成员给与了我很大的帮助。与人合作不光是毕业设计所需要的,在我们的很多工作中都需要它。毕业设计的实践为我们以后进入社会奠定了基础。
四﹑致谢
本次毕业设计能够顺利完成离不开我们指导老师邹显春老师的指导和帮助,卢心红老师、陈武老师、闻晓老师、李运刚老师在此过程中也给予了极大的帮助,对他们的帮助表示衷心的感谢。还有小组所有成员对我的大力支持,在此对他们表示衷心的感谢!
参考文献:
[1] 张莉, 王强, 赵文昉, 董莉. SQL Server 数据库原理及应用教程. 清华大学出版社
[2] 魏胤红等 译. ASP.NET 分布式数据应用程序高级编程. 清华大学出版社
[3] 郭胜,秦岸,马丽. C#.NET 程序设计教程. 清华大学出版社
附录:
界面设计中部分实现的代码
(一)自定义登录控件Login的代码
图1 登录控件
/*登录时身份验证的代码*/
private void Button1_Click(object sender, System.EventArgs e)
{
/*对参数进行规范化处理,去掉多余的空格*/
string nickname=TextBox1.Text.Trim();
string password=TextBox2.Text.Trim();
string role="";
/*调用UIA的WebService来完成用户身份验证*/
UserRef.UserService userref=new UserRef.UserService();
/*判别用户信息是否真实*/
if(userref.CheckUser(nickname,password))
/*判别该用户是否可用*/
if(userref.IsUserEnabled(nickname))
{
if(userref.IsInRole(nickname,"教学管理员",Config.USID))
if(userref.IsRoleEnabled(nickname,"教学管理员",Config.USID))
role="教学管理员";
if(userref.IsInRole(nickname,"任课教师",Config.USID))
if(userref.IsRoleEnabled(nickname,"任课教师",Config.USID))
role="任课教师";
}
if(role=="")
{
TextBox1.Text="";
TextBox2.Text="";
return;
}
/*对用户信息加密*/
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket (1,nickname,DateTime.Now, DateTime.Now.AddMinutes(30), false,role,"/") ;
string HashTicket = FormsAuthentication.Encrypt (Ticket);
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
Response.Cookies.Add(UserCookie);
/*登陆后返回到上次调用的页面*/
try
{
Response.Redirect (Request.QueryString["ReturnURL"].ToString(),true);
}
catch(Exception k)
{
Response.Redirect("default.aspx",true);
}
}
(二)自定义教学计划树形控件TeachingPlanTree的代码
public class TeachingPlanTree : System.Web.UI.UserControl
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
DataTable table=new
TeachingPlanSystem().ListTeachingPlans().Tables[0];
//table.Select
foreach(DataRow row in table.Rows)
{
bool flag=false;
foreach(TreeNode node in TreeView1.Nodes)
if(node.Text==row["Term"].ToString() )
flag=true;
if(flag==false)
{
TreeNode lay1=new TreeNode();
lay1.Text=row["Term"].ToString();
this.TreeView1.Nodes.Add(lay1);
foreach(DataRow row2 in
table.Select("Term='"+lay1.Text+"'"))
{
TreeNode lay2=new TreeNode();
lay2.Text=row2["CourseName"].ToString();
bool flag2=false;
foreach(TreeNode node in lay1.Nodes)
if(node.Text==row2["CourseName"].ToString() )
flag2=true;
/*如果这门课程还没有加入到树中,则加入它*/
if(flag2==false)
lay1.Nodes.Add(lay2);
else continue;
foreach(DataRow row3 in
table.Select("Term='"+lay1.Text+"' and
CourseName='"+lay2.Text+"'"))
{
TreeNode lay3=new TreeNode();
lay3.Text=row3["DeptName"].ToString();
lay2.Nodes.Add(lay3);
DataRow[] idRow=table.Select("Term='"+lay1.Text+"' and CourseName='"+lay2.Text+"' and DeptName='"+lay3.Text+"'");
lay3.NodeData=idRow[0]["TeachingPlanID"].ToString();
lay3.NavigateUrl="scoreview.aspx?TeachingPlanID="+idRow[0]["TeachingPlanID"].ToString();
}
}
}
}
}
(三)学生查询页面的代码
图2 学生信息与成绩查询页面
/*查询按钮点击事件*/
private void Button1_Click(object sender, System.EventArgs e)
{
DataGrid1.DataSource=null;
string snumber=TextBox1.Text.Trim();
string sname=TextBox2.Text.Trim();
DataSet data=new ScoreSystem().GetScores(snumber);
/*检验学生输入信息是否正确*/
if(sname!=data.Tables[0].Rows[0]["SName"].ToString() )
{
Label3.Visible=true;
return ;
}
Label3.Visible=false;
/*在学生基本信息表和学生成绩表中显示所需信息*/ DataGrid1.DataSource=DataGrid2.DataSource=data.Tables[0].DefaultView;
DataBind();
}
(四)在下拉列表中显示数据库中的数据
图三 教学计划选项显示
private void Page_Load(object sender, System.EventArgs e)
{
/*验证访问者是否有权限查看此页面*/
if(this.Page.User.IsInRole("教学管理员")==false)
Response.Redirect("roleerror.aspx?ReturnURL="+Request.Url,true);
if(!Page.IsPostBack)
{
// 在此处放置用户代码以初始化页面
DropDownList1.DataSource=new DeptMajorSystem().ListAllDepts().Tables[0].DefaultView;
DropDownList1.DataTextField="DeptName";
DropDownList1.DataValueField="DeptID";
DropDownList4.DataSource=new CourseSystem().ListAllCourses().Tables[0].DefaultView;
DropDownList4.DataTextField="CourseName";
DropDownList4.DataValueField="CourseID";
DropDownList5.DataSource=new TeacherSystem().ListAllTeachers().Tables[0].DefaultView;
DropDownList5.DataTextField="TeacherName";
DropDownList5.DataValueField="TeacherID";
DataBind();
}
}
(五)成绩录入代码
private void Button1_Click(object sender, System.EventArgs e)
{
int id=(int)this.Cache["TeachingPlanID"];
if(new BusinessFacade.ScoreSystem().AddScore(TextBox1.Text,id,float.Parse(TextBox3.Text),float.Parse(TextBox4.Text),float.Parse(TextBox5.Text)) )
{
Panel1.Visible=false;
TextBox1.Text=TextBox1.Text.Substring(0,TextBox1.Text.Length-3);
TextBox3.Text="";
TextBox4.Text="";
TextBox5.Text="";
}
else
{
Panel1.Visible=true;
}
}
(六)各分数段显示代码
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(this.Page.User.IsInRole("教学管理员")==true || this.Page.User.IsInRole("任课教师")==true)
{
}
else
Response.Redirect("roleerror.aspx?ReturnURL="+Request.Url,true);
int id=int.Parse(this.Cache["TeachingPlanID"].ToString());
ScoreSystem s=new ScoreSystem();
for(int i=0;i<10;i++)
{
int c=s.AnalyzeScores(id,i,(i+1)*10);
if(i==0)
TextBox1.Text=c.ToString();
if(i==1)
TextBox2.Text=c.ToString();
if(i==2)
TextBox3.Text=c.ToString();
if(i==3)
TextBox4.Text=c.ToString();
if(i==4)
TextBox5.Text=c.ToString();
if(i==5)
TextBox6.Text=c.ToString();
if(i==6)
TextBox7.Text=c.ToString();
if(i==7)
TextBox8.Text=c.ToString();
if(i==8)
TextBox9.Text=c.ToString();
if(i==9)
TextBox10.Text=c.ToString();
}
}