实验4基于图形用户界面的JDBC程序开发 (2)淮海工学院计算机科学系实验报告书课程名:__ Java___________题目:_基于图形用户界面的JDBC程序开发班级:__ ___________学号:__ __________姓名:__ __________ _一、实验目的熟练运用GUI标准组件和布局管理器,正确合理地利用常用AWT和Swing组件进行图形界面的设计;理解Java的事件处理机制,正确运用Java的事件处理机制及事件委托模型编写图形界面组件的事件处理程序;理解Java多线程机制,掌握线程使用方法。
理解JDBC的数据库访问编程原理,正确利用JDBC技术编写以数据库应用为核心的软件系统,并在设计中灵活运用之前所学的Java语言面向对象的编程技术。
二、实验环境操作系统:windows 2000 或 Window XP集成开发环境:JDK1.6及以上版本三、实验学时2学时,必做实验。
四、实验内容(1)进一步熟悉JavaGUI标准组件和布局管理器、正确合理地利用常用AWT和Swing组件进行图形界面的设计;理解Java的事件处理机制,正确运用Java的事件处理机制及事件委托模型编写图形界面组件的事件处理程序;实践程序调试方法、纠错能力及编程规范性等;理解JDBC的数据库访问编程原理,正确利用JDBC技术编写以各种数据库应用;(2)按以下各题目具体要求调试或编写相关算法程序五、实验步骤与结果1 请按照以下功能要求编写并调试相关程序(1) 请定义一个抽象的“科学图书”类,其中包含1个公共的抽象方法:图书介绍;1个属性为:图书类别 (字符串类型);(2) 定义一个“计算机图书”子类(继承于“科学图书”类),其中包括2个域:出版社、定价;2个构造方法:一个为无参构造方法,在该无参构造方法中将“图书类别”设置为“计算机图书”,一个带2个参数(出版社、定价);不少于2个成员方法:分别用来查看出版社、修改定价,图书介绍文字可自编,并编写输出计算机图书全部信息的toString()方法。
(3) 编写一个图形用户界面,用来测试能否正确创建计算机图书类的对象、能否正常调用其方法,参考界面如下。
必须实现的基本功能是:1)单击图中的“新增计算机图书”按钮,则可显示出新增的计算机图书信息(显示信息的控件不限,用文本域、列表框、表格均可),要求添加的计算机图书不少于2本,如下图所示:图1 运行截图——新增计算机图书2)单击图中的“修改定价”按钮,可修改其中某本图书的定价,并在下方显示出修改后的结果请按照实验内容具体要求完成相关设计与编程,实验步骤;(1) 程序代码import java.awt.*;import java.awt.event.*;class CM extends Frame implements ActionListener{CMBook start; //当做链表的开头Panel 操作栏;Label 出版社,定价,显示;TextField 出版社栏,定价栏;Button 新增计算机图书,修改定价;TextArea 显示内容;CM(){super("计算机图书类操作图形用户界面");start=null;显示=new Label();显示内容=new TextArea();显示内容.setSize(80,50);新增计算机图书=new Button("新增计算机图书");修改定价=new Button("修改定价");新增计算机图书.addActionListener(this);修改定价.addActionListener(this);操作栏=new Panel();操作栏.setSize(60,5);出版社=new Label("出版社");定价=new Label("定价");出版社栏=new TextField(10);定价栏=new TextField(5);操作栏.add(出版社);操作栏.add(出版社栏);操作栏.add(定价);操作栏.add(定价栏);操作栏.add(新增计算机图书);操作栏.add(修改定价);setTitle("计算机图书类操作的图形界面");add(操作栏,BorderLayout.NORTH);add(显示内容,BorderLayout.CENTER);add(显示,BorderLayout.SOUTH);setBounds(300,300,500,500);setVisible(true);validate();}public void actionPerformed(ActionEvent e){if(e.getSource()==新增计算机图书){String one=出版社栏.getText();String two=定价栏.getText();if(Integer.parseInt(two)<0){显示.setText("价格不能为负数");}else{CMBook mid=new CMBook(one,Integer.parseInt(two));mid.next=start;start=mid;显示内容.append(mid.toString());}}else if(e.getSource()==修改定价){int pricenew;CMBook point;String one,two,three;one=出版社栏.getText();two=定价栏.getText();point=start;while(true){if(point==null){显示.setText("查找不到该类别");break;}if(point.出版社.equals(one)){point.定价=Integer.parseInt(two);显示内容.append("价格修改完成"+point.toString());break;}else{point=point.next;}}}}}abstract class Book{String 图书类别;abstract String 图书介绍();}class CMBook extends Book{CMBook next; //额外增加一个引用String 出版社;int 定价;String 图书介绍(){return "书籍是人类进步的阶梯";}CMBook(){图书类别="计算机图书";next=null;}CMBook(String 出版社,int 定价){this.出版社=出版社;this.定价=定价;图书类别="计算机图书";next=null;}String 查看出版社(){return 出版社;}void 修改定价(int 定价){this.定价=定价;}public String toString(){return ("类别"+图书类别+"|出版社"+出版社+"|定价"+定价+"图书介绍|书籍是人类进步的阶梯\n");}}public class Bookcdx{public static void main(String args[]){new CM();}}(2) 相应运行结果2、(选做题) 改正以下程序中出现的错误,并进行注释说明import java.applet.applet;import java.awt.*;public class test extends Applet{Label prompt1,prompt2;TextField inputNo1,inputName1Department MyDept1;void init(){ prompt1=new Label("请输入部门的编号:");inputNo1=new TextField(5);prompt2=new Label("请输入部门的名称:");inputName1=new TextField(5);add(prompt1);add(inputNo1);add(prompt2);add(inputName1);MyDept1=new Department ( );inputNo1.addAction(this);}public paint(graphic g){g.drawstring(MyDept1.toString(),20,100);}public void action(ActionEvent e){if(e.getSource==inputNo1)MyDept1.setDeptNo(inputNo1.getText());else if(e.getSource()=inputName1)MyDept1.m_DeptName=new String(inputName1.getText()); repaint();return True;}}final class Department{int m_DeptNo=10;static m_DeptName;String getDeptNo(){return m_DeptNo;}setDeptNo(int newno){if(newno>0){m_DeptNo=newno;return true;}elsereturn false;}public String toString(){return("部门编号:"+getDeptNo()+"; "+"部门名称:" +m_DeptName+"; ");}}改正:import java.applet.*;// 引入包import java.awt.*; // 引入包import java.awt.event.*;//分号public class Test extends Applet implements ActionListener // extend错误{Label prompt1,prompt2;TextField inputNo1,inputName1;//分号Department MyDept1;public void init() //少public{ prompt1=new Label("请输入部门的编号:");inputNo1=new TextField(5);prompt2=new Label("请输入部门的名称:");inputName1=new TextField(5);add(prompt1);add(inputNo1);add(prompt2);add(inputName1);//添加inputName1MyDept1=new Department ( );inputNo1.addActionListener(this);//添加thisinputName1.addActionListener(this);this.setVisible(true);//显示输出}public void paint(Graphics g)// 单词错误Graphics{g.drawString(MyDept1.toString(),20,100); //drawString}public void actionPerformed(ActionEvent e)//action 拼写错误{if(e.getSource()==inputNo1)MyDept1.setDeptNo(Integer.parseInt(inputNo1.getText())); //类型转换成字符else if(e.getSource()==inputName1)//判断是相等用==MyDept1.m_DeptName=new String(inputName1.getText());//repaint();//return True; //返回为空不需要}}class Department //final不需要{int m_DeptNo=10; //分号String m_DeptName; //类型没有给出String getDeptNo() //S{return Integer.toString(m_DeptNo); //类型}boolean setDeptNo(int newno)//返回类型没有给出{if(newno>0){m_DeptNo=newno;return true;}elsereturn false;}public String toString() //S{return("部门编号:"+getDeptNo()+"; "+"部门名称:" +m_DeptName+"; ");}}3、(选做题) 请按照以下功能要求编写并调试相关程序实验内容:(1) 熟练Tomcat安装与配置;(2) 熟练servlet部署、三种开发方式;(3) 练习JDBC连接;(4) 练习基于JDBC与Servlet的数据库查询、更新(添加、删除、修改)(一)实验步骤:熟悉Tomcat安装,servlet部署步骤;(1) 依次创建WEB-INF、classes、lib、web.xml等目录结构(2) 完成相关Servlet程序并调试(二)以继承HttpServlet方式开发Servlet,完成基于Servlet的JDBC连接(数据库选择SQLServer2000以上)和数据查询应用。