UML学生成绩管理系统.docx

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

UML学生成绩管理系统.docx

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

UML学生成绩管理系统.docx

UML学生成绩管理系统

 

成绩管理系统

----基于VC++与SQLServer

 

学号:

201100358001

姓名:

李帅

学院:

烟台大学计算机学院

指导教师:

王培进老师

 

见下一页,本页空白,页码格式需要

第一章系统需求分析

1、系统开发的目的与意义

随着社会快速发展,学生个人信息及考试信息庞大而且复杂,传统人工采集与处理信息的手段既费时又费力,已经远远无法满足人们的要求。

由于计算机具有快速高效的数据处理能力,开发一个计算机成绩管理系统来管理学生成绩信息,大大减少了老师及相关管理人员的工作量,而且效率极高,错误明显减少,同时,又能让学生及时准确的掌握自己成绩信息。

可以说使用计算机软件来管理学生成绩是大势所趋。

2、系统边界分析

该系统供学校教师与学生使用,教师在该系统中的身份相当于管理员,可以管理维护数据;学生没有管理数据的权限,只能进行查询。

由于系统要求不高,本系统数据库与界面终端在同一台电脑上,教师与学生均要通过这一台电脑进行管理或者查询。

3、系统功能性需求分析

◆对于教师(管理员),具有以下几种功能:

1学生个人信息管理

查询、添加、修改、删除、打印学生个人信息

2学生成绩管理

查询、添加、修改、删除、打印学生考试成绩

◆对于学生,具有以下几种功能:

查询个人信息,查询、打印、报错个人成绩

4、系统非功能性需求分析

性能需求:

开发系统性能稳定,不应出现操作上的失误而引起的系统关闭等。

安全性需求:

不同权限的操作人员只能操作某些功能,不可越权操作

人机交互需求:

操作人性化,用户比较舒适的使用系统,不可难于理解和复杂;

系统观感:

要求界面颜色搭配合理,不能单调或者过于绚丽;

经济效益:

要求开发周期不能超过半年,合理管理开发过程,不得造成浪费.

第二章面对对象分析

1、静态模型

①用例模型

该系统共有两个用户,学生与教师,其用例模型如下图所示:

②类分析

本系统中的类大体可分为三大类,分别是实体类、界面交互类与数据库类。

在VC++ClassView中分了三个文件夹存放,如下图所示:

◆实体类:

包括学生信息类(CStudentInfo)与学生成绩类(CStudentScores)。

这两个类都是指某一个学生的信息,本来可以划分为一个类,比如说将学生成绩当做学生个人信息类的一个属性,但由于系统是需要对学生个人信息与成绩分别操作,例如删除了学生成绩,但是学生的个人信息还要在,因此将二者割裂开来,这也更加清晰的体现了该学生成绩系统的个人信息与成绩两大模块。

二者类图如下图所示:

◆界面交互类:

各个对话框类,包括欢迎界面类,登陆对话框类,教师管理对话框类以及其产生的查询、添加、修改等子对话框类,学生界面类等。

这些类是用户与系统之间的桥梁与纽带,将系统具体形象的呈现在用户面前,并且根据用户选择对系统中的各种类进行操作。

这些界面类的类图如下所示:

其中虚线表示依赖关系,A类向B类发送消息,从而影响B类发生变化。

图中的学生窗口类是由标签控件和列表控件组合而成,而不是聚合关系,应该是实心菱形,由于种种原因,这里化成了空心的菱形。

◆数据库类:

数据库类是对数据库进行操作的类,包括ADO数据库控件类和ADO数据库对象类,ADO控件类包括AdoDC控件类和DataGrid控件类,用来显示数据库中的数据;ADO数据库对象类,用来连接数据库,以及对数据库执行SQL语以及存储等操作,我们将其封装在了CDBConnet类中。

其类图如下所示:

所有类之间的关系:

仔细分析总体类图,DBConnect类是底层对数据库进行操作的类,而调用该类的只有两个实体类,对话框类要想改变数据库,必须调用实体类中的方法,这里的实体类中,学生个人信息类封装了对学生个人信息的查询、添加、修改、删除等操作,而学生成绩类中封装了对学生成绩的查询、添加、修改、删除等操作,这样的结构充分体现了面对对象设计的封装特性。

