异常处理的分数管理小系统.docx
- 文档编号:26995655
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:25
- 大小:199.01KB
异常处理的分数管理小系统.docx
《异常处理的分数管理小系统.docx》由会员分享,可在线阅读,更多相关《异常处理的分数管理小系统.docx(25页珍藏版)》请在冰豆网上搜索。
异常处理的分数管理小系统
1.编写一个能够进行异常处理的分数管理小系统,该程序可以是Application也可以是Applet。
该系统的界面可参照图1所示面板。
界面由上到下分为3个区域,上面是录入成绩的面板,中间是输入查询条件的面板,下面则是一个输出提示信息或查询结果的文本区。
图1分数管理界面
系统实现的功能包括:
录入成绩:
在录入按钮后面的录入信息框中输入学生姓名、课程名、分数之后,点击录入按钮,即可将此条成绩信息保存起来,要求将信息保存至一个文本文件中。
条件查询:
在查询框中输入查询条件(按姓名查询或查询某门课程的成绩),根据输入的条件从文本文件(数据库文件)中查询出学生成绩信息。
如要按姓名查询,输入学生的姓名,再点击查找按钮,即可将该学生所有成绩在面板下方的文本区中显示出来;如输入课程名查询,则返回该课程所有学生成绩。
要求程序采用抛出并捕获异常的方式处理各种可能遇到的异常情况,能处理的异常包括:
1)输入课程名错误。
程序预先设定共有三门课程,如“Java”和“C”和“Database”;共有10位学生,姓名自定。
如果输入的课程名不在设定的范围内,则应给出输入错误的警告信息。
2)录入的分数应该在0~100之间。
3)缺少必要的输入信息要给出错误警告信息。
比如在录入成绩时学生姓名、课程名和得分一项都不可以缺少;条件查询时,必须要给出查询的条件,是要查找某个学生的成绩还是查找某门课程的成绩。
1、实验结果
1、录入成绩
2、按姓名查询成绩
3、按课程名查询成绩
二、实验代码
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.sql.*;
publicclassstudentsextendsJFrameimplementsActionListener
{
staticJTextFieldt1=newJTextField();//文本框
staticJTextFieldt2=newJTextField();
staticJTextFieldt3=newJTextField();
staticJTextFieldt4=newJTextField();
staticJTextFieldt5=newJTextField();
staticJTextAreat6=newJTextArea();//文本区
staticJLabell1=newJLabel("姓名");//标签
staticJLabell2=newJLabel("课程名");
staticJLabell3=newJLabel("分数");
staticJLabell4=newJLabel("姓名");
staticJLabell5=newJLabel("课程名");
staticJButtonb1=newJButton("录入");//按钮
staticJButtonb2=newJButton("查找");
staticStringDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
staticStringconnectionStr="jdbc:
odbc:
student";
staticConnectioncon=null;
staticPreparedStatementpstmt=null;
staticPreparedStatementpstmt1=null;
staticResultSetrs=null;
publicstaticvoidmain(String[]args)throwsSQLException,ClassNotFoundException,NullPointerException
{
studentsf=newstudents();
f.setTitle("学生成绩管理系统");
FlowLayoutflow=newFlowLayout();
f.setLayout(null);
f.setSize(600,300);//设置窗口的大小
b1.setBounds(70,30,70,25);//设置按钮一的大小和位置
b2.setBounds(70,60,70,25);
t1.setBounds(210,30,70,25);//设置文本框一的大小和位置
t2.setBounds(350,30,70,25);
t3.setBounds(490,30,70,25);
t4.setBounds(210,60,70,25);
t5.setBounds(350,60,70,25);
t6.setBounds(210,90,260,200);
l1.setBounds(150,30,60,25);//设置标签一的大小和位置
l2.setBounds(290,30,60,25);
l3.setBounds(430,30,60,25);
l4.setBounds(150,60,60,25);
l5.setBounds(290,60,60,25);
f.setVisible(true);
b1.addActionListener(f);//加载监听器
b2.addActionListener(f);
Class.forName(DBDriver);//加载驱动器
con=DriverManager.getConnection(connectionStr,"sa","cqjtu");//连接数据源"
}
publicstudents()//构造函数
{
add(b1);
add(l1);
add(t1);
add(l2);
add(t2);
add(l3);
add(t3);
add(b2);
add(l4);
add(t4);
add(l5);
add(t5);
add(t6);
}
publicvoidactionPerformed(ActionEvente)//事件处理函数
{
Stringsq="insertinto成绩表values(?
?
?
)";
Stringfind="select*from成绩表where姓名=?
or课程名=?
";
PreparedStatementpstmt=null;
PreparedStatementpstmt1=null;
ResultSetrs=null;
JButtonbut=(JButton)e.getSource();
if(but==b1){
try{
pstmt=con.prepareStatement(sq);
}catch(SQLExceptionee){
System.out.println("程序异常"+ee);
System.exit(0);
}
}elseif(but==b2){
try{
pstmt1=con.prepareStatement(find);
}catch(SQLExceptionee){
System.out.println("程序异常"+ee);
System.exit(0);
}
}
//JButtonb=(JButton)e.getSource();
Stringtext1=t1.getText();
Stringtext2=t2.getText();
Stringtext3=t3.getText();
Stringtext4=t4.getText();
Stringtext5=t5.getText();
System.out.println(text4);
System.out.println(text5);
if(but==b1)
{
if(!
(text2.equals("Java")||text2.equals("C")||text2.equals("Database"))&&text1.length()!
=0&&text3.length()!
=0)
{
t6.setText("无法连接至服务器");
System.exit(0);
}
if(text3.length()>=4)
{
System.out.println(text3.length());
t6.setText("您录入的分数超过范围,请重新录入!
");
System.exit(0);
}
if(text1.length()==0||text2.length()==0||text3.length()==0)
{
t6.setText("无法连接至服务器");
System.exit(0);
}
try
{
pstmt.setString(1,text1);
pstmt.setString(2,text2);
pstmt.setString(3,text3);
pstmt.executeUpdate();
JOptionPane.showMessageDialog(null,"插入成功!
");
pstmt.close();
//con.close();//关闭连接
}
catch(SQLExceptionee)
{
System.out.println("程序异常"+ee);
System.exit(0);
}
catch(NullPointerExceptionee)
{
System.out.println("程序异常"+ee);
System.exit(0);
}
}
if(but==b2)
{
System.out.println("ok");
try
{
pstmt1.setString(1,text4);
pstmt1.setString(2,text5);
System.out.println("执行sql语句");
rs=pstmt1.executeQuery();//执行SQL语句
t6.setText("姓名课程名得分\n");
while(rs.next())
{
t6.append(rs.getString
(1)+""+rs.getString
(2)+""+rs.getString(3)+"\n");
}
rs.close();
pstmt1.close();
//con.close();
}
catch(SQLExceptionee)
{
System.out.println("程序异常"+ee);
System.exit(0);
}
}
}
}
2.首先建立如教案例9_1中数据库PMS(包括Person表、Department表、Education表)。
然后建立员工信息输入与统计界面,实现一个图形用户界面的数据库应用程序,该系统实现如下功能:
–按“员工登记”按钮后弹出的员工记录录入界面。
–菜单“选项”包括“员工登记”和“员工统计”两个菜单项。
点击“员工统计”将显示出当前员工数
程序运行界面如下:
一、实验结果
1.员工信息窗口
2.员工登记窗口
3.统计
4.系统按钮
二、实验代码
员工信息窗口
packagePims;
importjavax.swing.*;
importjavax.swing.border.Border;
importjavax.swing.border.TitledBorder;
importjava.awt.event.*;
importjava.awt.*;
importjava.sql.*;
importPims.PersonRegister;
publicclassPims{
staticPersonRegisterpersonRegister;
staticJFramejfrmPIMS=newJFrame("员工信息");
staticJPaneljpanPIMS=newJPanel();
staticJButtonjbunPersonRegister=newJButton("员工登记");
staticJButtonjbunExitSystem=newJButton("退出系统");
staticJMenuBarjMenuBar=newJMenuBar();
staticJMenujmenuOption=newJMenu("选项");
staticJMenujmenuSystem=newJMenu("系统");
staticJMenuItemjmiPersonRegister=newJMenuItem("员工登记");
staticJMenuItemjmiCount=newJMenuItem("统计");
staticJMenuItemjmiExitSystem=newJMenuItem("退出系统");
staticJMenuItemjmiAboutSystem=newJMenuItem("关于系统");
staticConnectioncon=null;
staticStatementstmt=null;
staticResultSetrs=null;
staticbooleanflag=true;
publicstaticvoidmain(String[]args){
//TODO自动生成的方法存根
//personRegister=newPersonRegister(con,stmt);
//面板的设置
//为现有的边框添加标题,先是用BorderFactory.createLineBorder(Color.BLUE)创建了蓝色边框,再添加标题
jpanPIMS.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLUE)
"员工登记系统",2,0));
jpanPIMS.setBackground(Color.lightGray);
jpanPIMS.setBounds(8,15,277,102);
jpanPIMS.setLayout(null);//取消frm的默认布局管理器,否则setlocation无效
//员工登记按钮设置
jbunPersonRegister.setBounds(20,40,100,30);
jbunPersonRegister.setBackground(Color.lightGray);
jpanPIMS.add(jbunPersonRegister);
//退出系统按钮设置
jbunExitSystem.setBounds(160,40,100,30);
jbunExitSystem.setBackground(Color.lightGray);
jpanPIMS.add(jbunExitSystem);
//菜单设置
jmenuOption.add(jmiPersonRegister);jmiPersonRegister.setBackground(Color.lightGray);
jmenuOption.add(jmiCount);jmiCount.setBackground(Color.lightGray);
jmenuSystem.add(jmiAboutSystem);jmiAboutSystem.setBackground(Color.lightGray);
jmenuSystem.add(jmiExitSystem);jmiExitSystem.setBackground(Color.lightGray);
jMenuBar.setBackground(Color.lightGray);
jMenuBar.add(jmenuOption);
jMenuBar.add(jmenuSystem);
//框架窗口设置
jfrmPIMS.getContentPane().setBackground(Color.lightGray);//设置窗口的背景颜色
jfrmPIMS.setBounds(500,250,300,185);
jfrmPIMS.setLayout(null);//取消frm的默认布局管理器,否则setlocation无效
jfrmPIMS.setVisible(true);
jfrmPIMS.add(jpanPIMS);
jfrmPIMS.setJMenuBar(jMenuBar);
//连接数据库
StringDBDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
StringconnectionStr="jdbc:
sqlserver:
//localhost:
1433;DatabaseName=PIMS";
try
{
Class.forName(DBDriver);//加载驱动器
DriverManager.setLoginTimeout(100);
con=DriverManager.getConnection(connectionStr,"sa","123456");//连接数据库
stmt=con.createStatement();//创建Statement对象
personRegister=newPersonRegister(stmt);
}
catch(Exceptione)
{
flag=false;
JOptionPane.showMessageDialog(null,e.toString());
}
//设置事件监听者
//员工登记
ActionListenermyPersonRegister=newActionListener(){
@Override
publicvoidactionPerformed(ActionEventarg0){
//TODOAuto-generatedmethodstub
jfrmPIMS.setFocusable(false);
personRegister.jfrmPersonRegister.setVisible(true);
//按下关闭按钮,关闭数据库并退出程序
}
};
//子窗口的关闭设置
personRegister.jfrmPersonRegister.addWindowListener(newWindowAdapter(){
publicvoidwindowsclosing(WindowEvente)
{
jfrmPIMS.setFocusable(true);
personRegister.jfrmPersonRegister.setVisible(false);
}
});
jmiPersonRegister.addActionListener(myPersonRegister);
jbunPersonRegister.addActionListener(myPersonRegister);
//统计
ActionListenermyCountPerson=newActionListener(){
@Override
publicvoidactionPerformed(ActionEventarg0){
//TODOAuto-generatedmethodstub
try
{
rs=stmt.executeQuery("SelectCOUNT(*)numberFromPerson");//查询表
while(rs.next()){//显示所有记录的ID和姓名
JOptionPane.showMessageDialog(null,"共有"+rs.getInt("number")+"名员工");
};
}
catch(SQLExceptione)
{
JOptionPane.showMessageDialog(null,e.toString());
}
}
};
jmiCount.addActionListener(myCountPerson);
//退出系统
ActionListenermyExitSystem=newActionListener(){
@Override
publicvoidactionPerformed(ActionEventarg0){
//TODOAuto-generatedmethodstub
try
{
if(flag==true)
{
stmt.close();//关闭链接语句
con.close();//关闭数据库
}
}
catch(SQLExceptione)
{
JOptionPane.showMessageDialog(null,e.toString());
}
System.exit(0);
}
};
jmiExitSystem.addActionListener(myExitSystem);
jbunExitSystem.addActionListener(myExitS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 异常 处理 分数 管理 系统