当前位置:文档之家› 学生成绩管理系统课程设计报告

学生成绩管理系统课程设计报告

数据库系统原理及其应用教程课程设计报告题目名称:学生成绩管理系统任课教师:姓名:学号:一.概述1.设计背景学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段,但是几年前,各个学校的学生成绩管理基本上都是靠手工进行,随着各个学校的规模增大,有关学生成绩管理工作所涉及的数据量越来越大,有的学校不得不靠增加人力、物力来进行学生成绩管理。

这种管理方式存在着许多缺点,如:效率低、保密性差,另外所用其时间长,产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。

如今学校的学生越来越多,成绩管理的工作量越来越大,手工管理成绩的弊端也越来越明显。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有手工管理所无法比拟的优点。

例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。

这些优点能够极大地提高学生档案管理的效率。

所以我想借本次课程设计之际,设计一个简易的学生成绩管理系统。

2. 设计目的1、掌握运用数据库原理进行系统分析和设计的方法;2、掌握关系数据库的设计方法;3、掌握利用SQL Server 2000技术;4、加强C++的编程能力3. 设计内容1.设计一个简易学生成绩管理的数据库系统,包括数据库的建立的需求分析,数据的输入输出。

2.设计用户的操作界面,主要实现数据的查询,添加,修改,删除基本功能。

二.需求分析1.功能分析在成绩管理系统中最主要的是对学生成绩的管理,管理主要包括:对学生成绩的录入,修改,删除,以及按不同的方式对学生成绩进行查询。

系统中包括学生的基本信息(如:学号,姓名,专业等),学生的各科成绩信息,教师的基本信息(如:教师编号,姓名,性别,所教科目,学历等),学生所学科目科目的基本信息(如:科目编号,名称,出版社等),以便查询。

2.工作流图3.数据流图4.数据字典数据项卡片1:数据项卡片2:数据项卡片3:数据项卡片4:数据项卡片5:数据项卡片7:数据项卡片8:数据结构卡片1:数据结构卡片2:数据存储卡片:数据流卡片:三.概念模型设计(E-R图)1.实体及属性图2.实体及其联系图四.逻辑设计1.E-R模型转换为关系模式学生(学号,姓名,性别,专业)教师(编号,姓名,性别,职称,所教科目)课程(课程号,课程名,学分)成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)2. 范式分析(1)分析关系模式学生(学号,姓名,性别,专业)在关系模式学生(学号,姓名,性别,专业)中,每一个属性都不能再分,故,属于1NF.在关系模式学生(学号,姓名,性别,专业)中,主键为学号,所以,姓名,性别,专业,都是非主属性。

根据候选键定义可知,学号完全决定姓名,性别,专业,即每一个非主属性完全依赖于候选键,故,该关系模式属于2NF。

在关系模式学生(学号,姓名,性别,专业)中,姓名,性别,专业,都是非主属性,且每一个非主属性不传递函数依赖于候选键学号,即,学号决定姓名,但姓名不决定性别,不决定专业。

故,该关系模式属于3NF。

在关系模式学生(学号,姓名,性别,专业)中,候选键为学号,函数依赖为学号—>姓名,学号—>性别,学号—>专业,故,该关系模式属BCNF。

由于在关系模式学生(学号,姓名,性别,专业)中不存在多值依赖,故该关系模式不属于4NF。

综上所述,关系模式学生(学号,姓名,性别,专业)为BCNF。

(2)分析关系模式教师(编号,姓名,性别,职称,所教科目)和课程(课程号,课程名,学分)在关系模式教师(编号,姓名,性别,职称,所教科目)和课程(课程号,课程名,学分)中,每一个属性都不能再分,故,属于首先满足1NF.主键分别为编号和课程号,每一个非主属性完全依赖于候选键,故,这两个关系模式首先属于2NF。

且每一个非主属性不传递函数依赖于候选键学号,故属于3NF。

而且,候选键编号和课程号决定一切非主属性,故,该关系模式属于BCNF。

由于关系模式中不存在多值依赖,故,不属于4NF。

即,关系模式教师(编号,姓名,性别,职称,所教科目)和课程(课程号,课程名,学分)属于BCNF。

(3)分析关系模式成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)在关系模式成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)中每一个属性都不能再分,故,先属于1NF。

在关系模式成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)中,主键为学号,其他都是非主属性,每一个非主属性完全依赖于候选键,故,该关系模式属于2NF。

