数据库课程设计学生成绩管理系统.docx
《数据库课程设计学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计学生成绩管理系统.docx(38页珍藏版)》请在冰豆网上搜索。
数据库课程设计学生成绩管理系统
《数据库》
课程设计说明书
题目:
学生成绩管理系统
院系:
信息与计算机科学系
专业班级:
网络工程
学号:
***********
学生姓名:
***
指导老师:
***
一概述
1.1.1问题的提出
随着科技的发展,基本上所有的具有一定数量数据的机构都开始使用计算机数据库来做管理。
几乎所有学校也都已经在使用计算机管理数据的机制,大大减少了学校学生成绩管理的工作量。
系统概述:
通过对学校日常教学管理中的课程、选课、学生、教师、成绩等相关内容进行分析,完成具有学生管理、成绩管理、课程管理等相关功能的小型数据库管理应用系统。
基本要求:
完成学生、班级、课程表的维护。
完成成绩表的维护、浏览查找。
按班级、按课程计算平均成绩、最高成绩、最低成绩、及格率。
统计某学生、某学期的所有课程的平均成绩。
完成用户管理功能。
完成数据备份与恢复功能,
1.1.2本课题的意义
通过该课程设计,可以达到把数据库理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。
1.2设计环境
① Sqlserver2005
二需求分析
2.1系统功能要求设计
此系统实现如下系统功能:
(1)使得学生的成绩管理工作更加清晰、条理化、自动化。
(2)通过用户名和密码登录系统,查询课程基本资料,学生所选课程成绩,修改用户密码等功能。
容易地完成学生信息的查询操作。
(3)设计人机友好界面,功能安排合理,操作使用方便,并且进一步考虑系统在安全性,完整性,并发控制,备份和恢复等方面的功能要求。
2.2系统模块设计
成绩管理系统大体可以分成二大模块如,一是学生的基本信息模块,里面应该包含学生的各方面的基本信息;再者便是课程管理模块,在该模块中应该包含有对学生成绩信息的查询和处理,如平均成绩、最好成绩、最差成绩以及不及格学生的统计等功能模块;再其次还有教师、课程等相关信息的模块;
2.3数据字典
数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称、数据类型、长度、取值能否为空。
利用SQLServer2000建立“学生选课”数据库,其基本表清单及表结构描述如下:
数据库中用到的表:
数据库表名
关系模式名称
备注
Student
学生表
学生学籍信息表
Course
课程表
课程基本信息表
Teach
教师表
教师基本信息
Stu_Cour
选课表
学生选课信息
Score
成绩
选课成绩信息表
Student基本情况数据表,结构如下:
字段名
字段类型
NotNull
说明
Sno
Char
Primarykey
学号
Sname
char
NotNull
学生姓名
Sdept
char
学院
Sclass
char
班级
Sage
intr
年龄
Ssex
char
性别
Teach基本情况数据表,结构如下
字段名
字段类型
NotNull
说明
Tno
Char
Primarykey
教师号
Tname
char
NotNull
教师姓名
Tsex
char
性别
Cno
char
外部码
所授课程
Tage
int
年龄
Tdept
char
学院
Course数据表,结构如下:
字段名
字段类型
约束控制
说明
Cno
char
主键(primarykey)
课程号
Cname
char
notnull
课程名称
Ctime
int
notnull
课时
Stu_cour情况数据表,结构如下:
字段名
字段类型
约束控制
说明
Cno
char
外部键
课程号
Sno
char
外部键
学号
Score情况数据表,结构如下:
字段名
字段类型
约束控制
说明
Cno
char
外部键
课程号
Sno
char
外部键
学号
score
int
成绩
三概念模型设计
由需求分析的结果可知,本系统设计的实体包括:
(1)学生基本信息:
学号,姓名,学院,班级,年龄,性别。
(2)课程基本信息:
课程名,课程号,学时。
(3)教师基本信息:
教师号,教师姓名,职称,年龄,性别,学院
(4)学院基本信息:
学院名、学院号、院长姓名
这些实体间的联系包括:
(1)每位学生可以学习多门课程,每门课程可供多位学生学习。
(2)每门课可以由多个老师教,每个老师可以教多门课程
(3)学生每选一门课就可以得到一个成绩,不选此课就不能取得该课程成绩
由上述分析可得到系统的E—R图:
四逻辑和物理结构设计
4.1由系统E—R图转化而得到的关系模式如下:
(1)学生(学号,姓名,性别,年龄,学院,班级),其主关键字为学号;
(2)课程(课程名,课程号,学时),其中主关键字为课程号;
(3)教师(教师号,教师姓名,职称,年龄,性别,学院,所授课程号)
(4)选课(课程号,学号)其中主关键字为学号和课程号
(4)成绩(课程号,学号,分数)其中主关键字为学号和课程号。
4.2确定关系模型的存取方法
在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。
可对该关系的属性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。
在实际设计中最常用的存取方法是索引发,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:
在经常需要搜索的列上建立索引; 在主关键字上建立索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规则。
才能充分利用索引的作用避免因索引引起的负面作用。
4.3确定数据库的存储结构
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。
因为该成绩管理系统的数据量小,,所以我们只用把数据存储在使用的电脑硬盘上,不用作更多的安排。
(1)创建学生基本信息表:
CREATETABLEStudent(
SNOCHAR(5),
SNAMECHAR(10)NOTNULL,
SDEPTCHAR
(2)NOTNULL,
SCLASSCHAR
(2)NOTNULL,
SAGENUMBER
(2),
SSEXCHAR
(2),
CONSTRAINTSNO_PKPRIMARYKEY(SNO));
2,创建表Course
CREATETABLECourse(
CNOCHAR(3),
CNAMEVARCHAR2(16),
CTIMENUMBER(3),
CONSTRAINTCNO_PKPRIMARYKEY(CNO)
)
3,创建表Teach
CREATETABLETeach(
TNOVARCHAR(6),
TNAMEVARCHAR(8),
TSEXCHAR
(2),
CNOCHAR(3),
TAGENUMBER
(2),
TDEPTCHAR
(2),
CONSTRAINTTT_PKPRIMARYKEY(TNO),
CONSTRAINTCNO_FKFOREIGNKEY(CNO)REFERENCESCourse(CNO)
)
4,创建表Stu_cno
CREATETABLEScore(
SNOCHAR(5),
CNOCHAR(3),
CONSTRAINTSC_PKPRIMARYKEY(SNO,CNO),
CONSTRAINTSNO_FKFOREIGNKEY(SNO)REFERENCESStudent(SNO),
CONSTRAINTCNOM_FKFOREIGNKEY(CNO)REFERENCESCourse(CNO)
)
5.创建成绩表
CREATETABLEScore(
SNOCHAR(5),
CNOCHAR(3),
SCORENUMBER(5,2),
CONSTRAINTSC_PKPRIMARYKEY(SNO,CNO),
CONSTRAINTSNO_FKFOREIGNKEY(SNO)REFERENCESStudent(SNO),
CONSTRAINTCNOM_FKFOREIGNKEY(CNO)REFERENCESCourse(CNO)
CONSTRAINTScore_FKFOREIGNKEY(SNO,CNO)REFERENCESStu_cno(SNO,CNO)
)
二、插入数据
1,Student
INSERTINTOStudentVALUES('96001','马小燕','CS','01',21,'女');
INSERTINTOStudentVALUES('96002','黎明','CS','01',18,'男');
INSERTINTOStudentVALUES('96003','刘东明','MA','01',18,'男');
INSERTINTOStudentVALUES('96004','赵志勇','IS','02',20,'男');
INSERTINTOStudentVALUES('97001','马蓉','MA','02',19,'女');
INSERTINTOStudentVALUES('97002','李成功','CS','01',20,'男');
INSERTINTOStudentVALUES('97003','黎明','IS','03',19,'女');
INSERTINTOStudentVALUES('97004','李丽','CS','02',19,'女');
INSERTINTOStudentVALUES('96005','司马志明','CS','02',18,'男');
2,Course
INSERTINTOCourseVALUES('001','数学分析',144);
INSERTINTOCourseVALUES('002','普通物理',144);
INSERTINTOCourseVALUES('003','微机原理',72);
INSERTINTOCourseVALUES('004','数据结构',72);
INSERTINTOCourseVALUES('005','操作系统',64);
INSERTINTOCourseVALUES('006','数据库原理',64);
INSERTINTOCourseVALUES('007','DB_Design',48);
INSERTINTOCourseVALUES('008','程序设计',56);
3,Teach
INSERTINTOTeachVALUES('9401','王成钢','男','004',35,'CS');
INSERTINTOTeachVALUES('9402','李正科','男','003',40,'CS');
INSERTINTOTeachVALUES('9403','严敏','女','001',33,'MA');
INSERTINTOTeachVALUES('9404','赵高','男','004',28,'IS');
INSERTINTOTeachVALUES('9405','李正科','男','003',32,'MA');
INSERTINTOTeachVALUES('9406','李玉兰','女','006',43,'CS');
INSERTINTOTeachVALUES('9407','王成钢','男','004',49,'IS');
INSERTINTOTeachVALUES('9408','马悦','女','008',35,'CS');
INSERTINTOTeachVALUES('9409','王成钢','男','007',48,'CS');
4,Score
INSERTINTOScoreVALUES('96001','001',77.5);
INSERTINTOScoreVALUES('96001','003',89);
INSERTINTOScoreVALUES('96001','004',86);
INSERTINTOScoreVALUES('96001','005',82);
INSERTINTOScoreVALUES('96002','001',88);
INSERTINTOScoreVALUES('96002','003',92.5);
INSERTINTOScoreVALUES('96002','006',90);
INSERTINTOScoreVALUES('96005','004',92);
INSERTINTOScoreVALUES('96005','005',90);
INSERTINTOScoreVALUES('96005','006',89);
INSERTINTOScoreVALUES('96005','007',76);
INSERTINTOScoreVALUES('96003','001',69);
INSERTINTOScoreVALUES('97001','001',96);
INSERTINTOScoreVALUES('97001','008',95);
INSERTINTOScoreVALUES('96004','001',87);
INSERTINTOScoreVALUES('96003','003',91);
INSERTINTOScoreVALUES('97002','003',91);
INSERTINTOScoreVALUES('97002','004','');
INSERTINTOScoreVALUES('97002','006',92);
INSERTINTOScoreVALUES('97004','005',90);
INSERTINTOScoreVALUES('97004','006',85);
INSERTINTOScoreVALUES('97004','008',75);
INSERTINTOScoreVALUES('97003','001',59);
INSERTINTOScoreVALUES('97003','003',58)
五数据库的实施与维护
5.1数据库的实施:
此阶段主要任务包括创建数据库,加载初始数据,数据库试运行,数据库的安全性和完整性控制数据库的备份与恢复,数据库性能的监督分析和改仅,数据库的重组和重构等。
首先在数据库中建立一个学生成绩管理系统数据库,然后新建一个数据源。
部分截图和代码如下:
学生表的增删改查:
增加学生信息
\
更新学生信息
删除学生信息
学生表增加、删除、修改代码(部分)
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Data.OracleClient;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceMyProgram
{
publicpartialclassForm3:
Form
{
privatestringConnectionString="DataSource=ahut;"+
"UserID=Scott;Password=123456";
privateOracleConnectionconn=null;
privateOracleDataAdapterDataAdapter=null;
privateDataSetdataset=null;
//privateOracleCommandcommand=null;
publicForm3()
{
InitializeComponent();
}
privatevoidForm3_Load(objectsender,EventArgse)
{
conn=newOracleConnection(ConnectionString);
showData();
}
privatevoidshowData()
{
stringtname="";
try
{
if(conn==null)
conn.Open();
DataAdapter=newOracleDataAdapter("select*fromstudent",conn);
dataset=newDataSet();
DataAdapter.Fill(dataset);
dataGridView1.DataSource=dataset;
dataGridView1.DataMember=dataset.Tables[0].ToString();
tname=dataset.Tables[0].ToString();
//先清除所有绑定,然后再重新绑定
textBox1.DataBindings.Clear();
textBox2.DataBindings.Clear();
textBox3.DataBindings.Clear();
textBox4.DataBindings.Clear();
textBox5.DataBindings.Clear();
textBox6.DataBindings.Clear();
textBox1.DataBindings.Add("Text",dataset,"table.sno");
textBox2.DataBindings.Add("Text",dataset,"table.sname");
textBox3.DataBindings.Add("Text",dataset,"table.sdept");
textBox4.DataBindings.Add("Text",dataset,"table.sclass");
textBox5.DataBindings.Add("Text",dataset,"table.sage");
textBox6.DataBindings.Add("Text",dataset,"table.ssex");
}
catch(Exceptionex)
{
MessageBox.Show(ex.ToString());
}
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringstrOracle="insertintostudentvalues(";
strOracle+="'"+textBox1.Text;//学号
strOracle+="','"+textBox2.Text;//姓名
strOracle+="','"+textBox3.Text;//学院
strOracle+="','"+textBox4.Text;//班级
strOracle+="',"+textBox5.Text;//年龄
strOracle+=",'"+textBox6.Text+"')";//性别
OracleCommandcommand=null;
try
{
command=newOracleCommand();
command.Connection=conn;
command.CommandText=strOracle;
conn.Open();
intn=command.ExecuteNonQuery();//执行Insert语句
if(n>0)
MessageBox.Show("成功插入数据!
");
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
if(conn!
=null)
conn.Close();
command.Dispose();
}
showData();
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
Form7f7=newForm7();
f7.Show();
}
privatevoidbutton3_Click(objectsender,EventArgse)
{
try
{
OracleCommandBuilderbuilder=newOracleCommandBuilder(DataAdapter);
intn=DataAdapter.Update(dataset,"Table");
MessageBox.Show("成功更新数据,有"+n.ToString()+"行受到更新!
");
}
catch
{
MessageBox.Show("更新不成功!
");
}
}
privatevoidbutton4_Click(objectsender,EventArgse)
{
stringcurNo="";
if(dataGridView1.Rows.Count<=1)
return;
intindex=dataGridView1.CurrentRow.Index;
dataGridView1.Rows[index].Selected=true;
curNo=this.dataGridView1.Rows[index].Cells[0].Value.ToString();
OracleCommandcommand=null;
stringstrOracle="deletefromstudentwheresno='"+curNo+"'";
try
{
co