第21章学生信息管理——三层结构数据库编程.ppt_第1页
第21章学生信息管理——三层结构数据库编程.ppt_第2页
第21章学生信息管理——三层结构数据库编程.ppt_第3页
第21章学生信息管理——三层结构数据库编程.ppt_第4页
第21章学生信息管理——三层结构数据库编程.ppt_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

第21章学生信息管理 三层结构数据库编程 能力目标 能使用JDBC建立数据库连接 能编写Java代码连接数据库 能编写添加 修改 删除数据库记录的程序代码 理解表示层 业务逻辑层 数据层 理解三层结构的应用程序 能编写三层结构的学生信息管理应用程序 并能打包发布 内容介绍 21 1任务预览21 2建立数据库21 3连接数据库21 4访问数据库21 5三层结构应用程序概述21 6三层结构学生信息管理程序21 7打包发布程序21 8本章小结21 9实训21 实现三层结构学生信息管理程序 21 1任务预览 本章实训程序运行结果 21 2建立数据库 程序数据和代码往往是分离的 数据使用数据库存放 方便检索 持久保存 能按动态添加 修改和删除 并能共享 数据库管理系统 DBMS 流行的关系型DBMS SQLServerAccessOracleMySQL等每种DBMS有版本之分 如SQLServer有2000 2005 2008等版本 还有企业版 开发版 速成版等 21 2 1在DBMS上建立数据库 访问数据库之前先要建立数据库 使用DBMS创建数据库优点 操作直观界面友好互动性强关于如何在DBMS上建立数据库 不在本书叙述范围 21 2 2运行SQL脚本建立数据库 以免费的SQLServer2005ExpressEdition 速成版 为例 通过SQL脚本创建数据库 例21 1 编写SQL脚本 建立学生数据库 数据库含有一个数据表 字段为 学号 姓名 性别 专业和年级 并使用脚本录入4条记录 USEmasterGOifexists select fromsysdatabaseswherename Studb dropdatabaseStudbGOCREATEDATABASEStudbGO USEStudbCREATETABLEStus Numchar 8 PRIMARYKEY Namenvarchar 4 NOTNULL Sexnchar 1 NOTNULL Specialtynvarchar 7 NULL YearintNULL CHECK Sex 男 orSex 女 CHECK Year 2000andYear 2020 orYear 0 GOinsertintoStus Num Name Sex Specialty Year values 12010001 赵益 男 软件技术 2012 insertintoStus Num Name Sex Specialty Year values 12010002 钱珥 女 软件技术 2012 insertintoStus Num Name Sex Specialty Year values 12010003 孙散 男 软件技术 2012 insertintoStus Num Name Sex values 12010004 李四 男 GO 用记事本把脚本代码录入电脑 存盘为createstudb sql 设计算机已安装速成版SQLServer2005 打开命令行窗口 进入脚本文件目录 执行下面命令生成学生数据库Studb mdf sqlcmd S SQLExpress E icreatestudb sql 21 3连接数据库 连接数据库之前先要加载数据库驱动程序 通常是加载JDBC ODBC桥驱动程序 代码如下 Class forName sun jdbc odbc JdbcOdbcDriver JDBC类似于ODBC 是API软件包java sql 含有多个类和接口 常用的 DriverDriverManagerConnectionStatementPreparedStatementResultSet 21 3 1JDBC与JDBC ODBC JDBC简介 Java使用JDBC JavaDataBaseConnectivity 技术进行数据库的访问 使用JDBC技术进行数据库访问时 Java应用程序通过JDBCAPI和JDBC驱动程序管理器之间进行通信 例如Java应用程序可以通过JDBCAPI向JDBC驱动程序管理器发送一个SQL查询语句 JDBC驱动程序管理器又可以以两种方式和最终的数据库进行通信 一种是使用JDBC ODBC桥接驱动程序的间接方式 另一种是使用JDBC驱动程序的直接方式 JDBC简介 JDBC是一种用于执行SQL语句的JavaAPI 可以为多种关系数据库提供统一访问 它由一组用Java语言编写的类和接口组成 使用JDBCAPI 可以向各种关系数据发送SQL语句 目前比较常见的JDBC驱动程序可分为以下4个种类 JDBC ODBC桥加ODBC驱动程序本地APIJDBC网络纯Java驱动程序本地协议纯Java驱动程序 使用JDBC ODBC桥接驱动程序 1 载入驱动程序使用JDBC ODBC桥接驱动程序 该驱动程序的名称为sun jdbc odbc JdbcOdbc Driver 使用下面的语句将载入JDBC ODBC桥接驱动程序 2 建立连接使用下面的语句建立一个和数据库的连接 java sql包 JDBC做三件事 与数据库建立连接 发送SQL语句并处理结果 JDBCAPI包括一个框架 来自java sql包 凭借此框架可以动态地安装不同驱动程序来访问不同数据源 执行SQL语句 处理结果集或更新数据记录等 使用JDBCAPI进行数据库操作步骤 导入JDBCAPI 首先利用import语句导入java sql包 装载驱动程序 针对不同DBMS 使用Class类的forName方法加载驱动程序类的支持 建立数据库连接 使用DriverManager类的getConnection方法 指明数据库或数据源的url 以及登录DBMS的用户名及口令 创建数据库连接对象 Connection接口对象 创建JDBCStatements对象 使用已有的Connection数据库连接对象创建一个Statement对象 利用该对象把SQL语句执行适当的方法发送到DBMS 5 执行语句 对SELECT语句来说 使用executeQuery方法执行 返回结果是ResultSet类型的结果集 对INSERT UPDATE DELETE语句来说 使用executeUpdate方法执行 返回结果是影响的行数 6 处理结果 对返回的结果集或影响行数进行处理 可以进行显示 判断等操作 7 关闭资源 与各种对象创建的顺序相反 依次关闭ResultSet Statement Connection对象 访问数据库 配置ODBC数据源1 在控制面板中 打开管理工具 数据源 ODBC 弹出 ODBC数据源管理器 对话框 点击 系统DSN 选项卡 如图所示 该对话框中列出若干已经配置好的针对不同DBMS的系统数据源 访问数据库 配置ODBC数据源2 单击 添加 按钮 添加新的数据源 在打开的 创建新数据源 对话框中 根据使用的DBMS类型选择要安装数据源的驱动程序 这里选择 SQLServer 如图所示 访问数据库 配置ODBC数据源3 单击 完成 按钮 打开 创建到SQLServer的新数据源 对话框 在数据源名称文本框中填写 data 在服务器下拉框中选择要连接的数据库服务器名 这里选择 local 表示连接本机的数据库 如图所示 访问数据库 配置ODBC数据源4 单击 下一步 默认选择 使用网络登录ID的WindowsNT验证 如图所示 继续 下一步 选中 更改默认的数据库 复选框 然后在激活的下拉框中选择 pubs 数据库 如图所示 访问数据库 配置ODBC数据源5 继续 下一步 单击 完成 按钮 弹出 ODBCMicrosoftSQLServer安装 信息对话框 如图 可以单击 测试数据源 按钮进行连接测试 确认无误后 点击 确定 即完成数据源的设置 21 3 3通过数据源建立数据库连接 通过数据源StuDSN与学生库Studb建立连接 Connectioncon DriverManager getConnection jdbc odbc StuDSN DriverManager类建立连接的常用方法 1 staticConnectiongetConnection Stringurl 试图建立与URL形式的数据库连接 url串的语法形式 jdbc 子协议 子名称其中 jdbc是协议名 子协议有odbc或mysql等 子名称有数据源名称等 2 staticConnectiongetConnection Stringurl Stringuser Stringpassword 多了用户名和密码 21 3 4Connection连接 Connection是接口类型 连接对象只能通过DriverManager类的getConnection方法建立 连接接口Connection的常用方法 1 StatementcreateStatement 创建语句对象 2 StatementcreateStatement intresultSetType intresultSetConcurrency 创建语句对象 该对象将生成具有给定类型和并发性的ResultSet 结果集 对象 参数resultSetType是结果集类型 取自下面3个ResultSet静态常量 ResultSet TYPE FORWARD ONLYResultSet TYPE SCROLL INSENSITIVEResultSet TYPE SCROLL SENSITIVE 3 PreparedStatementprepareStatement Stringsql 创建预编译语句 对象 4 PreparedStatementprepareStatement Stringsql intresultSetType intresultSetConcurrency 5 voidclose 关闭连接 释放资源 6 voidsetAutoCommit booleanautoCommit 设置连接对象是否自动提交 6 voidcommit 提交事务 实现数据更改 7 voidrollback 回滚事务 注 默认连接对象自动提交 执行每个语句都会自动提交更改 如果禁用自动提交 那么要提交更改就必须显式调用commit方法 21 4访问数据库 1 建立数据库 2 创建数据源 3 加载JDBC ODBC桥驱动程序 4 建立数据库连接 涉及DriverManager和Connection 5 由连接创建语句对象 涉及Connection Statement和PreparedStatement 6 通过语句对象执行SQL语句 涉及Statement PreparedStatement和ResultSet 7 处理结果集 涉及ResultSet 8 关闭结果集 语句和连接对象 涉及ResultSet Statement PreparedStatement和Connection 9 捕获 处理异常 涉及SQLException等 21 4 1数据库编程步骤 例21 2 编写读取学生数据库Studb所有记录的Java程序 importjava sql publicclassExample2 publicstaticvoidmain try Class forName sun jdbc odbc JdbcOdbcDriver Connectionconn DriverManager getConnection jdbc odbc StuDSN Statementstmt conn createStatement 创建语句ResultSetrs stmt executeQuery select fromStus System out println 学号 姓名 性别 专业 年级 while rs next 循环输出结果集各行内容System out print rs getString 1 t 从1开始System out print rs getString 2 t System out print rs getString 3 t System out print rs getString 4 t System out println rs getInt 5 rs close catch Exceptione 21 4 2Statement语句 Statement是接口类型 只能通过连接对象createStatement方法创建语句对象 语句对象执行静态SQL语句 返回结果集或int等数据 Statement常用方法 1 ResultSetexecuteQuery Stringsql 例如 Statementstmt conn createStatement ResultSetrs stmt executeQuery select fromStus 2 intexecuteUpdate Stringsql 执行给定SQL更新语句 SQL更新语句一般是INSERT UPDATE或DELETE等 返回更新的行数 3 booleanexecute Stringsql 4 voidclose 关闭语句 21 4 3PreparedStatement预编译SQL语句 继承自Statement 也是接口类型 优点 预编译语句允许带参数 可以 动态 执行SQL语句 只需预先编译SQL语句一次 就可多次执行 效率高 PreparedStatement常用方法 1 ResultSetexecuteQuery 预编译语句执行SQL查询 返回结果集 2 intexecuteUpdate 执行SQL更新语句 3 booleanexecute 执行SQL语句 4 voidsetString intparameterIndex Stringx 将SQL语句中指定索引处的参数设置为String类型的x值 SQL语句参数用 表示 索引从1开始 如带4个 参数 sql updateStussetName Sex Year whereNum prpstmt conn prepareStatement sql 创建预编译语句prpstmt setString 1 郑丽 设置第1个参数值prpstmt setString 2 女 prpstmt setInt 3 2011 prpstmt setString 4 11010001 prpstmt executeUpdate 5 voidsetInt intparameterIndex intx 索引处参数设为int值 6 voidsetDouble intparameterIndex doublex 索引处参数设置为double值 7 voidclearParameters 清除当前参数值 21 4 4ResultSet结果集 ResultSet也是接口类型 只能通过执行语句或预编译语句的executeQuery等方法创建结果集对象 结果集与数据库表对应 由行 记录 列 字段 组成 结果集自带行光标 游标 最初 光标置于第一行之前 执行next方法光标下移一行 没有下一行时返回false 于是可使用while语句循环读各行数据 结果集提供从当前行获取列值的方法 如getString 1 getInt 5 或getString Num getInt Year 注 方法getXxx的列名参数不区分大小写 SQL语句也不区分大小写 但Java代码本身是严格区分大小写的 默认结果集对象不可更新 仅有一个向前移光标 创建语句对象时 可以给定参数 使之生成可滚动 可更新的结果集 ResultSet常用方法 1 booleannext 结果集光标下移一行 2 booleanprevious 结果集光标上移一行 3 booleanfirst 光标移到结果集第一行 4 booleanlast 光标移到结果集最后一行 5 voidafterLast 光标移动结果集最后一行之后 6 voidbeforeFirst 光标移动到结果集第一行之前 7 booleanabsolute introw 光标移到指定行号处 8 StringgetString intcolumnIndex 获取集当前行指定列索引的字符串型列值 列索引从1开始 例如 System out print rs getString 1 t 9 StringgetString StringcolumnLabel 获取指定列名的字符串型列值 如 System out print rs getString Num t 10 intgetInt intcolumnIndex 获取当前行指定列索引的int值 11 intgetInt StringcolumnLabel 获取指定列名的int值 12 doublegetDouble intcolumnIndex 13 doublegetDouble StringcolumnLabel 14 booleangetBoolean intcolumnIndex 15 booleangetBoolean StringcolumnLabel 16 voidclose 关闭结果集 17 intgetRow 获取当前行编号 行号从1开始 18 booleanwasNull 判断最后读取的列值是否为Null 空 例21 3 编写插入 修改 删除学生记录的程序 publicclassExample3 publicstaticvoidmain Connectionconn null Statementstmt null Statementstmt2 null PreparedStatementprpstmt null ResultSetrs null try Class forName sun jdbc odbc JdbcOdbcDriver conn DriverManager getConnection jdbc odbc StuDSN stmt conn createStatement ResultSet TYPE SCROLL SENSITIVE ResultSet CONCUR UPDATABLE rs stmt executeQuery select fromStus System out println 数据库原来的内容 System out println 学号 姓名 性别 专业 年级 while rs next 循环输出结果集各行内容System out print rs getString 1 t 字段 列 号从1开始System out print rs getString 2 t System out print rs getString 3 t System out print rs getString 4 t System out println rs getInt 5 插入一条记录 Stringsql insertintoStus num name sex specialty values 11010001 张三 男 网络技术 stmt2 conn createStatement 连接创建语句2stmt2 executeUpdate sql 语句2执行插入操作 更改记录 sql updateStussetName Sex Year whereNum prpstmt conn prepareStatement sql 创建预编译语句prpstmt setString 1 郑丽 prpstmt setString 2 女 prpstmt setInt 3 2011 prpstmt setString 4 11010001 prpstmt executeUpdate 更新记录 删除记录 sql deletefromStuswhereNum prpstmt conn prepareStatement sql 创建预编译语句prpstmt setString 1 12010004 prpstmt executeUpdate 执行预编译语句删除记录 System out println n更新后的内容 System out println 学号 姓名 性别 专业 年级 rs beforeFirst while rs next 循环输出结果集各行内容System out print rs getString 1 t catch Exceptione System err println 异常 e finally try if rs null rs close 关闭结果集if stmt null stmt close 关闭语句if stmt2 null stmt2 close 关闭语句2if prpstmt null prpstmt close 关闭预编译语句if conn null conn close 关闭连接 catch SQLExceptionse JOptionPane showMessageDialog 注 连接 语句 结果集关闭顺序和创建顺序刚好相反 三者之间的关系 结果集依赖语句 而语句又依赖连接 因为 连接创建语句 语句再创建结果集 21 5三层结构应用程序概述 逻辑上把应用程序代码分成若干个层次 例如二层 三层等 各层之间相对独立 要求下层提供方法给上层调用 不能跨层操作 通常 下层模块执行简单任务 上层模块通过调用多个下层模块 实现较为复杂的功能 3层 表示层 业务逻辑层 数据层 无论哪一层 对于Java程序 都是由类和接口组成 开发应用程序时 一般从底层开始 21 6三层结构学生信息管理程序 本节运用三层结构编写学生信息管理程序 访问21 2节建立的学生数据库 对象 关系映射 O R映射 将面向对象程序设计语言中的对象实体及实体之间的关系映射到关系数据库中的表及表之间的关系 相对地 把关系数据库的数据模型映射到Java对象模型 映射到数据库表或视图的类就是 实体类 实体类的对象映射为一条数据记录 实体类的各个属性映射为记录的各个字段 学生数据库只有一个数据表 只需编写一个映射实体类 21 6 1对象 关系映射 21 6 2实体类与JavaBean 例21 4 编写映射到学生数据库表 记录 的实体类 publicclassStuimplementsComparable 也是JavaBeanprivateStringnum 学号privateStringname 姓名privatecharsex 性别privateStringspecialty 专业privateintyear 年级 publicStu 默认构造方法publicStringgetNum returnnum publicvoidsetNum Stringnum throwsException if num matches d 8 this num num else thrownewException 学号必须为8位数字 publicStringgetName returnname publicvoidsetName Stringname throwsException publicchargetSex returnsex publicvoidsetSex charsex throwsException publicStringgetSpecialty returnspecialty publicvoidsetSpecialty Stringspecialty publicintgetYear returnyear publicvoidsetYear intyear throwsException publicintcompareTo StuotherStu 比较顺序方法pareTo otherStu num publicStringtoString 对象输出方法returnnum name sex specialty year 实体类是业务逻辑层代码 Java的实体类属于JavaBean JavaBean是完成特定功能的组件 主要提供给别的代码共享调用 本身不能独立运行 是代码片段 JavaBean的特征有4个 1 JavaBean是一个或多个Java类 2 类中业务方法都是public的 对外提供调用 3 需提供无参数的构造方法 如果用于网络传输 还要实现Serializable接口 4 字段一般是private 要编写对字段读写的public方法 字段读写方法的基本结构如下 publicTypegetXxx returnxxx publicvoidsetXxx Typexxx this xxx xxx 21 6 3数据层 是3层最底层 直接与数据库关联 例21 5 编写学生信息管理程序的数据层 importjava sql importjava util Vector importjavax swing JOptionPane publicclassStuDataAccess 数据层类privatestaticStringdriver sun jdbc odbc JdbcOdbcDriver privatestaticStringurl jdbc odbc StuDSN privatestaticConnectionconn privateStatementstmt privatePreparedStatementprpstmt privateResultSetrs privatestaticConnectioncreateConnection 建立连接方法try if conn null conn isClosed Class forName driver 加载驱动程序conn DriverManager getConnection url 建立连接 catch Exceptione System err println 建立连接异常 e returnconn privatestaticvoidcloseConnection 关闭连接方法try if conn null catch SQLExceptionse JOptionPane showMessageDialog privatevoidcloseResultSet 关闭结果集方法try if rs null rs close catch SQLExceptionse JOptionPane showMessageDialog privatevoidcloseStatement 关闭语句方法try if stmt null stmt close if prpstmt null prpstmt close catch SQLExceptionse JOptionPane showMessageDialog publicVectorgetAllRecords 获取所有记录方法Vectorstus newVector 学生记录集Stringsql select fromStus try createConnection stmt conn createStatement rs stmt executeQuery sql while rs next Stustu newStu stu setNum rs getString Num stu setName stu setSex rs getString Sex charAt 0 stu setSpecialty stu setYear rs getInt Year stus add stu catch Exceptione JOptionPane showMessageDialog finally this closeResultSet this closeStatement closeConnection returnstus 按学号查找学生记录方法 找到 返回Stu对象 否则 返回nullpublicStusearchRecord Stringnum 查找学生记录方法Stustu null Stringsql select fromStuswhereNum try createConnection prpstmt conn prepareStatement sql prpstmt setString 1 num rs prpstmt executeQuery if rs next 如果查找到记录stu newStu 构建学生对象stu setNum rs getString Num catch Exceptione finally closeStatement closeConnection returnstu 添加一条学生记录方法 成功 返回1 不成功 返回0 publicintaddRecord Stustu 添加学生记录方法Stringsql insertintoStus Num Name Sex Specialty Year values intrecCount 0 try createConnection prpstmt conn prepareStatement sql prpstmt setString 1 stu getNum recCount prpstmt executeUpdate 执行更新 catch SQLExceptionse finally closeStatement closeConnection returnrecCount 修改一条学生记录 成功 返回1 不成功 返回0 publicintupdateRecord Stustu 修改学生记录方法Stringsql updateStussetName Sex Specialty Year whereNum intrecCount 0 try createConnection prpstmt conn prepareStatement sql prpstmt setString 1 stu getName recCount prpstmt executeUpdate 执行更新 catch SQLExceptionse finally closeStatement closeConnection returnrecCount 删除一条学生记录 成功 返回1 更新语句数目 不成功 返回0 publicintdeleteRecord Stustu 删除学生记录方法Stringsql deletefromStuswhereNum intrecCount 0 try createConnection prpstmt conn prepareStatement sql prpstmt setString 1 stu getNum recCount prpstmt executeUpdate 执行更新 catch SQLExceptionse finally closeStatement closeConnection returnrecCount 21 6 4业务逻辑层 例21 5 继续编写学生管理程序的业务逻辑层代码 publicclassStuBusinessLogic privatestaticStuDataAccessdataAccess newStuDataAccess 与数据层关联privatestaticVectorstus newVector 学生集privatestaticinttotal 元素总数privatestaticintstusIndex 索引publicStuBusinessLogic stus clear stus dataAccess getAllRecords 调用数据层方法total stus size stusIndex 0 publicstaticVectorgetStus 获取所有学生记录if stus isEmpty stus clear stus dataAccess getAllRecords 调用数据层方法total stus size returnstus publicstaticVectorreGetDBAllRecords 重获库记录stus clear stus dataAccess getAllRecords 调用数据层方法total stus size returnstus publicstaticintgetTotal returntotal 获取记录总数publicStugetFirstStu 获取学生集首记录if stus size 0 stusIndex 0 returnstus get stusIndex returnnull publicStugetPreviousStu 获取学生集上一记录if stus size 0 stusIndex if stusIndex 1 stusIndex total 1 returnstus get stusIndex returnnull publicStugetNextStu 获取学生集下一记录publicStugetLastStu 获取学生集尾记录publicStugetCurrentStu 获取学生集当前记录 在学生集中查找对象 返回元素索引 为空或不存在则为 1publicintgetIndex Stustu 查找学生集元素intindex 1 if stu null for inti 0 i total i if stu getNum equals stus get i getNum index i break returnindex 在学生集中添加一个元素 非空的学生对象 publicvoidaddStuObj Stustu 添加学生集元素if stu null stus add stu Collections sort stus stusIndex getIndex stu total 在学生集中修改元素 学生对象 publicvoidupdateStuObj Stustu 修改学生集元素intindex getIndex stu if index 0 添加学生库记录 成功返回1 已存在返回0 无法添加返回 1publicintaddStu Stustu 添加学生库记录intresult 0 if stu null result 1 result dataAccess addRecord stu if result 1 addStuObj stu returnresult 修改学生库记录 成功返回1 不成功返回0或 1publicintupdateStu Stustu 修改学生库记录intresult 0 if stu null result 1 result dataAccess updateRecord stu if result 1 updateStuObj stu returnresult 删除学生库记录 成功返回1 不成功返回0或 1publicintdeleteStu Stustu 删除学生库记录 StuBusinessLogic类位于程序的中间层 起承上启下作用 表示层将直接引用该层 它则直接引用数据层 StuBusinessLogic字段suts用于存放所有学生对象 类型是泛型集合Vector 即suts是学生集 它对应数据库表的所有记录 实体类Stu的对象则是一个学生对象 它只对应数据库表的一条记录 StuBusinessLogic类成员方法中 除了通过数据层对数据库操作的方法 还有获取学生集suts的首 尾 上 下元素和当前元素等方法 这些方法将直接被表示层调用 该类也定义了对学生集元素进行增 删 改的方法 供更新stus数据调用 21 6 5表示层 学生信息管理程序的表示层有3个类 主界面窗框类 添加 修改记录对话框类 还有程序入口主类 例21 6 编写学生信息管理程序的主界面窗框类 publicclassStuManFrameextendsJFrame privatestaticfinallongserialVersionUID 10L 序列化版本号privateStuBusinessLogicstuLogic newStuBusinessLogic 关联业务逻辑层privateStustu newStu 实体类privateStuManFramethisObj this 当前对象privateJLabellabelNum newJLabel 学号 5个标签privateJTextFieldtextFieldNum newJTextField 8 5个只读文本框privateJButtonbuttonFirst newJButton 首记录 按钮privateJLabellabelInputNum newJLabel 请输入学号 privateJTextFieldtextFieldInputNum newJTextField 8 privateJButtonbuttonSearch newJButton 查找 按钮privateJButtonbuttonAdd newJButton 添加 privateJButtonbuttonUpdate newJButton 修改 privateJButtonbuttonDelete newJButton 删除 privateJLabellabelBrowse newJLabel 浏览区 privateJListlist 列表框privateJScrollPanescrollPane 放置列表框的滚动窗格privateJButtonbuttonBrowse newJButton 浏览 newJButton 刷新 newJButton 取消浏览 privateJPanelpanUp newJPanel 上部面板privateGridLayoutgridLay newGridLayout 6 1 privateJPanelpanUp1 newJPanel 6个面板privateJPanelpanDown newJPanel 下部面板privateBorderLayoutborderLay newBorderLayout privateJPanelpanDownSouth newJPanel publicStuManFrame 构造方法this setTitle 三层结构学生信息管理程序 initialize 调用初始化方法 privatevoidinitialize 初始化方法textFieldNum setEditable false panUp1 add labelNum panUp1 add textFieldNum panUp2 add labelName labelTitle setVisible false labelBrowse setForeground Color WHITE labelTotal setForeground Color YELLOW panUp6 setBackground Color BLUE panUp6 add labelBrowse panUp6 add labelTotal panUp setLayout gridLay 上部面板设置6行1列网格布局panUp add panUp1 panUp add panUp2 panDown setLayout borderLay 下部面板设置边框布局panDown add labelTitle BorderLayout NORTH panDownSouth setBackground Color LIGHT GRAY panDownSouth add buttonBrowse panDown add panDownSouth BorderLayout SOUTH stu stuLogic getFirstStu this displayRecord stu 显示一个学生记录list newJList StuBusinessLogic getStus 学生集列表scrollPane newJScrollPane list 构建滚动窗格panDown add scrollPane BorderLayout CENTER scrollPane setVisible false 暂不显示滚动窗格this setLayout newGridLayout 2 1 窗框分上下两部分this add panUp this add panDown 按钮添加动作事件监听器 buttonFirst addActionListener newActionHandler buttonPre addActionListener newActionHandler buttonRefresh setEnabled false buttonCancelBrowse setEnabled false 按钮动作事件监听处理类 内部类 classActionHandlerimplementsActionListener publicvoidactionPerformed ActionEvente if e getSource buttonFirst 首记录 按钮stu stuLogic getFirstStu 调用业务逻辑层方法displayRecord stu 显示学生记录 elseif e getSource buttonPre 上记录 stu stuLogic getPreviousStu elseif e getSource buttonSearch 按学号 查找 Stringnum textFieldInputNum getText trim if num length 0 num null null 请输入学号再查找 textFieldInputNum requestFocus else stu stuLogic searchStu num if stu null null 学号为 num 的记录不存在 displayRecord stu elseif e getSource buttonAdd 先查找再 添加 Stringnum textFieldInputNum getText trim if num length 0 请输入要添加的学号 textFieldInputNum requestFocus elseif num matches d 8 学号不是8位数字 学号必须是8位数字 textFieldInputNum requestFocus else stu stuLogic searchStu num if stu null 该学号记录已存在 else 显示添加记录模式对话框 进行记录添加操作 AddDialogdialog newAddDialog thisObj true num stu dialog getStu 获取添加的学生对象 displayRecord stu elseif e getSource buttonUpdate 先查找再 修改 Stringnum textFieldInputNum getText trim if num length 0 num ma

温馨提示

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

评论

0/150

提交评论