void insertSTU(STU* root, STU_REC stuRec)
{
if(NULL == root)
{
printf("不支持的操作....\n");
return;
}
student* p = root;
p->avg = stuRec.avg;
p->sum = stuRec.sum;
memcpy(p->score, stuRec.score, sizeof(stuRec.score));
strcpy(p->name, stuRec.name);
strcpy(p->num, stuRec.num);
} void CStudentDlg::OnInput() 
{
// TODO: Add your control notification handler code here
if(!UpdateData())
return; if(m_num.IsEmpty())
{
MessageBox(_T("学号不能为空!"), _T("错误"), MB_OK | MB_ICONSTOP);
return;
} if(m_name.IsEmpty())
{
MessageBox(_T("姓名不能为空!"), _T("错误"), MB_OK | MB_ICONSTOP);
return;
} CString s1, s2, s3, sum, avg;
int nCol = 1;
s1.Format(_T("%.2f"), m_score1);
s2.Format(_T("%.2f"), m_score2);
s3.Format(_T("%.2f"), m_score3);
sum.Format(_T("%.2f"), m_sum);
avg.Format(_T("%.2f"), m_avg); int nRow = m_listStuRecord.InsertItem(m_listStuRecord.GetItemCount(), m_num);
m_listStuRecord.SetItemText(nRow, nCol ++, m_name);
m_listStuRecord.SetItemText(nRow, nCol ++, s1);
m_listStuRecord.SetItemText(nRow, nCol ++, s2);
m_listStuRecord.SetItemText(nRow, nCol ++, s3);
m_listStuRecord.SetItemText(nRow, nCol ++, sum);
m_listStuRecord.SetItemText(nRow, nCol ++, avg); STU_REC stuRec = {0};
stuRec.avg = m_avg;
stuRec.sum = m_sum;
stuRec.score[0] = m_score1;
stuRec.score[1] = m_score2;
stuRec.score[2] = m_score3;
_snprintf(stuRec.name, sizeof(stuRec.name), _T("%s"), m_name);
_snprintf(stuRec.num, sizeof(stuRec.num), _T("%s"), m_num); if(NULL == m_pSTU)
m_pSTU = creat_node();
insertSTU(m_pSTU, stuRec);
}void CStudentDlg::OnSave() 
{
/*save(m_pSTU);*/
if(NULL == m_pSTU)
return; STU *p=m_pSTU;
FILE *fp;
fp=fopen("Studens.bat","wb");
int n = 0;
fwrite(REC_TOKEN, sizeof(REC_TOKEN), 1, fp);
fseek(fp, sizeof(int), SEEK_CUR);
for(; p!=NULL; n ++)
{
STU_REC stuRec;
stuRec.avg = p->avg;
stuRec.sum = p->sum;
memcpy(stuRec.score, p->score, sizeof(p->score));
strcpy(stuRec.name, p->name);
strcpy(stuRec.num, p->num);
fwrite(&stuRec, sizeof(stuRec),1,fp);
p=p->next;
}
fseek(fp, sizeof(REC_TOKEN), SEEK_SET);
fwrite(&n, sizeof(int), 1, fp);
fclose(fp);
}
代码不全,这些是我认为出错的部分,麻烦各位高手帮忙看下,新手,比较急!谢谢了!!

解决方案 »

  1.   

    看一下你的STU里面的数据,应该只有一条吧,你并没有把ListCtrl中所有的数据放入STU 里面
      

  2.   

    没看到你的代码循环取了listctrl的数据
      

  3.   

    怎么把ListCtrl中的所有数据传进去,实在是不会,麻烦你帮个忙!
      

  4.   

    怎么把ListCtrl中的所有数据传进去,实在是不会,麻烦你帮个忙! 
      

  5.   

    关键是:
    int nRow = m_listStuRecord.InsertItem(m_listStuRecord.GetItemCount(), m_num);
    有没有成功
    看看nRow 对不对
      

  6.   

    这个最好自己断点查询我们肉眼肯定没编译器强悍的fseek(fp, sizeof(REC_TOKEN), SEEK_SET);已经是添加模式的了
    感觉你fseek调用有问题