目录
一.项目要求
实现一个简单的学生信息管理的程序StudentInfo。
要求系统能为客户提供下列各项服务:
(1)教学管理人员能够使用StudentInfo程序对学生基本信息、课程信息进行管理,包括数据的添加、修改、删除和浏览;
(2)能够对学生选课进行管理,包括添加学生选课信息、录入成绩;
(3)能够使用查询功能,快速查看到指定学生或指定课程的基本信息以及所指定学生的选课信息;
(4)能够对学生选课情况进行简单的统计,包括所选的总的课程数、总学分数及平均成绩。 要注意添加学生基本信息、课程信息相关数据时,学号和课程号不能重复;
(5)还有在添加学生选课信息时,要求该学生和课程必须是存在的,而且不能添加重复的选课信息。
(6)提供友好的交互界面,可以方便用户进行功能选择,实现信息的管理和查询,并可清晰地显示相关信息。
二.项目平台
Mysql和IDEA.Java Swing
三.项目实现过程
1.IDEA和数据库的连接
(1)IDEA导入驱动安装包
(2) 数据库建立数据库stu,并建立表格
(3)在IDEA中建立连接
public class SqlHelper {
//数据库
private Connection ct = null; //连接
private PreparedStatement ps = null; //准备的元素
private ResultSet rs = null; //结果集合
private String driver = "com.mysql.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/stu?serverTimezone=Asia/Shanghai";
private String user = "root"; //账户
private String passwd = "161367"; //数据库账户密码
2.界面按键框架布局
public StuAddDialog(Frame owner, String title, boolean modal)
{
//重写父类方法
super(owner, title, modal);
//左侧标签栏
idLab = new JLabel("学号: ");
nameLab = new JLabel("姓名: ");
sexLab = new JLabel("性别: ");
ageLab = new JLabel("年龄: ");
jgLab = new JLabel("课程: ");
deptLab = new JLabel("系别: ");
//右侧信息填写栏
idTxt = new JTextField();
nameTxt = new JTextField();
sexTxt = new JTextField();
ageTxt = new JTextField();
jgTxt = new JTextField();
deptTxt = new JTextField();
//添加和取消按钮
addBtn = new JButton("添加");
cancelBtn = new JButton("取消");
//添加监听
addBtn.addActionListener(this);
addBtn.setActionCommand("add");
cancelBtn.addActionListener(this);
cancelBtn.setActionCommand("cancel");
//创建布局
//创建左边栏
left = new JPanel();
left.setLayout(new GridLayout(6, 1));
left.add(idLab); left.add(nameLab);
left.add(sexLab); left.add(ageLab);
left.add(jgLab); left.add(deptLab);
//......创建右边栏
center = new JPanel();
center.setLayout(new GridLayout(6, 1));
center.add(idTxt); center.add(nameTxt);
center.add(sexTxt); center.add(ageTxt);
center.add(jgTxt); center.add(deptTxt);
//底层添加和取消按钮
bottom = new JPanel();
bottom.add(addBtn);
bottom.add(cancelBtn);
//整体布局
this.add(left,BorderLayout.WEST);
this.add(center,BorderLayout.CENTER);
this.add(bottom,BorderLayout.SOUTH);
//设置窗口属性
this.setSize(300, 250);
this.setResizable(true);
this.setVisible(true);
}
3.对修改事件监听
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("update")) {
/***********************修改学生信息**************************/
StuModel tmp = new StuModel();
String sql = "update stu set stuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept=? where stuId=?";
String []paras = {nameTxt.getText(),sexTxt.getText(),ageTxt.getText(),
jgTxt.getText(),deptTxt.getText(),idTxt.getText()};
if(!tmp.cudStu(sql, paras))
JOptionPane.showMessageDialog(this, "修改学生信息失败");
//关闭窗口
this.dispose();
} else if(e.getActionCommand().equals("cancel")) {
//关闭窗口
this.dispose();
}
}
4.查询方法
public ResultSet queryExecute(String sql, String []paras)
{
try {
//1、加载驱动
Class.forName(driver);
//2、连接
ct = DriverManager.getConnection(url, user, passwd);
//驱动idea连接mysql、账号、密码
//3、创建PreparedStatement
ps = ct.prepareStatement(sql); //用于创建、存储数据库的记录
//4、循环,把数据库记录给ps
if(paras != null) {
for(int i = 0; i < paras.length; i++) {
ps.setString(i + 1, paras[i]);
}
}
//5、执行
rs = ps.executeQuery(); //执行查询ps,放在结果集合里rs,用于输出全部的记录
} catch (Exception e) { //处理异常
// handle exception
e.printStackTrace(); //确定程序故障源的跟踪
} finally {
//this.close();
}
//返回值,返回结果集合rs
return rs;
}
5.增删改方法
public boolean cudExecute(String sql, String []paras)
{
boolean b = true;
try {
//1、加载驱动
Class.forName(driver);
//2、连接
ct = DriverManager.getConnection(url, user, passwd);
//3、创建PreparedStatement
ps = ct.prepareStatement(sql);
//4、循环,把数据库记录给ps
for(int i = 0; i < paras.length; i++) {
ps.setString(i + 1, paras[i]);
}
//5、执行
if(ps.executeUpdate() != 1) b = false; //ps元素是否执行更新操作
} catch (Exception e) { //处理异常
// handle exception
b = false;
e.printStackTrace(); //确定程序故障源的跟踪路径
} finally {
this.close();
}
//========返回值
return b;
}
6.增删改查程序调用数据库的过程
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
if(e.getActionCommand().equals("query")) {
/***********查询***********/
//获取输入学生的姓名
String name = queryTxt.getText().trim();
if(name.length() != 0) {
//姓名输入有效时,执行查询
//定义参数
String sql = "select * from stu where stuName=?";
String []paras = {name};
//更新模型
jtableUpdate(sql, paras);
} else {
//姓名为空时,设置提醒
JOptionPane.showMessageDialog(this, "姓名输入不能为空");
}
} else if(e.getActionCommand().equals("add")) {
/******添加*******/
new StuAddDialog(this, "添加学生信息", true);
String sql = "select * from stu";
jtableUpdate(sql, null);
} else if(e.getActionCommand().equals("all")) {
/*****全部显示******/
String sql = "select * from stu";
jtableUpdate(sql, null);
} else if(e.getActionCommand().equals("delete")) {
/****删除*****/
//========获取选择行号
int rowNum = this.resultTb.getSelectedRow();
if(rowNum == -1) {
JOptionPane.showMessageDialog(this, "请选择一行");
return ;
}
//获取学生ID号
String stuId = (String)sm.getValueAt(rowNum, 0);
//删除学生
String sql = "delete from stu where stuId=?";
String []paras = {stuId};
StuModel tmp = new StuModel();
tmp.cudStu(sql, paras);
//更新模型
sql = "select * from stu";
jtableUpdate(sql, null);
} else if(e.getActionCommand().equals("update")) {
/****修改*****/
//获取选择行号
int rowNum = this.resultTb.getSelectedRow();
if(rowNum == -1) {
JOptionPane.showMessageDialog(this, "请选择一行");
return ;
}
new StuUpdateDialog(this, "修改学生信息", true, sm, rowNum);
String sql = "select * from stu";
jtableUpdate(sql, null);
}
}
//更新JTable内数据
public void jtableUpdate(String sql, String[] paras)
{
//创建模型
sm = new StuModel();
sm.queryStu(sql, paras);
//更新显示
resultTb.setModel(sm);
}
7.主方法
public static void main(String[] args)
{
new StudentManage();
}
四、项目实现效果
1.运行界面
2.查询过程
3.添加方法
4.选中一行进行删除/修改
结果:
五、项目不足之处
(1)仅实现了学生基本信息的增删改查,选课信息和老师等并没有实现
(2)由于没有实现完整的信息管理系统的建立,登录友好交互界面暂未实现,目标是实现三个不同管理账号的登录,例如:管理员、老师和学生
(3)项目花费时间较少,准备不太充分,本来可以完整的做出学生管理系统的项目来的
(4)IDEA与数据库的建立过程并没有花费多长时间