c++1学生信息管理系统docx.docx
《c++1学生信息管理系统docx.docx》由会员分享,可在线阅读,更多相关《c++1学生信息管理系统docx.docx(37页珍藏版)》请在冰豆网上搜索。
c++1学生信息管理系统docx
学生信息管理系统
1.课程设计的目的
随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已
逐步成熟。
管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要
高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。
VC++程序设计课程设计是计算机科学与技术专业的《VC++程序设计》课程的综合性
实践环节。
VC++程序设计是一门实用性很强的学科,是进行软件开发的主要工具,只有
进行实际操作,才能将理论知识和实际应用有机的结合起来,锻炼学生分析解决实际问
题的能力,提高学生实际运用的能力,为学生毕业设计,日后工作中的软件开发打下良
好的基础。
2.需求分析
用计算机技术实现的科学化管理,是在信息技术迅速发展的今天学校提高管理效率
的必需选择。
学生信息管理系统是典型的信息管理系统(MIS),其开发主要包括后台数
据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性
和完整性强、数据安全性好的库。
而对于后者则要求应用程序功能完备、易使用等特点。
学生信息管理系统用来将某一个院系按专业、班级来管理学生的基本信息、课程信
息和学生成绩。
下面就其系统功能作简单的说明。
该系统主要是方便查询学生的信息,
用该系统可以查到学生的姓名,年龄,学号,性别,学院,班级等。
可以统计学生在某
一学期的总学分或者单科成绩、总成绩。
系统主要功能包括:
信息操作功能、查询功能、统计功能、分析功能。
信息操作功能
(1)学生基本信息的添加、修改和删除。
学生基本信息包括:
学号(学号的前6
位为班级号)、姓名、性别、出生日期和所在专业。
(2)学生成绩信息的添加、修改和删除。
学生成绩信息包括:
学号、课程号、成绩和和学分。
2.2查询功能
可以通过学号来查询学生基本信息,通过学号可以查询学生的选课信息,通过学号
和学期查询学生的成绩,通过课程号查询该课程的信息。
2.3统计功能
统计学生某个学期或所有学期课程的总学分,统计学生某个学期的或所有学期的单
科成绩或者总成绩。
运行环境
(1)硬件环境
处理器:
InterCentrinoDuo。
内存:
521MB。
硬盘空间:
80G。
(2)软件环境
操作系统:
WindowsXP
Microsoftvisualc++Microsoftaccess数据库
3.总体设计系统的结构图
学生信息管理系统是对学生的基本信息和成绩信息进行管理,主要包括添加、修改
和删除学生的基本信息及课程的基本信息;录入、修改和删除学生的成绩信息,对基本
信息、成绩信息进行查询、排序及统计等操作,从而实现学生信息管理的自动化与计算
机化。
本课题将实现一个简化的学生信息管理系统。
(1)添加信息:
使用这个模块,可以添加学生的基本信息,包括学生的学号,姓名,民族,性别,籍贯,出生年月日,政治面貌,学院,专业,所在年级,寝室地址,毕业院校,身份证号,电子邮箱,联系电话,家庭住址,备注等。
(2)成绩导入:
包括学号,课程编号,课程名称,学分,成绩。
(3)信息查询:
包括学号,姓名,班级,学院。
(4)成绩查询:
包括课程名称,课程编号。
(5)个人信息:
当点击这个按钮时,可以显示当前某个人的信息。
(6)查看成绩:
点击这个按钮时,可以显示当前这个人的所有成绩。
设计数据库
用MicrosoftAccess创建一个数据库,含有3个主要数据表:
学生基本信息表
student、课程信息表couese和学生成绩表score。
这3个数据表的结构如表1~3所示。
这几个表中,学号studentno和课程号courseno内容都是唯一的,分别是student和course表中的主关键字。
Score表中的studentno和student表中的同名字段相对应,字段course和course表中的courseno字段相对应。
说明:
由于student和course表中都有专业字段,因此为便于用户操作,需要一个专业数据字典。
该数据字典也作为数
据库的一个数据表speical,其结构如表4所示。
表1学生基本信息表(
student)结构
序号
字段名称
数据类型
字段大小
小数位
字段含义
1
studentname
文本
20
姓名
2
studentno
文本
10
学号
3
xb
是/否
50
性别
4
birthday
日期/时间
出生年月
5
speical
文本
专业
表2
课程信息表(course)结构
序号
字段名称
数据类型
字段大小
小数位
字段含义
1
courseno
文本
7
——
课程号
2
special
文本
50
——
所属专业
3
coursename
文本
50
——
课程名
4
coursetype
文本
10
——
课程类型
5
openterm
数字
字节
——
开学学期
6
hours
数字
字节
——
课时数
7
credit
数字
单精度
1
学分
表3
学生课程成绩表(
score)结构
序号
字段名称
数据类型
字段大小
小数位
字段含义
1
studentno
文本
8
学号
2
course
文本
7
课程号
3
score
数字
单精度
1
成绩
4
credit
数字
单精度
1
学分
4.详细设计
该系统包含多个模块,期中重要的有6大模块,添加信息,成绩导入,信息查询,
成绩查询,个人信息,查看成绩。
该系统的主界面如图2所示。
图2系统的主界面
信息查询的设计
下面我们对信息查询做详细的设计。
信息查询这个模块的功能主要通过某个学生的
某一项信息,比如学号,班级,姓名,专业,年级,然后查询到这个学生的多个信息。
比如通过学生的学号,可以查询到这个学生所在学院,所在班级等。
当我们点击信息查
询这个按钮时,显示一个对话框,如图3所示。
图3信息查询的界面
当我们点击信息查询按钮时,会立刻弹出一个对话框,期中对话框中包括一个列表
框,列表框中包括学号,姓名,学院,专业,年级,列表框中还包括2个按钮,一个查找按钮,一个取消按钮。
使用CRecordSet类的成员变量m_strFilter、m_strSort和成员函数Open可以对表进行记录查询。
(1)打开Ex_ODBC应用程序的表的单资源,按如图4所示的布局添加控件,七宗添加的编辑框ID号设为IDC_EDIT_QUERY,查询按钮的ID号设为IDC_BUTTON_QUERY..
图4添加控件
(2)用MFCclasswizard为控件IDC_EDIT_QUERY添加关联变量m_strQuery.
(3)在CEx_ODBCView类中添加按钮控件IDC_BUTTON_QUERY的BN_CLICKED消息映射,并在映射函数中添加下列代码:
voidCMemberView:
:
RemoveAll()
{
c++实用教程[M].北京高等教育出版社,83-126
[2]孙越编著.VisualC++数据库开发自学教程[M].人民邮电出版社50-75
[3]王彬华,李建华编著.VisualC++实例教程[M]电子科技大学出版社
[4]李春葆,曾平编著.数据库原理与应用[M].北京清华大学出版社,41-74
附录:
#include""
#include""
#include""
#include""
#include""
#include""
#include""
#include""
#include""
#include""
#include""
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
}
//CMemberViewprinting
BOOLCMemberView:
:
OnPreparePrinting(CPrintInfo*pInfo)
{
//defaultpreparation
returnDoPreparePrinting(pInfo);
}
voidCMemberView:
:
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addextrainitializationbeforeprinting
}
voidCMemberView:
:
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addcleanupafterprinting
}
//CMemberViewdiagnostics#ifdef_DEBUG
voidCMemberView:
:
AssertValid()const
{
CListView:
:
AssertValid();
}
voidCMemberView:
:
Dump(CDumpContext&dc)const
{
CListView:
:
Dump(dc);
}
CMemberDoc*CMemberView:
:
GetDocument()//non-debugversionisinline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMemberDoc)));return(CMemberDoc*)m_pDocument;
}
#endif//_DEBUG
//CMemberViewmessagehandlers
voidCMemberView:
:
RemoveAll()
{
//增加指针变量指向ListView的CListCtrl
CListCtrl*ctl;
ctl=&GetListCtrl();
//删除CListCtrl中的所有记录
ctl->DeleteAllItems();
}
//strSearch查询条件strMember关键字
voidCMemberView:
:
ListMember(CStringstrSearch,CStringstrMember)
{
//前此输出的用户记录
RemoveAll();
//建立一个指针,用以操作ListCtrl输出用户记录
CListCtrl*ctl;
ctl=&GetListCtrl();
//创建CMemberReSet的实例
CMemberReSetm_MemberReSet;
//记录用户序号
inti=0;
//定义一个变量来保存"%"以便设置SQL语句
charchrTemp='%';
CStringstrTemp;
try
{
if())
();
//设置查询条件"MemName=strMemberName"if(strMember=="")
{
AfxMessageBox("请输入关键字");
return;
}
if(strSearch=="学号")
{
CStringstr;
("select*frommemberwhereMemID='%s'orderbyMemIDASC",strMember);
(CRecordset:
:
snapshot,str,CRecordset:
:
none);
}
elseif(strSearch=="姓名")
{
"MemNameLIKE'%c%s%c'orderbyMemIDASC",chrTemp,LPCTSTR(),chrTemp);
(CRecordset:
:
snapshot,NULL,CRecordset:
:
none);
}
elseif(strSearch=="学院")
{
"MemIns='%s'orderbyMemIDASC",LPCTSTR());
(CRecordset:
:
snapshot,NULL,CRecordset:
:
none);
}
elseif(strSearch=="专业")
{
"MemSpeLIKE'%c%s%c'orderbyMemIDASC",chrTemp,LPCTSTR(),chrTemp);
(CRecordset:
:
snapshot,NULL,CRecordset:
:
none);
}
elseif(strSearch=="年级")
{
"MemYearLIKE'%c%s%c'orderbyMemIDASC",chrTemp,LPCTSTR(),chrTemp);
(CRecordset:
:
snapshot,NULL,CRecordset:
:
none);
}
elseif(strSearch=="
年级
tree")
{
"MemYear=%sorderbyMemIDASC",LPCTSTR());
(CRecordset:
:
snapshot,NULL,CRecordset:
:
none);
}
else
{
AfxMessageBox("条件选择错误");
return;
}
//输出匹配上查询到的用户记录,直到记录为空
while(!
())
{
ctl->InsertItem(i,;
ctl->SetItemText(i,1,;
ctl->SetItemText(i,2,;
ctl->SetItemText(i,3,;
ctl->SetItemText(i,4,;
ctl->SetItemText(i,5,;
ctl->SetItemText(i,6,;
ctl->SetItemText(i,7,;
();
}
if())
();
}
catch(CDBException*e)
{
e->Delete();
return;}
}
voidCMemberView:
:
EditCurUser()
{
//建立一个指针,用以操作ListCtrl输出用户记录
CListCtrl*ctl;
ctl=&GetListCtrl();
//寻找当前选中的记录的位置
POSITIONpos=ctl->GetFirstSelectedItemPosition();
if(pos==NULL)
{
//如果没有选择记录,则提示并退出
AfxMessageBox("请先选择一条信息!
");
return;
}
//获取当前记录的位置游标
intm_CurUser=ctl->GetNextSelectedItem(pos);
//创建一个MemberEditDlg的实例
CMemberEditDlgm_MemberEditDlg;
CMemberReSetm_MemberReSet;
//创建一个临时字符串来保存当前用户信息
charchrTemp[201]={'\0'};
//查找学号
ctl->GetItemText(m_CurUser,0,chrTemp,sizeof(char[20]));
if())
();
"MemIDLIKE'%s'",chrTemp);
(CRecordset:
:
snapshot,NULL,CRecordset:
:
none);
//输出匹配上条件用户记录,直到记录为空
if()&&!
())
{
//开始显示记录的内容
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
}
if()!
=IDOK)
{
//如果用户选择取消按钮,则退出
return;
}
UpdateData(FALSE);
if(MessageBox("确定修改记录?
","修改确认",MB_YESNO|MB_ICONQUESTION)==IDYES)
{
try
{
if())
();
//设置查询条件"MemID=chrTemp""MemID='%s'",chrTemp);
(CRecordset:
:
snapshot,NULL,CRecordset:
:
none);
//如果用户记录存在,则进行修改操作
if()&&!
())
{
//设置编辑当前记录
();
//开始编辑该条记录的内容
=;
=;
=;
=;
if())
{
();
}
//更新完毕,关闭数据库
();}
else
{
//关闭数据库
if())
();
//提示用户
AfxMessageBox("该记录不存在,无法修改!
");
return;
}
}
catch(CDBException*e)
{
e->ReportError();
return;
}
//将用户信息及时更新到ListCtrl中
ctl->SetItemText(m_CurUser,0,;
ctl->SetItemText(m_CurUser,1,;
ctl->SetItemText(m_CurUser,2,;
ctl->SetItemText(m_CurUser,3,;
ctl->SetItemText(m_CurUser,4,;
ctl->SetItemText(m_CurUser,5,;
ctl->SetItemText(m_CurUser,6,;
ctl->SetItemText(m_CurUser,7,;
}
}
voidCMemberView:
:
OnDblclk(NMHDR*pNMHDR,LRESULT*pResult)
{
//TODO:
Addyourcontrolnotificationhandlercodehere
*pResult=0;
EditCurUser();
}
voidCMemberView:
:
LookMember()
{
//创建一个MemberDialog的实例
CMemberDialogm_MemberDialog;
CMemberReSetm_MemberReSet;
CStringchrTemp=FindPosition();
if(chrTemp=="")
return;
if())
();
"MemIDLIKE'%s'",chrTemp);
(CRecordset:
:
snapshot,NULL,CRecordset:
:
none);
//输出匹配上条件用户记录,直到记录为空
if()&&!
()){
//开始显示记录的内容
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
=;
}
if()==IDCANCEL)
{
//如果用户选择取消按钮,则退出
return;
}
UpdateData(FALSE);
}
voidCMemberView:
:
DelCurUser()
{
//建立一个指针,用以操作ListCtrl输出用户记录
CListCtrl*ctl;
ctl=&GetListCtrl();
//寻找当前选中的记录的位置
POSITIONpos=ctl->GetFirstSelectedItemPosition();
if(pos==NULL)
{
//如果没有选择记录,则提示并退出
AfxMessageBox("请先选中一条记录!
");
return;}
//获取当前记录的位置游标
intm_CurUser=ctl->GetNextSelectedItem(pos);
//创建一个临时字符串来保存当前用户信息
charchrTemp[21]={'\0'};
//取得用户ID
ctl->GetIt