求助 急 盼望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");
}
请问 为什么我删除一条记录后 回到上级菜单查看所有信息 会提示没有数据 关了程序再开 又有了呢 ?