学生成绩管理系统报告.docx
《学生成绩管理系统报告.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统报告.docx(32页珍藏版)》请在冰豆网上搜索。
![学生成绩管理系统报告.docx](https://file1.bdocx.com/fileroot1/2023-1/7/e1a75cc7-ceed-44ed-b0fe-3373f2f99947/e1a75cc7-ceed-44ed-b0fe-3373f2f999471.gif)
学生成绩管理系统报告
数据库应用
课程设计说明书
班级:
软件工程1404
姓名:
徐螣
学号:
201426811322
设计题目:
学生成绩管理系统(数据库)
设计时间:
2017.6.25至2017.7.6
指导教师:
廖峰峰
学生成绩管理系统(数据库)
设计总说明
考虑到高校学生的成绩管理工作量大、繁杂,人工处理非常困难,出现了学生成绩管理系统。
它借助于计算机强大的处理能力,大大减轻了管理人员的工作量,并提高了处理的准确性。
学生成绩管理系统的开发运用,实现了学生成绩管理的自动化,不仅把广大教师从繁重的成绩管理工作中解脱出来、把学校从传统的成绩管理模式中解放出来,而且对学生成绩的判断和整理也更合理、更公正,同时也给教师提供了一个准确、清晰、轻松的成绩管理环境。
本系统根据我校的一些实际情况开发,用于对学校教师、学生、课程信息的管理,主要用于管理学生成绩。
登录系统时需要访问数据库中的用户信息,确定登录身份。
系统完成了日常的教育工作中对学生成绩档案的数字化管理,并且较为系统地对学生信息、成绩信息和课程信息进行管理。
查询、增添、修改、删除都变的非常简便,减少了管理的工作量。
基于学校学生众多,为了数据的安全性,系统将学生数据保存在数据库中,以VisualC++设计前台对系统进行设计。
因为成绩管理系统是一项很实用的系统,所面对的数据量很大,所以我们要求系统能够高效快速的处理这些数据,并且要保证数据的正确性、相容性和安全性。
C++作为前台是将数据库中的数据读取出来,有助于用户对这些数据进行相应的操作,使操作更方便,更符合用户的要求。
所以该系统应该要有一个良好的界面,使用户感觉很直观,使用快捷,这就是用C++所要实现的功能。
关键词
VisualC++6.0;SQLServer;MFC;学生成绩管理
前言
本课程设计是在学习了数据库系统和C语言等有关课程后,通过实际的操作来熟悉数据库和相关软件的应用,培养独立的完成对相关课题或者项目的分析能力、设计能力和调试能力。
成绩管理系统登录须有数据库中的账号信息,如无用户可及时注册。
系统可以对不同的项目进行查询、添加、修改、删除等操作,方便学校的成绩管理。
课程设计,着重培养的是学生的自学能力,以及独立分析互联网上和图书馆里的各种资料,用来丰富自己的知识并且提高对SQL、VC++等软件的实际操作能力。
通过这次的课程设计,使我们对已经学习过的数据库课程的进一步的掌握,对知识进行最大程度的消化融汇。
因此这次的课程设计对我们来说具有非常重要的作用:
为以后学习工作做必要的准备和实践,提高自身对数据库开发的能力。
第1章数据库总体设计与实施
1数据库设计
1.1概念分析:
概念结构设计阶段是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
设计成绩管理数据库包括系别、教研室、班级、教师、学生、课程、成绩七个关系。
E-R图2.1.1和图2.1.2所示。
图2.1.1实体及其属性图
图2.1.2完整的实体-联系图
1.2逻辑设计:
逻辑结构是独立于任何一种数据模型的信息结构。
逻辑结构的任务是把概念结构设计阶段设计好的基本E-R图转化为宜选用的DBMS所支持的数据模型相符合的逻辑结构,并对其进行优化。
设计学生成绩管理数据库,包括系别、教研室、班级、教师、学生、课程、成绩七个关系,考虑到数据库完整性,其关系模式中对每个实体定义的属性如下:
系别表
系别:
(系号,系名)
教研室表
教研室:
(教研室号,教研室名)
班级表
班级:
(班号,班名,系号)
教师表
教师:
(教师号,姓名,教研室号)
学生表
学生:
(学号,姓名,性别,班号)
课程表
课程:
(课程号,课程名,教师号,学时,学分)
成绩表
成绩:
(学号,课程号,成绩)
为了存放前台用户信息再添加一用户表
用户表
用户:
(用户名,密码)
1.3物理设计:
定义每个表的数据类型以及字段限制,使数据库达到一定的完整性。
每个表的物理设计如下:
表2.1.1系别表
字段名
数据类型
字段限制
系号
char
(2)
Primarykey
系名
char(20)
Notnull
表2.1.1教研室表
字段名
数据类型
字段限制
教研室号
char(10)
Primarykey
教研室名
char(20)
Notnull
系号
char(10)
Notnull
表2.1.3班级表
字段名
数据类型
字段限制
班号
char(10)
Primarykey
班名
char(14)
Notnull
系号
char(10)
Notnull
表2.1.4教师表
字段名
数据类型
字段限制
教师号
char(5)
Primarykey
教师姓名
char(6)
Notnull
教研室号
char(10)
Notnull
表2.1.5学生信息表
字段名
数据类型
字段权限
学号
char(14)
Primarykey
姓名
char(6)
Notnull
性别
char
(2)
Notnull
班号
char(10)
Notnull
表2.1.6课程表
字段名
数据类型
字段权限
课程号
char(5)
Primarykey
课程名
char(20)
Notnull
教师号
char(5)
Notnull
学时
Int
Notnull
学分
char(3)
Notnull
表2.1.7成绩表
字段名
数据类型
字段权限
学号
char(14)
Primarykey
课程号
char(5)
Primarykey
成绩
char(3)
Notnull
表2.1.8用户表
字段名
数据类型
字段权限
用户名
char(20)
Primarykey
密码
char(20)
Notnull
第2章数据库的实施
2.1创建数据库
在SQL2000中的企业管理器中,新建一个数据库,名为“student1”,在查询分析器中
新建数据表。
2.2创建表
同样在查询分析器中键入如下代码完成表的创建。
createtable学生(
学号char(14)notnullprimarykey,
姓名char(6)notnull,
性别char
(2)notnull,
班号char(10)notnull)
createtable教师(
教师号char(5)notnullprimarykey,
姓名char(6)notnull,
教研室号char(4)notnull)
createtable课程(
课程号char(5)notnullprimarykey,
课程名char(20)notnull,
教师号char(5)notnull,
学时intnotnull,
学分char(3)notnull)
createtable成绩(
学号char(14)notnull,
课程号char(5)notnull,
成绩char(3)notnull
primarykey(学号,课程号))
createtable用户(
用户名char(20)notnullprimarykey,
密码char(20)notnull)
第3章前台设计与实现
3导入数据库数据并链接
BOOLCMyDlg:
:
OnInitDialog()//
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
m_db.Open(_T("ODBC;DSN=student1"));
m_userrs.m_pDatabase=&m_db;
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
3.1登录模块
3.1.1登录
运行程序首先要通过登录,登录的用户名和密码存于数据库中用户表中。
输入用户名和密码还有用户的类型从而进入程序。
当用户名与密码不匹配时提示错误。
voidCMyDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
UpdateData(true);
if(!
m_userrs.IsOpen())
{
m_userrs.Open();
}
m_userrs.m_strFilter.Format("用户名='%s'and密码='%s'",m_username,m_pass);
m_userrs.Requery();
try{
if(m_username=="")
{
AfxMessageBox("请输入用户名!
");
return;
}
if(m_userrs.IsEOF())
{
AfxMessageBox("密码错误!
");
return;
}
else
{
CDialog:
:
OnOK();
CMain1Dlgmain1dlg;
main1dlg.DoModal();
}
}
catch(CException*e)
{
e->ReportError();
return;
}
}
3.1.2为了使系统美观,可通过设置背景图片来改变系统样式。
(1)实现方法如下:
引入一张要加入的图片,在要添加图片的对话框类向导中Messages中选择WM_PAINT对其编辑,在OnPaint()函数中加入如下代码:
CPaintDCdc(this);
CRectrect;
GetClientRect(&rect);
CDCdcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmapbmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP3);
BITMAPbitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap*pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
(2)为了将界面设计更加美观,更加人性化,适合用户,将按钮加入图片。
代码实现如下:
在OnInitDialog中加入:
HBITMAPhBitmap,hBitmap1;
hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
((CButton*)GetDlgItem(IDOK))->SetBitmap(hBitmap);
hBitmap1=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP2));
((CButton*)GetDlgItem(IDCANCEL))->SetBitmap(hBitmap1);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
界面运行如下:
登录界面的用户名通过数据库访问代码如下:
在BOOLCMyDlg:
:
OnInitDialog()中加入
CDialog:
:
OnInitDialog();
m_db.Open(_T("ODBC;DSN=student1"));
m_userrs.m_pDatabase=&m_db;
3.2系统的详细设计
3.2.1主界面设计
主界面添加了菜单栏,用于各种信息查询操作和软件帮助信息。
通过引入图片设置对话框背景图片。
主界面如图3.2.1所示。
3.2.2菜单栏和查询设计
菜单栏前两个菜单都为查询菜单,通过SQL查询语句显示查询结果。
初始化状态为显示全部结果,若记录太多可按主码值查询,若要返回初始状态,点击刷新按钮即可。
可以为每个窗口设置适当的图片背景。
1.查询菜单
2成绩查询
(1)按学号查询
(2)按班级查询
(3)按课程查询
3信息查询
(1)学生信息
(2)教师信息
(3)课程信息
3.2.3管理模块设计
(1)总的管理模块设计
(2)学生管理模块设计
(3)教师管理模块设计
(4)学生成绩管理模块
(5)课程信息管理模块
(6)全部显示、增加。
删除、修改的功能
第4章代码设计
4.1查询
4.1.1成绩查询(按学号)
voidCStudentNumSearchDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
UpdateData(TRUE);
//TODO:
Addyourcontrolnotificationhandlercodehere
CDatabasedatabase;
database.Open("student1",FALSE,FALSE,"ODBC;",FALSE);
{
CStringstr;
CRecordsetset(&database);
if(m_studentnum.IsEmpty())
{
MessageBox("请输入学号");
return;
}
m_liststu1.DeleteAllItems();
set.Open(CRecordset:
:
dynaset,_T(
"select学生.学号,学生.姓名,课程.课程名,成绩.成绩\
from学生,成绩,课程where学生.学号=成绩.学号\
and成绩.课程号=课程.课程号\
and学生.学号='"+m_studentnum+"'\
orderby成绩.成绩desc"));
inti=0;
while(!
set.IsEOF())
{
m_liststu1.InsertItem(i,"");
CStringstr1,str2,str3,str4;
set.GetFieldValue("学号",str1);
m_liststu1.SetItemText(i,0,str1);
set.GetFieldValue("姓名",str2);
m_liststu1.SetItemText(i,1,str2);
set.GetFieldValue("课程名",str3);
m_liststu1.SetItemText(i,2,str3);
set.GetFieldValue("成绩",str4);
m_liststu1.SetItemText(i,3,str4);
set.MoveNext();
i++;
}
set.Close();
}
UpdateData(TRUE);
database.Close();
}
BOOLCStudentNumSearchDlg:
:
OnInitDialog()
{
//TODO:
Addextrainitializationhere
CDialog:
:
OnInitDialog();
m_liststu1.InsertColumn(1,"学号",LVCFMT_LEFT,100,0);
m_liststu1.InsertColumn(2,"姓名",LVCFMT_LEFT,100,0);
m_liststu1.InsertColumn(3,"课程",LVCFMT_LEFT,100,0);
m_liststu1.InsertColumn(4,"成绩",LVCFMT_LEFT,100,0);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
4.1.2查询信息(学生信息)
voidCStudentInfoDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
UpdateData(TRUE);
//TODO:
Addyourcontrolnotificationhandlercodehere
CDatabasedatabase;
database.Open("student1",FALSE,FALSE,"ODBC;",FALSE);
{
CStringstr;
CRecordsetset(&database);
if(m_studentnum.IsEmpty())
{
MessageBox("请输入学号");
return;
}
m_liststu4.DeleteAllItems();
set.Open(CRecordset:
:
dynaset,_T(
"select学生.学号,学生.姓名,学生.性别,学生.班号\
from学生where学生.学号='"+m_studentnum+"'"));
inti=0;
while(!
set.IsEOF())
{
m_liststu4.InsertItem(i,"");
CStringstr1,str2,str3,str4;
set.GetFieldValue("学号",str1);
m_liststu4.SetItemText(i,0,str1);
set.GetFieldValue("姓名",str2);
m_liststu4.SetItemText(i,1,str2);
set.GetFieldValue("性别",str3);
m_liststu4.SetItemText(i,2,str3);
set.GetFieldValue("班号",str4);
m_liststu4.SetItemText(i,3,str4);
set.MoveNext();
i++;
}
set.Close();
}
UpdateData(TRUE);
database.Close();
}
BOOLCStudentInfoDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
m_liststu4.InsertColumn(0,"学号",LVCFMT_LEFT,100,0);
m_liststu4.InsertColumn(1,"姓名",LVCFMT_LEFT,100,0);
m_liststu4.InsertColumn(2,"性别",LVCFMT_LEFT,100,0);
m_liststu4.InsertColumn(3,"班号",LVCFMT_LEFT,100,0);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
4.2管理系统
4.2.1学生信息管理
BOOLCStudentManagementDlg:
:
OnInitDialog()//设置表格类型,样式
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
CStudentRSm_Set;
unsignedi=0;
CODBCFieldInfoInfo;
m_Set.Open();
m_ListCtrlx.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
for(i=0;i{
m_Set.GetODBCFieldInfo(i,Info);
m_ListCtrlx.InsertColumn(i,Info.m_strName);
m_ListCtrlx.SetColumnWidth(i,120);
}
m_Set.Close();
returnTRUE;//r