还剩207页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
Java项目实战院系计算机学院班级计071-3姓名闫轲学号200725501317目录TOC\o1-3\h\z\u课题一需求分析3课题二项目计划安排10课题三概要设计19课题四详细设计23课题五数据库设计35课题六项目技术准备44课题七系统功能设计47课题八项目的测试200课题九实战演练205附件软件文档编写向导209课题一需求分析一套软件是否有市场,满足用户需求是关键因素,所以搞清楚用户到底需要什么是软件开发的头等大事用户需求如何得来?用户有没有把需求描述清楚?如何把用户需求转化成自动化方式?软件的开发其实就是从一个个问题开始,再一个个地解决地过程整个需求的过程如图图1-1需求过程图
1.1用户提出自己的需求本例用户是××职业技术学院,目前使用的是手工记录学生的信息随着学校规模的增大以及新增学生选课的影响,手工方式已经无法记录学生的实时信息,该学校决定用一套新的学生信息管理系统软件,并要求满足以下条件
(1)学生卡使用磁卡及防伪标志,学生卡如有遗失,学校方面可以补办、原资料需重新录入
(2)学生卡不能转借给他人使用,如违反给予相应处罚
(3)学生可以选课,并查看个人信息
(4)对学生信息、选课信息、课程信息进行记录学校需要的就是能满足以上需求的软件需求就是一套软件的终极目标,但并不是每一个需求都能达到的,分析人员还要根据开发环境一条条地分析这些需求
1.2系统分析人员分析用户的需求
1.
2.1分析人员体验用户环境当软件公司在接到用户的需求时,不是盲目地进行开发,而是应该对需求进行调研需求的调研就是亲自到用户那里体验整个工作过程,掌握软件的运行环境以及人员操作水平等系统分析员的任务就是了解并确认用户的需求,最终做出系统的流程设计分析人员如何快速有效地掌握用户的整体情况,最好的方法就是提问题,然后找到这些问题的答案,不管什么样的软件系统,都可以从以下问题出发
(1)用户为什么要引入系统?这个问题的答案将最终决定软件的定位一套软件系统可繁琐可简单,根据用户需要软件的原因制定快速的开发计划,既满足了用户需求又节省了开发时间,降低了双方的成本
(2)软件要实现什么功能?用户最初的需求列表是否可行,分析人员要深入到用户的工作流程中,亲自体验工作环境,对照用户需求来分析各个流程是否有局限性,并与用户的管理层多进行沟通,对需求有异议的地方力求妥善解决
(3)操作人员有哪些?对于一个完善的软件系统来说,安全是不可缺少的一部分并不是所有的人都能管理软件系统,不同的人应该具备不同的权限从软件角度讲,就是角色分配问题管理人员有编辑删除的权限,而普通人员只能查看分析人员要时刻与管理人员进行沟通,了解用户的组织管理机构,掌握用户角色的精确划分
(4)如何满足用户的需求?一个完整的软件系统,首先功能要完整,即用户的需求必须满足软件该使用什么样的方式来满足用户的需求,并在满足需求的同时,提高用户的工作效率,节约用户的工作成本分析人员要理清思路,清晰地处理与用户之间的每个问题,并将结果记录,为以后设计用例图准备好详细资料因为不可能所有的开发人员都去用户那里体验工作流程,所以分析人员要力求实现需求的准确性和详细性
1.
2.2分析并确定调研结果分析人员将需求调研的结果带回公司,写出调研报告、召开会议研讨,开发人员和项目经理等所有参与项目的人都要参加根据报告一条条地分析具体流程的有效性和可行性,从软件的角度完善其中的细节,并将不清晰的地方再与用户进行沟通,争取做到每个人都清楚地明白用户究竟要什么样的功能研讨完毕后,将可行需求和不可行需求(包括有局限性的需求)分别记录,并在不可行需求中详细注明原因,最后说明软件的目的及功能在本例中,不可行的需求的列表如下
(1)学生卡使用磁卡及防伪标志使用磁卡可以,但必须具备扫描卡专用设备,仅仅靠软件无法实现防伪标志的使用由用户自己决定,也不能通过软件实现
(2)学生卡不能转借他人使用软件不是万能的,无法判断学生卡是否是本人使用,此需求只能由用户管理部分实施各种监管制度来满足
(3)学生卡补办需重新输入资料,学生资料已存储在数据库中,无需重新输入所有资料对于局限性的需求一定要仔细推敲,并与用户紧密沟通,以达成改善的意见可行性列表将在后面介绍软件的目的是提高用户的工作效率,细分员工的工作职责,协调部分之间的业务往来,监督业务运行的过程该软件的主要功能包括
(1)对学生信息的管理
(2)对教师信息的管理
(3)对课程信息的管理
(4)对选课信息的管理
1.3用户与项目管理人员确定最后的需求整个项目组已经讨论并确定了需求,对于不清晰的地方也与用户进行了沟通,最后需要列出软件的最终需求
(1)学生卡使用磁卡,允许手工输入学生证号和扫描器输入两种方式学生证号的长度为101-2位是专业编号,3-6位是入学年份,7-10连续编号
(2)学生卡办理之前需登记学生的详细资料,其中包括学生的学号、姓名、性别、生日、地址、电话、身份证号等,并且系统还应能够修改输入错误的学生个人信息记录
(3)可以对学生所选的课程进行管理,包括学生的可选课程和个人已选课的信息,并可以进行选课
(4)可以对课程进行管理,课程管理包括增加课程,该课程包括任课教师和所属专业
(5)根据学号、身份证号查询学生信息根据学号查询选课信息
(6)软件使用权限管理方式根据工作流程,软件有2种角色管理员、学生和教师管理员允许对课程信息、教师信息、学生信息的管理学生可以进行选课和查看课程信息的操作教师可以查看本人所授课程的学生信息
(7)本软件从签字起二个月内交付确定需求时,要从用户实际需求和工作环境出发,本着一切为用户着想的原则,尽量满足用户的需求为了用户成本方面的考虑,尽量与用户已有软件系统不冲突,在可能的情况下,尽量实现两个系统的融合需求在整个开发过程中相当重要,一旦与实际情况出现偏差,则会造成整个工程的反复确定需求后,项目经理开始组织项目开发小组讨论需求以及用户工作环境的注意事项
1.4根据最终需求确定工作环境
1.
4.1软件环境除了要安装学生管理系统外,还必须具备相应的软件环境,才能更好地运行
(1)Java虚拟机,支持Java开发的软件
(2)应采用统一的软件操作系统(XP),这是为了更好地管理
(3)服务器上安装数据库系统(SQLServer2000或2005),从而实现信息资源安全化管理
(4)安装防病毒软件,病毒防火墙等因为所有的机器都是互连的,一旦有病毒侵入,容易造成整个系统的瘫痪
1.
4.2硬件环境软件不是一套可独立运行的系统,必须依托在完善的硬件设备上本例从实际应用角度考虑,要使软件正常有效地运行,还必须具备以下硬件环境
(1)操作系统必须是586以上,64MB内存配置为了更好更快地运行,如果情况允许,建议尽量采用内存较大的电脑
(2)运行通畅的网络环境所有的内容都通过网络传输,如果网络出现问题,则系统将无法正常工作
(3)服务器由于系统采用C/S结构,为了数据安全和速度问题,数据库和系统文件等要求单独安装在一台机器上,服务器的选择是系统稳定性的关键因素
(4)写卡器及刷卡器学生卡全部采用新版磁卡,必须具备读写磁卡的设备才能进行正确的扫描写卡器一般用于向学生卡内写入学生学号等简单信息以上这些软硬件环境一定要跟用户及时沟通,如果用户保证不了这些环境要求,软件不能很好地运行,后果责任等一定提前说清楚确定一切内容之后,双方在最终需求书上签字,软件进入实质开发阶段因为需求是整个软件的基础,从开始到了解到分析是一个异常慎重的过程,每一步的失误都可能导致软件的重新开发为了更好、更快地开发系统,项目小组要在开发前进行充分的讨论,有问题的地方一定要跟用户及时沟通最后要做出需求说明书,供将来设计、开发和测试等人员查看需求说明书一般采用IEEE标准830-1998(IEEE1998)描述的需求规格说明书模板,如表所示需求说明书根据模板格式书写清楚,放在公司的共享资料库内,整个需求分析过程就结束了,项目进入第二阶段课题二项目计划安排一项任务的成功完成,必须依靠合理的计划安排以及各种资源的有效利用有计划、有步骤地进行软件开发,除了可以提高开发进度外,更能明确项目组各成员之间的职责及任务项目进度表要安排每个成员的任务,并要求成员每天修改自己的进度,保证项目管理人员可以随时查看整个项目的进度,以及时发现问题,调整工作策略
2.1项目计划软件对于项目计划软件,主要使用的是Microsoft提供的ProjectProject2003是Office2003中带的一项,安装比较简单,所以安装过程不作介绍
2.
1.1创建一个进度表Project项目软件是一个可以直观显示项目进度和管理项目资源的软件下面创建一个本例的初期进度安排表
(1)打开Project,选择“文件|新建”菜单命令,出现窗口如图2-1所示默认情况下开打4个区域视图、任务定义、任务列表、图形任务显示一般,所有的任务都在任务列表区完成,图形任务显示区只用于显示,不能修改图2-1Project的工作界面
(2)新建一个任务,双击任务列表区的第一行,出现对话框,如图2-2所示这里有6个选项卡常规、前置任务、资源、高级、备注、自定义域,通常情况下只设置前4个即可常规选项卡中要求写明任务的名称,工期长短,开始日期和结束日期;前置任务选项卡中要求写明必须完成什么任务后才可以进行此项任务;资源选项卡中写明此项任务需要的资源,包括人员、设备等高级选项卡一般指明此任务的一些限制图2-2任务信息图
(3)填写任务名称和任务所需资源后,就粗略完成了一项任务,如图2-3所示图2-3填写好任务的工作界面
2.
1.2使用不同的图表显示项目进度为了更加直观地显示任务安排,Project提供了多种图形供选择有甘特图、跟踪甘特图、日历图、网格图等,默认的图形是甘特图下面分别介绍各种图形的显示方式在“视图栏”中有一些变换图形显示的快捷按钮
(1)单击“日历”按钮,界面变化为如图2-4所示的效果这主要是以日历的形式展现每个任务以及任务的工期图2-4日历式显示任务
(2)单击“网格”按钮,以分段的形式展示任务列表,如图2-5所示这样更直观地显示了有多少任务以及任务的安排时间图2-5网络式显示任务
(3)单击“跟踪甘特图”按钮,以进度比例的方式显示每个任务,如图2-6所示这个图和甘特图是十分相似的,只是有个进度跟踪显示,其他没什么区别图2-6跟踪甘特图式显示任务每种图都从不同的角度显示了进度安排情况,但只有甘特图的方式可以清晰地显示任务的前置关系(必须完成的前提任务)、任务的进度等其他几种图只是比较简单直观的显示任务名称及任务的时间安排
2.2实现此项目需要的资源一个项目,必须包括人员和设备在项目进度表中所说的资源,就是完成该项目需要的人员和设备每个阶段分配不同的资源,什么职责该干什么,用多长时间,就是一个项目安排进度的过程
(1)单击“视图栏|资源工作表”列表按钮,显示如图2-7所示界面图2-7资源工作表
(2)添加资源的操作方式与添加任务是相同的,双击表格第一行,出现对话框,如图2-8所示资源信息分5项常规、工作时间、成本、备注和自定义区域常规选项卡中主要说明资源的名称、类型等,一般写人名工作时间选项卡定义工作日和非工作日以及工作日中几点到几点属于工作时间成本选项卡设置某资源1小时的费用,通常用来作成本控制一般小型软件不需要设定图2-8资源属性信息
(3)根据情况填写资源信息,项目组的人员名称,笔记本等设备名称人员的类型是“工时”,设备的类型一般选择“材料”
(4)单击“甘特图”界面转换到任务列表
(5)双击要分配资源的任务,打开任务信息,选中“资源”选项卡,此时就可以在资源名称处选择此任务需要的资源如图2-9所示图2-9资源选项卡的内容
(6)给所有的任务分配好资源后,可以通过“任务分配情况”和“资源使用情况”来查看和调节每项任务的资源除了可以用以上方式添加资源外,Project提供了更简便的方式资源可以从公司的电子通讯簿导入安排好任务和资源后,其实就完成了一个项目进度安排表因为Project是一个比较简单的工具,十分容易上手,真正功能完善的进度表还得在实践中不断地探索
2.3如何写好项目计划安排表项目计划不仅仅安排工作日期,还代表了很多在软件开发过程中的关键因素,比如成本、资源等项目计划主要内容包含以下内容
(1)估计任务工期根据资源的安排情况和任务的多少以及任务的完成期限可以估算出整个项目的工期
(2)分阶段地明确项目的进度可以将任务标记为里程碑,在甘特图中就能很明显地看到所分的阶段以及每个阶段的任务
(3)考虑管理成本在资源中可以设置每项资源的工时费,Project会根据任务中此项资源的使用情况自动核算此项资源在整个项目中占多大成本
(4)优化项目计划,控制项目风险,满足预算要求,保证完成日期通过以上几点分析,可以看到项目计划既是给管理层人员的一份报告,又是控制项目小组成员进度的一份跟踪表,起到了承上启下的作用知道了项目计划可以为系统做什么,那么该如何做好呢?这应该全面考虑本项目的各个方面
(1)是否考虑成本预算问题如果考虑,则在人员和设备的选择上要精确计算
(2)此项目是否与其他项目有关联如果有,那需要判断是否有相冲突的资源,是否可以共享其他的资源以节约时间
(3)要及时记录任务进度,尤其是在开发一个有前置任务的资源时
(4)各阶段的里程碑要设置明确,而且要恰到好处例如分析是一个阶段,开发是一个阶段,测试是一个阶段,这样看起来层次分明,对各阶段的资源也有个详细的划分
(5)任务列表不要一个层级往下走,要精确划分,每个任务都不能包括太多的功能,有层次的显示任务,让其他成员能一目了然
2.4前期的项目计划表由于在做项目进度安排时,并不知道详细的软件模块,只知道具体需要哪些功能,所以初期无法详细地描述开发进度,而只是给出一个开发的时间段,由分析人员做完具体的模块划分后,再在项目计划安排表中予以补充下面是学生信息管理系统前期的项目进度表如图2-10所示图2-10前期计划表在这里,大的任务主要有6个
(1)需求分析分解需求,画出用例图,分出类模块
(2)模块划分将分析出的类分配给不同资源
(3)开发进入编写代码阶段,并要求开发人员自己进行初步测试
(4)测试测试人员分两步完成测试单元测试并不要求所有模块都完成,而集成测试则是所有模块完成后统一进行的测试
(5)部署将开发完成的代码部署到服务器或互联网中
(6)材料准备相关资料以及帮助性的说明文档在甘特图中,菱形黑点标示里程碑,此进度表分了3个里程碑
(1)模块划分完毕
(2)开发完毕
(3)测试完毕从甘特图中可以很明显的看出任务的资源、任务的进度以及某项任务的前置任务,如此直观的图例方便了管理人员的监督和开发人员的计划安排越详细的项目计划表就越能说明整个软件系统开发流程及资源利用率,所以在实际应用中应尽可能详细地描述各个任务及任务的辅助信息课题三概要设计概要设计阶段主要是粗略描述整个软件的框架,并从业务的角度描述软件的模块、工作流程等项目的成功取决于设计的好坏,而概要设计则是整个设计的关键部分概要设计的主要任务是将用户的需求划分为不同的功能,然后将这些功能细分成模块,并给模块一些规则约束,以达到各个模块之间可以相互交流的目的概要设计关乎到系统的整体架构,因此想做好一个概要设计,不仅仅要熟悉用户的业务流程,还要具备相当丰富的设计经验
3.1概要设计的原则概要设计是根据系统分析的需求和工作环境的情况对整个软件的总体结构进行大致的设计概要设计要坚持以下几个原则
(1)细分原则软件系统都是由很多不同的模块组成,当设计一套软件时,要先将所有的功能分解解决复杂问题的方法是将其分解成几个小问题,一个个来解决
(2)提高代码重用性在面向对象设计中,首先考虑的就是代码的重用,一个好的设计,将来在升级换代时不需要太大的改动,节省了人力物力
(3)从上而下层层分析概要设计要从整体出发,逐个剖析软件的功能,从上而下,先分析系统总的功能,然后一步步细分,直到最小的功能模块
(4)一致性原则概要设计要求所有功能模块在定义时使用统一的规范
(5)提高独立性,减少耦合各个模块与模块之间尽量减少关联,否则修改一个地方就会引起其他多处的变动,不符合面向对象的原则一般情况下,对类封装后,只允许对类进行扩展,而不能修改,而封装的类必须具有单一职责,既理论情况下不允许两个类共同完成一个功能
(6)模块的大小要尽量适中不是结构算法越复杂的模块越好,模块的大小要根据实际工作目标和其他类的耦合紧密程度来决定经验表明,一个模块的规模不应过大,模块的总行数应控制在10~100行的范围内,最好为30~60行,这样理解和阅读都较方便过长的模块往往是分解不充分的表现,会增加阅读理解的难度;但小规模太多也会使模块之间联系变得复杂,增大系统在模块调用时传递信息所花费的开销由于概要设计是整个设计的重中之重,牵一发而动全身,所以要努力做一个好的概要设计,才能在今后软件开发过程中不再反复现在软件行业流行模式化驱动设计,将一些市场上比较成功的模式拿来用在自己的设计中
3.2将用户需求模块化根据概要设计的原则来分析一下本项目的用户需求,并最终转化成用程序语言描述的模块什么样的需求才是一个模块?模块应该具备如下3个特征
(1)输入和输出模块必须能被调用并且正确的返回调用,而且调用都是相对一个对象而言,这是模块独立性的一个体现
(2)处理功能模块必须可以对调用的输入数据进行灵活的处理,并为输出准备好处理结果
(3)程序代码用来实现模块功能的源代码
3.3确定系统最终模块概要设计中最重要的就是确定此项目包括哪些模块根据上两节讲述的设计原则和模块特征,将用户需求转化为下面的模块
(1)管理员模块是本系统的核心模块,该模块又包括对学生管理和课程管理2个子模块,功能如下1)学生管理子模块实现对学生信息的添加、修改、删除操作,还可以输入查询条件进行查询操作图3-1学生管理子模块2)课程管理子模块实现对课程的添加,添加时为其分配任课教师、上课时间和地点,实现对课程的修改、删除,查看某个课程的详细信息等图3-2课程管理子模块
(2)教师模块实现查看自己所教授的课程、课程有哪些学生选修,以及利用本系统提交学生的成绩图3-3教师管理模块
(3)学生模块实现学生的选课,查看、修改自己的选课信息图3-4学生模块
(4)公有模块实现用户的身份验证,密码修改,退出系统等功能图3-5公有模块
3.4根据模块划分完善项目计划表在初期的项目计划表中,只简单地估计了开发的时间,并没有详细划分模块截止到目前,模块已经分配清楚,那么必须在项目计划表中分配模块所需的资源以及模块开发的时间这样能更好地估计开发时间,掌握项目进度课题四详细设计概要设计是为了明确开发人员的工作步骤和工作目标详细设计使开发人员可以轻松地完成代码的编写,并熟悉所编写的业务流程
4.1UMLUML(UnifiedModelingLanguage,统一建模语言)是一种可视化的建模语言对各建模元素可进行详细的说明,并能生成所建模型的文档
4.
1.1为什么用UMLUML语言是一种可视化的语言,是一种图形符号UML的出现就是为了详细描述工作过程,以用例驱动的方式描述流程中的元素和顺序,客观而又直观地体现了业务流程设计人员把使用UML的过程叫做建模,建模就是对现实的简化使用UML可以给设计带来很多便利
(1)按照程序需要的样式对系统实现可视化流程展示
(2)可以详细说明系统的结构和各种行为
(3)对所有的决策可实现文档化管理
(4)可以以体系结构为中心,实现增量和迭代UML是统一化的一种设计标准因为统一,所以任何人所做的设计只要符合标准,都可以很容易地让别人看懂,符合UML标准的用例图也可以让用户看懂因此,大部分的设计人员目前都采用UML来进行详细设计
4.
1.2UML包括的内容UML主要包括3个构造块,分别是事物、关系、图事物是UML模型中最基本的面向对象的建筑块其在模型中属于最静态的部分,代表概念上或物理上的元素UML的4种事物主要包括如下
(1)结构事物类、接口等
(2)行为事物交互、状态等
(3)分组事物包
(4)注释事物注释、文档等关系用来形容UML中事物之间的关联,某事物是否依赖于其他事物,或者某事物的改变是否会影响到其他事物UML的4中关系包括依赖、泛化、关联和实现图是组织这些建筑块的方式图代表一系列的元素,这些元素常常被画成用点(事物)和弧(关系)相连的图利用图来从不同的视角观察系统UML的10种图包括如下
(1)类图描述类以及类之间的关系描述类的职责,显示类的方法和属性
(2)对象图是类图所反映的事物实例
(3)用例图参与者与模块间的关系
(4)交互图要实现一个目的行为的一种交互操作
(5)顺序图按时间顺序体现对象之间的消息传递
(6)协作图与顺序图可以互换,主要体现对象之间的结构组织
(7)状态图某对象的几种可能状态以及状态之间的切换
(8)活动图工作流方式的一种图形展示
(9)构件图构件之间的组织和依赖
(10)部署图软硬件结合的一种表现整个系统架构的图例
4.2分析设计工具VisioUML只是一种建模语言,不是一种工具,就像Java语言一样,必须使用Java开发工具才能进行开发市场上有很多建模工具,有些工具甚至可以实现UML与Java语言的互相转换Visio是Microsoft提供的一款建模工具,使用起来比较方便
4.
2.1为什么用Visio本项目使用的版本是MicrosoftVisualStudio.NETEnterpriseArchitect(VSEA)版本中自带的Visio在VS的版本中,只有此版本自带有Visio另外,也可以单独下载此版本中的Visio不要使用Office自带的Visio版本,因为很多功能在这个版本上无法实现Visio不仅包括软件工程的一些建模,还涉及其他建筑、网络、建筑工程等建模Visio中可以全面应用UML语言中所有的事务、关系和图,更好地体现了图形化设计的意义其可视化设计允许操作者通过拖拽就能够轻松地完成模块的建设Visio的开始界面如图4-1所示,主要包括类别区和模板区图4-1Visio的开始界面
4.
2.2使用Visio设计模块本小节以学生管理子模块为例,详细介绍如何用Visio设计模块
(1)启动Visio后单击“类别区|软件”列表按钮,模板列出预定义的软件项目的模板,如图4-2所示图4-2软件模型
(2)选择模板区的“UML模型图”,打开UML模型的工作界面,如图4-3所示这里主要包括形状工具栏、模型资源管理区、工作区3部分,从图中可以看到工具栏区列出了UML所有的图形模式图4-3Visio的软件模型工作界面
(3)单击形状工具栏区的“UML静态结构”列表按钮,显示出了在Visio中类图的所有元素,如图4-4所示,包括包、类、接口等图4-4类图的元素图
(4)拖拽类元素到工作区,出现一个UML定义的标准类图,如图4-5所示类图主要分3部分,最上面显示类名,中间列出类属性,最下面类出类的方法图4-5类
(5)双击类图,打开类的属性窗口,如图4-6所示左侧是对类中类别的罗列,右侧是每个类的具体属性图4-6类的属性窗口
(6)在该对话框右侧类的属性中,将“名称”设置为“Student”;在“可见性”下拉列表中选择“Public”,因为一般情况下类都是对所有模块可见,如果仅仅内部可见,则选择“Private”在“文档”文本框内可以输入对此类的描述,以便将来生成统一的文档资料
(7)选择左侧列表栏的“特性”,对话框右侧会随之更改为特性的相关属性,如图4-7所示学生类型的属性包括学生学号、密码、姓名、系院号、年级、班级单击“新建”按钮,将这几个属性添加,并同时指明属性的类型和可见性学号(ID string)、密码(Password string)、姓名(Name string)、院系号(Depart int)、年级(Grade int)、班级(Class int)均为内部可见图4-7添加属性的界面
(8)选择左侧列表栏的“操作”项,如图4-8所示此处允许添加类的操作,即类的方法学生类的方法包括添加学生信息、修改学生信息、删除学生信息和获取学生信息单击“新建”按钮,将这4个方法添加,并选择每个方法的返回类型图4-8添加方法界面
(9)如果方法有输入参数,则单击“属性”按钮,打开方法属性窗口,如图4-9所示,将参数一一添加即可图4-9方法参数窗口
(10)添加完类名、类的属性、类的方法后,一个类图就基本完成了为了减少以后的设计反复,此处对于类的方法和属性一定要全面而且精确当然,设计需要经过很多实践经验的积累,刚刚开始做设计的程序员做不到完美也是允许的说明在静态类图中,类名、属性名、方法名一般要求用英文表示,类名和方法名首字母大写,属性名全部小写完成的类图,如图4-10所示���+AddStudentinname:stringinpassword:stringindepart:intingrade:intinclass:int:bool+EditStudentinname:stringinpassword:stringindepart:intingrade:intinclass:int:bool+DelStudentinid:string:bool+GetSudentinid:string:bool-ID:string-Password:string-Name:string-Depart:int-Grade:int-Class:intStudent图4-10完成属性和方法的类图
4.3用图例实现设计既然UML是一种图形化的设计语言,而Visio又是一种图形化的设计工具,那么用图例来实现设计,然后再配上文档说明则是完成详细设计的最好方法本节先用用例图详细说明业务流程,再用类图详细描述各个模块的功能
4.
3.1用用例图实现业务流程的设计用例图是描述业务流程的一种设计图,由于其简单易懂,需求分析人员在初期体验用户业务时,就可以画出用例图,并与用户就用例图进行磋商这样,完成的用例图就比较接近事实上的业务上一节讲到了类图,其实类图是一种静态图,只是描述一些特性,而用例图是一种动态行为图,描述业务的流程本项目以学生选课为例,设计一个选课的业务用例图首先用语言描述一下选课的流程
(1)管理员录入学生信息和课程信息
(2)学生使用管理员提供的用户名和密码登陆本系统
(3)查看可供该学生选择的课程列表
(4)从该列表中选择要所选课程,对该课程进行选课,系统自动记录选课信息整个业务流程分为4步,下面以图形化方式描述以上流程
(1)启动Visio的UML模型图,打开如图4-3所示界面,显示类图的所有元素
(2)选择左侧形状工具栏最下面一项“UML用例”,显示UML用例的模型符号,如图4-10所示主角一般表示行为操作者,通常情况下是人或设备;而用例就是业务过程中的一个行为;包的意义就是统一归纳多步行为图4-10UML用例图模型元素
(3)在学生选课流程中有两个主角,管理员和教师,先拖拽出2个主角符号到工作区,并分别命名
(4)在此例中有5个行为,录入学生信息、录入课程信息、登录、查看课程列表,选课拖拽5个“用例”符号到工作区,并分别命名此时的用例图如图4-11所示,包括2个角色5个用例图4-11角色和用例
(5)确定角色和行为之间的关系角色和行为之间不属于使用关系,也不属于扩展关系,是一般情况下的通信关系将“通信”符号添加到工作区,并依次连接角色和用例,最后如图4-12所示��录入学生信息录入课程信息管理员学生登录查看课程列表选课#0;#0;#0;#0;#0;-结束9*�-结束10*-结束11*�-结束12*图4-12学生选课业务用例图业务流程图中要注意有些手工行为在实际程序中是不能实现的,但为了体现业务流程的完整性,一般还是在用例图中体现,此时要根据实际程序加以注释或说明
4.
3.2类图实现静态模块结构的设计开发人员了解一个类的属性就是靠研究类图和业务流程类图是设计人员根据业务流程和面向对象设计原则总结出来的相关属性的集合,便于将来代码的重用和维护
4.
3.3类图与类图之间的关系虽然在设计类时,要坚持类与类之间低耦合的原则,但很多情况下,类于类之间有相互调用或依赖的关系,所以为了让开发人员清晰地明白类和类之间的关系,设计人员应该有条理的设计好类图与类图之间的依赖关系类与类之间的依赖关系在Visio中定义了以下几种
(1)Call调用某类中的方法可以调用其他类的方法,箭头指向被调用者
(2)Friend友好两个类是友元关系
(3)实例某对象是某类的实例
(4)继承某类是某类的子类,这个是比较常见的类的关系课题五数据库设计数据是企业运作过程中不可缺少的重要部分,建立自己的数据资料库是提高企业整体竞争力的关键因素对于程序而言,安全完整地保存客户的信息是一种责任,因此,数据库设计就成了整个软件开发中重要的一个环节一旦数据设计出现问题,软件就会出现问题,某些功能的使用就发挥不了最大作用所以,为了更好地开发数据库,了解信息的来源以及信息的流向是头等大事对于客户的整个操作流程,都要亲身参与,才能客观地掌握数据资料的真实性,为设计良好的数据库打下基础本章主要介绍如何收集客户的数据资料,并将其转化为程序需要的数据资源
5.1罗列数据信息在前面已经罗列出了用户的需求,这也正是数据库信息的来源根据列表内容,可以提炼出以下数据信息
(1)需要管理学生信息学生表
(2)需要管理教师信息教师表
(3)需要管理课程信息课程表
(4)需要管理选课信息选课表
(5)需要管理院系信息院系表
(6)需要管理管理员信息管理员表很多初做设计的程序员容易犯一个错误每个需求都做成一个独立的表其实这是一个误区,在选择表时,需要遵守以下原则
(1)每个表中不能有重复的字段属性
(2)将相关数据合成到一个表中
(3)每个表都有一个主键,而其他属性对这个主键有依赖性对于重复添加的字段属性,最好单独列表,如果教师信息中有职称这个字段属性,这个字段就是重复增加的为了减少数据冗余,可以单独将城市拿出来做一个表
5.2根据数据信息构建表结构对于如何提取数据表字段,要遵守3个原则
(1)每个字段都是不可再分的最小数据单位
(2)非主键字段必须完全依赖于主键
(3)如果两个表存在关联,必须有字段作为外键进行连接表5-1Student(学生)表字段名数据类型备注stuIDvarchar20notnull学号stuPwdvarchar20notnull密码stuNamevarchar10notnull姓名stuDepartint系院号stuGradeint年级stuClassint班级表5-2Teacher(教师)表字段名数据类型备注teaIDvarchar20notnull教师编号teaPwdvarchar20notnull教师密码teaNamevarchar10notnull教师姓名teaDepartint系院号表5-3Cource(课程)表字段名数据类型备注courceIDvarchar20notnull课程编号tealIDvarchar20notnull教师编号courceNamevarchar100notnull课程名称courceTimevarchar20上课时间courceAddressvarchar50上课地点courceInfotext课程简介表5-4Elect(选课)表字段名数据类型备注electIdintnotnull选课编号stuIDvarchar20notnull学生编号teaIDvarchar20notnull教师编号courceIDvarchar20notnull课程编号scoreint成绩表5-5Users(系统管理员)表字段名数据类型备注adminNamevarchar20notnull管理员用户名adminPwdvarchar20管理员密码表5-6Depart(系院)表字段名数据类型备注departedintnotnull系院号departNamevarchar100系院名称
5.3数据库构建工具PowerDesigner本项目的数据库采用SQLServer,它的功能很强大,可以完成所有与数据表相关的操作因为其太强大,从而增加了复杂性,操作起来不容易上手,显示出来也不够直观为了方便用户构建数据表,Sybase公司推出了PowerDesigner工具
5.
3.1使用构建工具PowerDesignerPowerDesigner是一种功能强大的数据库设计工具,其优点如下
(1)可以图形化地展现数据库的结构
(2)可以方便地修改数据库和表结构
(3)与数据库之间可以进行反向操作,既可以很方便的生成数据库,也可以将已有数据库的内容通过逆向工程显示在PowerDesigner中综上所述,为了可以直观显示数据库的设计,并很好地体现数据库中各表之间的关系,采用PowerDesigner将使所有操作变得简单
5.
3.2PowerDesigner的使用目前市场上通用的版本是PowerDesigner
9.5,最新版本是PowerDesigner12为了快速地掌握其应用,本项目所有的数据库设计都以比较容易上手的PowerDesigner
9.5为例PowerDesigner有4种模型文件
(1)概念数据模型(CDM)仅仅表示数据库的逻辑结构,与用什么软件没有关系,一般不用来实现的数据抽象表
(2)物理数据模型(PDM)具体表示表的结构和关系
(3)面向对象数据模型(OOM)用来设计类的一种模型,由于功能有限,并不通用
(4)业务程序模型(BPM)对任务的流程进行描述的模型,也不通用这4种模型中,物理数据模型是目前数据库设计领域比较常用的一种模型PowerDesigner的安装比较简单,不再介绍下面学习使用PowerDesigner创建一个物理数据模型
(1)打开PowerDesigner,其工作界面如图5-1所示,主要包括工作空间、数据库展示、输出空间和模型工具栏4个区域图5-1PowerDesigner的工作界面
(2)单击“文件|数据模型”菜单命令,则弹出一个对话框这里选择PhysicalDataModel,即物理数据模型单击“确定”按钮,此时出现数据库的选择界面因为物理数据模型的设计与数据库类型是密不可分的,所以此处一定不能忽略,本例选择SQLServer2000,如图5-2所示图5-2选择数据库
(4)单击“确定”按钮,出现一个空的PowerDesigner工作界面
(5)在工作界面左侧的工作空间中会多出一行内容,默认名为PhysicalDataModel_1双击它将出现一个名为PhysicalDiagram_1的模型表,然后双击PhysicalDiagram_1
(6)返回工作界面,会发现右侧数据库展示区域成为空白,此时对于数据库的构建才真正开始数据库包括很多关键元素,如触发器、存储过程、表、视图等创建元素的模型工具栏如图5-3所示这里存放了数据库的全部关键元素将鼠标指针移动到工具栏中某一元素处,就会显示元素名称图5-3模型工具栏
(7)单击“表”元素,鼠标指针的形状发生了变化,然后在右侧空白区域单击一下,一个没有任何字段的表就建立了如图5-4所示表的图形分为两部分,上面是表名称,下面是表字段图5-4表
(8)双击“表”图形,出现表的属性设置窗口,如图5-5所示这里包含了所有的表属性列、索引、主键等添加列和添加索引的操作比较简单,根据相关提示进行相应的设置即可图5-5表属性
5.4用PowerDesigner构建设计好的数据表了解了每个表的结构后,在PowerDesigner中就可以轻松地以图形样式展现出来,如图所示箭头表示表与表之间的关联,箭头中间的文字表示表与表相互依赖的关键字段后面标志有PK或FK的字段,表示此字段是主键或者外键图5-6所有表设计为了提高数据库的查询速度,每个表又会建立索引PowerDesigner默认设置为每个表必须有一个索引因此,当构建完整个表结构后,还要给每个表添加一个索引添加索引的原则是唯一性本例的索引都是加在每个表的主键上,索引名与主键名相同注意添加索引时注意将索引的聚集属性(Cluster)去掉,否则生成数据库时会与表中主键冲突
5.5生成数据库设计好软件所需要的全部数据表后,如何将设计好的这些图形元素转化成SQLServer中的数据库呢?前面提到过,PowerDesigner的一个优点就是对数据库可逆
(1)打开PowerDesigner,出现工作界面
(2)单击“数据库|生成数据库”菜单命令,弹出对话框这里可以看到所有与生成数据库有关的选择,比如生成文件目的地、是否生成视图、是否生成主键索引等
(3)修改SQl脚本的保存地址,单击“确定”按钮,如果不提示错误,在所选的目的地就能发现一个crebas.sql脚本文件所生成的脚本文件中并没有关于数据库的信息,因为所创建的仅仅是数据库中表的所有信息下面就要创建一个数据库
(4)打开SQLServer,出现其控制台窗口这里主要包含对象资源管理器和摘要2个区域
(5)在对象资源管理器中,右键单击“数据库”项目,在弹出的菜单中选择“新建数据库”,就出现了新建数据库的窗口
(6)在“数据库名称”文本框内,填写本项目数据库的名称StudentManager单击“确定”按钮,就生成了程序所需的数据库,并返回到数据库界面
(7)单击“常规工具栏|新建查询”按钮,系统自动创建一个名为“SQLQuery
1.sql”的文本窗口,并显示在摘要区内
(8)打开第3步生成的脚本文件,按Ctrl+A组合键,选择文件里的所有内容,复制到打开的查询文件中
(9)检查一下复制过来的代码是否完整,然后在“常规工具栏|数据库选择”下拉框中选择“StudentManager”
(10)单击“常规工具栏|执行”按钮,执行脚本如果提示“命令成功执行”,则生成了完整的数据库文件在完成对数据库中自动生成的表的检查后,如果没有问题,整个数据库设计就完成了为了避免日后的重复操作,在设计数据库时,一定要全面掌握每个表的信息内容,因为后期再添加字段将会带来极高的维护成本课题六项目技术准备在正式开发前,为了统一开发的模式,除了要遵守公司指定的开发规范外,还要统一项目的命名、各层文件夹的名称等一般由资深程序员或项目管理人员先构建一个新项目,将所需要统一的内容填充好,并将整个项目部署到服务器的VSS中,再由程序员下载项目并进行开发
6.1版本控制工具VSS在开发过程中,为了控制开发错误以及不同时期代码的管理,通常使用版本控制工具本讲主要介绍Microsoft提供的版本控制工具VSS(VisualSourceSafe)VSS可以详细记录代码从开发到发布期间所有的修改和版本信息,并使用签入签出控制一个代码文件一次只能由一个程序员修改,这就保证了源代码的安全性和准确性
6.
1.1VSS的使用VSS2005安装完毕后,在Windows的程序菜单中会生成两项MicrosoftVisualSourceSafe和MicrosoftVisualSourceSafeAdministrator第二项用于权限管理,控制登录VSS的用户数量和权限级别
1.VSS服务器端使用先在VSSAdministrator中添加项目组的开发人员名单,权限由管理员分配
(1)打开VSSAdministrator,出现登录窗口,如图所示首先要创建一个新的VSS管理数据库
(2)单击“Browse”按钮,打开VSS数据库窗口,如图所示列表中显示的是之前项目的VSS数据库右边的一系列按钮可实现对这些数据库信息的操作
(3)单击“Add”按钮,此时会出现一个向导,帮助用户选择文件夹并创建数据库文件只需按照向导的提示一步步进行即可
(4)完成VSS数据库建设后,Dababase的文本框内已经有了刚创建的目录
(5)初次登录时,帐户“Admin”不需要密码,单击“OK”按钮打开VSSAdministrator的工作界面,如图所示在工作区的列表中有当前Windows系统中的管理帐户
(6)单击“User|AddUser”菜单,弹出如图所示对话框在对话框内填写项目组成员名称,并指定默认密码在密码下方的复选项“ReadOnly”,表示此成员是否具有只读属性一般对于测试人员允许下载代码,而不允许修改
2.VSS客户端使用
(1)打开MicrsoftVisualSourceSafe,如图所示其界面类似于“Windows资源管理器”的一个操作窗口,左侧是文件夹,右侧显示文件夹的具体内容下面首先连接要开发项目的VSS数据库
(2)单击“File|OpenSourceSafeDatabase”菜单,打开如图所示的窗口
(3)在VSS数据库对话框中选择本项目管理者创建的数据库,在下面输入登录名称如果希望下次登录时不再需要输入用户名,可以选中下面的“Openthisdatabasenexttime”复选框
(4)单击“Open”按钮,此时出现普通用户的登录窗口,如图所示,只是用户名不同,输入项目管理者分配的用户名和密码
(5)单击“OK”按钮如果此时有项目,则将登录成功,并显示此VSS数据库中包含的项目而本例目前没有项目
(6)单击“File|CreateProject”菜单,打开如图所示对话框
(7)在“Project”文本框内输入项目的名称“StudentManager”;在“Comment”文本框内输入项目的描述信息单击“OK”按钮,整个项目的VSS框架搭建完毕如果项目还有很多相关资料和共享图片,可以在此项目下建立新文件夹并存放资料
6.
1.2需要注意的问题VSS的操作需要注意以下4点
(1)每次开发前都要先下载最新版本,以免上传时覆盖别人对项目的修改
(2)如果只修改一个文件,那就只签出这一个,不要把整个文件夹乃至整个项目都签出,以免浪费时间
(3)如果需要将整个项目都签出,一定要先下载项目的最新版本,修改完毕后立即签入,以免耽误别人的工作,因为整个项目组都对这一个VSS工程进行操作
(4)管理人员要控制好项目的版本,如果发生代码被覆盖的情况,可以及时恢复课题七系统功能设计
7.1系统功能框架作为一个学生管理系统,本系统的设计主要包含:系统登录、学生信息管理、班级管理、课程管理和用户管理学生管理系统主框架的主要结构如下图所示图7-1学生管理系统框架图
7.2数据库连接
7.
2.1数据库连接技术Java数据库互连(JDBCJavaDatabaseConnectivity)API是SunMicrosystems提供的JavaAPI的一部分,它定义了一组API对象以及与数据库进行交互的方法为了快速高效地访问数据库中的数据,Java应用程序使用了JDBC虽然Java在其java.io包中提供了丰富的类和接口,但主要的缺陷是,通过这些类和接口访问的数据是以流的形式表示的因此,对于访问存储在外部数据提供的程序中的数据的所有Java应用程序而言,JDBC是必需的JDBC连接数据库可以通过不同的驱动来实现JDBC有4种不同的驱动类型,它们分别是JDBC-ODBC桥驱动程序本地API部分Java驱动程序JDBC网络纯Java驱动程序纯Java驱动程序在本项目中我们使用的是JDBC-ODBC桥驱动程序,这种驱动程序是Sun公司提供的作为JDBC一部分驱动程序,用以从JDBC访问ODBC数据源它的特点是易于Windows操作系统下的数据库操作,可移植性强
7.
2.2数据库连接类详细代码dbConn.java类packagestudenmanager;importjava.sql.*;publicclassdbConn{publicdbConn{try{jbInit;}catchExceptionex{ex.printStackTrace;}}privateStatementconn{try{Class.forNamesun.jdbc.odbc.JdbcOdbcDriver;Connectioncon=null;con=DriverManager.getConnectionjdbc:odbc:test;Statementstat=con.createStatement;returnstat;}catchClassNotFoundExceptionex{returnnull;}catchSQLExceptionex1{returnnull;}}publicResultSetgetRsStringsql{try{Statementstat=conn;ResultSetrs=stat.executeQuerysql;System.out.printlnrs;//rs.next;returnrs;}catchSQLExceptionex{System.err.println------------+ex.getMessage;returnnull;}}publicintgetUpdateStringsql{try{Statementstat=conn;inti=stat.executeUpdatesql;returni;}catchExceptionex{System.out.println+ex.getMessage;return-1;}}privatevoidjbInitthrowsException{}}
7.3学生管理系统登录子系统
7.
3.
1.学生管理系统登录子系统功能描述根据用户权限的不同,可以以不同的身份登录学生管理系统用户的权限为管理员、教师、学生其中,管理员为完全权限,可以使用学生管理系统的所有功能;教师为部分权限,不具有使用“学生选课”、“课程修改”功能,并且只能修改本人的用户名和密码;学生为部分权限,具有“选课”和“课程查询”功能,其他模块只具有查询功能,并且只能修改本人的用户名和密码在用户登录时,通过用户所输入的用户名和密码来验证用户的登录信息,并判断用户的权限,根据不同的权限打开不同的系统主页面图7-2学生管理系统登录页面
7.
3.2学生管理系统登录子系统详细代码LoginFrame.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.*;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;publicclassLoginFrameextendsJFrame{JPanelcontentPane;ImageIconsnow=newImageIconimage/
2.jpg;JLabeljLabel1=newJLabel;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;JLabeljLabel5=newJLabel;JTextFieldjTextField1=newJTextField;JButtonjButton1=newJButton;JButtonjButton2=newJButton;JLabeljLabel6=newJLabel;JLabeljLabel7=newJLabel;JOptionPanejOptionPane1=newJOptionPane;JPasswordFieldjPasswordField1=newJPasswordField;JPaneljPanel1=newJPanel;JLabeljLabel8=newJLabel;CardLayoutcardLayout1=newCardLayout;staticStringlevelname;publicLoginFrame{try{setDefaultCloseOperationEXIT_ON_CLOSE;jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{contentPane=JPanelgetContentPane;contentPane.setLayoutnull;setSizenewDimension504344;setTitle欢迎登陆学生管理系统;jLabel
1.setFontnewjava.awt.FontDialogFont.BOLD25;jLabel
1.setToolTipText;jLabel
1.setText欢迎登陆学生;jLabel
1.setBoundsnewRectangle1281924630;jLabel
2.setFontnewjava.awt.FontDialogFont.BOLD25;jLabel
2.setToolTipText;jLabel
2.setText管理系统;jLabel
2.setBoundsnewRectangle1736116429;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
3.setText用户名:;jLabel
3.setBoundsnewRectangle951237725;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
4.setText密码:;jLabel
4.setBoundsnewRectangle951727421;jLabel
5.setFontnewjava.awt.FontDialogFont.PLAIN12;jLabel
5.setForegroundColor.red;jLabel
5.setText提示如果您首次登陆用户名为admin密码为空!;jLabel
5.setBoundsnewRectangle11420927518;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN13;jTextField
1.setBorderBorderFactory.createLoweredBevelBorder;jTextField
1.setTextadmin;jTextField
1.setBoundsnewRectangle18812221227;jButton
1.setBoundsnewRectangle1242439330;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN13;jButton
1.setBorderBorderFactory.createRaisedBevelBorder;jButton
1.setText登陆;jButton
1.addActionListenernewLoginFrame_jButton1_actionAdapterthis;jButton
2.setBoundsnewRectangle2862439330;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN13;jButton
2.setBorderBorderFactory.createRaisedBevelBorder;jButton
2.setText退出;jButton
2.addActionListenernewLoginFrame_jButton2_actionAdapterthis;jLabel
6.setFontnewjava.awt.FontDialogFont.BOLD25;jLabel
6.setForegroundColor.blue;jLabel
6.setToolTipText;jLabel
6.setText管理系统;jLabel
6.setBoundsnewRectangle1736216429;jLabel
7.setFontnewjava.awt.FontDialogFont.BOLD25;jLabel
7.setForegroundColor.blue;jLabel
7.setToolTipText;jLabel
7.setText欢迎登陆学生;jLabel
7.setBoundsnewRectangle1282024630;jOptionPane
1.setBoundsnewRectangle2826326290;jOptionPane
1.setLayoutnull;jPasswordField
1.setBorderBorderFactory.createLoweredBevelBorder;jPasswordField
1.setBoundsnewRectangle18716821326;jPanel
1.setBoundsnewRectangle-150529375;jPanel
1.setLayoutcardLayout1;jLabel
8.setIconsnow;contentPane.addjTextField1;contentPane.addjLabel3;contentPane.addjLabel4;contentPane.addjLabel5;contentPane.addjButton1;contentPane.addjButton2;contentPane.addjLabel1;contentPane.addjLabel2;contentPane.addjLabel7;contentPane.addjLabel6;contentPane.addjPasswordField1;contentPane.addjPanel1;jPanel
1.addjLabel8jLabel8;contentPane.addjOptionPane1;}publicvoidjButton2_actionPerformedActionEvente{System.exit0;}publicvoidjButton1_actionPerformedActionEvente{booleandeng=false;booleancheng=false;ifjTextField
1.getText.length==0{jOptionPane
1.showMessageDialogthis用户名不能为空!提示jOptionPane
1.INFORMATION_MESSAGE;}else{deng=true;}ifdeng{try{Class.forNamesun.jdbc.odbc.JdbcOdbcDriver;}catchExceptionce{System.out.printlnce;}try{Stringurl=jdbc:odbc:test;Connectioncon=DriverManager.getConnectionurl;Statementsta=con.createStatement;ResultSetrs=sta.executeQueryselectUserIdUserPwdUserTypefromUser1;whilers.next{ifrs.getString
1.trim.equalsjTextField
1.getTextrs.getString
2.trim.equalsthis.jPasswordField
1.getText{jOptionPane
1.showMessageDialogthis恭喜你登陆成功!提示jOptionPane
1.INFORMATION_MESSAGE;level=rs.getStringUserType.trim;name=jTextField
1.getText.trim;MainFramemain=newMainFrameleveljTextField
1.getText;main.setLocation20040;main.setSize911698;main.setVisibletrue;main.setResizablefalse;main.validate;this.dispose;cheng=false;break;}else{cheng=true;}}ifcheng{jOptionPane
1.showMessageDialogthis用户名或密码错误!提示jOptionPane
1.INFORMATION_MESSAGE;}rs.close;sta.close;con.close;}catchExceptionce{System.out.printlnce;}}}}classLoginFrame_jButton1_actionAdapterimplementsActionListener{privateLoginFrameadaptee;LoginFrame_jButton1_actionAdapterLoginFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classLoginFrame_jButton2_actionAdapterimplementsActionListener{privateLoginFrameadaptee;LoginFrame_jButton2_actionAdapterLoginFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}LoginClass.java类packagestudenmanager;importjava.awt.Toolkit;importjavax.swing.SwingUtilities;importjavax.swing.UIManager;importjava.awt.Dimension;publicclassLoginClass{booleanpackFrame=false;publicLoginClass{LoginFrameframe=newLoginFrame;ifpackFrame{frame.pack;}else{frame.validate;}//CenterthewindowDimensionscreenSize=Toolkit.getDefaultToolkit.getScreenSize;DimensionframeSize=frame.getSize;ifframeSize.heightscreenSize.height{frameSize.height=screenSize.height;}ifframeSize.widthscreenSize.width{frameSize.width=screenSize.width;}frame.setLocationscreenSize.width-frameSize.width/2screenSize.height-frameSize.height/2;frame.setVisibletrue;}publicstaticvoidmainString[]args{SwingUtilities.invokeLaternewRunnable{publicvoidrun{try{UIManager.setLookAndFeelUIManager.getSystemLookAndFeelClassName;}catchExceptionexception{exception.printStackTrace;}newLoginClass;}};}}
7.4学生管理系统
7.
4.1学生管理系统主界面功能描述根据学生管理系统的主框架我们设计了学生管理系统主界面,分别由学生信息管理、班级管理、课程管理、用户管理、退出等5个部分构成管理系统主框架的主要结构如下图所示图7-3学生管理系统主界面
7.
4.2学生管理系统主界面详细代码MainFrame.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.*;importjavax.swing.JLabel;importjavax.swing.JMenuBar;importjavax.swing.JMenu;importjavax.swing.JMenuItem;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.ImageIcon;importjava.awt.BorderLayout;importjava.awt.Dimension;importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.*;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;publicclassMainFrameextendsJFrame{JPanelcontentPane;Stringlevel;staticStringname;ImageIconsnow=newImageIconimage/
1.jpg;JLabeljLabel1=newJLabel;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;JMenuBarjMenuBar1=newJMenuBar;JMenujMenu1=newJMenu;JMenujMenu2=newJMenu;JMenuItemjMenuItem4=newJMenuItem;JMenuItemjMenuItem5=newJMenuItem;JMenujMenu3=newJMenu;JMenuItemjMenuItem7=newJMenuItem;JMenuItemjMenuItem8=newJMenuItem;JMenuItemjMenuItem9=newJMenuItem;JMenujMenu4=newJMenu;JMenuItemjMenuItem10=newJMenuItem;JMenuItemjMenuItem11=newJMenuItem;JMenuItemjMenuItem12=newJMenuItem;JMenujMenu5=newJMenu;JMenuItemjMenuItem13=newJMenuItem;JMenujMenu6=newJMenu;JMenuItemjMenuItem1=newJMenuItem;JMenuItemjMenuItem14=newJMenuItem;JMenuItemjMenuItem15=newJMenuItem;JMenujMenu7=newJMenu;JMenuItemjMenuItem2=newJMenuItem;JMenuItemjMenuItem17=newJMenuItem;JMenuItemjMenuItem18=newJMenuItem;JPaneljPanel1=newJPanel;JLabeljLabel5=newJLabel;BorderLayoutborderLayout1=newBorderLayout;JMenuItemjMenuItem19=newJMenuItem;StringSidfind;publicMainFrameStringlevelStringname{this.level=level;this.name=name;try{setDefaultCloseOperationEXIT_ON_CLOSE;jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{contentPane=JPanelgetContentPane;contentPane.setLayoutnull;this.setJMenuBarjMenuBar1;setSizenewDimension911698;setTitle欢迎登陆学生管理系统;jLabel
1.setText欢迎您使用学生;jLabel
1.setBoundsnewRectangle4736632033;jLabel
1.setFontnewjava.awt.FontDialogFont.BOLD30;jLabel
1.setForegroundColor.lightGray;jLabel
2.setFontnewjava.awt.FontDialogFont.BOLD30;jLabel
2.setText欢迎您使用学生;jLabel
2.setBoundsnewRectangle4746732833;jLabel
3.setFontnewjava.awt.FontDialogFont.BOLD30;jLabel
3.setText管理系统;jLabel
3.setBoundsnewRectangle57013524033;jLabel
4.setFontnewjava.awt.FontDialogFont.BOLD30;jLabel
4.setForegroundColor.lightGray;jLabel
4.setText管理系统;jLabel
4.setBoundsnewRectangle56813622833;jMenu
1.setText学生信息管理;jMenu
2.setText班级管理;jMenuItem
4.setText录入;jMenuItem
4.addActionListenernewMainFrame_jMenuItem4_actionAdapterthis;jMenuItem
5.setText管理;jMenuItem
5.addActionListenernewMainFrame_jMenuItem5_actionAdapterthis;jMenu
3.setText课程管理;jMenuItem
7.setText录入;jMenuItem
7.addActionListenernewMainFrame_jMenuItem7_actionAdapterthis;jMenuItem
8.setText修改;jMenuItem
8.addActionListenernewMainFrame_jMenuItem8_actionAdapterthis;jMenuItem
9.setText查询;jMenuItem
9.addActionListenernewMainFrame_jMenuItem9_actionAdapterthis;jMenu
4.setText用户管理;jMenuItem
10.setText注册;jMenuItem
10.addActionListenernewMainFrame_jMenuItem10_actionAdapterthis;jMenuItem
11.setText修改密码;jMenuItem
11.addActionListenernewMainFrame_jMenuItem11_actionAdapterthis;jMenuItem
12.setEnabledtrue;jMenuItem
12.setText删除用户;jMenu
5.setText退出;jMenuItem
13.setText退出;jMenuItem
13.addActionListenernewMainFrame_jMenuItem13_actionAdapterthis;jMenu
6.setText学生信息;jMenuItem
1.setText注册;jMenuItem
1.addActionListenernewMainFrame_jMenuItem1_actionAdapterthis;jMenuItem
14.setText管理;jMenuItem
14.addActionListenernewMainFrame_jMenuItem14_actionAdapterthis;jMenuItem
15.setText查询;jMenuItem
15.addActionListenernewMainFrame_jMenuItem15_actionAdapterthis;jMenu
7.setText选课信息;jMenuItem
2.setText选课;jMenuItem
2.addActionListenernewMainFrame_jMenuItem2_actionAdapterthis;jMenuItem
17.setText课程查询;jMenuItem
18.setText重新启动;jMenuItem
18.addActionListenernewMainFrame_jMenuItem18_actionAdapterthis;jPanel
1.setBoundsnewRectangle-60946771;jPanel
1.setLayoutborderLayout1;jLabel
5.setIconsnow;jMenuItem
19.setText更改权限;jMenuItem
19.addActionListenernewMainFrame_jMenuItem19_actionAdapterthis;contentPane.addjLabel2;contentPane.addjLabel3;contentPane.addjLabel4;contentPane.addjLabel1;contentPane.addjPanel1;jPanel
1.addjLabel5java.awt.BorderLayout.NORTH;jMenuBar
1.addjMenu1;jMenuBar
1.addjMenu2;jMenuBar
1.addjMenu3;jMenuBar
1.addjMenu4;jMenuBar
1.addjMenu5;jMenu
1.addjMenu6;jMenu
1.addjMenu7;jMenu
2.addjMenuItem4;jMenu
2.addjMenuItem5;jMenu
3.addjMenuItem7;jMenu
3.addjMenuItem8;jMenu
3.addjMenuItem9;jMenu
4.addjMenuItem10;jMenu
4.addjMenuItem11;jMenu
4.addjMenuItem19;jMenu
4.addjMenuItem12;jMenu
5.addjMenuItem13;jMenu
5.addjMenuItem18;jMenu
6.addjMenuItem1;jMenu
6.addjMenuItem14;jMenu
6.addjMenuItem15;jMenu
7.addjMenuItem2;jMenu
7.addjMenuItem17;iflevel.equals0{this.jMenuItem
1.setVisiblefalse;this.jMenuItem
14.setVisiblefalse;this.jMenuItem
12.setVisiblefalse;this.jMenuItem
5.setVisiblefalse;this.jMenuItem
7.setVisiblefalse;this.jMenuItem
8.setVisiblefalse;this.jMenuItem
10.setVisiblefalse;this.jMenuItem
19.setVisiblefalse;}iflevel.equals1{this.jMenuItem
2.setVisiblefalse;this.jMenuItem
10.setVisiblefalse;this.jMenuItem
9.setVisiblefalse;}}publicvoidjMenuItem13_actionPerfomeActionEvente{System.exit0;}publicvoidjMenuItem18_actionPerformedActionEvente{this.dispose;LoginFramelogin=newLoginFrame;login.setLocation400200;login.setSize504344;login.setVisibletrue;login.setResizablefalse;login.validate;}publicvoidjMenuItem1_actionPerformedActionEvente{StudentInfoAddFramesiadd=newStudentInfoAddFrame;siadd.setLocation400200;siadd.setSize592500;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem14_actionPerformedActionEvente{StudentUpsiadd=newStudentUpfind;siadd.setLocation400200;siadd.setSize592500;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem10_actionPerformedActionEvente{AddAdminFramesiadd=newAddAdminFrame;siadd.setLocation400200;siadd.setSize469315;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem11_actionPerformedActionEvente{MAPasswordFrameFramesiadd=newMAPasswordFrameFramelevelname;siadd.setLocation400200;siadd.setSize444340;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem19_actionPerformedActionEvente{QModifyFramesiadd=newQModifyFrame;siadd.setLocation400200;siadd.setSize434314;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem7_actionPerformedActionEvente{KeChengAddFramesiadd=newKeChengAddFrame;siadd.setLocation400200;siadd.setSize482320;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem8_actionPerformedActionEvente{KeChengManagersiadd=newKeChengManagerfind;siadd.setLocation400200;siadd.setSize500380;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem4_actionPerformedActionEvente{AddClassFramesiadd=newAddClassFrame;siadd.setLocation400200;siadd.setSize465310;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem5_actionPerformedActionEvente{ClassManagersiadd=newClassManager;siadd.setLocation400200;siadd.setSize530560;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem15_actionPerformedActionEvente{StudentCsiadd=newStudentC;siadd.setLocation220100;siadd.setSize800620;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem2_actionPerformedActionEvente{Choosesiadd=newChooselevelname;siadd.setLocation320100;siadd.setSize550620;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}publicvoidjMenuItem9_actionPerformedActionEvente{KeChengFsiadd=newKeChengF;siadd.setLocation320100;siadd.setSize550600;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;}}classMainFrame_jMenuItem9_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem9_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem9_actionPerformede;}}classMainFrame_jMenuItem2_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem2_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem2_actionPerformede;}}classMainFrame_jMenuItem15_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem15_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem15_actionPerformede;}}classMainFrame_jMenuItem5_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem5_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem5_actionPerformede;}}classMainFrame_jMenuItem4_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem4_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem4_actionPerformede;}}classMainFrame_jMenuItem8_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem8_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem8_actionPerformede;}}classMainFrame_jMenuItem7_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem7_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem7_actionPerformede;}}classMainFrame_jMenuItem19_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem19_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem19_actionPerformede;}}classMainFrame_jMenuItem10_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem10_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem10_actionPerformede;}}classMainFrame_jMenuItem11_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem11_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem11_actionPerformede;}}classMainFrame_jMenuItem13_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem13_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem13_actionPerformede;}}classMainFrame_jMenuItem14_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem14_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem14_actionPerformede;}}classMainFrame_jMenuItem1_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem1_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem1_actionPerformede;}}classMainFrame_jMenuItem18_actionAdapterimplementsActionListener{privateMainFrameadaptee;MainFrame_jMenuItem18_actionAdapterMainFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jMenuItem18_actionPerformede;}}
7.5学生信息管理子系统
7.
5.1学生信息管理子系统功能描述学生信息管理子系统对所有学生的个人信息进行登记,其中包括学生的用户名、姓名、学号、身份证号、地址、所在班级等,并且系统还应能够验证输入错误的学生个人信息记录学生信息管理子系统由注册、修改和查询三部分组成注册界面由一些信息输入框、下拉菜单和两个按钮两个按钮组成其中,有三个下拉菜单分别显示学生所属系部、所属专业和所在班级,根据用户选择的系部显示该系部所属专业下拉菜单,根据用户选择专业显示该专业所有班级下拉菜单;两个按钮分别为一个是提交按钮,通过单击它来提交学生个人信息注册记录;一个退出按钮,单击它退出注册页面管理界面与注册界面控件元素布局完全相同该页面可以将管理员权限用户查询到的学生信息显示在界面控件中,以供管理员修改学生信息图7-4学生信息注册界面查询界面由JPanel、JScrollPane及相关控件组成,用户在查询时,先选择查询方式按学号查询、按姓名查询、按班级查询选择查询方式后会有相应的JPanel显示,供用户输入查询条件用户输入查询条件后,点击查询按钮符合条件的信息列表就会显示在下面的JScrollPane中另外,用户还可以选中列表中的某一条学生信息,进行修改或删除操作图7-5学生信息查询界面
7.
5.2学生信息管理子系统详细代码StudentInfoAddFrame.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjava.awt.*;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;importjava.awt.event.InputMethodEvent;importjava.awt.event.InputMethodListener;importjava.sql.*;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;publicclassStudentInfoAddFrameextendsJFrame{JPanelcontentPane;JLabeljLabel1=newJLabel;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;JLabeljLabel5=newJLabel;JLabeljLabel6=newJLabel;JLabeljLabel7=newJLabel;JLabeljLabel8=newJLabel;JLabeljLabel9=newJLabel;JTextFieldjTextField1=newJTextField;JTextFieldjTextField2=newJTextField;JTextFieldjTextField3=newJTextField;JTextFieldjTextField4=newJTextField;JComboBoxjComboBox4=newJComboBox;JComboBoxjComboBox5=newJComboBox;JButtonjButton1=newJButton;JButtonjButton2=newJButton;JTextFieldjTextField5=newJTextField;intxiN;dbConncon=newdbConn;Objectclas[]={};JLabeljLabel10=newJLabel;JComboBoxjComboBox1=newJComboBox;dbConnconn=newdbConn;JOptionPanejOptionPane1=newJOptionPane;Stringuidrnamenumaddridc;publicStudentInfoAddFrame{try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{contentPane=JPanelgetContentPane;contentPane.setLayoutnull;setSizenewDimension592500;setTitle学生信息注册;jLabel
1.setFontnewjava.awt.FontDialogFont.BOLD23;jLabel
1.setForegroundSystemColor.inactiveCaptionText;jLabel
1.setText学生信息注册;jLabel
1.setBoundsnewRectangle1961623225;jLabel
2.setFontnewjava.awt.FontDialogFont.BOLD23;jLabel
2.setText学生信息注册;jLabel
2.setBoundsnewRectangle1971723125;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
3.setText用户名:;jLabel
3.setBoundsnewRectangle50749022;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
4.setText姓名:;jLabel
4.setBoundsnewRectangle501249022;jLabel
5.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
5.setText身份证号:;jLabel
5.setBoundsnewRectangle502249022;jLabel
6.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
6.setText学号:;jLabel
6.setBoundsnewRectangle501749022;jLabel
7.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
7.setText所属系部:;jLabel
7.setBoundsnewRectangle502749022;jLabel
8.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
8.setText所属专业:;jLabel
8.setBoundsnewRectangle2972749022;jLabel
9.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
9.setText家庭住址:;jLabel
9.setBoundsnewRectangle453749022;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
1.setBorderBorderFactory.createLoweredBevelBorder;jTextField
1.setBoundsnewRectangle1507419523;jTextField
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
2.setBorderBorderFactory.createLoweredBevelBorder;jTextField
2.setText;jTextField
2.setBoundsnewRectangle15012419523;jTextField
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
3.setBorderBorderFactory.createLoweredBevelBorder;jTextField
3.setText;jTextField
3.setBoundsnewRectangle15017419523;jTextField
4.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
4.setBorderBorderFactory.createLoweredBevelBorder;jTextField
4.setText;jTextField
4.setBoundsnewRectangle15037439525;jComboBox
4.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
4.setBorderBorderFactory.createLoweredBevelBorder;jComboBox
4.setBoundsnewRectangle15027412525;jComboBox
4.addActionListenernewStudentInfoAddFrame_jComboBox4_actionAdapterthis;jComboBox
5.setEnabledfalse;jComboBox
5.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
5.setBorderBorderFactory.createLoweredBevelBorder;jComboBox
5.setBoundsnewRectangle39027412525;jComboBox
5.addActionListenernewStudentInfoAddFrame_jComboBox5_actionAdapterthis;jButton
2.setBoundsnewRectangle3754249027;jButton
1.setBoundsnewRectangle1474249027;jButton
1.setBorderBorderFactory.createRaisedBevelBorder;jButton
1.setText提交;jButton
1.addActionListenernewStudentInfoAddFrame_jButton1_actionAdapterthis;jButton
2.setText退出;jButton
2.addActionListenernewStudentInfoAddFrame_jButton2_actionAdapterthis;jTextField
5.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
5.setBorderBorderFactory.createLoweredBevelBorder;jTextField
5.setBoundsnewRectangle15022419523;jLabel
10.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
10.setText所在班级;jLabel
10.setBoundsnewRectangle473249329;jComboBox
1.setEnabledfalse;jComboBox
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
1.setBoundsnewRectangle15032412525;contentPane.addjLabel2;contentPane.addjLabel1;contentPane.addjLabel8;contentPane.addjComboBox5;contentPane.addjLabel7;contentPane.addjComboBox4;contentPane.addjLabel3;contentPane.addjTextField1;contentPane.addjLabel4;contentPane.addjLabel6;contentPane.addjTextField2;contentPane.addjTextField3;contentPane.addjTextField5;contentPane.addjLabel5;contentPane.addjButton1;contentPane.addjButton2;contentPane.addjTextField4;contentPane.addjLabel9;contentPane.addjLabel10;contentPane.addjComboBox1;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN16;this.jComboBox
4.addItem请选择系部;try{ResultSetrs=con.getRsselect*fromDept;whilers.next{Stringxibu=rs.getStringDeptName;jComboBox
4.addItemxibu;}}catchExceptionce{System.out.printlnce;}jComboBox
5.setEnabledfalse;jComboBox
1.setEnabledfalse;}publicvoidjComboBox4_actionPerformedActionEvente{jcb;jComboBox
5.setEnabledtrue;}publicvoidjComboBox5_actionPerformedActionEvente{classAdd;jComboBox
1.setEnabledtrue;}publicvoidjButton1_actionPerformedActionEvente{ifjTextField
1.getText.trim.equals{jOptionPane
1.showMessageDialogthis请输入学生用户名!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjTextField
2.getText.trim.equals{jOptionPane
1.showMessageDialogthis请输入学生姓名!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjTextField
3.getText.trim.equals{jOptionPane
1.showMessageDialogthis请输入学生学号!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjTextField
5.getText.trim.equals{jOptionPane
1.showMessageDialogthis请输入学生的身份证号!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjComboBox
4.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择学生所在系部!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjComboBox
5.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择学生所属专业!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjComboBox
1.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择学生所在班级!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjTextField
4.getText.trim.equals{jOptionPane
1.showMessageDialogthis请输入学生详细地址!提示jOptionPane
1.INFORMATION_MESSAGE;}else{try{findC;booleanNum=false;ResultSetrs=conn.getRsselect*fromStudent;whilers.next{ifjTextField
3.getText.trim.equalsrs.getStringNumber.trim{Num=true;}}rs.close;ifNum{jOptionPane
1.showMessageDialogthis学生学号已存在,请重新输入!提示JOptionPane.INFORMATION_MESSAGEnull;}else{uid=jTextField
1.getText.trim;rname=jTextField
2.getText.trim;num=jTextField
3.getText.trim;addr=jTextField
4.getText.trim;idc=jTextField
5.getText.trim;inuser;instu;}}catchExceptionce{System.out.printlnce.getMessage;}}}publicvoidjButton2_actionPerformedActionEvente{this.dispose;}publicvoidjcb{jComboBox
5.removeAllItems;jComboBox
5.addItem请选择专业;try{ResultSetrs=conn.getRsselect*fromdswhereDeptName=+String.valueOfjComboBox
4.getSelectedItem+;whilers.next{Stringzhy=rs.getStringSpecialityName;jComboBox
5.addItemzhy;}rs.close;}catchExceptione{System.out.printlne.getMessage;}}publicvoidfindC{try{ResultSetrs=conn.getRsselect*fromscwhereClassName=+String.valueOfjComboBox
1.getSelectedItem+;whilers.next{xiN=rs.getIntClassId;}rs.close;}catchExceptione{System.out.printlne.getMessage;}}publicvoidclassAdd{jComboBox
1.removeAllItems;jComboBox
1.addItem请选择班级;try{ResultSetrs=conn.getRsselect*fromscwhereSpecialityName=+String.valueOfjComboBox
5.getSelectedItem+;whilers.next{Stringzhy=rs.getStringClassName;jComboBox
1.addItemzhy;}rs.close;}catchExceptione{System.out.printlne;}}publicvoidinstu{try{conn.getUpdateinsertintoStudentUserIdRealNameNumberClassIdAddressIdentityCodevalues+uid++rname++num++xiN++addr++idc+;}catchExceptionce{System.out.printlnce.getMessage;}}publicvoidinuser{try{conn.getUpdateinsertintoUser1UserIdUserTypevalues+uid+0;}catchExceptionce{System.out.printlnce.getMessage;}}}classStudentInfoAddFrame_jButton2_actionAdapterimplementsActionListener{privateStudentInfoAddFrameadaptee;StudentInfoAddFrame_jButton2_actionAdapterStudentInfoAddFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}classStudentInfoAddFrame_jButton1_actionAdapterimplementsActionListener{privateStudentInfoAddFrameadaptee;StudentInfoAddFrame_jButton1_actionAdapterStudentInfoAddFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}classStudentInfoAddFrame_jComboBox5_actionAdapterimplementsActionListener{privateStudentInfoAddFrameadaptee;StudentInfoAddFrame_jComboBox5_actionAdapterStudentInfoAddFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jComboBox5_actionPerformede;}}classStudentInfoAddFrame_jComboBox4_actionAdapterimplementsActionListener{privateStudentInfoAddFrameadaptee;StudentInfoAddFrame_jComboBox4_actionAdapterStudentInfoAddFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jComboBox4_actionPerformede;}}StudentC.java类packagestudenmanager;importjava.awt.BorderLayout;importjavax.swing.table.DefaultTableModel;importjava.util.*;importjavax.swing.JFrame;importjavax.swing.JLabel;importjava.awt.*;importcom.borland.jbcl.layout.XYLayout;importcom.borland.jbcl.layout.*;importjavax.swing.JComboBox;importjavax.swing.JPanel;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;importjava.awt.event.MouseEvent;importjava.awt.event.MouseAdapter;importjavax.swing.table.*;importjava.awt.Dimension;publicclassStudentCextendsJFrame{Stringsqlzhy;JLabeljLabel1=newJLabel;XYLayoutxYLayout1=newXYLayout;JLabeljLabel2=newJLabel;JComboBoxjComboBox1=newJComboBox;JPaneljPanel1=newJPanel;JLabeljLabel3=newJLabel;JButtonjButton1=newJButton;JPaneljPanel2=newJPanel;XYLayoutxYLayout2=newXYLayout;JLabeljLabel4=newJLabel;JTextFieldjTextField2=newJTextField;JButtonjButton2=newJButton;ButtonGroupbuttonGroup1=newButtonGroup;JPaneljPanel4=newJPanel;JLabeljLabel6=newJLabel;XYLayoutxYLayout4=newXYLayout;JTextFieldjTextField3=newJTextField;JButtonjButton4=newJButton;XYLayoutxYLayout5=newXYLayout;JTextFieldjTextField1=newJTextField;JButtonjButton5=newJButton;JButtonjButton6=newJButton;JScrollPanejScrollPane1=newJScrollPane;JTablejTable1=newJTable;intintRow;dbConnconn=newdbConn;String[]arrField={用户名姓名学号班级身份证号家庭住址};DefaultTableModelmodel=newDefaultTableModel;Object[][]arrData={};staticStringfind;JButtonjButton7=newJButton;JOptionPanejOptionPane1=newJOptionPane;publicStudentC{try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{getContentPane.setLayoutxYLayout1;jLabel
1.setFontnewjava.awt.Font新宋体Font.BOLD27;jLabel
1.setText学生信息查询;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN20;jLabel
2.setText请选择查询方式;this.setTitle学生信息查询;jPanel
1.setBorderBorderFactory.createEtchedBorder;jPanel
1.setLayoutxYLayout5;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN20;jLabel
3.setText请输入学号;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN20;jButton
1.setText查询;jButton
1.addActionListenernewStudentC_jButton1_actionAdapterthis;jPanel
2.setBorderBorderFactory.createEtchedBorder;jPanel
2.setLayoutxYLayout2;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN20;jLabel
4.setText请输入学生姓名;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN20;jButton
2.setText查询;jButton
2.addActionListenernewStudentC_jButton2_actionAdapterthis;jPanel
4.setBorderBorderFactory.createEtchedBorder;jPanel
4.setLayoutxYLayout4;jLabel
6.setFontnewjava.awt.FontDialogFont.PLAIN20;jLabel
6.setText请输入要查询的班级;jButton
4.setFontnewjava.awt.FontDialogFont.PLAIN20;jButton
4.setText查询;jButton
4.addActionListenernewStudentC_jButton4_actionAdapterthis;jComboBox
1.addActionListenernewStudentC_jComboBox1_actionAdapterthis;jComboBox
1.setFontnewjava.awt.FontDialogFont.PLAIN20;jTextField
3.setFontnewjava.awt.FontDialogFont.PLAIN20;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN20;jTextField
2.setFontnewjava.awt.FontDialogFont.PLAIN20;jButton
5.setFontnewjava.awt.FontDialogFont.PLAIN20;jButton
5.setText修改;jButton
5.addActionListenernewjava.awt.event.ActionListener{publicvoidactionPerformedActionEvente{jButton5_actionPerformede;}};jButton
6.setFontnewjava.awt.FontDialogFont.PLAIN20;jButton
6.setText返回;jButton
6.addActionListenernewStudentC_jButton6_actionAdapterthis;jScrollPane
1.setBorderBorderFactory.createEtchedBorder;jTable
1.setCellSelectionEnabledtrue;jButton
7.setFontnewjava.awt.FontDialogFont.PLAIN20;jButton
7.setText删除;jButton
7.addActionListenernewStudentC_jButton7_actionAdapterthis;this.getContentPane.addjPanel2newXYConstraints15012551050;jPanel
2.addjButton2newXYConstraints38188527;this.getContentPane.addjPanel4newXYConstraints15012551050;jPanel
4.addjButton4newXYConstraints38888926;ShowPanel;jComboBox
1.addItem请选择;jComboBox
1.addItem按学号查询;jComboBox
1.addItem按姓名查询;jComboBox
1.addItem按班级查询;jPanel
1.addjTextField1newXYConstraints164814925;jPanel
1.addjButton1newXYConstraints36088029;jPanel
1.addjLabel3newXYConstraints29812526;jPanel
2.addjLabel4newXYConstraints21816431;jPanel
2.addjTextField2newXYConstraints206813227;jPanel
4.addjLabel6newXYConstraints16820130;jPanel
4.addjTextField3newXYConstraints212815228;this.getContentPane.addjLabel1newXYConstraints3211218038;this.getContentPane.addjComboBox1newXYConstraints37076-130;this.getContentPane.addjLabel2newXYConstraints1697416132;this.getContentPane.addjPanel1newXYConstraints15012551050;jScrollPane
1.getViewport.addjTable1null;this.getContentPane.addjScrollPane1newXYConstraints20193759325;this.getContentPane.addjButton5newXYConstraints2255459534;this.getContentPane.addjButton6newXYConstraints5255459534;this.getContentPane.addjButton7newXYConstraints3755459534;}publicvoidUpdateRecord{Object[][]arrTmp={};//设定表格的字段Vectorvec=newVector11;model=newDefaultTableModelarrTmparrField;jTable1=newJTablemodel;jScrollPane
1.getViewport.addjTable1null;try{ResultSetrs=conn.getRssql;whilers.next{vec=newVector;vec.addrs.getString
1.trim;vec.addrs.getString
2.trim;vec.addrs.getString
3.trim;vec.addrs.getString
4.trim;vec.addrs.getString
5.trim;vec.addrs.getString
6.trim;model.addRowvec;}}catchExceptione{e.printStackTrace;}jScrollPane
1.getHorizontalScrollBar;jTable
1.setGridColorColor.blue;jTable
1.setDragEnabledtrue;jTable
1.setSelectionForegroundColor.red;jTable
1.setSelectionBackgroundColor.green;jTable
1.setSelectionModeListSelectionModel.SINGLE_SELECTION;jTable
1.setRowSelectionAllowedtrue;jTable
1.setShowVerticalLinestrue;}publicvoidShowPanel{jPanel
1.setVisiblefalse;jPanel
2.setVisiblefalse;jPanel
4.setVisiblefalse;ifjComboBox
1.getSelectedIndex==1jPanel
1.setVisibletrue;elseifjComboBox
1.getSelectedIndex==2jPanel
2.setVisibletrue;elseifjComboBox
1.getSelectedIndex==3jPanel
4.setVisibletrue;}publicvoidgetM{intRow=jTable
1.getSelectedRow;ifintRow==-1return;try{find=model.getValueAtintRow
2.toString.trim;}catchExceptione{e.printStackTrace;}}publicvoidjButton6_actionPerformedActionEvente{this.dispose;}publicvoidjButton1_actionPerformedActionEvente{if!jTextField
1.getText.trim.equals{sql=select*fromfindstuwhereNumber=+jTextField
1.getText.trim+;UpdateRecord;}elsejOptionPane
1.showMessageDialogthis请输入要查询的学生学号!提示jOptionPane
1.INFORMATION_MESSAGE;}publicvoidjComboBox1_actionPerformedActionEvente{ShowPanel;}publicvoidjButton2_actionPerformedActionEvente{if!jTextField
2.getText.trim.equals{sql=select*fromfindstuwhereRealName=+jTextField
2.getText.trim+;UpdateRecord;}elsejOptionPane
1.showMessageDialogthis请输入要查询的学生姓名!提示jOptionPane
1.INFORMATION_MESSAGE;}publicvoidjButton4_actionPerformedActionEvente{if!jTextField
3.getText.trim.equals{sql=select*fromfindstuwhereClassName=+jTextField
3.getText.trim+;UpdateRecord;}elsejOptionPane
1.showMessageDialogthis请输入要查询的班级!提示jOptionPane
1.INFORMATION_MESSAGE;}publicvoidjButton5_actionPerformedActionEvente{getM;ifintRow!=-1{StudentUpsiadd=newStudentUpfind;siadd.setLocation400200;siadd.setSize600500;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;this.dispose;}elsejOptionPane
1.showMessageDialogthis请选择要修改的信息!提示jOptionPane
1.INFORMATION_MESSAGE;}publicvoidjButton7_actionPerformedActionEvente{getM;ifintRow!=-1{deluser;delstu;}elsejOptionPane
1.showMessageDialogthis请选择要删除的信息!提示jOptionPane
1.INFORMATION_MESSAGE;}publicvoiddelstu{try{conn.getUpdatedeletefromStudentwhereNumber=+find+;}catchExceptionce{System.out.printlnce.getMessage;}}publicvoiddeluser{try{ResultSetrs=conn.getRsselect*fromfindstuwhereNumber=+find+;whilers.next{zhy=rs.getStringUserId;}rs.close;}catchExceptione{System.out.printlne;}try{conn.getUpdatedeletefromUser1whereUserId=+zhy+;}catchExceptionce{System.out.printlnce.getMessage;}}}classStudentC_jButton7_actionAdapterimplementsActionListener{privateStudentCadaptee;StudentC_jButton7_actionAdapterStudentCadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton7_actionPerformede;}}classStudentC_jButton4_actionAdapterimplementsActionListener{privateStudentCadaptee;StudentC_jButton4_actionAdapterStudentCadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton4_actionPerformede;}}classStudentC_jButton2_actionAdapterimplementsActionListener{privateStudentCadaptee;StudentC_jButton2_actionAdapterStudentCadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}classStudentC_jButton1_actionAdapterimplementsActionListener{privateStudentCadaptee;StudentC_jButton1_actionAdapterStudentCadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classStudentC_jButton6_actionAdapterimplementsActionListener{privateStudentCadaptee;StudentC_jButton6_actionAdapterStudentCadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton6_actionPerformede;}}classStudentC_jComboBox1_actionAdapterimplementsActionListener{privateStudentCadaptee;StudentC_jComboBox1_actionAdapterStudentCadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jComboBox1_actionPerformede;}}StudentUp.javapackagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjava.awt.*;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;importjava.awt.event.InputMethodEvent;importjava.awt.event.InputMethodListener;importjava.sql.*;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;publicclassStudentUpextendsJFrame{JPanelcontentPane;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;JLabeljLabel5=newJLabel;JLabeljLabel6=newJLabel;JLabeljLabel7=newJLabel;JLabeljLabel8=newJLabel;JLabeljLabel9=newJLabel;JTextFieldjTextField1=newJTextField;JTextFieldjTextField2=newJTextField;JTextFieldjTextField3=newJTextField;JTextFieldjTextField4=newJTextField;JComboBoxjComboBox4=newJComboBox;JComboBoxjComboBox5=newJComboBox;JButtonjButton1=newJButton;JButtonjButton2=newJButton;JTextFieldjTextField5=newJTextField;intxiN;dbConncon=newdbConn;Objectclas[]={};JLabeljLabel10=newJLabel;JComboBoxjComboBox1=newJComboBox;dbConnconn=newdbConn;JOptionPanejOptionPane1=newJOptionPane;Stringuidrnamenumaddridcfindcnamesnamedname;publicStudentUpStringfind{this.find=find;try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{contentPane=JPanelgetContentPane;contentPane.setLayoutnull;setSizenewDimension592500;setTitle学生信息注册;jLabel
2.setFontnewjava.awt.FontDialogFont.BOLD23;jLabel
2.setText学生信息修改;jLabel
2.setBoundsnewRectangle1971723125;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
3.setText用户名:;jLabel
3.setBoundsnewRectangle50749022;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
4.setText姓名:;jLabel
4.setBoundsnewRectangle501249022;jLabel
5.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
5.setText身份证号:;jLabel
5.setBoundsnewRectangle502249022;jLabel
6.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
6.setText学号:;jLabel
6.setBoundsnewRectangle501749022;jLabel
7.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
7.setText所属系部:;jLabel
7.setBoundsnewRectangle502749022;jLabel
8.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
8.setText所属专业:;jLabel
8.setBoundsnewRectangle2972749022;jLabel
9.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
9.setText家庭住址:;jLabel
9.setBoundsnewRectangle453749022;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
1.setBorderBorderFactory.createLoweredBevelBorder;jTextField
1.setBoundsnewRectangle1507419523;jTextField
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
2.setBorderBorderFactory.createLoweredBevelBorder;jTextField
2.setText;jTextField
2.setBoundsnewRectangle15012419523;jTextField
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
3.setBorderBorderFactory.createLoweredBevelBorder;jTextField
3.setText;jTextField
3.setBoundsnewRectangle15017419523;jTextField
4.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
4.setBorderBorderFactory.createLoweredBevelBorder;jTextField
4.setText;jTextField
4.setBoundsnewRectangle15037439525;jComboBox
4.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
4.setBorderBorderFactory.createLoweredBevelBorder;jComboBox
4.setBoundsnewRectangle15027412525;jComboBox
4.addActionListenernewStudentUp_jComboBox4_actionAdapterthis;jComboBox
5.setEnabledfalse;jComboBox
5.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
5.setBorderBorderFactory.createLoweredBevelBorder;jComboBox
5.setBoundsnewRectangle39027412525;jComboBox
5.addActionListenernewStudentUp_jComboBox5_actionAdapterthis;jButton
2.setBoundsnewRectangle3754249027;jButton
1.setBoundsnewRectangle1474249027;jButton
1.setBorderBorderFactory.createRaisedBevelBorder;jButton
1.setText提交;jButton
1.addActionListenernewStudentUp_jButton1_actionAdapterthis;jButton
2.setText退出;jButton
2.addActionListenernewStudentUp_jButton2_actionAdapterthis;jTextField
5.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
5.setBorderBorderFactory.createLoweredBevelBorder;jTextField
5.setBoundsnewRectangle15022419523;jLabel
10.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
10.setText所在班级;jLabel
10.setBoundsnewRectangle473249329;jComboBox
1.setEnabledfalse;jComboBox
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
1.setBoundsnewRectangle15032412525;contentPane.addjLabel2;contentPane.addjLabel8;contentPane.addjComboBox5;contentPane.addjLabel7;contentPane.addjComboBox4;contentPane.addjLabel3;contentPane.addjTextField1;contentPane.addjLabel4;contentPane.addjLabel6;contentPane.addjTextField2;contentPane.addjTextField3;contentPane.addjTextField5;contentPane.addjLabel5;contentPane.addjButton1;contentPane.addjButton2;contentPane.addjTextField4;contentPane.addjLabel9;contentPane.addjLabel10;contentPane.addjComboBox1;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN16;this.jComboBox
4.addItem请选择系部;try{ResultSetrs=con.getRsselect*fromDept;whilers.next{Stringxibu=rs.getStringDeptName;jComboBox
4.addItemxibu;}}catchExceptionce{System.out.printlnce;}showstu;jComboBox
5.setEnabledfalse;jComboBox
1.setEnabledfalse;}publicvoidjComboBox4_actionPerformedActionEvente{jcb;jComboBox
5.setEnabledtrue;}publicvoidjComboBox5_actionPerformedActionEvente{classAdd;jComboBox
1.setEnabledtrue;}publicvoidjButton1_actionPerformedActionEvente{ifjTextField
1.getText.trim.equals{jOptionPane
1.showMessageDialogthis请输入学生用户名!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjTextField
2.getText.trim.equals{jOptionPane
1.showMessageDialogthis请输入学生姓名!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjTextField
3.getText.trim.equals{jOptionPane
1.showMessageDialogthis请输入学生学号!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjTextField
5.getText.trim.equals{jOptionPane
1.showMessageDialogthis请输入学生的身份证号!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjComboBox
4.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择学生所在系部!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjComboBox
5.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择学生所属专业!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjComboBox
1.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择学生所在班级!提示jOptionPane
1.INFORMATION_MESSAGE;}elseifjTextField
4.getText.trim.equals{jOptionPane
1.showMessageDialogthis请输入学生详细地址!提示jOptionPane
1.INFORMATION_MESSAGE;}else{try{findC;booleanNum=false;ResultSetrs=conn.getRsselect*fromStudent;whilers.next{ifjTextField
3.getText.trim.equalsrs.getStringNumber.trim{Num=true;}}rs.close;ifNum{jOptionPane
1.showMessageDialogthis学生学号已存在,请重新输入!提示JOptionPane.INFORMATION_MESSAGEnull;}else{uid=jTextField
1.getText.trim;rname=jTextField
2.getText.trim;num=jTextField
3.getText.trim;addr=jTextField
4.getText.trim;idc=jTextField
5.getText.trim;inuser;instu;}}catchExceptionce{System.out.printlnce.getMessage;}}}publicvoidjButton2_actionPerformedActionEvente{this.dispose;}publicvoidjcb{jComboBox
5.removeAllItems;jComboBox
5.addItem请选择专业;try{ResultSetrs=conn.getRsselect*fromdswhereDeptName=+String.valueOfjComboBox
4.getSelectedItem+;whilers.next{Stringzhy=rs.getStringSpecialityName;jComboBox
5.addItemzhy;}rs.close;}catchExceptione{System.out.printlne.getMessage;}}publicvoidfindC{try{ResultSetrs=conn.getRsselect*fromscwhereClassName=+String.valueOfjComboBox
1.getSelectedItem+;whilers.next{xiN=rs.getIntClassId;}rs.close;}catchExceptione{System.out.printlne.getMessage;}}publicvoidclassAdd{jComboBox
1.removeAllItems;jComboBox
1.addItem请选择班级;try{ResultSetrs=conn.getRsselect*fromscwhereSpecialityName=+String.valueOfjComboBox
5.getSelectedItem+;whilers.next{Stringzhy=rs.getStringClassName;jComboBox
1.addItemzhy;}rs.close;}catchExceptione{System.out.printlne;}}publicvoidinstu{try{conn.getUpdateupdateStudentsetUserIdRealNameClassIdAddressIdentityCodevalues+uid++rname++xiN++addr++idc+whereNumber=+find+;}catchExceptionce{System.out.printlnce.getMessage;}}publicvoidinuser{try{conn.getUpdateinsertintoUser1UserIdUserTypevalues+uid+0;}catchExceptionce{System.out.printlnce.getMessage;}}publicvoidshowstu{iffind=={return;}else{try{ResultSetrs=con.getRsselect*fromfindstuwhereNumber=+find+;whilers.next{uid=rs.getString1;rname=rs.getString2;num=rs.getString3;cname=rs.getString4;idc=rs.getString5;addr=rs.getString6;sname=rs.getString8;dname=rs.getString9;}}catchExceptionce{System.out.printlnce;}jTextField
1.setTextuid;jTextField
2.setTextrname;jTextField
3.setTextnum;jComboBox
4.setSelectedItemdname;jComboBox
5.addItemsname;jComboBox
1.addItemcname;jTextField
4.setTextaddr;jTextField
5.setTextidc;}}}classStudentUp_jButton2_actionAdapterimplementsActionListener{privateStudentUpadaptee;StudentUp_jButton2_actionAdapterStudentUpadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}classStudentUp_jButton1_actionAdapterimplementsActionListener{privateStudentUpadaptee;StudentUp_jButton1_actionAdapterStudentUpadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classStudentUp_jComboBox5_actionAdapterimplementsActionListener{privateStudentUpadaptee;StudentUp_jComboBox5_actionAdapterStudentUpadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jComboBox5_actionPerformede;}}classStudentUp_jComboBox4_actionAdapterimplementsActionListener{privateStudentUpadaptee;StudentUp_jComboBox4_actionAdapterStudentUpadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jComboBox4_actionPerformede;}}
7.6选课信息子系统
7.
6.1选课信息子系统功能描述选课信息管理子系统对学生所选的课程进行管理,包括学生的可选课程和个人已选项课的信息,并可以进行选课和删除信息操作选课信息管理子系统只能在“学生”权限下使用,界面分为选课和课程查询两部分选课界面根据登录系统的学生权限用户信息,将学生的姓名和所属专业显示在界面的文本框中(该类文本框不可编辑),并在下面的JScrollPane1中将该名学生可以选择的课程显示在列表中用户可以根据列表中的课程信息选择要选修可课程,点击选择按钮后,该课程被选中,并将该条课程信息显示在下面的JScrollPane2中用户最多可以选择两门课程用户选择好要选修的课程后,点击确定按钮提交信息,点击删除按钮删除已选的课程图7-6学生选课界面
7.
6.2选课信息子系统详细代码Choose.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.*;importjavax.swing.JFrame;importcom.borland.jbcl.layout.XYLayout;importcom.borland.jbcl.layout.*;importjavax.swing.JLabel;importjava.awt.Font;importjavax.swing.JTextField;importjavax.swing.JPanel;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;importjavax.swing.table.DefaultTableModel;importjava.util.*;importjava.lang.*;publicclassChooseextendsJFrame{XYLayoutxYLayout1=newXYLayout;JLabeljLabel1=newJLabel;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JTextFieldjTextField1=newJTextField;JTextFieldjTextField2=newJTextField;JPaneljPanel1=newJPanel;XYLayoutxYLayout2=newXYLayout;JScrollPanejScrollPane1=newJScrollPane;JTablejTable1=newJTable;JButtonjButton1=newJButton;JPaneljPanel2=newJPanel;XYLayoutxYLayout3=newXYLayout;JScrollPanejScrollPane2=newJScrollPane;JButtonjButton2=newJButton;JButtonjButton3=newJButton;JTablejTable2=newJTable;DefaultTableModelmodel=newDefaultTableModel;Object[][]arrData={};String[]arrField={课程编号课程名称学分任课教师专业编号任课编号};StringclassInamelevel;dbConnconn=newdbConn;dbcon=newdb;intspIdjintRow;StringCS[]=newString
[100];Stringfd[]=newString
[100];JOptionPanejOptionPane1=newJOptionPane;inti=0;publicChooseStringlevelStringname{this.name=name;try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{getContentPane.setLayoutxYLayout1;jLabel
1.setFontnewjava.awt.FontDialogFont.BOLD20;jLabel
1.setToolTipText;jLabel
1.setText学生选课;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
2.setText学生姓名;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
3.setText所属专业;xYLayout
1.setWidth550;xYLayout
1.setHeight600;jPanel
1.setBorderBorderFactory.createEtchedBorder;jPanel
1.setLayoutxYLayout2;jScrollPane
1.setBorderBorderFactory.createEtchedBorder;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
1.setText选择;jButton
1.addActionListenernewChoose_jButton1_actionAdapterthis;jPanel
2.setBorderBorderFactory.createEtchedBorder;jPanel
2.setLayoutxYLayout3;jScrollPane
2.setBorderBorderFactory.createEtchedBorder;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
2.setText确定;jButton
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
3.setText删除;this.setTitle学生选课;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
2.setFontnewjava.awt.FontDialogFont.PLAIN16;this.getContentPane.addjLabel2newXYConstraints41928328;this.getContentPane.addjTextField2newXYConstraints3749212525;this.getContentPane.addjTextField1newXYConstraints1279212525;this.getContentPane.addjLabel3newXYConstraints282928328;this.getContentPane.addjLabel1newXYConstraints2102313038;this.getContentPane.addjPanel1newXYConstraints30142490234;jScrollPane
1.getViewport.addjTable1;jPanel
1.addjScrollPane1newXYConstraints89471173;jPanel
1.addjButton1newXYConstraints2011918529;jPanel
2.addjScrollPane2newXYConstraints75473106;jScrollPane
2.getViewport.addjTable2;jPanel
2.addjButton3newXYConstraints2811257626;jPanel
2.addjButton2newXYConstraints1371257626;this.getContentPane.addjPanel2newXYConstraints30404490174;try{ResultSetrs=conn.getRsselect*fromStudentwhereUserId=+name+;whilers.next{jTextField
1.setTextrs.getStringRealName;classI=rs.getStringClassId;}rs.close;}catchExceptionce{System.out.printlnce;}try{ResultSetrs1=conn.getRsselect*fromClasswhereClassId=+classI+;whilers
1.next{jTextField
2.setTextrs
1.getStringClassName;spId=rs
1.getIntSpecialityId;}rs
1.close;}catchExceptionce{System.out.printlnce;}jTextField
2.setEditablefalse;jTextField
1.setEditablefalse;UpdateRecord;}publicvoidUpdateRecord{Object[][]arrTmp={};//设定表格的字段Vectorvec=newVector11;model=newDefaultTableModelarrTmparrField;jTable1=newJTablemodel;jScrollPane
1.getViewport.addjTable1null;try{ResultSetrs3=con.getRsselect*fromstuchoosewhereExpr2=+spId+;whilers
3.next{vec=newVector;vec.addString.valueOfrs
3.getIntCourseId;vec.addrs
3.getStringCourseName.trim;vec.addString.valueOfrs
3.getIntCreaditHour;vec.addrs
3.getStringExpr1;vec.addString.valueOfrs
3.getIntExpr2;vec.addString.valueOfrs
3.getIntExpr3;model.addRowvec;}rs
3.close;}catchExceptione{e.printStackTrace;}jScrollPane
1.getHorizontalScrollBar;jTable
1.setGridColorColor.blue;jTable
1.setDragEnabledtrue;jTable
1.setSelectionForegroundColor.red;jTable
1.setSelectionBackgroundColor.green;jTable
1.setSelectionModeListSelectionModel.SINGLE_SELECTION;jTable
1.setRowSelectionAllowedtrue;jTable
1.setShowVerticalLinestrue;}publicvoidgetM{intRow=jTable
1.getSelectedRow;Stringfind1find2;ifintRow==-1{jOptionPane
1.showMessageDialogthis请选择要选修的课程!提示JOptionPane.INFORMATION_MESSAGEnull;return;}try{find1=model.getValueAtintRow
4.toString.trim;find2=model.getValueAtintRow
5.toString.trim;fd[i]=find1;CS[i]=find2;System.out.printlnfd[i];System.out.printlnCS[i];}catchExceptione{e.getMessage;}}publicvoidxuanKe{Object[][]arrTmp={};//设定表格的字段Vectorvec=newVector11;model=newDefaultTableModelarrTmparrField;jTable2=newJTablemodel;jScrollPane
2.getViewport.addjTable2null;try{j=0;whilej=i{ResultSetrs3=con.getRsselect*fromstuchoosewhereExpr2=+Integer.valueOffd[j]+andExpr3=+Integer.valueOfCS[j]+;System.out.printlnselect*fromstuchoosewhereExpr2=+Integer.valueOffd[j]+andExpr3=+Integer.valueOfCS[j]+;whilers
3.next{vec=newVector;vec.addString.valueOfrs
3.getIntCourseId;vec.addrs
3.getStringCourseName.trim;vec.addString.valueOfrs
3.getIntCreaditHour;vec.addrs
3.getStringExpr
1.trim;vec.addString.valueOfrs
3.getIntExpr2;vec.addString.valueOfrs
3.getIntExpr3;model.addRowvec;}j++;}}catchExceptionce{ce.getMessage;}jScrollPane
2.getHorizontalScrollBar;jTable
2.setGridColorColor.blue;jTable
2.setDragEnabledtrue;jTable
2.setSelectionForegroundColor.red;jTable
2.setSelectionBackgroundColor.green;jTable
2.setSelectionModeListSelectionModel.SINGLE_SELECTION;jTable
2.setRowSelectionAllowedtrue;jTable
2.setShowVerticalLinestrue;}publicvoidjButton1_actionPerformedActionEvente{getM;xuanKe;i++;ifi=2{jOptionPane
1.showMessageDialogthis最多只允许选择两门课程!提示JOptionPane.INFORMATION_MESSAGEnull;return;}elseifi==1{ifCS
[0]==CS
[1]{jOptionPane
1.showMessageDialogthis请选择不同的课程!提示JOptionPane.INFORMATION_MESSAGEnull;return;}else{xuanKe;i++;return;}}else{xuanKe;i++;}}}classChoose_jButton1_actionAdapterimplementsActionListener{privateChooseadaptee;Choose_jButton1_actionAdapterChooseadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}
7.7班级管理子Z系统
7.
7.1班级管理子系统功能描述班级管理子系统对各专业所属班级进行管理,包括班级的录入和管理两部分用户录入新的班级,并对已有班级信息进行管理录入界面可以录入新的班级信息,用户需输入班级信息并选择班级所在系部和专业,点击提交完成录入图7-7班级信息录入界面班级信息管理界面由两部分组成查询信息输入部分和查询信息显示部分其中,查询信息输入部分提供了三种不同的查询方式按系部查询、按专业查询、按名称查询用户需先选择查询方式,然后设置查询条件,点击查询按钮实现查询操作查询出的信息将显示在界面下半部分的列表中用户可以选择列表中的信息进行修改或删除操作图7-8班级查询界面
7.
7.2班级管理子系统详细代码AddClassFrame.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjava.sql.ResultSet;importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.*;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;publicclassAddClassFrameextendsJFrame{JPanelcontentPane;JLabeljLabel1=newJLabel;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JTextFieldjTextField1=newJTextField;JButtonjButton1=newJButton;JButtonjButton2=newJButton;JOptionPanejOptionPane1=newJOptionPane;JComboBoxjComboBox1=newJComboBox;intxi;dbConnconn=newdbConn;JLabeljLabel4=newJLabel;JComboBoxjComboBox2=newJComboBox;publicAddClassFrame{try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{contentPane=JPanelgetContentPane;contentPane.setLayoutnull;setSizenewDimension465280;setTitle班级录入;jLabel
1.setFontnewjava.awt.FontDialogFont.BOLD20;jLabel
1.setText班级信息录入;jLabel
1.setBoundsnewRectangle1362021225;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
2.setText班级名称:;jLabel
2.setBoundsnewRectangle80809020;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
3.setText所属系部:;jLabel
3.setBoundsnewRectangle801309020;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
1.setBorderBorderFactory.createLoweredBevelBorder;jTextField
1.setBoundsnewRectangle1808018025;jButton
1.setBoundsnewRectangle1022239629;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
1.setBorderBorderFactory.createRaisedBevelBorder;jButton
1.setText提交;jButton
1.addActionListenernewAddClassFrame_jButton1_actionAdapterthis;jButton
2.setBoundsnewRectangle2652219631;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
2.setBorderBorderFactory.createRaisedBevelBorder;jButton
2.setToolTipText;jButton
2.setText退出;jButton
2.addActionListenernewAddClassFrame_jButton2_actionAdapterthis;jOptionPane
1.setBoundsnewRectangle10625826290;jOptionPane
1.setLayoutnull;jComboBox
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
1.setBoundsnewRectangle18013018025;jComboBox
1.addActionListenernewAddClassFrame_jComboBox1_actionAdapterthis;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
4.setText所属专业;jLabel
4.setBoundsnewRectangle801809020;jComboBox
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
2.setEditabletrue;jComboBox
2.setBoundsnewRectangle18018018025;contentPane.addjLabel1;contentPane.addjOptionPane1;contentPane.addjComboBox1;contentPane.addjLabel3;contentPane.addjLabel2;contentPane.addjTextField1;contentPane.addjLabel4;contentPane.addjComboBox2;contentPane.addjButton2;contentPane.addjButton1;jComboBox
1.addItem请选择系部;try{ResultSetrs=conn.getRsselect*fromDept;whilers.next{Stringxibu=rs.getStringDeptName;jComboBox
1.addItemxibu;}}catchExceptionce{System.out.println+++++++++ce;}jComboBox
2.setEnabledfalse;}publicvoidzhuanye{jComboBox
2.removeAllItems;jComboBox
2.addItem请选择专业;try{ResultSetrs=conn.getRsselect*fromdswhereDeptName=+String.valueOfjComboBox
1.getSelectedItem+;whilers.next{Stringzhy=rs.getStringSpecialityName;jComboBox
2.addItemzhy;}}catchExceptionce{System.out.println+++++++++ce;}}publicvoidxibu{Stringsel=String.valueOfjComboBox
2.getSelectedItem;try{ResultSetrs=conn.getRsselect*fromSpecialitywhereSpecialityName=+sel+;whilers.next{xi=rs.getIntSpecialityId;}}catchExceptionce{System.out.println+++++++++ce;}}publicvoidjButton2_actionPerformedActionEvente{this.dispose;}publicvoidjButton1_actionPerformedActionEvente{ifthis.jTextField
1.getText.trim.length==0{jOptionPane
1.showMessageDialogthis班级名称不能为空提示JOptionPane.INFORMATION_MESSAGEnull;}elseifjComboBox
1.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择所属系部!提示JOptionPane.INFORMATION_MESSAGEnull;}elseifjComboBox
2.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择所属专业!提示JOptionPane.INFORMATION_MESSAGEnull;}else{xibu;try{booleanclassname=false;ResultSetrs=conn.getRsselectClassNamefromClass;whilers.next{ifjTextField
1.getText.trim.equalsrs.getStringClassName.trim{classname=true;}}ifclassname{jOptionPane
1.showMessageDialogthis该班级名称已经存在!提示JOptionPane.INFORMATION_MESSAGEnull;}else{conn.getUpdateinsertintoClassClassNameSpecialityIdvalues+jTextField
1.getText.trim++xi+;jOptionPane
1.showMessageDialogthis恭喜您班级信息注册成功!提示JOptionPane.INFORMATION_MESSAGEnull;}}catchExceptionce{System.out.printlnce;}}}publicvoidjComboBox1_actionPerformedActionEvente{zhuanye;jComboBox
2.setEnabledtrue;}}classAddClassFrame_jComboBox1_actionAdapterimplementsActionListener{privateAddClassFrameadaptee;AddClassFrame_jComboBox1_actionAdapterAddClassFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jComboBox1_actionPerformede;}}classAddClassFrame_jButton1_actionAdapterimplementsActionListener{privateAddClassFrameadaptee;AddClassFrame_jButton1_actionAdapterAddClassFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classAddClassFrame_jButton2_actionAdapterimplementsActionListener{privateAddClassFrameadaptee;AddClassFrame_jButton2_actionAdapterAddClassFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}ClassManager.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.*;importjavax.swing.JFrame;importcom.borland.jbcl.layout.XYLayout;importcom.borland.jbcl.layout.*;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;importjava.sql.ResultSet;importjavax.swing.table.DefaultTableModel;importjava.util.*;publicclassClassManagerextendsJFrame{XYLayoutxYLayout1=newXYLayout;JLabeljLabel1=newJLabel;JPaneljPanel1=newJPanel;XYLayoutxYLayout2=newXYLayout;JRadioButtonjRadioButton1=newJRadioButton;JRadioButtonjRadioButton2=newJRadioButton;JRadioButtonjRadioButton3=newJRadioButton;ButtonGroupbuttonGroup1=newButtonGroup;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;JComboBoxjComboBox1=newJComboBox;JComboBoxjComboBox2=newJComboBox;JTextFieldjTextField1=newJTextField;JLabeljLabel5=newJLabel;JComboBoxjComboBox3=newJComboBox;JButtonjButton1=newJButton;JButtonjButton2=newJButton;JButtonjButton3=newJButton;JScrollPanejScrollPane1=newJScrollPane;JTablejTable1=newJTable;JButtonjButton4=newJButton;JButtonjButton5=newJButton;JButtonjButton6=newJButton;dbConnconn=newdbConn;Object[][]arrData={};String[]arrField={班级编号系部名称专业名称班级名称};JOptionPanejOptionPane1=newJOptionPane;DefaultTableModelmodel=newDefaultTableModel;Stringsqlfind;intintRow;publicClassManager{try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{getContentPane.setLayoutxYLayout1;xYLayout
1.setWidth530;xYLayout
1.setHeight540;jLabel
1.setFontnewjava.awt.Font黑体Font.PLAIN20;jLabel
1.setText班级信息管理;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
2.setText请选择系部;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
3.setText请选择系部;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
4.setText请输入班级;jComboBox
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
2.setEditablefalse;jComboBox
2.addActionListenernewClassManager_jComboBox2_actionAdapterthis;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jRadioButton
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jRadioButton
1.setText按系部查询;jRadioButton
1.addItemListenernewClassManager_jRadioButton1_itemAdapterthis;jRadioButton
1.addActionListenernewClassManager_jRadioButton1_actionAdapterthis;jPanel
1.setBorderBorderFactory.createEtchedBorder;jPanel
1.setLayoutxYLayout2;jRadioButton
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jRadioButton
2.setText按专业查询;jRadioButton
2.addItemListenernewClassManager_jRadioButton2_itemAdapterthis;jRadioButton
2.addActionListenernewClassManager_jRadioButton2_actionAdapterthis;jRadioButton
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jRadioButton
3.setText按名称查询;jRadioButton
3.addItemListenernewClassManager_jRadioButton3_itemAdapterthis;jRadioButton
3.addActionListenernewClassManager_jRadioButton3_actionAdapterthis;jLabel
5.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
5.setText请选择专业;jComboBox
3.setEnabledfalse;jComboBox
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
1.setText查询;jButton
1.addActionListenernewClassManager_jButton1_actionAdapterthis;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
2.setText查询;jButton
2.addActionListenernewClassManager_jButton2_actionAdapterthis;jButton
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
3.setText查询;jButton
3.addActionListenernewClassManager_jButton3_actionAdapterthis;jScrollPane
1.setBorderBorderFactory.createEtchedBorder;jButton
4.setFontnewjava.awt.FontDialogFont.PLAIN18;jButton
4.setText修改;jButton
4.addActionListenernewClassManager_jButton4_actionAdapterthis;jButton
5.setFontnewjava.awt.FontDialogFont.PLAIN18;jButton
5.setText删除;jButton
5.addActionListenernewClassManager_jButton5_actionAdapterthis;jButton
6.setFontnewjava.awt.FontDialogFont.PLAIN18;jButton
6.setText退出;jButton
6.addActionListenernewClassManager_jButton6_actionAdapterthis;jPanel
1.addjRadioButton2newXYConstraints205012525;jPanel
1.addjRadioButton3newXYConstraints2013012525;jPanel
1.addjRadioButton1newXYConstraints201012525;buttonGroup
1.addjRadioButton1;buttonGroup
1.addjRadioButton2;buttonGroup
1.addjRadioButton3;jPanel
1.addjLabel3newXYConstraints1505010025;jPanel
1.addjLabel4newXYConstraints15013010025;jPanel
1.addjLabel2newXYConstraints1501010025;jPanel
1.addjComboBox1newXYConstraints2601013025;jPanel
1.addjComboBox2newXYConstraints2605013025;jPanel
1.addjTextField1newXYConstraints26013013025;jPanel
1.addjLabel5newXYConstraints1509010025;jPanel
1.addjComboBox3newXYConstraints2609013025;this.getContentPane.addjLabel1newXYConstraints1771417739;this.getContentPane.addjPanel1newXYConstraints1059510170;jPanel
1.addjButton1newXYConstraints410108025;jPanel
1.addjButton2newXYConstraints410908025;jPanel
1.addjButton3newXYConstraints4101308025;jScrollPane
1.getViewport.addjTable1;this.getContentPane.addjScrollPane1newXYConstraints10239510225;this.getContentPane.addjButton4newXYConstraints1004809035;this.getContentPane.addjButton5newXYConstraints2204809035;this.getContentPane.addjButton6newXYConstraints3404809035;jComboBox
1.addItem请选择系部;jComboBox
2.addItem请选择系部;try{ResultSetrs=conn.getRsselect*fromDept;whilers.next{Stringxibu=rs.getStringDeptName;jComboBox
1.addItemxibu;jComboBox
2.addItemxibu;}}catchExceptionce{System.out.println+++++++++ce;}jComboBox
1.setEnabledfalse;jComboBox
2.setEnabledfalse;jComboBox
3.setEnabledfalse;jTextField
1.setEditablefalse;jButton
1.setEnabledfalse;jButton
2.setEnabledfalse;jButton
3.setEnabledfalse;sql=select*fromdeptS;UpdateRecord;}publicvoidjRadioButton1_actionPerformedActionEvente{jComboBox
1.setEnabledtrue;jButton
1.setEnabledtrue;}publicvoidjRadioButton2_actionPerformedActionEvente{jComboBox
2.setEnabledtrue;jButton
2.setEnabledtrue;}publicvoidjRadioButton3_actionPerformedActionEvente{jTextField
1.setEditabletrue;jButton
3.setEnabledtrue;}publicvoidjRadioButton1_itemStateChangedItemEvente{jComboBox
1.setEnabledfalse;jButton
1.setEnabledfalse;}publicvoidjRadioButton2_itemStateChangedItemEvente{jComboBox
2.setEnabledfalse;jComboBox
3.setEnabledfalse;jButton
2.setEnabledfalse;}publicvoidjRadioButton3_itemStateChangedItemEvente{jTextField
1.setEditablefalse;jButton
3.setEnabledfalse;}publicvoidjComboBox2_actionPerformedActionEvente{jComboBox
3.setEnabledtrue;jcb;}publicvoidjButton1_actionPerformedActionEvente{sql=select*fromdeptSwhereDeptName=+String.valueOfjComboBox
1.getSelectedItem+;UpdateRecord;}publicvoidjButton2_actionPerformedActionEvente{sql=select*fromdeptSwhereSpecialityName=+String.valueOfjComboBox
3.getSelectedItem+;UpdateRecord;}publicvoidjButton3_actionPerformedActionEvente{sql=select*fromdeptSwhereClassName=+jTextField
1.getText+;UpdateRecord;}publicvoidjButton4_actionPerformedActionEvente{getM;ifintRow==-1{jOptionPane
1.showMessageDialogthis请选择要修改的班级!提示JOptionPane.INFORMATION_MESSAGEnull;}else{ClassUsiadd=newClassUfind;siadd.setLocation400200;siadd.setSize465310;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;this.dispose;}}publicvoidjButton5_actionPerformedActionEvente{getM;ifintRow==-1{jOptionPane
1.showMessageDialogthis请选择要删除的班级!提示JOptionPane.INFORMATION_MESSAGEnull;}try{conn.getUpdatedeletefromClasswhereClassName=+find+;jOptionPane
1.showMessageDialogthis删除成功!提示JOptionPane.INFORMATION_MESSAGEnull;}catchExceptionce{System.out.printlnce.getMessage;}UpdateRecord;}publicvoidjButton6_actionPerformedActionEvente{this.dispose;}publicvoidjcb{jComboBox
3.removeAllItems;jComboBox
3.addItem请选择专业;try{ResultSetrs=conn.getRsselect*fromdswhereDeptName=+String.valueOfjComboBox
2.getSelectedItem+;whilers.next{Stringzhy=rs.getStringSpecialityName;jComboBox
3.addItemzhy;}rs.close;}catchExceptionce{System.out.println+++++++++ce;}}publicvoidUpdateRecord{Object[][]arrTmp={};//设定表格的字段Vectorvec=newVector11;model=newDefaultTableModelarrTmparrField;jTable1=newJTablemodel;jScrollPane
1.getViewport.addjTable1null;try{ResultSetrs3=conn.getRssql;whilers
3.next{vec=newVector;vec.addString.valueOfrs
3.getIntClassId;vec.addrs
3.getStringDeptName.trim;vec.addrs
3.getStringSpecialityName;vec.addrs
3.getStringClassName;model.addRowvec;}rs
3.close;}catchExceptione{System.out.printlne.getMessage;}jScrollPane
1.getHorizontalScrollBar;jTable
1.setGridColorColor.blue;jTable
1.setDragEnabledtrue;jTable
1.setSelectionForegroundColor.red;jTable
1.setSelectionBackgroundColor.green;jTable
1.setSelectionModeListSelectionModel.SINGLE_SELECTION;jTable
1.setRowSelectionAllowedtrue;jTable
1.setShowVerticalLinestrue;}publicvoidgetM{intRow=jTable
1.getSelectedRow;ifintRow==-1{return;}try{find=model.getValueAtintRow
0.toString.trim;}catchExceptione{e.printStackTrace;}}}classClassManager_jButton6_actionAdapterimplementsActionListener{privateClassManageradaptee;ClassManager_jButton6_actionAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton6_actionPerformede;}}classClassManager_jButton5_actionAdapterimplementsActionListener{privateClassManageradaptee;ClassManager_jButton5_actionAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton5_actionPerformede;}}classClassManager_jButton4_actionAdapterimplementsActionListener{privateClassManageradaptee;ClassManager_jButton4_actionAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton4_actionPerformede;}}classClassManager_jButton3_actionAdapterimplementsActionListener{privateClassManageradaptee;ClassManager_jButton3_actionAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton3_actionPerformede;}}classClassManager_jButton2_actionAdapterimplementsActionListener{privateClassManageradaptee;ClassManager_jButton2_actionAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}classClassManager_jButton1_actionAdapterimplementsActionListener{privateClassManageradaptee;ClassManager_jButton1_actionAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classClassManager_jRadioButton1_actionAdapterimplementsActionListener{privateClassManageradaptee;ClassManager_jRadioButton1_actionAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jRadioButton1_actionPerformede;}}classClassManager_jRadioButton1_itemAdapterimplementsItemListener{privateClassManageradaptee;ClassManager_jRadioButton1_itemAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoiditemStateChangedItemEvente{adaptee.jRadioButton1_itemStateChangede;}}classClassManager_jRadioButton2_actionAdapterimplementsActionListener{privateClassManageradaptee;ClassManager_jRadioButton2_actionAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jRadioButton2_actionPerformede;}}classClassManager_jRadioButton2_itemAdapterimplementsItemListener{privateClassManageradaptee;ClassManager_jRadioButton2_itemAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoiditemStateChangedItemEvente{adaptee.jRadioButton2_itemStateChangede;}}classClassManager_jRadioButton3_actionAdapterimplementsActionListener{privateClassManageradaptee;ClassManager_jRadioButton3_actionAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jRadioButton3_actionPerformede;}}classClassManager_jRadioButton3_itemAdapterimplementsItemListener{privateClassManageradaptee;ClassManager_jRadioButton3_itemAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoiditemStateChangedItemEvente{adaptee.jRadioButton3_itemStateChangede;}}classClassManager_jComboBox2_actionAdapterimplementsActionListener{privateClassManageradaptee;ClassManager_jComboBox2_actionAdapterClassManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jComboBox2_actionPerformede;}}ClassU.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjava.sql.ResultSet;importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.*;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;publicclassClassUextendsJFrame{JPanelcontentPane;JLabeljLabel1=newJLabel;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JTextFieldjTextField1=newJTextField;JButtonjButton1=newJButton;JButtonjButton2=newJButton;JOptionPanejOptionPane1=newJOptionPane;JComboBoxjComboBox1=newJComboBox;intxi;dbConnconn=newdbConn;JLabeljLabel4=newJLabel;JComboBoxjComboBox2=newJComboBox;Stringfind;publicClassUStringfind{this.find=find;try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{contentPane=JPanelgetContentPane;contentPane.setLayoutnull;setSizenewDimension465280;setTitle班级修改;jLabel
1.setFontnewjava.awt.FontDialogFont.BOLD20;jLabel
1.setText班级信息修改;jLabel
1.setBoundsnewRectangle1362021225;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
2.setText班级名称:;jLabel
2.setBoundsnewRectangle80809020;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
3.setText所属系部:;jLabel
3.setBoundsnewRectangle801309020;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
1.setBorderBorderFactory.createLoweredBevelBorder;jTextField
1.setBoundsnewRectangle1808018025;jButton
1.setBoundsnewRectangle1022239629;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
1.setBorderBorderFactory.createRaisedBevelBorder;jButton
1.setText修改;jButton
1.addActionListenernewClassU_jButton1_actionAdapterthis;jButton
2.setBoundsnewRectangle2652219631;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
2.setBorderBorderFactory.createRaisedBevelBorder;jButton
2.setToolTipText;jButton
2.setText退出;jButton
2.addActionListenernewClassU_jButton2_actionAdapterthis;jOptionPane
1.setBoundsnewRectangle10625826290;jOptionPane
1.setLayoutnull;jComboBox
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
1.setBoundsnewRectangle18013018025;jComboBox
1.addActionListenernewClassU_jComboBox1_actionAdapterthis;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
4.setText所属专业;jLabel
4.setBoundsnewRectangle801809020;jComboBox
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
2.setEditabletrue;jComboBox
2.setBoundsnewRectangle18018018025;contentPane.addjLabel1;contentPane.addjOptionPane1;contentPane.addjComboBox1;contentPane.addjLabel3;contentPane.addjLabel2;contentPane.addjTextField1;contentPane.addjLabel4;contentPane.addjComboBox2;contentPane.addjButton2;contentPane.addjButton1;jComboBox
1.addItem请选择系部;try{ResultSetrs=conn.getRsselect*fromDept;whilers.next{Stringxibu=rs.getStringDeptName;jComboBox
1.addItemxibu;}}catchExceptionce{System.out.println+++++++++ce;}jComboBox
2.setEnabledfalse;xianshi;}publicvoidzhuanye{jComboBox
2.removeAllItems;jComboBox
2.addItem请选择专业;try{ResultSetrs=conn.getRsselect*fromdswhereDeptName=+String.valueOfjComboBox
1.getSelectedItem+;whilers.next{Stringzhy=rs.getStringSpecialityName;jComboBox
2.addItemzhy;}}catchExceptionce{System.out.println+++++++++ce;}}publicvoidxibu{Stringsel=String.valueOfjComboBox
2.getSelectedItem;try{ResultSetrs=conn.getRsselect*fromSpecialitywhereSpecialityName=+sel+;whilers.next{xi=rs.getIntSpecialityId;}rs.close;}catchExceptionce{System.out.println+++++++++ce;}}publicvoidjButton2_actionPerformedActionEvente{this.dispose;}publicvoidjButton1_actionPerformedActionEvente{ifthis.jTextField
1.getText.trim.length==0{jOptionPane
1.showMessageDialogthis班级名称不能为空提示JOptionPane.INFORMATION_MESSAGEnull;}elseifjComboBox
1.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择所属系部!提示JOptionPane.INFORMATION_MESSAGEnull;}elseifjComboBox
2.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择所属专业!提示JOptionPane.INFORMATION_MESSAGEnull;}else{xibu;try{booleanclassname=false;ResultSetrs=conn.getRsselectClassNamefromClass;whilers.next{ifjTextField
1.getText.trim.equalsrs.getStringClassName.trim{classname=true;}}ifclassname{jOptionPane
1.showMessageDialogthis该班级名称已经存在!提示JOptionPane.INFORMATION_MESSAGEnull;}else{conn.getUpdateupdateClasssetClassName=+jTextField
1.getText.trim+SpecialityId=+xi+whereClassId=+Integer.valueOffind+;jOptionPane
1.showMessageDialogthis恭喜您班级信息修改成功!提示JOptionPane.INFORMATION_MESSAGEnull;}}catchExceptionce{System.out.printlnce;}}}publicvoidjComboBox1_actionPerformedActionEvente{zhuanye;jComboBox
2.setEnabledtrue;}publicvoidxianshi{iffind==nullreturn;else{jComboBox
2.setEnabledtrue;try{ResultSetrs=conn.getRsselect*fromdeptSwhereClassId=+Integer.valueOffind+;whilers.next{jComboBox
1.setSelectedItemString.valueOfrs.getString2;jComboBox
2.setSelectedItemString.valueOfrs.getString3;jTextField
1.setTextrs.getString
4.trim;}rs.close;}catchExceptionce{System.out.println+++++++++ce;}}}}classClassU_jComboBox1_actionAdapterimplementsActionListener{privateClassUadaptee;ClassU_jComboBox1_actionAdapterClassUadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jComboBox1_actionPerformede;}}classClassU_jButton1_actionAdapterimplementsActionListener{privateClassUadaptee;ClassU_jButton1_actionAdapterClassUadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classClassU_jButton2_actionAdapterimplementsActionListener{privateClassUadaptee;ClassU_jButton2_actionAdapterClassUadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}
7.8课程管理子系统
7.
8.1课程管理子系统功能描述课程管理子系统对课程信息进行管理,能够录入课程的相关信息,并指定该门课程的任课教师,以供学生选择课程管理子系统由课程录入、课程修改和课程查询三部分组成课程录入界面由文本框、下拉菜单和按钮组成用户输入课程名称和该课程的学分,并根据所属专业来选择该门课程的任课教师,提交到数据库课程修改界面相关控件布局与课程录入界面相同,用户根据需要修改课程信息后点击修改按钮完成修改操作图7-9课程录入界面图7-10课程修改界面课程管理界面由两部分组成查询信息输入部分和查询信息显示部分其中,查询信息输入部分提供了三种不同的查询方式按课程名称查询、按专业查询、按学分查询用户需先选择查询方式,然后设置查询条件,点击查询按钮实现查询操作查询出的信息将显示在界面下半部分的列表中用户可以选择列表中的信息进行修改或删除操作图7-11课程查询界面
7.
8.2课程管理子系统详细代码KeChengAddFrame.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjava.sql.ResultSet;importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.*;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;publicclassKeChengAddFrameextendsJFrame{JPanelcontentPane;JLabeljLabel1=newJLabel;intFSspidFC;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;StringIS;JTextFieldjTextField2=newJTextField;JTextFieldjTextField3=newJTextField;JLabeljLabel5=newJLabel;JButtonjButton1=newJButton;JButtonjButton2=newJButton;JOptionPanejOptionPane1=newJOptionPane;JLabeljLabel6=newJLabel;JComboBoxjComboBox1=newJComboBox;dbConnsta=newdbConn;JLabeljLabel2=newJLabel;JComboBoxjComboBox2=newJComboBox;publicKeChengAddFrame{try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{contentPane=JPanelgetContentPane;contentPane.setLayoutnull;setSizenewDimension482300;setTitle课程录入;jLabel
1.setFontnewjava.awt.FontDialogFont.PLAIN20;jLabel
1.setText课程录入;jLabel
1.setBoundsnewRectangle1781712625;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
3.setText课程名称;jLabel
3.setBoundsnewRectangle75678121;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
4.setText学分;jLabel
4.setBoundsnewRectangle751877721;jTextField
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
2.setBorderBorderFactory.createLoweredBevelBorder;jTextField
2.setText;jTextField
2.setBoundsnewRectangle1906718426;jTextField
3.setFontnewjava.awt.FontDialogFont.PLAIN18;jTextField
3.setBorderBorderFactory.createLoweredBevelBorder;jTextField
3.setText;jTextField
3.setBoundsnewRectangle1901879426;jLabel
5.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
5.setForegroundColor.red;jLabel
5.setText学分;jLabel
5.setBoundsnewRectangle3011874224;jButton
1.setBoundsnewRectangle1032409029;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
1.setBorderBorderFactory.createRaisedBevelBorder;jButton
1.setText提交;jButton
1.addActionListenernewKeChengAddFrame_jButton1_actionAdapterthis;jButton
2.setBoundsnewRectangle2772409029;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
2.setBorderBorderFactory.createRaisedBevelBorder;jButton
2.setText退出;jButton
2.addActionListenernewKeChengAddFrame_jButton2_actionAdapterthis;jOptionPane
1.setBoundsnewRectangle7526126290;jOptionPane
1.setLayoutnull;jLabel
6.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
6.setText所属专业;jLabel
6.setBoundsnewRectangle751078221;jComboBox
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
1.setBoundsnewRectangle19010716025;jComboBox
1.addActionListenernewKeChengAddFrame_jComboBox1_actionAdapterthis;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
2.setText任课教师;jLabel
2.setBoundsnewRectangle751478125;jComboBox
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
2.setBoundsnewRectangle19014716025;contentPane.addjLabel1;contentPane.addjButton1;contentPane.addjButton2;contentPane.addjOptionPane1;contentPane.addjTextField3;contentPane.addjLabel5;contentPane.addjLabel4;contentPane.addjLabel3;contentPane.addjTextField2;contentPane.addjComboBox1;contentPane.addjLabel6;contentPane.addjLabel2;contentPane.addjComboBox2;jComboBox
1.addItem请选择;try{ResultSetrs=sta.getRsselect*fromSpeciality;whilers.next{Stringxibu=rs.getStringSpecialityName;jComboBox
1.addItemxibu;}rs.close;}catchExceptionce{System.out.println+++++++++ce;}jComboBox
2.setEnabledfalse;}publicvoidFindS{try{ResultSetrs=sta.getRsselect*fromSpecialitywhereSpecialityName=+String.valueOfjComboBox
1.getSelectedItem+;whilers.next{FS=rs.getIntSpecialityId;}rs.close;}catchExceptionce{System.out.printlnFS+ce;}}publicvoidFindC{try{ResultSetrs=sta.getRsselect*fromCoursewhereCourseName=+jTextField
2.getText.trim+;whilers.next{FC=rs.getIntCourseId;}sta.getUpdateinsertintoCourseSpecialityCourseIdSpecialityIdvalues+FC++FS+;}catchExceptionce{System.out.printlnFC+ce;}}publicvoidInS{try{ResultSetrs=sta.getRsselect*fromTeacherwhereRealName=+String.valueOfjComboBox
2.getSelectedItem+;whilers.next{IS=rs.getStringUserId;}rs.close;sta.getUpdateinsertintoCourseTeacherCourseIdUserIdvalues+FC++IS+;}catchExceptionce{System.out.printlnIS+ce;}}publicvoidInC{ifjTextField
2.getText.length==0{jOptionPane
1.showMessageDialogthis课程名称不能为空!提示JOptionPane.INFORMATION_MESSAGEnull;}elseifjComboBox
1.getSelectedIndex==0{jOptionPane
1.showMessageDialogthis请选择课程所属系部!提示JOptionPane.INFORMATION_MESSAGEnull;}elseifjTextField
3.getText.length==0{jOptionPane
1.showMessageDialogthis课时名称不能为空!提示JOptionPane.INFORMATION_MESSAGEnull;}else{try{booleanname=false;ResultSetrs=sta.getRsselectCourseNamefromCourse;whilers.next{ifjTextField
2.getText.trim.equalsrs.getStringCourseName.trim{name=true;}}ifname{jOptionPane
1.showMessageDialogthis课程名称已经存在!提示JOptionPane.INFORMATION_MESSAGEnull;}else{sta.getUpdateinsertintoCourseCourseNameCreaditHourvalues+jTextField
2.getText.trim++Integer.valueOfjTextField
3.getText.trim+;jOptionPane
1.showMessageDialogthis课程信息提交成功!提示JOptionPane.INFORMATION_MESSAGEnull;}rs.close;}catchExceptionce{System.out.println--------+ce;}}}publicvoidjButton1_actionPerformedActionEvente{InC;FindS;FindC;InS;}publicvoidjButton2_actionPerformedActionEvente{this.dispose;}publicvoidtchoose{jComboBox
2.removeAllItems;jComboBox
2.setEnabledtrue;jComboBox
2.addItem请选择;try{ResultSetrs=sta.getRsselect*fromstwhereSpecialityName=+String.valueOfjComboBox
1.getSelectedItem+;whilers.next{Stringxibu=rs.getStringRealName;jComboBox
2.addItemxibu;}rs.close;}catchExceptionce{System.out.println+++++++++ce;}}publicvoidjComboBox1_actionPerformedActionEvente{tchoose;}}classKeChengAddFrame_jComboBox1_actionAdapterimplementsActionListener{privateKeChengAddFrameadaptee;KeChengAddFrame_jComboBox1_actionAdapterKeChengAddFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jComboBox1_actionPerformede;}}classKeChengAddFrame_jButton1_actionAdapterimplementsActionListener{privateKeChengAddFrameadaptee;KeChengAddFrame_jButton1_actionAdapterKeChengAddFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classKeChengAddFrame_jButton2_actionAdapterimplementsActionListener{privateKeChengAddFrameadaptee;KeChengAddFrame_jButton2_actionAdapterKeChengAddFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}KeChengManager.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Font;importjavax.swing.JFrame;importcom.borland.jbcl.layout.XYLayout;importcom.borland.jbcl.layout.*;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.JComboBox;importjavax.swing.JButton;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.ResultSet;importjavax.swing.*;publicclassKeChengManagerextendsJFrame{XYLayoutxYLayout1=newXYLayout;JLabeljLabel1=newJLabel;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;JLabeljLabel5=newJLabel;JTextFieldjTextField1=newJTextField;JComboBoxjComboBox1=newJComboBox;JComboBoxjComboBox2=newJComboBox;JTextFieldjTextField2=newJTextField;JButtonjButton1=newJButton;JButtonjButton3=newJButton;dbConnsta=newdbConn;JOptionPanejOptionPane1=newJOptionPane;Stringkefind;intcsid;publicKeChengManagerStringfind{kefind=find;try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{getContentPane.setLayoutxYLayout1;xYLayout
1.setWidth500;xYLayout
1.setHeight350;jLabel
1.setFontnewjava.awt.Font新宋体Font.BOLD20;jLabel
1.setText课程修改;jButton
3.addActionListenernewKeChengManager_jButton3_actionAdapterthis;jButton
1.addActionListenernewKeChengManager_jButton1_actionAdapterthis;jTextField
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jComboBox
1.addActionListenernewKeChengManager_jComboBox1_actionAdapterthis;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
3.setText退出;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
1.setText修改;jLabel
5.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
5.setText学分;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
4.setText任课教师;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
3.setText所属专业;this.getContentPane.addjComboBox1newXYConstraints20013014030;this.getContentPane.addjComboBox2newXYConstraints20018014030;this.getContentPane.addjTextField2newXYConstraints20023014030;this.getContentPane.addjLabel2newXYConstraints85808030;this.getContentPane.addjLabel5newXYConstraints852308030;this.getContentPane.addjLabel4newXYConstraints851808030;this.getContentPane.addjLabel3newXYConstraints851308030;this.getContentPane.addjTextField1newXYConstraints2008014030;this.getContentPane.addjLabel1newXYConstraints15821-149;this.getContentPane.addjButton1newXYConstraints1302909030;this.getContentPane.addjButton3newXYConstraints2952909030;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
2.setText课程名称;this.setTitle课程修改与删除;jComboBox
1.addItem请选择;try{ResultSetrs=sta.getRsselect*fromSpeciality;whilers.next{Stringxibu=rs.getStringSpecialityName;jComboBox
1.addItemxibu;}rs.close;}catchExceptionce{System.out.println+++++++++ce;}jComboBox
2.setEnabledfalse;setF;}publicvoidsetF{ifkefind==nullreturn;else{jComboBox
2.setEnabledtrue;try{ResultSetrs=sta.getRsselect*fromCourseSwhereCourseSpecialityID=+Integer.valueOfkefind+;whilers.next{csid=rs.getInt1;jComboBox
1.setSelectedItemString.valueOfrs.getString3;jTextField
1.setTextrs.getString
4.trim;jComboBox
2.setSelectedItemString.valueOfrs.getString5;jTextField
2.setTextrs.getString
6.trim;}rs.close;}catchExceptionce{System.out.println+++++++++ce;}}}publicvoidtchoose{jComboBox
2.removeAllItems;jComboBox
2.setEnabledtrue;jComboBox
2.addItem请选择;try{ResultSetrs=sta.getRsselect*fromstwhereSpecialityName=+String.valueOfjComboBox
1.getSelectedItem+;whilers.next{Stringxibu=rs.getStringRealName;jComboBox
2.addItemxibu;}rs.close;}catchExceptionce{System.out.println+++++++++ce;}}publicvoidjButton3_actionPerformedActionEvente{this.dispose;}publicvoidjButton1_actionPerformedActionEvente{StringkeCNamezyNametNamexueFen;keCName=jTextField
1.getText.trim;zyName=String.valueOfjComboBox
1.getSelectedItem;tName=String.valueOfjComboBox
2.getSelectedItem;xueFen=jTextField
2.getText.trim;try{sta.getUpdateupdateCourseSsetSpecialityName=+zyName+CourseName=+keCName+RealName=+tName+CreaditHour=+Integer.valueOfxueFen+whereCourseSpecialityID=+csid+;jOptionPane
1.showMessageDialogthis课程修改成功!提示JOptionPane.INFORMATION_MESSAGEnull;}catchExceptiona{System.out.printlna.getMessage;}}publicvoidjComboBox1_actionPerformedActionEvente{tchoose;}}classKeChengManager_jComboBox1_actionAdapterimplementsActionListener{privateKeChengManageradaptee;KeChengManager_jComboBox1_actionAdapterKeChengManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jComboBox1_actionPerformede;}}classKeChengManager_jButton1_actionAdapterimplementsActionListener{privateKeChengManageradaptee;KeChengManager_jButton1_actionAdapterKeChengManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classKeChengManager_jButton3_actionAdapterimplementsActionListener{privateKeChengManageradaptee;KeChengManager_jButton3_actionAdapterKeChengManageradaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton3_actionPerformede;}}KeChengF.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Font;importjavax.swing.JFrame;importcom.borland.jbcl.layout.XYLayout;importcom.borland.jbcl.layout.*;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.*;importjava.sql.ResultSet;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.FocusEvent;importjava.awt.event.FocusAdapter;importjavax.swing.table.DefaultTableModel;importjava.util.*;importjava.lang.*;importjava.awt.*;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;publicclassKeChengFextendsJFrame{XYLayoutxYLayout1=newXYLayout;JLabeljLabel1=newJLabel;JPaneljPanel1=newJPanel;JScrollPanejScrollPane1=newJScrollPane;JButtonjButton1=newJButton;JButtonjButton2=newJButton;XYLayoutxYLayout2=newXYLayout;JTablejTable1=newJTable;JRadioButtonjRadioButton1=newJRadioButton;JRadioButtonjRadioButton2=newJRadioButton;JRadioButtonjRadioButton3=newJRadioButton;ButtonGroupbuttonGroup1=newButtonGroup;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;JTextFieldjTextField1=newJTextField;JButtonjButton3=newJButton;JComboBoxjComboBox1=newJComboBox;JButtonjButton4=newJButton;JTextFieldjTextField2=newJTextField;JButtonjButton5=newJButton;dbConnsta=newdbConn;Stringsql;Object[][]arrData={};String[]arrField={专业课程编号课程编号专业名称课程名称任课教师学分};DefaultTableModelmodel=newDefaultTableModel;intintRow;staticStringfind;JOptionPanejOptionPane1=newJOptionPane;JButtonjButton6=newJButton;publicKeChengF{try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{getContentPane.setLayoutxYLayout1;jLabel
1.setFontnewjava.awt.FontDialogFont.BOLD20;jLabel
1.setText课程查询;jScrollPane
1.setBorderBorderFactory.createEtchedBorder;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN18;jButton
1.setText修改;jButton
1.addActionListenernewKeChengF_jButton1_actionAdapterthis;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN18;jButton
2.setText退出;jButton
2.addActionListenernewKeChengF_jButton2_actionAdapterthis;jPanel
1.setLayoutxYLayout2;jRadioButton
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jRadioButton
1.setText按课程名查询;jRadioButton
1.addItemListenernewKeChengF_jRadioButton1_itemAdapterthis;jRadioButton
1.addActionListenernewKeChengF_jRadioButton1_actionAdapterthis;jPanel
1.setBorderBorderFactory.createEtchedBorder;xYLayout
1.setWidth550;xYLayout
1.setHeight560;jRadioButton
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jRadioButton
2.setText按专业查询;jRadioButton
2.addItemListenernewKeChengF_jRadioButton2_itemAdapterthis;jRadioButton
2.addActionListenernewKeChengF_jRadioButton2_actionAdapterthis;jRadioButton
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jRadioButton
3.setText按学分查询;jRadioButton
3.addItemListenernewKeChengF_jRadioButton3_itemAdapterthis;jRadioButton
3.addActionListenernewKeChengF_jRadioButton3_actionAdapterthis;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
2.setText请输入课程名;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
3.setText请选择专业;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN16;jLabel
4.setText请输入学分;jButton
3.setEnabledfalse;jButton
3.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
3.setText查询;jButton
3.addActionListenernewKeChengF_jButton3_actionAdapterthis;jButton
4.setEnabledfalse;jButton
4.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
4.setText查询;jButton
4.addActionListenernewKeChengF_jButton4_actionAdapterthis;jButton
5.setEnabledfalse;jButton
5.setFontnewjava.awt.FontDialogFont.PLAIN16;jButton
5.setText查询;jButton
5.addActionListenernewKeChengF_jButton5_actionAdapterthis;jTextField
1.setEnabledtrue;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
1.setEditablefalse;jComboBox
1.setEnabledfalse;jComboBox
1.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
2.setFontnewjava.awt.FontDialogFont.PLAIN16;jTextField
2.setEditablefalse;this.setTitle课程查询;jButton
6.setFontnewjava.awt.FontDialogFont.PLAIN18;jButton
6.setText删除;jScrollPane
1.getViewport.addjTable1;jPanel
1.addjRadioButton3newXYConstraints109514525;jPanel
1.addjRadioButton2newXYConstraints105514525;jPanel
1.addjRadioButton1newXYConstraints101514525;jPanel
1.addjLabel3newXYConstraints1555510025;jPanel
1.addjLabel4newXYConstraints1559510025;this.getContentPane.addjLabel1newXYConstraints2081313543;this.getContentPane.addjButton1newXYConstraints74508100-1;this.getContentPane.addjButton2newXYConstraints374508100-1;this.getContentPane.addjPanel1newXYConstraints1768515154;this.getContentPane.addjScrollPane1newXYConstraints18242515245;this.getContentPane.addjButton6newXYConstraints224508100-1;buttonGroup
1.addjRadioButton3;buttonGroup
1.addjRadioButton2;buttonGroup
1.addjRadioButton1;jPanel
1.addjLabel2newXYConstraints1551510025;jPanel
1.addjTextField1newXYConstraints2601514025;jPanel
1.addjButton3newXYConstraints420158025;jPanel
1.addjComboBox1newXYConstraints2605514025;jPanel
1.addjButton4newXYConstraints420558025;jPanel
1.addjTextField2newXYConstraints2609514025;jPanel
1.addjButton5newXYConstraints420958025;jComboBox
1.addItem请选择;try{ResultSetrs=sta.getRsselect*fromSpeciality;whilers.next{Stringxibu=rs.getStringSpecialityName;jComboBox
1.addItemxibu;}rs.close;}catchExceptionce{System.out.println+++++++++ce;}}publicvoidUpdateRecord{Object[][]arrTmp={};//设定表格的字段Vectorvec=newVector11;model=newDefaultTableModelarrTmparrField;jTable1=newJTablemodel;jScrollPane
1.getViewport.addjTable1null;try{ResultSetrs=sta.getRssql;inti=1;whilers.next{vec=newVector;vec.addString.valueOfrs.getInt1;vec.addString.valueOfrs.getInt2;vec.addrs.getString
3.trim;vec.addrs.getString
4.trim;vec.addrs.getString
5.trim;vec.addString.valueOfrs.getInt6;model.addRowvec;}rs.close;}catchExceptionce{System.out.printlnce;}jScrollPane
1.getHorizontalScrollBar;jTable
1.setGridColorColor.blue;jTable
1.setDragEnabledtrue;jTable
1.setSelectionForegroundColor.red;jTable
1.setSelectionBackgroundColor.green;jTable
1.setSelectionModeListSelectionModel.SINGLE_SELECTION;jTable
1.setRowSelectionAllowedtrue;jTable
1.setShowVerticalLinestrue;}publicvoidgetM{intRow=jTable
1.getSelectedRow;ifintRow==-1{jOptionPane
1.showMessageDialogthis请选择要修改的课程!提示JOptionPane.INFORMATION_MESSAGEnull;return;}try{find=model.getValueAtintRow
0.toString.trim;System.out.printlnfind;}catchExceptione{e.printStackTrace;}}publicvoidjRadioButton1_actionPerformedActionEvente{jTextField
1.setEditabletrue;jButton
3.setEnabledtrue;}publicvoidjRadioButton2_actionPerformedActionEvente{jComboBox
1.setEnabledtrue;jButton
4.setEnabledtrue;}publicvoidjRadioButton3_actionPerformedActionEvente{jTextField
2.setEditabletrue;jButton
5.setEnabledtrue;}publicvoidjButton2_actionPerformedActionEvente{this.dispose;}publicvoidjButton3_actionPerformedActionEvente{Stringkename=jTextField
1.getText.trim;sql=select*fromCourseSwhereCourseName=+kename+;UpdateRecord;}publicvoidjButton4_actionPerformedActionEvente{Stringkename=String.valueOfjComboBox
1.getSelectedItem;sql=select*fromCourseSwhereSpecialityName=+kename+;UpdateRecord;}publicvoidjButton5_actionPerformedActionEvente{intxuefen=Integer.parseIntjTextField
2.getText.trim;sql=select*fromCourseSwhereCreaditHour=+xuefen+;UpdateRecord;}publicvoidjButton1_actionPerformedActionEvente{getM;iffind!=null{KeChengManagersiadd=newKeChengManagerfind;siadd.setLocation400200;siadd.setSize500380;siadd.setVisibletrue;siadd.setResizablefalse;siadd.validate;this.dispose;}}publicvoidjRadioButton1_itemStateChangedItemEvente{jTextField
1.setText;jTextField
1.setEditablefalse;jButton
3.setEnabledfalse;}publicvoidjRadioButton2_itemStateChangedItemEvente{jComboBox
1.setEnabledfalse;jButton
4.setEnabledfalse;}publicvoidjRadioButton3_itemStateChangedItemEvente{jTextField
2.setText;jTextField
2.setEditablefalse;jButton
5.setEnabledfalse;}}classKeChengF_jButton1_actionAdapterimplementsActionListener{privateKeChengFadaptee;KeChengF_jButton1_actionAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classKeChengF_jButton5_actionAdapterimplementsActionListener{privateKeChengFadaptee;KeChengF_jButton5_actionAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton5_actionPerformede;}}classKeChengF_jButton4_actionAdapterimplementsActionListener{privateKeChengFadaptee;KeChengF_jButton4_actionAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton4_actionPerformede;}}classKeChengF_jRadioButton3_actionAdapterimplementsActionListener{privateKeChengFadaptee;KeChengF_jRadioButton3_actionAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jRadioButton3_actionPerformede;}}classKeChengF_jRadioButton3_itemAdapterimplementsItemListener{privateKeChengFadaptee;KeChengF_jRadioButton3_itemAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoiditemStateChangedItemEvente{adaptee.jRadioButton3_itemStateChangede;}}classKeChengF_jButton2_actionAdapterimplementsActionListener{privateKeChengFadaptee;KeChengF_jButton2_actionAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}classKeChengF_jButton3_actionAdapterimplementsActionListener{privateKeChengFadaptee;KeChengF_jButton3_actionAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton3_actionPerformede;}}classKeChengF_jRadioButton2_actionAdapterimplementsActionListener{privateKeChengFadaptee;KeChengF_jRadioButton2_actionAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jRadioButton2_actionPerformede;}}classKeChengF_jRadioButton2_itemAdapterimplementsItemListener{privateKeChengFadaptee;KeChengF_jRadioButton2_itemAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoiditemStateChangedItemEvente{adaptee.jRadioButton2_itemStateChangede;}}classKeChengF_jRadioButton1_actionAdapterimplementsActionListener{privateKeChengFadaptee;KeChengF_jRadioButton1_actionAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jRadioButton1_actionPerformede;}}classKeChengF_jRadioButton1_itemAdapterimplementsItemListener{privateKeChengFadaptee;KeChengF_jRadioButton1_itemAdapterKeChengFadaptee{this.adaptee=adaptee;}publicvoiditemStateChangedItemEvente{adaptee.jRadioButton1_itemStateChangede;}}
7.9用户管理子系统
7.9.1用户管理子系统功能描述用户管理子系统对系统的用户信息进行管理,能够根据不同的用户权限,实现系统用户的注册、密码修改、更改权限和删除用户等操作图7-12管理员添加界面图7-13用户密码修改界面图7-14删除用户界面
7.
9.2用户管理子系统详细代码AddAdminFrame.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.*;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.*;importjava.sql.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassAddAdminFrameextendsJFrame{JPanelcontentPane;Stringlevel;JLabeljLabel1=newJLabel;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;JTextFieldjTextField1=newJTextField;JPasswordFieldjPasswordField1=newJPasswordField;JPasswordFieldjPasswordField2=newJPasswordField;JButtonjButton1=newJButton;JButtonjButton2=newJButton;JOptionPanejOptionPane1=newJOptionPane;publicAddAdminFrame{try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{contentPane=JPanelgetContentPane;contentPane.setLayoutnull;setSizenewDimension469315;setTitle管理员添加;jLabel
1.setFontnewjava.awt.FontDialogFont.BOLD23;jLabel
1.setText管理员添加;jLabel
1.setBoundsnewRectangle1341219827;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
2.setText用户名:;jLabel
2.setBoundsnewRectangle90666822;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
3.setText密码:;jLabel
3.setBoundsnewRectangle901187527;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
4.setText确认密码:;jLabel
4.setBoundsnewRectangle841678929;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN13;jTextField
1.setBorderBorderFactory.createLoweredBevelBorder;jTextField
1.setBoundsnewRectangle1916515524;jPasswordField
1.setBorderBorderFactory.createLoweredBevelBorder;jPasswordField
1.setBoundsnewRectangle19111915524;jPasswordField
2.setBorderBorderFactory.createLoweredBevelBorder;jPasswordField
2.setText;jPasswordField
2.setBoundsnewRectangle19116915524;jButton
1.setBoundsnewRectangle992258925;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN13;jButton
1.setBorderBorderFactory.createRaisedBevelBorder;jButton
1.setText提交;jButton
1.addActionListenernewAddAdminFrame_jButton1_actionAdapterthis;jButton
2.setBoundsnewRectangle2672258925;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN13;jButton
2.setBorderBorderFactory.createRaisedBevelBorder;jButton
2.setText退出;jButton
2.addActionListenernewAddAdminFrame_jButton2_actionAdapterthis;jOptionPane
1.setBoundsnewRectangle023326290;jOptionPane
1.setLayoutnull;contentPane.addjLabel2;contentPane.addjLabel3;contentPane.addjLabel4;contentPane.addjTextField1;contentPane.addjPasswordField2;contentPane.addjPasswordField1;contentPane.addjButton1;contentPane.addjButton2;contentPane.addjLabel1;contentPane.addjOptionPane1;}publicvoidjButton2_actionPerformedActionEvente{this.dispose;}publicvoidjButton1_actionPerformedActionEvente{try{Class.forNamesun.jdbc.odbc.JdbcOdbcDriver;}catchExceptionce{System.out.printlnce;}booleanzhi=false;ifjTextField
1.getText.length==0{jOptionPane
1.showMessageDialogthis用户名不能为空!提示JOptionPane.INFORMATION_MESSAGEnull;}elseifjPasswordField
2.getText.trim.equalsjPasswordField
1.getText.trim{zhi=true;}else{jOptionPane
1.showMessageDialogthis密码确认错误!提示JOptionPane.INFORMATION_MESSAGEnull;}ifzhi{try{booleanname=false;Stringurl=jdbc:odbc:test;Connectioncon=DriverManager.getConnectionurl;Statements=con.createStatement;ResultSetrs=s.executeQueryselectUserIdfromUser1;whilers.next{ifjTextField
1.getText.trim.equalsrs.getString
1.trim{name=true;}}ifname{jOptionPane
1.showMessageDialogthis该用户名已经存在!提示JOptionPane.INFORMATION_MESSAGEnull;}else{s.executeUpdateinsertintoUser1UserIdUserPwdUserTypevalues+jTextField
1.getText.trim++jPasswordField
2.getText.trim+2;jOptionPane
1.showMessageDialogthis恭喜您管理员注册成功!提示JOptionPane.INFORMATION_MESSAGEnull;}rs.close;s.close;con.close;}catchExceptionce{System.out.printlnce;}}}}classAddAdminFrame_jButton1_actionAdapterimplementsActionListener{privateAddAdminFrameadaptee;AddAdminFrame_jButton1_actionAdapterAddAdminFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classAddAdminFrame_jButton2_actionAdapterimplementsActionListener{privateAddAdminFrameadaptee;AddAdminFrame_jButton2_actionAdapterAddAdminFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}MAPasswordFrameFrame.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.*;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;publicclassMAPasswordFrameFrameextendsJFrame{JPanelcontentPane;Stringlevel;Stringname;JLabeljLabel1=newJLabel;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;JLabeljLabel5=newJLabel;JTextFieldjTextField1=newJTextField;JPasswordFieldjPasswordField1=newJPasswordField;JPasswordFieldjPasswordField2=newJPasswordField;JPasswordFieldjPasswordField3=newJPasswordField;JButtonjButton1=newJButton;JButtonjButton2=newJButton;JOptionPanejOptionPane1=newJOptionPane;publicMAPasswordFrameFrameStringlevelStringname{this.level=level;this.name=name;try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{contentPane=JPanelgetContentPane;contentPane.setLayoutnull;setSizenewDimension444340;setTitle用户密码修改;jLabel
1.setFontnewjava.awt.FontDialogFont.BOLD20;jLabel
1.setText用户密码修改;jLabel
1.setBoundsnewRectangle1121520424;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
2.setText用户名:;jLabel
2.setBoundsnewRectangle80727423;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
3.setText旧密码:;jLabel
3.setBoundsnewRectangle801157423;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
4.setText新密码:;jLabel
4.setBoundsnewRectangle801597423;jLabel
5.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
5.setText确认新密码:;jLabel
5.setBoundsnewRectangle7220310123;jTextField
1.setEnabledfalse;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN13;jTextField
1.setBorderBorderFactory.createLoweredBevelBorder;jTextField
1.setBoundsnewRectangle1757215923;jPasswordField
1.setBorderBorderFactory.createLoweredBevelBorder;jPasswordField
1.setBoundsnewRectangle17511416025;jPasswordField
2.setBorderBorderFactory.createLoweredBevelBorder;jPasswordField
2.setText;jPasswordField
2.setBoundsnewRectangle17515816025;jPasswordField
3.setBorderBorderFactory.createLoweredBevelBorder;jPasswordField
3.setText;jPasswordField
3.setBoundsnewRectangle17520216025;jButton
1.setBoundsnewRectangle872548626;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN13;jButton
1.setBorderBorderFactory.createRaisedBevelBorder;jButton
1.setText提交;jButton
1.addActionListenernewMAPasswordFrameFrame_jButton1_actionAdapterthis;jButton
2.setBoundsnewRectangle2532548626;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN13;jButton
2.setBorderBorderFactory.createRaisedBevelBorder;jButton
2.setText退出;jButton
2.addActionListenernewMAPasswordFrameFrame_jButton2_actionAdapterthis;jOptionPane
1.setBoundsnewRectangle-88426290;jOptionPane
1.setLayoutnull;contentPane.addjLabel1;contentPane.addjLabel2;contentPane.addjLabel3;contentPane.addjLabel4;contentPane.addjLabel5;contentPane.addjPasswordField3;contentPane.addjPasswordField1;contentPane.addjPasswordField2;contentPane.addjButton2;contentPane.addjButton1;contentPane.addjTextField1;contentPane.addjOptionPane1;this.jTextField
1.setTextname;iflevel.equals2{jTextField
1.setEnabledtrue;}}publicvoidjButton2_actionPerformedActionEvente{this.dispose;}publicvoidjButton1_actionPerformedActionEvente{try{Class.forNamesun.jdbc.odbc.JdbcOdbcDriver;}catchExceptionce{System.out.printlnce;}booleana=false;booleanb=true;ifjTextField
1.getText.trim==null||jTextField
1.getText.trim.length==0||jTextField
1.getText.trim.length20{jOptionPane
1.showMessageDialogthis用户名不能为空且最大长度为20个字符!提示JOptionPane.INFORMATION_MESSAGEnull;}elseifjPasswordField
2.getText.trim.compareTojPasswordField
3.getText.trim!=0{jOptionPane
1.showMessageDialogthis新密码确认错误!提示JOptionPane.INFORMATION_MESSAGEnull;}else{try{Stringurl=jdbc:odbc:test;Connectioncon=DriverManager.getConnectionurl;Statements=con.createStatement;ResultSetrs=s.executeQueryselectUserIdUserPwdfromUser1;whilers.next{ifjTextField
1.getText.trim.equalsrs.getString
1.trimjPasswordField
1.getText.trim.equalsrs.getString
2.trim{a=true;b=false;break;}}ifb{jOptionPane
1.showMessageDialogthis用户名或密码错误!提示JOptionPane.INFORMATION_MESSAGEnull;}ifa{s.executeUpdateupdateUser1setUserPwd=+jPasswordField
2.getText.trim+whereUserId=+jTextField
1.getText.trim+;jOptionPane
1.showMessageDialogthis恭喜您修改成功!提示JOptionPane.INFORMATION_MESSAGEnull;jTextField
1.setText;jPasswordField
1.setText;jPasswordField
2.setText;jPasswordField
3.setText;}rs.close;s.close;con.close;}catchjava.sql.SQLExceptionce{System.out.printlnce;}}}}classMAPasswordFrameFrame_jButton1_actionAdapterimplementsActionListener{privateMAPasswordFrameFrameadaptee;MAPasswordFrameFrame_jButton1_actionAdapterMAPasswordFrameFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classMAPasswordFrameFrame_jButton2_actionAdapterimplementsActionListener{privateMAPasswordFrameFrameadaptee;MAPasswordFrameFrame_jButton2_actionAdapterMAPasswordFrameFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}QModifyFrame.java类packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.*;importjava.sql.*;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.FocusEvent;importjava.awt.event.FocusAdapter;publicclassQModifyFrameextendsJFrame{JPanelcontentPane;intrequest=0;JLabeljLabel1=newJLabel;JLabeljLabel2=newJLabel;JLabeljLabel3=newJLabel;JLabeljLabel4=newJLabel;JTextFieldjTextField1=newJTextField;JTextFieldjTextField2=newJTextField;JComboBoxjComboBox1=newJComboBox;JButtonjButton1=newJButton;JButtonjButton2=newJButton;JOptionPanejOptionPane1=newJOptionPane;publicQModifyFrame{try{jbInit;}catchExceptionexception{exception.printStackTrace;}}privatevoidjbInitthrowsException{contentPane=JPanelgetContentPane;contentPane.setLayoutnull;setSizenewDimension434314;setTitle权限管理;jLabel
1.setFontnewjava.awt.FontDialogFont.BOLD20;jLabel
1.setText权限修改;jLabel
1.setBoundsnewRectangle1451813525;jLabel
2.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
2.setText用户名:;jLabel
2.setBoundsnewRectangle79787021;jLabel
3.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
3.setText当前权限:;jLabel
3.setBoundsnewRectangle731208325;jLabel
4.setFontnewjava.awt.FontDialogFont.PLAIN18;jLabel
4.setText设置权限:;jLabel
4.setBoundsnewRectangle731698823;jTextField
1.setFontnewjava.awt.FontDialogFont.PLAIN13;jTextField
1.setBorderBorderFactory.createLoweredBevelBorder;jTextField
1.setBoundsnewRectangle1737614825;jTextField
1.addFocusListenernewQModifyFrame_jTextField1_focusAdapterthis;jTextField
2.setEnabledfalse;jTextField
2.setFontnewjava.awt.FontDialogFont.PLAIN13;jTextField
2.setForegroundColor.red;jTextField
2.setBorderBorderFactory.createLoweredBevelBorder;jTextField
2.setBoundsnewRectangle17312014924;jComboBox
1.setFontnewjava.awt.FontDialogFont.PLAIN13;jComboBox
1.setBorderBorderFactory.createLoweredBevelBorder;jComboBox
1.setBoundsnewRectangle17316911123;jButton
1.setBoundsnewRectangle1102248425;jButton
1.setFontnewjava.awt.FontDialogFont.PLAIN13;jButton
1.setBorderBorderFactory.createRaisedBevelBorder;jButton
1.setText提交;jButton
1.addActionListenernewQModifyFrame_jButton1_actionAdapterthis;jButton
2.setBoundsnewRectangle2452248425;jButton
2.setFontnewjava.awt.FontDialogFont.PLAIN13;jButton
2.setBorderBorderFactory.createRaisedBevelBorder;jButton
2.setText退出;jButton
2.addActionListenernewQModifyFrame_jButton2_actionAdapterthis;jOptionPane
1.setBoundsnewRectangle523926290;jOptionPane
1.setLayoutnull;contentPane.addjLabel1;contentPane.addjLabel2;contentPane.addjLabel3;contentPane.addjLabel4;contentPane.addjTextField1;contentPane.addjTextField2;contentPane.addjComboBox1;contentPane.addjButton2;contentPane.addjButton1;contentPane.addjOptionPane1;this.jComboBox
1.addItem管理员;this.jComboBox
1.addItem普通教师;this.jComboBox
1.addItem学生;}publicvoidjButton2_actionPerformedActionEvente{this.dispose;}publicvoidjTextField1_focusLostFocusEvente{try{Class.forNamesun.jdbc.odbc.JdbcOdbcDriver;}catchExceptionce{System.out.printlnce;}try{booleana=false;booleanb=true;Stringlevel=null;Stringurl=jdbc:odbc:test;Connectioncon=DriverManager.getConnectionurl;Statements=con.createStatement;ResultSetrs=s.executeQueryselectUserIdUserTypefromUser1;whilers.next{ifjTextField
1.getText.trim.equalsrs.getString
1.trim{level=rs.getString
2.toString.trim;a=true;b=false;break;}}ifb!this.jTextField
1.getText.trim.equals{jOptionPane
1.showMessageDialogthis用户名输入错误!提示JOptionPane.INFORMATION_MESSAGEnull;}ifa{request=1;iflevel.equals0{this.jTextField
2.setText学生;}iflevel.equals1{this.jTextField
2.setText普通教师;}iflevel.equals2{this.jTextField
2.setText管理员;}}rs.close;s.close;con.close;}catchjava.sql.SQLExceptionce{System.out.printlnce;}}publicvoidjButton1_actionPerformedActionEvente{ifrequest==1{try{Class.forNamesun.jdbc.odbc.JdbcOdbcDriver;}catchExceptionce{System.out.printlnce;}try{Stringurl=jdbc:odbc:test;Connectioncon=DriverManager.getConnectionurl;Statements=con.createStatement;ifthis.jComboBox
1.getSelectedItem.equals学生{request=0;}ifthis.jComboBox
1.getSelectedItem.equals普通教师{request=1;}ifthis.jComboBox
1.getSelectedItem.equals管理员{request=2;}s.executeUpdateupdateUser1setUserType=+request+whereUserId=+jTextField
1.getText.trim+;jOptionPane
1.showMessageDialogthis权限修改成功!提示JOptionPane.INFORMATION_MESSAGEnull;}catchExceptiona{}}else{jOptionPane
1.showMessageDialogthis请输入正确的用户名!提示JOptionPane.INFORMATION_MESSAGEnull;}}}classQModifyFrame_jButton1_actionAdapterimplementsActionListener{privateQModifyFrameadaptee;QModifyFrame_jButton1_actionAdapterQModifyFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton1_actionPerformede;}}classQModifyFrame_jTextField1_focusAdapterextendsFocusAdapter{privateQModifyFrameadaptee;QModifyFrame_jTextField1_focusAdapterQModifyFrameadaptee{this.adaptee=adaptee;}publicvoidfocusLostFocusEvente{adaptee.jTextField1_focusLoste;}}classQModifyFrame_jButton2_actionAdapterimplementsActionListener{privateQModifyFrameadaptee;QModifyFrame_jButton2_actionAdapterQModifyFrameadaptee{this.adaptee=adaptee;}publicvoidactionPerformedActionEvente{adaptee.jButton2_actionPerformede;}}课题八项目的测试按照极限编程的理论,写测试就是对软件进行设计的过程,它的重要性甚至超过了完成实际功能的代码先将测试写完,然后再来实现代码,这样所有的测试通过之日也就是程序完成之时虽然这些理论并不能完全实践,但测试的重要性是毋庸置疑的
8.1软件的测试测试是为了更好地完成项目的功能,虽然测试并不能完全模拟实际发生的流程,但可以降低错误的发生概率,提高软件项目的稳定性
8.
1.1测试的目的
(1)软件测试是为了发现错误而执行程序的过程
(2)测试是为了证明程序不够完美,任何程序都不可能有错
(3)一个成功的测试,其实是发现了别人发现不了的错误软件的测试,从根本上说是为了查找错误,但并不是找不出错误就说明测试没有价值首先,测试不光是要找出错误,还要分析错误产生的原因通过分析,可以帮助项目管理者发现当前软件实现过程的缺陷同时,这种分析也能帮助开发人员认识设计结构,改善测试的方法,提高测试效率其次,并不是所有的测试都会出错,设计完善的功能模块和软件过程,通常都不会有明显的漏洞目前的测试主要完成以下3个任务
(1)功能测试对照需求说明,测试每一项功能是否完成
(2)性能测试尤其是Web程序,测试是否满足客户需要的负载压力、响应的时间、吞吐量等要求
(3)进度要求在预算范围内完成测试要求,尽快发布软件
8.
1.2测试的方法软件测试的方法和技术是多种多样的,网路上也提供了很多免费的工具对于软件测试技术,可以从不同的角度加以划分
(1)从是否需要执行被测软件的角度,可分为静态测试和动态测试
(2)从是否针对系统的内部结构和具体实现算法的角度来看,可分为白盒测试和黑盒测试下面具体介绍黑盒测试和白盒测试
(1)黑盒测试又叫功能测试,由测试人员在不知道程序如何实现的情况下,输入功能需要的数据,查看输出结果的正确性所谓“黑盒”,其实就是把程序看成是一个完全密封的盒子,测试人员不考虑程序的内部构造,只是按照需求说明,进行数据的录入操作,并查看结果是否满足需求要完成的功能“黑盒”法着眼于程序外部结构,不考虑内部运算,针对界面和功能进行测试“黑盒”法是穷举测试,只有把所有可能的输入都进行测试,才能查处程序中所有的错误实际上测试情况有无穷多个,测试人员不仅要测试合法的输入,还要对那些不合法的输入进行测试
(2)白盒测试又叫逻辑结构测试测试人员需要了解功能的内部构造,对所有逻辑路径都进行测试“白盒”法是穷举路径测试测试人员必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据即使每条路径都测试了,仍然可能有错误第一,穷举路径测试无法查出程序违反了设计规范,即程序本身是个错误的程序第二,穷举路径测试查不出程序中因遗漏路径而出错的情况第三,穷举路径测试可能发现不了输入数据的错误
8.
1.3传统测试的问题及解决方案传统的软件测试一般是先在软件开发初期进行少量的单元测试,开发结束后,集中进行大量的测试,包括在功能和性能上进行的集成和系统测试随着软件项目复杂度的提高,传统的测试出现越来越多的问题
(1)项目进度难以控制,对应的项目管理难度加大大量的错误在后期才被发现,解决这些错误所花费的时间无法预料;错误太多,影响的模块过多,导致项目进度无法控制项目管理人员缺乏对软件质量的了解和控制,更加大了项目的管理难度
(2)项目风险控制能力弱由于所有的测试集中在了后期,所以风险控制只有在测试完成后,才能达到良好的控制
(3)预算超支在整个开发周期中,错误发现德越晚成本就越高很多软件厂商提出过改正的解决方案,也有越来越多的人关注测试IBMRational软件自动化的测试解决方案
(1)尽早测试首先在分析需求设计的过程中就完成测试用例的设计;其次在每个迭代周期都进行测试;最后将测试扩展到开发的整个过程中
(2)连续测试采用迭代式开发的模式,将系统分成很多阶段性的小目标,并对每个小目标进行测试
(3)使用自动化测试工具可以根据项目的功能需求来购买需要的测试工具使用自动化的测试工具,使项目组成员可以从容不迫的完成软件测试
8.2自动化测试工具开发人员将测试作为编程的必要过程,并采用单元测试来验证他们的代码是否执行预期的功能适用于Java测试的开放源码的测试工具有JUnit编写测试代码时,必须遵循特定的命名惯例,待测的每种方法的命名应遵循testXXXX的格式任何编写的测试代码应执行并完成以下任务
(1)设置测试所需的所有条件
(2)调用待测的方法
(3)验证待测的方法是否执行预期的功能
(4)清除测试代码的编写方式与程序代码相同除了在测试代码中会用到附加库以外,其他的与程序代码相同在执行的时候,执行测试代码而不是实际的项目代码测试代码在一定控制条件下检查项目代码JUnit提供一些测试方法,用于判断正在测试的特定方法是否正确执行功能这些方法被称为asserts,它断言某个特定条件是否为真断言是单元测试中的基本构件JUnit提供了多个assert方法assertEquals测试对象的相等性assertNull断言给定的对象是否为NullassertNotNull断言一个对象不是Null若对象为Null,则会引发AssertionFailedError并显示指定消息assertSame断言期望对象和实际对象指向同一对象assertNotSame断言两个对象指向不同对象如果不相同,则引发AsssertionFailedErrorassertTrue断言给定的布尔条件是否为真assertFalse断言一个条件为假如果不为假,则引发AssertionFailedErrorfail测试失败课题九实战演练
9.1项目总体要求以教材为参考,设计完成一个应用管理系统,要求所设计的应用管理系统功能完备、结构合理;书写相关技术文档,文档内容符合你所设计的应用管理系统,各项文档填写正确、完整;运用SQLSEVER数据库,实现系统数据的增、删、改、查等功能;使用图形用户界面,界面设计结构合理、页面风格简洁、用户操作流畅;
9.2选题要求学生信息管理系统超市管理系统高考管理系统雇员信息管理运动会成绩管理系统注也可自选题目,按照项目要求完成作品
9.3系统功能要求
1、系统界面采用图形用户界面,应有4个或4个以上的功能模块
2、要求窗体里有菜单和控件元素
3、数据库中至少包含3个或3个以上数据表
4、可以在图形用户界面中实现对数据的修改和查询,应设计单项查询和组合查询,不同的查询可由不同的控件元素控制
5、1-4为最低要求,更多的功能及界面元素由学生自己设计添加提交系统的可移植性越强,界面越美观实用,功能越完善,演示能力(逻辑思维及语言表达)越强,则最后评分就越高
9.4项目分工以项目组的形式合作开发应用管理系统,每组包含两名以上成员,自愿组合;每组中包括两个职务系统设计工程师和系统开发工程师;具体分工如下系统设计工程师负责编写项目设计文档,设计并搭建数据库,编写数据设计文档;开发系统各功能模块;系统开发工程师负责编写系统开发、测试相关文档,设计系统图形用户界面,开发系统各功能模块;要求每个人都必须编写代码
9.5项目任务时间表时间项目任务提交文档系统设计工程师系统开发工程师系统设计工程师系统开发工程师4学时选择开发项目设计完成数据库选择开发项目设计图形用户界面项目文档1-1项目文档2-3编程日志文档项目文档1-1项目文档2-2编程日志文档4学时编写数据库连接类制作用户登录模块并能够成功运行制作系统界面填加相应的控制逻辑代码编程日志文档编程日志文档8学时制作系统的一个功能模块要求有增、删、查、改功能;并能够成功运行制作系统界面填加相应的控制逻辑代码编程日志文档编程日志文档8学时制作系统的一个功能模块要求有增、删、查、改功能;并能够成功运行制作系统的一个功能模块要求有增、删、查、改功能;并能够成功运行编程日志文档项目文档2-4编程日志文档要求:整体进度要达到系统的一半以上4学时合作完成全部任务测试报告编程日志文档用户手册编程日志文档
9.6项目考核标准项目最终成绩文档占50%,程序占50%文档检查标准考核名称分数文档编写齐全,按照标准完成所有的文档,如文档太简单,每个扣10分60在开发文档中有下列文档,进行加分 数据库设计是否有表关系图E-R图10编码命名规范文档10控制文档是否齐全10培训文档和说明书10合计100程序检查标准考核名称分数系统是否采用三层架构20登录验证5系统个功能模块是否完善20用户管理功能是否完成,增加、删除、修改15用户权限功能是否完成5是否有帮助功能5系统是否有用户权限控制5代码注释是否完善5安全性提示(增删改有提示信息)5编码规范(其中包括Java代码和数据库字段编码)5数据库是否有字段说明和必要的注释信息5设计文档和程序编码是否一致5合计100附件软件文档编写向导文档分类项目包括如下几类文档; 项目管理文档包括《软件项目计划》、《项目进度报告》、《项目开发总结报告》软件开发文档包括《需求规格说明》、《概要设计说明》、《详细设计说明》软件测试文档包括《测试计划》、《软件测试分析报告》产品资料包括《用户操作手册》文档的版本号 本项目文档的版本号由以圆点隔开的两个数字组成,第一个数字表示出版号,第二个数字表示该版的修订号具体用法如下当文档初版时,版本号为V
1.0;当文档被局部修订时,出版号不变,修订号增1例如,对初版文档作了第一次修订,则版本号为V
1.1;当文档被全面改写或局部修订累积较多导致文档发生全局变化时,出版号增1例如,在V
1.5版的基础上作了一次全面修订,则新版本号为V
2.0文档的标识 项目所产生的文档都有唯
一、特定的编码,其构成如下项目标志-任务标识-文档类型-文档树中的编号-版本号/序号 其中项目标志本项目的标识,表明本项目是“XXXX”任务标识少于八个字母,简要标识本任务,标准XXXX是“STANDARD”适用于整个项目的文档,此标识为“XXXX”文档类型取自下表的两位字母编码编号反映文档类型(根据下表填写)版本号本文档的版本号序号四位数字编码,指明该文档在项目文档库的总序号一个文档编码的例子为XXXX-XXXX-SP-2N01-V
1.0/0015 表
5.3 项目的文档分类表 文档类型编码编号注 释项目管理项目开发计划PP1002Project Plan项目进度报告PR1003Project Report软件开发软件项目计划SP2N01Software Plan软件需求规格说明SA2N02Software Anlaysis软件设计说明SD2N03Software Design软件测试软件测试计划TP4N01Testing Plan软件测试分析报告TR4N02Tesing Report产品文档用户手册RU5N01Userguide 本项目中所有文档的标识清单将在《项目开发计划》中予以具体定义文档的编写模板本项目中所有任务的文档将按照统一的模板(格式和内容的约定)来编写,包括《模板-软件开发计划》《模板-软件需求规格说明》《模板-软件设计说明》《模板-技术说明》 文档的模板均保存在配置管理员处,并由其分发给文档的编写者需要说明的是,文档模板是本项目在文档结构和版式上的统一约定,对于具体文档,编写者可以根据需要添加章节,原则上不要删除章节(可以写“本章/节无内容”)当文档模板不符合编写者要求时,编写者应与项目组长联系以决定文档的编写标准关于《技术说明》在产品包中,应包含一份《技术说明》,以详细说明本产品的代码来源和修改情况在《技术说明》中,应包含如下内容代码包的清单,格式为代码包名来源版本功能的描述 其中,“来源”可以是下载的网络地址、“拷贝”、“创建”代码文件的清单,格式为代码包名文件名状态修改者/作者最后修改时间 其中,“状态”可以是“修改”、“删除”、“创建”、“原样” 封面格式 文档编号 版本号 文档名称 项目名称 项目负责人 编写 年 月 日 校对 年 月 日 审核 年 月 日 批准 年 月 日 开发单位 系统规格说明书(SystemSpecification) 一.引言A. 文档的范围和目的B. 概述C.目标二.功能和数据描述A. 系统结构B.结构关系图C.结构关系图描述三.子系统描述A. 子系统的结构图规格说明B. 结构字典C. 结构连接图和说明四.系统建模和模拟结构A. 用于模拟的系统模型B. 模拟结果C. 特殊性能五.软件项目问题A.软件项目计划六.附录 软件项目计划(SoftwareProjectPlan) 一.引言1.编写目的(阐明编写软件计划的目的,指出读者对象)2.项目背景(可包括
(1)项目委托单位、开发单位和主管部门;
(2)该软件系统与其他系统的关系)3.定义(列出本文档中用到的专门术语的定义和缩略词的原文)4.参考资料(可包括文档所引用的资料、规范等;列出资料的作者、标题、编号、发表日期、出版单位或资料来源)二.项目概述
1. 工作内容(简要说明项目的各项主要工作介绍所开发软件的功能性能等.若不编写可行性研究报告则应在本节给出较详细的介绍
2. 条件与限制(阐明为完成项目应具备的条件开发单位已具备的条件以及尚需创造的条件.必要时还应说明用户及分合同承包者承担的工作完成期限及其它条件与限制)
3. 产品
(1)程序(列出应交付的程序名称使用的语言及存储形式)
(2)文档(列出应交付的文档)
(3)运行环境(应包括硬件环境软件环境)4.服务(阐明开发单位可向用户提供的服务.如人员培训安装保修维护和其他运行支持)5.验收标准三.实施计划1.任务分解(任务的划分及各项任务的负责人)2.进度(按阶段完成的项目用图表说明开始时间完成时间)3.预算4.关键问题(说明可能影响项目的关键问题如设备条件技术难点或其他风险因素并说明对策)四.人员组织及分工五.交付期限六.专题计划要点(如测试计划等) 需求规格说明书(RequirementsSpecification) 一.引言1. 编写目的(阐明编写需求说明书的目的指明读者对象)2. 项目背景(可包括
(1)项目的委托单位开发单位和主管部门;
(2)该软件系统与其他系统的关系)3. 定义(列出文档中用到的专门术语定义和缩写词的原文)4. 参考资料(可包括
(1)项目开发计划;
(2)文档所引用的资料,标准和规范列出这些资料的作者、标题、编号、发表日期、出版单位或资料来源)二.任务概述1.目标2.运行环境3.条件与限制三.数据描述1. 静态数据2. 动态数据(包括输入数据和输出数据)3. 数据库描述(给出使用数据库的名称和类型)4. 数据词典5. 数据采集四.功能需求1.功能划分2.功能描述五.性能需求1.数据精确度2.时间特性(如响应时间、更新处理时间、数据转化与传输时间、运行时间等)3.适应性(在操作方式运行环境与其他软件的接口以及开发计划等发生变化时,应具有的适应能力)六.运行需求1.用户界面(如屏幕格式、报表格式、菜单格式、输入输出时间等)2.硬件接口3.软件接口4.故障处理七.其他需求(如可使用性、安全保密、可维护性、可移植性等) 概要设计说明书(ArchitecturalDesignSpecification) 一.引言1.编写目的(阐明编写概要设计说明书的目的,指明读者对象)2.项目背景(可包括
(1)项目的委托单位开发单位和主管部门;
(2)该软件系统与其他系统的关系)3.定义(列出文档中用到的专门术语定义和缩写词的原意)4.参考资料(列出这些资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括
(1)项目开发计划;
(2)需求规格说明书;
(3)测试计划(初稿);
(4)用户操作手册(初稿);
(5)文档所引用的资料、采用的标准或规范)二.任务概述1.目标2.运行环境3.需求概述4.条件与限制三.总体设计 1.处理流程 2.总体结构和模块外部设计 3.功能分配(表明各项功能与程序结构的关系)四.接口设计1.外部接口(包括用户界面软件接口与硬件接口)2.内部接口(模块之间的接口)五.数据结构设计1. 逻辑结构设计2. 物理结构设计3. 数据结构与程序的关系六.运行设计1.运行模块的组合2.运行控制3.运行时间七.出错处理设计1.出错输出信息2.出错处理对策(如设置后备、性能降级、恢复及再启动等)八.安全保密设计九.维护设计(说明为方便维护工作的设施如维护模块等) 详细设计说明书(ProceduralDesignSpecification) 一.引言1. 编写目的(阐明编写详细设计说明书的目的指明读者对象)2. 项目背景(应包括项目的来源和主管部门等)3. 定义(列出文档中用到的专门术语定义和缩写词的原意)4. 参考资料(列出这些资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括
(1)项目开发计划;
(2)需求规格说明书;
(3)概要设计说明书;
(4)测试计划初稿;
(5)用户操作手册初稿;
(5)文档所引用的其他资料、软件开发标准或规范)二.总体设计1.需求概述2.软件结构(如给出软件系统的结果图)三.程序描述(逐个模块给出以下的说明:)1.功能2.性能3.输入项目4.输出项目5.算法(模块所选用的算法)6.程序逻辑(详细描述模块实现的算法,可采用:
(1)标准流程图;
(2)N-S图;
(3)PAD;
(4)判定表等描述算法的图表)7.接口8.存储分配9.限制条件
10.测试要点(给出测试模块的主要测试要求) 用户操作手册(UserGuide) 一.引言1.编写目的(阐明编写手册的目的,指明读者对象)2.项目背景(说明项目的来源、委托单位、开发单位及主管部门)3.定义(列出手册中用到的专门术语定义和缩写词的原意)4.参考资料(列出这些资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括
(1)项目开发计划;
(2)需求规格说明书;
(3)概要设计说明书;
(4)详细设计说明书;
(5)测试计划;
(6)手册中引用的其他资料、采用的软件工程标准或软件工程规范)二.软件概述1.目标2.功能3.性能
(1)数据精确度(包括输入、输出及处理数据的精度)
(2)时间特性(如响应时间、处理时间、数据传输时间等)
(3)灵活性(在操作方式、运行环境需做某些变更时软件的适应能力)三.运行环境1.硬件(列出软件系统运行时所需的硬件最小配置,如
(1)计算机型号、主存容量;
(2)外存储器、媒体、记录格式、设备型号及数量;
(3)输入、输出设备;
(4)数据传输设备及数据转换设备的型号及数量)2.支持软件(如
(1)操作系统名称及版本号;
(2)语言编译系统或汇编系统的名称及版本号;
(3)数据库管理系统的名称及版本号;
(4)其他必要的支持软件)四.使用说明1.安装和初始化(给出程序的存储形式、操作命令、反馈信息及其含义、表明安装完成的测试实例以及安装所需的软件工具等)2.输入(给出输入数据或参数的要求)
(1)数据背景(说明数据来源、存储媒体、出现频度、限制和质量管理等)
(2)数据格式(如1)长度2)格式基准3)标号4)顺序5)分隔符6)词汇表7)省略和重复8)控制)
(3)输入举例 3.输出(给出每项输出数据的说明)
(1)数据背景(说明输出数据的去向、使用频度、存放媒体及质量管理等)
(2)数据格式(详细阐明每一输出数据的格式如:首部主体和尾部的具体形式)
(3)举例3.出错和恢复(给出1)出错信息及其含义2)用户应采取的措施,如修改、恢复、再启动)4.求助查询(说明如何操作)五.运行说明1. 运行表[列出每种可能的运行情况说明其运行目的.]2. 运行步骤[按顺序说明每种运行的步骤应包括:]
(1) 运行控制
(2)操作信息
(1)运行目的2)操作要求3)启动方法4)预计运行时间5)操作命令格式及说明6)其他事项)
(3) 输入/输出文件(给出建立和更新文件的有关信息,如1)文件的名称及编号2)记录媒体3)存留的目录4)文件的支配[说明确定保留文件或废弃文件的准则,分发文件的对象,占用硬件的优先级及保密控制等)
(4)启动或恢复过程六.非常规过程(提供应急或非常规操作的必要信息及操作步骤,如出错处理操作、向后备系统切换操作以及维护人员须知的操作和注意事项)七.操作命令一览表(按字母顺序逐个列出全部操作命令的格式功能及参数说明)八.程序文件(或命令文件)和数据文件一览表(按文件名字母顺序或按功能与模块分类顺序逐个列出文件名称、标识符及说明)九.用户操作举例 测试计划(TestPlan)
一、引言1. 编写目的(阐明编写测试计划的目的指明读者对象)2. 项目背景(说明项目的来源委托单位及主管部门)3. 定义(列出测试计划中用到的专门术语定义和缩写词的原意)4. 参考资料(列出这些资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括1)项目开发计划;2)需求规格说明书;3)概要设计说明书;4)详细设计说明书;5)用户操作手册;6本测试计划中引用的其他资料采用的软件开发标准或规范)二.任务概述1.目标2.运行环境3.需求概述4.条件与限制三.计划 1.测试方案(说明确定测试方法和选取测试用例的原则) 2.测试项目(列出组装测试和确认测试中每一项测试的内容、名称、目的和进度) 3.测试准备 4.测试机构及人员(测试机构名称负责人和职责)四.测试项目说明(按顺序逐个对测试项目做出说明) 1.测试项目名称及测试内容 2.测试用例
(1)输入(输入的数据和输入的命令)
(2)输出(预期的输出数据)
(3)步骤及操作
(4)允许偏差(给出实测结果与预测结果之间允许偏差的范围)3. 进度4. 条件(给出项测试对资源的特殊要求,如设备、软件、人员等)5. 测试资料(说明项测试所需的资料)五.评价1.范围(说明所完成的各项测试说明问题的范围及其局限性)2.准则(说明评价测试结果的准则) 测试分析报告(TestSpecification) 一.引言1.编写目的(阐明编写测试分析报告的目的,指明读者对象)2.项目背景(说明项目的来源、委托单位及主管部门)3.定义(列出测试分析报告中用到的专门术语定义和缩写词的原意)4.参考资料(列出这些资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括1)项目开发计划;2)需求规格说明书;3)概要设计说明书;4)详细设计说明书;5)用户操作手册;6)测试计划;7)测试分析报告所引用的其他资料、采用的软件工程标准或软件工程规范)二.测试计划执行情况1.测试项目(列出每一测试项目的名称、内容和目的)2.测试机构和人员(给出测试机构名称、负责人和参与测试人员名单)3.测试结果(按顺序给出每一测试项目的1)实测结果数据2)与预期结果数据的偏差3)该项测试说明的事实4)该项测试发现的问题)三.软件需求测试结论(按顺序给出每一项需求测试的结论包括1)证实的软件能力2)局限性(即项需求未得到充分测试的情况及原因))四.评价1.软件能力(经过测试所表明的软件能力)2.缺陷和限制(说明测试所揭露的软件缺陷和不足以及可能给软件运行带来的影响)3.建议(提出为弥补上述缺陷的建议)4.测试结论(说明能否通过) 开发进度报告 一.报告时间及所处的开发阶段二.给出进度1. 本周的主要活动2. 实际进展与计划比较三.所用工时(按不同层次人员分别计时)四.所有机时五.工作遇到的问题及采取的对策六.本周完成的成果七.下周的工作计划八.特殊问题 项目开发总结报告包括以该报告为基础编写一篇ppt文档,以供项目结束时参加项目答辩一.引言1.编写目的(阐明编写总结报告的目的指明读者对象)2.项目背景(说明项目的来源、委托单位、开发单位及主管部门)3.定义(列出报告中用到的专门术语定义和缩写词的原意)4.参考资料(列出这些资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括1)项目开发计划;2)需求规格说明书;3)概要设计说明书;4)详细设计说明书;5)用户操作手册;6)测试计划;7)测试分析报告8)本报告引用的其他资料、采用的开发标准或开发规范)二.开发结果1. 产品(可包括1)列出各部分的程序名称、源程序行数(包括注释行)或目标程序字节数及程序总计数量、存储形式;产品文档名称等)2. 主要功能及性能3. 所用工时(按人员的不同层次分别计时)4. 所用机时5. 进度(给出计划进度与实际进度的对比)三.评价1.生产率评价(如平均每人每周源程序行数、文档的字数等)2.技术方案评价3.产品质量评价四.经验与教训 查看所授课程教师模块添加课程信息课程管理子模块修改课程信息删除课程信息查询课程信息添加学生信息学生管理子模块学生模块录入学生成绩修改学生信息删除学生信息查询学生信息结束需求准备进入设计与用户共同确定工作环境项目组分析并确定最终需求分析人员确定调研结果并写报告分析人员体验用户工作流程用户提出需求开始需求用户需求分析流程图选课查看选课信息修改选课信息公有模块身份验证密码修改退出系统209。