一、功能描述
本实验用Java实现了一个小型的学生信息管理系统。实验使用的Java GUI库为 SWT ,采用集成开发工具Eclipse,后台数据库为Access 2003.
本学生信息管理系统实现了系统登陆,学生信息浏览、学生信息添加、删除和查询等功能。系统有个模块:系统登陆模块、主界面模块、学生信息管理模块、数据库操作模块。
二、类描述
类 名 | 属 性 | 方 法 | 备 注 |
---|---|---|---|
LoginSys | final Display display; | public LoginSys()…… | 系统登陆类 |
final Shell shellLogin; | public static void main(String [] args) | ||
final Composite composite; | |||
final Group group; | |||
final Label label1; | |||
final Label label2; | |||
final Text txtUsername; | |||
final Text txtPass; | |||
final Button btnLogin; |
类 名 | 属 性 | 方 法 | 备 注 |
---|---|---|---|
frmMain | private Text txtSearch; | public frmMain() | 系统主界面类,StuBean是学生信息数据处理类 |
public static Table table; | public static void main(String [] args) | ||
StuBean stubean |
类 名 | 属 性 | 方 法 | 备 注 |
---|---|---|---|
AddStuInfo | private Text txtDept; | public AddStuInfo() | 添加学生信息 |
private Text txtClass; | public static void main(String [] args) | ||
private Text txtEmail; | |||
private static Text txtAge; | |||
private static Text txtName; | |||
private static Text txtsNo; |
类 名 | 属 性 | 方 法 | 备 注 |
---|---|---|---|
STCalendar | private Date nowDate; | public STCalendar(Shell parent) | 日历控件 |
private String selectedDate; | private int getLastDayOfMonth(int year, int month) | ||
private GridData gridData; | public boolean isLeapYear(int year) | ||
private CLabel Sunday; | private void moveTo(int type, int value) | ||
private CLabel monday; | private void setDayForDisplay(Calendar now) | ||
private CLabel tuesday; | public void previousYear() | ||
private CLabel wednesday; | public void nextYear() | ||
private CLabel thursday; | public void nextMonth() | ||
private CLabel friday; | public void previousMonth() | ||
private CLabel Saturday; | public void mouseDoubleClick(MouseEvent e) | ||
private Button yearUp; | public Object open() | ||
private Button yearNext; | |||
private Button monthUp; | |||
private Button monthNext; | |||
private CLabel[] days; |
类 名 | 属 性 | 方 法 | 备 注 |
---|---|---|---|
Database | private Statement stmt; | public void OpenConn() | 数据库处理类,包括连接,执行SQL语句,返回记录集和关闭操作 |
ResultSet rs; | public ResultSet executeQuery(String sql) | ||
String sql; | public void executeUpdate(String sql) | ||
String strurl; | public void closeStmt() | ||
private static Text txtName; | public void closeConn() |
类 名 | 属 性 | 方 法 | 备 注 |
---|---|---|---|
StuBean | String sql; | public void stuAdd(String Stunum, String Stuname, String Stuclass, String Stusex, String Stuage, String Studept, String Stuemail) | 学生增删改查数据处理类 |
ResultSet rs; | public void stuDel(String num) | ||
String sNum; | public String[] stuSearch(String num) | ||
String sName; | public String[][] stuAllSearch(String colname,String colvalue) | ||
String sSex; | |||
String sClass; | |||
String sBirth; | |||
String sDept; | |||
String sEmail; |
类 名 | 属 性 | 方 法 | 备 注 |
---|---|---|---|
UserBean | String sUserName; | public boolean HeFaUser(String UserName,String UserPass) | 用户登陆操作类 |
String sUserPass; | |||
String sql; | |||
ResultSet rs; |
类 名 | 属 性 | 方 法 | 备 注 |
---|---|---|---|
CommonOperate | public void RefreshTable(Table tTable) | 表格刷新类 |
附:源程序代码框架
三、界面设计与事件处理
- 登陆界面
界面设计:
登陆界面是 Shell 、Composite、Group三个容器的嵌套:界面上的“用户名”和“密码”标签,两个 Text 文本框,两个按钮放在Group容器中,Group容器又嵌套在Composite容器中,具体实现如下:
composite = new Composite(shellLogin, SWT.BORDER);
group = new Group(composite, SWT.NONE);
label1 = new Label(group, SWT.NONE);
txtUsername = new Text(group, SWT.BORDER);
btnLogin = new Button(group, SWT.NONE);
事件处理:
登陆按钮的事件处理为匿名内部类处理:
btnLogin.addSelectionListener (new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
//判断登陆用户是否合法
}
});
取消按钮的事件处理也为匿名内部类处理:
btnCancel.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
display.close();
}
});
- 系统主界面
界面设计:
主界面上使用了菜单栏Menu,工具栏 ToolBar,表格 Table,分割窗 SashForm,扩展栏 ExpandBar 。
主界面容器是 Shell,Shell里有 菜单栏Menu,工具栏 ToolBar 和分割窗 SashForm:
Menu menu = new Menu(shellMain, SWT.BAR);
final ToolBar toolBar = new ToolBar(shellMain, SWT.FLAT | SWT.WRAP);
final SashForm sashForm1 = new SashForm(shellMain, SWT.HORIZONTAL);
其中表格 Table和扩展栏 ExpandBar又嵌套在SashForm中:
table = new Table(sashForm1, SWT.FULL_SELECTION | SWT.BORDER);
final ExpandBar expandbar = new ExpandBar(sashForm1, SWT.V_SCROLL);
而ExpandBar里面又嵌套了一个Composite容器,用来装载查询信息:
Composite comp1 = new Composite(expandbar,SWT.NONE);
final Label lbl = new Label(comp1,SWT.NONE);
txtSearch = new Text(comp1, SWT.BORDER);
final Button btnSearch = new Button(comp1, SWT.NONE);
事件处理:
表格 Table中的数据是通过调用 CommonOperate 类的 RefreshTable方法实现的。
单击菜单栏中“添加学生信息”按钮的事件处理如下:
item21.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
new AddStuInfo();
}
});
- 学生信息添加界面
界面设计:
窗体上的所有控件都放在Shell容器中:
final Label label1 = new Label(shellAddStuInfo, SWT.NONE);
txtsNo = new Text(shellAddStuInfo, SWT.BORDER);
final Button btnAge = new Button(shellAddStuInfo, SWT.NONE);
final Button btnAdd = new Button(shellAddStuInfo, SWT.NONE);
final Button btnCancel = new Button(shellAddStuInfo, SWT.NONE);
事件处理
单击选择出生日期按钮的事件为:
btnAge.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
STCalendar stc = new STCalendar(shellAddStuInfo);
txtAge.setText((String) stc.open());
}
});
添加和取消按钮的事件处理采用匿名内部类处理:
btnCancel.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
shellAddStuInfo.close();
}
});
- 日历控件
界面设计:
日历控件中主容器是Shell,日期数据放在 GridData 中。
事件处理:
双击某一天即可选择所需的日期,事件处理如下:
public void mouseDoubleClick(MouseEvent e) {//}
选择年、月的方向键是通过按钮的匿名内部类实现的:
例如:yearUp.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
previousYear();
}
})
- 学生信息查询
查询按钮的事件处理如下:
btnSearch.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
//查询处理}
});
- 学生信息删除
删除表格中的一行数据是采用右键鼠标的方式,处理如下:
Menu menu2 = new Menu(shellMain,SWT.POP_UP);
table.setMenu(menu2);
MenuItem item = new MenuItem(menu2,SWT.PUSH);
item.setText("删除行");
item.addListener(SWT.Selection, new Listener(){
public void handleEvent(Event event){
//删除处理
}});