C语言学生成绩管理

#include
#include
#include
#define N 3
#define M 4
#define B 2
int k=1;//定义全局变量
struct Student//定义结构体变量
{
    int num;    //学生编号
    char name[15];//学生名字
    int score[3];//学生三科成绩
};
int main()
{
    void menu();//声明菜单函数
    while(k==1)//直到k=0停止循环
    {
        menu();
    }
    system("pause");//系统中止
    return 0;
}
void menu()//定义菜单函数
{
    struct Student stu[3];//结构体数组
    void scaf(struct Student stu[]);//声明输入函数
    void high(struct Student stu[]);//声明最高函数
    void low(struct Student stu[]);//声明最低函数
    void average(struct Student stu[]);//声明平均数函数
    void ave(struct Student stu[]);//声明最低平均数函数
    void aver(struct Student stu[]);//声明最高平均数函数
    void increase(struct Student stu[]);//增加一名学生信息
    void delet(struct Student stu[]);//删除一名学生信息
    void modify(struct Student stu[]);//修改一名学生信息
    int num;//定义用户输入变量
    printf("\n\n                                                                              \n\n");
    printf("**************************************************************\n");
    printf("*                       学习管理系统                                       *\n");
    printf("*                                                                                    *\n");
    printf("*        * * * * * * * * * *系统功能菜单* * * * * * * * * *        *\n");
    printf("*             ------------------------------------------------              *\n");
    printf("*             1.输入学生成绩        |   2.求最高总分              *\n");
    printf("*             3.求最低总分            |   4.求平均分                 *\n");
    printf("*             5.最低平均分            |   6.最高平均分              *\n");
    printf("*             7.增加一名学生信息 |   8.删除一名学生信息   *\n");
    printf("*             9.输入名字修改信息  |   10.退出                      *\n");
    printf("*            ------------------------------------------------                *\n");
    printf("**************************************************************\n");
    printf("请选择菜单编号(在选择2~9之前,应先选择1):\n");
    scanf("%d",&num);
    switch(num)//多分支调用各个函数
    {
        case 1:
            scaf(stu);
            break;
        case 2:
            high(stu);
            break;
        case 3:
            low(stu);
            break;
        case 4:
            average(stu);
            break;
        case 5:
            ave(stu);
            break;
        case 6:
            aver(stu);
            break;
        case 7:
            increase(stu);
            break;
        case 8:
            delet(stu);
            break;
        case 9:
            modify(stu);
            break;
        case 10:
            k=0;
            break;
        default:
            printf("请在0~10之间选择!\n");
    }
}
void scaf(struct Student stu[])//定义输入函数
{
    FILE *fp;//定义文件指针
    int i;//定义循环变量
    printf("请输入学生信息:\n");
    for(i=0;i     {
        scanf("%d %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
    }
    /* 打开文件 */
    if((fp=fopen("student","w"))==NULL)
    {
        printf("打开错误!\n");
    }
    for(i=0;i     {
        if(fwrite(&stu[i],sizeof(int),1,fp)!=1)//写入学生信息
        {
            printf("写入错误!\n");
        }
    }
    /* 关闭文件 */
    fclose(fp);
    /*再次打开文件 */
    if((fp=fopen("student","r"))==NULL)
    {
        printf("打开错误!\n");
    }
    for(i=0;i     {
        fread(&stu[i],sizeof(int),1,fp);
        printf("%d %s %d %d %d \n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
    }
    /*再次关闭文件 */
    fclose(fp);
}
void high(struct Student stu[])//定义最高总分函数
{
    FILE *fp;//定义文件指针
    int max,i,p=1;//定义最大值,循环变量和位置初始值
    int b[N];//定义新数组存放总分
    for(i=0;i     {
        b[i]=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
    }
    max=b[0];//令第一个值为最大值
    for(i=1;i     {
        if(b[i]>max)
        {
            max=b[i];
            p=i+1;
        }
    }
    /* 打开文件 */
    if((fp=fopen("student","w"))==NULL)
    {
        printf("打开错误!\n");
    }
        if(fwrite(&p,sizeof(int),1,fp)!=1)//写入位置变量
        {
            printf("写入错误!\n");
        }
        if(fwrite(&stu[p-1],sizeof(struct Student),1,fp)!=1)//写入学生信息
        {
            printf("写入错误!\n");
        }
        if(fwrite(&max,sizeof(int),1,fp)!=1)//写入最高总分
        {
            printf("写入错误!\n");
        }
        /* 关闭文件 */
    fclose(fp);
    /* 打开文件 */
    if((fp=fopen("student","r"))==NULL)
    {
        printf("打开错误!\n");
    }
        fread(&p,sizeof(int),1,fp);//读出位置变量
        fread(&stu[p-1],sizeof(struct Student),1,fp);//读出对应学生信息
        fread(&max,sizeof(int),1,fp);//读出最高总分
        printf("最高总分是第%d学生\n",p);
        printf("这位学生信息是:\n");
        printf("%d %s %d %d %d \n",stu[p-1].num,stu[p-1].name,stu[p-1].score[0],stu[p-1].score[1],stu[p-1].score[2]);
        printf("总分是%d\n",max);
        /* 关闭文件*/
    fclose(fp);
}
void low(struct Student stu[])//定义最低函数
{
    FILE *fp;//文件指针
    int i,t=1;//定义循环变量和位置初始值
    int a[N];//定义新数组存放总分
    int min;//定义最低总分
    for(i=0;i     {
        a[i]=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
    }
    min=a[0];//令第一个总分为最低总分
    for(i=1;i     {
        if(a[i]         {
            min=a[i];
            t=i+1;
        }
    }
    /*打开文件*/
    if((fp=fopen("student","w"))==NULL)
    {
        printf("打开错误!\n");
    }
        if(fwrite(&t,sizeof(int),1,fp)!=1)//写入位置变量
        {
            printf("写入错误!\n");
        }
        if(fwrite(&stu[t-1],sizeof(struct Student),1,fp)!=1)//写入对应学生信息
        {
            printf("写入错误!\n");
        }
        if(fwrite(&min,sizeof(int),1,fp)!=1)//写入最低总分
        {
            printf("写入错误!\n");
        }
        /* 关闭文件 */
    fclose(fp);
    /* 打开文件 */
    if((fp=fopen("student","r"))==NULL)
    {
        printf("打开错误!\n");
    }
        fread(&t,sizeof(int),1,fp);//读出位置变量
        fread(&stu[t-1],sizeof(struct Student),1,fp);//读出对应学生的信息
        fread(&min,sizeof(int),1,fp);//读出最低总分信息
        printf("最低总分是第%d名学生\n",t);
        printf("这名学生信息是:%d %s %d %d %d\n",stu[t-1].num,stu[t-1].name,stu[t-1].score[0],stu[t-1].score[1],stu[t-1].score[2]);
        printf("最低总分是%d\n",min);
        /* 关闭文件*/
    fclose(fp);
}
void average(struct Student stu[])//定义平均分函数
{
    FILE *fp;//定义文件指针
    int i;//定义循环变量
    int average[3];//定义存放平均分数组
    for(i=0;i     {
        average[i]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
    }
    /*打开文件*/
    if((fp=fopen("student","w"))==NULL)
        {
            printf("打开错误!\n");
            exit(0);
        }
        for(i=0;i         {
            if(fwrite(&average[i],sizeof(struct Student),1,fp)!=1)//写入平均分信息
            {
                printf("写入错误!\n");
            }
        }
        /*关闭文件*/
        fclose(fp);
        /*打开文件*/
        if((fp=fopen("student","r"))==NULL)
        {
            printf("打开错误!\n");
            exit(0);
        }
        for(i=0;i         {
            fread(&average[i],sizeof(struct Student),1,fp);//读出平均分信息
            printf("第%d位同学的平均分是:\n",i+1);
            printf("%d\n",average[i]);
        }
        fclose(fp);
}
void ave(struct Student stu[])//定义最低平均分函数
{
    FILE *fp;//定义文件指针
    int i,p=1;//定义循环变量和位置初始值
    int average[3];//定义存放平均分数组
    int min;//定义最低平均分变量
    for(i=0;i     {
        average[i]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
    }
    min=average[0];//令第一个平均分为最低平均分
    for(i=1;i     {
        if(min>average[i])
        {
            min=average[i];
            p=i+1;
        }
    }
    /*打开文件*/
        if((fp=fopen("student","w"))==NULL)
        {
            printf("打开错误!\n");
            exit(0);
        }
        if(fwrite(&p,sizeof(int),1,fp)!=1)//写入位置变量
        {
            printf("写入错误!\n");
        }
        if(fwrite(&stu[p-1],sizeof(struct Student),1,fp)!=1)//写入对应学生信息
        {
            printf("写入错误!\n");
        }
        if(fwrite(&min,sizeof(int),1,fp)!=1)//写入最低平均分
        {
            printf("写入错误!\n");
        }
        /*关闭文件*/
        fclose(fp);
        /*打开文件*/
        if((fp=fopen("student","r"))==NULL)
        {
            printf("打开错误!\n");
            exit(0);
        }
        fread(&p,sizeof(int),1,fp);//读出位置信息
        fread(&stu[p-1],sizeof(struct Student),1,fp);//读出对应学生信息
        fread(&min,sizeof(int),1,fp);//读出对应最低平均分
        printf("平均分最低的同学是第%d位:\n",p);
        printf("这位同学的信息是:%d %s %d %d %d  \n",stu[p-1].num,stu[p-1].name,stu[p-1].score[0],stu[p-1].score[1],stu[p-1].score[2]);
        printf("平均分最低是:%d\n",min);
        /*关闭文件*/
        fclose(fp);
}
void aver(struct Student stu[])//定义最高平均分
{
    FILE *fp;
    int i,p=1;
    int average[3];
    int max;
    for(i=0;i     {
        average[i]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
    }
    max=average[0];
    for(i=1;i     {
        if(max         {
            max=average[i];
            p=i+1;
        }
    }
        if((fp=fopen("student","w"))==NULL)
        {
            printf("打开错误!\n");
            exit(0);
        }
        if(fwrite(&p,sizeof(int),1,fp)!=1)
        {
            printf("写入错误!\n");
        }
        if(fwrite(&stu[p-1],sizeof(struct Student),1,fp)!=1)
        {
            printf("写入错误!\n");
        }
        if(fwrite(&max,sizeof(int),1,fp)!=1)
        {
            printf("写入错误!\n");
        }
        fclose(fp);
        if((fp=fopen("student","r"))==NULL)
        {
            printf("打开错误!\n");
            exit(0);
        }
        fread(&p,sizeof(int),1,fp);
        fread(&stu[p-1],sizeof(struct Student),1,fp);
        fread(&max,sizeof(int),1,fp);
        printf("平均分最高的同学是第%d位:\n",p);
        printf("这位同学的信息是:%d %s %d %d %d  \n",stu[p-1].num,stu[p-1].name,stu[p-1].score[0],stu[p-1].score[1],stu[p-1].score[2]);
        printf("平均分最高是:%d\n",max);
        fclose(fp);
}
void increase(struct Student stu[])//定义增加一个学生信息函数
{
    FILE *fp;//文件指针
    int i;//定义循环变量
    struct Student stu1[M];//定义新数组
    for(i=0;i     {
        stu1[i]=stu[i];
    }
    printf("请输入新的同学信息:\n");
    scanf("%d %s %d %d %d",&stu1[3].num,stu1[3].name,&stu1[3].score[0],&stu1[3].score[1],&stu1[3].score[2]);
    if((fp=fopen("student","w"))==NULL)
    {
        printf("打开文件出错!\n");
        exit(0);
    }
    for(i=0;i     {
        if(fwrite(&stu1[i],sizeof(struct Student),1,fp)!=1)
        {
            printf("写入错误!\n");
        }
    }
    fclose(fp);
    rewind(fp);
    if((fp=fopen("student","r"))==NULL)
    {
        printf("打开文件出错!\n");
        exit(0);
    }
    for(i=0;i     {
        fread(&stu1[i],sizeof(struct Student),1,fp);
        printf("第%d位同学的信息是:\n",i+1);
        printf("%d %s %d %d %d \n",stu1[i].num,stu1[i].name,stu1[i].score[0],stu1[i].score[1],stu1[i].score[2]);
    }
    fclose(fp);
}
void delet(struct Student stu[])//定义删除一名学生信息函数
{
    FILE *fp;
    int i,p;
    char name[15];
    struct Student stu2[B];
    printf("请输入您要删除对象的名字:\n");
    scanf("%s",name);
    for(i=0;i     {
    if(strcmp(name,stu[i].name)==0)
    {
        p=i;
    }
    }
    if(p==0)
    {
        for(i=1;i         {
            stu2[i-1]=stu[i];
        }
    }
    if(p==2)
    {
        for(i=0;i         {
            stu2[i]=stu[i];
        }
    }
    if(p==1)
    {
        stu2[0]=stu[0];
        stu2[1]=stu[2];
    }
    if((fp=fopen("student","w"))==NULL)
    {
        printf("打开错误!\n");
        exit(0);
    }
    for(i=0;i     {
        if(fwrite(&stu2[i],sizeof(struct Student),1,fp)!=1)
        {
            printf("写入错误!\n");
        }
    }
    fclose(fp);
    if((fp=fopen("student","r"))==NULL)
    {
        printf("打开错误!\n");
        exit(0);
    }
    for(i=0;i     {
        fread(&stu2[i],sizeof(struct Student),1,fp);
        printf("%d %s %d %d %d",stu2[i].num,stu2[i].name,stu2[i].score[0],stu2[i].score[1],stu2[i].score[2]);
    }
    fclose(fp);
}
void modify(struct Student stu[])//修改一名学生信息
{
    FILE *fp;//定义文件指针
    int i;//定义循环变量i
    char name[15];//定义姓名数组
    int p;//定义位置变量
    struct Student stu3[N];
    printf("输入请修改的学生姓名:\n");
    scanf("%s",name);
    for(i=0;i     {
        if(strcmp(name,stu[i].name)==1)
        {
            p=i;
        }
    }
    if(p==0)
    {
        for(i=1;i         {
            stu3[i]=stu[i];
        }
        printf("请输入修改学生的信息:\n");
        scanf("%d %s %d %d %d\n",&stu3[0].num,stu3[0].name,&stu3[0].score[0],&stu3[0].score[1],&stu3[0].score[2]);
    }
    if(p==1)
    {
        stu3[0]=stu[0];
        stu3[2]=stu[2];
        printf("请输入修改学生的信息:\n");
        scanf("%d %s %d %d %d\n",&stu3[1].num,stu3[1].name,&stu3[1].score[0],&stu3[1].score[1],&stu3[1].score[2]);
    }
    if(p==2)
    {
        for(i=0;i<(N-1);i++)
        {
            stu3[i]=stu[i];
        }
        printf("请输入修改学生的信息:\n");
        scanf("%d %s %d %d %d\n",&stu3[2].num,stu3[2].name,&stu3[2].score[0],&stu3[2].score[1],&stu3[2].score[2]);
    }

        if((fp=fopen("student","w"))==NULL)
        {
            printf("打开文件错误!\n");
            exit(0);
        }
        for(i=0;i         {
        if(fwrite(&stu3[i],sizeof(struct Student),1,fp)!=1)
        {
            printf("写入错误!\n");
        }
        }
        fclose(fp);
        if((fp=fopen("student","r"))==NULL)
        {
            printf("打开错误!\n");
            exit(0);
        }
        for(i=0;i         {
            fread(&stu3[i],sizeof(struct Student),1,fp);
        }
        printf("重新修改后的学生信息:");
        for(i=0;i         {
            printf("%d %s %d %d %d\n",stu3[i].num,stu3[i].name,stu3[i].score[0],stu3[i].score[1],stu3[i].score[2]);
        }
        fclose(fp);
}

你可能感兴趣的:(C语言学生成绩管理)