java学生选课系统方案_第1页
java学生选课系统方案_第2页
java学生选课系统方案_第3页
java学生选课系统方案_第4页
免费预览已结束,剩余20页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.需求分析 :写一个较为严谨的学生选课系统,实现学生可以选择多门选课课程,并将有效选课结果保存到数据库。学生需要登录后 ,才能选课 。让学生可以在选课系统通过多种方式查询到要选的课程信息。/ 选课规则 : 1 、每个学生可以选多门课程 ,多次选课的总学分不能超过 6学分;2、不能重复选择一门课程 ; 3、每一门课程的选课人数都有数量限制 ,当某门课程的选课名额满时 ,则应另选课程 。4、凭用户名和密码登录 ,通过提交某一课程号来选课/ 总体设计方案 :建立三个类 :登录类 register ,选课类 studentChooseCourse,数据库工具类JDBCUtil;一个SQL 脚本文件用于

2、生成数据库表结构和初始记录,以搭建数据库环境 。登录类 register 类,负责对用户的身份进行验证;工具类 JDBCUtil 用于实现连接,你可调用 JDBCUtil 的 getConnection() 方法等到链接 。选课类 studentChooseCourse用于,实现选课功能 。其中包括几个主要方法 :1、 actionPerformed(ActionEvent)用于监听用户 “查询 ”和 “提交 ”操作 ,并负责调用各种方法对其进行处理2、createSearchCourse() 用于产生图形用户界面3、 processBeforeCommit() 用于对用户的 “提交 ”查找进

3、行验证 ,剔除无效的用户操作4、 tryCommit() 负责对有效的 “提交 ”操作 ,进一步处理 ,并将有效的操作结果时时保存到数据库 ,并更新数据库原有信息/ 本程序用到的知识点 :数据库连接 JDBC; SQL 建表、插入输入 、动态查询 ;图形用户界面的产生以及处理查询结果集并较好显示 ;程序设计基础知识 。.专业专注./ 代码如下 :publicclassStudentChooseCourseextendsJFrameimplementsActionListener JTextField jtfSearch = new JTextField(11);String columnNam

4、es = new String "课程 ID", " 课程名 ", " 学时 ", " 学分 ", "学期 ", " 性质" ;DefaultTableModel dtmSearch = new DefaultTableModel(columnNames, 27);JTable jtSearch = new JTable(dtmSearch);JScrollPane jspSearch = new JScrollPane(jtSearch);JComboBox jcbSear

5、ch = new JComboBox();JTextField jtfSelectedCourse = new JTextField(10);Connection con = null;PreparedStatement ps = null;ResultSet rs = null;.专业专注.private static String usrName;private static String passwrd;public StudentChooseCourse(String usrName, String passwrd) createSearchCourse();this.usrName

6、= usrName;this.passwrd = passwrd;public String getUsrName() return usrName;public void setUsrName(String usrName) this.usrName = usrName;public String getPasswrd() return passwrd;public void setPasswrd(String passwrd) this.passwrd = passwrd;public void actionPerformed(ActionEvent e) String str = e.g

