一、功能描述
本实验用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){
//删除处理
}});
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_66999594/article/details/139567489