淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 面向对象课程设计 选题名称: 教师信息管理系统 姓 名: 黄平 学 号: 2011122615 专业班级: 软件112 系 (院): 计算机工程学院 设计时间: 2013.6.14~2013.6.28 设计地点: 软件实验室、教室
指导教师评语: 成绩: 签名: 年 月 日 面向对象课程设计报告 第 2 页,共 19 页
1.课程设计目的 《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。 2.课程设计任务与要求: 教师信息管理系统, 使用JDBC-ODBC数据库接口,完成对后台数据库的插入、删除、修改、查询等操作。数据库系统可采用Sql Server、Access等,要根据完成的不同功能在数据库系统中定义有关的各种信息表。 课程设计可选用NetBeans、Eclipse、JBuilder等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。建议采用UML建模技术进行系统的分析设计,在Visio中画出系统用例图和类图,并将UML图复制到设计报告中。 通过这次设计,要求掌握以下内容: 1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用 2)类、包、接口的定义与使用 3)常用工具类与算法的实现(数组、向量、字符串、链表) 4)Java常用标准GUI组件及其事件处理 5)Java的异常处理机制 6)Java的数据库连接技术 7)Java的多线程技术与动画制作 8)Java的网络编程 3.课程设计说明书 3.1用户需求分析: 选题:教师信息管理系统 在当今的信息时代,特别是在计算机网络迅猛发展的背景下,各种信息资料扑面而来,而对有效信息的管理即是对信息的最有效利用,从而使得以java技术为基础的各种管理信息的软件得到广泛的应用。在我们的工作生活中,常常需要一个稳定高效的系统管理存储面向对象课程设计报告 第 3 页,共 19 页
需要的资料,需要一个合理的平台便利地查询的我们所需要的的信息,因此,本次课程设计主要针对教师这一人群做了一个信息管理系统,以利于集中教师的信息,有效地查询管理。系统实现的功能分别对一般的教师用户以及信息管理员而言,可以实现教师对于伙伴的信息查询,可以通过管理员对教师信息的增加,删除,修改,查询等功能。对于教师信息的存储使用数据库,实现动态的变动。无论是教师或管理员都能实现在简单的操作界面操作浏览所需信息。 系统用例图如下: 3.2概要设计: 这个教师信息管理系统用了十个类,分别实现了系统的登陆,数据的增加,删除,修改,查询,系统信息显示等功能,具体类实现的详细功能给出了对应的方法,各个类中都涉及到了事件的监听和处理,面板窗口的布局,在使用netbeans编写的条件下,面板控件较易于布局,同时代码更有条理,同时,后台数据库选用access,通过jdbc-odbc桥连接数据源,从而在界面调用到后台数据。 各个类的类图如下: 面向对象课程设计报告 第 4 页,共 19 页
登陆界面login类: 一般用户FrameUserMain类: 面向对象课程设计报告 第 5 页,共 19 页
管理员FrameAdminMain类: 修改教师DialogUpdateAbout类: 面向对象课程设计报告 第 6 页,共 19 页
增加教师DialogNewTea类 删除教师DialogDelAbout类: 面向对象课程设计报告 第 7 页,共 19 页
管理员查询教师信息DiologSeeTea类: 一般用户查询教师信息DialogSeeTeaUser类 面向对象课程设计报告 第 8 页,共 19 页
关于系统信息的DialogAbout类 3.3详细设计: 登陆界面主要实现代码: private void ButtonLoginMouseClicked(java.awt.event.MouseEvent evt) { if( RadioButtonAdmin.isSelected() ) //管理员登录 { try { Class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\"); Connection con=DriverManager.getConnection(\"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=src/teainfosysrem/data/User.mdb\"); Statement stmt=con.createStatement(); ResultSet rs = stmt.executeQuery(\" SELECT password FROM admin WHERE username='admin' \"); String password=null; // 密码 while( rs.next() ) { password=rs.getString(1); } if(TextFieldUsername.getText().equals(\"admin\") && String.valueOf(TextFieldPassword.getPassword()).equals(password) ) { this.dispose(); new FrameAdminMain(); } else { JOptionPane.showMessageDialog(null,\"用户名或密码错误,请重新输入!\"); } con.close(); 面向对象课程设计报告 第 9 页,共 19 页
} catch(Exception e) { } } else // 普通用户登录 { String username=TextFieldUsername.getText(); String password=String.valueOf(TextFieldPassword.getPassword()); try { Class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\"); Connection con=DriverManager.getConnection(\"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=src/teainfosysrem/data/User.mdb\"); Statement stmt=con.createStatement(); ResultSet rs = stmt.executeQuery(\"SELECT * FROM ordinary\"); boolean isfind=false; while( rs.next() ) { if( username.equals( rs.getString(1) ) ) { isfind=true; if( password.equals( rs.getString(2) ) ) { this.dispose(); new FrameUserMain(); } else { JOptionPane.showMessageDialog(null,\"密码错误,请重新输入!\"); } break; } } if( !isfind ) { JOptionPane.showMessageDialog(null,\"不存在此用户名,请注册!\"); } con.close(); stmt.close(); rs.close(); } 面向对象课程设计报告 第 10 页,共 19 页
catch(Exception e) { } } } 管理员界面响应事件主要代码如下: public void getFromData() { try { //连接数据库 Class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\"); Connection con=DriverManager.getConnection(\"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=src/teainfosysrem/data/TeaInfo.mdb\"); Statement stmt=con.createStatement(); String sql=\"SELECT * FROM teainfo\"; ResultSet res=stmt.executeQuery(sql); String str[][]=new String[100][100]; int row=0; while( res.next() ) { row++; for(int j=1;j<=14;j++) { str[row][j]=res.getString(j); } } con.close(); TableModel model=this.TableInfo.getModel(); for(int i=0;i Driver (*.mdb)};DBQ=src/teainfosysrem/data/TeaInfo.mdb\"); Statement stmt = con.createStatement(); String sql = \"SELECT * FROM teainfo WHERE sname='\"+str+\"'\"; ResultSet rs = stmt.executeQuery(sql); if( !rs.next() ) { JOptionPane.showMessageDialog(null,\"数据库中没用你所要找的人!\"); } else { String snum=rs.getString(1); new DialogSeeTea(this,snum,TableInfo,true); } con.close(); } catch (Exception e) { e.printStackTrace(); } } } (二)用户界面的查询功能实现与管理员界面的查询功能实现类似,不再展示 (三)修改教师数据的代码 if( num.equals(\"\") || name.equals(\"\") || place.equals(\"\") || college.equals(\"\") || skill.equals(\"\") || phone.equals(\"\") || grade.equals(\"\") || email.equals(\"\") || qq.equals(\"\") || remarks.equals(\"\") ) { JOptionPane.showMessageDialog(null,\"请填满所有空白处!\"); } else { try { 建立jdbcodbc桥,连接数据库 } this.TableInfo.setModel(model); this.dispose(); con.close(); } catch(Exception e) { e.printStackTrace(); } } } 面向对象课程设计报告 第 13 页,共 19 页 删除数据主要实现代码 public void getFromData() { try { Class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\"); Connection con=DriverManager.getConnection(\"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=src/teainfosysrem/data/TeaInfo.mdb\"); Statement stmt=con.createStatement(); String sql=\"SELECT * FROM teainfo WHERE number='\"+this.num+\"'\";//从数据库选取符合要求的数据,实现删除数据的功能 ResultSet rs = stmt.executeQuery(sql); while( rs.next() ) { //逐条读取数据库中的内容 } con.close(); } catch(Exception e) { e.printStackTrace(); } } 增加教师实现主要代码 if( num.equals(\"\") || name.equals(\"\") || place.equals(\"\") || college.equals(\"\") || skill.equals(\"\") || phone.equals(\"\") || grade.equals(\"\") || email.equals(\"\") || qq.equals(\"\") || remarks.equals(\"\") ) { JOptionPane.showMessageDialog(null,\"请填满所有空白处!\"); } else { try { Class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\"); Connection con=DriverManager.getConnection(\"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=src/teainfosysrem/data/TeaInfo.mdb\"); Statement stmt=con.createStatement(); String sql=\"INSERT INTO teainfo VALUES('\"+num+\"','\"+name+\"','\"+year+\"','\"+month+\"','\"+sex+\"','\"+school+\"','\"+place+\"','\"+college+\"','\"+skill+\"','\"+phone+\"','\"+grade+\"','\"+email+\"','\"+qq+\"','\"+remarks+\"')\"; stmt.executeUpdate(sql); String sqll=\"SELECT * FROM teainfo\"; ResultSet res=stmt.executeQuery(sqll); String str[][]=new String[100][100]; int row=0; 面向对象课程设计报告 第 14 页,共 19 页 while( res.next() ) { row++; for(int j=1;j<=14;j++) { str[row][j]=res.getString(j); } } TableModel model=this.TableInfo.getModel(); for(int i=0;i (2)管理员登陆界面 (3)普通用户登陆后的界面 面向对象课程设计报告 第 17 页,共 19 页 (4)增加教师信息界面 (5)删除教师信息的界面 面向对象课程设计报告 第 18 页,共 19 页 (6)查询教师信息显示的界面 (7)修改教师信息的界面 面向对象课程设计报告 第 19 页,共 19 页 5.课程设计心得 这次的课程设计,我做的是教师信息管理系统,第一次做系统,有点不知所以然,因此参照了学生信息管理系统,在netbeans的环境下重新布局了界面,更改了方法以及更新了access数据库。在此过程中遇到了不少的问题,首先数据库的安装倒成了首要难题,在网上搜寻了比较久的时间,没有找到可用的access软件,后来在学长的帮助下轻松的解决了这一问题。在数据库的连接中,一开始没有连接成功,原因是在搭建jdbc-odbc桥连接时,由于粗心没有注意细节问题,代码有误导致系统数据没有调出来也不能成功存储。以后一定要心思缜密一点,养成良好的编写习惯,以免代码写成后还伴随着许多括号没配对,标点忘切换的问题。 通过这次课程设计,我觉得无论是做教师管理系统,还是做别的系统,都有共通的地方,无非是界面的设计,相应事件的响应,方法的使用和数据库的连接这样一个流程处理。基础知识学扎实了,可以做到对各种形式的要求作出有力的应变。同时,在写代码过程中,我接触到了很对课本以外的有用知识,比如怎样控制一个界面显示的是windows系统的界面,比如怎样用tabel model存储从数据库里调出来的数据,再分别排放在界面的表格中等等。学无止境,我觉得自己要真正掌握一门学问,需要的不单单是摊开课本一味的看,更重要的是亲手实践,只有亲自编写过代码,才会对知识理解得透彻明白。在编写过程中,会遇到各种问题,一些平时自以为懂得的问题,其实没有真正的懂,然后会翻书找知识点,会上网百度,会请教别人怎样解决问题,在这一过程,能够学到很多有用的知识,这些知识就是经验,就成了自己真正的财富了。当然,我觉得在做课程设计的过程是非常煎熬的,基础知识没扎实,无论是吃饭还是行走过程中,都在想着某个知识是怎样用上的,现在,课程设计终于告了一段落,没有放松的感觉,只是越发的感觉自己知识面太狭隘,课程设计虽然结束了,但是学习还在继续,今后得多接触这样的课题,避免临阵磨枪的尴尬局面。 参考资料:《Java语言 实验与课程设计指导》 《java2 实用教程(第三版)》 因篇幅问题不能全部显示,请点此查看更多更全内容