学生成绩管理系统_第1页
学生成绩管理系统_第2页
学生成绩管理系统_第3页
学生成绩管理系统_第4页
学生成绩管理系统_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 学生成绩管理系统近年来,高校的招生规模不断扩大,在校大学生的人数不断上升。在办公自动化日益盛行的今天,很多高校都将自动化引入到对学生的日常管理当中,学生成绩管理系统就是其中非常重要的一环。特别是针对当前学生规模大、课程门类多、校区分散等实际情况,学生成绩管理系统具有非常重要的实际应用意义。本章我们就来为大家讲解一个学生成绩管理系统的设计和实现过程。4.1 收集与分析应用需求4.2.1. 收集需求学生成绩管理系统需要完成三个方面的内容:学生档案资料的管理、学生必修课成绩的管理和学生选修课成绩的管理。这三个方面的管理内容均需提供添加、修改、查询的功能。另外,系统还应该可以完成选修课选报功能

2、,即学生通过系统选报课程,老师通过系统批复学生的选报请求。下面是一个学生成绩管理系统开发过程中收集到的客户需求的文档记录的关键部分:1. 有三类用户需要使用到学生成绩管理系统:教师、学生和系统管理员。2. 系统管理者可以使用系统完成的操作有:添加学生档案资料、修改学生档案资料、查询学生的档案资料、添加学生必修课成绩记录、修改学生必修课成绩记录、添加学生选修课成绩记录、修改学生必修课成绩记录、查询学生的成绩记录。3. 学生只能使用系统对系统的开发内容进行查询,包括:学生可以查询自己的所有成绩记录信息,包括必修课成绩和选修课成绩。学生还可以查询具体科目的公共信息,如课程信息,平均成绩,及格率,优良

3、率等。4. 学生只能查询自身档案的开放信息,例如姓名、出生年月、政治面貌等,但是不可以查询自身档案的不开放信息。5. 学生可以使用系统选报选修课课程,教师使用系统批复自己所教科目的选修课请求。教师还可以通过该系统发布课程的成绩,包括必修课成绩和选修课成绩。6. 不同的用户应该具有相应的权限控制,重要的数据信息需要加密并备份7. 当系统出现故障时,应该有相应的应急措施或系统恢复功能8. 在具备权限的前提条件下,允许系统的数据有多份拷贝,但是各个拷贝之间必须维护数据的一致性。4.2.2. 分析需求从以上收集到的需求来看,学生成绩管理系统需要满足三个方面的需求,这三个方面分别是作为管理员使用系统对全

4、部数据实体进行维护操作,教师对与自己相关的部分数据实体进行维护操作以及学生作为查询者使用系统对数据实体进行查询操作。这三方面需求的差异是由不同的用户对象类型所具有的权限的差异而造成的,因此对系统功能的限制就可以转换为对用户操作权限的限制。系统管理员可以直接使用系统的全部功能,其权限没有限制。当然,从安全的角度来讲这种方式给予了管理员过大的权限,将造成系统潜在的安全威胁。有一种方法可以降低系统的安全风险,那就是分散管理员的操作职权,将管理内容分为三个部分,即将档案管理、必修课成绩管理和选修课成绩管理分开,不同的管理员分管不同的部分。可是这样做增加了系统的维护成本以及系统实现的复杂性,具体如何取舍

5、应当由客户方的安全意愿强度来决定,本章为了降低讨论的复杂性,选取前一种方案。查询者的需求相对而言要比管理者的需求简单得多,因而实现起来也将容易许多。只是有一点需要说明的是,成绩的开放程度可以根据用户的需求决定。教师这类用户角色则只具备部分的管理员权限,即他们只具备处理与自己课程相关部分的数据实体的权限,其实现方式与管理员中对应的功能的实现方式一致。下面就是通过分析后得到的系统需要实现的功能:Ø 设计不同用户的操作权限和登陆方法Ø 添加学生档案记录Ø 修改学生档案记录Ø 查询学生档案资料Ø 生成学生档案记录的报表Ø 添加学生必修课成绩记

