系统分析.docx
- 文档编号:20062479
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:23
- 大小:324.65KB
系统分析.docx
《系统分析.docx》由会员分享,可在线阅读,更多相关《系统分析.docx(23页珍藏版)》请在冰豆网上搜索。
系统分析
学生成绩管理
一、开发环境简介
1.1VisualC++6.0特点
VisualC++6.0是功能最为强大的可视化开发工具之一,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。
因此VisualC++6.0又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。
VisualC++具有多种优点:
它提供了面向对象的应用程序框架MFC(MicrosoftFoundationClass),简化了程序员的编程工作,提高了模块的可重用性;提供了基于CASE技术的可视化软件的自动生成和维护工具AppWizard、ClassWizard、VisualStudio、WizardBar等,实现了直观、可视的程序设计风格,方便地编辑和管理各种类,维护程序的源代码;封装了Windows的API函数、USER、KERNEL、GDI函数,简化了编程时创建、维护窗口的许多复杂的工作。
1.2MFC的简介
MFC的英文全称是MicrosoftFoundationClassLibrary,MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
MicrosoftVisualC++提供了相应的工具来完成这个工作:
AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
1.3Access数据库的介绍
Access是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。
Access的优点在于它能使用数据表示图或自定义窗体收集信息。
数据表示图提供了一种类似于Excel的电子表格,可以使数据库一目了然。
另外,Access允许创建自定义报表用于打印或输出数据库中的信息。
二、需求分析
2.1学生信息管理系统的介绍
本系统是基于VC++课程开发的管理系统。
用户使用本系统可以方便的管理学生基本信息。
本系统共具有6大功能:
即显示记录、添加记录、删除记录、更新记录、查询及排序。
2.2学生信息管理系统功能性需求
基础数据管理模块主要实现对学生信息的显示、添加、、删除、更新、查询、排序操作。
三、总体设计
3.1系统总体结构
图3-1系统结构图
3.2数据库分析与设计
本系统利用Access作为后台的数据库,建立数据库student.mdb。
首先对系统分析得到的数据进行分析,说明数据库基本结构的设计。
数据库学生表中的信息设计如表所示:
字段名称
数据类型
说明
学号
文本
学生唯一标识ID
姓名
文本
学生名称
性别
文本
性别
年龄
文本
年龄
系别
文本
系别
数据库
文本
课程1
计算机原理
文本
课程2
大学英语
文本
课程3
总成绩
文本
总分
四、具体步骤
4.1创建数据库:
打开access,并创建一个新表“student”,输入相关内容,选择类型。
并创建主键后。
完成后保存。
4.2添加ODBC数据源
打开“ODBC数据源管理器”。
添加
选择
4.3创建MFC应用程序框架
使用MFCAppWizard[exe]向导生成一个单文档应用程序TestADO,将视图类的基类选择为CFromView。
4.4建立ADO环境
1.链入ADO库文件
在文件“stdafx.h”中加入如下语句:
#import"C:
\ProgramFiles\CommonFiles\System\OleDB\oledb32.dll"no_namespace
#import"C:
\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")
2.初始化COM环境
BOOLCTestADOApp:
:
InitInstance()
{
…
:
:
CoInitialize(NULL);
returnTRUE;
}
4.5界面设计
1.在项目中插入ActiveX控件DataGridControl,用来显示数据库内容。
控件位置为Gallery\RegisteredActiveXControls\MicrosoftDataGridControl,Version6.0(OLEDB)。
2.打开IDD_TESTADO_FORM主对话框,添加控件。
它们的属性如表4.1所示。
表4.1主对话框中控件属性
控件类型
ID
Caption
DataGridControl
IDC_DATAGRID
学生表
按钮控件
IDC_CONNECT
连接
按钮控件
IDC_DISCONNECT
断开
按钮控件
IDC_QUIT
退出
列表框
IDC_COMBO1
列表框
IDC_COMBO2
列表框
IDC_COMBO3
列表框
IDC_COMBO4
静态文本
IDC_STATIC
&
编辑框
IDC_EDIT2
按钮控件
IDC_QUERY
查询
3.插入新对话框资源并设置连接类及成员变量。
插入如图4.1~图4.3所示的增加记录、修改记录以及查找对话框,并分别为它们设置连接类CStuDlg、CStuModiDlg和CStuFindDlg。
对话框中控件属性及关联的成员变量如表4.2~表4.4所示。
图4-1增加记录对话框
图4-2修改记录对话框
图4-3查找对话框
表4.2增加记录对话框中控件属性及成员变量
控件类型
ID
Caption
成员变量
静态文本
IDC_STATIC
学号:
静态文本
IDC_STATIC
姓名:
静态文本
IDC_STATIC
性别:
静态文本
IDC_STATIC
年龄
静态文本
IDC_STATIC
系别:
静态文本
IDC_STATIC
数据库:
静态文本
IDC_STATIC
计算机原理:
静态文本
IDC_STATIC
大学英语:
静态文本
IDC_STATIC
总成绩:
编辑框
IDC_NUMBER1
CStringm_number1
编辑框
IDC_NAME1
CStringm_name1
编辑框
IDC_SEX1
CStringm_sex1
编辑框
IDC_AGE1
CStringm_age1
编辑框
IDC_DEPARTMENT1
CStringm_department1
编辑框
IDC_SCORE1
CStringm_score1
编辑框
IDC_SCORE2
CStringm_score2
编辑框
IDC_SCORE3
CStringm_score3
编辑框
IDC_SCORE
CStringm_score
表4.3 修改记录对话框中控件属性及成员变量
控件类型
ID
Caption
成员变量
静态文本
IDC_STATIC
原值:
静态文本
IDC_STATIC
新值:
编辑框
IDC_MODIFY_OLDDEPART
CStringm_olddepart
编辑框
IDC_MODIFY_NEWDEPART
CStringm_newdepart
表4.4 查找对话框中控件属性及成员变量
控件类型
ID
Caption
成员变量
静态文本
IDC_STATIC
系别:
编辑框
IDC_FIND
CStringm_find
4.添加菜单。
在菜单栏中添加“操作”主菜单,并为其添加如表4.5所示的菜单项。
表4.5“操作”菜单下的菜单属性
ID
Caption
ID
Caption
ID_RECORD_DISP
显示记录
ID_RECORD_MODI
更新记录
ID_RECORD_ADD
添加记录
ID_RECORD_SORT
排序
ID_RECORD_DEL
删除记录
ID_RECORD_FIND
查找
4.6编写代码
1.添加文件包含语句。
首先在CTestADOView类的头文件中加入语句#include“datagrid.h”,然后在其实现文件中加入语句#include“StuDlg.h”、#include“StuFindDlg.h”和#include“StuModiDlg.h”。
2.添加成员变量并初始化。
为类CTestADOView添加如表4.6所示的public型成员变量。
表4.6 CTestADOView类成员变量
成员变量
功能
_ConnectionPtrm_Connection
连接数据源
_RecordsetPtrm_Recordset
打开记录集
CDataGridm_DataGrid
与控件DataGrid关联
CStringm_strSQL
对数据库操作的SQL语句
CStringm_stuid
存储在对话框中输入的学号
CStringm_name
存储在对话框中输入的姓名
CStringm_sex
存储在对话框中输入的性别
CStringm_age
存储在对话框中输入的年龄
CStringm_sdepartment
存储在对话框中输入的系别
CStringm_score1
存储在对话框中输入的成绩1
CStringm_score2
存储在对话框中输入的成绩2
CStringm_score3
存储在对话框中输入的成绩3
CStringm_score
存储在对话框中输入的总成绩
①对部分成员变量初始化
CTestADOView:
:
CTestADOView()
:
CFormView(CTestADOView:
:
IDD)
{
//{{AFX_DATA_INIT(CTestADOView)
m_com1=_T("");
m_com2=_T("");
m_com3=_T("");
m_com4=_T("");
m_edit1=_T("");
m_edit2=_T("");
//}}AFX_DATA_INIT
//TODO:
addconstructioncodehere
m_strSQL=_T("");
m_stuid=_T("");
m_name=_T("");
m_sex=_T("");
m_age=_T("");
m_department=_T("");
m_score1=_T("");
m_score2=_T("");
m_score3=_T("");
m_score=_T("");
}
②将控件DataGrid与它对应的成员变量m_DataGrid关联。
voidCTestADOView:
:
DoDataExchange(CDataExchange*pDX)
{
CFormView:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestADOView)
DDX_CBString(pDX,IDC_COMBO1,m_com1);
DDX_CBString(pDX,IDC_COMBO2,m_com2);
DDX_CBString(pDX,IDC_COMBO3,m_com3);
DDX_CBString(pDX,IDC_COMBO4,m_com4);
DDX_Text(pDX,IDC_EDIT1,m_edit1);
DDX_Text(pDX,IDC_EDIT2,m_edit2);
//}}AFX_DATA_MAP
DDX_Control(pDX,IDC_DATAGRID,m_DataGrid);
}
3.添加成员函数。
为类CTestADOViewi添加成员函数OnExecute(),用来完成数据库操作中的一些公共功能。
voidCTestADOView:
:
OnExecute()
{
try
{
m_Recordset.CreateInstance(__uuidof(Recordset));//创建实例
UpdateData(true);
m_Connection->CursorLocation=adUseClient;//设定光标服务,根据字符串m_strSQL开启数据连接,得到结果集
m_Recordset->Open(m_strSQL.GetBuffer(0),
m_Connection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,adCmdText);
}
catch(_com_error&e)
{
MessageBox(e.Description());
}
catch(...){}
//将结果集中的内容在DataGrid中显示出来
m_DataGrid.SetRefDataSource((LPUNKNOWN)m_Recordset);
m_DataGrid.Refresh();
UpdateData(false);
}
4.添加消息处理函数。
voidCTestADOView:
:
OnConnect()//连接按钮命令消息处理函数
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
try
{
m_Connection.CreateInstance(__uuidof(Connection));//创建实例
m_Recordset.CreateInstance(__uuidof(Recordset));
m_Connection->Open("DSN=Student","","",-1);//连接数据源Student
MessageBox("已连接到数据库StudentDB!
");
}
catch(_com_error&e)
{
MessageBox(e.Description());
}
catch(...){}
UpdateData(false);
}
voidCTestADOView:
:
OnDisconnect()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
try
{
m_Connection->Close();
}
catch(_com_error&e)
{
MessageBox(e.Description());
}
m_DataGrid.SetRefDataSource(NULL);//将DataGrid控件置空
m_DataGrid.ClearFields();//将DataGrid控件设置成默认状态
m_DataGrid.Refresh();//刷新DataGrid控件
m_strSQL="";
UpdateData(false);
}
voidCTestADOView:
:
OnQuit()//退出按钮命令消息处理函数
{
//TODO:
Addyourcontrolnotificationhandlercodehere
try
{
if(m_Recordset!
=NULL)
m_Recordset->Close();//关闭记录集
if(m_Connection!
=NULL)
m_Connection->Close();//关闭连接
}
catch(...){}
PostMessage(WM_QUIT);//退出
}
voidCTestADOView:
:
OnRecordDisp()//“显示记录”菜单命令消息处理函数
{
//TODO:
Addyourcommandhandlercodehere
m_strSQL="select*fromstudent";
try
{
m_Recordset.CreateInstance(__uuidof(Recordset));
UpdateData(true);
m_Connection->CursorLocation=adUseClient;
m_Recordset->Open(m_strSQL.GetBuffer(0),
m_Connection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,adCmdText);
}
catch(_com_error&e)
{
MessageBox(e.Description());
}
catch(...){}
m_DataGrid.SetRefDataSource((LPUNKNOWN)m_Recordset);
m_DataGrid.Refresh();
UpdateData(false);
}
voidCTestADOView:
:
OnRecordAdd()//“添加记录”菜单命令消息处理函数
{
//TODO:
Addyourcommandhandlercodehere
CStuDlgdlg;
/*CStringstr;
CStringstr1;
CStringstr2;
CStringstr3;
CStringstr4;*/
if(dlg.DoModal()!
=IDOK)return;
m_stuid=dlg.m_number1;
m_name=dlg.m_name1;
m_sex=dlg.m_sex1;
m_age=dlg.m_age1;
m_department=dlg.m_department1;
m_score1=dlg.m_score1;
m_score2=dlg.m_score2;
m_score3=dlg.m_score3;
m_score=dlg.m_score;
/*str.Format("%d",m_age);
str1.Format("%d",m_score1);
str2.Format("%d",m_score2);
str3.Format("%d",m_score3);
str4.Format("%d",m_score);*/
m_strSQL="insertintostudentvalues('"+m_stuid+"','"+m_name+"','"+m_sex+"','"+m_age+"','"+m_department+"','"+m_score1+"','"+m_score2+"','"+m_score3+"','"+m_score+"')";
//m_strSQL="insertintostudentvalues('"+m_stuid+"','"+m_name+"','"+m_sex+"','"+str+"','"+m_department+"','"+str1+"','"+str2+"','"+str3+"','"+str4+"')";
OnExecute();
OnRecordDisp();
}
voidCTestADOView:
:
OnRecordDel()//“删除记录”菜单命令消息处理函数
{
//TODO:
Addyourcommandhandlercodehere
try
{
if(MessageBox(NULL,"确认要删除当前记录吗?
",MB_YESNO)==IDYES)
{
m_Recordset->Delete(adAffectCurrent);
m_Recordset->Update();
m_Recordset->MoveNext();
if(m_Recordset->adoEOF)
m_Recordset->MoveLast();
}
}
catch(_com_error&e)
{
MessageBox(e.Description());
}
catch(...){}
}
voidCTestADOView:
:
OnRecordModi()//“更新记录”菜单命令消息处理函数
{
//TODO:
Addyourcommandhandlercodehere
CStuModiDlgdlg;
CStringstrold,strnew;
if(dlg.DoModal()!
=IDOK)return;
strold=dlg.m_olddepart;
strnew=dlg.m_newdepart;
UpdateData(true);
m_strSQL="updatestudentset系别='"+strnew+"'where系别='"+strold+"'";
OnExecute();
OnRecordDisp();
}
voidCTestADOView:
:
OnRecordSort()//“排序”菜单命令消息处理函数
{
//TODO:
Addyourcommandhandlercodehere
UpdateData(true);
m_strSQL="select*fromstudentorderby学号";
OnExecute();
}
voidCTestADOView:
:
OnRecordFind()//“查找”菜单命令消息处理函数
{
//TODO:
Addyourcommandhandlercodehere
CStuFindDlgdlg;
if(dlg.DoModal()!
=IDOK)return;
m_department=dlg.m_find;
UpdateData(true);
m_strSQL="select*fromstudentwhere系别='"+m_department+"'";
OnExecute();
}
voidCTestADOView:
:
OnQuery()//多功能查询
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
m_strSQL="select*from
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统分析