學(xué)生信息管理系統(tǒng)
一、背景及目的要求
本文將介紹如何使用Java Swing GUI庫(kù)和MySQL數(shù)據(jù)庫(kù)來(lái)編寫一個(gè)簡(jiǎn)單的學(xué)生信息管理系統(tǒng),同時(shí)也將講解GUI的基本布局、事件處理和MySQL數(shù)據(jù)庫(kù)的連接、數(shù)據(jù)操作等知識(shí)。編寫java和sql語(yǔ)句需要安裝JDK和MySQL數(shù)據(jù)庫(kù)。
二、設(shè)計(jì)思路
首先是系統(tǒng)登錄界面,用戶選擇賬號(hào)類型(教師賬號(hào)、學(xué)生賬號(hào)、管理員賬號(hào))。如果賬號(hào)和密碼與數(shù)據(jù)庫(kù)系統(tǒng)中的賬號(hào)數(shù)據(jù)一致,則成功進(jìn)入系統(tǒng);如果賬戶不正確則彈出密碼錯(cuò)誤窗口,當(dāng)密碼錯(cuò)誤三次,登錄界面鎖死無(wú)法再次登錄。
學(xué)生賬號(hào)登錄成功:進(jìn)入學(xué)生信息管理系統(tǒng),可選擇查看個(gè)人信息并修改、查看個(gè)人所有科目成績(jī)、選擇下學(xué)期的課程、退出登錄功能。
老師賬號(hào)登錄成功:進(jìn)入教師管理系統(tǒng),可以選擇查看個(gè)人信息并修改、查看各班級(jí)各學(xué)科所有學(xué)生成績(jī)、查詢教學(xué)工作、錄入學(xué)生的成績(jī)、退出登錄功能。
管理員賬戶登錄成功,進(jìn)入管理員系統(tǒng),可選擇增加或刪除學(xué)生、增加或刪除教師、增加或者刪除課程、退出登錄功能。
附:功能流程圖
附:E-R圖
三、設(shè)計(jì)實(shí)現(xiàn)及代碼分析
系統(tǒng)所有程序都在一個(gè)學(xué)生信息管理系統(tǒng)包,共有九個(gè)類。代碼過(guò)于繁多僅展示主要內(nèi)容的部分組件屬性(絕對(duì)位置、顏色、字體、加入監(jiān)聽(tīng)等)設(shè)計(jì)在此處不再展示。
(一)數(shù)據(jù)庫(kù)連接類(Shujuku.java)用來(lái)連接關(guān)閉數(shù)據(jù)庫(kù)。
public class Shujuku {
public Shujuku() {
try {
Class.forName("com.mysql.jdbc.Driver"); DriverManager.getConnection("jdbc:mysql://localhost:3306/stusystem","root","gyq4674");
} catch (Exception e) {
e.printStackTrace();
} }
public static Connection getConnection() { //連接
try {
Return DriverManager.getConnection("jdbc:mysql://localhost:3306/stu
system","root","gyq4674");
} catch (SQLException e) {
e.printStackTrace(); }
}
return null;
}
public static void close(Connection conn, Statement statement, ResultSet result) {//釋放資源
try { if (result != null) { result.close(); }
if(statement != null) { statement.close(); }
if(conn!=null) { conn.close(); }
} catch (SQLException e) { e.printStackTrace();
} } }
(二)是數(shù)據(jù)庫(kù)登錄GUI界面代碼
系統(tǒng)登錄:登陸界面設(shè)計(jì)的類(LoginGUI.java)和數(shù)據(jù)庫(kù)連(Shujukull.java),使用Swing中各類型組件設(shè)計(jì)登陸界面,單選按鈕確定用戶類別,監(jiān)聽(tīng)“確認(rèn)”按鈕并運(yùn)行查看數(shù)據(jù)庫(kù)admin表的用戶賬戶密碼是否與輸入的一致。密碼正確則利用多線程的休眠sleep語(yǔ)句延緩1.5秒執(zhí)行“提示密碼正確面板”語(yǔ)句,而后進(jìn)入對(duì)應(yīng)的分系統(tǒng)。
public class LoginGUI {
static String account=null;
static String ypass=null;
static int num;
static String role="學(xué)生" ;//定義默認(rèn)登錄角色為學(xué)生
public void denglu() {
JFrame jf = new JFrame("登錄界面");
jf.setBounds(500, 300, 600, 450);
jf.setLayout(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel l = new JLabel("歡迎登錄學(xué)生信息管理系統(tǒng)");//歡迎語(yǔ)
jf.add(l);
ButtonGroup bg=new ButtonGroup();//對(duì)象選擇
JRadioButton jb1=new JRadioButton("學(xué)生",true);
JRadioButton jb2=new JRadioButton("教師",false);
JRadioButton jb3=new JRadioButton("管理員",false);
ActionListener actionListener=new ActionListener() {//對(duì)角色按鈕監(jiān)聽(tīng) @Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("教師")) { role="教師";
}else if(e.getActionCommand().equals("管理員")) {role="管理員";
}else {role="學(xué)生";
} } };
JLabel l1 = new JLabel("用戶名:"); //賬戶密碼
JLabel l2 = new JLabel("密 碼:");
JTextField txt1 = new JTextField("");
JPasswordField pass = new JPasswordField("");//密碼框*號(hào)
pass.setEchoChar('*');
jf.add(l1); jf.add(l2);jf.add(txt1); jf.add(pass);
jf.setVisible(true);
JButton btn = new JButton("登錄");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean b=false;
Connection con=學(xué)生信息管理系統(tǒng).Shujuku.getConnection(); Statement st = null;
ResultSet rs = null;
try { st=con.createStatement();
rs = st.executeQuery("SELECT * FROM accpass WHERE uso='"+txt1.getText()+"'AND role='"+role+"'");
while(rs.next()) {//只有在遍歷時(shí)才能用geystring if(rs.getString("pass").equals(String.valueOf(pass.getPassword()))) { b=true;
}}} catch (SQLException e1) {
e1.printStackTrace();
}finally{ Shujuku.close(con, st, rs);
} num++;//密碼輸入次數(shù)
if(b==false) {
if (num >=3 ) {
JOptionPane.showMessageDialog(jf, "您已經(jīng)輸錯(cuò)三次!"+"\n"+" 此賬戶已凍結(jié)!");//彈出消息框
txt1.setEditable(false);// 鎖住文本框
pass.setEditable(false);
}else {
JOptionPane.showMessageDialog(jf, "密碼錯(cuò)誤");
} }
if (b) {// 登錄成功頁(yè)面
num=0;
jf.setVisible(false);
JFrame jf1 = new JFrame();
JLabel lb1 = new JLabel("用戶名&密碼正確");
JLabel lb2 = new JLabel("正在登錄中.....");
f1.setVisible(true);
new Thread(){//延時(shí)頁(yè)面
public void run(){
try {
Thread.sleep(1000);
jf1.setVisible(false);// 進(jìn)入主頁(yè)面
if(role.equals("學(xué)生")) {
new StudentZhuGUI().zhu(txt1.getText(),"學(xué)生"); }if(role.equals("教師")) {
newTeacherZhuGUI().zhu(txt1.getText()); }if(role.equals("管理員")) {
new AdminZhuGUI().zhu(txt1.getText());
}
} catch (InterruptedException e) { }}
}.start();
}}});
JButton btn2 = new JButton("取消");//關(guān)閉系統(tǒng)
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}});
jf.add(btn);
jf.add(btn2);
}}
(三)學(xué)生系統(tǒng)主頁(yè)面
學(xué)生管理系統(tǒng):學(xué)生系統(tǒng)GUI界面設(shè)計(jì)類(StudentZhuGUI.java)、操作接口類(Student_interf.java)、接口實(shí)現(xiàn)類(Student_interf_imp.java)。系統(tǒng)的GUI界面,使用JFrame的BorderLayout布局的北邊欄作為導(dǎo)航界面(JPanel使用流式布局添加四個(gè)功能以及首頁(yè)和退出按鈕)。在接口實(shí)現(xiàn)類里重寫三個(gè)功能方法,各個(gè)方法里編寫所需的GUI界面以及功能實(shí)現(xiàn)代碼和SQL語(yǔ)句,方法的返回值類型為JPanel,在StudentZhuGUI.java界面接收其返回值并根據(jù)監(jiān)聽(tīng)的按鈕切換JFrame的中間主面板。
public class StudentZhuGUI {//學(xué)生系統(tǒng)
public void zhu(String stuno,String role) {//學(xué)生首頁(yè)面, JFrame jf = new JFrame("學(xué)生信息管理系統(tǒng)");
JPanel jpn1=new JPanel(); //頁(yè)首
JLabel jb=new JLabel("學(xué)生信息系統(tǒng)",0);
JButton jbt1=new JButton("首 頁(yè)");
JButton jbt2=new JButton("個(gè)人信息");
JButton jbt3=new JButton("查詢成績(jī)");
JButton jbt4=new JButton("網(wǎng)上選課");
JButton jbt5=new JButton("退 出");
jpn1.add(jbt1);jpn1.add(jbt2);
jpn1.add(jbt3);jpn1.add(jbt4);
jpn1.add(jbt5); jf.add(jpn1,BorderLayout.NORTH);
JPanel jpm=new JPanel(); //中間
jpm.setLayout(new BorderLayout());//使得插入jpm的面板位于居中
JLabel jl=new JLabel("歡迎進(jìn)入學(xué)生管理系統(tǒng)!",0);
ActionListener lis=new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String actioncommend = e.getActionCommand();
JPanel panel=null;
switch (actioncommend) {
case "個(gè)人信息":
jpm.removeAll();jpm.repaint();//清空面板內(nèi)容//重寫 jpm.add(newStudent_interf_imple().personalinformation(jf,stuno));//加入個(gè)人信息面板
jpm.updateUI();break;//刷新
case "查詢成績(jī)":
jpm.removeAll();jpm.repaint();//清空面板內(nèi)容//重寫
jpm.add(new Student_interf_imple().lookgrade(jf, stuno));//加入個(gè)人信息面板
jpm.updateUI();//刷新 break;
case "網(wǎng)上選課":
jpm.removeAll();jpm.repaint();//清空面板內(nèi)容//重寫
jpm.add(new Student_interf_imple().electivecourse(jf, stuno));//加入個(gè)人信息面板
jpm.updateUI();//刷新
break;
case "首 頁(yè)"://返回操作主頁(yè)面
jf.setVisible(false); zhu(stuno,role);break;
case "退 出"://返回操作主頁(yè)面
jf.setVisible(false);new LoginGUI().denglu();break; } }};}}
注:其余界面的代碼過(guò)多不在暫時(shí),需要JAVA源碼的私信發(fā)送。
四、程序功能測(cè)試及截圖
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-761485.html
五、課程設(shè)計(jì)總結(jié)
本系統(tǒng)擁有三個(gè)子系統(tǒng):學(xué)生管理、教師管理、管理員管理,通過(guò)可視化GUI界面和數(shù)據(jù)庫(kù)連接實(shí)現(xiàn)完整學(xué)生成績(jī)管理功能。登錄注冊(cè)功能實(shí)現(xiàn)不同用戶的不同操作權(quán)限。系統(tǒng)未關(guān)閉也可再次登錄。待改進(jìn)之處包括整理代碼包結(jié)構(gòu),添加教師課程系統(tǒng)以及加強(qiáng)學(xué)生選課約束。通過(guò)此項(xiàng)目,整合了兩個(gè)學(xué)期的知識(shí)并進(jìn)行了綜合應(yīng)用,通知這個(gè)項(xiàng)目提升了GUI和數(shù)據(jù)庫(kù)的應(yīng)用能力,并且錘煉了編程思維和算法實(shí)現(xiàn)能力。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-761485.html
注意:頁(yè)面篇幅有限,僅僅展示部分項(xiàng)目報(bào)告+JAVA源碼,有需要的私信我!
到了這里,關(guān)于JAVA+GUI界面+MysSQL的學(xué)生信息管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!