实验八基于某图形用户界面的JDBC程序开发.docx
《实验八基于某图形用户界面的JDBC程序开发.docx》由会员分享,可在线阅读,更多相关《实验八基于某图形用户界面的JDBC程序开发.docx(14页珍藏版)》请在冰豆网上搜索。
![实验八基于某图形用户界面的JDBC程序开发.docx](https://file1.bdocx.com/fileroot1/2022-11/22/dda86329-58ed-4df1-b67a-118f6f2d5049/dda86329-58ed-4df1-b67a-118f6f2d50491.gif)
实验八基于某图形用户界面的JDBC程序开发
实验4基于图形用户界面的JDBC程序开发
(2)
淮海工学院计算机科学系
实验报告书
课程名:
__Java___________
题目:
_基于图形用户界面的JDBC程序开发
班级:
_____________
学号:
____________
姓名:
_____________
一、实验目的
熟练运用GUI标准组件和布局管理器,正确合理地利用常用AWT和Swing组件进行图形界面的设计;理解Java的事件处理机制,正确运用Java的事件处理机制及事件委托模型编写图形界面组件的事件处理程序;理解Java多线程机制,掌握线程使用方法。
理解JDBC的数据库访问编程原理,正确利用JDBC技术编写以数据库应用为核心的软件系统,并在设计中灵活运用之前所学的Java语言面向对象的编程技术。
二、实验环境
操作系统:
windows2000或WindowXP
集成开发环境:
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)程序代码
importjava.awt.*;
importjava.awt.event.*;
classCMextendsFrameimplementsActionListener
{
CMBookstart;//当做链表的开头
Panel操作栏;
Label,定价,显示;
TextField栏,定价栏;
Button新增计算机图书,修改定价;
TextArea显示容;
CM()
{
super("计算机图书类操作图形用户界面");
start=null;
显示=newLabel();
显示容=newTextArea();
显示容.setSize(80,50);
新增计算机图书=newButton("新增计算机图书");
修改定价=newButton("修改定价");
新增计算机图书.addActionListener(this);
修改定价.addActionListener(this);
操作栏=newPanel();
操作栏.setSize(60,5);
=newLabel("");
定价=newLabel("定价");
栏=newTextField(10);
定价栏=newTextField(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();
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==新增计算机图书)
{
Stringone=栏.getText();
Stringtwo=定价栏.getText();
if(Integer.parseInt(two)<0)
{
显示.setText("价格不能为负数");
}
else
{
CMBookmid=newCMBook(one,Integer.parseInt(two));
mid.next=start;
start=mid;
显示容.append(mid.toString());
}
}
elseif(e.getSource()==修改定价)
{
intpricenew;
CMBookpoint;
Stringone,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;
}
}
}
}
}
abstractclassBook
{
String图书类别;
abstractString图书介绍();
}
classCMBookextendsBook
{
CMBooknext;//额外增加一个引用
String;
int定价;
String图书介绍()
{
return"书籍是人类进步的阶梯";
}
CMBook()
{
图书类别="计算机图书";
next=null;
}
CMBook(String,int定价)
{
this.=;
this.定价=定价;
图书类别="计算机图书";
next=null;
}
String查看()
{
return;
}
void修改定价(int定价)
{
this.定价=定价;
}
publicStringtoString()
{
return("类别"+图书类别+"|"++"|定价"+定价+"图书介绍|书籍是人类进步的阶梯\n");
}
}
publicclassBookcdx
{
publicstaticvoidmain(Stringargs[])
{
newCM();
}
}
(2)相应运行结果
2、(选做题)改正以下程序中出现的错误,并进行注释说明
importjava.applet.applet;
importjava.awt.*;
publicclasstestextendsApplet
{
Labelprompt1,prompt2;
TextFieldinputNo1,inputName1
DepartmentMyDept1;
voidinit()
{prompt1=newLabel("请输入部门的编号:
");
inputNo1=newTextField(5);
prompt2=newLabel("请输入部门的名称:
");
inputName1=newTextField(5);
add(prompt1);
add(inputNo1);
add(prompt2);
add(inputName1);
MyDept1=newDepartment();
inputNo1.addAction(this);
}
publicpaint(graphicg)
{
g.drawstring(MyDept1.toString(),20,100);
}
publicvoidaction(ActionEvente)
{
if(e.getSource==inputNo1)
MyDept1.setDeptNo(inputNo1.getText());
elseif(e.getSource()=inputName1)
MyDept1.m_DeptName=newString(inputName1.getText());
repaint();
returnTrue;
}
}
finalclassDepartment
{
intm_DeptNo=10;
staticm_DeptName;
StringgetDeptNo()
{
returnm_DeptNo;
}
setDeptNo(intnewno)
{
if(newno>0)
{
m_DeptNo=newno;
returntrue;
}
else
returnfalse;
}
publicStringtoString()
{
return("部门编号:
"+getDeptNo()+";"
+"部门名称:
"+m_DeptName+";");
}
}
改正:
importjava.applet.*;//引入包
importjava.awt.*;//引入包
importjava.awt.event.*;//分号
publicclassTestextendsAppletimplementsActionListener//extend错误
{
Labelprompt1,prompt2;
TextFieldinputNo1,inputName1;//分号
DepartmentMyDept1;
publicvoidinit()//少public
{prompt1=newLabel("请输入部门的编号:
");
inputNo1=newTextField(5);
prompt2=newLabel("请输入部门的名称:
");
inputName1=newTextField(5);
add(prompt1);
add(inputNo1);
add(prompt2);
add(inputName1);//添加inputName1
MyDept1=newDepartment();
inputNo1.addActionListener(this);//添加this
inputName1.addActionListener(this);
this.setVisible(true);//显示输出
}
publicvoidpaint(Graphicsg)//单词错误Graphics
{
g.drawString(MyDept1.toString(),20,100);//drawString
}
publicvoidactionPerformed(ActionEvente)//action拼写错误
{
if(e.getSource()==inputNo1)
MyDept1.setDeptNo(Integer.parseInt(inputNo1.getText()));//类型转换成字符
elseif(e.getSource()==inputName1)//判断是相等用==
MyDept1.m_DeptName=newString(inputName1.getText());
//repaint();
//returnTrue;//返回为空不需要
}
}
classDepartment//final不需要
{
intm_DeptNo=10;//分号
Stringm_DeptName;//类型没有给出
StringgetDeptNo()//S
{
returnInteger.toString(m_DeptNo);//类型
}
booleansetDeptNo(intnewno)//返回类型没有给出
{
if(newno>0)
{
m_DeptNo=newno;
returntrue;
}
else
returnfalse;
}
publicStringtoString()//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以上)和数据查询应用。
(1)选择SQLServer2000数据库,建立Test数据库和相关users表(字段userid,username,userpass),用户名111,密码111;
(2)以继承HttpServlet方式开发Servlet,完成以下数据库查询显示代码并调试相关结果。
packagejs.hit;
importjavax.servlet.http.*;
importjava.sql.*;
importjava.io.*;
publicclassDataSelextendsHttpServlet{
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres){
try{
res.setContentType("text/html;charset=gbk");
PrintWriterout=res.getWriter();
Stringurl="jdbc:
microsoft:
sqlserver:
//127.0.0.1:
1433;DatabaseName=test";
Stringuser="111";
Stringpassword="111";
Stringsqlsel="selectuserid,username,userpassfromusers";
Class.forName(".microsoft.jdbc.sqlserver.SQLServerDriver");
Connection=DriverManager.getConnection(url,user,password);
Statementsm=.createStatement();
ResultSetrs=sm.executeQuery(sqlsel);
while(rs.next())
{
out.println(rs.getString
(1)+"");
out.println(rs.getString
(2)+"");
out.println(rs.getString(3)+"");
out.println("
");
}
rs.close();
sm.close();
cn.close();
}
catch(Exceptionex){
}
}
publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres){
this.doGet(req,res);
}
}
(三)在上例数据库基础上,继续以继承HttpServlet方式开发另一个Servlet,完成基于Servlet的数据更新应用,参考代码如下。
packagejs.hit;
importjavax.servlet.http.*;
importjava.io.*;
importjava.sql.*;
publicclassDataUpdextendsHttpServlet{
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres){
try{
res.setContentType("text/html;charset=gbk");
PrintWriterout=res.getWriter();
Stringurl="jdbc:
microsoft:
sqlserver:
//127.0.0.1:
1433;DatabaseName=test";
Stringuser="111";
Stringpassword="111";
Stringsqlupd="updateuserssetuserpass='8'whereuserid=3";
Class.forName(".microsoft.jdbc.sqlserver.SQLServerDriver");
Connection=DriverManager.getConnection(url,user,password);
Statementsm=.createStatement();
sm.executeUpdate(sqlupd);
sm.close();
cn.close();
}
catch(Exceptionex){
}
}
publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres){
this.doGet(req,res);
}
}
六、实验分析与体会
(1)请简述使用JDBC技术编写数据库应用关键步骤
1、装库,建库;
2、找到相应的数据库连接包,sql、oracle都有对应的jar包;
2、写一个类,结合对应的jar包来连接数据库;
3、再写一个类,通过第二步的类用来对数据库操作。