1、 《Java程序设计》 结课汇报 课程名称 JAVA程序设计 设计题目 学生选课管理系统 专业班级 学 号 学生姓名 教 师 信息工程系 目 录 目 录 III 第1章 系统介绍 4 1.1 系统功效 4 第2章 表设计 5 2.1 系统数据库表结构: 5 第
2、3章 连接数据库实现 6 第4章 系统具体设计 7 4.1 系统登录模块设计 7 4.2 系统主界面具体设计 11 4.3 学生管理模块设计 16 4.4 课程管理模块设计 20 4.5选课管理模块设计 23 答辩统计 27 成绩考评表 27 学生选课管理系统 第1章 系统介绍 1.1 系统功效 本系统关键功效: 1)管理学生信息,其中包含添加,删除,修改等操作。 2)管理课程信息,其中包含添加,删除,修改等操作。 3)管理选课信息,其中包含添加,删除,修改等操作。 4)查询信息,其中包含查询学生信息,查询课程信息,查询选课信息.。 5 )维护系统,
3、备份全部表格为Excel格式。 1.2 系统引用例子 书本P237页 13.10 书本P364页 20.5 书本P389页 20.10 书本P387页 21.6 第2章 表设计 2.1 系统数据库表结构: 在此小节将系统数据库表结构用表形式画出,如: 字段名 字段类型 长度 主/外键 字段值约束 对应汉字名 Sno nvarchar 50 P Not null 学号 Sname nvarchar 50 Not null 学生名字 表2.1 学生信息表(S) Sx nvarchar 50 Not null 学生系别
4、 字段名 字段类型 长度 主/外键 字段值约束 对应汉字名 Cno nvarchar 50 P Not null 课程号 Cname nvarchar 50 Not null 课程名字 表2.2 课程信息表(C) 字段名 字段类型 长度 主/外键 字段值约束 对应汉字名 Sno nvarchar 50 P Not null 学号 Cno nvarchar 50 P Not null 课程号 表2.3 选课信息表(SC) C nvarchar 50 Not null 分数 第3章 连
5、接数据库实现 此节可简写,可合适贴部分SQL Server数据库连接关键代码,如: Connection dbConn=null; try { Class.forName("net.sourceforge.jtds.jdbc.Driver"); dbConn = DriverManager.getConnection( "jdbc:jtds:sqlserver://localhost:1433/" + "student", "sa", "123"); } catch (Exception e) {
6、 e.printStackTrace(); } return dbConn; // 返回Connection对象 第4章 系统具体设计 4.1 系统登录模块设计 1、 运行效果图 图4.1.1 登陆界面 图4.1.2 登陆成功 图4.1.2 登陆失败 2、 关键代码 import java.awt.*; import java.awt.event.*; import javax.swing.*; import
7、java.sql.*; public class User extends JFrame{ private JLabel use,password; private JTextField k1;//用户名输入框 private JPasswordField k2;//密码输入框 private JButton b1,b2; //登录窗口 public User(JFrame f){ super("系统登录"); Container c=getContentPane(); c.setLayout(new FlowLayout()); us
8、e=new JLabel("username:"); use.setFont(new Font("Serif",Font.PLAIN,20)); password=new JLabel("password:"); password.setFont(new Font("Serif",Font.PLAIN,20)); k1=new JTextField(12); k2=new JPasswordField(12); b1=new JButton("登录"); b2=new JButton("退出"); // 设置登录方法 BH
9、andler b=new BHandler(); EXIT d=new EXIT(); b1.addActionListener(b); b2.addActionListener(d); //添加控件 c.add(use); c.add(k1); c.add(password); c.add(k2); c.add(b1); c.add(b2); setBounds(600,300,250,150); setVisible(true); setResizable(false);
10、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //主函数 public static void main(String[] args) { User f1=new User(new JFrame()); } //登录按钮方法 private class BHandler implements ActionListener{ public void actionPerformed(ActionEvent event){ if(k1
11、getText().equals("")||k2.getText().equals("")){ JOptionPane.showMessageDialog(User.this,"用户名密码不能为空!" ); } else{ Statement stmt=null; ResultSet rs=null; String sql; sql="select * from admin where username='"+k1.getText()+"'";
12、 try{ Connection dbConn1=Conn.CONN(); stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=stmt.executeQuery(sql); if(rs.next()){ String xm=rs.getString("password"); if(k2.getText().equals(xm.tr
13、im())){JOptionPane.showMessageDialog(User.this,"登录成功"); dispose(); new Menu();//管理窗口 } else{JOptionPane.showMessageDialog(User.this,"密码错误");} } else{JOptionPane.showMessageDialog(User.this,"用户名错误");} rs.close(); stmt.close(); } catch(SQLExcept
14、ion e){ JOptionPane.showMessageDialog(User.this,"SQL错误信息:"+e.getMessage()); } } } } //退出方法结束 private class EXIT implements ActionListener{ public void actionPerformed(ActionEvent even){ System.exit(0); } } }//父类结束
15、 4.2 系统主界面具体设计 1、 运行效果图 图4.2.1 登陆成功后界面 图4.2.2 学生管理菜单 图4.2.2 课程管理菜单 图4.2.2 选课管理菜单 图4.2.2 查询管理菜单 2、实现代码: 添加数据时,若碰到必需信息未填写、不能反复信息在数据库中已存在,全部会提醒无法添加及其错误原因。 import java.awt.*; import java.awt.event.*; import javax.swing.*; pu
16、blic class Menu extends JFrame implements ActionListener{ Addstu 增加学生界面; Updatastu 修改学生界面; Delstu 删除学生界面; AddC 增加课程界面; DelC 删除课程界面; UpdateC 修改课程界面; AddSC 增加选课界面; DelSC 删除选课界面; UpdateSC 修改选课界面; Selstu 学生查询界面; Backup 备份界面; JPanel pCenter; CardLayout
17、card=null; JLabel label=null; JMenuBar mb=new JMenuBar();//菜单栏 JMenu m1=new JMenu("学生管理"); JMenuItem add1=new JMenuItem("①添加学生学籍 "); JMenuItem updata1=new JMenuItem("②更新学生学籍 "); JMenuItem delete1=new JMenuItem("③删除学生学籍 "); JMenu m2=new JMenu("课程管理"); JMenuItem a
18、dd2=new JMenuItem("①增加课程 "); JMenuItem updata2=new JMenuItem("②更新课程 "); JMenuItem delete2=new JMenuItem("③删除课程 "); JMenu m3=new JMenu("选课管理"); JMenuItem add3=new JMenuItem("①成绩录入 "); JMenuItem updata3=new JMenuItem("②成绩修改 "); JMenuItem delete3=new JMenuItem("③成绩删除
19、"); JMenu m4=new JMenu("查询管理"); JMenuItem 学生查询=new JMenuItem("①查询信息 "); JMenuItem backup=new JMenuItem("②备份信息 "); JMenuItem m5=new JMenuItem("系统退出"); Font t=new Font ("sanerif",Font.PLAIN,12); public Menu (){ this.setTitle("学生选课管理系统"); try {UIManager.setLookAndFeel
20、UIManager.getSystemLookAndFeelClassName());} catch(Exception e){System.err.println("不能设置外观: "+e);} //组合菜单 addMenu1(); addMenu2(); addMenu3(); addMenu4(); addJMenuBar(); setJMenuBar(mb); label=new JLabel("欢迎使用江西理工大学应科院选课管理系统",JLabel.CENTER); label.setFo
21、nt(new Font("宋体",Font.BOLD,25)); label.setHorizontalTextPosition(SwingConstants.CENTER); label.setForeground(Color.red); //点击事件 add1.addActionListener(this); updata1.addActionListener(this); delete1.addActionListener(this); m5.addActionListener(this); add2.addActionLi
22、stener(this); delete2.addActionListener(this); updata2.addActionListener(this); add3.addActionListener(this); delete3.addActionListener(this); updata3.addActionListener(this); 学生查询.addActionListener(this); backup.addActionListener(this); card=new CardLayout();
23、 pCenter=new JPanel(); pCenter.setLayout(card); 增加学生界面=new Addstu(); 修改学生界面=new Updatastu(); 删除学生界面=new Delstu(); 增加课程界面=new AddC(); 删除课程界面=new DelC(); 修改课程界面=new UpdateC(); 增加选课界面=new AddSC(); 删除选课界面=new DelSC(); 修改选课界面=new UpdateSC(); 学生查询界面=new S
24、elstu(); 备份界面=new Backup(); pCenter.add("欢迎界面",label); pCenter.add("增加学生界面",增加学生界面); pCenter.add("修改学生界面",修改学生界面); pCenter.add("删除学生界面",删除学生界面); pCenter.add("增加课程界面",增加课程界面); pCenter.add("删除课程界面",删除课程界面); pCenter.add("修改课程界面",修改课程界面); pCenter.add("增加选课界面"
25、增加选课界面); pCenter.add("删除选课界面",删除选课界面); pCenter.add("修改选课界面",修改选课界面); pCenter.add("学生查询界面", 学生查询界面); pCenter.add("备份界面", 备份界面); add(pCenter,BorderLayout.CENTER); validate(); setVisible(true); setBounds(400,150,600,380); setDefaultCloseOperation(JFrame.EXIT_ON
26、CLOSE); addWindowListener(new WindowAdapter(){//关闭程序时操作 public void windowClosing(WindowEvent e){System.exit(0);} }); validate(); } private void addJMenuBar() { mb.add(m1);mb.add(m2);mb.add(m3);mb.add(m4);mb.add(m5); } private void addMenu4() { m4.ad
27、d(学生查询); m4.add(backup); m4.setFont(t); } private void addMenu3() { m3.add(add3); m3.add(updata3); m3.add(delete3); m3.setFont(t); } private void addMenu2() {//将菜单加入到菜单栏中 m2.add(add2); m2.add(updata2); m2.add(delete2); m2.setFont(t); }
28、 private void addMenu1() { m1.add(add1); m1.add(updata1); m1.add(delete1); m1.setFont(t);//字体 } public void actionPerformed(ActionEvent e){ Object obj=e.getSource(); if(obj==m5){System.exit(0);} else{if(obj==add1){ card.show(pCenter,"增加学生界面"); }
29、 else{if(obj==updata1){ card.show(pCenter,"修改学生界面"); } else{if(obj==delete1){ card.show(pCenter, "删除学生界面"); } else{if(obj==add2){ card.show(pCenter, "增加课程界面"); } else{if(obj==delete2){ card.show(pCenter, "删除课程界面"); } else{if(obj==updata2){ card.s
30、how(pCenter, "修改课程界面"); } else{if(obj==add3){ card.show(pCenter, "增加选课界面"); } else{if(obj==delete3){ card.show(pCenter, "删除选课界面"); } else{if(obj==updata3){ card.show(pCenter, "修改选课界面"); } else{if(obj==学生查询){ card.show(pCenter, "学生查询界面"); } else
31、{if(obj==backup){ card.show(pCenter, "备份界面"); } }} }}}}}}}}}} public static void main(String[] args) { new Menu(); } } 4.3 学生管理模块设计 1、 运行效果图 图4.3.1 添加学生学籍 图4.3.1 修改学生学籍 图4.3.1 删除学生学籍 2、 实现代码: Addstu.java/Updatastu.java/Delstu.java import java.awt.*;
32、 import javax.swing.*; import java.sql.*; import java.awt.event.*; public class Addstu extends JPanel implements ActionListener{ JTextField 学号,姓名,系别; JButton 录入; public Addstu(){ try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch(Exceptio
33、n e){System.err.println("不能设置外观: "+e);} 学号=new JTextField(12); 姓名=new JTextField(12); 系别=new JTextField(12); 录入=new JButton("录入"); 录入.addActionListener(this); Box box1=Box.createHorizontalBox();//横放box Box box2=Box.createHorizontalBox(); Box box3
34、Box.createHorizontalBox(); Box box4=Box.createHorizontalBox(); box1.add(new JLabel("学号:"/*,JLabel.CENTER*/)); box1.add(学号); box2.add(new JLabel("姓名:"/*,JLabel.CENTER*/)); box2.add(姓名); box3.add(new JLabel("系别:"/*,JLabel.CENTER*/)); box3.add(系别); box4.add(录入);
35、 Box boxH=Box.createVerticalBox();//竖放box boxH.add(box1); boxH.add(box2); boxH.add(box3); boxH.add(box4); boxH.add(Box.createVerticalGlue()); JPanel messPanel=new JPanel(); messPanel.add(boxH); setLayout(new BorderLayout()); add(messPanel,BorderLayou
36、t.CENTER); validate(); } public void actionPerformed(ActionEvent c){ Object obj=c.getSource(); if(obj==录入){ if(学号.getText().equals("")||姓名.getText().equals("")||系别.getText().equals("")){ JOptionPane.showMessageDialog(this,"学生信息请填满再录入!" ); } Statement
37、stmt=null; ResultSet rs1=null; String sql,sql1; sql1="select * from S where Sno='"+学号.getText()+"'"; sql="insert into S values('"+学号.getText()+"','"+姓名.getText()+"','"+系别.getText()+"')"; try{ Connection dbConn1=Conn.CONN(); stmt=(Statement)dbCo
38、nn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs1=stmt.executeQuery(sql1); if(rs1.next()){JOptionPane.showMessageDialog(this,"该学号以存在,无法添加");} else{ stmt.executeUpdate(sql); JOptionPane.showMessageDialog(this,"添加成功"); }
39、 rs1.close(); stmt.close(); } catch(SQLException e){ System.out.print("SQL Exception occur.Message is:"+e.getMessage()); } } } } 4.4 课程管理模块设计 1、 运行效果图 图4.4.1 课程录入界面 图4.4.2 课程修改界面 图4.4.3 课程删除界面 2、 运行代码:
40、AddC.java/UpdataC.java/DelC.java import java.awt.*; import javax.swing.*; import java.sql.*; import java.awt.event.*; public class AddC extends JPanel implements ActionListener{ JTextField 课号,课名; JButton 录入; public AddC(){ try {UIManager.setLookAndFeel(UIManager.getSystemLookAn
41、dFeelClassName());} catch(Exception e){System.err.println("不能设置外观: "+e);} 课号=new JTextField(12); 课名=new JTextField(12); 录入=new JButton("录入"); 录入.addActionListener(this); Box box1=Box.createHorizontalBox();//横放box Box box2=Box.createHorizontalBo
42、x(); Box box3=Box.createHorizontalBox(); Box box4=Box.createHorizontalBox(); box1.add(new JLabel("课号:")); box1.add(课号); box2.add(new JLabel("课名:")); box2.add(课名); box4.add(录入); Box boxH=Box.createVerticalBox();//竖放box boxH.add(box1);
43、 boxH.add(box2); boxH.add(box3); boxH.add(box4); boxH.add(Box.createVerticalGlue()); JPanel messPanel=new JPanel(); messPanel.add(boxH); setLayout(new BorderLayout()); add(messPanel,BorderLayout.CENTER); validate(); } public void
44、 actionPerformed(ActionEvent c){ Object obj=c.getSource(); if(obj==录入){ if(课号.getText().equals("")||课名.getText().equals("")){ JOptionPane.showMessageDialog(this,"学生信息请填满再录入!" ); } Statement stmt=null; ResultSet rs=null,rs1=null;//结果集 Str
45、ing sql,sql1; sql1="select * from C where Cno='"+课号.getText()+"'"; sql="insert into C values('"+课号.getText()+"','"+课名.getText()+"')"; try{ Connection dbConn1=Conn.CONN(); stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,R
46、esultSet.CONCUR_READ_ONLY); rs1=stmt.executeQuery(sql1); if(rs1.next()){JOptionPane.showMessageDialog(this,"该课号以存在,无法添加");} else{ stmt.executeUpdate(sql); JOptionPane.showMessageDialog(this,"添加成功"); } rs1.close(); s
47、tmt.close(); } catch(SQLException e){ System.out.print("SQL 错误信息:"+e.getMessage()); }}}} 4.5选课管理模块设计 1、运行效果图 图4.5.1 成绩录入界面 图4.5.2 成绩修改界面 图4.5.3 成绩删除界面 2、运行代码: AddSC.java/UpdataSC.java/DelSC.java import java.awt.*; import javax.swing.
48、 import java.sql.*; import java.util.*; import javax.swing.filechooser.*; import java.io.*; import java.awt.event.*; public class AddSC extends JPanel implements ActionListener{ JTextField 课号,学号,成绩; JButton 录入; public AddSC(){ try {UIManager.setLookAndFeel(UIManager.getSystemL
49、ookAndFeelClassName());} catch(Exception e){System.err.println("不能设置外观: "+e);} 课号=new JTextField(12); 学号=new JTextField(12); 成绩=new JTextField(12); 录入=new JButton("录入"); 录入.addActionListener(this); Box box1=Box.createHorizontalBox();//横放box Box box2=Box.crea
50、teHorizontalBox(); Box box3=Box.createHorizontalBox(); Box box4=Box.createHorizontalBox(); box1.add(new JLabel("课号:")); box1.add(课号); box2.add(new JLabel("学号:")); box2.add(学号); box3.add(new JLabel("成绩:")); box3.add(成绩); box4.add(录入); Box boxH=Box.cre






