《SQL数据库实训》学生成绩管理信息系统设计报告郭江涵.docx
《《SQL数据库实训》学生成绩管理信息系统设计报告郭江涵.docx》由会员分享,可在线阅读,更多相关《《SQL数据库实训》学生成绩管理信息系统设计报告郭江涵.docx(20页珍藏版)》请在冰豆网上搜索。
《SQL数据库实训》学生成绩管理信息系统设计报告郭江涵
山东理工大学课程实训报告
——数据库实训
题目:
学生成绩管理信息系统
学院:
计算机科学与技术学院
班级:
软件1304
姓名:
郭江涵学号131105721XX
指导教师:
XX
总评成绩指导教师签名
2016年01月04日~2016年01月10日
实训成绩评定表
1.设计报告部分(30分)
①封面设计符合要求(3分);
②报告格式符合要求(7分);
③功能叙述完备,错别字少,章节段落分布合理,无抄袭或雷同现
象(10分);
④排版质量高,图片处理且效果好(10分)。
2.设计内容部分
得分点及分数
数据流图15'
E-R图15'
数据流图、E-R
图和数据库关
系图
数据库关系图20
合计50'
得分点及分数
简要程序设计流程图代码20'程序设计说明
书
合计20'
3.成绩评定
综
合
评
语
指导教师签名:
年月日
第一章概述....................................................................................................1
第二章系统分析...........................................................................................2
第三章数据库设计.......................................................................................4
第四章系统实现...........................................................................................7
第五章结束语.............................................................................................19
第一章概述
课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个
方面,是一门独立于课程之外的特殊课程。
课程设计是让同学们对所学的课程更全面的学习和应用,
理解和掌握课程的相关知识。
随着信息时代的发展,对于学生信息的管理已经不再局限于纸上的那些繁琐的记录,而是通过
电脑软件程序对学生的信息进行管理,这样不但可以简化管理的复杂度,还可以提高管理过程中的
准确性,因此有必要设计一款专门针对于学生信息管理的一个程序,于是设计了此学生信息管理系
统。
该应用程序能够对每个学生的相关信息进行注册、储存、修改和删除等操作。
该系统要求按身
份登陆,即学生、教师、管理员等不同身份进行访问。
该程序便于操作,面向广大群体,条理清晰,
容易理解,容易修改。
学生信息管理系统,从字面来看主要是对学生信息的资料进行管理,但实际上,核心却是系统与管
理人员的交互,如何能把如此多的信息登记尽可能的进行操作上的精简是我们的一大难题。
与其进
行繁琐的操作,让操作标的简洁才是我们工作的重点.程序上是分为JAVA窗体程序和数据库两大部
分,主要进行数据库的调用,设计需要满足以下的需求:
1.学生的信息的资料,应该包括学生的学号、姓名、所属学院、所属专业、所属班级、家庭
地址,并且系统还能够修改输入错误的学生个人信息记录。
2.可以对学生的选课进行管理,包括可选课程和个人已选课信息,并进行相应的选课操作。
3.可以对课程进行管理,课程管理包括增加课程和删除课程,该课程包括任课教师和所属专
业。
4.根据学号、姓名、班级查询学生信息。
根据课程、专业、学分查询课程的相关信息。
5.系统使用权限管理方式。
根据工作流程,系统有2种角色:
管理员、学生和教师。
管理员
允许对课程信息、教师信息、学生信息的管理。
学生可以进行选课和查看课程信息的操作。
教师可
以查看本人所售课程的学生信息。
1
第二章系统分析
1.系统需求:
1.使用友好的全屏幕用户界面,菜单驱动,多窗口。
2.数据维护功能,通过窗体实现录入、添加和修改所有表的内容。
3.查询统计功能,设置多种查询方式,实现对学生的基本信息、考试成绩情况等进行
查询。
4.系统维护功能,适当的加入系统密码管理、数据备份等帮助功能。
2.输入的形式和输入值的范围
形式:
输入学生的学号,姓名,年龄,性别,出生年月,地址,电话,E-mail。
输入一个学生
信息一个回车。
用输入的学号p1->num来控制输入,当输入的学号为0时,用break跳出循环。
即if(p1->num==0)break。
输入值的范围:
学号、年龄为整型longnum;intage;
姓名为字符串型15个字节charname[15];
性别为字符串型,10个字节charsex[10];
出生为字符串型,20个字节charchushen[20];
地址为字符串型,30个字节chardizhi[30];
邮箱为字符串型,输入11位数字charemail[11]。
3.输出的形式
输出是以表格的形式输出,即表格的每一行都能显示第一个学生的信息,第二行是显示第二个
学生的信息
4.课题实现:
首先建立数据库,然后创建数据表,设置主键以及各种约束,学生属性主要包括姓名,学号,
性别,年龄,学院,联系电话,家庭住址。
其中学号为主键,车号设立唯一性约束,将数据库拥有
者更改为sa,密码设置为123。
该应用程序包含了管理员模块(包含学生管理子模块和课程管理子模块)、教师模块、学生模
块和公共模块。
管理员模块是系统的核心,学生管理子系统实现对学生信息的添加、修改、删除操
作,以输入条件进行条件查询。
课程管理子系统实现对课程的添加,添加时为其分配任课教师、上
2
课时间、地点和课程详细信息,实现对课程的修改、删除,查看某个课程的详细信息等。
教师模块
实现查看自己所教授的课程、课程有哪些学生选修,以及利用本系统提交学生的成绩。
学生模块实
现学生的选课,查看、修改自己的选课信息。
公有模块实现用户的身份验证,密码修改,退出系统
等功能。
在学生管理子系统包括学生信息和选课信息,要求对学生信息和选课信息的添加、删除、修
改和查询,该模块中当学生修改信息时,对相关的组件添加了事件,相应的JComboBox添加了
ItemStateChange的相关事件,对其进行了三级联动设计,利用形式参数进行传递一个int型的值,
当点击相应的JComboBox时启动下一个相关的组件应用。
在课程查询时应用相应的JScorllPane组
件显示所查询的相关信息。
整个学生管理系统的数据都是在数据库有存储信息的,因此在应用程序中要应用相应的SQL
server语句来对数据库添加、删除、修改相应信息。
SQLserver语句主要有update、insert、select
语句。
运用Frm窗体编辑窗口程序,建立Frm窗体,插入标签以及按钮,设置按钮触发功能,然后
运用DriverManager.registerDriver(newSQLServerDriver());con=
DriverManager.getConnection(strConn,"sa","123");语句链接数据库内容。
LoginFrame界面
主要为JTextField,利用JTextField的getText属性获取文本框里输入的相应的内容,然后应用
SQLserver的select的语句来查询并验证密码是否与数据库一致,如若不一致则弹出一个
MessageBox的信息提示框提示输入正确的密码。
在验证密码是应用了equals关键字,equals主要
应用于字符的比较,而等号(=)主要应用于数据的比较。
MainFrame界面主要JMenu和JMenuItem组件,完成了主界面的菜单栏,并分别对每个
JMenuItem添加了一个事件监听器,使点击时显示每个相应的Item界面,以便于对信息的操作。
学生信息管理主要包括学生信息和选课信息,完成了相应的信息注册、修改、查询和选课查
询操作。
学生信息注册包含姓名、学号、省份证号、所属学院及专业和班级、家庭住址等信息。
数
据库的Student表也添加了相应的列。
在学生信息注册和修改页面还应用了JComboBox的三级联动,
使用参数传递,获取相应的JComboBox的getSelectedIndex来控制显示的内容。
班级信息录入和班级信息管理对各个班级的信息进行管理的界面,主要有JComboBox的二级
联动和JRadioButton组件的应用。
班级信息管理界面中声明了displayButtonGroup用于控制三个
JRadioButton组件。
用不同的方式查询班级信息,当点击修改时弹出一个修改的JFrame界面。
3
第三章数据库设计
1.数据库设计
1).学生学籍表如图3.1.1
字段名称标识名称数据类型空否字段说明
userid学号Varcha(16)否主键
uername姓名Varcha(16)可空
sex性别Char(4)可空
birthday出生日期Datetime可空
class班级Char(20)可空
图3.1.1
2).课程信息表如图3.1.2
字段名称标识名称数据类型空否字段说明
course课程号Char(16)否主键
coursenanme课程名称Char(16)可空
coursetime课时Char(16)可空
fen学分Char(10)可空
type类型Char(10)可空
year年度nChar(10)可空
图3.1.2
3).学生成绩表
字段名称标识名称数据类型空否字段说明
Name学生姓名Char(16)可空
Class班级Char(16)可空
Id学号Char(16)否主键
usually平时成绩Int(5)可空
finally期末成绩Int(5)可空
图3.1.3学生成绩表
4
2.数据库关系图
1).数据流图如图3.2.1
图3.2.1
2).数据E-R图如图3.2.2
学号姓名性别出生日期班级学院联系方式地址
学生编号
学生
课程编号
成绩
期末成绩
补考成绩
课程
是否重催
课程编号课程名称课程类别学时学分
图3.2.2
3).数据库关系图如图3.2.3
5
图3.2.3
6
第四章系统实现
1、打开系统会提示选择操作事项。
如图4.1
图4.1主界面
2、选择查询操作后可查询学生和课程以及成绩信息。
如图4.2
由以下代码实现:
publicclassselectAllextendsjavax.swing.JFrame{
datatOperdt;
/**CreatesnewformselectAll*/
publicselectAll(){
initComponents();
dt=newdatatOper();
dm=newDefaultTableModel();
dm.addColumn("课程信息");
dm.addColumn("成绩信息");
dm.addColumn("学生信息")
table.setModel(dm);
}
7
图4.2查询信息界面
3、选择系统维护,可进入数据备份界面,如图4.3
由以下代码实现:
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){
intresult=0;
Filefile=null;
Stringpath=null;
JFileChooserfileChooser=newJFileChooser();
FileSystemViewfsv=FileSystemView.getFileSystemView();
System.out.println(fsv.getHomeDirectory());//得到桌面路径
fileChooser.setCurrentDirectory(fsv.getHomeDirectory());
fileChooser.setDialogTitle("请选择要进行备份的文件夹...");
fileChooser.setApproveButtonText("确定");
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
ComponentchatFrame=null;
result=fileChooser.showOpenDialog(chatFrame);
if(JFileChooser.APPROVE_OPTION==result){
path=fileChooser.getSelectedFile().getPath();
8
System.out.println("path:
"+path);}
Connectionconn=Connect.getConnection();
try{
Statementstatement=conn.createStatement();
statement.executeUpdate("USEmaster");
Stringsql="backupdatabaseBankServertodisk='"+path+"'with
format,init";
statement.executeUpdate(sql);
JOptionPane.showMessageDialog(this,"数据库备份成功","系统提示",
JOptionPane.NO_OPTION);
}
catch(SQLExceptione){
System.out.println("数据库备份失败");
e.printStackTrace();
}
图4.3系统信息
4、选择课程查询可查询课程信息。
如图4.4
9
由以下代码实现:
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){
try{
Stringstr="select*fromcourse";
ResultSetres=dt.selectInfo(str);
dm=newDefaultTableModel();
dm.addColumn("课程编号");
dm.addColumn("课程名称");
dm.addColumn("课程类型");
dm.addColumn("学时");
dm.addColumn("学分");
table.setModel(dm);
while(res.next())
{
Vectorv=newVector();
ResultSetMetaDatada=res.getMetaData();
for(inti=1;i{
v.add(res.getString(i));
}
dm.addRow(v);
}
//TODOaddyourhandlingcodehere:
}catch(SQLExceptionex){
Logger.getLogger(selectAll.class.getName()).log(Level.SEVERE,null,ex);
}
}
10
图4.4课程查询信息
5、选择成绩查询,可进入成绩查询界面。
如图4.5
有以下代码实现
privatevoidjButton2ActionPerformed(java.awt.event.ActionEventevt){
try{
Stringstr="select*fromscore";
ResultSetres=dt.selectInfo(str);
dm=newDefaultTableModel();
dm.addColumn("成绩编号");
dm.addColumn("课程编号");
dm.addColumn("期末成绩");
dm.addColumn("补考成绩");
dm.addColumn("是否重修");
table.setModel(dm);
while(res.next())
{
Vectorv=newVector();
ResultSetMetaDatada=res.getMetaData();
for(inti=1;i{
v.add(res.getString(i));
11
}
dm.addRow(v);
}
//TODOaddyourhandlingcodehere:
}catch(SQLExceptionex){
Logger.getLogger(selectAll.class.getName()).log(Level.SEVERE,null,
ex);
}
图4.5成绩查询界面
6、选择学生信息查询可进入学生查询界面。
如图4.6
有以下代码实现
privatevoidjButton3ActionPerformed(java.awt.event.ActionEventevt){
try{
Stringstr="select*fromstudents";
ResultSetres=dt.selectInfo(str);
dm=newDefaultTableModel();
dm.addColumn("学生编号");
dm.addColumn("学生姓名");
dm.addColumn("性别");
dm.addColumn("出生日期");
dm.addColumn("所属班级");
dm.addColumn("所属学院");
dm.addColumn("联系电话");
dm.addColumn("所在地址");
table.setModel(dm);
while(res.next())
{
12
Vectorv=newVector();
ResultSetMetaDatada=res.getMetaData();
for(inti=1;i{
v.add(res.getString(i));
}
dm.addRow(v);
}
//TODOaddyourhandlingcodehere:
}catch(SQLExceptionex){
Logger.getLogger(selectAll.class.getName()).log(Level.SEVERE,null,ex);
}
图4.6学生信息查询界面
7、在主界面中选择学生信息录入,可进入录入学生信息界面。
如图4.7
由以下代码实现:
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){
booleanflagB;
try{
//TODOaddyourhandlingcodehere:
Stringsql="insertintostudents
values('"+this.jtxt1.getText()+"','"+this.jtxt2.getText()+"','"+this.jtxt3.getText()+
"',"+this.jtxt4.getText()+",'"+this.jtxt5.getText()+"','"+this.jtxt6.getText()+"','"+
this.jtxt7.getText()+"','"+this.jtxt8.getText()+"')";
datatOperOper=newdatatOper();
flagB=Oper.addInfo(sql);
if(flagB==true){
13
JOptionPane.showMessageDialog(this,"学生信息录入成功","系统
信息",JOptionPane.NO_OPTION);
}
else
{
JOptionPane.showMessageDialog(this,"系统信息录入失败","系统
信息",JOptionPane.ERROR_MESSAGE);
}
}catch(SQLExceptionex){
Logger.getLogger(addStuInfo.class.getName()).log(Level.SEVERE,null,
ex);
}
}
图4.7录入学生信息界面
8、在主界面中选择学生信息修改或删除,都可进入修改或删除学生信息界面。
如图4.8
由以下代码实现:
privatevoidjButton5ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
booleanflag;
Stringsql="updatestudentsset
RealName='"+this.jtxt2.getText()+"',Sex='"+jtxt3.getText()+"',Brithday="+jtxt4.getTex
t()+",Class='"+jtxt5.getText()+"',School='"+
jtxt6.getText()+"',Tell='"+jtxt7.getText()+"',addres='"+jtxt8.getText()+"'where
StuId='"+Stuid+"'";
14
datatOperOper=newdatatOper();
try{
flag=Oper.DelUpInfo(sql);
if(flag==true){
JOptionPane.showMessageDialog(this,"更新成功!
!
!
","系统信息",
JOptionPane.NO_OPTION);
}
else
JOptionPane.showMessageDialog(this,"更新失败!
!
!
","系统信息",
JOptionPane.ERROR_MESSAGE);
}
catch(SQLExceptione){
e.printStackTrace();
}
图4.8修改或删除学生信息界面
9、在主界面中选择课程信息录入,可进入录入课程信息界面。
如图4.9
15
图4.9录入课程信息界面
10、在主界面中选择课程信息修改或删除,都可进入修改删除课程信息信息界面。
如图4.10
图4.10修改删除课程信息界面
11、在主界面中选择学生成绩录入,可进入录入学生成绩界面。
如图4.11
16
图4.11录入学生成绩界面
12、在主界面中选择成绩信息修改或删除,都可进入修改删除成绩信息信息界面。
如图4.12
图4.12修改删除成绩信息界面
13、在主界面中选择退出,进入退出系统界面。
如图4.13
由以下代码实现:
rivatevoidjMenu7MouseClicked(java.awt.event.MouseEventevt){
//TODOaddyourhandlingcodehere:
inti=JOptionPane.showConfirmDialog(this,"是否退出?