首页 新闻 赞助 找找看

为什么我输出的文件数据有错误代码

0
悬赏园豆:10 [已关闭问题] 关闭于 2017-04-30 22:02
#include<stdio.h>
#include<string.h>
#include<windows.h>
/*定义学生结构体*/
struct student
{    
    char ID[10];
    char Name[20];    
    float College_english;    
    float Computer;    
    float English;    
};
/*声明学生数组及学生数量*/
struct student students[100];
int num=0;
/*通过学号返回数组下标************************************************/
int student_SearchByIndex(char id[])
{    
    int i;    
    for (i=0;i<num;i++)    
    {        
        if (strcmp(students[i].ID,id)==0)        
        {            
            return i;        
        }    
    }    
    return -1;
}
/*通过姓名返回数组下标*************************************************/
int student_SearchByName(char name[])
{    
    int i;    
    for(i=0;i<num;i++)    
    {        
        if(strcmp(students[i].Name,name)==0)        
        {            
            return i;        
        }    
    }    
    return  -1;
}
/*显示单条学生记录******************************************************/
void student_DisplaySingle(int index)
{       
    printf("---------------------------------------------------------------\n");    
    printf("姓名\t\t%s \n学号\t\t%s \n大学英语 \t%.2f \n",students[index].ID,students[index].Name,students[index].College_english);
    printf("计算机\t\t%.2f \n英语\t\t%.2f\n",students[index].Computer,students[index].English);
}
/*增加学生信息**********************************************************/
void student_Insert()
{    
    char id[20];
    while(1)    
    {        
        printf("\n目前已录入%d位学生!\n\n",num+1);
        printf("请输入学号:");        
        scanf("%10s",students[num].ID);
        strcpy(id,students[num].ID);
        if(student_SearchByIndex(id)!=-1)
        {
            printf("学号不能相同!!\n\n");
            continue;
        }        
        getchar();        
        printf("请输入姓名:");        
        scanf("%20s",students[num].Name);        
        getchar();        
        printf("请输入大学英语成绩:");        
        scanf("%3f",&students[num].College_english);        
        getchar();        
        printf("请输入计算机成绩:");        
        scanf("%3f",&students[num].Computer);        
        getchar();        
        printf("请输入英语成绩:");        
        scanf("%3f",&students[num].English);        
        getchar();        
        num++;        
        printf("\n是否继续?(y/n)\n");        
        if(getchar()=='n')        
        {            
            break;        
        }
    }
}
/*修改学生信息*****************************************************/
void student_Modify()
{    
    while(1)    
    {        
        char id[20];        
        int index;        
        printf("请输入要修改的学生学号:");        
        scanf("%10s",id);        
        getchar();        
        index=student_SearchByIndex(id);//17行        
        if(index==-1)        
        {            
            printf("学生不存在!\n");        
        }        
        else        
        {            
            printf("你要修改的学生信息为:\n");            
            student_DisplaySingle(index);//43行            
            printf("--请输入新值--\n");                
            printf("请输入学号:");            
            scanf("%10s",students[index].ID);            
            getchar();            
            printf("请输入姓名:");            
            scanf("%20s",students[index].Name);            
            getchar();            
            printf("请输入成绩:");            
            scanf("%3f",&students[index].College_english);            
            getchar();             
            printf("请输入成绩:");            
            scanf("%3f",&students[index].Computer);            
            getchar();            
            printf("请输入成绩:");            
            scanf("%3f",&students[index].English);            
            getchar();        
        }        
        printf("\n是否继续?(y/n)\n");        
        if(getchar()=='n')        
        {            
            break;        
        }
    }
}
/*删除学生信息*************************************************/
void student_Delete()
{    
    int i;        
    char id[20];    
    int index;    
    while(1)    
    {        
        printf("请输入要删除的学生学号:");        
        scanf("%10s",id);        
        getchar();        
        index=student_SearchByIndex(id);//17行        
        if (index==-1)        
        {            
            printf("学生不存在!\n");        
        }        
        else        
        {            
            printf("你要删除的学生信息为:\n");            
            student_DisplaySingle(index);//43行            
            printf("\n是否真的删除?(y/n)\n");            
            if (getchar()=='y')            
            {                
                for(i=index;i<num-1;i++)                
                {                    
                    students[i]=students[i+1];//把后面对象向前移动                
                }                
                num--;    
                printf("删除成功!");        
            }
            getchar();        
        }        
        printf("\n是否继续?(y/n)\n");        
        if(getchar()=='n')        
        {            
            break;        
        }
    }
}    
/*按姓名查询********************************************************/
void student_SelectByName()
{            
    char name[20];    
    int index;    
    while(1)    
    {        
        printf("请输入要查的学生姓名:");        
        scanf("%20s",name);        
        getchar();        
        index=student_SearchByName(name);        
        if (index==-1)        
        {            
            printf("学生不存在!\n");        
        }        
        else        
        {            
            printf("你要查询的学生信息为:\n");            
            student_DisplaySingle(index);        
        }        
        printf("\n是否继续?(y/n)\n");        
        if(getchar()=='n')        
        {            
            break;        
        }    
    }
}
/*按学号查询*******************************************************/
void student_SelectByID()
{            
    char id[10];    
    int index;    
    while(1)    
    {        
        printf("请输入要查的学生学号:");        
        scanf("%10s",id);        
        getchar();        
        index=student_SearchByIndex(id);        
        if(index==-1)        
        {            
            printf("学生不存在!\n");        
        }        
        else        
        {            
            printf("你要查询的学生信息为:\n");            
            student_DisplaySingle(index);        
        }        
        printf("\n是否继续?(y/n)\n");        
        if(getchar()=='n')        
        {            
            break;        
        }    
    }
}
/*输入任意课程名和分数段统计学生状况*****************************************/
void Any()
{
    char subject[20];        
    float a,b;        
    char College_english[20]={"大学英语"};        
    char Computer[20]={"计算机"};        
    char English[20]={"英语"};
    int i,n;        
    do
    {        

        printf("请输入学科(大学英语、计算机、英语)\n");        
        scanf("%s",subject);        
        printf("请输入成绩分数段(空格隔开)\n");        
        scanf("%3f %3f",&a,&b);
        printf("\n");        
        for(i=0;i<num;i++)        
        {            
            if(strcmp(subject,College_english)==0 && students[i].College_english>=a && students[i].College_english<=b)            
            {                
                printf("姓名:%s  学号:%s  ",students[i].Name,students[i].ID);                
                printf("大学英语:%.2f  计算机:%.2f  英语:%.2f\n",students[i].College_english,students[i].Computer,students[i].English);            
            }            
            if(strcmp(subject,Computer)==0 && students[i].Computer>=a && students[i].Computer<=b)            
            {                
                printf("姓名:%s  学号:%s  ",students[i].Name,students[i].ID);            
                printf("大学英语:%.2f  计算机:%.2f  英语:%.2f\n",students[i].College_english,students[i].Computer,students[i].English);            
            }            
            if(strcmp(subject,English)==0 && students[i].English>=a && students[i].English<=b)            
            {                
                printf("姓名:%s  学号:%s  ",students[i].Name,students[i].ID);                
                printf("大学英语:%.2f  计算机:%.2f  英语:%.2f\n",students[i].College_english,students[i].Computer,students[i].English);            
            }        
        }            
        printf("\n1.继续  0.退出      \n");        
        scanf("%d",&n);    
    }while(n==1);
}
/*按大学英语成绩排序*************************************/
void student_SortByCollege_english()
{    
    int i,j,index;    
    struct student tmp;    
    printf("\n\t\t\t共%d名学生\n",num);
    for(i=0;i<num;i++)    
    {        
        for(j=1;j<num-i;j++)        
        {            
            if(students[j-1].College_english<students[j].College_english)            
            {                
                tmp=students[j-1];                
                students[j-1]=students[j];                
                students[j]=tmp;            
            }        
        }
    }
    for(i=0;i<num;i++)
    {
        index=i;
        student_DisplaySingle(index);
        printf("\t\t\t排名:%d\n",i+1);
    }

}
/*按计算机成绩排序**************************************/
void student_SortByComputer()
{    
    int i,j,index;    
    struct student tmp;
    printf("\n\t\t\t共%d名学生\n",num);    
    for(i=0;i<num;i++)    
    {        
        for(j=1;j<num-i;j++)        
        {            
            if(students[j-1].Computer<students[j].Computer)            
            {                
                tmp=students[j-1];                
                students[j-1]=students[j];                
                students[j]=tmp;            
            }        
        }
    }
    for(i=0;i<num;i++)
    {
        index=i;
        student_DisplaySingle(index);
        printf("\t\t\t排名:%d\n",i+1);
    }
}
/*按英语成绩排序*****************************************/
void student_SortByEnglish()
{    
    int i,j,index;    
    struct student tmp;    
    printf("\n\t\t\t共%d名学生\n",num);
    for(i=0;i<num;i++)    
    {        
        for(j=1;j<num-i;j++)        
        {            
            if(students[j-1].English<students[j].English)            
            {                
                tmp=students[j-1];                
                students[j-1]=students[j];                
                students[j]=tmp;            
            }        
        }
    }
    for(i=0;i<num;i++)
    {
        index=i;
        student_DisplaySingle(index);
        printf("\t\t\t排名:%d\n",i+1);
    }
}
/*将学生信息写入文件******************************************/
void IO_WriteInfo()
{    
    FILE  *fp;    
    int i;    
    if((fp=fopen("Database.txt","w"))==NULL)    
    {           
        printf("不能打开文件!\n");        
        return;    
    }    
    for(i=0;i<num;i++)    
    {        
        if(fwrite(&students[i],sizeof(struct student),1,fp)!=1)        
        {            
            printf("写入文件错误!\n");        
        }    
    }    
    fclose(fp);
}
/*主程序**************************************************/
int main()
{    
    int choice;    
    while(1)    
    {    
        /*主菜单*/        
        printf("\n------ 学生成绩管理系统------\n\n");        
        printf("1.  增加学生记录\n");        
        printf("2.  修改学生记录\n");        
        printf("3.  删除学生记录\n");        
        printf("4.  按姓名查询学生记录\n");        
        printf("5.  按学号查询学生记录\n");        
        printf("6.  输入任意课程名和分数段统计学生状况\n");        
        printf("7.  按大学英语成绩排序\n");        
        printf("8.  按计算机成绩排序\n");        
        printf("9.  按英语成绩排序\n");        
        printf("10. 退出\n\n");        
        printf("请选择(1-10):     ");        
        scanf("%d",&choice);        
        getchar();        
        switch(choice)        
        {        
            case 1: student_Insert();break;//50行        
            case 2: student_Modify();break;//78行        
            case 3: student_Delete();break;//121行        
            case 4: student_SelectByName();break;//159行        
            case 5: student_SelectByID();break;//186行        
            case 6: Any();break;//213行        
            case 7: student_SortByCollege_english();break;//251行
            case 8:  student_SortByComputer();break;//269行        
            case 9:  student_SortByEnglish();break;//287行  
            case 10: return 0;         
            default: printf("输入有误!");    
        }        
        IO_WriteInfo();//305行
        system("pause");
        system("cls");    
    }
}
凉面小五的主页 凉面小五 | 菜鸟二级 | 园豆:202
提问于:2016-12-17 16:24
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册