2、动态模型

①教师添加学生个人信息时序图

②教师修改学生个人信息协作图

 

③学生查询活动图

3、系统包图

第三章面对对象设计

1、人机交互界面设计

本系统的GUI采用VC++MFC编制,界面友好,便于操作。

主要由以下几个界面组成:

1欢迎界面

系统初始化时,要加载很多数据文件,耗时较长,为了避免用户焦急等待,设置欢迎界面。

2登陆界面

选择用户类型,输入用户名与密码,即可登陆,密码错误次数不能超过三次。

 

3教师管理主窗口

第一个表为学生信息表,下边的表为学生成绩表。

设计理念是直观简洁。

④查询学生个人信息(查询学生成绩与此对话框类似)

输入学号或者姓名均可以查询,查询结果高亮显示在教师管理主窗口的学生个人信息表中。

⑤添加学生个人信息(添加学生成绩与此对话框类似)

⑥修改学生个人信息(修改学生成绩与此对话框类似)

首先在教师管理主窗口中单击某一学生记录,然后单击修改,即可弹出该对话框。

弹出该对话框时,对话框上填充着原有信息。

⑦学生管理主窗口

2、控制驱动设计

由于本系统仅是小型管理系统,数据量不大,功能不复杂,系统结构没有采用C-S、B-S等结构,而是简单的在一台电脑上实现了所有的功能;程序驱动采用单一进程即可比较完美的实现成绩管理与查询功能,没有划分多线程。

3、数据库设计

本系统数据库共设计了4个表,分别存储了教师登陆用户信息、学生登录用户信息、学生个人信息和学生成绩。

①教师与学生登陆信息的表格式一样,如下所示

②学生个人信息表格式如下所示

③学生成绩表格式如下所示

第四章系统实现代码

本系统采用MicrosoftVisualC++6.0集成开发环境进行开发,数据库由SQLServer2000设计并且提供服务器。

1、实体类CStudentInfo

classCStudentInfo

{

private:

CStringStu_ID;

CStringStu_Name;

CStringStu_Sex;

CStringStu_Birthday;

CStringStu_Address;

public:

CStudentInfo();

virtual~CStudentInfo();

//获取对象属性

CStringGetStu_ID();

CStringGetStu_Name();

CStringGetStu_Sex();

CStringGetStu_Birthday();

CStringGetStu_Address();

//设置对象属性

voidSetStu_ID(CStringtemp);

voidSetStu_Name(CStringtemp);

voidSetStu_Sex(CStringtemp);

voidSetStu_Birthday(CStringtemp);

voidSetStu_Address(CStringtemp);

//若定义了某实例化对象,以下是对其进行数据库操作

voidDB_Insert();//将该对象实例存储至数据库

voidDB_Delete();//从数据库中删除该对象实例

intDB_Search();//从数据库中查询该对象实例

};

CStudentInfo:

:

DB_Insert()向数据库中插入学生个人信息记录

voidCStudentInfo:

:

DB_Insert()

{

CDBConnectadoDB;

adoDB.OnInitDBConnect();

CStringstrSQL;

strSQL.Format("INSERTINTOstudentinfo(学号,姓名,性别,出生日期,家庭住址)VALUES('%s','%s','%s','%s','%s')",

Stu_ID,Stu_Name,Stu_Sex,Stu_Birthday,Stu_Address);

adoDB.ExecuteSQL(strSQL);

adoDB.ExitDBConnect();

}

CStudentInfo:

:

DB_Delete()从数据库中删除学生个人信息记录

voidCStudentInfo:

:

DB_Delete()

{

CDBConnectadoDB;

adoDB.OnInitDBConnect();

CStringstrSQL;

strSQL.Format("DELETEFROMstudentinfoWHERE学号='%s'",Stu_ID);

adoDB.ExecuteSQL(strSQL);

adoDB.ExitDBConnect();

}

CStudentInfo:

:

DB_Search()在数据库中搜寻学生个人信息记录

intCStudentInfo:

:

DB_Search()

