JAVA数据库课程设计报告-学生选课管理系统的设计实现分析_源代码_.doc
-一、课程设计目的通过这次的设计,主要是做出一个小型的管理系统,来加强对JAVA所学知识的巩固和融会贯通,可以说是对一个学期所学知识的一个小结,加深对JAVA数据库的理解。二、需求分析功能需求分析:该系统具备管理学生信息、课程信息、选课信息的功能:用户通过输入账号和密码进下该系统后,可以进行一些基础维护(学生信息维护、课程信息维护、选课信息维护)。全部都可以进行增加、修改、删除、模糊查询。三、数据项:1表admin(用户表)FieldTypeNullKeyment Usernamechar(10)PRI用户名passwordchar(10)密码NameChar(10)用户昵称2表S(学生信息表)FieldTypeNullKeyment Snonvarchar(50)PRI*Snamenvarchar(50)S*nvarchar(50)系别3表C(课程信息表)FieldTypeNullKeyment onvarchar(50)PRI课号amenvarchar(50)课名4表SC(学生信息表)FieldTypeNullKeyment onvarchar(50)PRI课号Snonvarchar(50)PRI*Cnvarchar(50)成绩四、系统功能描述该小型系统主要是用于管理学生及课程的基本信息,主要功能包括四面的:1.管理学生信息,其中包括添加,删除,修改等操作。2.管理课程信息,其中包括添加,删除,修改等操作。3.管理选课信息,其中包括添加,删除,修改等操作。4.查询信息,其中包括查询学生信息,查询课程信息,查询选课信息等操作。选课信息课程信息学生信息删除信息修改信息添加信息删除信息修改信息添加信息删除信息修改信息添加信息查询管理选课管理课程管理学生管理学生信息管理系统 五、代码分析连接数据库法:这是java连接数据库的驱动,有关数据库的操作都要用到他。publicstatic Connection CONN() String driverName = ".microsoft.sqlserver.jdbc.SQLServerDriver" /加载JDBC驱动String dbURL = "jdbc:sqlserver:/localhost:1433; DatabaseName=student" /连接服务器和数据库test,此处student是数据库名 String userName = "sa" /默认用户名 String userPwd = "mima" /密码 Connection dbConn=null;try Class.forName(driverName); dbConn = DriverManager.getConnection(dbURL, userName, userPwd); System.out.println("Connection Successful!"); /如果连接成功 控制台输出Connection Successful! catch (E*ception e) e.printStackTrace();return dbConn;用户登录界面user.java:登录时,凡是账号密码未填写、输入错误账号密码都会提出错误提示框。在填写好账号密码后,会读取数据库里admin表,并查询其输入是否存在,若无误,则登录到用户界面。publicclass User e*tends JFrameprivate JLabel use,password; private JTe*tField k1;/用户名输入框private JPasswordField k2;/密码输入框private utton b1,b2;/登录窗口public User(JFrame f)super("系统登录");Container c=getContentPane();c.setLayout(new FlowLayout();use=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 JTe*tField(12);k2=new JPasswordField(12);b1=new utton("登录");b2=new utton("退出");/设置登录法BHandler b=new BHandler();E*IT d=new E*IT();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);setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE);/主函数publicstaticvoid main(String args) User f1=new User(new JFrame();效果图:用户界面:Menu.java用户界面能菜单栏有4个一级菜单,学生管理、课程管理、选课管理都能添加、修改、删除数据,分别操作数据库里的S表(学生),C表(课程),SC表(选课)。查询管理则可进行三个表的查询。import java.awt.*;import java.awt.event.*;import java*.swing.*;public class Menu e*tends JFrame implements ActionListenerAddstu 增加学生界面;Updatastu 修改学生界面;Delstu 删除学生界面;AddC 增加课程界面;DelC 删除课程界面;UpdateC 修改课程界面;AddSC 增加选课界面;DelSC 删除选课界面;UpdateSC 修改选课界面;Selstu 学生查询界面;JPanel pCenter;CardLayout card=null;JLabel label=null;JMenuBar mb=new JMenuBar();/菜单栏JMenu m1=new JMenu("学生管理");JMenuItem add1=new JMenuItem("add1 ");JMenuItem updata1=new JMenuItem("updata1 ");JMenuItem delete1=new JMenuItem("delete1 ");JMenu m2=new JMenu("课程管理");JMenuItem add2=new JMenuItem("add2 ");JMenuItem updata2=new JMenuItem("updata2 ");JMenuItem delete2=new JMenuItem("delete2 ");JMenu m3=new JMenu("选课管理");JMenuItem add3=new JMenuItem("add3 ");JMenuItem updata3=new JMenuItem("updata3 ");JMenuItem delete3=new JMenuItem("delete3 ");JMenu m4=new JMenu("查询管理");JMenuItem 学生查询=new JMenuItem("查询信息 ");JMenuItem m5=new JMenuItem("系统退出");Font t=new Font ("sanerif",Font.PLAIN,12);public Menu ()this.setTitle("学生选课管理系统");try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();catch(E*ception e)System.err.println("不能设置外观: "+e);/组合菜单addMenu1();addMenu2();addMenu3();addMenu4();addJMenuBar();setJMenuBar(mb);label=new JLabel("选课管理系统",JLabel.CENTER);label.setFont(new Font("宋体",Font.BOLD,36);label.setHorizontalTe*tPosition(SwingConstants.CENTER);label.setForeground(Color.red);/点击事件add1.addActionListener(this);updata1.addActionListener(this);delete1.addActionListener(this);m5.addActionListener(this);add2.addActionListener(this);delete2.addActionListener(this);updata2.addActionListener(this);add3.addActionListener(this);delete3.addActionListener(this);updata3.addActionListener(this);学生查询.addActionListener(this);card=new CardLayout();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 Selstu();pCenter.add("欢迎界面",label);pCenter.add("增加学生界面",增加学生界面);pCenter.add("修改学生界面",修改学生界面);pCenter.add("删除学生界面",删除学生界面);pCenter.add("增加课程界面",增加课程界面);pCenter.add("删除课程界面",删除课程界面);pCenter.add("修改课程界面",修改课程界面);pCenter.add("增加选课界面",增加选课界面);pCenter.add("删除选课界面",删除选课界面);pCenter.add("修改选课界面",修改选课界面);pCenter.add("学生查询界面", 学生查询界面);add(pCenter,BorderLayout.CENTER);validate();setVisible(true);setBounds(400,150,400,280);setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE); addWindowListener(new WindowAdapter()/关闭程序时的操作public void windowClosing(WindowEvent e)System.e*it(0); );validate();private void addJMenuBar() mb.add(m1);mb.add(m2);mb.add(m3);mb.add(m4);mb.add(m5);private void addMenu4() m4.add(学生查询);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); 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.e*it(0);elseif(obj=add1)card.show(pCenter,"增加学生界面");elseif(obj=updata1) card.show(pCenter,"修改学生界面");elseif(obj=delete1) card.show(pCenter, "删除学生界面");elseif(obj=add2) card.show(pCenter, "增加课程界面");elseif(obj=delete2) card.show(pCenter, "删除课程界面");elseif(obj=updata2) card.show(pCenter, "修改课程界面");elseif(obj=add3) card.show(pCenter, "增加选课界面");elseif(obj=delete3) card.show(pCenter, "删除选课界面");elseif(obj=updata3) card.show(pCenter, "修改选课界面");elseif(obj=学生查询) card.show(pCenter, "学生查询界面");public static void main(String args) new Menu();效果图:添加界面:AddC.java/AddSC.java/Addstu.java添加数据时,若遇到必须信息未填写、不能重复的信息在数据库中已存在,都会提示无法添加及其错误原因。import java.awt.*;import java*.swing.*;import java.sql.*;import java.awt.event.*;publicclass AddC e*tends JPanel implements ActionListenerJTe*tField课号,课名;utton 录入;public AddC()try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();catch(E*ception e)System.err.println("不能设置外观: "+e);课号=newJTe*tField(12);课名=newJTe*tField(12);录入=new utton("录入");录入.addActionListener(this);Bo* bo*1=Bo*.createHorizontalBo*();/横放bo*Bo* bo*2=Bo*.createHorizontalBo*();Bo* bo*3=Bo*.createHorizontalBo*();Bo* bo*4=Bo*.createHorizontalBo*();bo*1.add(new JLabel("课号:");bo*1.add(课号);bo*2.add(new JLabel("课名:");bo*2.add(课名);bo*4.add(录入);Bo* bo*H=Bo*.createVerticalBo*();/竖放bo*bo*H.add(bo*1);bo*H.add(bo*2);bo*H.add(bo*3);bo*H.add(bo*4);bo*H.add(Bo*.createVerticalGlue();JPanel messPanel=new JPanel();messPanel.add(bo*H);setLayout(new BorderLayout();add(messPanel,BorderLayout.CENTER);validate();效果图:添加界面:UpdateC.java/UpdateSC.java /Updatestu.java先查找你想要修改的项目,若修改的信息包括(*、课号),则会进行查询,如果修改后的已存在,以及修改后必须的信息变成空都会提示无法修改和其错误原因。此外,若修改C表或则S表,会连同SC表中对应的信息一起修改。import java.awt.*;import java.awt.event.*;import java.sql.*;import java*.swing.*;publicclass UpdateC e*tends JPanel implements ActionListenerString save=null;JTe*tField 课号1,课号,课名;utton 修改,查找;public UpdateC()try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();catch(E*ception e)System.err.println("不能设置外观: "+e);课号1=new JTe*tField(12);课号=new JTe*tField(12);课名=new JTe*tField(12);修改=new utton("修改");查找=new utton("查找");Bo* bo*1=Bo*.createHorizontalBo*();/横放bo*Bo* bo*2=Bo*.createHorizontalBo*();Bo* bo*3=Bo*.createHorizontalBo*();Bo* bo*4=Bo*.createHorizontalBo*();Bo* bo*5=Bo*.createHorizontalBo*();bo*1.add(new JLabel("课号:",JLabel.CENTER);bo*1.add(课号);bo*2.add(new JLabel("课名:",JLabel.CENTER);bo*2.add(课名);bo*3.add(修改);bo*5.add(new JLabel("课号:",JLabel.CENTER);bo*5.add(课号1);bo*5.add(查找);修改.addActionListener(this);查找.addActionListener(this);Bo* bo*H=Bo*.createVerticalBo*();/竖放bo*bo*H.add(bo*1);bo*H.add(bo*2);bo*H.add(bo*3);bo*H.add(bo*4);bo*H.add(Bo*.createVerticalGlue();JPanel picPanel=new JPanel();JPanel messPanel=new JPanel();messPanel.add(bo*5);picPanel.add(bo*H);setLayout(new BorderLayout();JSplitPane splitV=new JSplitPane(JSplitPane.VERTICAL_SPLIT,messPanel,picPanel);/分割add(splitV,BorderLayout.CENTER);validate();删除界面:DelC.java/DelSC.java /Deltu.java先查找你想要删除的项目,然后删除,此外,若删除C表或则S表的容,会连同SC表中对应的信息一起修改。import java.awt.*;import java.awt.event.*;import java.sql.*;import java*.swing.*;publicclass DelC e*tends JPanel implements ActionListenerString save=null;JTe*tField 课号1,课号,课名;utton 删除,查找;public DelC()try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();catch(E*ception e)System.err.println("不能设置外观: "+e);课号1=new JTe*tField(12);课号=new JTe*tField(12);课名=new JTe*tField(12);删除=new utton("删除");查找=new utton("查找");Bo* bo*1=Bo*.createHorizontalBo*();/横放bo*Bo* bo*2=Bo*.createHorizontalBo*();Bo* bo*3=Bo*.createHorizontalBo*();Bo* bo*4=Bo*.createHorizontalBo*();Bo* bo*5=Bo*.createHorizontalBo*();bo*1.add(new JLabel("课号:",JLabel.CENTER);bo*1.add(课号);bo*2.add(new JLabel("课名:",JLabel.CENTER);bo*2.add(课名);bo*4.add(删除);bo*5.add(new JLabel("课号:",JLabel.CENTER);bo*5.add(课号1);bo*5.add(查找);Bo* bo*H=Bo*.createVerticalBo*();/竖放bo*bo*H.add(bo*1);bo*H.add(bo*2);bo*H.add(bo*3);bo*H.add(bo*4);bo*H.add(Bo*.createVerticalGlue();删除.addActionListener(this);查找.addActionListener(this);JPanel picPanel=new JPanel();JPanel messPanel=new JPanel();messPanel.add(bo*5);picPanel.add(bo*H);setLayout(new BorderLayout();JSplitPane splitV=new JSplitPane(JSplitPane.VERTICAL_SPLIT,messPanel,picPanel);/分割add(splitV,BorderLayout.CENTER);validate();查询界面:Selsto.java可以以任意条件模糊查找相关的表。import java.awt.*;import java.awt.event.*;import java.sql.*;import java*.swing.*;publicclass Selstu e*tends JPanel implements ActionListenerJTe*tField *,系别;utton 查找;JTe*tField 课号,课名;utton 查找1;JTe*tField 课号1,*1,成绩;utton 查找2;public Selstu ()*=new JTe*tField(12);=new JTe*tField(12);系别=new JTe*tField(12);课号=new JTe*tField(12);课名=new JTe*tField(12);课号1=new JTe*tField(12);*1=new JTe*tField(12);成绩=new JTe*tField(12);查找=new utton("查找学生信息");查找1=new utton("查找课程信息");查找2=new utton("查找选课信息");Bo* bo*1=Bo*.createHorizontalBo*();/横放bo*Bo* bo*2=Bo*.createHorizontalBo*();Bo* bo*4=Bo*.createHorizontalBo*();Bo* bo*5=Bo*.createHorizontalBo*();Bo* bo*6=Bo*.createHorizontalBo*();Bo* bo*7=Bo*.createHorizontalBo*();bo*1.add(new JLabel("*:",JLabel.CENTER);bo*1.add(*);bo*1.add(new JLabel(":",JLabel.CENTER);bo*1.add();bo*1.add(new JLabel("系别:",JLabel.CENTER);bo*1.add(系别);bo*2.add(查找);bo*4.add(new JLabel("课号:",JLabel.CENTER);bo*4.add(课号);bo*4.add(new JLabel("课名:",JLabel.CENTER);bo*4.add(课名);bo*6.add(查找1);bo*5.add(new JLabel("课号:",JLabel.CENTER);bo*5.add(课号1);bo*5.add(new JLabel("*:",JLabel.CENTER);bo*5.add(*1);bo*5.add(new JLabel("成绩:",JLabel.CENTER);bo*5.add(成绩);bo*7.add(查找2);Bo* bo*H1=Bo*.createVerticalBo*();/竖放bo*bo*H1.add(bo*1);bo*H1.add(bo*2);bo*H1.add(Bo*.createVerticalGlue();Bo* bo*H2=Bo*.createVerticalBo*();/竖放bo*bo*H2.add(bo*4);bo*H2.add(bo*6);bo*H2.add(Bo*.createVerticalGlue(); Bo* bo*H3=Bo*.createVerticalBo*();/竖放bo*bo*H3.add(bo*5);bo*H3.add(bo*7);bo*H3.add(Bo*.createVerticalGlue(); 查找.addActionListener(this);查找1.addActionListener(this);查找2.addActionListener(this); JPanel messPanel=new JPanel();JPanel picPanel=new JPanel();JPanel threePanel=new JPanel();messPanel.add(bo*H1);picPanel.add(bo*H2);threePanel.add(bo*H3);setLayout(new BorderLayout();JSplitPane splitV=new JSplitPane(JSplitPane.VERTICAL_SPLIT,messPanel,picPanel);/分割add(splitV,BorderLayout.CENTER);JSplitPane splitV1=new JSplitPane(JSplitPane.VERTICAL_SPLIT,splitV,threePanel);/分割add(splitV1,BorderLayout.CENTER);validate();效果图:五、课程设计学习心得通过本次课程设计,成功的完成了这个小型简单的系统的设计,在整个设计过程中我对JAVA使用和它强大的作用有了一个更深刻的认识,尽管这个系统很简单,但是它让我综合运用了这个学期所学的JAVA的很多容,在此基础上,对JAVA的基础知识得到了更好的巩固。其实,在制作的过程中我也学到很多思想:首先,要学会统筹全局,合理规划,例如在制作整个框架的时候提前就要做全面考虑,要把整个结构图画出来,并且要对数据库表里的东西做全面规划。同时在编写程序的时候也要想好先实现什么功能,再实现什么功能,这样做出来的东西才有条理性,更容易实现和理解。其次,要细心仔细。Java程序虽然容易理解,但在写的过程中一不留心就会出现错误。当然出错是在所难免的,与性质有关的错误可以经过思考讨论后进行改正,但如果粗心大意,出现输入上的错误就很难发现和修改,会耽误很多时间。我认为最大的收获是提高了自己的动手能力。在平时的上机多数是根据书上的思想和布局来写程序的。这次的课程设计要自己思考自己写,考虑的东西比平时上机考虑的要多的多。在整个设计过程中写代码不是最难的,最难的是构思和布局。这次课程设计也是一次很好的实践活动,让我们体会到了java的神奇作用。下面是java的源代码,总共有15个类。分别是AddC.java,AddSC.java,Addstu.java, Delstu.java,DelC.java, DelSC.java,Menu.java,SelC.java,SelSC.java,Selstu.java,Student.java,Updatastu.java,UpdateC.java,UpdateSC.java,User.java。因为本人太懒,所以一些类名的错误没有修改,也没有优化系统,总之还算是能运行的,数据库用的是sql2005,如果用别的数据库就要改驱动,具体自己上网百度吧。如果自己有空,优化一下还是很好滴AddC.jaba:import java.awt.*;import java*.swing.*;import java.sql.*;import java.awt.event.*;public class AddC e*tends JPanel implements ActionListenerJTe*tField 课号,课名;utton 录入;public AddC()try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();catch(E*ception e)System.err.println("不能设置外观: "+e);课号=new JTe*tField(12);课名=new JTe*tField(12);录入=new utton("录入");录入.addActionListener(this);Bo* bo*1=Bo*.createHorizontalBo*();/横放bo*Bo* bo*2=Bo*.createHorizontalBo*();Bo* bo*3=Bo*.createHorizontalBo*();Bo* bo*4=Bo*.createHorizontalBo*();bo*1.add(new JLabel("课号:");bo*1.add(课号);bo*2.add(new JLabel("课名:");bo*2.add(课名);bo*4.add(录入);Bo* bo*H=Bo*.createVerticalBo*();/竖放bo*bo*H.add(bo*1);bo*H.add(bo*2);bo*H.add(bo*3);bo*H.add(bo*4);bo*H.add(Bo*.createVerticalGlue();JPanel messPanel=new J