6、录Ø 修改学生必修课成绩记录Ø 查询学生必修课成绩记录Ø 生成学生必修课成绩报表Ø 添加学生选修课成绩记录Ø 修改学生选修课成绩记录Ø 查询学生选修课成绩记录Ø 生成学生选修课成绩报表Ø 提交选修课选报申请Ø 批复选修课选报申请4.2 系统建模4.2.1. 学生成绩管理系统的用例分析在前面的需求分析过程中,我们明确了系统的三类角色(Actor)及其相关的用例:l 系统管理员:系统管理员使用了系统中的所有用例,这些用例大致可以分为添加、修改、查询记录以及生成报表四类。l 学生:学生仅仅使用系统的查询功能以及

7、使用系统选报选修课课程,不具备操作系统中其它功能的权限。l 教师:教师具备部分管理员的权限,他们能够修改与自己课程相关的数据实体的内容,但除此之外的数据实体则不能被修改。根据前面的需求分析,我们得到了学生成绩馆管理系统的用例(UseCase)图。首先我们看到的是整个系统的用例图,如图4-1所示:图4-1系统的总体用例图在上面的用例图当中,我们仅仅给出了系统的总体用例图。从图中我们可以看到,系统的用户(包括管理员、教师和学生)如果需要使用系统的功能的话,必须经过登陆验证的环节,这是对保证系统数据的保密性和安全性所采取的非常重要的措施。上面的用例图中的用例的功能比较模糊,还需要对其进一步的细化。下

8、面就是对总体用例图的进一步的细化过程。首先我们看到的是对学生档案管理事务用例的细化过程,如图5-2所示:图4-2 处理学生档案管理事务的用例图从读者的用例图中我们可以看到:处理学生档案管理事务的用例包括四个部分的内容:添加学生档案记录,修改学生档案记录,查询学生档案记录以及生成学生档案信息报表,<<include>>关系表明了处理学生档案管理事务用例对后面四部分内容的包含关系。在上图中,还有一种<<extend>>关系,它出现在子用例“查询学生档案信息”和“生成学生档案信息报表”之间。<<extend>>关系表示“查询学生

9、档案信息”用例可以延伸到“生成学生档案信息报表”用例,这是因为如果在“查询学生档案信息”用例中使用宽条件查询或者多条件查询时,返回的结果必须以相应的报表形式表现出来。这种延伸关系中前一个用例仅仅用到了后一个用例的部分功能,所以不构成<<include>>关系或者<<depend>>关系,所以用<<extend>>关系来表示这种概念上的重叠是最恰当的。学生档案管理事务完全由系统管理员负责,系统的其他用户都不具备操作学生档案记录的权限。为了确保系统中档案信息的安全性和可靠性,严格控制对敏感数据操作的用户的范围是一个十分有效的方

10、法。提到学生档案记录,还有一点需要强调的是,学生档案信息的开放范围也是受限制的。档案信息中的部分信息是对所有人开放的,这部分内容可以称之为学生的公共信息,而有些内容则只有系统管理员才具备阅读的权限,恰恰是这部分内容是系统所要重点保护的。具体的保护措施应当由信息的重要程度以及客户安全意愿的强度来决定。图4-3 处理学生必修课成绩事务的用例图图4-4 处理学生选修课成绩事务的用例图图5-3和图5-4分别表示了“处理学生必修课成绩事务”和“处理学生选修课成绩事务”两个用例的细化用例图。细化后的用例总体上还是围绕添加、修改、查询和生成报表这四个方面展开,不过与“处理学生档案管理事务”用例相比,这两个用

11、例一个最大的不同是增加了一类“教师”的角色。作为某门课程的任课老师,无论是必修课还是选修课,“教师”都完全有权限来处理该课程的所有成绩记录。在该课程范围内,管理员是受“教师”的委托来处理成绩事务的,“教师”拥有对成绩的最高处理权限,这就意味着如果管理员的成绩处理出错,“教师”具备纠正这种错误的权限。但是,在自己所属的课程范围之外的时候,“教师”则只具备与“学生”类角色相同的权限。图4-5 成绩查询事务的用例图成绩查询事务的用例图非常简单,成绩查询者使用该用例查询必修课和选修课的成绩记录。需要注意的一点是,成绩查询者不单指“学生”,其中还可以包括不具备修改该项成绩记录“教师”等角色。换句话说,在

