资源描述
计算机学院课程设计
专 业: 计算机科学和技术
课程名称: JAVA程序设计
课题名称: 学生信息管理系统
教 师:
学 号: 姓 名:
0年 6 月 25 日
目 录
第一章 总体设计 1
1.1本系统关键功效 1
1.2系统包含类及类之间关系 1
1.3 Java源文件及其功效 1
1.4相关文件及其功效 2
第二章 具体设计 3
2.1主类MainWindow 3
2.2类Database 4
2.3类StuBean 5
2.4类InputStudent 6
2.5类ModifyStudent 7
2.6类QueryStudent 8
2.7类DeleteStudent 9
第三章 功效测试及运行效果 10
3.1 系统主界面 10
3.2 录入学生信息界面 11
3.3 查询学生信息界面 11
3.4 修改学生信息界面 12
3.5 修改学生信息界面 12
工作总结 13
参考文件 14
第一章 总体设计
1.1本系统关键功效
本系统是基于数据库学生信息管理系统,实现了连接数据库,录入、修改、查询、删除学生信息功效。
1.2系统包含类及类之间关系
本系统共包含7个Java源文件和3个辅助文件。类之间关系图1-1所表示
Main
Window
Input
Student
Modify
Studen
Delete
Student
Query
Student
Database
Image
Icon
StuBean
File
StuBean
Database
File
StuBean
Database
StuBean
Database
图 1-1 类之间关系图
1.3 Java源文件及其功效
1.MainWindow.java
该类负责创建学生信息管理系统主窗口,该类还有main方法,程序从该类开始实施。
2.InputStudent.java
该类创建对象是MainWindow类关键组员之一,负责提供录入学生基础信息界面。
3.ModifyStudent.java
该类创建对象是MainWindow类关键组员之一,负责提供修改学生基础信息界面。
4.DeleteStudent.java
该类创建对象是MainWindow类关键组员之一,负责提供删除学生基础信息界面。
5.QueryStudent.java
该类创建对象是MainWindow类关键组员之一,负责提供查询学生基础信息和打印基础信息界面。
6.Database.java
该类负责提供打开和关闭数据库连接功效。
7.StuBean.java
该类负责数据库操作,包含对学生信息数据库添加、查询、修改、删除。
1.4相关文件及其功效
1.welcome.jpg
为主窗口背景图片,MainWidow需要调用该文件。
2.icon.jpg
该文件是窗口最小化时窗口图标,MainWidow需要调用该文件。
3.专业.txt
该文件为专业组合组合键提供下拉菜单内容,InputStudent和ModifyStudent需要调用该文件。
4 scmanage.mdb
该文件为本程序数据源,负责保留学生基础信息,Database连接到该数据库
第二章 具体设计
2.1主类MainWindow
(1)组员变量见表2-1
表2-1 关键组员变量(属性)
组员变量描述
变量类型
名称
面板
InputStudent
ins
面板
ModifyStudent
mos
面板
DeleteStudent
des
面板
QueryStudent
qus
菜单栏
JButtonBar
bar
菜单组
JMenu
menuSystem menuStu
菜单项
JMenuItem
itemWel itemExit itemSearch itemAdd itemEdit itemDelete
布局管理器
CardLayout
card
(2)方法见表2-2
表2-2 关键方法
方法名称
返回类型
功效
备注
MainWindow
无类型
创建窗口
结构方法
actionPerformed
无类型
处理响应事件
继承自父类抽象方法
main
无类型
实施程序
程序主函数
(3)源代码见文件MainWindow.java
2.2类Database
(1)组员变量见表2-3
表2-3 关键组员变量
组员变量描述
变量类型
名称
实施SQL语句接口
Statement
stmt
返回结果接口
ResultSet
rs
数据库连接接口
Connection
conn
字符串(SQL语句、驱动)
String
sql strurl
(2)方法见表2-4
表2-4 关键方法
方法名称
返回类型
功效
备注
Database
无类型
创建Database对象
结构方法
OpenConn
无类型
打开数据库连接
无
executeQuery
ResultSet
实施SQL查询语句,返回结果集RS
返回ResultSet类型结果集
executeUpdate
无类型
实施SQL更新语句
无
closeStmt
无类型
关闭目前Statement对象
无
closeConn
无类型
关闭数据库连接
无
(3)源代码见文件Database.java
2.3类StuBean
(1)组员变量见表2-5
表2-5 关键组员变量
组员变量描述
变量类型
名称
返回结果接口
ResultSet
rs
字符串(SQL语句 数据库属性)
String
sql sNum sName sSex sMajor sGrade sBirth
创建Database对象
Database
DB
(2)方法见表2-4
表2-4 关键方法
方法名称
返回类型
功效
备注
stuAdd
添加学生信息
无
stuModify
修改学生信息
无
stuDel
删除学生信息
无
stuSearch
String[]
依据学号查询学生信息
返回ResultSet类型结果集
(3)源代码见文件StuBean.java
2.4类InputStudent
(1)组员变量见表2-5
表2-5 关键组员变量
组员变量描述
变量类型
名称
StuBean对象类型
StuBean
addStu queryStu
文本域
JTextField
Snum Sname Sgrade Sbirth
组合框
JComboBox
Smajor
单选框
ButtonGroup
boy,girl
按钮多斥作用域
ButtonGroup
group
按钮
JButton
Entry reset
(2)方法见表2-4
表2-4 关键方法
方法名称
返回类型
功效
备注
InputStudent
无类型
创建录入学生信息界面
结构方法
actionPerformed
无类型
处理响应事件
继承自父类抽象方法
clearMess
无类型
清除文本框内容
无
(3)源代码见文件InputStudent.java
2.5类ModifyStudent
(1)组员变量见表2-5
表2-5 关键组员变量
组员变量描述
变量类型
名称
StuBean对象类型
StuBean
modifyStu queryStu
文本域
JTextField
Snum Sname Sgrade Sbirth
组合框
JComboBox
Smajor
单选框
ButtonGroup
boy,girl
按钮多斥作用域
ButtonGroup
group
按钮
JButton
entry reset start
(2)方法见表2-4
表2-4 关键方法
方法名称
返回类型
功效
备注
ModifyStudent
无类型
创建修改学生信息界面
结构方法
actionPerformed
无类型
处理响应事件
继承自父类抽象方法
clearMess
无类型
清除文本框内容
无
(3)源代码见文件Modify.java
2.6类QueryStudent
(1)组员变量见表2-5
表2-5 关键组员变量
组员变量描述
变量类型
名称
StuBean对象类型
StuBean
queryStu
文本域
JTextField
Snum Sname Sgrade Sbirth Smajor
开启并实施打印作业
PrintJob
pri
单选框
ButtonGroup
boy,girl
按钮多斥作用域
ButtonGroup
group
按钮
JButton
quert print
面板(查询结果以后)
JPanel
messPanel
(2)方法见表2-4
表2-4 关键方法
方法名称
返回类型
功效
备注
QueryStudent
无类型
创建录入学生信息界面
结构方法
actionPerformed
无类型
处理响应事件
继承自父类抽象方法
clearMess
无类型
清除文本框内容
无
(3)源代码见文件QueryStudent.java
2.7类DeleteStudent
(1)组员变量见表2-5
表2-5 关键组员变量
组员变量描述
变量类型
名称
StuBean对象类型
StuBean
delStu queryStu
文本域
JTextField
Snum Sname Sgrade Sbirth Smajor
单选框
ButtonGroup
boy,girl
按钮多斥作用域
ButtonGroup
group
按钮
JButton
del
(2)方法见表2-4
表2-4 关键方法
方法名称
返回类型
功效
备注
InputStudent
无类型
创建录入学生信息界面
结构方法
actionPerformed
无类型
处理响应事件
继承自父类抽象方法
clearMess
无类型
清除文本框内容
无
(3)源代码见文件DeleteStudent.java
第三章 功效测试及运行效果
3.1 系统主界面
图3-1 系统主窗口
3.2 录入学生信息界面
图3-2 学生信息录入界面
3.3 查询学生信息界面
图3-3学生信息查询界面
3.4 修改学生信息界面
图3-4学生信息修改界面
3.5 修改学生信息界面
3-5学生信息删除界面
工作总结
经过这次课程设计,我锻炼了自己动手能力,巩固了对面向对象程序设计概念了解和JAVA利用,初步掌握JAVA开发应用程序基础方法,学习了对数据库基础操作,能够对Microsoft Acess表做基础处理,提升了自己综合利用所学知识能力。
深刻认识到了基础知识关键性。现在我知道了,不知道函数怎么来,根本什么也做不了。除非照抄她人代码,那样也根本不可能知道功效是怎样实现。现在很有必需加强基础语法知识学习了。JAVA应用性很强,只有老师讲解不行,只看也不中,只有自己动手去做才会发觉自己确实有太多不足,很多程序看似简单,真正去做才知道知识并没有自己想象那样扎实。从而知道了理论和实际相结合是很关键,只有理论知识是远远不够,只有把所学理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提升自己实际动手能力和独立思索能力。其中对JAVA图像用户界面、JAVA数据库JDBC利用、内部匿名类等JAVA知识有了更深了解和应用。树立了对自己工作能力信心,相信会对以后学习工作生活有很关键影响。而且大大提升了动手能力,使我充足体会到了在发明过程中探索艰苦和成功时喜悦。
提升了学习计算机爱好,增强了信心。在此次课程设计中,我碰到了很多困难,这些困难搞得我焦头烂额,几度试图放弃,但最终坚持着一一把困难克服掉了。每当克服一个困难,全部很兴奋,这些全部是自己努力结果。现在,我有信心面对接下来挑战,在不停实践中锻炼自己,提升自己!
经过多个星期设计和开发,系统基础开发完成。在此次课程设计中困难碰到不少,比如数据库连接,SQL语言书写格式,全局参数传输等。因为设计时间较短,所以该系统还有很多不尽如人意地方,比如用户界面不够美观,功效不够完善等多方面问题。在这次系统开发过程中,我深深体会到了做一个系统,首优异行需求分析关键性,了解了一个系统制作,从功效分析到功效模块分析、和其它系统关系,再到数据库设计、数据库结构实现及各功效模块创建全部需要从整体上考虑设计。这些全部有待以后深入改善。
回顾起此次JAVA课程设计,我仍感慨颇多,学到了很多东西。同时不仅巩固了以前所学过知识,而且还学到了很多在书本上所没有学到过知识。在实际设计中才发觉,书本上理论性东西和在实际利用中还是有一定出入,所以有些问题不仅要深入地了解,而且要不停地更正以前错误思维。一切问题必需要靠自己一点一滴处理,而在处理过程当中你会发觉自己在飞速提升。
参考文件
[1] 耿祥义,张跃平.Java 2实用教程(第三版)[M].北京:清华大学出版社,
[2] (美)霍斯特曼(Horstmann C.S.)&nbs. Java2关键技术(卷Ⅱ高级特征原书第7版)/Sun企业关键技术丛书 [M].机械工业出版社,
全部源码(此源码不在汇报中,为了看着方便,附在了后面)。
Database.java
package Stu;
import java.sql.*;
/**
* 连接数据库类
*/
public class Database {
private Statement stmt=null;
ResultSet rs=null;
private Connection conn=null;
String sql;
String strurl="jdbc:odbc:scmanage";
public Database(){
}
/**
* 打开数据库连接
*/
public void OpenConn()throws Exception{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection(strurl);
}
catch(Exception e){
System.err.println("OpenConn:"+e.getMessage());
}
}
/**
* 实施SQL查询语句,返回结果集RS
*/
public ResultSet executeQuery(String sql){
stmt = null;
rs=null;
try{
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
}
catch(SQLException e){
System.err.println("executeQuery:"+e.getMessage());
}
return rs;
}
/**
* 实施SQL更新语句
*/
public void executeUpdate(String sql){
stmt=null;
rs=null;
try{
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
stmt.executeQuery(sql);
mit();
}
catch(SQLException e){
System.err.println("executeUpdate:"+e.getMessage());
}
}
public void closeStmt(){
try{
stmt.close();
}
catch(SQLException e){
System.err.println("closeStmt:"+e.getMessage());
}
}
/**
* 关闭数据库连接
*/
public void closeConn(){
try{
conn.close();
}
catch(SQLException ex){
System.err.println("aq.closeConn:"+ex.getMessage());
}
}
/*
*转换编码
*/
public static String toGBK(String str){
try {
if(str==null)
str = "";
else
str=new String(str.getBytes("ISO-8859-1"),"GBK");
}
catch (Exception e) {System.out.println(e);}
return str;
}
}
DeleteStudent.java
package Stu;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DeleteStudent extends JPanel implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 删除界面
*/
StuBean queryStu = new StuBean();
StuBean delStu = new StuBean();
JTextField Snum,Sname,Smajor,Sgrade,Sbirth;
JRadioButton boy,girl;
JButton del;
ButtonGroup group = null;
public DeleteStudent(){
Snum = new JTextField(20);
del = new JButton("删除");
Snum.addActionListener(this);
del.addActionListener(this);
Sname = new JTextField(20);
Sname.setEditable(false);
Smajor = new JTextField(20);
Smajor.setEditable(false);
Sgrade = new JTextField(20);
Sgrade.setEditable(false);
Sbirth = new JTextField(20);
Sbirth.setEditable(false);
group = new ButtonGroup();
boy = new JRadioButton("男",false);
girl = new JRadioButton("女",false);
group.add(boy);
group.add(girl);
Box box0 = Box.createHorizontalBox();
JLabel label = new JLabel("学生信息删除",JLabel.CENTER);
label.setFont(new Font("黑体", Font.BOLD, 25));
box0.add(label);
Box box1 = Box.createHorizontalBox();
box1.add(new JLabel("学号:",JLabel.CENTER));
box1.add(Snum);
box1.add(del);
Box box2 = Box.createHorizontalBox();
box2.add(new JLabel("姓名:",JLabel.CENTER));
box2.add(Sname);
Box box3 = Box.createHorizontalBox();
box3.add(new JLabel("性别:",JLabel.CENTER));
box3.add(boy);
box3.add(girl);
Box box4 = Box.createHorizontalBox();
box4.add(new JLabel("专业:",JLabel.CENTER));
box4.add(Smajor);
Box box5 = Box.createHorizontalBox();
box5.add(new JLabel("年级:",JLabel.CENTER));
box5.add(Sgrade);
Box box6 = Box.createHorizontalBox();
box6.add(new JLabel("出生:",JLabel.CENTER));
box6.add(Sbirth);
Box boxH = Box.createVerticalBox();
boxH.add(box0);
boxH.add(box1);
boxH.add(box2);
boxH.add(box3);
boxH.add(box4);
boxH.add(box5);
boxH.add(box6);
boxH.add(Box.createVerticalGlue());
JPanel messPanel = new JPanel();
messPanel.add(boxH);
messPanel.setBackground(Color.YELLOW);
setLayout(new BorderLayout());
add(messPanel,BorderLayout.CENTER);
validate();
setVisible(true);
}
//处理事件
public void actionPerformed(ActionEvent e) {
if(e.getSource() == del||e.getSource() == Snum){
String number = "";
number = Snum.getText();
String rs[] = new String[4];
rs = queryStu.stuSearch(number);
if(rs != null){
String q = "该生信息已存在,您想删除该生基础信息吗?";
int yes = JOptionPane.showConfirmDialog(this,q,"确定",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(yes == JOptionPane.YES_OPTION){
Sname.setText(rs[0]);
Smajor.setText(rs[2]);
Sgrade.setText(rs[3]);
Sbirth.setText(rs[4]);
if(rs[1].equals("男"))
boy.setSelected(true);
else
girl.setSelected(true);
String m = "确定要删除该学号及全部信息吗?";
int ok = JOptionPane.showConfirmDialog(this,m, "确定",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(ok == JOptionPane.YES_OPTION){
delStu.stuDel(number);
}
else if(ok == JOptionPane.NO_OPTION){
Snum.setText(null);
Sname.setText(null);
Smajor.setText(null);
Sgrade.setText(null);
Sbirth.setText(null);
}
}
else if(yes == JOptionPane.NO_OPTION){
Snum.setText(null);
Sname.setText(null);
Smajor.setText(null);
Sgrade.setText(null);
Sbirth.setText(null);
}
}
else{
JOptionPane.showMessageDialog(this,"该学号不存在!","警告", JOptionPane.WARNING_MESSAGE);
}
}
}
}
InputStudent.java
package Stu;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class InputStudent extends JPanel implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 录入界面
*/
StuBean addStu = new StuBean();
StuBean queryStu = new StuBean();
//设置“录入界面”窗口
JTextField Snum,Sname,Sgrade,Sbirth;
JComboBox Smajor;
JRadioButton boy,girl;
ButtonGroup group = null;
JButton entry,reset;
public InputStudent(){
Snum = new JTextField(20);
Sname = new JTextField(20);
Smajor = new JComboBox();
try{
File f = new File("专业.txt");
FileReader fr = new FileReader(f.getPath());
BufferedReader br = new BufferedReader(fr);
String s = null;
while((s= br.readLine())!=null)
Smajor.addItem(s);
fr.close();
br.close();
}catch(IOException exp){}
Sgrade = new JTextField(20);
Sbirth = new JTextField(20);
group = new ButtonGroup();
boy = new JRadioButton("男",true);
girl = new JRadioButton("女",false);
group.add(boy);
group.add(girl);
entry = new JButton("录入");
reset = new JButton("重置");
entry.addActionListener(this);
reset.addActionListener(this);
Box box0 = Box.createHorizontalBox();
JLabel label = new JLabel("学生信息录入",JLabel.CENTER);
label.setFont(new Font("黑体", Font.BOLD, 25));
box0.add(label);
Box box1 = Box.createHorizontalBox();
box1.add(new JLabel("学号:",JLabel.CENTER));
box1.add(Snum);
Box box2 = Box.createHorizontalBox();
box2.add(new JLabel("姓名:",JLabel.CENTER));
box2.add(Sname);
Box box3 = Box.createHorizontalBox();
box3.add(new JLabel("性别:",JLabel.CENTER));
box3.add(boy);
box3.add(girl);
Box box4 = Box.createHorizontalBox();
box4.add(new JLabel("专业:",JLabel.CENTER));
box4.add(Smajor);
Box box5 = Box.createHorizontalBox();
box5.add(new JLabel("年级:",JLabel.CENTER));
box5.add(Sgrade);
Box box6 = Box.createHorizontalBox();
box6.add(new JLabel("出生:",JLabel.CENTER));
box6.add(Sbirth);
Box boxH = Box.createVerticalBox();
boxH.add(box0);
boxH.add(box1);
boxH.add(box2);
boxH.add(box3);
boxH.add(box4);
boxH.add(box5);
boxH.add(box6);
boxH.add(Box.createVerticalGlue());
JPanel putButton = new JPanel();
putButton.add(entry);
putButton.add(reset);
JPanel messPanel = new JPanel();
messPanel.add(boxH);
messPanel.setBackground(Color.red);
putButton.setBackground(Color.cyan);
setLayout(new BorderLayout());
add(messPanel,BorderLayout.CENTER);
add(putButton,BorderLayout.SOUTH);
validate();
setVisible(true);
}
//事件处理
public void actionPerformed(ActionEvent e) {
if(e.getSource() == entry){
String number = "";
number = Snum.getText();
String rs[] = new String[4];
rs = queryStu.stuSearch(number);
if(rs != null){
String w = "该生基础信息已存在,请到修改页面修改!";
JOptionPane.showMessageDialog(this, w, "警告", JOptionPane.WARNING_MESSAGE);
}
else{
String name = Sname.getText();
String major = (String)Smajor.getSelectedItem();
String grade = Sgrade.getText();
String birth = Sbirth.getText();
String sex = null;
if(boy.isSelected())
sex = boy.getText();
if(girl.isSelected()
展开阅读全文