课程设计之学生成绩管理系统

代码:

#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
#include<string.h>
struct student
 {
     char nu[99];
     char ss[10][30];
    long long int num;          //学号
    char cla[30];               //班级
    char name[30];              //姓名
    char xi[30];                //性别
    int s[10];                  //C语言、高数、英语、计算机原理、离散数学
    int zp[10];                 // zp1,zp2总分,总分排名
 }std[100];
 int sum=1;
 void f1(struct student std[]);
 void f2(struct student std[]);
 void f3(struct student std[]);
 void f4(struct student std[]);
 void f5(struct student std[]);
 void f6(struct student std[]);
 void f7(struct student std[]);
 void f8(struct student std[]);
 void f9(struct student std[]);
 int main()
 {
    int i,t;
    int sa;
    begin:system("cls");
    printf("\n\n\n\n\n\t\t\t\t\t     学生成绩管理系统:\n");
    printf("\t\t\t\t\t\t请进行操作:\n\t\t\t\t\t\t1-新建成绩记录文件\n\t\t\t\t\t\t2-增加学生记录\n");
    printf("\t\t\t\t\t\t3-删除\n\t\t\t\t\t\t4-修改\n\t\t\t\t\t\t5-排序\n\t\t\t\t\t\t6-查询\n\t\t\t\t\t\t7-显示内存记录\n");
    printf("\t\t\t\t\t\t8-从文件获得学生数据\n\t\t\t\t\t\t9-保存到文件\n\t\t\t\t\t\t0-\n\t\t\t\t\t\tEsc-退出程序\n");
    sa=getch();
    if(sa==49)          //新建文件
        f1(std);
    else if(sa==50)     //增加记录
        f2(std);
    else if(sa==51)     //删除
        f3(std);
    else if(sa==52)     //修改
        f4(std);
    else if(sa==53)     //排序
        f5(std);
    else if(sa==54)     //查询
        f6(std);
    else if(sa==55)     //显示
        f7(std);
    else if(sa==56)     //从文件中获得
        f8(std);
    else if(sa==57)     //保存到文件
        f9(std);
    else if(sa==27)     //退出程序
        exit(1);
    goto begin;
    return 0;
 }