12、自己所任课程之外的“教师”角色有可能退化成为系统中的成绩查询者而使用系统的其他功能。下面是对本系统中涉及到的主要用例的一些简单介绍:1. 登陆/退出系统:本用例描述了用户如何登陆和退出本系统,登陆时要注意的事项,本系统所有用户都启用本用例。2. 添加学生档案记录:本用例描述了系统管理员在允许的条件下,向系统中添加学生的档案记录。本用例是面向管理员的,仅仅只有管理员才可以启用本用例。3. 查询学生档案信息:本用例描述如何进行学生档案信息的查询:管理员可以使用多种条件来对所有用户的档案资料进行查询,而学生则只能查阅公开的档案信息。本用例的使用者主要是系统管理员,其他各类人员的功能受到限制。4. 修

13、改学生档案信息:本用例主要是描述如何实现对学生档案记录的修改。本用例中的使用角色仅仅为系统管理员,其他各类使用者都不具备执行此操作的权限。5. 生成学生档案信息报表:本用例是描述如何将多条学生档案记录做成报表的格式显示处来,本用例的角色是系统管理员。6. 添加必修课成绩记录:本用例描述如何向系统当中添加必修课成绩记录,主要角色是教师和系统管理员。7. 查询必修课成绩记录:本用例描述了用户如何进行必修课成绩记录的查询,主要角色是读者,但教师和管理员也能够启动该用例。系统能够对此用例提供不同的权限控制方案,具体的策略应该根据实际情况来制订。8. 修改必修课成绩记录:本用例了描述教师或管理员如何修改

14、已有的必修课成绩记录,因此主要角色是教师和系统管理员。9. 生成必修课成绩报表:本用例描述教师或管理员如何将多条必修课成绩记录做成报表,主要角色是教师和管理员。10. 添加选修课成绩记录:本用例描述如何向系统当中添加选修课成绩记录,主要角色是教师和系统管理员。11. 查询选修课成绩记录:本用例描述了用户如何进行选修课成绩记录的查询,主要角色是读者,但教师和管理员也能够启动该用例。系统能够对此用例提供不同的权限控制方案,具体的策略应该根据实际情况来制订。12. 修改选修课成绩记录:本用例了描述教师或管理员如何修改已有的选修课成绩记录,因此主要角色是教师和系统管理员。13. 生成选修课成绩报表:本

15、用例描述教师或管理员如何将多条选修课成绩记录做成报表,主要角色是教师和管理员。14. 选报选修课:本用例描述学生如何使用该系统完成选修课的报名工作,因此学生群体是该用例的唯一的使用者。选修课报名最终是否有效,还需要等待教师的“批复选修课”用例的处理结果。15. 批复选修课申请:本用例描述了选修课的任课老师如何处理现有的选修课申请并给予批复的,该用例的主要使用者是教师。4.2.2. 学生成绩管理系统的领域分析在用例分析的基础之上,我们将进行领域分析。领域分析的目的在于确定系统中概念与概念之间的关系。本系统涉及的概念比较少,各个概念之间的联系相对集中。整个系统中的概念可以大体分为四个部分:学生档案

16、信息,必修课成绩信息,选修课成绩信息和选修课选报信息。其中前面三个部分的内容的操作管理过程比较相似,都包括添加、修改、查询和生成报表这四个方面的内容。选修课选报信息的处理则比前三部分的操作要相对简单一些,只需要提供添加记录和批复记录的操作即可。图4-6中描述了该管理系统中前面三个主要概念的领域关系,而图5-7则描述了该管理系统中各个概念间的层次关系。图4-6学生成绩管理系统的总体领域关系图图4-7学生成绩管理系统的层次领域关系图总体领域图中比较详细地描述了系统中主要概念的关键属性和重要方法,层次领域图则描述了系统中几类概念的继承关系以及各类概念之间的关系。尽管形式上存在差异,但是这两个图形表达

