package sc;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
import java.util.HashSet;
import java.util.Iterator;
/********************************
* 处理search面板的鼠标右键触发 *
********************************
*/
class RightMouseListener extends MouseAdapter
{
private MyPopupMenu popupMenu;
private MyTable t;
public RightMouseListener(MyTable t)
{
this.t = t;
this.popupMenu = t.popupMenu;
}
public void mouseReleased(MouseEvent e){checkForTriggerEvent(e);}
public void mousePressed(MouseEvent e){checkForTriggerEvent(e); }
private void checkForTriggerEvent(MouseEvent e)
{
if(e.isPopupTrigger())
popupMenu.show((Component)(t.getParent()),e.getX(),e.getY());
}
}
/************************
* 处理search面板的事件 *
************************
*/
class SearchPaneListener extends KeyAdapter implements ActionListener
{
private JMenu menu;
private JTextField textField;
private JButton submit;
private JPanel content;
public SearchPaneListener(SearchPane p)
{
this.menu = p.menu;
this.textField = p.textField;
this.submit = p.submit;
this.content = p.center;
}
public void actionPerformed(ActionEvent e)
{
//按下提交或者菜单
if( e.getActionCommand() == "提交查询" || e.getActionCommand() == "学生清单")
{
String sql;
if(e.getActionCommand() == "提交查询")
sql = "select * from student where "+getListName(menu.getText())+" = '"+textField.getText().trim()+"' order by sno asc";
else
sql = "select * from student order by sno asc";
ResultSet s = Database.db.executeQuery(sql);
MyTable table = new MyTable( s , Database.TABLEHEAD , Database.STULIST ); //利用结果集创建表单
String[] funList = {"删除_delete","-","详情_info"}; //弹出菜单的功能
table.setPopupMenu(funList); //添加弹出菜单
table.popupMenu.addPopupMenuListener( new PopupMenuListenerOnStudent( table ) );
table.addMouseListener( new RightMouseListener(table) ); //添加表单鼠标监听
content.removeAll(); //先清除以前的表单
content.add( new JScrollPane(table) ); //添加新表单到滚动板
content.getParent().validate(); //更新父容器
table.getModel().addTableModelListener(new STML(table)); //表格事件监听,修改时更新数据库
}
else
menu.setText( " "+((JMenuItem)e.getSource()).getText()+" " );
}
//在文本框中按下enter
public void keyReleased(KeyEvent k)
{
if(k.getKeyChar() == '\n')
submit.doClick();
}
//从Database.STUDENT和Database.STULIST中找出对应关系
public String getListName(String name)
{
int listNum = Database.STUDENT.length,i=0;
for( ; i < listNum ; i++)
if( name.indexOf( Database.STUDENT[i] ) != -1 )
break;
return Database.STULIST[i];
}
}
class STML implements TableModelListener
{
private JTable table;
public STML(JTable t)
{
table = t;
}
//修改表格的数据
public void tableChanged(TableModelEvent e)
{
int row = e.getFirstRow();
int col = e.getColumn();
if(col > 0)
{
String sno = table.getValueAt(row,0).toString();
String s = table.getValueAt(row,col).toString();
String sql = "UPDATE student SET "+Database.STULIST[col]+" ='"+s+"' WHERE sno = '"+sno+"'";
Database.db.executeUpdate(sql);
}
}
}
/**********************
* 处理插入面板的事件 *
**********************
*/
class InsertPaneListener implements ActionListener
{
private InsertPane p;
private String sno;
private String sname = null;
private String ssex;
private int sage;
private String sdept = null;
private String errorInfo = "";
public InsertPaneListener(InsertPane p)
{
this.p = p;
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == p.rButton[0] || e.getSource() == p.rButton[1])
p.tempSex = ( e.getSource() == p.rButton[0] ) ? "男" : "女";
else if( isValid() ) //如果输入合法
{
String sql = "insert into student values " +
"( '"+sno+"' , '"+sname+"' , '"+ssex+"' , '"+sage+"' , '"+sdept+"' )";
if(Database.db.executeUpdate(sql))
errorInfo = "成功添加了 :"+sql;
else
errorInfo = "添加失败 :已存在该学生";
p.errorText.setText(errorInfo);
}
}
//检查用户的输入是否合法
public boolean isValid()
{
try
{
Integer.parseInt(p.textarea[0].getText());
sno = p.textarea[0].getText();
}
catch(Exception ne)
{
errorInfo +="学号应该为数字\n";
}
try
{
sage = Integer.parseInt(p.textarea[2].getText());
}
catch(Exception ne)
{
errorInfo +="年龄应该为数字\n";
}
sname = p.textarea[1].getText();
sdept = p.textarea[3].getText();
ssex = p.tempSex;
if(sname.equals("") )
{
errorInfo += "姓名不该为空\n";
}
if(sage <= 0 || sage >100 )
{
errorInfo += "年龄不该为空\n";
}
if(sdept.equals("") )
{
errorInfo += "院系不该为空\n";
}
//是否存在错误
if(!errorInfo.equals(""))
{
p.errorText.setText(errorInfo);
errorInfo="";
return false;
}
else
{
p.errorText.setText("");
return true;
}
}
}
/******************
* 选项卡面板切换 *
******************
*/
class TabbedPaneListener implements ChangeListener
{
private MainPane tabbedPane;
public TabbedPaneListener(MainPane mp)
{
this.tabbedPane = mp;
}
public void stateChanged(ChangeEvent e)
{
int index = tabbedPane.getSelectedIndex();
//当切换到选课时向数据库查询
if(tabbedPane.getTitleAt(index) == "选课")
{
String sql = "select one.cno,one.cname,two.cname cpname,one.ccredit "
+ "from course one,course two "
+ "where one.cpno = two.cno";
ResultSet s = Database.db.executeQuery(sql);
MyTable table = new MyTable(s,Database.COURSEHEAD,Database.COULIST);
String[] funList = {"选修_select","-","查看关联课程_courseLink"};
table.setPopupMenu( funList );
table.popupMenu.addPopupMenuListener( new PopupMenuListenerOnCourse( table ) );
table.addMouseListener( new RightMouseListener( table ) );
tabbedPane.coursePane.center.removeAll();
tabbedPane.coursePane.center.add( new JScrollPane( table ) );
tabbedPane.coursePane.center.validate();
}
}
}
/************************************
* 选修课程面板上弹出菜单的事件处理 *
************************************
*/
class PopupMenuListenerOnCourse implements ActionListener
{
private MyTable table;
private HashSet hCno = null;
public PopupMenuListenerOnCourse(MyTable t)
{
this.table = t;
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("查看关联课程")) //查看关联课程
{
int rows[] = table.getSelectedRows();
hCno = new HashSet(); //保存某一课程的所有各级先修课
for(int i = 0 ; i < rows.length ; i++)
{
hCno.add(rows[i]);
String cpname = table.getValueAt(rows[i],2).toString();
getRelativeCourse( cpname , table.getRowCount() , hCno);
}
Iterator i = hCno.iterator();
while(i.hasNext())
{
int s = Integer.parseInt(i.next().toString()); //获取关联课程的行号
table.addRowSelectionInterval(s,s); //设置关联课程为被选中状态
}
}
else //选修课程
{
if(hCno != null)
{
Iterator i = hCno.iterator();
while(i.hasNext())
{
int s = Integer.parseInt(i.next().toString()); //获取关联课程的行号
String sno = "000001"; //学号
String cno = table.getValueAt(s,0).toString(); //课程号
String grade = "0";
String sql = "INSERT INTO SC VA
没有合适的资源?快使用搜索试试~ 我知道了~
学生选课管理系统V0.1.0
共67个文件
class:26个
png:21个
java:14个
5星 · 超过95%的资源 需积分: 9 106 下载量 9 浏览量
2009-12-12
00:01:27
上传
评论 1
收藏 7.86MB RAR 举报
温馨提示
Java + MS SQLSERVER 写的学生数据管理系统。该版本实现了学生添加,删除(鼠标右键实现),修改(直接修改表格数据), 实现课程选修。右键列出关联课程,选修等。 该版本目前为测试版,有兴趣可以下载。
资源推荐
资源详情
资源评论
收起资源包目录
V0.1.0.rar (67个子文件)
skins
icons
bottom.png 17KB
info.png 5KB
close.png 3KB
3.png 7KB
courseLink.png 6KB
detailDialog.psd 1.11MB
main.png 119KB
select.png 6KB
delete.png 5KB
1.png 6KB
2.png 7KB
title.png 10KB
bottom.png 234KB
source
title.psd 4.17MB
exit.psd 943KB
bottom.psd 4.24MB
exit.png 146KB
main.jpg 625KB
welcome.png 148KB
enterInfo.png 11KB
title.png 104KB
photos
000001.png 22KB
border.psd 370KB
000005.png 24KB
default.png 12KB
000003.png 24KB
000004.png 27KB
sc
DB.class 4KB
PicturePanel.class 735B
StudentCourse.class 2KB
SetSize.class 978B
InsertPaneListener.class 2KB
SCDemo.class 306B
Database.class 2KB
TabbedPaneListener.class 2KB
SearchPane.class 2KB
InsertPane.class 3KB
MyInfoPane.class 279B
MyJWindow.class 1KB
MyPopupMenu.class 2KB
MainPane.class 2KB
STML.class 1KB
SearchPaneListener.class 3KB
RightMouseListener.class 869B
ScWindowListener.class 1KB
DBDemo.class 1KB
MyTable.class 1KB
PopupMenuListenerOnCourse.class 2KB
PopupMenuListenerOnStudent.class 2KB
CoursePane.class 567B
Student.class 473B
StudentDetail.class 5KB
PictureDemo.class 742B
source
MyTable.java 1KB
MyDialog.java 98B
PanelHandle.java 10KB
ScWindowListener.java 702B
PicturePanel.java 1KB
StudentDetail.java 4KB
DB.java 5KB
MyJWindow.java 1KB
ModPanel.java 5KB
SetSize.java 893B
StudentCourse.java 2KB
MyPopupMenu.java 1KB
MainPane.java 1KB
Database.java 1KB
共 67 条
- 1
资源评论
- w16484373652013-06-26嗯 可以 正需要研究下
- kx004502014-08-12现在在用了。。蛮不错的
- WashingtonHua2012-05-23好东西,正在学数据库,拿来研究下如何通过java连接数据库
kakashi8841
- 粉丝: 2288
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功