| 系 | |
| 专 业 | |
| 班 级 | 08级嵌入式系统实验班 |
| 学 号 | 26号 |
| 姓 名 | 赵黎明 |
| 题 目 | 学生成绩管理系统 |
| 任课教师 | 彭洁 |
一、课程设计要求:
1、用到书上(课本或实验册)上的至少三个实例;
2、用到至少两种布局和至少四种组件;
3、用到对话框;
4、用到对数据库的查询、删除、添加和修改;
5、最好用到输入输出流;
6、具有一定的实际意义。
二、用到的实例及实际意义:
2.1 程序所用到的实例:
1、《Java2使用教程》第10章例题10.12 P282;
2、《Java2使用教程》第11章例题11.8 P323;
3、《Java2使用教程》第15章所有例题均有使用作参考 P391-411;
4、在其他参考书和网上也有用到相关程序和代码,并有所参考和借鉴。
2.2程序的实际意义:
本《学生成绩管理系统》具有对学生成绩进行管理的功能。并于数据库相连接,能够对学生的成绩、姓名、出生日期进行查询、添加和删除等,简捷方便,容易使用。
三、程序代码及运行效果:
3.1.1 主类代码:
/*主类代码*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MyPanel extends JPanel{
public void paint(Graphics g){
g.drawImage(img,0,0,this);
}
}
public class MainForm extends JFrame implements ActionListener
{
JMenu mSystem=new JMenu("系统");
JMenuItem mExit=new JMenuItem("退出");
JMenu mOperate=new JMenu("数据操作");
JMenuItem mAdd=new JMenuItem("添加");
JMenuItem mDel=new JMenuItem("删除");
JMenuItem mModify=new JMenuItem("修改");
JMenu mQuery=new JMenu("查询");
JMenuItem mName=new JMenuItem("按姓名查询");
JMenuItem mScore=new JMenuItem("按成绩查询");
JMenu mHelp=new JMenu("帮助");
JMenuItem mAbout=new JMenuItem("软件信息");
JMenuBar mBar=new JMenuBar();
MainForm()
{
super("学生成绩管理系统");
setSize(875,583);
mSystem.add(mExit);
mOperate.add(mAdd);
mOperate.add(mDel);
mOperate.add(mModify);
mQuery.add(mName);
mQuery.add(mScore);
mHelp.add(mAbout);
mBar.add(mSystem);
mBar.add(mOperate);
mBar.add(mQuery);
mBar.add(mHelp);
setJMenuBar(mBar);
mExit.addActionListener(this);
mAdd.addActionListener(this);
mDel.addActionListener(this);
mModify.addActionListener(this);
mName.addActionListener(this);
mScore.addActionListener(this);
mAbout.addActionListener(this);
setContentPane(new MyPanel());
setVisible(true);
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==mExit)
System.exit(0);
else if(ae.getSource()==mAbout)
JOptionPane.showMessageDialog(this,"学生成绩管理系统\n\\n应用科学学院\n\\n2011年4月软件信息",JOptionPane.INFORMATION_MESSAGE);
else if(ae.getSource()==mAdd)
new AddForm().setVisible(true);
else if(ae.getSource()==mDel)
new DeleteForm().setVisible(true);
else if(ae.getSource()==mModify)
new ModifyForm().setVisible(true);
else if(ae.getSource()==mName)
new NameQueryForm().setVisible(true);
else if(ae.getSource()==mScore)
new ScoreQueryForm().setVisible(true);
}
public static void main(String[] args) {
new MainForm();
}
}
3.1.2 运行效果:
3.2.1 修改数据:
/*修改数据*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class ModifyForm extends JFrame implements ActionListener
{
JLabel labName=new JLabel("姓名:");
JLabel labDate=new JLabel("出生日期:");
JLabel labScore=new JLabel("成绩:");
JTextField txtName=new JTextField(20);
JTextField txtDate=new JTextField(18);
JTextField txtScore=new JTextField(20);
JButton btnModify=new JButton("修改");
JButton btnCancel=new JButton("取消");
JButton btnQuery=new JButton("查询");
JPanel pan=new JPanel();
JPanel pan1=new JPanel();
JPanel pan2=new JPanel();
JPanel pan3=new JPanel();
JPanel pan4=new JPanel();
Connection con;
Statement sql;
ResultSet rs;
ModifyForm()
{
super("修改数据");
setSize(400,300);
pan1.add(labName);
pan1.add(txtName);
pan2.add(labDate);
pan2.add(txtDate);
pan3.add(labScore);
pan3.add(txtScore);
pan4.add(btnQuery);
pan4.add(btnModify);
pan4.add(btnCancel);
pan.setLayout(new GridLayout(3,1));
pan.add(pan1);
pan.add(pan2);
pan.add(pan3);
getContentPane().add(pan,"Center");
getContentPane().add(pan4,"South");
btnQuery.addActionListener(this);
btnModify.addActionListener(this);
btnCancel.addActionListener(this);
btnModify.setEnabled(false);
txtDate.setEditable(false);
txtScore.setEditable(false);
setVisible(true);
txtName.requestFocus();
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==btnCancel){
dispose();
} else if(ae.getSource()==btnQuery){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundException e){
}
try{con=DriverManager.getConnection("jdbc:odbc:sun
sql=con.createStatement();
rs=sql.executeQuery("select * from 成绩表 where 姓名='"+txtName.getText()+"'");
if(rs.next()){
txtName.setText(rs.getString("姓名"));
txtScore.setText(new Integer(rs.getInt("成绩")).toString());
txtDate.setText(rs.getDate("出生日期").toString());
btnModify.setEnabled(true);
txtDate.setEditable(true);
txtScore.setEditable(true);
}else{
System.out.println("不存在该记录! ");
btnModify.setEnabled(false);
txtName.setText("");
txtScore.setText("");
txtDate.setText("");
txtDate.setEditable(false);
txtScore.setEditable(false);
}
}catch(SQLException e){
}
}else if(ae.getSource()==btnModify){
try{
System.out.println("Update 成绩表 set 出生日期='"+txtDate.getText()+"',成绩="+txtScore.getText()+" where 姓名='"+txtName.getText()+"'");
sql.executeUpdate("Update 成绩表 set 出生日期='"+txtDate.getText()+"',成绩="+txtScore.getText()+" where 姓名='"+txtName.getText()+"'");
System.out.println("记录修改完毕!");
btnModify.setEnabled(false);
txtName.setText("");
txtScore.setText("");
txtDate.setText("");
txtDate.setEditable(false);
txtScore.setEditable(false);
con.close();
}catch(SQLException e){
}
}
}
public static void main(String[] args) {
new ModifyForm();
}
}
3.2.2 运行效果:
3.3.1 删除数据:
/*删除数据*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class DeleteForm extends JFrame implements ActionListener
{
JLabel labName=new JLabel("姓名:");
JLabel labDate=new JLabel("出生日期:");
JLabel labScore=new JLabel("成绩:");
JTextField txtName=new JTextField(20);
JTextField txtDate=new JTextField(18);
JTextField txtScore=new JTextField(20);
JButton btnDelete=new JButton("删除");
JButton btnCancel=new JButton("取消");
JButton btnQuery=new JButton("查询");
JPanel pan=new JPanel();
JPanel pan1=new JPanel();
JPanel pan2=new JPanel();
JPanel pan3=new JPanel();
JPanel pan4=new JPanel();
Connection con;
Statement sql;
ResultSet rs;
DeleteForm()
{
super("删除数据");
setSize(400,300);
pan1.add(labName);
pan1.add(txtName);
pan2.add(labDate);
pan2.add(txtDate);
pan3.add(labScore);
pan3.add(txtScore);
pan4.add(btnQuery);
pan4.add(btnDelete);
pan4.add(btnCancel);
pan.setLayout(new GridLayout(3,1));
pan.add(pan1);
pan.add(pan2);
pan.add(pan3);
getContentPane().add(pan,"Center");
getContentPane().add(pan4,"South");
btnQuery.addActionListener(this);
btnDelete.addActionListener(this);
btnCancel.addActionListener(this);
btnDelete.setEnabled(false);//取消删除按钮的功能
txtDate.setEditable(false);
txtScore.setEditable(false);
setVisible(true);
txtName.requestFocus();
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource()==btnCancel)
{
dispose();
}
else if(ae.getSource()==btnQuery){ //实现查询功能
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundException e){
}
try{con=DriverManager.getConnection("jdbc:odbc:sun
sql=con.createStatement();
rs=sql.executeQuery("select * from 成绩表 where 姓名='"+txtName.getText()+"'");
if(rs.next())
{
txtName.setText(rs.getString("姓名"));
txtScore.setText(new Integer(rs.getInt("成绩")).toString());
txtDate.setText(rs.getDate("出生日期").toString());
btnDelete.setEnabled(true);//使删除按钮功能实现
txtDate.setEditable(true);
txtScore.setEditable(true);
}else{
System.out.println("不存在该记录!");
btnDelete.setEnabled(false);
txtName.setText("");
txtScore.setText("");
txtDate.setText("");
txtDate.setEditable(false);
txtScore.setEditable(false);
}
}catch(SQLException e){
}
}
else if(ae.getSource()==btnDelete) //实现删除功能
{
try
{
System.out.println("Update 成绩表 set 出生日期='"+txtDate.getText()+"',成绩="+txtScore.getText()+" where 姓名='"+txtName.getText()+"'");
sql.executeUpdate("DELETE FROM 成绩表 where 姓名='"+txtName.getText()+"'");
System.out.println("记录删除完毕!");
btnDelete.setEnabled(false);
txtName.setText("");
txtScore.setText("");
txtDate.setText("");
txtDate.setEditable(false);
txtScore.setEditable(false);
con.close();
}
catch(SQLException e){
}
}
}
public static void main(String[] args)
{
new DeleteForm();
}
}
3.3.2 运行效果:
3.4.1 添加数据:
/*添加数据*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class AddForm extends JFrame implements ActionListener
{
JLabel labName=new JLabel("姓名:");
JLabel labDate=new JLabel("出生日期:");
JLabel labScore=new JLabel("成绩:");
JTextField txtName=new JTextField(20);
JTextField txtDate=new JTextField(18);
JTextField txtScore=new JTextField(20);
JButton btnAdd=new JButton("添加");
JButton btnCancel=new JButton("取消");
JPanel pan=new JPanel();
JPanel pan1=new JPanel();
JPanel pan2=new JPanel();
JPanel pan3=new JPanel();
JPanel pan4=new JPanel();
Connection con;
Statement sql;
ResultSet rs;
AddForm()
{
super("添加数据");
setSize(400,300);
pan1.add(labName);
pan1.add(txtName);
pan2.add(labDate);
pan2.add(txtDate);
pan3.add(labScore);
pan3.add(txtScore);
pan4.add(btnAdd);
pan4.add(btnCancel);
pan.setLayout(new GridLayout(3,1));
pan.add(pan1);
pan.add(pan2);
pan.add(pan3);
getContentPane().add(pan,"Center");
getContentPane().add(pan4,"South");
btnAdd.addActionListener(this);
btnCancel.addActionListener(this);
btnAdd.setEnabled(true);
txtDate.setEditable(true);
txtScore.setEditable(true);
setVisible(true);
txtName.requestFocus();
}
public void actionPerformed(ActionEvent ae)
{
String recode,insert1,出生日期,姓名;
int 成绩;
if(ae.getSource()==btnCancel)
{
this.dispose();
}
else if(ae.getSource()==btnAdd)
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundException e){
}
try{con=DriverManager.getConnection("jdbc:odbc:sun
sql=con.createStatement();
姓名=txtName.getText();
出生日期=txtDate.getText();
成绩=Integer.parseInt(txtScore.getText());
recode="("+"'"+姓名+"'"+出生日期+""+"',"+成绩+")";
insert1="INSERT INTO 成绩表 VALUES "+recode;
sql.executeUpdate(insert1);
System.out.println("记录添加完毕!");
btnAdd.setEnabled(false);
txtName.setText("");
txtScore.setText("");
txtDate.setText("");
con.close();
}
catch(SQLException e){
}
}
}
public static void main(String[] args)
{
new AddForm();
}
}
3.4.2 运行效果:
3.5.1 按姓名查询数据:
/*按姓名查询数据*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class NameQueryForm extends JFrame implements ActionListener
{
JLabel labName=new JLabel("姓名:");
JLabel labDate=new JLabel("出生日期:");
JLabel labScore=new JLabel("成绩:");
JTextField txtName=new JTextField(20);
JTextField txtDate=new JTextField(18);
JTextField txtScore=new JTextField(20);
JButton btnCancel=new JButton("取消");
JButton btnQuery=new JButton("查询");
JPanel pan=new JPanel();
JPanel pan1=new JPanel();
JPanel pan2=new JPanel();
JPanel pan3=new JPanel();
JPanel pan4=new JPanel();
Connection con;
Statement sql;
ResultSet rs;
NameQueryForm()
{
super("按姓名查询");
setSize(400,300);
pan1.add(labName);
pan1.add(txtName);
pan2.add(labDate);
pan2.add(txtDate);
pan3.add(labScore);
pan3.add(txtScore);
pan4.add(btnQuery);
pan4.add(btnCancel);
pan.setLayout(new GridLayout(3,1));
pan.add(pan1);
pan.add(pan2);
pan.add(pan3);
getContentPane().add(pan,"Center");
getContentPane().add(pan4,"South");
btnQuery.addActionListener(this);
btnCancel.addActionListener(this);
txtDate.setEditable(false);
txtScore.setEditable(false);
setVisible(true);
txtName.requestFocus();
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==btnCancel){
dispose();
} else if(ae.getSource()==btnQuery){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundException e){
}
try{con=DriverManager.getConnection("jdbc:odbc:sun
sql=con.createStatement();
rs=sql.executeQuery("select * from 成绩表 where 姓名='"+txtName.getText()+"'");
if(rs.next()){
txtName.setText(rs.getString("姓名"));
txtScore.setText(new Integer(rs.getInt("成绩")).toString());
txtDate.setText(rs.getDate("出生日期").toString());
}else{
System.out.println("不存在该记录! ");
txtName.setText("");
txtScore.setText("");
txtDate.setText("");
txtName.requestFocus();
}
}catch(SQLException e){
}
}
}
public static void main(String[] args) {
new NameQueryForm();
}
}
3.5.2 运行效果:
3.6.1 按成绩查询数据:
/*按成绩查询数据*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
public class ScoreQueryForm extends JFrame implements ActionListener
{
JLabel labScore=new JLabel("请输入成绩:");
JTextField txtScore=new JTextField(10);
JButton btnQuery=new JButton("查询");
JPanel pan1=new JPanel();
JPanel pan2=new JPanel();
String []str={"姓名出生日期成绩"};
Object[][] data=new Object[10][3];
JTable table=new JTable(data,str);
JTableHeader head=table.getTableHeader();
JScrollPane jsp=new JScrollPane(table); //滚动
Connection con;
Statement sql;
ResultSet rs;
ScoreQueryForm()
{
super("按成绩查询");
setSize(400,300);
pan1.add(labScore);
pan1.add(txtScore);
pan1.add(btnQuery); //以上3条在第一个面板加入内容
getContentPane().add(pan1,"North"); //把面板1放到窗口顶部
pan2.setLayout(new BorderLayout());
pan2.add(head,"North"); //将表头放在面板2的顶部
pan2.add(jsp,"Center"); //表格放在pan2中间
getContentPane().add(pan2,"Center");//把面板2整体加入到主窗口中
btnQuery.addActionListener(this); //增加查询按钮的监视器
setVisible(true);
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==btnQuery){
int i,j,row;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundException e){
}
try{ con=DriverManager.getConnection("jdbc:odbc:sun
sql=con.createStatement();
rs=sql.executeQuery("select COUNT(*) as rowcount from 成绩表 where 成绩="+txtScore.getText()); //寻找相同成绩的行数
rs.next(); //去掉头
row=rs.getInt("rowcount");
rs.close();
data=new Object[row][3];
rs=sql.executeQuery("select * from 成绩表 where 成绩="+txtScore.getText());
i=0;j=0;
while(rs.next()){
data[i][j++]=rs.getString("姓名");
data[i][j++]=rs.getDate("出生日期");
data[i][j]=new Integer(rs.getInt("成绩"));//将数据库中查询到的信息保存到data中
i++;j=0;
}
pan2.removeAll();
getContentPane().remove(pan2);
table=new JTable(data,str);
pan2.setLayout(new BorderLayout());
head=table.getTableHeader();
jsp=new JScrollPane(table);
pan2.add(head,"North");
pan2.add(jsp,"Center");
getContentPane().add(pan2,"Center");
this.validate();
con.close();
}catch(SQLException e){
}
}
}
public static void main(String[] args) {
new ScoreQueryForm();
}
}
3.6.2 运行效果:
四、总结:
通过本次课程设计,不仅让我更深入的了解JAVA这门学科,更使自己有了继续探索的兴趣。
对我来说,在之前的学习过程中没有能够很好的掌握JAVA语言的学习,在很多地方还有生疏和遗漏,并且在此次课程设计过程中也遇到困难不能自己解决。但是,通过这次程序设计,除了增加了自己的编程能力,提高了我对JAVA的应用能力,同时我也深感“认真严谨”这个词的重要性,一点点小的马虎,便会导致整个程序不能正常运行。在今后的学习中,我将继续保持严谨的学习态度。与此同时,在同学的帮助下,让我体会到了相互学习的重要性,而更让人难以忘怀的是在热烈讨论问题时,那激情横溢的场面。总之,此次课程设计让我获益匪浅。下载本文