17、了相同的含义:学生成绩管理系统中各个概念之间的联系。领域关系图比较清晰地描述了系统中各个概念之间的静态关系,如果需要描述系统中的动态关系,就必须用到UML的时序图、协作图或者活动图。时序图的基础是用例,在时序图中,将说明域类是如何操作和协作系统中的用例的。下面就以时序图来描述系统中的动态关系。4.2.3. 图书馆管理系统的系统设计为了更加详细地介绍本系统中各个用例的工作过程,接下来我们给出本系统中关键用例的UML时序图。时序图反映了各用例的工作流程,以及工作过程中系统各层次间的协作关系,这对编码实现非常重要。1. 登陆/退出系统图4-8 登陆/退出时序图说明:1) 系统的所有用户都必须经过登陆

18、之后才能使用系统所提供的功能,不登陆则不能使用。系统不为“游客”身份的用户提供服务。2) 从系统的安全角度考虑,用户的登陆信息需要使用加密手段进行处理,以保证系统的安全。考虑到系统实现的复杂程度,本章中的案例没有提供加密功能。如果实际应用需要,可以修改相关的内容。2. 查询学生档案信息图4-9查询学生档案信息的时序图说明:1) 整个系统中的学生档案信息都由系统管理员负责,对学生档案信息的查询操作也必须要求具备管理员权限才能执行。2) 系统应当为管理员提供多条件查询和宽条件查询服务,以便系统管理员能够查询符合特定条件的某一类学生的档案信息。3) 由于系统管理员可能需要查询某一类学生的档案信息,所

19、以在查询用例中可能需要启动生成学生档案信息报表用例。3. 添加学生档案信息图4-10添加学生档案信息的时序图说明:1) 整个系统中的学生档案信息都由系统管理员负责,对学生档案信息的添加操作也必须要求具备管理员权限才能执行。2) 在真正执行添加操作之前,系统必须验证所输入的参数的合法性。合法性检查的内容包括:关键字段是否为空,参数是否符合系统中的范围约束等等。3) 此外,管理员还必须对所添加的档案信息的真实性负责。档案信息的真实性不能通过程序验证,但是可以通过一系列的实际手段进行保障。4. 修改学生档案信息图4-11修改学生档案信息的时序图说明:1) 整个系统中的学生档案信息都由系统管理员负责,

20、对学生档案信息的修改操作也必须要求具备管理员权限才能执行。2) 在真正执行修改操作之前,系统必须验证所输入的参数的合法性。3) 修改操作过程中包含了对目标记录的查找过程,这个工作应当由低层的数据库完成。需要说明的是,这个查找过程与查询过程还是有区别的:该查找过程仅仅局限对特定记录的查找,并只限于使用记录的主关键字查询。5. 添加必修课成绩记录图4-12添加必修课成绩记录的时序图说明:1) 系统管理员和教师都能够启动该用例。(图中只给出了系统管理员的图示,但是由于教师和管理员执行改用例的过程完全一致,所以可以认为二者具有等同的身份)2) 在真正执行修改操作之前,系统必须验证所输入的参数的合法性。

21、3) 该用例的真正发起者是教师,系统管理员是受教师的委托而完成此用例的,也就是说成绩记录的解释权归教师所有,管理员只是执行操作而已。4) 教师只对自己所任课程具有解释权,不能对其它课程的成绩记录进行操作。但是管理员却可以接受多个委托而操作不同的成绩记录。6. 修改必修课成绩记录图4-13修改必修课成绩记录的时序图说明:1) 系统管理员和教师都能够启动该用例。(图中只给出了系统管理员的图示,但是由于教师和管理员执行改用例的过程完全一致,所以可以认为二者具有等同的身份)2) 该用例的真正发起者是教师,系统管理员是受教师的委托而完成此用例的,也就是说成绩记录的解释权归教师所有,管理员只是执行操作而已

22、。3) 修改过程当中也包括一个查找目标记录的过程。7. 查询成绩记录图4-14修改必修课成绩记录的时序图说明:1) 系统的所有用户都可以执行该用例,但是该用例的主要使用者是学生。2) 成绩的查询工作包括两个部分:查询必修课成绩和选修课成绩。3) 不同的用户所具备的查询权限也不一致:系统管理员可以查询系统中的所有成绩记录,教师可以查询自己所任科目的所有学生的成绩记录,而学生则只能查询自己的成绩记录。8. 选修课选报过程图4-15选修课选报的时序图说明:1) 该用例的使用者是学生,其它用户不需要使用该用例。2) 选修课选报过程中可能包含对选修课课程信息的查询工作。3) 学生选报完选修课课程以后,必

23、须等待所报课程的老师的批复,在批复之前用例处于等待状态。如果该选修课的报名人数超过计划人数,那么将可能出现请求不能被满足,用例执行失败的情况。9. 批复选修课请求图4-16批复选修课选报请求用例的时序图说明:1) 该用例的主要使用者是教师,只有在特殊情况下才由教师委托系统管理员完成该操作。2) 教师根据选修课的报名情况和选修课教学计划来批复学生的选报请求,批复的状态可能是:批准请求,拒绝请求或者延迟请求。完成了系统中各个用例的时序图设计之后,我们就可以开始对整个统进行架构设计和详细设计了。架构设计需要做的工作是:定义系统的层次结构(使用包或子系统的形式),确定各个层次结构之间的相互联系以及制定

24、各个层次之间的通信机制。通过前面的分析,业务对象包中的域类已经基本明确,下面的工作只需要对域的属性和操作进行实现和完善。通常,系统中都提供了操作底层数据库实体的接口,所以只需要为客户系统建立满足需求的数据库对象就可以了。用户界面和应用控制流程都是下一步设计工作所需要完成的工作。至此,我们基本上完成了系统的概要设计,可以进入详细设计阶段了。详细设计阶段是对概要设计中定义的包的细化,以便编程人员编码实现。由于篇幅的限制,详细设计部分请读者自行完成,在这里就不再赘述。4.3 设计数据库4.3.1. 概念设计在概念设计阶段中,设计人员从用户的角度看待数据及处理要求和约束,产生一个反映用户观点的概念模式

25、。然后再把概念模式转换成逻辑模式。将概念设计从设计过程中独立开来,使各阶段的任务相对单一化,设计复杂程度大大降低,不受特定DBMS的限制。在前面的领域分析当中,我们已经大致分析了该系统中各个概念之间的关系。在此基础之上再进行ER模式分析,可以得到“学生成绩管理系统”的全局ER模式,如下图所示: 图4-17 系统的全局ER模型图4.3.2. 数据库的实现前面我们通过数据库的概念设计得到了系统的ER图,下面我们需要根据所采用的DBMS系统把ER图转化为关系模式。本章所介绍的系统是选用Microsoft SQL Server2000(企业版)数据库来进行数据库的逻辑设计,其为系统所创建的数据表如下所

26、示:表4-1为系统管理员所建立的数据表字段名数据类型长度id Varchar10NameVarchar10PasswordVarchar10表4-2为课程信息所建立的数据表字段名类型长度IdVarchar50Teat_idVarchar10Room_idchar50Cour_idVarchar10Cour_timeChar10表4-3为选修课选报信息所建立的数据表字段名类型长度Stu_idVarchar50Class_idVarchar50AcceptBit1ScoreVarchar50表4-4为学生档案信息所建立的数据表字段名类型长度IdVarchar50NameVarchar10Passw

27、ordVarchar50JiguanVarchar10DepartmentVarchar10SexVarchar10MarkInt4表4-5为教师信息所建立的数据表字段名类型长度IdVarchar10NameVarchar50TitleVarchar50PasswordVarchar504.4. 设计用户界面界面是Web应用和用户交互的窗口。用户界面接收用户的输入信息,并将程序执行的结果向用户输出。良好的用户界面能够提升用户的工作效率,使系统获得更好的肯定。根据用例可以制定出用户界面,包括:用户界面的功能、与用户交互的信息,以及用户界面之间的切换关系等。根据需求分析,其用户界面可以分为以下四个

28、模块:l 登陆模块:登陆界面,登陆失败界面l 学生模块:主界面,选修课程,察看学分,修改个人信息l 教师模块:挑选学生,打分,公布成绩l 管理员模块:学生管理,教师管理,课程管理,班级管理下面将分别介绍。4.4.1. 登陆模块系统中使用一个登陆界面,在界面中,提供身份选择栏,用户可以先选择身份,然后登陆。界面设计如下;图4-18 系统的登陆界面图用户登陆失败后,系统转向登陆失败界面,在登陆失败界面中,将显示登陆失败原因,和登陆界面的链接,方便用户再次登陆。界面设计简略。4.4.2. 学生模块学生登陆以后,出现学生模块主界面,上面提供三个主要功能:选修课程,察看学分和更改个人信息。图4-19 学

29、生的主功能模块界面图在学生选修课程页面中,系统会列出所有满足该生系别以及该生还未选报的课程,或者其预修课为“public”的课程。如果该生选报了未满足预修课要求的课程,系统会有相关的错误提示。图4-20 学生选报选修课程界面图查看成绩页面则列出学生所选的课程的名称,学分以及 该生的总分。如果教师还未给出成绩,则系统会有相关提示。图4-21 学生查看成绩界面图学生可以修改的个人信息包括密码,电话和e-mail,这些信息可以通过更改个人信息页面修改。图4-22 学生更改个人信息的界面图4.4.3. 教师模块教师在本系统中拥有是否接受学生所选课程,给学生打分的权力和公布成绩的权利。教师主界面提供了这

30、些功能的入口。教师给学生打分以前,必须先接受该学生选修此课程。教师通过挑选界面接受学生选修,在界面中,将列出该教师所教课程和上这门课的班级,以及选报了该课程的所有学生。界面设计如下:图4-23 教师查看课程信息的界面图图4-24 教师处理选修课选报信息的界面图教师接受了学生选修他的课程后,就可以在考试后给他打分了图4-25 教师处理选修课成绩的界面图4.4.4. 管理员模块下面是管理员处理课程信息的界面:图4-26 管理员处理课程信息的界面图图4-27 管理员处理学生档案信息的界面图4.5. 系统结构和流程首先,我们看到的是系统的总体结构图:图4-28 系统的总体结构图从上面我们可以看出,系统

31、可以明显的分为三个层次结构:视图层、控制层和模型层,模型层的下边界是系统所连接的数据库实体。这种层次结构能够比较清晰地描述系统的功能流程,有利于代码实现。下面看到的是系统地登陆验证地流程:图4-29 系统的登陆验证地流程图然后是学生登陆后地功能流程:图4-30 学生的功能流程图再接着就是教师的功能流程图:图4-31 教师的功能流程图上面的两个功能流程图比较简单,这与他们的功能需求比较简单是相一致的。需要注意的是系统对错误的处理流程,完善的错误处理能够保证系统的可靠性。最后我们看到的是系统管理员的功能流程图:图4-32 系统管理员的功能流程图4.6. 代码实现整个系统采用Servlet+Jsp+

32、JavaBean+SQL2000 设计方式,其中Servlet担当主要逻辑控制,通过接受Jsp传来的用户请求,调用以及初始化JavaBean,在通过Jsp传到客户端,其中的SqlBean担当主要的与数据库的连接与通信,JavaBean在本系统中主要担当配合Jsp以及Servlet来完成用户的请求,而Jsp主要担当接受与响应客户端。下面对整个代码的设计流程及实现做一个介绍。首先,我们必须完成SqlBean,它是整个数据库操作的基础,应为系统提供各种灵活的数据接口,如数据的添加、删除、查询等以达到数据良好的封装特性。下面就是SqlBean.java的具体代码实现,可以看出数据库的操作是一个比较固定

33、的流程,连接数据库,然后对数据进行查询、添加等操作,最后返回结果。import java.io.*; import java.sql.*; public class sqlBean/数据库连接public Connection conn=null;/返回结果public ResultSet rs=null;/数据库驱动private String DatabaseDriver="sun.jdbc.odbc.JdbcOdbcDriver" /DataSource 数据源名称DSN private String DatabaseConnStr="jdbc:odbc:C

34、lassDB2,'limq',123"/定义方法 /*setXxx用于设置属性值;getXxx用于得到属性值*/ public void setDatabaseDriver(String Driver) this.DatabaseDriver=Driver; public String getDatabaseDriver() return (this.DatabaseDriver); public void setDatabaseConnStr(String ConnStr) this.DatabaseConnStr=ConnStr; public String ge

35、tDatabaseConnStr() return (this.DatabaseConnStr); /构造函数public sqlBean() try Class.forName(DatabaseDriver); catch(java.lang.ClassNotFoundException e) System.err.println("加载驱动器有错误:"+e.getMessage( ); System.out.print("执行插入有错误:"+e.getMessage();/输出到客户端 /添加数据 public int executeInsert(S

36、tring sql) int num=0;try conn = DriverManager.getConnection("jdbc:odbc:ClassDB","limq","123");Statement stmt=conn.createStatement( ); num=stmt.executeUpdate(sql); catch(SQLException ex) System.err.println("执行插入有错误:"+ex.getMessage() ); System.out.print("执行

37、插入有错误:"+ex.getMessage();/输出到客户端 CloseDataBase();return num; /查询数据public ResultSet executeQuery(String sql) rs=null; try conn = DriverManager.getConnection("jdbc:odbc:ClassDB","limq","123");Statement stmt=conn.createStatement( ); rs=stmt.executeQuery(sql); catch(SQL

38、Exception ex) System.err.println("执行查询有错误:"+ex.getMessage() ); System.out.print("执行查询有错误:"+ex.getMessage(); /输出到客户端 /返回结果return rs; / 删除数据 public int executeDelete(String sql) int num=0;try conn = DriverManager.getConnection("jdbc:odbc:ClassDB","limq","12

39、3");Statement stmt=conn.createStatement( ); num=stmt.executeUpdate(sql); catch(SQLException ex) System.err.println("执行删除有错误:"+ex.getMessage() ); System.out.print("执行删除有错误:"+ex.getMessage(); /输出到客户端 CloseDataBase();return num; /关闭数据库public void CloseDataBase() try conn.close(

40、); catch(Exception end) System.err.println("执行关闭Connection对象有错误:"+end.getMessage( ) ); System.out.print("执行执行关闭Connection对象有错误:有错误:"+end.getMessage(); /输出到客户端 完成底层数据库的操作后,我们前面所定义的各种数据结构,如课程信息、学生信息等就可以编写专门的数据操作类来进行很好的封装。下面以课程信息的数据封装为例做一个说明。代码见course.java,其为课程相关属性的数据库操作(主要是各属性的get/

41、set方法)提供了各种支持。import java.sql.*;public class course /course的属性 private String id; private String name; private String dep; private String prepare; private int mark; /course的get/set方法 public void setPrepare(String s)prepare=s; public String getPrepare()return prepare; public void setMark(int s)mark=s

42、; public int getMark()return mark; public void setDep(String s)dep=s; public String getDep()return dep; public String getId() return id; public void setId(String id) this.id = id; public String getName() return name; public void setName(String name) = name; /得到所能选择的预修课 public ResultSet get

43、Prepares() String sql="select name,id from course " sqlBean db = new sqlBean(); ResultSet rs = db.executeQuery(sql); return rs; /察看预修课所在系 public String getPrepareDep() String s="no" String sql="select dep from course where id='"+prepare+"' " sqlBean db

44、 = new sqlBean(); try ResultSet rs = db.executeQuery(sql); if(rs.next() s=rs.getString("dep"); catch(Exception e) e.getMessage(); return s; /察看所有课程 public ResultSet getCourse() String sql="select * from course "sqlBean db= new sqlBean();ResultSet rs = db.executeQuery(sql); return

45、 rs; /删除id所对应的课程 public int deleteCourse(String id) int num=0; String sql="delete from Course where id ='"+id+"' " sqlBean db= new sqlBean(); num=db.executeDelete(sql); return num; public String getPrepareDep(String id) String dep="" String sql="select dep

46、from course where id='"+id+"'" sqlBean db= new sqlBean(); try ResultSet rs = db.executeQuery(sql); if(rs.next() dep=rs.getString("dep"); catch(SQLException e)System.out.print(e.toString(); return dep; public void updateCourse(String id) String sql="update course

47、 "+ " set name='"+name+"',prepare='"+prepare+"',"+ "dep='"+dep+"',mark='"+mark+"' "+ " where id='"+id+"' " sqlBean db= new sqlBean(); db.executeInsert(sql); /添加课程 public void

48、addCourse() String sql="insert into course(id,name,mark,prepare,dep) "+ "VALUES('"+id+"','"+name+"','"+mark+"','"+prepare+"','"+dep+"') " sqlBean db = new sqlBean(); db.executeInsert(sql); /

49、是否登陆 public boolean hasLogin( String id) boolean f=true; String sql="select id from course where id='"+id+"' " sqlBean db = new sqlBean(); try ResultSet rs =db.executeQuery(sql); if(rs.next() f=false; catch(Exception e) e.getMessage(); return f; 我们还可以对用户所触发的程序动作所对应的数据库操作进

50、行封装,如登陆时用户密码的验证,选课时检查该学生是否能选等。checkEnrol.java就是提供了学生进行选课时各种程序动作的所对应的数据库操作,代码如下。import java.sql.*;public class checkEnrol/是否完成预修课public boolean hasPassPrepare(String prepare) boolean f=false; int a=0; String temp=null; String sql="select score "+"from enrol,classes ,course "+"

51、;where enrol.class_id=classes.id "+"and classes.cour_id=course.id "+"and course.id='"+prepare+"' " sqlBean db=new sqlBean(); try ResultSet rs = db.executeQuery(sql); if(rs.next() temp=rs.getString("score"); catch(SQLException e)System.out.print(e.

52、toString(); if(temp=null | temp.equals("") return false; else try a=Integer.parseInt(temp); catch(NumberFormatException e)System.out.print(e.toString(); if(a>=60) f=true; return f; /该学生是否已经注册该课程 public boolean hasLogin(String stu_id,String cour_id) boolean f=true; String sql="selec

53、t stu_id,class_id "+"from enrol,classes "+"where stu_id='"+stu_id+"' "+"and classes.id=enrol.class_id "+"and cour_id='"+cour_id+"' " sqlBean db =new sqlBean(); try ResultSet rs=db.executeQuery(sql); if(rs.next() f=false

54、; else f=true; catch(Exception e) e.getMessage(); return f; /学生id所对应的课程列表 public ResultSet getCourse(String stu_id) String sql="select DISTINCT course.id,,course.prepare,course.dep , "+"classes.id as class_id,classes.room_id,classes.cour_time, as tea_name "

55、+"from course,classes,teacher "+"where classes.cour_id=course.id "+"and classes.tea_id=teacher.id "+ "and classes.id in "+"( select classes.id from classes,student,course "+"where classes.id not in( select class_id from enrol where stu_id='&

56、quot;+stu_id+"') "+"and ( student.department=course.dep or course.dep ='public') "+"and course.id=classes.cour_id and student.id='"+stu_id+"') " sqlBean db = new sqlBean(); ResultSet rs= db.executeQuery(sql); return rs; /学生id所对应的总分数 public

57、String getTotalMark(String id) String temp="0" String sql="select mark from student where id='"+id+"' " sqlBean db = new sqlBean(); ResultSet rs= db.executeQuery(sql); try if(rs.next() temp=rs.getString("mark"); catch(Exception e) return temp; /更新学生信息 public int updatestu(String pw,String id,String e_mail,String tel) int n

温馨提示

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

评论

0/150

提交评论