| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 595 人关注过本帖
标题:求助 急 盼望11点前能有答案 麻烦了各位
只看楼主 加入收藏
Chris_K
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-6-14
收藏
 问题点数:0 回复次数:1 
求助 急 盼望11点前能有答案 麻烦了各位
主函数
void submain(struct allstudentinfo *p_student)
{
int in;

do
{
system("cls");
in=submeun(); /*子菜单显示  */
switch(in)
{
case 1 : inputinfo(p_student); /*输入个人信息 */
break;
case 2 : modinfo(p_student); /*修改个人信息   */
break;
case 3 : aboutinfo(p_student); /*查询个人信息    */
break;
case 4 : allabout(p_student); /*查询所有信息 */
break;
case 5 : delinfo(p_student); /*删除个人信息 */
break;
case 6 : break;

default: printf("没有此选项,请按任意键返回重新选择!");
getch();
system("cls");
break;
}
}while(in!=6);
system("cls");
return ;
}

查询所有信息
void allabout(struct allstudentinfo *p_student)
{
int i;
int count;

system("cls");
if((infofile=fopen(filename,"rb"))==NULL)       /*以只读方式打开一个二进制文件 指针指向文件开头*/
{
printf("不能打开文件,请确认文件是否存在或是否损坏!");
getch();
return 0;
}
rewind(infofile);                               /*定位到文件头   */
for(count=0;fread(&p_student[count].student,sizeof(struct studentinfo),1,infofile)==1;count++)
{
continue;
}
fclose(infofile);                               /*读完后关闭文件  */
if(!count)                                      /*判断文件中是否有记录*/
{
printf("不能读取数据,请确定文件是否存在或已经成功录入数据!");
getch();
system("cls");
return 0;                                       /*反回重新操作   */
}                                               /*以下为输出记录部分*/
printf("\n\t\t\t 学生个人信息查询表\n\n");
printf("\t 以下是本系统所查询到的所有学生个人信息,如果表中找不到数据\n");
printf(" 请确认是否已经成功录入本系统!\n");
printf("----------------------------------------");
printf("----------------------------------------\n");
for(i=0;i<count;i++)                            /*利用循环输出全部的记录*/
{
printf("您正在查看第[%d]个学生的个人信息\n",i+1);
printf("\n姓 名: %s\n",p_student[i].student.name);
printf("\n性 别: %s\n",p_student[i].student.sex);
printf("\n出生日期: %s\n",p_student[i].student.birth);
printf("\n家庭住址: %s\n",p_student[i].student.adddr);
printf("\n联系电话: %s\n",p_student[i].student.poto);
printf("\n邮证编码: %s\n",p_student[i].student.dak);
printf("------------------------------------");
printf("------------------------------------\n");
printf("请按任意键继续查看信息........!");
getch();
system("cls");
}
printf("\n查询结束...");
printf("请按任意键返回!");
getch();
system("cls");
return ;
}

/**********************************删除个人信息********************************/
void delinfo(struct allstudentinfo *p_student)
{
  int i;
  int count;
  char ch;
  char *temp=NULL;                                /*初始化临时数组      */

  system("cls");                                  /*清屏  */
  if((infofile=fopen(filename,"rb"))==NULL)       /*打开文件*/
  {
    printf("不能打开文件,请确认磁盘已满或文件是否存在");
    getch();
    return 0;
  }
  rewind(infofile);                               /*将指针指向文件头记录   */
  for(count=0;fread(&p_student[count].student,sizeof(struct studentinfo),1,infofile)==1;count++)
  {                                               /*读入所有的记录*/
    continue;
  }
  fclose(infofile);                               /*关闭文件   */
  if(!count)
  {
    printf("不能读取数据,请确认已经正确录入或数据是否存在");
    getch();
    return 0;
  }
  temp=(char *)malloc(20*sizeof(char));           /*分配内存    */
  printf("请输入你要删除的学生姓名:");
  while(gets(temp)!=NULL&&temp[0]!='\0')          /*当输入不为空第一个字符不是回车时*/
  {
    for(i=0;i<count;i++)
    {
      if(!strcmp(temp,p_student[i].student.name))     /*将用户输入的和已有记录一一对比*/
      {
        system("cls");
        printf("\a\n\n\n\n\n\n\t\t 确定要删除%s的个人信息吗?(y/n)",p_student[i].student.name);
        ch=getch();
        if(ch=='n'||ch=='N')                            /*请用户确认是否删除*/
        {
          free(temp);                                     /*释放内存*/
          system("cls");
          printf("\n\n\n\n\n\n\t\t 该操作已取消.请按任意键返回!");
          getch();
          system("cls");
          return ;
        }
        for(;i<count;i++)                         /*开始删除记录*/
        {
          p_student[i].student=p_student[i+1].student;   /*从要删除的记录开始,后一条记录覆盖前一条记录*/
        }
        count--;                                  /*记录条数减一    */
        if((infofile=fopen(filename,"w+b"))==NULL) /*重新打开文件更新 */
        {
          free(temp);
          printf("不能打开文件,请确认磁盘已满或文件是否存在");
          getch();
          exit(1);
        }
        for(i=0;i<count;i++)                      /*重新写入文件文件     */
        {
          if(fwrite(&p_student[i].student,sizeof(struct studentinfo),1,infofile)!=1)
          break;
        }
          free(temp); /*释放内存  */
          system("cls");
          printf("\n\n\n\n\n\n\t\t 已成功删除该学生的个人信息.....\n");
          getch();
          return 0;


      }

    }
    printf("找不到%s的个人信息.",temp);
    printf("请重新输入(y/n)");
    ch=getch();
    if(ch=='y'||ch=='Y')
    {
      free(temp);                        /*释放未找到姓名的内存*/
      temp=(char *)malloc(sizeof(char)); /*重新分配   */
      system("cls");
      printf("请输入你要删除的学生姓名:");
      continue;
    }
    else
    {
      free(temp);                       /*释放内存*/
      system("cls");
      return ;
    }
  }
  free(temp);                           /*释放内存    */
  printf("输入有误,请按任意键返回子菜单,重新选择");
  getch();
  system("cls");
}



请问 为什么我删除一条记录后 回到上级菜单查看所有信息 会提示没有数据 关了程序再开 又有了呢 ?
搜索更多相关主题的帖子: 麻烦 
2008-06-15 21:44
快速回复:求助 急 盼望11点前能有答案 麻烦了各位
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016263 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved