学生成绩管理系统

##C语言 简单学生成绩管理系统 适用初学者

<textarea readonly="readonly" name="code" class="c"> 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 30
#define M 6
typedef struct student
{
    long studentID;
    char studentName[10];
    int score[M];
}STUDENT;
void PrintMenu();
void InputScore(STUDENT stu[], int n, int m);
void CourseSumAndAver(STUDENT stu[], int n, int m, int sum[], float aver[]);
void PrintCourseSumAndAver(int m, int sum[], float aver[]);
void StudentSumAndAver(STUDENT stu[], int n, int m, int sum[], float aver[]);
void PrintStudentSumAndAver(STUDENT stu[], int n, int sum[], float aver[]);
void SortFromHighToLow(STUDENT stu[], int sum[], int n);
void SortFromLowToHigh(STUDENT stu[], int sum[], int n);
void SortByID(STUDENT stu[], int n);
void SortByName(STUDENT stu[], int n);
void PrintScore(STUDENT stu[], int n, int m);
int SearchByID(STUDENT stu[], int n, int a);
int SearchByName(STUDENT stu[], int n, char b[]);
void PrintRankAndScore(STUDENT stu[], int m, int pos);
void AnalySizeDate(STUDENT stu[], int n, int m);
void PrintFinalResult(STUDENT stu[], int n, int m);
void WritetoFILE(STUDENT stu[], int n);
int ReadfromFile(STUDENT stu[]);int main()
{
    STUDENT stu[N];
    int choice;
    char pos;
    int n, m, a;
    int sum[N] = {0};
    float aver[] = {0.0};
    char b[10];    printf("hou many student?\n");
    scanf("%d", &n);
    printf("hou many subject?\n");
    scanf("%d", &m);    PrintMenu();
    while(1)
    {
        scanf("%d", &choice);
        switch(choice)
        {
        case 1:
            printf("输入每个学生的学号,姓名,各科成绩:\n");
            InputScore(stu, n, m);
            break;
        case 2:
            printf("每门课程的总分及平均分\n");
            CourseSumAndAver(stu, n, m, sum, aver);
            PrintCourseSumAndAver(m, sum, aver);
            break;
        case 3:
            printf("每个学生的总分就平均分\n");
            StudentSumAndAver(stu, n, m, sum, aver);
            PrintStudentSumAndAver(stu, n, sum, aver);
            break;
        case 4:
            printf("按每个学生总分由高到低排名次表\n");
            StudentSumAndAver(stu, n, m, sum, aver);
            SortFromHighToLow(stu, sum, n);
            PrintScore(stu, n, m);
            break;
        case 5:
            printf("按每个学生总分由低到高排名次表\n");
            StudentSumAndAver(stu, n, m, sum, aver);
            SortFromLowToHigh(stu, sum, n);
            PrintScore(stu, n, m);
            break;
        case 6:
            printf("按学号由小到大排成绩表\n");
            SortByID(stu, n);
            PrintScore(stu, n, m);
            break;
        case 7:
            printf("按姓名的字典顺序排成绩表\n");
            SortByName(stu, n);
            PrintScore(stu, n, m);
            break;
        case 8:
            printf("输入学号:\n");
            scanf("%ld", &a);
            StudentSumAndAver(stu, n, m, sum, aver);
            SortFromHighToLow(stu, sum, n);
            SearchByID(stu, n, a);
            PrintRankAndScore(stu, m ,pos);
            break;
        case 9:
            printf("输入姓名:\n");
            scanf("%s", b);
            StudentSumAndAver(stu, n, m, sum ,aver);
            SortFromHighToLow(stu, sum, n);
            SearchByName(stu, n, b);
            PrintRankAndScore(stu, m, pos);
            break;
        case 10:
            printf("各类别人数及所占百分比:\n");
            AnalySizeDate(stu, n, m);
            break;
        case 11:
            printf("总成绩表:\n");
            PrintFinalResult(stu, n, m);
            CourseSumAndAver(stu, n, m, sum, aver);
            PrintCourseSumAndAver(m, sum, aver);
            break;
        case 12:
            printf("每个学生的信息写入文件:\n");
            WritetoFILE(stu, n);
            break;
        case 13:
            printf("从文件中读出每个学生的记录信息并显示:\n");
            ReadfromFile(stu);
            break;
        case 0:
            exit(0);
        default:
            printf("error!\n");        }
    }
    return 0;
}
void PrintMenu()
{
    printf("------------------------------------------------------\n");
    printf("----------------学生成绩管理系统v6.0------------------\n");
    printf("------------------------------------------------------\n");
    printf("1.Input record\n");
    printf("2.Caculate total and average score of every course\n");
    printf("3.Caculate total and average score of every student\n");
    printf("4.Sort in descending order by total score of every student\n");
    printf("5.Sort in ascending order by total score of every student\n");
    printf("6.Sort in asacending order by number\n");
    printf("7.Sort in dictionary order by name\n");
    printf("8.Search by number\n");
    printf("9.Search by name\n");
    printf("10.Statistic analysis for every course\n");
    printf("11.List record\n");
    printf("12.Write to a file\n");
    printf("13.Read from a file\n");
    printf("0.Exit\n");
    printf("please enter your choice\n");
}
void InputScore(STUDENT stu[], int n, int m)
{
    int i, j;
    for(i = 0; i < n; i++)
    {
        scanf("%ld", &stu[i].studentID);
        scanf("%s", stu[i].studentName);
        for(j = 0; j < m; j++)
        {
            scanf("%d", &stu[i].score[j]);
        }
    }
}
void CourseSumAndAver(STUDENT stu[], int n, int m, int sum[], float aver[])
{
    int i, j;
    for(i = 0; i < m; i++)
    {
        sum[i] = 0;
        for(j =0 ; j < n; j++)
        {
            sum[i] += stu[i].score[j];
        }
        aver[i] = (float)sum[i] / n;
    }
}
void PrintCourseSumAndAver(int m, int sum[], float aver[])
{
    int i;
    for(i = 0; i < m; i++)
    {
        printf("No.%d sum: %4d   aver: %2f\n", i+1, sum[i], aver[i]);
    }
}
void StudentSumAndAver(STUDENT stu[], int n, int m, int sum[], float aver[])
{
    int i, j;
    for(i = 0; i < n; i++)
    {
        sum[i] = 0;
        for(j = 0; j < m; j++)
        {
            sum[i] += stu[i].score[j];
        }
        aver[i] = (float)sum[i] / m;
    }
}
void PrintStudentSumAndAver(STUDENT stu[], int n, int sum[], float aver[])
{
    int i;
    for(i = 0; i < n; i++)
    {
        printf("No.%d  %10ld  %6s", i+1, stu[i].studentID, stu[i].studentName);
        printf("sum: %4d    aver: %2f\n", sum[i], aver[i]);
    }
}
void SortFromHighToLow(STUDENT stu[], int sum[], int n)
{
    int i, j, pos;
    for(i = 0; i < n-1; i++)
    {
        pos = i;
        for(j =i+1; j < n; j++)
        {
            if(sum[j] < sum[pos])
            {
                pos = j;
            }
        }
        if(pos != i)
        {
            STUDENT temp;
            temp = stu[pos];
            stu[pos] = stu[i];
            stu[i] = temp;            int temp1;
            temp1 = sum[pos];
            sum[pos] = sum[i];
            sum[i] = temp1;        }
    }
}
void SortFromLowToHigh(STUDENT stu[], int sum[], int n)
{
    int i, j, pos;
    for(i = 0; i < n-1; i++)
    {
        pos = i;
        for(j =i+1; j < n; j++)
        {
            if(sum[j] > sum[pos])
            {
                pos = j;
            }
        }
        if(pos != i)
        {
            STUDENT temp;
            temp = stu[pos];
            stu[pos] = stu[i];
            stu[i] = temp;            int temp1;
            temp1 = sum[pos];
            sum[pos] = sum[i];
            sum[i] = temp1;
        }
    }
}
void SortByID(STUDENT stu[], int n)
{
    int i, j, pos;
    for(i = 0 ; i < n-1; i++)
    {
        pos = i;
        for(j = i+1; j < n; j++)
        {
            if(stu[j].studentID < stu[pos].studentID)
            {
                pos = j;
            }
        }
        if(pos != i)
        {
            STUDENT temp;
            temp = stu[i];
            stu[i] = stu[pos];
            stu[pos] = temp;
        }
    }
}
void SortByName(STUDENT stu[], int n)
{
    int i, j, pos;
    for(i = 0 ; i < n-1; i++)
    {
        pos = i;
        for(j = i+1; j < n; j++)
        {
            if(strcmp(stu[j].studentName, stu[pos].studentName))
            {
                pos = j;
            }
        }
        if(pos != i)
        {
            STUDENT temp;
            temp = stu[i];
            stu[i] = stu[pos];
            stu[pos] = temp;
        }
    }
}
void PrintScore(STUDENT stu[], int n, int m)
{
    int i, j;
    for(i = 0; i < n; i++)
    {
        printf("No.%d  %10ld   %6s", i+1, stu[i].studentID, stu[i].studentName);
        for(j = 0; j < m; j++)
        {
            printf("%4d", stu[i].score[j]);
        }
        printf("\n");
    }
}
int SearchByID(STUDENT stu[], int n, int a)
{
    int i, pos;
    for(i = 0; i < n; i++)
    {
        if(a == stu[i].studentID)
        {
            return i;
        }
    }
}
int SearchByName(STUDENT stu[], int n, char b[])
{
    int i, pos;
    for(i = 0; i < n; i++)
    {
        if(strcmp(b, stu[i].studentName) == 0)
        {
            return i;
        }
    }
}
void PrintRankAndScore(STUDENT stu[], int m, int pos)
{
    int i;
    printf("此学生分数:");
    for(i = 0; i < m; i++)
    {
        printf("%4d", stu[pos].score[i]);
    }
    printf("此学生名次:%d\n", pos+1);
}
void AnalySizeDate(STUDENT stu[], int n, int m)
{
    int tag, i, j;
    int count [M][5] = {0};
    for(i = 0; i < m; i++)
    {
        for(j = 0; j < n; j++)
        {
            tag = stu[j].score[i]/10;
            switch(tag)
            {
            case 0:
                count[i][0]++;
                break;
            case 1:
                count[i][1]++;
                break;
            case 3:
                count[i][2]++;
                break;
            case 4:
                count[i][3]++;
                break;
            case 5:
                count[i][4]++;
            }
        }
    }
    for(i = 0; i < m; i++)
    {
        printf("No.%d\n", i+1);
        printf("优秀人数:%d   所占百分比:%2f%%\n", count[i][0], ((float)count[i][0]/n)*100);
        printf("良好人数:%d   所占百分比:%2f%%\n", count[i][1], ((float)count[i][1]/n)*100);
        printf("中等人数:%d   所占百分比:%2f%%\n", count[i][2], ((float)count[i][2]/n)*100);
        printf("及格人数:%d   所占百分比:%2f%%\n", count[i][3], ((float)count[i][3]/n)*100);
        printf("不及格人数:%d   所占百分比:%2f%%\n", count[i][4], ((float)count[i][4]/n)*100);
        printf("\n");
    }
}
void PrintFinalResult(STUDENT stu[], int n, int m)
{
    int i, j;
    for(i = 0; i < n; i++)
    {
        printf("%10ld  %6s", stu[i].studentID, stu[i].studentName);
        for(j = 0; j < m; j++)
        {
            printf("%4d", stu[i].score[j]);
        }
        printf("\n");
    }
}
void WritetoFILE(STUDENT stu[], int n)
{
    FILE *fp;
    if((fp = fopen("student.txt", "w"))== NULL)
    {
        printf("Fail to open student.txt!\n");
        exit(0);
    }
    fwrite(stu, sizeof(STUDENT), n, fp);
    fclose(fp);
}
int ReadfromFile(STUDENT stu[])
{
    FILE *fp;
    int i;
    if((fp = fopen("student.txt","w")) == NULL)
    {
        printf("Failure to open student.txt!\n");
        exit(0);
    }
    i = 0;
    while(fread(&stu[i], sizeof(STUDENT), 1, fp) != 0)
    {
        i++;
    }
    fclose(fp);
    printf("Total student is %d.\n", i-1);
    return i;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值