学生成绩管理系统数据库.docx

上传人:b****6 文档编号:5766542 上传时间:2023-01-01 格式:DOCX 页数:19 大小:222.83KB
下载 相关 举报
学生成绩管理系统数据库.docx_第1页
第1页 / 共19页
学生成绩管理系统数据库.docx_第2页
第2页 / 共19页
学生成绩管理系统数据库.docx_第3页
第3页 / 共19页
学生成绩管理系统数据库.docx_第4页
第4页 / 共19页
学生成绩管理系统数据库.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统数据库.docx

《学生成绩管理系统数据库.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统数据库.docx(19页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统数据库.docx

学生成绩管理系统数据库

学生成绩管理系统数据库

一.需求分析阶段

1.信息要求

高校学生的成绩管理工作量大、繁杂,人工处理非常困难。

学生成绩管理系统借助于计算机强大的处理能力,大大减轻了管理人员的工作量,并提高了处理的准确性。

学生成绩管理系统的开发运用,使得学生的成绩管理工作更加清晰、条理化、自动化,不仅把广大教师从繁重的成绩管理工作中解脱出来、把学校从传统的成绩管理模式中解放出来,而且对学生成绩的判断和整理更合理、更公正,同时也给教师提供了一个准确、清晰、轻松的成绩管理环境。

2.处理要求

能够进行数据库的数据定义、数据操纵、数据控制等处理功能,进行联机处理的相应时间要短。

此系统实现如下系统功能:

(1)通过用户名和密码登录系统,教师根据安排进行课程的添加、删除、修改、查询,成绩的添加、修改、删除、查询、报表,学生的添加及其信息修改、查询、删除和教师基本信息的查询、修改及密码修改。

(2)通过用户名和密码登录系统,学生查询个人信息、所学课程成绩及修改登录密码等功能。

(3)设计人机友好界面,功能安排合理,操作使用方便,并且进一步考虑系统在安全性,完整性,并发控制,备份和恢复等方面的功能要求。

3.安全性与完整性要求

对于学生成绩管理系统数据库来讲,由于其主要数据是学生成绩,只能由本人以及所教老师和教务处知道,因此做好做好数据安全性是重中之重。

另外,要求所有在校学生的信息要录入其中,并且要设计好个别情况。

4.数据流图

成绩管理系统大体可以分成二大模块,一是学生的基本信息模块,里面应该包含学生的各方面的基本信息;二是教师管理模块,在该模块中应该包含有对学生成绩信息的查询和处理(即报表),如平均成绩、成绩排名以及不及格学生的统计,其中还包含有教师、课程、学生等相关信息的模块。

因此可以得到系统流程图如下所示:

5.数据字典

数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称、数据类型、长度、取值能否为空。

利用SQLServer2000建立“学生成绩管理”数据库,其基本表清单及表结构描述如下:

1、课程(course)信息数据表,结构如下:

字段名

描述

数据类型

约束控制

cno

课程号

char(10)

Primarykey(主键)

cname

课程名

char(10)

Notnull

tname

教师名

char(10)

Notnull

credit

学分

int(4)

Notnull

ctime

学时

int(4)

Notnull

2、学生(student)基本情况数据表,结构如下:

字段名

描述

数据类型

约束控制

sno

学号

int(10)

Primarykey(主键)

sname

姓名

char(10)

Notnull

ssex

性别

char

(2)

Notnull

sage

年龄

int

(2)

Notnull

sdept

系别

char(10)

Notnull

3.教师表(teacher)信息数据表,结构如下:

字段名

属性

数据类型

约束控制

tno

教师号

char(10)

Primarykey(主键)

tname

教师名

char(10)

Notnull

tsex

教师性别

char

(2)

Notnull

tdept

教室系别

char(10)

Notnull

4.成绩表(grade)信息数据表,结构如下:

字段名

属性

数据类型

约束控制

sno

学号

char(10)

外部键

cno

课程名

char(10)

外部键

score

成绩

int(4)

Notnull

二.概念结构设计阶段

概念结构设计阶段是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。

设计成绩管理数据库包括学生、成绩、课程、教师四个关系。

因此可以得出E-R图如下所示:

三.逻辑结构设计阶段

逻辑结构是独立于任何一种数据模型的信息结构。

逻辑结构的任务是把概念结构设

计阶段设计好的基本E-R图转化为宜选用的DBMS所支持的数据模型相符合的逻辑结构,并对其进行优化。

E-R图向关系模型转化要解决的问题是如何将实体型和实体间的联系转化为关系模

式,如何确定这些关系模式的属性和码。

设计学生成绩管理数据库,包括课程、学生、教师、成绩四个关系,由系统E—R图

转化而得到的关系模式如下:

课程信息表

course:

(课程号,课程名,教师名,学分,学时)其中主关键字为课程号;

学生信息表

student:

(学号,姓名,性别,年龄,系别)其主关键字为学号;

教师表

teacher:

(教师号,教师名,教师性别,教师系别)其中主关键字为教师号;

成绩表

grade:

(学号,课程号,成绩)其中主关键字为学号和课程号。

四.物理设计阶段

数据库物理设计的任务是为上一阶段得到的数据库逻辑模式,即数据库的逻辑结构选择合适的应用环境的物理结构,既确定有效地实现逻辑结构模式的数据库存储模式,确定在物理设备上所采用的存储结构和存取方法,然后对该存储模式进行性能评价、修改设计,经过多次反复,最后得到一个性能较好的存储模式。

数据库物理设计内容包括记录存储结构的设计,存储路径的设计。

4.1确定关系模型的存取方法

在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。

可对该关系的属性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。

在实际设计中最常用的存取方法是索引发,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:

在经常需要搜索的列上建立索引; 在主关键字上建立索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规则。

才能充分利用索引的作用避免因索引引起的负面作用。

4.2确定数据库的存储结构

确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。

因为该成绩管理系统的数据量小,所以我们只用把数据存储在使用的电脑硬盘上,不用作更多的安排。

(1)创建学生基本信息表:

createtablestudent(

snochar(9)primarykey,

snamechar(10)notnull,

ssexchar

(2)notnull,

sageintnotnull,

sdeptchar(10)notnull,

(2)创建课程表:

createtablecourse(

cnochar(10)primarykey,

cnamechar(10)notnull,

tnamechar(10)notnull,

creditintnotnull,

ctimeintnotnull,

(3)创建成绩表:

createtablegrade(

snochar(9),

cnochar(10),

scoreint,

(4)创建教师表:

createtableteacher(

tnochar(10)primarykey,

tnamechar(10)notnull,

tsexchar

(2)notnull,

tdeptchar(10)notnull,

执行上述SQL语句即可创建成绩表相关表格

学生信息相关表格

sno

sname

ssex

sage

sdept

090261001

张三

22

工商

090261002

李四

23

工商

090361003

王五

22

数学系

093821004

赵六

22

计算机系

090021005

田七

20

人文系

课程信息相关表格

Cno

cname

tno

credit

ctime

0301

数据库

001

1

24

0302

计算机网络

002

3

18

0303

系统结构

003

3

36

0304

组成原理

004

2

32

0305

数据结构

005

4

30

0306

操作系统

006

4

32

0307

数据库原理

007

5

30

0308

专业英语

008

1

45

0309

高数

009

5

35

成绩信息表

sno

cno

score

090261001

0306

85

090261001

0303

90

090261001

0305

86

090261002

0306

82

090261002

0304

84

090261002

0301

81

090361003

0306

93

090361003

0302

79

090361003

0304

85

093821004

0306

94

093821004

0308

74

093821004

0307

86

教师信息表

tno

tname

tsex

tdept

001

卢亚君

财管

002

李昌明

财管

003

张富强

财管

004

刘翠杰

数统

005

王庆石

数统

006

黄立明

数统

007

王纲

计算机

008

徐伟丽

计算机

009

刘书霞

计算机

下图显示了学生,课程和成绩三个关系的物理设计其中课程号与学号号分别为关系的主码。

五.数据库实施和维护阶段

5.1数据库的连接:

此阶段主要任务包括创建数据库,加载初始数据,数据库试运行,数据库的安全性和完整性控制数据库的备份与恢复,数据库性能的监督分析和改仅,数据库的重组和重构等。

首先在数据库中建立一个学生成绩管理系统数据库,然后新建一个数据源。

主要代码如下:

#include"stdafx.h"

#include"StudentScore.h"

#include"Course.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

//CCourse

IMPLEMENT_DYNAMIC(CCourse,CRecordset)

CCourse:

:

CCourse(CDatabase*pdb)

:

CRecordset(pdb)

{//{{AFX_FIELD_INIT(CCourse)

//}}AFX_FIELD_INIT

m_nDefaultType=snapshot;

CStringCCourse:

:

GetDefaultConnect()

{return_T("ODBC;DSN=");

}

CStringCCourse:

:

GetDefaultSQL()

{return_T("");}

voidCCourse:

:

DoFieldExchange(CFieldExchange*pFX)

{

//{{AFX_FIELD_MAP(CCourse)

pFX->SetFieldType(CFieldExchange:

:

outputColumn);

//}}AFX_FIELD_MAP

}

//CCoursediagnostics

voidCCourse:

:

AssertValid()const

{CRecordset:

:

AssertValid();}

voidCCourse:

:

Dump(CDumpContext&dc)const

{CRecordset:

:

Dump(dc);}

//MainFrm.h:

interfaceoftheCMainFrameclass

classCMainFrame:

publicCFrameWnd

{protected:

//createfromserializationonly

CMainFrame();

DECLARE_DYNCREATE(CMainFrame)

//Attributes

public:

//Operations

public:

//Overrides

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CMainFrame)

virtualBOOLPreCreateWindow(CREATESTRUCT&cs);

//}}AFX_VIRTUAL

//Implementation

public:

virtual~CMainFrame();

protected:

//controlbarembeddedmembers

//CStatusBarm_wndStatusBar;

//CToolBarm_wndToolBar;

//Generatedmessagemapfunctions

protected:

//{{AFX_MSG(CMainFrame)

afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);

afx_msgvoidOnPassword();

afx_msgvoidOnUser();

afx_msgvoidOnStudent();

afx_msgvoidOnTeach();

afx_msgvoidOnTeacher();

afx_msgvoidOnScore();

afx_msgvoidOnQueryTeach();

afx_msgvoidOnQueryScore();

afx_msgvoidOnCourse();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

//{{AFX_INSERT_LOCATION}}

//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.

//CScoreAddDlgdialog

CScoreAddDlg:

:

CScoreAddDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CScoreAddDlg:

:

IDD,pParent)

{/{{AFX_DATA_INIT(CScoreAddDlg)

//}}AFX_DATA_INIT

}

voidCScoreAddDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CScoreAddDlg)

DDX_Control(pDX,IDC_SCORE_STUDENT,m_cStudent);

DDX_Control(pDX,IDC_SCORE_SCORE,m_cScore);

DDX_Control(pDX,IDC_SCORE_COURSE,m_cCourse);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CScoreAddDlg,CDialog)

//{{AFX_MSG_MAP(CScoreAddDlg)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

voidCScoreAddDlg:

:

OnOK()

{

CStringstudent,course,score,student_no,course_no;

m_cStudent.GetWindowText(student);

m_cCourse.GetWindowText(course);

m_cScore.GetWindowText(score);

else//成绩不为空

{

CStringstrSQL;

//查出该学生的学号

strSQL.Format("select*fromstudentwhereactive_status='Y'andstudent_name='%s'",student);

CRecordsetm_recordSet=&m_database;

m_recordSet.Open(CRecordset:

:

forwardOnly,strSQL);

m_recordSet.GetFieldValue("student_no",student_no);

m_recordSet.Close();

//查出该课程的课程号

strSQL.Format("select*fromcoursewhereactive_status='Y'andcourse_name='%s'",course);

m_recordSet.Open(CRecordset:

:

forwardOnly,strSQL);

m_recordSet.GetFieldValue("course_no",course_no);;

m_recordSet.Close();

BOOLCScoreAddDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

CRecordsetm_recordSet;

if(!

m_database.IsOpen())

{

m_database.Open(_T("student"));

m_recordSet.m_pDatabase=&m_database;

}

CStringstrSQL;

strSQL.Format("selectcourse_namefromcoursewhereactive_status='Y'");

m_recordSet.Open(CRecordset:

:

forwardOnly,strSQL);

for(inti=0;i

CStringtemp;

m_recordSet.GetFieldValue("course_name",temp);

m_cCourse.AddString(temp);

m_recordSet.MoveNext();

}

m_recordSet.Close();

m_cCourse.SetCurSel

(1);

strSQL.Format("selectstudent_namefromstudentwhereactive_status='Y'");

m_recordSet.Open(CRecordset:

:

forwardOnly,strSQL);

for(intj=0;j

CStringtemp;

m_recordSet.GetFieldValue("student_name",temp);

m_cStudent.AddString(temp);

m_recordSet.MoveNext();

}

m_recordSet.Close();

m_cStudent.SetCurSel

(1);

{

this->SetWindowText("成绩窗口");

}

returntrue;

}

voidCScoreAddDlg:

:

OnCancel()

{

//TODO:

Addextracleanuphere

CDialog:

:

OnCancel();

}

5.2部分操作截图:

下图显示了学生登陆系统进行查询时界面:

下图显示了进行课程查询时界面:

5.3数据操作

5.3.1.数据库查询操作

A.单表查询:

(1)查询sno为090261001学生的sname

selectsname

fromstudent1

wheresno='090261001'

(2)查询ssex为’女’并且sdept为’工商’的sname

selectsname

fromstudent

wheressex='女'and

sdept='工商'

(3)查询所有学生的姓名和系别。

selectsname,sdept

fromstudent

(4)查询系别为数学系的sname。

selectsname

fromstudent

wheresdept='数学系'

(5)查询所有学生所在院系名称

selectdistinctsdept

fromstudent

(6)查询学生信息表中年龄小于23和年龄大于21的学生的姓名和系别

selectsname,sdept

fromstudent

wheresage>21orsage<23

(7)查询所有学生的平均年龄

selectavg(sage)as平均年龄

fromStudent

B.连接查询

(1)学生的学号、姓名,所选课程的课程号、课程名和成绩、任课教师名

Selectstudent.sno,student.sname,o,ame,

course.score,teacher.tname

fromstudent,coure,grade,teacher

Wherestudent.sno=grade.snoando=oand

teacher.tno=course.tno

(2)找出教授数据库原理的老师的教师名

selectteacher.tname

fromcourse,teacher

Wherecourse.tno=teacher.tnoandame='数据库原理'

C.操作结果集查询

查询090261002号同学和090261003号同学共同选修的课程

Selectcno

Fromgrade

Wheresno='090261002'

Intersect

Selectcno

Fromgrade

Wheresno='090261003'

D.嵌套查询

查询选修了0306这门课的所有学生的学号、姓名、年龄、院系

Selectsno,sname,sage,sdept

Fromstudent

Wheresnoin

(selectsno

Fromgrade

Wherecno=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1