MFC网络程序设计.docx
《MFC网络程序设计.docx》由会员分享,可在线阅读,更多相关《MFC网络程序设计.docx(11页珍藏版)》请在冰豆网上搜索。
MFC网络程序设计
MFC网络程序设计
(课程设计成果论文)
学生信息管理系统
学院计算机工程学院
专业计算机应用技术
年级班别2011级计算机应用
(一)班
学号2011304030103
学生姓名路旭达
指导教师游明坤
分数
2013年12月17日
1.需求分析
学生信息管理系统按功能分为三个模块:
管理员登录模块:
要通过管理员身份验证后才能对成员的信息进行修改。
维护模块:
实现增加成员,修改成员,删除成员三个基本功能。
查询模块:
有按学号查询和按姓名查询功能。
学生信息管理系统的成员信息都存放于数据库中,所以必须在程序中实现对数据库的操作。
本程序功能简单,其界面的设计也要力求简单明了,各种功能使用起来也要非常方便。
2.数据库设计
数据库采用Accesss2003,API采用ODBC的连接方式。
ODBC(OpenDatabaseConnectivity),开放数据库互连,是微软公司开放服务结构(WOSA,WindowsOpenServicesArchitecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。
这些API利用SQL来完成其大部分任务。
ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
数据库设计如下表:
数据库名称:
mystudsystem,文件:
mystudsystem.mdb
内容如下:
表
窗口
项
数据类型
tb_class_subject
班级信息设置
classname
Cstring
code
Cstring
tb_classinfo
班级信息管理
classname
Cstring
teacher
Cstring
tb_classsubject
班级科目设置
classname
Cstring
code
Cstring
tb_examinfo_sub
考试类别设置
code
Cstring
examdate
CTime
grade
int
kind
Cstring
studentid
Cstring
tb_examkinds
考试类别设置
kind
Cstring
tb_studentinfo
学生信息报表
addr
Cstring
age
long
class
Cstring
phone
Cstring
sex
Cstring
studentid
Cstring
studentname
Cstring
tb_subject
班级科目设置
code
Cstring
subjuect
Cstring
tb_user
用户登陆
password
Cstring
username
Cstring
3.运行界面设计设计
3.1登陆界面对话框设计
3.2主窗口对话框设计
3.3学生成绩查询对话框设计
3.4学生成绩录入对话框设计
3.5班级信息管理对话框设计
3.6科目信息对话框设计
3.7考试类别对话框设计
4.关键代码
4.1连接数据库
CStringCClassSsubjectSet:
:
GetDefaultConnect()
{
return_T("ODBC;DSN=mystudsystem");
}
CStringCClassSsubjectSet:
:
GetDefaultSQL()
{
return_T("[dbo].[tb_class_subject]");
}
voidCClassSsubjectSet:
:
DoFieldExchange(CFieldExchange*pFX)
{
//{{AFX_FIELD_MAP(CClassSsubjectSet)
pFX->SetFieldType(CFieldExchange:
:
outputColumn);
RFX_Text(pFX,_T("[code]"),m_code);
RFX_Text(pFX,_T("[classname]"),m_classname);
//}}AFX_FIELD_MAP
}
4.2按钮操作
voidCExamInfoSubmarkDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
UpdateData(TRUE);//读入输入的资料
if(m_studentid.IsEmpty()||m_examsubject.IsEmpty()||m_examkind.IsEmpty())
{
AfxMessageBox("请输入相应的数据!
");
return;
}
CStringsqlStr_findid;
sqlStr_findid="select*fromtb_studentinfowheretb_studentinfo.studentid='"+m_studentid+"'";
myfindset_id=newCCStudentInfoSet(&((CCMyStudentSystemApp*)AfxGetApp())->m_DB);
if(!
myfindset_id->Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr_findid))
{
AfxMessageBox("tb_studentinfo表打开失败!
");
}
if(myfindset_id->GetRecordCount()==0)
{
AfxMessageBox("没有此学生,请确认学号后再输入!
");
if(myfindset_id->IsOpen())
{
myfindset_id->Close();
deletemyfindset_id;
}
return;
}
if(myfindset_id->IsOpen())
{
myfindset_id->Close();
deletemyfindset_id;
}
CStringsql;
CStringyear,month,day;
year=m_examdate.Format("%Y");
month=m_examdate.Format("%m");
day=m_examdate.Format("%d");
sql.Format("select*fromtb_examinfo_subwheretb_examinfo_sub.studentid='%s'andcode='%s'andkind='%s'andyear(examdate)='%s'andmonth(examdate)='%s'andday(examdate)='%s'",m_studentid,m_examsubject,m_examkind,year,month,day);
myexamsubmarkset_findsame=newCExaminfoSubmarkSet(&((CCMyStudentSystemApp*)AfxGetApp())->m_DB);
if(!
myexamsubmarkset_findsame->Open(AFX_DB_USE_DEFAULT_TYPE,sql))
{
AfxMessageBox("tb_examinfo_sub表打开失败!
");
}
if(myexamsubmarkset_findsame->GetRecordCount()!
=0)
{
AfxMessageBox("已经有此记录,不能重复输入!
");
if(myexamsubmarkset_findsame->IsOpen())
{
myexamsubmarkset_findsame->Close();
}
return;
}
if(myexamsubmarkset_findsame->IsOpen())
{
myexamsubmarkset_findsame->Close();
deletemyexamsubmarkset_findsame;
}
myexamsubmarkset->AddNew();//调用添加记录的函数处理
myexamsubmarkset->m_studentid=m_studentid;//对应变量更新
myexamsubmarkset->m_kind=m_examkind;
myexamsubmarkset->m_grade=m_submark;
myexamsubmarkset->m_examdate=m_examdate;
myexamsubmarkset->m_code=m_examsubject;
try
{
myexamsubmarkset->Update();
myexamsubmarkset->Requery();
AfxMessageBox("成功保存数据!
");
}
catch(CDBException*e)
{
AfxMessageBox(e->m_strError,MB_ICONEXCLAMATION);
e->Delete();
}
DisplayRecord();//更新显示
}
4.3初始化
BOOLCExamInfoSubmarkDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
CStringsqlStr;
sqlStr="select*fromtb_examinfo_sub";
myexamsubmarkset=newCExaminfoSubmarkSet(&((CCMyStudentSystemApp*)AfxGetApp())->m_DB);
if(!
myexamsubmarkset->Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr))//打开数据表
{
AfxMessageBox("tb_examinfo_sub表打开失败!
");
}
m_examdate=CTime:
:
GetCurrentTime();
UpdateData(FALSE);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
BOOLCExamInfoSubmarkDlg:
:
DisplayRecord()
{
if(myexamsubmarkset->IsEOF()&&myexamsubmarkset->IsBOF())
{
m_studentid="";
m_submark=0;
m_examsubject="";
m_examkind="";
}
else
{
if(myexamsubmarkset->IsBOF())//移动到了开头,就向后移动
{
myexamsubmarkset->MoveNext();
}
else//否则前移
{
if(myexamsubmarkset->IsEOF())
{
myexamsubmarkset->MovePrev();
}
}
}
m_examdate=CTime:
:
GetCurrentTime();
m_studentid="";
m_submark=0;
m_examsubject="";
m_examkind="";
UpdateData(FALSE);//显示更新
returnTRUE;
}
voidCExamInfoSubmarkDlg:
:
OnCancel()
{
//TODO:
Addextracleanuphere
//if(myexamsubmarkset->IsOpen())
//{
//myexamsubmarkset->Close();
//deletemyexamsubmarkset;
//}
CDialog:
:
OnCancel();
}