{

intPosition=0;

CDBConnectadoDB;

adoDB.OnInitDBConnect();

_RecordsetPtrppRst=adoDB.GetRecordset("SELECT*FROMstudentinfo");

ppRst->MoveFirst();

while(!

(ppRst->rsEOF)&&Stu_ID!

=(LPCTSTR)(_bstr_t)ppRst->GetCollect("学号")&&

Stu_Name!

=(LPCTSTR)(_bstr_t)ppRst->GetCollect("姓名"))

{

Position++;

ppRst->MoveNext();

}

if(ppRst->rsEOF)

return-1;

Stu_ID=(LPCTSTR)(_bstr_t)ppRst->GetCollect("学号");

Stu_Name=(LPCTSTR)(_bstr_t)ppRst->GetCollect("姓名");

Stu_Sex=(LPCTSTR)(_bstr_t)ppRst->GetCollect("性别");

Stu_Birthday=(LPCTSTR)(_bstr_t)ppRst->GetCollect("出生日期");

Stu_Address=(LPCTSTR)(_bstr_t)ppRst->GetCollect("家庭住址");

adoDB.ExitDBConnect();

CScoresApp*app=(CScoresApp*)AfxGetApp();

app->Position=Position;

returnPosition;

}

2、实体类CStudentScores

其整体构架与CStudentInfo类似,不再赘述。

classCStudentScores

{

public:

voidSetSco_ID(CStringtemp);

voidSetSco_Name(CStringtemp);

voidSetSco_AI(inttemp);

voidSetSco_DM(inttemp);

voidSetSco_Math(inttemp);

voidSetSco_English(inttemp);

voidSetSco_UML(inttemp);

voidSetSco_SS(inttemp);

CStringGetSco_ID();

CStringGetSco_Name();

intGetSco_AI();

intGetSco_DM();

intGetSco_Math();

intGetSco_English();

intGetSco_UML();

intGetSco_SS();

voidDB_Insert();

voidDB_Delete();

intDB_Search(CStringtemp="");

CStudentScores();

virtual~CStudentScores();

private:

CStringSco_Name;

CStringSco_ID;

intSco_AI;

intSco_DM;

intSco_Math;

intSco_English;

intSco_UML;

intSco_SS;

};

3、数据库类CDBConnect

用来连接数据库及对数据库进行底层操作。

voidCDBConnect:

:

OnInitDBConnect()//用m_pConnection对象连接数据库

{

:

:

CoInitialize(NULL);

m_pConnection.CreateInstance(__uuidof(Connection));//OR"ADODB.Connection"

CStringConnectionStr="Provider=SQLOLEDB.1;Password=123;"

"PersistSecurityInfo=True;UserID=ytu;"

"InitialCatalog=scores;DataSource=PC-20110930WANW\\SQLDB";

try

{

m_pConnection->Open(_bstr_t(ConnectionStr),"","",adConnectUnspecified);

}

catch(_com_errore)

{

AfxMessageBox(e.ErrorMessage());

}

}

_RecordsetPtrCDBConnect:

:

GetRecordset(CStringstrSQL)//根据传进来的SQL参数,访问数据库,返回记录集

{

try

{

if(m_pConnection==NULL)

OnInitDBConnect();

m_pRecordset.CreateInstance(__uuidof(Recordset));

m_pRecordset->Open((_variant_t)strSQL,_variant_t((IDispatch*)m_pConnection),

adOpenKeyset,adLockOptimistic,adCmdText);

}

catch(_com_errore)

{

AfxMessageBox(e.Description());

}

returnm_pRecordset;

}

BOOLCDBConnect:

:

ExecuteSQL(CStringstrSQL)

{

try

{

if(m_pConnection==NULL)

OnInitDBConnect();

m_pConnection->Execute(_bstr_t(strSQL),NULL,adCmdText);

returntrue;

}

catch(_com_errore)

{

AfxMessageBox(e.Description());

returnfalse;

}

}

voidCDBConnect:

:

ExitDBConnect()

{

if(m_pRecordset!

=NULL)

{

m_pRecordset->Close();

m_pRecordset.Release();

}

m_pConnection->Close();

m_pConnection.Release();

CoUninitialize();

}

4、欢迎界面类CHelloDlg

BOOLCHelloDlg:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

CenterWindow();//使窗口居中

DWORDdwStyle=0x00080000;

HINSTANCEhInst=LoadLibrary("User32.DLL");//导入动态链接库,为了淡入淡出效果

