java课程设计学生信息管理系统_第1页
java课程设计学生信息管理系统_第2页
java课程设计学生信息管理系统_第3页
java课程设计学生信息管理系统_第4页
java课程设计学生信息管理系统_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、目录1需求分析21.1设计任务要求21.2系统功能需求分析22槪要设计22.1图形用户界面的设计22.2用数据库建立学生信息表32.3数据库的连接32.4模块功能的实现33详细设计43.1图形用户界面的设计43.2用数据库建立学生信息表93.3数据库的连接113.4模块功能的实现124调试分析214.1系统功能测试214.2系统调试常见错误214. 3实验小结215用户使用说明226测试数据和数据结果22参考文献27附件281需求分析利用计算机进行学生信息管理,不仅能够保证准确、无误、快速输出,而且 还可以利用计算机对有关信息进行查询,检索迅速、查找方便、可靠性高、存储 量大、性好。要科学地实

2、现信息化管理,开发一个适合学校的,能够进行信息存 储、查询、修改等功能的信息管理系统是十分重要的。我这次的课题就是设计与 实现一个学生信息管理系统。1.1设计任务要求该学生信息管理系统的设计要求主要有以下几点:(1) 使用图形用户界面;(2) 用数据库建立1或2个学生信息表;(不限使用哪种数据库)(3) 能连接数据库并实现对学生信息查询、增、删、改等功能。1.2系统功能需求分析系统主要包括以下几项功能:(1) 添加学生信息;(2) 查询学生信息;(3) 删除学生信息;(4) 修改学生信息。概要设计2.1图形用户界面的设计图形用户界面中,设置窗口大小、显示位置和窗口标题,设置窗口关闭之后其后台程

3、序同时关闭,设置窗口可拉伸且为可见的。同时设置了用户输入文本框,文本框的窗口大小等属性也进行设置,文本框中可输入用户需要输入的学生信 息。2.2用数据库建立学生信息表在这里我用的是数据库mysql,建立的数据库名字为student,而且程序使 用的是单表形式,表名为St , st表的字段,各个字段分别对应学生的学号,名 字,性别,年龄,籍贯,系别。2.3数据库的连接数据库的连接只需通过jdbc驱动,即可实现用户操作与数据资源的连接, 并可对相关的数据库信息进行操作。2.4模块功能的实现以下是学生信息管理系统功能模块关系图,主要包含查询、添加、修改、删除学生信息等功能。图2.1系统功能模块关系图

4、根据功能的需要,我设想了主窗口界面的大体布置图,并在设计与实现的过 程中尽量去按照设想图的图样去实现。设想图如下图所示,图中也大概地标明了 部分标语与说明。主模块外岀容器:jscrollPane:用来显示数据库调出的数据表Panell:标签(学生姓名)输入框(学生姓名)按钮(查询)图2. 2设想的主界面图2. 2中组件功能的实现:(1) 当用户点击查询按钮时,系统创建一个数据库连接,从数据库调出用户 所输入要查询学生的信息,并显示到jscrollPane中,即主模块的中部;(2) 当用户点击添加按钮时,系统创建一个数据连接,弹出一个添加学生的 信息的文本框,文本框可输入要添加的学生信息,并可存

5、入数据库。(3) 当用户点击修改按钮时,系统创建一个数据连接,从数据库中调出你所 选行的学生信息,并弹出修改该学生的信息文本框,文本框可进行学生信息修改, 修改完确认后,该学生的信息会重新存入数据库。(4) 当用户点击删除按钮时,系统创建一个数据连接,根据你所选行的学生 学号,在数据库中找到该学生信息,并删除。3详细设计3.1图形用户界面的设计(1)主界面窗口设计函数代码程序如下:定义用户界面用到的组件JLabel userName = null; /要查询的学生的名字 JTextField textField = null; /用户输入的文本框 JButton select = null;J

6、Button insert = null;7添加按钮JButton update = null; /修改按锂JButton delete = null; /刪涂按钮JTable table = null; /用于显示数据库调出的数据的表Panel pane 11 = null;Panel pane 12 = null;Panel pane 13 = null;JScrolIPane jscrolIPane = null;StModel st Model = null; /竺表的模型private Object ProwwdStatomcni ;public StuMangeO/窗口显示的上部的