7、etActionCommand();.专业专注.if (" 查询 ".trim().equals(str) int k = 1;while (k < 10) for (int i = 1; i < 7; i+) jtSearch.setValueAt(null, k - 1, i - 1);k+;searchAvailableCourse(); else if (" 提交 ".equals(str) boolean effect=processBeforeCommit();if(effect=true)tryCommit();public b

8、oolean processBeforeCommit()int k = 1;while (k < 10) for (int i = 1; i < 7; i+) .专业专注.jtSearch.setValueAt(null, k - 1, i - 1);k+;String userInput = jtfSelectedCourse.getText().toString().trim().toLowerCase();String sql = "select cno from coursexx where cno=? "boolean flagCourseExist

9、= false;try ps = con.prepareStatement(sql);ps.setString(1, userInput);rs = ps.executeQuery();flagCourseExist = rs.next(); catch (Exception eC) eC.printStackTrace();if (!flagCourseExist) JOptionPane.showMessageDialog(null, "该课程不存在 ,请重新输入 ");return false;PreparedStatement ps = null;.专业专注.sql

10、 = "select sum(grade) "+ "from (select x.sname , o,k.grade grade "+ "from coursexx k join choicesxx x "+ "on o=o and x.sname=?) result" String grade =null;try ps = con.prepareStatement(sql);ps.setString(1, usrName);rs = ps.executeQuery();while (rs.next() grade

11、 = rs.getString(1);if(grade=null)grade="0" catch (Exception rrr) rrr.printStackTrace();总学分:" + grade);if (Integer.parseInt(grade) > 6) JOptionPane.showMessageDialog(null, "你已经选满 6学分,系统将退出 ");this.setVisible(false);return false;.专业专注.sql = "select * from choicesxx whe

12、re sname=? and cno=?"boolean flag = false;try ps = con.prepareStatement(sql);ps.setString(1, this.getUsrName();ps.setString(2, userInput);rs = ps.executeQuery();flag = rs.next(); catch (Exception eaa) eaa.printStackTrace();if (flag) JOptionPane.showMessageDialog(null, "你已经选择了该课程 。请另选课程 &qu

13、ot;);return false;return true;public void tryCommit() String userInput = jtfSelectedCourse.getText().toString().trim().toLowerCase();PreparedStatement ps;.专业专注.String sql = "select (Max-selectedCount) as RemainedCount "+ "from Coursexx where cno=?" try ps = con.prepareStatement(s

14、ql); ps.setString(1, userInput);rs = ps.executeQuery();ResultSetMetaData meta = rs.getMetaData();int cols = meta.getColumnCount();int RemainedCount = -1;while (rs.next() RemainedCount = rs.getInt(1);if (RemainedCount > 0) sql = "insert into choicesxx values(?,?)"ps = con.prepareStatemen

15、t(sql);ps.setString(1, this.getUsrName();ps.setString(2, userInput);ps.executeUpdate();JOptionPane.showMessageDialog(null, "选课成功 : " + this.getUsrName()+ "选了 " + userInput + "." + "" + "还有 " + RemainedCount+ " 人可以选该课程 。");.专业专注.sql = "

16、update CourseXX set selectedCount=selectedCount+1 where cno=?"ps = con.prepareStatement(sql);ps.setString(1, userInput);ps.executeUpdate();mit(); catch (Exception es) es.printStackTrace(); try con.rollback(); catch (Exception ey) ey.printStackTrace();public void searchAvailableCourse() if (JDBC

17、Util.getConnection() != null) con = JDBCUtil.getConnection(); else con = JdbcUtil.getConnection();.专业专注.String userInput = jtfSearch.getText().toString().trim().toLowerCase();String selectedItem = jcbSearch.getSelectedItem().toString().trim();String sql = null;try if (" 课程名 ".equals(select

18、edItem) sql = "select cno,cname,hour,grade,term,isNeed from CourseXX where cname= ?"ps = con.prepareStatement(sql);ps.setString(1, userInput); else if (" 课程 ID".equals(selectedItem) sql = "select cno,cname,hour,grade,term,isNeed from CourseXX where cno= ?"ps = con.prepa

19、reStatement(sql);ps.setString(1, userInput); else if (" 学时 ".equals(selectedItem) sql = "select cno,cname,hour,grade,term,isNeed from CourseXX where hour= ?"ps = con.prepareStatement(sql);ps.setInt(1, Integer.parseInt(userInput);.专业专注. else if (" 学分 ".equals(selectedIte

20、m) sql = "select cno,cname,hour,grade,term,isNeed from CourseXX where grade= ?"ps = con.prepareStatement(sql);ps.setInt(1, Integer.parseInt(userInput); else if (" 学期 ".equals(selectedItem) sql = "select cno,cname,hour,grade,term,isNeed from CourseXX where term= ?"ps = c

21、on.prepareStatement(sql);ps.setString(1, userInput);rs = ps.executeQuery();mit();ResultSetMetaData meta = rs.getMetaData();int cols = meta.getColumnCount();String result = null;int k = 1;boolean flag = false;while (rs.next() for (int i = 1; i <= cols; i+) result = rs.getString(i);.专业专注.jtSearch.s

22、etValueAt(result, k - 1, i - 1);k+;flag = true;if (flag = false) JOptionPane.showMessageDialog(null, "该课程不存在 ,请重新输入 ");return; catch (Exception ex) ex.printStackTrace();try con.rollback(); catch (Exception er) er.printStackTrace();public void createSearchCourse() this.setLayout(new GridLay

23、out(3, 1);JPanel jp1 = new JPanel();jp1.setLayout(new GridLayout(4, 1);JPanel jp2 = new JPanel();.专业专注.JPanel jp3 = new JPanel();JPanel jp10 = new JPanel();JPanel jp11 = new JPanel();JPanel jp12 = new JPanel();JPanel jp13 = new JPanel();JLabel jlSearch = new JLabel("学 生 选 课 系 统 ");jp11.add

24、(jlSearch);jcbSearch.addItem(new String("课程名 ");jcbSearch.addItem(new String("课程 ID");jcbSearch.addItem(new String("学时 ");jcbSearch.addItem(new String("学分 ");jcbSearch.addItem(new String("学期 ");jp12.add(jtfSearch);jp12.add(jcbSearch);JButton jbOK = n

25、ew JButton("查询 ");jbOK.addActionListener(this);jbOK.setSize(90, 20);jp13.add(jbOK);jp1.add(jp10);jp1.add(jp11);jp1.add(jp12);jp1.add(jp13);.专业专注.jp2.add(jspSearch);JLabel jlSelectedCourse = new JLabel("请输入课程 ID: ");JButton jbSelectedCourse = new JButton("提交 ");jbSelecte

26、dCourse.addActionListener(this);jp3.add(jlSelectedCourse);jp3.add(jtfSelectedCourse);jp3.add(jbSelectedCourse);this.add(jp1);this.add(jp2);this.add(jp3);this.setVisible(true);this.setSize(485, 600);public static void main(String args) /String usrName = "xuliang"/String passwrd = "123&

27、quot;new StudentChooseCourse(usrName, passwrd);drop table registerXu;createtableregisterXu(idvarchar(20),userNamevarchar(20),passWordvarchar(20),identify varchar(20);.专业专注.insert into registerXu values('s001','xuliang','123','学生 ');insert into registerXu values('s

28、002','xuliang2','1234','学生 ');insert into registerXu values('j001','jack','12345','学生 ');insert into registerXu values('001','user','user','学生 ');insert into registerXu values('z001','zlm',

29、9;corejava','老师 ');String sql = "select * from registerXu "+ "where userName=? and passWord=? and identify=?" /table 2:Coursexx 课程表drop table Coursexx;create table Coursexx(cno varchar(20) primary key,cname varchar(20),hour Int,grade Int,term varchar(20),isNeed varcha

30、r(20), selectedCount Int ,Max Int);insert into Coursexx values('c001','CoreJava',50,5,'201007','NoNecessary',0,50);insert into Coursexx values('c002','XML',20,2,'201008','NoNecessary',0,40);insertintoCoursexxvalues('c003','H

31、IBERNATE',20,4,'201008','NoNecessary',0,30);insert into Coursexx values('c004','SQL',20,4,'201006','NoNecessary',0,5);insert into Coursexx values('c005','JDBC',20,2,'201008','NoNecessary',0,3);insert into Coursexx va

32、lues('c006','AJAX',20,2,'201010','NoNecessary',0,1);insert into Coursexx values('c007','JSP',100,8,'201009','NoNecessary',0,1sql = "select cno,cname,hour,grade,term,isNeed from CourseXX where cname= ?".专业专注./table 3: 学生表 -drop

33、 table studentxx;createtablestudentxx(sidvarchar(20),snamevarchar(20)primarykey,sexvarchar(20),birthday varchar(20),className varchar(20), image varchar(20);insert into studentxx values('s001','xuliang','male','19901124','sd1003','good');insertintostud

34、entxxvalues('s002','xuliang2','male','19851124','sd0910','good');insert into studentxx values('j001','jack','male','19881124','sd1003','good');insert into studentxx values('001','user',

35、9;male','19901124','sd1005','good');insert into studentxx values('s003','sisi','female','19880124','sd1007','good');insertintostudentxxvalues('as003','crystal','female','19880124','asd1007

36、','good');drop table choicesxx;create table choicesxx(sname varchar(20)referencesstudentxx(sname),cnovarchar(20)referencescoursexx(cno);package school;.专业专注.public class Register implements ActionListener JFrame jf = new JFrame("学生成绩管理与选课系统");JTextField jtfUserName = new JTextF

37、ield(10);JPasswordField jpfPassWord = new JPasswordField(10);JComboBox identify = new JComboBox();public Register() CreateRegisterGUI();public void actionPerformed(ActionEvent e) String str = e.getActionCommand();if (str.equalsIgnoreCase(" 登录 ") processLogin(); else if (str.equalsIgnoreCas

38、e(" 取消 ") jtfUserName.setText("");jpfPassWord.setText(""); else if (str.equalsIgnoreCase(" 注册 ") new CreateLogin();public void processLogin() .专业专注.Connection con = null;if (JdbcUtil.class = null) con = JdbcUtil.getConnection(); else con = JDBCUtil.getConnecti

39、on();String usrName = jtfUserName.getText().trim();String passwrd = new String(jpfPassWord.getPassword().trim();String ident = identify.getSelectedItem().toString().trim();String sql = "select * from registerXu "+try PreparedStatement ps = con.prepareStatement(sql);ps.setString(1, usrName)

40、;ps.setString(2, passwrd);ps.setString(3, ident);.专业专注.ResultSet rs = ps.executeQuery();StringBuffer sb = new StringBuffer("");ResultSetMetaData meta = rs.getMetaData();int cols = meta.getColumnCount();records in database:while (rs.next() for (int i = 1; i < cols; i+) sb.append(meta.get

41、ColumnName(i);sb.append(rs.getString(i);if (sb.length() < 1) JOptionPane.showMessageDialog(null, "用户名或密码错误 "); else if (sb.length() >= 1) if (ident.equals("student") new StudentChooseCourse(usrName, passwrd); jf.setVisible(false); else if (ident.equals("teacher")

42、new TeacherEntered();jf.setVisible(false);.专业专注. else if (ident.equals("admin") catch (Exception er) er.printStackTrace();public void CreateRegisterGUI() jf.setLayout(new GridLayout(5, 1);JPanel jp1 = new JPanel();JLabel jl1 = new JLabel("学生成绩管理系统 ");jp1.add(jl1);jf.add(jp1);JPan

43、el jp2 = new JPanel();JLabel jl2 = new JLabel("用户名 :");jp2.add(jl2);jp2.add(jtfUserName);jf.add(jp2);JPanel jp3 = new JPanel();JLabel passWord = new JLabel("密 码 :");jp3.add(passWord);.专业专注.jp3.add(jpfPassWord);jf.add(jp3);JPanel jp4 = new JPanel();JLabel jl4 = new JLabel("身 份:");/ identify.addItem(new String(" 学生 "); identify.addItem(new S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论