void f1(struct student std[])                                                   //新建记录
{
    system("cls");
    int a;
    if(sum!=1)
    {
        printf("\t\t\t内存中有学生的成绩记录,新建文件会\n\t\t\t覆盖掉原有记录,是否将其先进行存储?\n----确认储存请按回车键\n----覆盖请按其他键位");
        a=getche();
        if(a==13)
            f9(std);
        else
            MessageBox(NULL,TEXT("原有记录已被覆盖"),TEXT("原有学生记录"),MB_OK);
    }
    sum=1;
    MessageBox(NULL,TEXT("已成功新建在内存!"),TEXT("新建"),MB_OK);
    return ;
}
 void f2(struct student std[])                                                  //增加学生
 {
     int pai[100];
     int i,t;
     int x;
     int b;
     system("cls");
     while(1)
     {
        printf("\n\n\n\t\t\t请输入学生的学号(输入0终止):\n");
        scanf("%s",&std[sum].nu);
        if(std[sum].nu[0]=='0'&&std[sum].nu[1]==NULL)
                break;
        if(strlen(std[sum].nu)>15)
        {
            MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
            continue;
        }
        std[sum].num=0;
        for(i=0;std[sum].nu[i]!=NULL;i++)
            std[sum].num=std[sum].num*10+std[sum].nu[i]-48;
        if(std[sum].num>999999999999)
        {
            MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
            continue;
        }
        printf("\t\t\t请输入学生的班级:\n");
        do
        {
            scanf("%s",&std[sum].cla);
            if(strlen(std[sum].cla)>10)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(strlen(std[sum].cla)>10);
        printf("\t\t\t请输入学生的姓名:\n");
        do
        {
            scanf("%s",&std[sum].name);
            if(strlen(std[sum].name)>10)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(strlen(std[sum].name)>10);
        printf("\t\t\t请输入学生的性别:\n");
        do
        {
            scanf("%s",&std[sum].xi);
            if(strlen(std[sum].xi)>5)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(strlen(std[sum].xi)>5);
        printf("\t\t\t请输入学生的c语言成绩:\n");
        do{
            std[sum].s[1]=0;
            scanf("%s",&std[sum].ss[1]);
            for(i=0;std[sum].ss[1][i]!=NULL;i++)
                std[sum].s[1]=std[sum].s[1]*10+std[sum].ss[1][i]-48;
            if(std[sum].s[1]>100||std[sum].s[1]<0)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[1]>100||std[sum].s[1]<0);
        printf("\t\t\t请输入学生的高数成绩:\n");
        do{
            std[sum].s[2]=0;
            scanf("%s",&std[sum].ss[2]);
               for(i=0;std[sum].ss[2][i]!=NULL;i++)
                std[sum].s[2]=std[sum].s[2]*10+std[sum].ss[2][i]-48;
            if(std[sum].s[2]>100||std[sum].s[2]<0)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[2]>100||std[sum].s[2]<0);
        printf("\t\t\t请输入学生的英语成绩:\n");
         do{
            std[sum].s[3]=0;
            scanf("%s",&std[sum].ss[3]);
            for(i=0;std[sum].ss[3][i]!=NULL;i++)
                std[sum].s[3]=std[sum].s[3]*10+std[sum].ss[3][i]-48;
            if(std[sum].s[3]>100||std[sum].s[3]<0)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[3]>100||std[sum].s[3]<0);
        printf("\t\t\t请输入学生的计算机原理成绩:\n");
        do{
            std[sum].s[4]=0;
            scanf("%s",&std[sum].ss[4]);
            for(i=0;std[sum].ss[4][i]!=NULL;i++)
                std[sum].s[4]=std[sum].s[4]*10+std[sum].ss[4][i]-48;
            if(std[sum].s[4]>100||std[sum].s[4]<0)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[4]>100||std[sum].s[4]<0);
        printf("\t\t\t请输入学生的离散数学成绩:\n");
        do{
            std[sum].s[5]=0;
            scanf("%s",&std[sum].ss[5]);
            for(i=0;std[sum].ss[5][i]!=NULL;i++)
                std[sum].s[5]=std[sum].s[5]*10+std[sum].ss[5][i]-48;
            if(std[sum].s[5]>100||std[sum].s[5]<0)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[5]>100||std[sum].s[5]<0);
        std[sum].zp[1]=(std[sum].s[1]+std[sum].s[2]+std[sum].s[3]+std[sum].s[4]+std[sum].s[5]);
        pai[sum]=std[sum].zp[1];
        sum++;
     }
     for(t=1;t<=sum;t++)
     {
         for(i=1;i<sum-t;i++)
         {
             if(pai[i]<pai[i+1])
             {
                 x=pai[i];
                 pai[i]=pai[i+1];
                 pai[i+1]=x;
             }
         }
     }
    for(t=1;t<=sum;t++)
    {
        for(i=1;i<sum;i++)
        {
            if(pai[t]==std[i].zp[1])
            {
                std[i].zp[2]=t;
                pai[t]=-1;
            }
        }
    }
    return ;
}
  void f3(struct student std[])                                                 //删除
{
    system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
     int i,t=0;
     int fa;
     int a;
     long long int xue;
     int ming;
     char name[30];
     printf("\t\t\t\t\t删除:\n");
     printf("\t\t请选择删除方式:1-按学号删除、2-按姓名删除、3-按总分名次删除:\n");
     fa=getch();
     if(fa==49)
     {
         printf("请输入要删除的学号,按回车键结束:\n");
         scanf("%lld",&xue);
         for(i=1;i<=sum;i++)
         {
             if(std[i].num==xue)
                {t=i;
                break;}
         }
     }
     else if(fa==50)
     {
         printf("请输入要删除的姓名,按回车键结束:\n");
         scanf("%s",&name);
        for(i=1;i<=sum;i++)
         {
             if(strcmp(std[i].name,name)==0)
                {t=i;
                break;}
         }
     }
    else if(fa==51)
     {
         printf("请输入要删除的名次,按回车键结束:\n");
         scanf("%d",&ming);
        for(i=1;i<=sum;i++)
         {
             if(ming==std[i].zp[2])
                {t=i;
                break;}
         }
     }
     if(t==0)
     {
        MessageBox(NULL, TEXT("未找到,请检查输入!"), TEXT("错误"), MB_OK);         //跳出窗口
        return;
     }
    printf("待删除者信息为:\n");
    printf("学号\t  班级      姓名\t\t性别   C语言  高数   英语  计算机原理 离散数学\n");
    printf("%-10lld%-10s%-20s%-8s%-8d%-8d%-8d%-8d%-8d\n",std[t].num,std[t].cla,std[t].name,std[t].xi,std[t].s[1],std[t].s[2],std[t].s[3],std[t].s[4],std[t].s[5]);
    printf("确认删除请按回车键,取消请按其他键位\n");
    a=getch();
    if(a!=13)
        return ;
     for(i=t;i<sum;i++)
     {
        std[99]=std[i];
        std[i]=std[i+1];
        std[i+1]=std[99];
     }
     sum--;
    MessageBox(NULL, TEXT("删除成功!"), TEXT("删除"), MB_OK);         //跳出窗口
    return ;
}
void f4(struct student std[])                                                   //修改信息
{
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    long long int gai;
    int i,t=0;
    int ji;
    int a;
    system("cls");
    printf("请键入被修改者学号(以回车键结束):\n");
    scanf("%lld",&gai);
    for(i=1;i<=sum;i++)
        if(std[i].num==gai)
            t=i;
    if(t==0)
    {
        MessageBox(NULL, TEXT("未找到待修改者!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    printf("待修改者信息为:\n");
    printf("学号\t  班级      姓名\t\t性别   C语言  高数   英语  计算机原理 离散数学\n");
    printf("%-10lld%-10s%-20s%-8s%-8d%-8d%-8d%-8d%-8d\n",std[t].num,std[t].cla,std[t].name,std[t].xi,std[t].s[1],std[t].s[2],std[t].s[3],std[t].s[4],std[t].s[5]);
    printf("确认修改请按回车键,取消修改请按其他键位\n");
    a=getch();
    if(a==13)
    {
         printf("请依次键入修改者C语言、高数、英语、计算机原理、离散数学各科成绩\n");
        scanf("%d%d%d%d%d",&std[t].s[1],&std[t].s[2],&std[t].s[3],&std[t].s[4],&std[t].s[5]);
        MessageBox(NULL, TEXT("修改成功"), TEXT("修改学生信息及成绩"), MB_OK);         //跳出窗口
    }
    printf("继续修改请按回车,返回主菜单请按Esc键\n");
    ji=getch();
    if(ji==13)
        f4(std);
    else
        return;
}
void f5(struct student std[])                                                   //分方式排序
{
    int i,t;
    int shun;
    system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    printf("\n\n\n\t  请选择排序方式:\n\t1-按学号的升序进行排序\n\t2-按学号的降序进行排序\n");
    shun=getch();
    if(shun==49)
    {
        for(i=1;i<=sum;i++)
            for(t=1;t<sum-i;t++)
        {
            if(std[t].num>std[t+1].num)
            {
                std[sum+1]=std[t];
                std[t]=std[t+1];
                std[t+1]=std[sum+1];
            }
        }
    }
    else
    {
        for(i=1;i<=sum;i++)
            for(t=1;t<sum-i;t++)
        {
            if(std[t].num<std[t+1].num)
            {
                std[sum+1]=std[t];
                std[t]=std[t+1];
                std[t+1]=std[sum+1];
            }
        }
    }
    MessageBox(NULL, TEXT("排序完成!"), TEXT("排序"), MB_OK);                   //跳出窗口
    return ;
}
 void f6(struct student std[])                                                  //分方式查询
 {
     system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
     int i,t=0;
     int fa;
     long long int xue;
     int ming;
     char name[30];
     printf("\t\t\t\t\t查询:\n");
     printf("\t\t请选择查询方式:1-学号查询、2-姓名查询、3-总分名次查询:\n");
     fa=getch();
     if(fa==49)
     {
         printf("请输入要查询的学号,按回车键结束:\n");
         scanf("%lld",&xue);
         for(i=1;i<=sum;i++)
         {
             if(std[i].num==xue)
                {t=i;
                break;}
         }
     }
     else if(fa==50)
     {
         printf("请输入要查询的姓名,按回车键结束:\n");
         scanf("%s",&name);
        for(i=1;i<=sum;i++)
         {
             if(strcmp(std[i].name,name)==0)
                {t=i;
                break;}
         }
     }
    else if(fa==51)
     {
         printf("请输入要查询的名次,按回车键结束:\n");
         scanf("%d",&ming);
        for(i=1;i<=sum;i++)
         {
             if(ming==std[i].zp[2])
                {t=i;
                break;}
         }
     }
     if(t==0)
     {
        MessageBox(NULL, TEXT("未找到,请检查输入!"), TEXT("错误"), MB_OK);         //跳出窗口
        return;
     }
    printf("学号\t  班级      姓名\t\t性别   C语言  高数   英语  计算机原理 离散数学\n");
    printf("%-10lld%-10s%-20s%-8s%-8d%-8d%-8d%-8d%-8d\n",std[t].num,std[t].cla,std[t].name,std[t].xi,std[t].s[1],std[t].s[2],std[t].s[3],std[t].s[4],std[t].s[5]);
    printf("\t\t\t按任意键返回主菜单......");
    t=getch();
     return ;
 }
 void f7(struct student std[])                                       //显示
 {
    system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    int i,t;
    printf("\n\n\t*************************************************************************************************\n");
    printf("\t\t\t\t\t\t   学生信息及成绩\n");
    printf("\t学号\t  班级      姓名\t\t性别     C语言  高数   英语  计算机原理 离散数学  总分   名次\n");
    for(i=1;i<sum;i++)
        printf("\t%-10lld%-10s%-20s%-8s   %-8d%-8d%-8d%-8d%-8d%-8d%-8d\n",std[i].num,std[i].cla,std[i].name,std[i].xi,std[i].s[1],std[i].s[2],std[i].s[3],std[i].s[4],std[i].s[5],std[i].zp[1],std[i].zp[2]);
    printf("\t\t按任意键返回主菜单......");
    t=getch();
    return ;
 }
void f8(struct student std[])
{
    FILE * fp=fopen("student.txt","r");
    int pai[100];
    int i,t,x;
    if((fp)==NULL)
    {
        MessageBox(NULL, TEXT("没有找到学生成绩文件!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    while(fscanf(fp,"%lld %s %s %s %d %d %d %d %d",&std[sum].num,std[sum].cla,std[sum].name,std[sum].xi,&std[sum].s[1],&std[sum].s[2],&std[sum].s[3],&std[sum].s[4],&std[sum].s[5])!=EOF)
    {
        std[sum].zp[1]=(std[sum].s[1]+std[sum].s[2]+std[sum].s[3]+std[sum].s[4]+std[sum].s[5]);
        pai[sum]=std[sum].zp[1];
        sum++;
    }
    for(t=1;t<=sum;t++)
     {
         for(i=1;i<sum-t;i++)
         {
             if(pai[i]<pai[i+1])
             {
                 x=pai[i];
                 pai[i]=pai[i+1];
                 pai[i+1]=x;
             }
         }
     }
    for(t=1;t<=sum;t++)
    {
        for(i=1;i<sum;i++)
        {
            if(pai[t]==std[i].zp[1])
            {
                std[i].zp[2]=t;
                pai[t]=-1;
            }
        }
    }
    MessageBox(NULL, TEXT("从文件获得数据成功!"), TEXT("从文件获得数据"), MB_OK);         //跳出窗口
    fclose(fp);
    return ;
}
void f9(struct student std[])
{
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    int a;
    printf("存储方式:\n1-默认文件名存储\n2-自定义文件名存储\n");
    a=getch();
    FILE * fp;
    if(a==50)
    {
        char wenjian[100];
        printf("请输入您想要存放在或者新建的文本文件名字,例如student.txt\n");
        gets(wenjian);
        fp=fopen(wenjian,"w");
    }
    else
        fp=fopen("student1.txt","w");
    int i;
    fprintf(fp,"\n\n\t*************************************************************************************************\n");
    fprintf(fp,"\t\t\t\t\t\t   学生信息及成绩\n");
    fprintf(fp,"\t学号\t  班级      姓名\t\t性别     C语言  高数   英语  计算机原理 离散数学  总分   名次\n");
    for(i=1;i<sum;i++)
        fprintf(fp,"\t%-10lld%-10s%-20s%-8s   %-8d%-8d%-8d%-8d%-8d%-8d%-8d\n",std[i].num,std[i].cla,std[i].name,std[i].xi,std[i].s[1],std[i].s[2],std[i].s[3],std[i].s[4],std[i].s[5],std[i].zp[1],std[i].zp[2]);
    fclose(fp);
    MessageBox(NULL, TEXT("保存数据成功!"), TEXT("保存数据"), MB_OK);         //跳出窗口
    return ;
}


运行:













猜你喜欢

转载自blog.csdn.net/qq_41170600/article/details/80213921