7、组件userName = new JLabel (*学生名:);textField = new JTextField(lO);用户输入文本框限定为最多输入10个字符select = new JButtonC* 查询);/查询按钮/添加到第一个面板中pane11 = new Panel();pane11 add(userName);panel 1. add(textField);panel 1. add(select);/窗口下部的组件insert = new JButton(n添加*);delete = new JButton(U除”);update = new JButton(w修改*);/

8、添加到第三个个面板中pane 13 = new Panel();pane13 add(insert);pane13 add(delete);pane 13 add(update);/窗口中部的组件stModel = new StModel():stModelinsertDatabase(select from st);table = new JTable(stModel);jscrolIPane = new JScrolIPane(table);注册事件监听select. addActionListener(this);insert addActionListener(this);update

9、 addActionListener(this);delete addActionListener(this);将各个组件添加到窗体中this, add (panel 1. BorderLayout. NORTH);this.add(jscrolIPane, BorderLayout. CENTER);this, add (panel31 BorderLayout. SOUTH);/设置窗体厲性this. setSize(400, 300);/设置窗 口大小this. setLocation(200. 200); /设置窗 口显示的位置this. setTitleC学生信息管理系统);/设置巒

10、口标题this. setDefaultCloseOperation(JFraine. EXIT_ON_CLOS ;/设置窗 口关闭之后其后台程序同时关闭/设置窗口为可见this.setVisible(true);(2) 添加学生的界面文本框设计函数程序代码如下所示:private 儿abel id. name, sex. age, address, dep; /分别代表学生的学号,名字,性别, 年龄,籍贯,系别private JTextField jtfl, jtf2, jtf3, jtf4, jtf5, jtf6; /用户输入的文本框,分别 为学生的学号,名字,性别,年龄,第贯,系别priv

11、ate JButton add, canel; /分别为添加按钮和取消按钮private Panel panel 1. panel2, panel3;public InseitStudent(Frame owner. String title, boolean model)super (owner, title, model):/实现与父类窗 口对话System, out. print In (我执行 了 );/窗体的西部的组件id = new JLabel (*学号:“);name = new JLabel(:);sex = new JLabel(M 性别 *);age = new JLab

12、el(M年龄”);address = new JLabel(wIff贯”);dep = new JLabel(w系别:*);/添加到pane 11面板中pane11 = new Panel(new GridLayout(6t 1);panel1. add(id);panel 1. add(name);pane11. add(sex);panel 1. add(age);pane 11 add(address);panel 1. add(dep);/窗体的东部组件jtfl = jtf2 = jtf3 = jtf4 = jtf5 =jtf6 =newnewnewnewnewnewJTextFiel

13、d(lO); JTextField(lO); JTextField(lO); JTextField(lO); JTextField(lO); JTextField(lO);/添加到第二个面板中pane12 = new Panel(new GridLayout(6. 1):pane 12. add(jtf 1);pane 12. add(jtf2);pane 12. add(jtf3);pane 12. add(jtf4);pane 12. add(jtf5);pane 12. add(jtf6);/窗体北部的控件add = new JButton(*添加”);canel = new JButt

14、onC取消);/注册事件监听add addAct ionListener(this);canel addActionListener(this);/添加到pane 13面板中pane 13 = new Panel();pane 13 add(add);pane13 add(canel);/将各个组件添加到窗体中this, add (panel 1 BorderLayout. WEST);this.add(panel2f BorderLayout. CENTER ;this, add (panel31 BorderLayout. SOUTH);/设置对话框属性this.setSize(300,

15、200);设置对话框为可见this-setVisible(true);(3) 修改学生的界面文本框的设计JLabel id,name,sex,age,address,dep; /分别为学生的学号.学生的学生的性别.学生的 年龄,学生的籍贯,学生的系别的标签JTextField jtfl, jtf2. jtf3. jtf4Jtf5, jtf6; /分别为学生的学号,性别,年龄, 錨贯,系列的输入文本框JButton update,canel; /分别为侈改和取涓按毎Panel pane11 .pane12. pane13;public Updat eDatabase (Frame own, St

16、ring title, boolean model, St Model stModel, int row)super (own. title, model); / 实现与父类窗 口对话/窗体西部的组件id = new JLabel (*学号);name = new JLabel (* 名字”);sex = new JLabel C性别);age = new JLabel C年龄”);address = new JLabel (M地址); dep = new JLabel C 系别);/添加到pane 11中 pane 11 = new Panel(new GridLayout(6t 1);pa

17、nel 1. add(id);pane 11 add(name);panel 1. add (sex);panel 1. add(age);pane 11 add (address);panel 1. add(dep);/添加到窗体的东部的组件jtfl = new JTextField(lO);jtf 1. setText (String) (stModel. getValueAt (low. 0); jtfl. setEdi table (false);/设置学号不可修改 jtf2 = new JTextField(lO);jtf2. setText(String)(stModel. get

18、ValueAt(row. 1);jtf3 = new JTextField(lO);jtf3. setText (String) (stModel. getValueAt (low. 2);jtf4 = new JTextField(lO):jtf4. setText(String)(stModel. getValueAt(row. 3);jtf5 = new JTextField(lO);jtf5. setText(String)(stModel. getValueAt(row. 4); jtf6 = new JTextField(lO);jtf6. setText(String)(stMo

19、del. getValueAt(row. 5); /添加到第二个面板中pane 12 = new Panel(new GridLayout(6t 1);pane 12. add(jtf 1);pane 12. add(jtf2);pane 12. add(jtf3):pane 12. add(jtf4);pane 12. add(jtf5);pane 12. add(jtf6);/窗体南部的组件update = new JButtonC* 确认);canel = new JButtonC取消”);pane 13 = new Panel();pane 13 add(update);pane13

20、add(canel);/注册事件监听update addActionListener(this); canel addActionListener(this);添加组件到窗体中this add (panel 1. BorderLayout WEST); this, add (pane 121 BorderLayout. CENTER);this, add (panel 31 BorderLayout. SOUTH); /设置窗体厲性this.setSize(300, 200);/设置窗体为可见this.setVisible(true);3.2用数据库建立学生信息表(1) 数据库建立学生表的函数

21、程序代码如下所示: create table st(st Id varchar(30) primary key.stNname varchar(50) not null,stSex varchar(2) default男 stAge int,stBorn varchar(30),stDept varchar(30),constraint stS check (stSex in (男女 ) );(2) st表的模型实现的函数程序代码如下所示:public class Strode 1 extends AbstractTab 1eMode 1 Vector columNames = null; /

22、表的字段名称 Vector rowDate = null;/数据库private Connection con = null;private PreparedStatement ps = null;private ResultSet rs = null;private final static String driver = mysql. jdbc. Driver0;/加载的jdbc驱动private final static String url = njdbc:mysql:/localhost:3306/studentn; 谶据private finalstatic Strinj?user

23、 = *root *;数据库的用户名private finalstatic Strinj? password = boot;/数据库的用户名的密码对数据库进行查找public void insertDatabase(String sql)columNames = new Vector0 ;/表的字段名称rowDate = new Vector();/columNames add(”学号”); columNames. add (名字); columNames. add(性别);columNames. add(M年龄”);columNames. add(n籍贯);columNames. add(n

24、 系别”);try加载jdbc驱动Class. forName(drivei);连接数据源con = DriverManager. getConnection(url. user, password):执行泌ps = con. prepareStatement(sql);rs = ps. executeQueryO ;while(rs. next ()Vector row = new Vector0;row. add(rs getString(l);row. add(rs getString(2);row. add(rs getString(3);row. add(rs getString(4

25、);row. add(rs getString(5);row. add(rs getString(6);rowDate. add (row) ;/将学生的一条记录(到 rowDate 中catch(ClassNotFoundException e)e. piintStackTraceO ;catch(SQLExcept ion e)e. piintStackTraceO ;finally关闭数据库资源tryif(null != rs)rs. closeO ;if(null != ps)ps. closeO ;辻(null != con)con. closeO ;catch(SQLExcept

26、ion e)e. printStackTraceO ;/返回列数public int getColumnCount() return this columNames. size();/返回表的行数public int getRowCount() return this rowDate size();/得到某行某列的数据public Object getValueAt(int rowIndex, int columnindex) return (Vector)this rowDate get(rowindex) get(columnindex); 设置表的字段名public String get

27、Co1umnName(int column)return (String)this columNames get(column);3.3数据库的连接private final static String driver = mysql. jdbc. Driver ;/加载的jdbc驱动private final static String url = n jdbc: mysql:/localhost: 3306/studentM:/数据3.4模块功能的实现主模块功能的实现函数程序代码如下所示:public void actionPerformed(ActionEvent e)/用户点击了查找按钮

28、if (e. getSourceO = select)String paras = textFieldgetText()trim():stModel = new StModel();stModelinsertDatabase(select from st where stNname二”+paras+”); table. setModel(stModel);/用户点击了添加按钮else if (e getSourceO = insert)InsertStudent insertStudent = new InsertStudent (this,添加学生true); /刷新窗口表的数据stMode

29、l = new StModel();stModel insertDatabase(”select * from st”);table. setModel(stModel);/用户点击了修改按钮else if(egetSource() = update)int row = this, table. getSelectedRowO :/用户选择的行数辻(-1 = row) /如果用户没有选中行JOptionPane. showMessageDialoghis, ”请选择一行”);elseUpdateDatabase updateDatabase = new UpdateDatabase(this修

30、改学生true, stModel, row);/刷新窗口表的数据stModel =new StModel();stModelinsertDatabase(select from st);table.setModel(stModel);/用户点击了删除按钮else if (e. getSource () = delete)/数据库Connection con = null;PreparedStatement ps = null;String driver = mysq 1. jdbc Driver; /jdbc驱动Stiing url = Hjdbc:mysq 1:/localhost:3306

31、/student*:/数据源String user = root”; /数据库用户密码String password = root”; /数摇库用户里的密码int row = this, table. getSelectedRow():/用户选择的行辻(T = row) 用户没有选中行JOpt ionPane. showMessageDia log (this.请选择一行):elsetry/加载jdbc驱动Class /brVzzzoe(driver);/连接数据源con = DriverManagei Ret Connect ionuser, passWord);/执行竺1String sq

32、l = Mdelete from st where stld=?;Stiing id = (String) (stModel. getValueAt (row, 0) ;/获得用户选择的行的学生的学号ps = con. prepareStatement (sql);ps. setStiing(lt id);ps. executeUpdate ();/刷新窗口stModel = new StModel();stMode 1. insertDatabase(Hselect * from st);table. setModel(stModel);catch(ClassNotFoundExceptio

33、n el)el. printStackTrace ();catch(SQLException el)el. printStackTraceO ;finally关闭资源tryif(null != ps)ps. close ();if(null != con)con. closeO ;catch(SQLException el)el. printStackTraceO ;子模块功能的实现:(1) 添加文本框功能的实现函数程序代码如下:public class lnsertStudent extends JDialog implements ActionListenerpiivate JLabel

34、id, name, sex, age, address, dep; /分别代表学生的学号,名字, 性别,年龄,籍贯,系别private JTextField jtfl, jtf2. jtf3, jtf4t jtf5, jtf6; /用户输入的文本框, 分别为学生的学号,名字,性别,年龄,無贯,系别private JButton add. canel; /分别为添加按钮和取消按钮private Panel panel1 pane 12, pane13;public InsertStudent(Frame owner. String title, boolean model)super (owne

35、r, title, model) ;/实现与父类窗 口对话System, out. println(M我执行了 ”);窗体的西部的组件id = new JLabel C学号);name = new JLabel (*:*);sex = new JLabel(M性别”);age = new JLabel(M年龄”); address = new JLabel(s贯);dep = new JLabel (* 系别:M);/添加到panel 1面板中panel 1 = new Panel(new GridLayout(6, 1);panel 1. add(id);panel 1. add(name)

36、; panel 1. add (sex); pane 11. add (age); panel 1. add(address); panel 1. add (dep); 窗体的东部组件 jtf1 = new JTextField(lO); jtf2 = new JTextField(lO); jtf3 = new JTextField(lO); jtf4 = new JTextField(lO); jtf5 = new JTextField(lO); jtf6 = new JTextField(lO): /添加到第二个面板中 pane12 = new Panel(new GridLayout(

37、6, 1); panel2. add(jtf1);panel2. add(jtf2);pane 12. add(jtf3);panel2. add(jtf4);panel2. add(jtf5);panel2. add(jtf6);窗体北部的控件add = new JButton(添加);canel = new JButton(w取消);/注册爭件监听add. addActionListenei(this); cane1.addActionListenet(this);/添加到pane 13面板中 pane13 = new Panel(); pane13. add(add); pane13 a

38、dd(canel); 将各个组件添加到窗体中 this add(panellt BorderLayout WEST); this. add(panel2t BorderLayout. CENTER); this.add(panel3, BorderLayout. SOUTH); 设置对话框属性 this.setSize(300, 200);设置对话框为可见 this setVisible(true);public void actionPerformed(ActionEvent e)/数据库Connection con = null;PreparedStatement ps = null;bo

39、olean result = true; /记录添加学生是否成功 if (e getSourceO = add)try加载jdbc驱动Class. forName( mysq 1. jdbc Driver*);连接数据源con =DriverManager getConnection(jdbc:mysq 1 :/localhost:3306/student* *root*t *root*);执行sqlString sql = Hinsert into st values(?,?,?t?,?,?)H;ps = con. prepareStatement(sql); ps. executeUpda

40、te ();ps.setString(l.ps.setString(2tps.setString(3,ps.setString(4.ps.setString(5,ps.setString(6.jtfl. getText (); jtf2. getText (); jtf3. getText (); jtf4. getText (); jtf5. getText (); jtf6. getText ();关闭对话框this disposeO ;catch(C1assNotFoundException el)result = false; /添加学生记录失败 el. printStackTrace

41、O ;catch(SQLException el)result = false;/添加学生记录失败el. printStackTraceO;finally关闭资源tryps. closeO ;if(null != con)con. closeO ;catch(SQLException el)el. printStackTraceO ;if(false = result)JOptionPane. showMessageDialog(this,失败信息:学号不能重复,性别只能为男或者女年豁大于0”);else if (e. getSourceO = canel)关闭对话框this. dispose

42、O ;(2) 修改文本框功能的实现函数程序代码如下所示:public class UpdateDatabase extends JDialog implements ActionListenerJLabel id,name,sex,age,address.dep; /分别为学生的学号,学生的,学生的性别,学 生的年龄,学生的籍贯,学生的系别的标签JTextField jtflt jtf2, jtf3. jtf4Jtf5r jtf6; /分别为学生的学号,性别,年 龄,籍贯,系列的输入文本框JButton update. cane 1;/分别为修改和取消按钮Panel pane11 tpanel

43、2. panel3;publ ic UpdateDatabase(Frame own. String title, boolean mode 11 StModel stModel, int row)super (own, title, model) ; /实现与父类窗 口对话窗体西部的组件id = new JLabel 学号);name = new JLabel (n名字”);sex = new JLabel(唯别”);age = new JLabel C 年龄”);address = new JLabel C 地址 J;dep = new JLabel C 系别”);/添加到panel 1中

44、panel 1 = new Panel (new GiidLayout (6, 1);panel 1. add(id);panel 1. add(name);panel 1. add(sex);pane 11. add (age);pane11. add(address);pane 11. add (dep);添加到窗体的东部的组件jtf1 = new JTextField(lO):jtf1.setText(String)(stModel. getValueAt(row, 0);jtf 1. setEditable(false); /设置学号不可修改jtf2 = new JTextField(

45、lO);jtf2.setText(String)(stModel. getValueAt(row, 1); jtf3 = new JTextField(lO);jtf3.setText(String)(stModel. getValueAt(row, 2); jtf4 = new JTextField(lO);jtf4.setText(String)(stModel. getValueAt(row, 3); jtf5 = new JTextField(lO);jtf5. setText (Stiing) (stModel. getValueAt(rowt 4); jtf6 = new JTex

46、tField(lO);jtf6. setText (Stiing) (stModel. getValueAt(row, 5); /添加到第二个面板中pane12 = new Panel(new GridLayout(6, 1);panel2. add(jtf1);panel2. add(jtf2);panel2. add(jtf3);panel2. add(jtf4);pane12. add(jtf5); panel2. add(jtf6);窗体南部的组件update = new JButtonC*确认);canel = new JButton(w取消);pane13 = new Panel(

47、);pane13 add(update);pane13. add(canel);/注册事件监听update. addAct ionListener(this);cane1. addActionListenet(this);添加组件到窗体中this add(panel 1. BorderLayout WEST); this.add(panel2t BorderLayout. CENTER);this.add(panel3, BorderLayout. SOUTH);/设置窗体属性this.setSize(300, 200);设置窗体为可见this setVisible(true);响应用户操作p

48、ubl ic void actionPeiformed(Act ionEvent e)/数摇库Connection con = null;PreparedStatement ps = null;String driver = mysql. jdbc. Driver*1; /jdbc驱动String url = Mjdbc:mysql:/localhost:3306/student*; /连接数据源String user = *root /数据库的用户String password = root*; /数据库的用户密码 boolean result = true;/记录修改学生是否成功if (e

49、. getSourceO = update)try加载jdbc驱动Class. forMame(driver);连接数据源con = DriverManager. “tConnection(url.user.password);执行sqlString sql = update st set stNname=?tstSex=?fstAge=?tstBorn=?tstDept=? where stld=?ps = con. prepareStatement(sql); /修改学生数据ps. setString(l.ps. setString(2tps. setString(3,ps.setStri

50、ng(4.ps.setString(5,ps.setString(6.jtf2. getText () jtf3. getText () jtf4. getText () jtf5. getText () jtf6. getText () jtfl. getText ()ps. executeUpdateO ; 关闭对话框this disposeO ; catch(ClassNotFoundException el)result = false;el. printStackTraceO ;catch(SQLException el)result = false;el. printStackTr

51、aceO ;finally关闭资源tryif(null != ps)ps. close();if(null != con)con closeO ;catch(SQLException el)(el. printStackTraceO ;if (false = result)JOptionPane. showMessageDialog(this, 失败信息:学号不能重复, 性别只能为男或者女,年龄大于0”);else if (e getSoin、ce() = canel)this. disposeO ;/关闭对话框4调试分析4.1系统功能测试功能测试主要是测试程序模块是否实现了设计中所要求的功能

52、。功能测试中 需要注意的有:(1) 查询功能中,是按学生查询的,其他的输入是没有结果的。(2) 添加功能中,需要注意的是前台设置的数值长度是否大于后台数值长度, 以及前台和后台的数据结构是否相符,很多时候录入功能无法实现是由于这些原 因。还有就是必须录入的字段的设置时候有误。(3) 删除功能中,需要点中你要删除信息的所在行,再点删除,才能删除。(4) 修改功能中,主要是看修改确认后是否数据真正已被修改了。这是最基 本的功能,需要注意的是看是否能把不应该修改的数据也修改成功了。4.2系统调试常见错误(1) SQLException 异常一般是由于SQL语句不正确引起的。为避免这种异常,最好在使用SQL语句 的程序中捕获此SQL异常。(2) ClassNotFoundException 异常这是由于没找到相关类而引起的。为了避免这种异常,最好要能清楚的知道 有多少个类,都保证所有类存在且能正常使用。4.3实验小结通过这次课题的设计与实现,让我获得了更多的经验、心得和锻炼。在做课 题的过程中,我遇到很多难题,但最后都经过同学的帮助和从网络、书本中找到 了解决方法

温馨提示

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

评论

0/150

提交评论