软件项目实训
电气信息学院
实训报告
课程名称:软件项目实训
实训题目:学生信息管理系统
年级/专业/班:13自动化03
学生姓名:杨锦
学 号:1304201119
实训成绩:
指导教师签名:年月日
软件项目实训
1引言
1.1系统概述
我们组设计的班级管理系统是灵感来源于我们学校的教务处管理成绩查询系统,武汉工程大学教务处成绩查询系统有很多系统化、自动化的功能,我们根据自己的能力利用VC++6.0订做了一个班级成绩查询系统。其功能包括学生成绩录入、学生成绩查询、学生成绩修改、学生成绩删除。在班级成绩管理时,人工记录容易出错且耗时,在这种状况下需要一个班级成绩系统管理来记录各项信息。
1.2需求分析
随着科技信息化的发展,我国的教育产业对软硬件要求变得越来越高,特别是计算机网络技术,在许多方面需要软件去提高教学质量,如多媒体教学、网络教学、教务处选课、教务处信息查询等。所以根据我们教学安排我们组订做了一个班级管理系统。
这次试验是以VC++6.0为工作环境,这是一个关于学生信息管理系统的试验,其他包括了登入密码设定,学生成绩信息登入,学生成绩信息查询,学生信息删除。我们应该在这次的实验过程中结合自己所学的知识以及我们在学习的过程中遇到的难题可以从老师那里得到更多的帮助。我们同时也可以学习到新的知识。我们需要从中学会利用我们所学习的知识来运用到实际中来解决现实中的问题,这是一次不断了解现实生活中的实例。这样我们面对现实中的问题是我们并不会束手无策。这是一次学习软件的好机会,我们应该借这个机会来学会如何处理现实中的各种问题,同时我们也可以了解到现实中的具体情况。在实验的过程中,可能会遇到一些困难。例如我们程序的正常连接情况和语法上的错误或逻辑上的错误。这些都是我们在实验过程中经常遇到的问题。我们需要自己独立的去思考这些问题或请教指导老师来解决。我相信经过这次的课程设计我们会对相关的知识有了进一步的加强。我们既可以对于大一学过的C语言的知识重新温习,还可以对C++作更多的了解。
2概要设计
2.1设计思路
这个学生管理系统用Visual C++来设计界面,采用面向对象的语言编程,实现
软件项目实训
对学生信息的基本管理,在设计学生管理系统的时候,首先我们可以看到这次的基本功能有:登入时的密码设置;同时还有学生信息的添加与保存;也有学生成绩的查询删除等功能。
2.2模块功能介绍
学生信息管理模块
1学生信息登入窗口,学生输入密码进入成绩管理窗口
2学生信息录入,此部分实现了对学生信息的增加功能
3学生信息查找。此部分实现了对学生信息的删除。在删除前先点出需要删除的学生基本信息
4修改与删除学生信息。此部分实现了对学生信息的修改和删除。在修改删除前先查询出要修改学生的基本信息,然后在进行需要的改动并保存。
2.3模块结构图
对学生信息的基本管理,在设计学生管理系统的时候,首先我们可以看到这次的基本功能有:登入时的密码设置;同时还有学生信息的添加与保存;也有学生成绩的查询删除等功能。
2.2模块功能介绍
学生信息管理模块
1学生信息登入窗口,学生输入密码进入成绩管理窗口 2学生信息录入,此部分实现了对学生信息的增加功能
3学生信息查找。此部分实现了对学生信息的删除。在删除前先点出需要删除的学生基本信息
4修改与删除学生信息。此部分实现了对学生信息的修改和删除。在修改删除前先查询出要修改学生的基本信息,然后在进行需要的改动并保存。
2.3模块结构图
用户进入学生管理系统登入界面,输入用户账号密码,登入成功后会进入学生信息管理系统主窗口,可实现学生成绩信息登入,学生成绩信息查询,学生信息删 除、学生信息修改四个功能的操作,点下退出按钮即退出。
2.4流程程序图
(1)学生成绩数据登入流程图
(2)学生信息查询流程图
(3)学生信息删除流程图
(4)学生信息修改流程图
2.5设计分工
此次软件实训我负责确定课题内容,并负责主窗口与各子窗口的设计搭建。组员方湘负责功能函数的编程。
3详细设计
3.1学生系统主窗口页面
创建主窗口
//////////////////////////////////////////////// //CStuFrame::CStuFrame CStuFrame::CStuFrame() { }
主窗口页面设计
////////////////////////////////////////////////// //message map and member functions
BEGIN_MESSAGE_MAP(CStuFrame,CFrameWnd) ON_WM_CREATE()
ON_WM_SIZE()
ON_COMMAND(ID_FILE_EXIT,OnExitClick) ON_COMMAND(ID_INFO_INPUT,OnInputClick) ON_COMMAND(ID_INFO_FIND,OnFindClick) ON_COMMAND(ID_INFO_UPDATE,OnUpdateClick) ON_COMMAND(ID_INFO_DELETE,OnDelete) m_pInputDlg = NULL; m_pFindDlg = NULL; m_pUpdateDlg = NULL;
Create(NULL,_T("学生信息管理系统"));
END_MESSAGE_MAP() //////////////////////////////////////////////////
//CStuFrame::OnCreate
int CStuFrame::OnCreate(LPCREATESTRUCT lps)
{
if (CFrameWnd::OnCreate(lps) == -1) return -1; m_wndList.Create(WS_CHILD | WS_VISIBLE | LBS_USETABSTOPS | LBS_SORT | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT,CRect(0,0,0,0),this,ID_LIST);
m_font.CreatePointFont(100,"宋体"); m_wndList.SetFont(&m_font);
CreateMenu(); //create menu control
}
//////////////////////////////////////////////////
//CStuFrame::CreateMenu
void CStuFrame::CreateMenu()
{
ASSERT( m_MainMenu.CreateMenu() ); ASSERT( m_PopupMenu.CreatePopupMenu() ); m_PopupMenu.AppendMenu(MF_STRING,ID_FILE_EXIT,"退出(&Q)"); m_MainMenu.AppendMenu(MF_POPUP,(UINT)m_PopupMenu.Detach(),"文件m_studb.Initialize(); //c:\studatabase.dat LoadFile(); //Loading the date to LISTBOX Control return 0; (&F)");
ASSERT( m_PopupMenu.CreatePopupMenu() ); m_PopupMenu.AppendMenu(MF_STRING,ID_INFO_INPUT,"信息录入(&I)"); m_PopupMenu.AppendMenu(MF_STRING,ID_INFO_FIND,"信息查找(&F)"); m_PopupMenu.AppendMenu(MF_STRING,ID_INFO_UPDATE,"信息修改(&M)");
m_PopupMenu.AppendMenu(MF_STRING,ID_INFO_DELETE,"信息删除(&D)");
m_MainMenu.AppendMenu(MF_POPUP,(UINT)m_PopupMenu.Detach()," 信息管理(&M)");
ASSERT( m_PopupMenu.CreatePopupMenu() ); m_PopupMenu.AppendMenu(MF_STRING,ID_HELP_ABOUT,"关于(&A)..."); m_MainMenu.AppendMenu(MF_POPUP,(UINT)m_PopupMenu.Detach(),"帮助(&H)");
SetMenu(&m_MainMenu);
}
3.2学生信息录入模块部分程序
主窗口下建子窗口
CInputDlg::CInputDlg(CWnd* parentWnd) : CStuDlg(parentWnd)
{
m_parentWnd = parentWnd;
}
录入窗口界面创建
确定控件的坐标与属性,信息录入与功能构建
void CInputDlg::CreateChildControl()
{
m_wndGroup.Create(_T("信息录入"),WS_CHILD | WS_VISIBLE | SetWindowText(_T("信息录入")); //子窗口标题 CreateChildControl(); //建立子窗体 ClearEditDate();
BS_GROUPBOX,
CRect(10,10,420,250),this,UINT(-1)); m_wndButton[0].Create(_T("确定"),WS_CHILD | WS_VISIBLE |
BS_PUSHBUTTON,
m_wndButton[1].Create(_T("取消"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect(330,260,410,285),this,ID_INPUT_CANCEL);
//建立STATIC控件
m_wndStatic[0].Create(_T("姓名:"),WS_CHILD | WS_VISIBLE | SS_LEFT,
//
//建立EDIT控件
//
m_wndEdit[0].Create(WS_CHILD | WS_VISIBLE | WS_BORDER,
CRect(20,30,60,50),this,UINT(-2)); m_wndStatic[1].Create(_T("学号:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(220,30,260,50),this,UINT(-3)); m_wndStatic[2].Create(_T("性别:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(20,70,60,90),this,UINT(-4)); m_wndStatic[3].Create(_T("电话:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(220,70,260,90),this,UINT(-5)); m_wndStatic[4].Create(_T("地址:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(20,110,60,130),this,UINT(-6)); m_wndStatic[5].Create(_T("语文:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(220,110,260,130),this,UINT(-7)); m_wndStatic[6].Create(_T("英语:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(20,150,60,170),this,UINT(-8)); m_wndStatic[7].Create(_T("数学:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(220,150,260,170),this,UINT(-9)); CRect(70,30,200,50),this,ID_INPUT_NAME); m_wndNumEdit[0].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(270,30,400,50),this,ID_INPUT_ID); m_wndEdit[1].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(70,70,200,90),this,ID_INPUT_SEX);
CRect(270,70,400,90),this,ID_INPUT_PHONE); m_wndEdit[3].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(70,110,200,130),this,ID_INPUT_ADDRESS); m_wndNumEdit[1].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(270,110,400,130),this,ID_INPUT_CH); m_wndNumEdit[2].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(70,150,200,170),this,ID_INPUT_EN); m_wndNumEdit[3].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(270,150,400,170),this,ID_INPUT_MA); //设置各个EDIT控件的文件输入长度
}
信息录入函数
void CInputDlg::OnInput()
{
UpdateData(TRUE); if (m_szName == "") { } else if (m_szSex == "") { } else if (m_szPhone == "") { AfxMessageBox("请输入性别!"); return; AfxMessageBox("请输入姓名!"); return; SetEditTextLength();
} AfxMessageBox("请输入电话号码!"); return; else if (m_szAddress == "") { } // // 增加到学生对像 // CStudent stu; stu.AddStudentName( (LPTSTR)(LPCTSTR)m_szName ); stu.AddStudentID( m_iID ); stu.AddStudentSex( (LPTSTR)(LPCTSTR)m_szSex ); stu.AddStudentPhone( (LPTSTR)(LPCTSTR)m_szPhone ); stu.AddStudentAddress( (LPTSTR)(LPCTSTR)m_szAddress ); stu.AddStudentGrade( m_fChinese,m_fEnglish,m_fMath ); // // 增加记录并保存到数据文件中 // CStuFrame* pMainWnd = (CStuFrame*)m_parentWnd; AfxMessageBox("请输入您的地址!"); return; pMainWnd->GetStudbObj()->AppendRecord(&stu);
if (pMainWnd->GetStudbObj()->PostToDataBase()) { } else //增加到主窗体的LISTBOX控件中 pMainWnd->AddStrToList(&stu); MessageBox("录入成功!");
MessageBox("录入失败"); //清空EDIT内数据 ClearEditDate();
3.3学生信息查询系统模块程序
主窗口下建立子窗口
CFindDlg::CFindDlg(CWnd* parentWnd) : CStuDlg(parentWnd)
{
m_parentWnd = parentWnd; //引用父窗体
SetWindowText(_T("信息查找"));//设置窗口标题
}
信息查找功能页面
位置坐标设置
void CFindDlg::CreateChildControl() //创建查找功能页面
{
m_wndGroup.Create(_T("信息查找"),WS_CHILD | WS_VISIBLE | CreateChildControl(); //建立子窗体
BS_GROUPBOX, //窗口标题
CRect(20, 20, 400, 250),this,UINT(-1)); m_wndRadioName.Create(_T("姓名"),WS_CHILD | WS_VISIBLE |
BS_RADIOBUTTON, //按姓名查询选择按钮设置
CRect(30, 50, 80, 70), this, ID_FIND_NAME); m_wndRadioID.Create(_T("学号"),WS_CHILD | WS_VISIBLE |
BS_RADIOBUTTON, //按学号查询选择按钮设置
CRect(100, 50, 150, 70), this, ID_FIND_ID); m_wndEdit.Create(WS_CHILD | WS_VISIBLE | WS_BORDER, //学号姓名输入
CRect(30, 80, 130, 100), this, ID_FIND_FINDEDIT); m_wndFind.Create(_T("查找"),WS_CHILD | WS_VISIBLE |
BS_PUSHBUTTON, //查找按钮
CRect(140, 80, 210, 100), this, ID_FIND_OK); m_wndAll.Create(_T("全部"),WS_CHILD | WS_VISIBLE |
BS_PUSHBUTTON, //显示全部按钮
CRect(220, 80, 290, 100), this, ID_FIND_ALL); m_wndCancel.Create(_T("关闭"),WS_CHILD | WS_VISIBLE |
BS_PUSHBUTTON, //关闭按钮
}
按键和函数映射绑定
///////////////////////////////////////////
//message map and member functions
//BEGIN_MESSAGE_MAP(CFindDlg, CStuDlg)
ON_BN_CLICKED(ID_FIND_CANCEL,OnCancelClick)
ON_BN_CLICKED(ID_FIND_OK,OnFindClick) ON_BN_CLICKED(ID_FIND_ALL,OnAllClick) ON_BN_CLICKED(ID_FIND_NAME,OnRadioNameClick) ON_BN_CLICKED(ID_FIND_ID,OnRadioIDClick) CRect(200, 260, 280, 280), this, ID_FIND_CANCEL);
END_MESSAGE_MAP() //end message map
//////////////////////////////////////////
//CFindDlg::OnCancelClick
//m_wndAll control's handler
void CFindDlg::OnCancelClick()
{
}
学号与姓名单选按钮判定函数
//////////////////////////////////////////
//CFindDlg::OnRadioNameClick
//m_wndRadioName control's handler
DestroyWindow(); // 关闭窗口函数
void CFindDlg::OnRadioNameClick() //姓名单选按钮按下
{
}
/////////////////////////////////////////
//CFindDlg::OnRadioIDClick
//m_wndRadioID control's handler
void CFindDlg::OnRadioIDClick() //学号单选按钮按下
{
m_wndRadioID.SetCheck(TRUE); m_wndRadioName.SetCheck(FALSE); m_wndRadioName.SetCheck(TRUE); m_wndRadioID.SetCheck(FALSE);
信息查找函数
/////////////////////////////////////////
//CFindDlg::OnFindClick
//m_wndFind control's handler
void CFindDlg::OnFindClick()
{
CString strFind; m_wndEdit.GetWindowText(strFind); if (strFind == "") { AfxMessageBox("请输入查找内容!"); //输入栏为空则提示"请输入查找内容!"
} if (!m_wndRadioName.GetCheck() && !m_wndRadioID.GetCheck()) { AfxMessageBox("请选择查找条件!"); //查找条件栏为空则提示return;
"请选择查找条件!"
} CStudent* pstu = NULL; //定义指针变量返回查return; 找结果
CStuFrame* pMainWnd = (CStuFrame*)m_parentWnd; // // 按姓名查找 // if (m_wndRadioName.GetCheck()) { } // // 按学生ID查找 // else if (m_wndRadioID.GetCheck()) { } // // 没有此学生 // if (pstu == NULL) { AfxMessageBox("找不到此学生的信息!"); return; pstu = pMainWnd->GetStudbObj()->FindRecord( atoi((LPCTSTR)strFind)); //atoi: 字符串转换为整数 pstu = pMainWnd->GetStudbObj()->FindRecord( (LPTSTR)(LPCTSTR)strFind);
} } // // 清空主窗体中的ListBox控件中的数据 // 重新载入已查找到的数据到LISTBOX // pMainWnd->GetListControl()->ResetContent(); pMainWnd->AddStrToList(pstu);
3.4信息修改功能程序设计介绍
信息修改函数
////////////////////////////////////
// CUpdateDlg::CUpdateDLg
// constructor
CUpdateDlg::CUpdateDlg(CWnd* parentWnd) : CInputDlg(parentWnd) {
m_parentWnd = parentWnd;
SetWindowText(_T("信息修改"));
int iIndex = ((CStuFrame*)m_parentWnd)->GetListSelID(); CStudent* pStu =
((CStuFrame*)m_parentWnd)->GetStudbObj()->FindRecord(iIndex);
}
m_szName = pStu->GetStudentName(); m_szSex = pStu->GetStudentSex(); m_szPhone = pStu->GetStudentPhone(); m_szAddress= pStu->GetStudentAddress(); m_iID = pStu->GetStudentID(); m_fChinese = pStu->GetStudentGradeChinese(); m_fEnglish = pStu->GetStudentGradeEnglish(); m_fMath = pStu->GetStudentGradeMath(); UpdateData(FALSE);
/////////////////////////////////////
// CUpdateDlg::~CUpdateDlg
// destructor
CUpdateDlg::~CUpdateDlg()
{
}
/////////////////////////////////////
//message map and member functions
BEGIN_MESSAGE_MAP(CUpdateDlg,CInputDlg)
ON_BN_CLICKED(ID_INPUT_OK,OnInput)
ON_BN_CLICKED(ID_INPUT_CANCEL,OnCancel)
END_MESSAGE_MAP()
//////////////////////////////////////
//CUpdateDlg::OnInput
void CUpdateDlg::OnInput()
{
UpdateData(TRUE); if (m_szName == "") { } if (m_szSex == "") { } if (m_szPhone == "") { AfxMessageBox("请输入姓名"); return; AfxMessageBox("请输入性别!"); return;
} return; if (m_szAddress == "") { } // // 主窗体指针 // CStuFrame* pMainWnd = (CStuFrame*)m_parentWnd; // // 主窗体的LISTBOX控件当前选中的项对应的学生ID // AfxMessageBox("请输入您的地址!"); return;
int iIndex = pMainWnd->GetListSelID();
// // 开始更新记录 // CStudent stu; stu.AddStudentName( (LPTSTR)(LPCTSTR)m_szName ); stu.AddStudentAddress( (LPTSTR)(LPCTSTR)m_szAddress ); stu.AddStudentSex( (LPTSTR)(LPCTSTR)m_szSex ); stu.AddStudentPhone( (LPTSTR)(LPCTSTR)m_szPhone ); stu.AddStudentID(m_iID); stu.AddStudentGrade(m_fChinese,m_fEnglish,m_fMath); if (pMainWnd->GetStudbObj()->UpdateRecord(&stu,iIndex)) { pMainWnd->LoadFile(); // 从数据文件中重新截入数据
} } else AfxMessageBox("修改失败!");
3.5学生信息删除系统模块程序
void CStuFrame::OnDelete()
{
if (IDOK == MessageBox("确定要删除该记录吗!","提示",MB_OKCANCEL)) { } int iID = this->GetListSelID(); if( this->GetStudbObj()->DeleteRecord(iID) ) { } else AfxMessageBox("删除失败!"); LoadFile(); AfxMessageBox("删除成功!"); int iIndex = m_wndList.GetCurSel(); if ( iIndex == -1 ) //没有选择LISTBOX控件的数据 { } AfxMessageBox("请选择要删除的记录!"); return;
4调试分析
(1)程序写好后.窗口设计程序编程达不到预想的结果,后来通过改变程序中性
别地址等显示坐标值大小,最终达到了理想效果。
调试前:
调试后:
(2) 在信息录入时,输入学号时最初输入汉字或字母无错误提醒,后来改了程序有错误提示,
调试前未保存,调试后图:
(3)在录入成绩时,最初我们输入如语文成绩超过100后无错误提醒,后更改程序后,语文成绩大于一百会有错误提醒。
调试后:
5测试
5.1主窗口
信息管理栏有信息录入,信息查找,信息修改,信息删除四大功能。
5.2信息录入
在主窗口点信息录入就会显示信息录入子窗口,将各种信息填满,点击确定,显示录入成功后主窗口会显示录入的信息。
5.3信息查找
按姓名查找,点击需要查找人的姓名在点击查找会显示出结果。
按学号查找,点击学号,在输入查找中点学号,输入学号,点击查找会显示出查询结果。
5.4信息修改
在主窗口点击要修改的一栏,在点击信息修改,在信息录入里面更改信息,最后点击确定。
1 引言(一级标题,小三黑体,居中)
修改结果,其中“武汉”改为“武汉工程大学”
5.5信息删除
选择想要删除的一栏,在信息管理中点击信息删除
1.1系统概述(二级标题,四号黑体,左对齐)
点击确定后显示删除成功,此时学生方湘不在主窗口中
心得与体会
这次是为期两周的软件培训,我在第一周没有引起足够的重视,导致第二周在做程序的时候时间很赶,我表示抱歉,我要感谢我的组员方湘,他教了我很多东西,虽然我们时间很紧,最后我们也作出了程序,运行的很成功,另外我还感受到了VC语言的魅力,虽然我们没有主要的学习这门课程,但是现在计算机发展如此迅速的时代,我想以后的日子能够学精这门课程。另外我向老师说声抱歉,在答辩中没有准备充分,但是在组员的帮助下我还是能够简单掌握程序。这里有很多程序是网上借鉴。本着学习的原则,我们最后也读懂了程序语句,但是我们的学生管理系统还是过于简单,希望老师能够理解,也要感谢老师在两周时间的指导,总之这门语言还是深深吸引了我,在以后的学习时间中,能够继续学习,不骄不躁。
指导教师评语
参考文献
[1]孙鑫,余安萍.VC++深入了解.电子工业出版社.2006
[2]张荣梅.Visual C++实用教程.中国铁道出版社.2008.9
[3]郑阿奇.Visua c++实用教程(第二版).电子工业出版社.2003
[4]陈清华等.Visual C++课程设计案例精选与编程指导.东南大学出版社.2004
附录
数据库管理
#include "hStuDataBase.h"
#include
#include
/////////////////////////////////////////////
// CStuDataBase::CStuDataBase: constructor
CStuDataBase::CStuDataBase()
{
}
///////////////////////////////////////////////
//CStuDataBase::CStuDataBase: destructor
CStuDataBase::~CStuDataBase()
{
}
///////////////////////////////////////////////
//CStuDataBase::Connection
void CStuDataBase::Initialize(char* pszDataBaseName)
{
if (NULL == pszDataBaseName) throw "Connection to database fail,[Invalid FileName]"; if (m_pszDataBaseName) delete [] m_pszDataBaseName; m_RecordCount = 0; m_pszDataBaseName = NULL; m_pfWriteFile = NULL; m_pfReadFile = NULL; //m_Connected = false; m_pfReadFile = fopen(pszDataBaseName,"a+b");
throw "Connection to database fail!"; //开始读取数据 rewind(m_pfReadFile); //跳到文件开头 int iCount = 0; while
(fread(&m_stuObject[iCount],sizeof(m_stuObject[iCount]),1,m_pfReadFile) == 1)
}
///////////////////////////////////////////////////////////////////// //CStuDataBase::AppendRecord
bool CStuDataBase::AppendRecord(CStudent* pStudent) m_RecordCount = iCount; //保存记录 if (m_pszDataBaseName) { } //以下保存文件名以便以后使用 int iFileNameMax = strlen(pszDataBaseName); m_pszDataBaseName = new char[iFileNameMax + 1]; strncpy(m_pszDataBaseName,pszDataBaseName,iFileNameMax); m_pszDataBaseName[iFileNameMax] = '\0'; delete []m_pszDataBaseName; m_pszDataBaseName = NULL; { } fclose(m_pfReadFile); iCount++;
}
///////////////////////////////////////////////////////////////////// //CStuDataBase::UpdateRecord
bool CStuDataBase::UpdateRecord(CStudent* pStudent,int iID)
{
if (IsEmpty()) return false; //数据已满(CStuDatabase数的学生对像数组已满:1000个) if (IsFull()) return false; m_stuObject[m_RecordCount] = (*pStudent); m_RecordCount++; return true; int iIndex = GetStuIndex(iID); if (-1 == iIndex) return false; //更新旧的学生对像数组的数据 m_stuObject[iIndex] = (*pStudent); // //重新提交数据到数据文件 // if ( PostToDataBase() ) return true; else return false;
软件项目实训
电气信息学院
实训报告
课程名称:软件项目实训
实训题目:学生信息管理系统
年级/专业/班:13自动化03
学生姓名:杨锦
学 号:1304201119
实训成绩:
指导教师签名:年月日
软件项目实训
1引言
1.1系统概述
我们组设计的班级管理系统是灵感来源于我们学校的教务处管理成绩查询系统,武汉工程大学教务处成绩查询系统有很多系统化、自动化的功能,我们根据自己的能力利用VC++6.0订做了一个班级成绩查询系统。其功能包括学生成绩录入、学生成绩查询、学生成绩修改、学生成绩删除。在班级成绩管理时,人工记录容易出错且耗时,在这种状况下需要一个班级成绩系统管理来记录各项信息。
1.2需求分析
随着科技信息化的发展,我国的教育产业对软硬件要求变得越来越高,特别是计算机网络技术,在许多方面需要软件去提高教学质量,如多媒体教学、网络教学、教务处选课、教务处信息查询等。所以根据我们教学安排我们组订做了一个班级管理系统。
这次试验是以VC++6.0为工作环境,这是一个关于学生信息管理系统的试验,其他包括了登入密码设定,学生成绩信息登入,学生成绩信息查询,学生信息删除。我们应该在这次的实验过程中结合自己所学的知识以及我们在学习的过程中遇到的难题可以从老师那里得到更多的帮助。我们同时也可以学习到新的知识。我们需要从中学会利用我们所学习的知识来运用到实际中来解决现实中的问题,这是一次不断了解现实生活中的实例。这样我们面对现实中的问题是我们并不会束手无策。这是一次学习软件的好机会,我们应该借这个机会来学会如何处理现实中的各种问题,同时我们也可以了解到现实中的具体情况。在实验的过程中,可能会遇到一些困难。例如我们程序的正常连接情况和语法上的错误或逻辑上的错误。这些都是我们在实验过程中经常遇到的问题。我们需要自己独立的去思考这些问题或请教指导老师来解决。我相信经过这次的课程设计我们会对相关的知识有了进一步的加强。我们既可以对于大一学过的C语言的知识重新温习,还可以对C++作更多的了解。
2概要设计
2.1设计思路
这个学生管理系统用Visual C++来设计界面,采用面向对象的语言编程,实现
软件项目实训
对学生信息的基本管理,在设计学生管理系统的时候,首先我们可以看到这次的基本功能有:登入时的密码设置;同时还有学生信息的添加与保存;也有学生成绩的查询删除等功能。
2.2模块功能介绍
学生信息管理模块
1学生信息登入窗口,学生输入密码进入成绩管理窗口
2学生信息录入,此部分实现了对学生信息的增加功能
3学生信息查找。此部分实现了对学生信息的删除。在删除前先点出需要删除的学生基本信息
4修改与删除学生信息。此部分实现了对学生信息的修改和删除。在修改删除前先查询出要修改学生的基本信息,然后在进行需要的改动并保存。
2.3模块结构图
对学生信息的基本管理,在设计学生管理系统的时候,首先我们可以看到这次的基本功能有:登入时的密码设置;同时还有学生信息的添加与保存;也有学生成绩的查询删除等功能。
2.2模块功能介绍
学生信息管理模块
1学生信息登入窗口,学生输入密码进入成绩管理窗口 2学生信息录入,此部分实现了对学生信息的增加功能
3学生信息查找。此部分实现了对学生信息的删除。在删除前先点出需要删除的学生基本信息
4修改与删除学生信息。此部分实现了对学生信息的修改和删除。在修改删除前先查询出要修改学生的基本信息,然后在进行需要的改动并保存。
2.3模块结构图
用户进入学生管理系统登入界面,输入用户账号密码,登入成功后会进入学生信息管理系统主窗口,可实现学生成绩信息登入,学生成绩信息查询,学生信息删 除、学生信息修改四个功能的操作,点下退出按钮即退出。
2.4流程程序图
(1)学生成绩数据登入流程图
(2)学生信息查询流程图
(3)学生信息删除流程图
(4)学生信息修改流程图
2.5设计分工
此次软件实训我负责确定课题内容,并负责主窗口与各子窗口的设计搭建。组员方湘负责功能函数的编程。
3详细设计
3.1学生系统主窗口页面
创建主窗口
//////////////////////////////////////////////// //CStuFrame::CStuFrame CStuFrame::CStuFrame() { }
主窗口页面设计
////////////////////////////////////////////////// //message map and member functions
BEGIN_MESSAGE_MAP(CStuFrame,CFrameWnd) ON_WM_CREATE()
ON_WM_SIZE()
ON_COMMAND(ID_FILE_EXIT,OnExitClick) ON_COMMAND(ID_INFO_INPUT,OnInputClick) ON_COMMAND(ID_INFO_FIND,OnFindClick) ON_COMMAND(ID_INFO_UPDATE,OnUpdateClick) ON_COMMAND(ID_INFO_DELETE,OnDelete) m_pInputDlg = NULL; m_pFindDlg = NULL; m_pUpdateDlg = NULL;
Create(NULL,_T("学生信息管理系统"));
END_MESSAGE_MAP() //////////////////////////////////////////////////
//CStuFrame::OnCreate
int CStuFrame::OnCreate(LPCREATESTRUCT lps)
{
if (CFrameWnd::OnCreate(lps) == -1) return -1; m_wndList.Create(WS_CHILD | WS_VISIBLE | LBS_USETABSTOPS | LBS_SORT | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT,CRect(0,0,0,0),this,ID_LIST);
m_font.CreatePointFont(100,"宋体"); m_wndList.SetFont(&m_font);
CreateMenu(); //create menu control
}
//////////////////////////////////////////////////
//CStuFrame::CreateMenu
void CStuFrame::CreateMenu()
{
ASSERT( m_MainMenu.CreateMenu() ); ASSERT( m_PopupMenu.CreatePopupMenu() ); m_PopupMenu.AppendMenu(MF_STRING,ID_FILE_EXIT,"退出(&Q)"); m_MainMenu.AppendMenu(MF_POPUP,(UINT)m_PopupMenu.Detach(),"文件m_studb.Initialize(); //c:\studatabase.dat LoadFile(); //Loading the date to LISTBOX Control return 0; (&F)");
ASSERT( m_PopupMenu.CreatePopupMenu() ); m_PopupMenu.AppendMenu(MF_STRING,ID_INFO_INPUT,"信息录入(&I)"); m_PopupMenu.AppendMenu(MF_STRING,ID_INFO_FIND,"信息查找(&F)"); m_PopupMenu.AppendMenu(MF_STRING,ID_INFO_UPDATE,"信息修改(&M)");
m_PopupMenu.AppendMenu(MF_STRING,ID_INFO_DELETE,"信息删除(&D)");
m_MainMenu.AppendMenu(MF_POPUP,(UINT)m_PopupMenu.Detach()," 信息管理(&M)");
ASSERT( m_PopupMenu.CreatePopupMenu() ); m_PopupMenu.AppendMenu(MF_STRING,ID_HELP_ABOUT,"关于(&A)..."); m_MainMenu.AppendMenu(MF_POPUP,(UINT)m_PopupMenu.Detach(),"帮助(&H)");
SetMenu(&m_MainMenu);
}
3.2学生信息录入模块部分程序
主窗口下建子窗口
CInputDlg::CInputDlg(CWnd* parentWnd) : CStuDlg(parentWnd)
{
m_parentWnd = parentWnd;
}
录入窗口界面创建
确定控件的坐标与属性,信息录入与功能构建
void CInputDlg::CreateChildControl()
{
m_wndGroup.Create(_T("信息录入"),WS_CHILD | WS_VISIBLE | SetWindowText(_T("信息录入")); //子窗口标题 CreateChildControl(); //建立子窗体 ClearEditDate();
BS_GROUPBOX,
CRect(10,10,420,250),this,UINT(-1)); m_wndButton[0].Create(_T("确定"),WS_CHILD | WS_VISIBLE |
BS_PUSHBUTTON,
m_wndButton[1].Create(_T("取消"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect(330,260,410,285),this,ID_INPUT_CANCEL);
//建立STATIC控件
m_wndStatic[0].Create(_T("姓名:"),WS_CHILD | WS_VISIBLE | SS_LEFT,
//
//建立EDIT控件
//
m_wndEdit[0].Create(WS_CHILD | WS_VISIBLE | WS_BORDER,
CRect(20,30,60,50),this,UINT(-2)); m_wndStatic[1].Create(_T("学号:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(220,30,260,50),this,UINT(-3)); m_wndStatic[2].Create(_T("性别:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(20,70,60,90),this,UINT(-4)); m_wndStatic[3].Create(_T("电话:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(220,70,260,90),this,UINT(-5)); m_wndStatic[4].Create(_T("地址:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(20,110,60,130),this,UINT(-6)); m_wndStatic[5].Create(_T("语文:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(220,110,260,130),this,UINT(-7)); m_wndStatic[6].Create(_T("英语:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(20,150,60,170),this,UINT(-8)); m_wndStatic[7].Create(_T("数学:"),WS_CHILD | WS_VISIBLE | SS_LEFT, CRect(220,150,260,170),this,UINT(-9)); CRect(70,30,200,50),this,ID_INPUT_NAME); m_wndNumEdit[0].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(270,30,400,50),this,ID_INPUT_ID); m_wndEdit[1].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(70,70,200,90),this,ID_INPUT_SEX);
CRect(270,70,400,90),this,ID_INPUT_PHONE); m_wndEdit[3].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(70,110,200,130),this,ID_INPUT_ADDRESS); m_wndNumEdit[1].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(270,110,400,130),this,ID_INPUT_CH); m_wndNumEdit[2].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(70,150,200,170),this,ID_INPUT_EN); m_wndNumEdit[3].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(270,150,400,170),this,ID_INPUT_MA); //设置各个EDIT控件的文件输入长度
}
信息录入函数
void CInputDlg::OnInput()
{
UpdateData(TRUE); if (m_szName == "") { } else if (m_szSex == "") { } else if (m_szPhone == "") { AfxMessageBox("请输入性别!"); return; AfxMessageBox("请输入姓名!"); return; SetEditTextLength();
} AfxMessageBox("请输入电话号码!"); return; else if (m_szAddress == "") { } // // 增加到学生对像 // CStudent stu; stu.AddStudentName( (LPTSTR)(LPCTSTR)m_szName ); stu.AddStudentID( m_iID ); stu.AddStudentSex( (LPTSTR)(LPCTSTR)m_szSex ); stu.AddStudentPhone( (LPTSTR)(LPCTSTR)m_szPhone ); stu.AddStudentAddress( (LPTSTR)(LPCTSTR)m_szAddress ); stu.AddStudentGrade( m_fChinese,m_fEnglish,m_fMath ); // // 增加记录并保存到数据文件中 // CStuFrame* pMainWnd = (CStuFrame*)m_parentWnd; AfxMessageBox("请输入您的地址!"); return; pMainWnd->GetStudbObj()->AppendRecord(&stu);
if (pMainWnd->GetStudbObj()->PostToDataBase()) { } else //增加到主窗体的LISTBOX控件中 pMainWnd->AddStrToList(&stu); MessageBox("录入成功!");
MessageBox("录入失败"); //清空EDIT内数据 ClearEditDate();
3.3学生信息查询系统模块程序
主窗口下建立子窗口
CFindDlg::CFindDlg(CWnd* parentWnd) : CStuDlg(parentWnd)
{
m_parentWnd = parentWnd; //引用父窗体
SetWindowText(_T("信息查找"));//设置窗口标题
}
信息查找功能页面
位置坐标设置
void CFindDlg::CreateChildControl() //创建查找功能页面
{
m_wndGroup.Create(_T("信息查找"),WS_CHILD | WS_VISIBLE | CreateChildControl(); //建立子窗体
BS_GROUPBOX, //窗口标题
CRect(20, 20, 400, 250),this,UINT(-1)); m_wndRadioName.Create(_T("姓名"),WS_CHILD | WS_VISIBLE |
BS_RADIOBUTTON, //按姓名查询选择按钮设置
CRect(30, 50, 80, 70), this, ID_FIND_NAME); m_wndRadioID.Create(_T("学号"),WS_CHILD | WS_VISIBLE |
BS_RADIOBUTTON, //按学号查询选择按钮设置
CRect(100, 50, 150, 70), this, ID_FIND_ID); m_wndEdit.Create(WS_CHILD | WS_VISIBLE | WS_BORDER, //学号姓名输入
CRect(30, 80, 130, 100), this, ID_FIND_FINDEDIT); m_wndFind.Create(_T("查找"),WS_CHILD | WS_VISIBLE |
BS_PUSHBUTTON, //查找按钮
CRect(140, 80, 210, 100), this, ID_FIND_OK); m_wndAll.Create(_T("全部"),WS_CHILD | WS_VISIBLE |
BS_PUSHBUTTON, //显示全部按钮
CRect(220, 80, 290, 100), this, ID_FIND_ALL); m_wndCancel.Create(_T("关闭"),WS_CHILD | WS_VISIBLE |
BS_PUSHBUTTON, //关闭按钮
}
按键和函数映射绑定
///////////////////////////////////////////
//message map and member functions
//BEGIN_MESSAGE_MAP(CFindDlg, CStuDlg)
ON_BN_CLICKED(ID_FIND_CANCEL,OnCancelClick)
ON_BN_CLICKED(ID_FIND_OK,OnFindClick) ON_BN_CLICKED(ID_FIND_ALL,OnAllClick) ON_BN_CLICKED(ID_FIND_NAME,OnRadioNameClick) ON_BN_CLICKED(ID_FIND_ID,OnRadioIDClick) CRect(200, 260, 280, 280), this, ID_FIND_CANCEL);
END_MESSAGE_MAP() //end message map
//////////////////////////////////////////
//CFindDlg::OnCancelClick
//m_wndAll control's handler
void CFindDlg::OnCancelClick()
{
}
学号与姓名单选按钮判定函数
//////////////////////////////////////////
//CFindDlg::OnRadioNameClick
//m_wndRadioName control's handler
DestroyWindow(); // 关闭窗口函数
void CFindDlg::OnRadioNameClick() //姓名单选按钮按下
{
}
/////////////////////////////////////////
//CFindDlg::OnRadioIDClick
//m_wndRadioID control's handler
void CFindDlg::OnRadioIDClick() //学号单选按钮按下
{
m_wndRadioID.SetCheck(TRUE); m_wndRadioName.SetCheck(FALSE); m_wndRadioName.SetCheck(TRUE); m_wndRadioID.SetCheck(FALSE);
信息查找函数
/////////////////////////////////////////
//CFindDlg::OnFindClick
//m_wndFind control's handler
void CFindDlg::OnFindClick()
{
CString strFind; m_wndEdit.GetWindowText(strFind); if (strFind == "") { AfxMessageBox("请输入查找内容!"); //输入栏为空则提示"请输入查找内容!"
} if (!m_wndRadioName.GetCheck() && !m_wndRadioID.GetCheck()) { AfxMessageBox("请选择查找条件!"); //查找条件栏为空则提示return;
"请选择查找条件!"
} CStudent* pstu = NULL; //定义指针变量返回查return; 找结果
CStuFrame* pMainWnd = (CStuFrame*)m_parentWnd; // // 按姓名查找 // if (m_wndRadioName.GetCheck()) { } // // 按学生ID查找 // else if (m_wndRadioID.GetCheck()) { } // // 没有此学生 // if (pstu == NULL) { AfxMessageBox("找不到此学生的信息!"); return; pstu = pMainWnd->GetStudbObj()->FindRecord( atoi((LPCTSTR)strFind)); //atoi: 字符串转换为整数 pstu = pMainWnd->GetStudbObj()->FindRecord( (LPTSTR)(LPCTSTR)strFind);
} } // // 清空主窗体中的ListBox控件中的数据 // 重新载入已查找到的数据到LISTBOX // pMainWnd->GetListControl()->ResetContent(); pMainWnd->AddStrToList(pstu);
3.4信息修改功能程序设计介绍
信息修改函数
////////////////////////////////////
// CUpdateDlg::CUpdateDLg
// constructor
CUpdateDlg::CUpdateDlg(CWnd* parentWnd) : CInputDlg(parentWnd) {
m_parentWnd = parentWnd;
SetWindowText(_T("信息修改"));
int iIndex = ((CStuFrame*)m_parentWnd)->GetListSelID(); CStudent* pStu =
((CStuFrame*)m_parentWnd)->GetStudbObj()->FindRecord(iIndex);
}
m_szName = pStu->GetStudentName(); m_szSex = pStu->GetStudentSex(); m_szPhone = pStu->GetStudentPhone(); m_szAddress= pStu->GetStudentAddress(); m_iID = pStu->GetStudentID(); m_fChinese = pStu->GetStudentGradeChinese(); m_fEnglish = pStu->GetStudentGradeEnglish(); m_fMath = pStu->GetStudentGradeMath(); UpdateData(FALSE);
/////////////////////////////////////
// CUpdateDlg::~CUpdateDlg
// destructor
CUpdateDlg::~CUpdateDlg()
{
}
/////////////////////////////////////
//message map and member functions
BEGIN_MESSAGE_MAP(CUpdateDlg,CInputDlg)
ON_BN_CLICKED(ID_INPUT_OK,OnInput)
ON_BN_CLICKED(ID_INPUT_CANCEL,OnCancel)
END_MESSAGE_MAP()
//////////////////////////////////////
//CUpdateDlg::OnInput
void CUpdateDlg::OnInput()
{
UpdateData(TRUE); if (m_szName == "") { } if (m_szSex == "") { } if (m_szPhone == "") { AfxMessageBox("请输入姓名"); return; AfxMessageBox("请输入性别!"); return;
} return; if (m_szAddress == "") { } // // 主窗体指针 // CStuFrame* pMainWnd = (CStuFrame*)m_parentWnd; // // 主窗体的LISTBOX控件当前选中的项对应的学生ID // AfxMessageBox("请输入您的地址!"); return;
int iIndex = pMainWnd->GetListSelID();
// // 开始更新记录 // CStudent stu; stu.AddStudentName( (LPTSTR)(LPCTSTR)m_szName ); stu.AddStudentAddress( (LPTSTR)(LPCTSTR)m_szAddress ); stu.AddStudentSex( (LPTSTR)(LPCTSTR)m_szSex ); stu.AddStudentPhone( (LPTSTR)(LPCTSTR)m_szPhone ); stu.AddStudentID(m_iID); stu.AddStudentGrade(m_fChinese,m_fEnglish,m_fMath); if (pMainWnd->GetStudbObj()->UpdateRecord(&stu,iIndex)) { pMainWnd->LoadFile(); // 从数据文件中重新截入数据
} } else AfxMessageBox("修改失败!");
3.5学生信息删除系统模块程序
void CStuFrame::OnDelete()
{
if (IDOK == MessageBox("确定要删除该记录吗!","提示",MB_OKCANCEL)) { } int iID = this->GetListSelID(); if( this->GetStudbObj()->DeleteRecord(iID) ) { } else AfxMessageBox("删除失败!"); LoadFile(); AfxMessageBox("删除成功!"); int iIndex = m_wndList.GetCurSel(); if ( iIndex == -1 ) //没有选择LISTBOX控件的数据 { } AfxMessageBox("请选择要删除的记录!"); return;
4调试分析
(1)程序写好后.窗口设计程序编程达不到预想的结果,后来通过改变程序中性
别地址等显示坐标值大小,最终达到了理想效果。
调试前:
调试后:
(2) 在信息录入时,输入学号时最初输入汉字或字母无错误提醒,后来改了程序有错误提示,
调试前未保存,调试后图:
(3)在录入成绩时,最初我们输入如语文成绩超过100后无错误提醒,后更改程序后,语文成绩大于一百会有错误提醒。
调试后:
5测试
5.1主窗口
信息管理栏有信息录入,信息查找,信息修改,信息删除四大功能。
5.2信息录入
在主窗口点信息录入就会显示信息录入子窗口,将各种信息填满,点击确定,显示录入成功后主窗口会显示录入的信息。
5.3信息查找
按姓名查找,点击需要查找人的姓名在点击查找会显示出结果。
按学号查找,点击学号,在输入查找中点学号,输入学号,点击查找会显示出查询结果。
5.4信息修改
在主窗口点击要修改的一栏,在点击信息修改,在信息录入里面更改信息,最后点击确定。
1 引言(一级标题,小三黑体,居中)
修改结果,其中“武汉”改为“武汉工程大学”
5.5信息删除
选择想要删除的一栏,在信息管理中点击信息删除
1.1系统概述(二级标题,四号黑体,左对齐)
点击确定后显示删除成功,此时学生方湘不在主窗口中
心得与体会
这次是为期两周的软件培训,我在第一周没有引起足够的重视,导致第二周在做程序的时候时间很赶,我表示抱歉,我要感谢我的组员方湘,他教了我很多东西,虽然我们时间很紧,最后我们也作出了程序,运行的很成功,另外我还感受到了VC语言的魅力,虽然我们没有主要的学习这门课程,但是现在计算机发展如此迅速的时代,我想以后的日子能够学精这门课程。另外我向老师说声抱歉,在答辩中没有准备充分,但是在组员的帮助下我还是能够简单掌握程序。这里有很多程序是网上借鉴。本着学习的原则,我们最后也读懂了程序语句,但是我们的学生管理系统还是过于简单,希望老师能够理解,也要感谢老师在两周时间的指导,总之这门语言还是深深吸引了我,在以后的学习时间中,能够继续学习,不骄不躁。
指导教师评语
参考文献
[1]孙鑫,余安萍.VC++深入了解.电子工业出版社.2006
[2]张荣梅.Visual C++实用教程.中国铁道出版社.2008.9
[3]郑阿奇.Visua c++实用教程(第二版).电子工业出版社.2003
[4]陈清华等.Visual C++课程设计案例精选与编程指导.东南大学出版社.2004
附录
数据库管理
#include "hStuDataBase.h"
#include
#include
/////////////////////////////////////////////
// CStuDataBase::CStuDataBase: constructor
CStuDataBase::CStuDataBase()
{
}
///////////////////////////////////////////////
//CStuDataBase::CStuDataBase: destructor
CStuDataBase::~CStuDataBase()
{
}
///////////////////////////////////////////////
//CStuDataBase::Connection
void CStuDataBase::Initialize(char* pszDataBaseName)
{
if (NULL == pszDataBaseName) throw "Connection to database fail,[Invalid FileName]"; if (m_pszDataBaseName) delete [] m_pszDataBaseName; m_RecordCount = 0; m_pszDataBaseName = NULL; m_pfWriteFile = NULL; m_pfReadFile = NULL; //m_Connected = false; m_pfReadFile = fopen(pszDataBaseName,"a+b");
throw "Connection to database fail!"; //开始读取数据 rewind(m_pfReadFile); //跳到文件开头 int iCount = 0; while
(fread(&m_stuObject[iCount],sizeof(m_stuObject[iCount]),1,m_pfReadFile) == 1)
}
///////////////////////////////////////////////////////////////////// //CStuDataBase::AppendRecord
bool CStuDataBase::AppendRecord(CStudent* pStudent) m_RecordCount = iCount; //保存记录 if (m_pszDataBaseName) { } //以下保存文件名以便以后使用 int iFileNameMax = strlen(pszDataBaseName); m_pszDataBaseName = new char[iFileNameMax + 1]; strncpy(m_pszDataBaseName,pszDataBaseName,iFileNameMax); m_pszDataBaseName[iFileNameMax] = '\0'; delete []m_pszDataBaseName; m_pszDataBaseName = NULL; { } fclose(m_pfReadFile); iCount++;
}
///////////////////////////////////////////////////////////////////// //CStuDataBase::UpdateRecord
bool CStuDataBase::UpdateRecord(CStudent* pStudent,int iID)
{
if (IsEmpty()) return false; //数据已满(CStuDatabase数的学生对像数组已满:1000个) if (IsFull()) return false; m_stuObject[m_RecordCount] = (*pStudent); m_RecordCount++; return true; int iIndex = GetStuIndex(iID); if (-1 == iIndex) return false; //更新旧的学生对像数组的数据 m_stuObject[iIndex] = (*pStudent); // //重新提交数据到数据文件 // if ( PostToDataBase() ) return true; else return false;