
1.资料信息录入:点击主界面的学生信息录入菜单项下的资料录入可实现此项功能。录入学生资料信息时必须输入所有要求填写的信息才可以将信息录入到数据库,否则会出现错误提醒。
2.成绩信息录入:点击主界面的学生信息录入菜单项下的成绩录入可实现此项功能。录入学生信息时必须输入所有要求填写的成绩信息才可以将信息录入到数据库,否则会出现错误提醒。
3.学生个人资料信息查询:点击主界面的学生信息查询,然后点资料查询,再点个人资料查询可实现此项功能。在出现的界面输入需要查询的学生的学号即可出现需要查询的学生资料信息。
4.所有资料信息查询:点击主界面的学生信息查询,然后点资料查询,再点所有资料查询可实现此项功能。在出现的界面点击确定按钮即可出现所有存在数据库的学生资料信息。
5.学生个人成绩查询:点击主界面的学生信息查询,然后点成绩查询,再点个人成绩查询可实现此项功能。在出现的界面输入需要查询的学生的学号即可出现需要查询的学生的成绩信息。
6.所有成绩查询:点击主界面的学生信息查询,然后顶尖级成绩查询,再点所有成绩查询即可实现此项功能。在出现的界面点击确定按钮即可出现所有存在数据库的学生成绩信息
。
7.资料删除:点击主界面的学生信息删除菜单项下的资料删除即可实现此项功能。在出现的界面输入需要删除的学生的学号即可在数据库中实现该学生资料信息的删除。
8.成绩删除:点击主界面的学生信息删除菜单项下的成绩删除即可实现此项功能。在出现的界面输入要删除成绩的学生的学号即可在数据库中实现该学生成绩信息的删除。
9.资料更改:点击主界面的学生信息更改菜单项下的资料更改即可实现此项功能。在出现的界面输入要更改的学生的学号及更改后的资料信息(各项信息都必须输入否则会出现错误提醒)即可实现在数据库中更改该学生的资料信息。前提是该生的资料必须原先就存在于数据库中。
10.成绩更改:点击主界面的学生信息更改菜单项下的成绩更改即可实现此项功能。在出现的界面输入要更改的学生的学号及更改后的成绩信息(各项成绩都必须输入否则会出现错误提醒)即可实现在数据库中更改该学生的成绩信息。前提是该生的各科成绩必须原先就存在于数据库中。
11.退出系统:点击主界面的系统管理菜单项下的退出系统即可实现此项功能,点击之后会退出学生信息管理系统。
三.数据库设计
学生信息管理系统的数据库Stud.mdb包含了三个数据表,分别是学生信息表student、学生成绩表score和用户表users。其中学生信息表student包含的字段有:id(学号)、name(姓名)、sex(性别)、age(年龄)、phone(联系方式)和adress(籍贯);学生成绩表score包含的字段有:id(学号)、Java程序设计、Web开发技术、数据结构、C语言、操作系统、计算机组成原理,这两个表的主键都是id(学号),用户表users包含的字段有:user(用户),password(密码),主键是user。
四.详细设计
| Log1.java | 登录界面 |
| InputInfo.java | 资料录入 |
| InputScore.java | 成绩录入 |
| QueryInfo.java | 个人资料查询 |
| QueryInfoAll.java | 所有资料查询 |
| QueryScore.java | 个人成绩查询 |
| QueryScoreAll.java | 所有资料查询 |
| DeleteInfo.java | 资料删除 |
| DeleteScore.java | 成绩删除 |
| UpdateInfo.java | 资料更改 |
| UpdateScore.java | 成绩更改 |
| Student.java | 学生类,实现与数据库学生资料表的连接 |
| Score.java | 成绩类,实现与数据库学生成绩表的连接 |
| StudentMenu.java | 主界面,实现对个子功能的调用 |
1.Log1.java登陆界面的主要代码与界面:
import .............*;
public class Log1 extends JFrame implements ActionListener{
.........................................
public static void main(String[] args) {
Log1 frame1=new Log1(); frame1.iniView();}
public void iniView()
{ JFrame frame = new JFrame("学生信息管理系统登录");
JLabel title=new JLabel("欢迎使用学生信息管理系统 !");
................................................
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
public void actionPerformed(ActionEvent e)
{ int flag=0;
if(e.getActionCommand()=="登录")
{ String nametext = TextField1.getText();
if(nametext==null||nametext.equals(""))
{ JOptionPane.showMessageDialog(this,"用户名不能为空!","错误提示",JOptionPane.WARNING_MESSAGE);flag=1;}
String passwordtext = pwdText1.getText();
if(passwordtext==null||passwordtext.equals(""))
{JOptionPane.showMessageDialog(this,"请输入密码!","错误提示",JOptionPane.WARNING_MESSAGE);flag=1;}
if (flag==0){
try {
String strurl="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=Stud.mdb";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection(strurl);
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from users where users.user='"+nametext+"'");
if(!rs.next())
{JOptionPane.showMessageDialog(this,"该用户不存在!","错误提示",JOptionPane.WARNING_MESSAGE);}
else{String s = rs.getString(3);
if(s.equals(passwordtext))
{ StudentMenu sm=new StudentMenu(); sm.go();frame.dispose();}
else JOptionPane.showMessageDialog(this,"密码不正确!","错误提示",JOptionPane.WARNING_MESSAGE);
} conn.close();}
catch(Exception ex)
{System.out.println(ex.toString());}}}
if (e.getActionCommand()=="取消")
System.exit(0);}}
必须同时输入正确的用户名与其所对应的密码才能登录到主界面,否则会弹出相应的提示信息。
2.InputInfo.java资料录入的主要代码与界面
Import................*;
public class InputInfo extends JFrame implements ActionListener {
.......................
rb1=new JRadioButton("男");rb2=new JRadioButton("女");
btOk= new JButton("确定");
btOk.addActionListener(this);
btClear = new JButton("清除");
btClear.addActionListener(this);
ButtonGroup group1 = new ButtonGroup();
group1.add(rb1);group1.add(rb2);
public void actionPerformed(ActionEvent e){
.........................
try{.......................(连接数据库的代码)
int rs=stmt.executeUpdate(sql); JOptionPane.showMessageDialog(this,"资料录入成功!","提示",JOptionPane.INFORMATION_MESSAGE); }catch(Exception a) {System.out.println(a);}setVisible(false);}}
else if(e.getActionCommand()=="清除") {
txtId.setText("");txtName.setText("");
txtAge.setText("");txtPhone.setText("");}}}
必须输入所有信息才能录入,界面如下:
资料录入成功会出现提示:
3.InputScore.java成绩录入的主要代码与界面:
import ...................*;
public class InputScore extends JFrame implements ActionListener {
...................................................
public void go(){
// 创建控件,布局并将所有的组件放到一个面板pa中
lbId=new JLabel("学号:");
lbJava=new JLabel("Java程序设计:");
......................................
btOk= new JButton("确定");
btOk.addActionListener(this);
btClear = new JButton("清除");
btClear.addActionListener(this);
JPanel pj1 =new JPanel();
Border etched = BorderFactory.createEtchedBorder();
Border border = BorderFactory.createTitledBorder(etched, "");
pj1.setBorder(border);
pj1.add(btOk);
...................................................
}
public void actionPerformed(ActionEvent e){
// 从控件中获取用户输入
int flag=0;
if(e.getActionCommand()=="确定") {
String id=txtId.getText();
if(id==null||id.equals("")){
JOptionPane.showMessageDialog(this,"学号不能为空!","错误提示",JOptionPane.WARNING_MESSAGE);flag=1;}
..............................
try{
.........................(连接数据库的代码)
int rs=stmt.executeUpdate(sql); JOptionPane.showMessageDialog(this,"成绩录入成功!","提示",JOptionPane.INFORMATION_MESSAGE);
}catch(Exception a) {System.out.println(a);}}}
else if(e.getActionCommand()=="清除") {
txtId.setText("");
txtJava.setText("");
...................}}}
必须输入所有信息后才能实现成绩信息的录入,否则会出现错误提示。
4. QueryInfo.java个人资料查询的主要代码:
Import............................*;
public class QueryInfo extends JFrame implements ActionListener {
//此处定义查询窗口需要的控件,包括查询条件和查询结果显示
...........................................}
public void go(){
// 创建控件,布局并将所有的组件放到一个面板pa中
lbId=new JLabel("请输入学生的学号:");
txtId=new JTextField(20);
.................................
this.setContentPane(pa); //替换查询窗口的内容
this.setBounds(250,200,400,300);
setVisible(true);}
public void actionPerformed(ActionEvent e){
// 获取查询条件
int flag=0;
if(e.getActionCommand()=="确定") {
String Id=txtId.getText(); if(Id==null||Id.equals(""))
{JOptionPane.showMessageDialog(this,"学号不能为空!","错误提示",JOptionPane.WARNING_MESSAGE);flag=1;}
ta.setText("学号\姓名\性别\年龄\联系方式\籍贯");
//根据条件显示查询结果
if(flag==0){try
{.....................(连接数据库的代码)
ResultSet rs=stmt.executeQuery("select * from student where id='"+Id+"'");
while(rs.next()){ta.append("\\n"+rs.getString("id")+"\"+rs.getString("name")+"\"+rs.getString("sex")+"\"+rs.getString("age")+"\"+rs.getString("phone")+"\"+rs.getString("adress"));//输出到文本区 }
if(ta.getText().equals("学号\姓名\性别\年龄\联系方式\籍贯")){ JOptionPane.showMessageDialog(this,"该学生不存在!","错误提示",JOptionPane.WARNING_MESSAGE);};
}catch(Exception a) {System.out.println(a);}}}
else if(e.getActionCommand()=="重新查询") {
txtId.setText("");
ta.setText("学号\姓名\性别\年龄\联系方式\籍贯")}}}
5. QueryInfoAll.java所有资料查询,QueryScore.java个人成绩查询,QueryScoreAll.java所有成绩查询的实现与QueryInfo个人资料查询的代码类似,在这里不再一一叙述。
6.DeleteInfo.java资料删除的主要代码:
Import.........................*;
public class DeleteInfo extends JFrame implements ActionListener{
....................................
public void go(){
// 创建控件,布局并将所有的组件放到一个面板pa中
lbId=new JLabel("请输入学生的学号:");
txtId=new JTextField(20);
btOk= new JButton("确定");
btOk.addActionListener(this);
btClear = new JButton("清除");
btClear.addActionListener(this);
.........................................
this.setContentPane(pa); //替换查询窗口的内容
this.setBounds(250,200,500,400);setVisible(true);}
public void actionPerformed(ActionEvent e){
// 获取查询条件
int flag=0;
if(e.getActionCommand()=="确定") {
String Id=txtId.getText(); if(Id==null||Id.equals("")){JOptionPane.showMessageDialog(this,"学号不能为空!","错误提示",JOptionPane.WARNING_MESSAGE);flag=1;}
ta.setText("您删除的记录是:\\n学号\姓名\性别\年龄\联系方式\籍贯");
//根据条件显示要删除的记录,并删除
if(flag==0){ try{ ................(连接数据库的代码)
ResultSet rs=stmt.executeQuery("select * from student where id='"+Id+"'"); while(rs.next()){ta.append("\\n"+rs.getString("id")+"\"+rs.getString("name")+"\"+rs.getString("sex")+"\"+rs.getString("age")+"\"+rs.getString("phone")+"\"+rs.getString("adress"));//输出到文本区}
int rs1=stmt.executeUpdate("DELETE FROM student where id='"+Id+"'");
if(ta.getText().equals("您删除的记录是:\\n学号\姓名\性别\年龄\联系方式\籍贯")){ JOptionPane.showMessageDialog(this,"该学生不存在!","错误提示",JOptionPane.WARNING_MESSAGE);}
else JOptionPane.showMessageDialog(this,"资料删除成功!","提示",JOptionPane.INFORMATION_MESSAGE);
}catch(Exception a) {System.out.println(a);}}}
else if(e.getActionCommand()=="清除") {
txtId.setText("");
ta.setText("您删除的记录是:\\n学号\姓名\性别\年龄\联系方式\籍贯");}}}
7. DeleteScore.java成绩删除与资料删除类似,在这里不再叙述。
8.UpdateInfo.java资料更改主要代码:
Import..................................*;
public class UpdateInfo extends JFrame implements ActionListener{
public void go(){
// 创建控件,布局并将所有的组件放到一个面板pa中
lbId=new JLabel("请输入学生的学号:");
lbName=new JLabel("姓名更改为:");
........................................}
public void actionPerformed(ActionEvent e){
// 从控件中获取用户输入
if(e.getActionCommand()=="确定"){...................}
else if(e.getActionCommand()=="清除"){...........}}}
9.UpdateScore.java成绩更改的实现与资料更改类似在这里不再叙述。
10.还定义了两个类:Student和Score.用于辅助实现其他类的功能。
11.StudentMenu.java主界面的实现:
Import........................*;
public class StudentMenu implements ActionListener{
JFrame frame = new JFrame ("学生信息管理系统");
InputInfo inputInfo ;//录入学生资料窗口
InputScore inputScore ;//录入学生成绩窗口
.................................
JTextField status = new JTextField(); //状态栏
JLabel lb=new JLabel("欢迎使用学生信息管理系统");
StudentMenu()
{
inputInfo= new InputInfo("学生资料录入");//创建录入窗口
inputScore= new InputScore("学生成绩录入");
...............................................}
public static void main(String args[]) {
StudentMenu studMenu = new StudentMenu();
studMenu.go();}
public void go() {
JMenuBar menubar = new JMenuBar(); //菜单栏
frame.setJMenuBar(menubar);
JMenu menu,submenu; //菜单和子菜单
JMenuItem menuItem; //菜单项
// 建立信息录入菜单
menu = new JMenu( "学生信息录入");
menubar.add(menu);
.....................................
status.setEditable(false); //设置为不可编辑的
Container cp = frame.getContentPane();
cp.add(status,BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(300,150,500,400);
frame.setVisible(true);}
// 实现ActionListener接口中的方法
public void actionPerformed(ActionEvent e) {
String message=(e.getActionCommand());
status.setText(e.getActionCommand());
if(e.getActionCommand()=="资料录入(K)")
{inputInfo.go();}
else if(e.getActionCommand()=="成绩录入(F)") {inputScore.go();}
...........................}
if (e.getActionCommand()=="退出系统") {System.exit(0);}}}
主界面通过调用其他类的方法来实现各项功能,界面如下:
界面左下脚有个不可编辑的区域,当点击某个菜单项时此区域的内容就会随之变化。
