学生管理系统实训报告.docx
- 文档编号:23198862
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:15
- 大小:1.56MB
学生管理系统实训报告.docx
《学生管理系统实训报告.docx》由会员分享,可在线阅读,更多相关《学生管理系统实训报告.docx(15页珍藏版)》请在冰豆网上搜索。
学生管理系统实训报告
学生管理系统
实训报告
姓名:
xxxx
学号:
xxxxxxxxxxx
班级:
软件外包
时间:
2011年6月26日
指导老师:
xxx
【目录】
一.设计需求分析……………………………………………3
二.概要设计…………………………………………………4
三.程序整体设计说明………………………………………5
四.程序部分代码与注释……………………………………6
五.测试结果…………………………………………………9
六.设计心得…………………………………………………12
【摘要】随着信息时代的发展,对于学生信息的管理已经不再局限于纸上的那些繁琐的记录,而是通过电脑软件程序对学生的信息进行管理,这样不但可以简化管理的复杂度,还可以提高管理过程中的准确性,因此有必要设计一款专门针对于学生信息管理的一个程序,于是设计了此学生信息管理系统。
该应用程序能够对每个学生的相关信息进行注册、储存、修改和删除等操作。
该系统要求按身份登陆,即学生、教师、管理员等不同身份进行访问。
该程序便于操作,面向广大群体,条理清晰,容易理解,容易修改。
【关键字】学生管理系统准确性操作访问
一.设计需求分析
随着学校规模的增大以及新增学生选课的影响,手工方式已经无法记录学生
的实时信息,应用学生管理系统软件能够简化管理的复杂度,也能够对学生的信息进行及时的更新修改等操作,主要的功能包括对学生信息的管理、对教师信息的管理、对课程信息的管理及对选课信息的管理。
设计需要满足以下的需求:
1.学生的信息的资料,应该包括学生的学号、姓名、所属学院、所属专业、所属班级、家庭地址,并且系统还能够修改输入错误的学生个人信息记录。
2.可以对学生的选课进行管理,包括可选课程和个人已选课信息,并进行相应的选课操作。
3.可以对课程进行管理,课程管理包括增加课程和删除课程,该课程包括任课教师和所属专业。
4.根据学号、姓名、班级查询学生信息。
根据课程、专业、学分查询课程的相关信息。
5.系统使用权限管理方式。
根据工作流程,系统有2种角色:
管理员、学生和教师。
管理员允许对课程信息、教师信息、学生信息的管理。
学生可以进行选课和查看课程信息的操作。
教师可以查看本人所售课程的学生信息。
二.概要设计
该应用程序要求用户按照数据库中的相关信息登陆界面,如若用户名或密码与数据库不符合,则无法登陆该应用程序的主界面。
当用户登录到主界面后可以对相关信息进行修改、删除等操作,该应用程序的数据与数据库的StudentManager的数据相连,每一次的修改、删除等操作都会被保存在该数据库的相应位置上。
该应用程序包含了管理员模块(包含学生管理子模块和课程管理子模块)、教师模块、学生模块和公共模块。
管理员模块是系统的核心,学生管理子系统实现对学生信息的添加、修改、删除操作,以输入条件进行条件查询。
课程管理子系统实现对课程的添加,添加时为其分配任课教师、上课时间、地点和课程详细信息,实现对课程的修改、删除,查看某个课程的详细信息等。
教师模块实现查看自己所教授的课程、课程有哪些学生选修,以及利用本系统提交学生的成绩。
学生模块实现学生的选课,查看、修改自己的选课信息。
公有模块实现用户的身份验证,密码修改,退出系统等功能。
在学生管理子系统包括学生信息和选课信息,要求对学生信息和选课信息的添加、删除、修改和查询,该模块中当学生修改信息时,对相关的组件添加了事件,相应的JComboBox添加了ItemStateChange的相关事件,对其进行了三级联动设计,利用形式参数进行传递一个int型的值,当点击相应的JComboBox时启动下一个相关的组件应用。
在课程查询时应用相应的JScorllPane组件显示所查询的相关信息。
教师模块中包含了对教师信息的相关内容还包括对课程的查询。
公共模块要求按照数据库相关信息的身份验证,包括学生、教师、管理员等不同的身份的登录,还包括密码的修改,管理员的添加及管理。
公共模块还包括退出系统。
整个学生管理系统的数据都是在数据库有存储信息的,因此在应用程序中要应用相应的SQLserver语句来对数据库添加、删除、修改相应信息。
SQLserver语句主要有update、insert、select语句。
三.程序整体设计说明
作为一个学生管理系统,本系统的设计主要包含:
系统登录、学生信息管理、班级管理、课程管理和用户管理。
学生管理系统框架主要结构如图所示:
LoginFrame界面主要为JTextField,利用JTextField的getText属性获取文本框里输入的相应的内容,然后应用SQLserver的select的语句来查询并验证密码是否与数据库一致,如若不一致则弹出一个MessageBox的信息提示框提示输入正确的密码。
在验证密码是应用了equals关键字,equals主要应用于字符的比较,而等号(=)主要应用于数据的比较。
MainFrame界面主要JMenu和JMenuItem组件,完成了主界面的菜单栏,并分别对每个JMenuItem添加了一个事件监听器,使点击时显示每个相应的Item界面,以便于对信息的操作。
学生信息管理主要包括学生信息和选课信息,完成了相应的信息注册、修改、查询和选课查询操作。
学生信息注册包含姓名、学号、省份证号、所属学院及专业和班级、家庭住址等信息。
数据库的Student表也添加了相应的列。
在学生信息注册和修改页面还应用了JComboBox的三级联动,使用参数传递,获取相应的JComboBox的getSelectedIndex来控制显示的内容。
班级信息录入和班级信息管理对各个班级的信息进行管理的界面,主要有JComboBox的二级联动和JRadioButton组件的应用。
班级信息管理界面中声明了displayButtonGroup用于控制三个JRadioButton组件。
用不同的方式查询班级信息,当点击修改时弹出一个修改的JFrame界面。
学生管理系统与数据库的连接:
该应用程序中封装了一个类linkdb,linkdb里的代码完成了数据库SQLserver与Eclipse的连接,以提高代码的复用性,是程序代码减少一部分。
在相应的Eclipse中的导入了sqljdbc完成应用程序的驱动。
只有导入了sqljdbc,数据库与应用程序才能顺利使用.连接数据库的相应的代码为:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Stringurl="jdbc:
sqlserver:
//localhost:
1433;
databaseName=StudentManager";
四.学生管理系统部分应用程序的代码及注释
(1)LoginFrame界面的部分代码
//给界面添加一个背景图片
Stringpath=newFile(".").getAbsolutePath()
+"/image/20086140002110601921.jpg";
image=newImageIcon(path);
//设置图片大小
image.setImage(image.getImage().getScaledInstance(800,600,
Image.SCALE_DEFAULT));
contentPane=newJPanel(){
publicvoidpaintComponent(Graphicsg){
g.drawImage(image.getImage(),0,0,null);
super.paintComponent(g);
}
};
contentPane.setBorder(newEmptyBorder(5,5,5,5));
contentPane.setOpaque(false);
//给nameJTextField添加一个鼠标点击事件,当点击nameJTextField时清空里面原有的用户名
nameJTextField=newJTextField();
nameJTextField.addMouseListener(newMouseAdapter(){
@Override
publicvoidmouseClicked(MouseEvente){
nameJTextField.setText("");
//利用Select语句对数据库进行查询
sta=linkdb.getStatement();
Stringsql="Select*fromStudentwhere学生编号='"+admin+"'";
(2)MainFrame界面的部分代码
//利用setVisible属性将页面跳转到下一个页面中
privatevoidstudent_1JMenuItemactionPerformed(ActionEvente){
StudentInfoAddFrameFrame=newStudentInfoAddFrame();
Frame.setVisible(true);
sta=link.getStatement();
}
(3)StudentInfoAddFrame界面的部分代码
//声明实例变量sta和rs
privateStatementsta;
privateResultSetrs;
//获取各个JTextField中的信息,数据添加到数据库中并用提示框提醒添加成功
Stringclientname=clientJTextField.getText();//学生编号
Stringname=nameJTextField.getText();//学生姓名
Stringnumber=numberJTextField.getText();//学号
Stringid=textField.getText();//身份证号
Stringcollege=(String)collegeJComboBox.getSelectedItem();//学院
Stringsubject=(String)subjectJComboBox.getSelectedItem();//专业
Stringbanji=(String)classJComboBox.getSelectedItem();//班级
Stringadress=addressJTextField.getText();//家庭住址
//利用update语句对数据库进行数据修改
Stringsql="updateStudentset学生姓名='"+name+"',学院名称='"
+college+"',家庭住址='"+adress+"',身份证号='"+id
+"',班级名称='"+banji+"',专业名称='"+subject+"',学号='"+number+"'where学生编号='"+clientname+"'";
//将执行语句放到抛出异常中,一旦程序遇到错误无法运行时,就抛出异常
try{
inti=sta.executeUpdate(sql);
//对数据库的行影响为1时,显示信息添加成功
if(i==1){
JOptionPane.showMessageDialog(null,"信息添加成功!
","添加成功",JOptionPane.INFORMATION_MESSAGE);
}
}catch(SQLExceptionexception){
exception.printStackTrace();//打印出错误的原因
//信息添加失败
JOptionPane.showMessageDialog(null,"对不起,信息添加失败!
","添加失败",JOptionPane.ERROR_MESSAGE);
}
主页面的JcomboBox的三级联动主要体现:
//学院的JComboBox的事件
privatevoidcollegeJComboBoxItemStateChanged(ItemEvente){
collegenumber=collegeJComboBox.getSelectedIndex();
subject(collegenumber);
}
//相应的subject方法
publicintsubject(intt){
inti;
subjectJComboBox.removeAllItems();
subjectJComboBox.updateUI();
for(i=0;i subjectJComboBox.addItem(subjectName[t][i]); } returnt; } //专业列表的itemStatechange事件 privatevoidsubjectJComboBoxitemChange(ItemEvente){ //TODOAuto-generatedmethodstub intzhuanye_hao=subjectJComboBox.getSelectedIndex(); if(zhuanye_hao>=0){ banji_shezhi(zhuanye_hao); }else{ } } (4)StudentInfoQuery界面的部分代码 importjavax.swing.table.DefaultTableModel;//用于向界面中插入表格 importjava.awt.event.MouseAdapter;//用于在界面中点击一行的监听器 importjava.awt.event.MouseEvent;//用于在界面中点击一行的事件 privateintcolumnCount;//表示获取的列数 Stringsql;//声明全局变量sql Stringhuoqu;//声明全局变量huoqu String[]s;//声明一个数组s //用于显示表 DefaultTableModeldtm=newDefaultTableModel(); JTabletable=newJTable(); //从表中获取一行,添加一个鼠标点击事件 JScrollPane.setViewportView(table);//将表显示出来 table.addMouseListener(newMouseAdapter(){ publicvoidmouseClicked(MouseEventevent){ huoqu=table.getValueAt(table.getSelectedRow(), 0).toString(); }}); //获取数据库中表头 sta=linkdb.getStatement(); try{ rs=sta.executeQuery("select学生编号,学院名称,专业名称,班级名称,学生姓名,家庭住址,身份证号,学号fromStudent"); columnCount=rs.getMetaData().getColumnCount(); for(inti=1;i<=columnCount;i++){ dtm.addColumn(rs.getMetaData().getColumnName(i)); } rs.close(); }catch(SQLExceptionexception){ exception.printStackTrace();} //从表里获取信息 s=newString[columnCount]; try{ while(rs.next()){ for(inti=1;i s[i-1]=rs.getString(i); } dtm.addRow(s); } }catch(SQLExceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } 五.测试结果 登录的主界面: 主界面: 学生信息查询界面及修改界面: 选课信息界面及删除信息是弹出的文本框: 删除用户界面及删除用户时弹出文本框: 六.设计心得 通过本次的实训作业的设计,我学会了许多东西,例如如何向一个界面中添加一个背景图片,在设计过程中学会了JComboBox的联动,实现方法是在第一个JComboBox上加一个监听,即ItemListener,然后实现监听器itemstateChange(),这样当地一个JComboBox变化时,程序就会知道,然后获取第一个JComboBox的值,拿着这个值查询数据库里的信息,rs=sql.executeQuery("select*fromxxxwherexxx")然后遍历rs每读取一行就在第二个JComboBox中添加一个item,即第二个JComboBox.addItem(rs.getString(x))。 还学会了如何向java界面中添加一个表即是利用DefaultTableModel来实现的,在此还要学会如何从数据库中读取一行或一列,来实现查询、修改等操作。 此外,其他相关组件也要进一步学习,能够对某一事件添加相应的程序代码来控制程序运行,能够对要求的结果进行简单的代码编写。 在写代码时提高程序代码的复用性,会使程序更简洁明了。 有关数据库学到的知识有: execute(Stringsql)执行给定的SQL语句,该语句可能返回多个语句。 executeQuery(Stringsql)执行给定的SQL语句,给语句返回单个ResultSet对象;executeUpdate(Stringsql)执行给定的SQL语句,给语句可能为INSERT、UPDATE、DELETE语句,或者不返回任何内容的SQL语句(如SQLDDS语句); 前两种一般在查询中使用,最后一个在插入、更新、删除时使用。 在程序设计中最深的体会是一定要将程序的框架设计合理,如果框架设计的不合理接下来的工作很难进行。 程序框架不可能在一次规划中就能够成功,多次试验得出一个较好的更适合程序运行的。 在编程中的一个小细节就有可能使系统从头做起,所以编程中一定要细心,偶尔的一个字符错误都会导致程序运行报错,此外在编写代码时要把事件添加完整,否则会报出空指针之类的错误。 编程一定要有自己的思路,根据自己及客户的需要来编写,而且思路要开阔,不能只局限于一个方法,学会思考,下次遇到类似的问题能够很快的建立自己的思想构图。 通过本次的学生管理系统的设计,我对此管理系统有了更加深刻的了解,也加深了我对软件开发方面的了解,使得我对软件的开发更加充满兴趣,不但如此,我通过本次的实训设计,了解了自己在软件设计方面的优点和不足,能够对以后的软件开发提供更加丰富的经验,为以后的软件开发奠定了更好的基础。 总之,通过本次的实训设计,我对这类的管理系统有了更深刻的了解,我会在以后的时间里努力的学习,争取获得更加好的突破。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 管理 系统 报告