在关系模式成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)中,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩都是非主属性,由于存在函数依赖,即,学号—>平均成绩,平均成绩—>总成绩,故,该关系模式不属于3NF。

综上所述,关系模式成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)为2NF。

五.源代码及查询截图1.程序流程图2.程序源代码:(1)建表代码:create table 学生成绩信息( 学号CHAR(10) NOT NULL,姓名CHAR(10) NOT NULL,高数CHAR(5) NOT NULL,物理CHAR (5) NOT NULL,英语CHAR (5) NOT NULL,化学CHAR (5) NOT NULL,政治CHAR (5) NOT NULL,总成绩CHAR (5) NOT NULL,平均成绩CHAR (5) NOT NULL);create table 课程基本信息( 课程号CHAR(5) NOT NULL,课程名CHAR(10) NOT NULL,学分CHAR (5) NOT NULL);create table 学生基本信息( 学号CHAR(10) NOT NULL,姓名CHAR (10) NOT NULL,专业CHAR(10) NOT NULL,性别CHAR(4) NOT NULL);create table 教师基本信息( 编号CHAR(10) NOT NULL,姓名CHAR (10) NOT NULL,职称CHAR(4) NOT NULL,性别CHAR(4) NOT NULL,所教科目CHAR(10) NOT NULL,(2)数据库连接代码:建立一个CAdodc类class CAdodc : public CWnd{protected:DECLARE_DYNCREATE(CAdodc)public:CLSID const& GetClsid(){static CLSID const clsid= { 0x67397aa3, 0x7fb1, 0x11d0, { 0xb1, 0x48, 0x0, 0xa0, 0xc9, 0x22, 0xe8, 0x20 } };return clsid;}virtual BOOL Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect,CWnd* pParentWnd, UINT nID,CCreateContext* pContext = NULL){ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); }BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect, CWnd* pParentWnd, UINT nID,CFile* pPersist = NULL, BOOL bStorage = FALSE,BSTR bstrLicKey = NULL){ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID, pPersist, bStorage, bstrLicKey); }实现:#include "stdafx.h"#include "adodc.h"#include "_recordset.h"#include "Font.h"CString CAdodc::GetConnectionString(){CString result;InvokeHelper(0x1, DISPA TCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);return result;}void CAdodc::SetConnectionString(LPCTSTR lpszNewValue){static BYTE parms[] =VTS_BSTR;InvokeHelper(0x1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, lpszNewValue);}(3)功能模块代码:①显示数据库中原纪录:void CBaDialog::OnStatr(){m_ListCtrlx.DeleteAllItems();m_ListCtrlb.DeleteAllItems();m_ListCtrll.DeleteAllItems();if(m_Set.IsOpen())m_Set.Close();if(m_bSet.IsOpen())m_bSet.Close();m_cob.GetLBText(m_cob.GetCurSel(),m_Getstring);this->Select();m_tSet.Open();m_nRecordCount=this->Show();this->display();this->exhibit();m_bS = GetDlgItem(IDC_STATR)->EnableWindow(FALSE);this->Enable(TRUE);②增加记录功能实现:void CBaDialog::OnAdd(){// TODO: Add your control notification handler code hereSelec=TRUE;CAddialog dlg;if( dlg.DoModal()==IDOK){if(dlg.m_nxue>=200) // m_nxue为学生的学号{AfxMessageBox("学号在1—200之间");//增加记录时学号输入异常,系统提示return;}}m_Set.AddNew(); //实现对数据的插入m_nRecordCount+=1; //记录数量加一m_Set.m_column1=dlg.m_nxue;m_Set.m_column2=dlg.m_strName;m_Set.m_column3=dlg.m_fmaths;m_Set.m_column4=dlg.m_fphysical;m_Set.m_column5=dlg.m_fchemistry;m_Set.m_column6=dlg.m_fenglish;m_Set.m_column7=dlg.m_fpolitic;m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fenglis h+dlg.m_fpolitic; //对输入的数进行求和m_Set.m_column9=(float)(m_Set.m_column8/5); //计算平均值this->Equal();m_Set.Update();//Update()一定放在Equal()后,更新数据m_Set.Requery();this->Xuan();}}③删除记录功能实现:void CBaDialog::OnDelect(){// TODO: Add your control notification handler code hereCDelectDialog dlg;Selec=FALSE;if(dlg.DoModal()==IDOK){if(dlg.m_nPass!=1234) //程序中的密码均为1234AfxMessageBox("密码不正确!你没有权限删除记录"); //密码不正确删除不能执行else{this->Select(); //实现对数据的删除m_Set.MoveFirst();BOOL sel=FALSE;do{if(m_Set.m_column1!=dlg.m_nxue)m_Set.MoveNext();else{m_nRecordCount-=1;sel=TRUE;m_bSet.MoveFirst();this->Equal();m_Set.Delete();m_Set.Requery();break;}}while(!m_Set.IsEOF());if(sel==FALSE) //数据库中没有要符合要求的记录{AfxMessageBox("没有此记录");return;}elsethis->Xuan();}}}④修改记录功能实现:oid CBaDialog::OnEdit(){// TODO: Add your control notification handler code hereCEditDialog dlg;if(dlg.DoModal()==IDOK){if(strcmp(dlg.m_pass,"1234")!=0)AfxMessageBox("你没有权限更改记录!请重输入密码:");else{this->Select();m_Set.m_strFilter.Format("[学号]=%d",dlg.m_xue);m_Set.Requery();if(m_Set.IsEOF())AfxMessageBox("没有此记录");Else //实现修改功能{for(int i=0;i<5;i++){float p=0,q=0;if(i==0){p=dlg.m_fmaths; /修改数学成绩q=m_Set.m_column3;}if(i==1){p=dlg.m_fphysical; //修改物理成绩q=m_Set.m_column4;}if(i==2){p=dlg.m_fchemistry; //修改化学成绩q=m_Set.m_column5;}if(i==3){p=dlg.m_fenglish; //修改英语成绩q=m_Set.m_column6;}if(i==4){p=dlg.m_fpolitic; //修改政治成绩q=m_Set.m_column7;}m_bSet.Edit();m_bSet.m_column2=m_bSet.m_column2+p-q;m_bSet.m_column3=m_bSet.m_column2/m_nRecordCount; if(p>=60 && q<60)m_bSet.m_column4+=1;if(p<60 && q>=60)m_bSet.m_column4-=1;if(p>=80 && q<80)m_bSet.m_column5+=1;if(p<80 && q>=80)m_bSet.m_column5-=1;m_bSet.Update();if(!m_bSet.IsEOF())m_bSet.MoveNext();elsebreak;}m_Set.Edit(); //更新数据m_Set.m_column2=dlg.m_strName; //更新姓名m_Set.m_column3=dlg.m_fmaths; //更新数学成绩m_Set.m_column4=dlg.m_fphysical; //更新物理成绩m_Set.m_column5=dlg.m_fchemistry; //更新化学成绩m_Set.m_column6=dlg.m_fenglish; //更新英语成绩m_Set.m_column7=dlg.m_fpolitic; //更新政治成绩m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fenglis h+dlg.m_fpolitic; //更新总成绩m_Set.m_column9=(float)(m_Set.m_column8/5); //更新平均成绩m_Set.Update();}m_Set.m_strFilter.Empty();m_bSet.Close();m_Set.Close();m_ListCtrlx.DeleteAllItems();m_ListCtrlb.DeleteAllItems();this->Select();this->Show();this->display();}}}⑤查询记录功能实现:void CBaDialog::OnFind(){// TODO: Add your control notification handler code hereCFinDialog dlg;if( dlg.DoModal()==IDOK){this->Select();m_bSet.Close();if(dlg.m_Getstring2==">=")//实现“>=”的查询m_Set.m_strFilter.Format("[%s]>=%.2f",dlg.m_Getstring1,dlg.m_find);if(dlg.m_Getstring2=="=")//实现“=”的查询m_Set.m_strFilter.Format("[%s]=%.2f",dlg.m_Getstring1,dlg.m_find);if(dlg.m_Getstring2=="<=")//实现“<=”的查询m_Set.m_strFilter.Format("[%s]<=%.2f",dlg.m_Getstring1,dlg.m_find);m_ListCtrlx.DeleteAllItems();m_Set.Requery();if(m_Set.IsEOF()) //数据库中没有要符合要求的记录{AfxMessageBox("没有符合条件的记录");m_Set.Close();return ;}elsethis->Show();}}3.程序截图:(1)程序界面先开始按钮“显示”为可按状态,“增加记录”等四个按钮为灰色,不能按,按下“显示”按钮后,“显示”按钮变为不可按状态,其他四个键变为可按状态,并且数据框中显示数据库中的原记录。

相关主题