typedefBOOL(WINAPIMYFUNC(HWND,DWORD,DWORD));

MYFUNC*AnimateWindow;

AnimateWindow=(MYFUNC*):

:

GetProcAddress(hInst,"AnimateWindow");

AnimateWindow(this->m_hWnd,750,dwStyle);

FreeLibrary(hInst);

SetTimer(1,2000,NULL);//结合定时器使用

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

//EXCEPTION:

OCXPropertyPagesshouldreturnFALSE

}

定时器函数

voidCHelloDlg:

:

OnTimer(UINTnIDEvent)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

DWORDdwStyle=0x00080000;

HINSTANCEhInst=LoadLibrary("User32.DLL");

typedefBOOL(WINAPIMYFUNC(HWND,DWORD,DWORD));

MYFUNC*AnimateWindow;

AnimateWindow=(MYFUNC*):

:

GetProcAddress(hInst,"AnimateWindow");

AnimateWindow(this->GetSafeHwnd(),750,dwStyle|0x00010000);

FreeLibrary(hInst);

KillTimer

(1);

CDialog:

:

OnOK();

CDialog:

:

OnTimer(nIDEvent);

}

5、系统登陆界面类CscoresDlg

响应登录按钮单击事件。

voidCScoresDlg:

:

OnButtonLogin()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData();

CStringstrSQL;

m_IndexSelected=m_List.GetSelectionMark();

CDBConnectadoDB;

adoDB.OnInitDBConnect();

_RecordsetPtrpRst;

if(m_IndexSelected==-1)

MessageBox("请选择用户类型!

","注意",MB_ICONEXCLAMATION|MB_OK);

if(m_IndexSelected==0)

{

strSQL.Format("SELECT*FROMteacher_userWHERE用户名='%s'AND密码='%s'",m_username,m_password);

pRst=adoDB.GetRecordset(strSQL);

If(pRst->RecordCount>0)

{

CTeacherDlg*teacherDlg=newCTeacherDlg;

teacherDlg->Create(IDD_DIALOG_TEACHER,this);

teacherDlg->ShowWindow(SW_SHOW);

this->ShowWindow(SW_HIDE);

adoDB.ExitDBConnect();

}

else

{

if(count<3)

{

MessageBox("用户名或者密码错误,请重新输入!

","错误",MB_ICONHAND|MB_OK);

count++;

}

else

{

MessageBox("错误次数超过3次,请稍后再试...");

CDialog:

:

OnOK();

}

}

}

if(m_IndexSelected==1)

{

strSQL.Format("SELECT*FROMstudent_userWHERE用户名='%s'AND密码='%s'",m_username,m_password);

pRst=adoDB.GetRecordset(strSQL);

if(pRst->RecordCount>0)

{

CStudentDlg*studentDlg=newCStudentDlg;

studentDlg->m_ID=m_username;

studentDlg->Create(IDD_DIALOG_STUDENT,this);

studentDlg->ShowWindow(SW_SHOW);

this->ShowWindow(SW_HIDE);

adoDB.ExitDBConnect();

}

else

{

if(count<3)

{MessageBox("用户名或者密码错误,请重新输入!

","错误",MB_ICONHAND|MB_OK);

count++;

}

else

{

MessageBox("错误次数超过3次,请稍后再试...");

CDialog:

:

OnOK();

}

}

}

}

6、教师管理窗口类CTeacherDlg

响应添加按钮单击事件的函数,其他诸如查询、修改等按钮单击事件响应函数与此类似,不再赘述。

voidCTeacherDlg:

:

OnAddStuInfo()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CAddStuInfoDlgAddDlg;

AddDlg.DoModal();

m_AdoInfo.Refresh();

}

7、添加学生信息窗口类CAddStuInfoDlg

响应添加按钮单击事件的函数,其他诸如查询、修改窗口的按钮单击事件响应函数与此类似,不再赘述。

voidCAddStuInfoDlg:

:

OnButtonAdd()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData();

if(m_Name=="")

{

MessageBox("请输入学生姓名!

");

return;

}

if(m_ID=="")

{

MessageBox("请输入学生学号!

");

return;

}

CStudentInfos

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

当前位置:首页 > 医药卫生 > 基础医学

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

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