一:定义保存文件记录的结构体
#pragma pack(push,1)
//定义学生基本信息结构
typedef struct _CStudentData
{
TCHAR xsbh[7]; //学生编号
TCHAR xsxm[21]; //学生姓名
TCHAR xb[3]; //学生性别
TCHAR csrq[11]; //出生日期
TCHAR bjmc[21]; //班级名称
}CStudentData;
#pragma pack(pop)
const LPCTSTR STUDENTFILEPATH = _T("//My Documents//student.dat");
//定义存储学生数据表的队列
CList<CStudentData,CStudentData&> m_lstStudent;
二:系统启动过程中,首先检测文件是否存在,存在就读取否则创建文件。
//装载学生表到m_lstStudent队列
CFile stuFile;
CStudentData studentData;
DWORD dwRead;
//如果数据文件存在,就读取
ZeroMemory(&studentData,sizeof(studentData));
if (stuFile.Open(STUDENTFILEPATH,CFile::modeRead))
{
do
{
dwRead = stuFile.Read(&studentData,sizeof(studentData));
if (dwRead != 0 )
{
m_lstStudent.AddTail(studentData);
}
}while(dwRead > 0);
//关闭数据文件
stuFile.Close();
}
else //创建文件
{
if (!stuFile.Open(STUDENTFILEPATH,CFile::modeCreate|CFile::modeWrite))
{
AfxMessageBox(_T("创建数据库失败"));
return FALSE;
}
stuFile.Close();
}
三:保存记录
//装载学生表到m_lstStudent队列
CFile stuFile;
CStudentData studentData;
DWORD dwRead;
//如果数据文件存在,就读取
ZeroMemory(&studentData,sizeof(studentData));
if (stuFile.Open(STUDENTFILEPATH,CFile::modeRead))
{
do
{
dwRead = stuFile.Read(&studentData,sizeof(studentData));
if (dwRead != 0 )
{
m_lstStudent.AddTail(studentData);
}
}while(dwRead > 0);
//关闭数据文件
stuFile.Close();
}
else //创建文件
{
if (!stuFile.Open(STUDENTFILEPATH,CFile::modeCreate|CFile::modeWrite))
{
AfxMessageBox(_T("创建数据库失败"));
return FALSE;
}
stuFile.Close();
}
四:更新
/*将添加的东西写入文件*/
ZeroMemory(&studentData,sizeof(studentData));
wcscpy(studentData.xsbh,m_xsbh);
wcscpy(studentData.xsxm,m_xsxm);
wcscpy(studentData.xb,m_xsxb);
wcscpy(studentData.csrq,m_csrq);
wcscpy(studentData.bjmc,m_bjmc);
stuFile.Open(STUDENTFILEPATH,CFile::modeRead | CFile::modeWrite);
stuFile.Seek(sizeof(studentData)*(m_iCurPos) ,CFile::begin);
stuFile.Write(&studentData,sizeof(studentData));
stuFile.Close();
//更新内存队列
m_lstStudent.SetAt(m_lstStudent.FindIndex(m_iCurPos),studentData);
SetControlEnable(FALSE);
//设置指针移动按钮有效性
SetNavigatorButton(m_iCurPos);
break;
五:删除
POSITION pos = m_lstStudent.FindIndex(m_iCurPos);
m_lstStudent.RemoveAt(pos);
//将文件重写
CStudentData studentData;
CFile stuFile;
stuFile.Open(STUDENTFILEPATH,CFile::modeCreate | CFile::modeWrite);
pos = m_lstStudent.GetHeadPosition();
for (int i=0;i<m_lstStudent.GetCount();i++)
{
ZeroMemory(&studentData,sizeof(studentData));
studentData = m_lstStudent.GetNext(pos);
stuFile.Write(&studentData,sizeof(studentData));
}
stuFile.Close();
文件操作
最新推荐文章于 2024-10-23 22:33:41 发布