简单的班级成绩管理系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 3
typedef struct student
{
    char studentID[12];
    char name[20];
    float score[3];
    float sum;
    float aver;
}STU;
void f_menu();
unsigned short int Input(STU* p, int n);
int f_initial(STU stu[]);
void SavetoFile(STU* stu, int num);
void f_output(STU* p, int n);
void f_px(STU* p, int n);
void f_find(STU* p, int n);
void f_max();
void f_findfail();
//主函数
int main(void)
{
    STU stu[N];
    int select = 0;
    int anum = 0;
    char ch;
    f_menu();
    while (1)
    {
        printf("请选择功能(0~5):");
        scanf_s("%d", &select);
        ch=getchar();
        printf("\n");
        switch (select)
        {
        case 0:exit(0);
        case 1:anum = f_initial(stu);
            f_output(stu, anum);
            break;
        case 2:f_px(stu, N);
            break;
        case 3:f_findfail();
            break;
        case 4:f_max();
            break;
        case 5:f_find(stu, N);
            break;
        }
    }
    return 0;
}

//菜单
void f_menu()
{
    printf("==========欢迎使用“班级成绩管理系统”==========\n");
    printf("1.显示全班同学信息(如果没有就录入)\n");
    printf("2.全班同学成绩降序排序显示\n");
    printf("3.显示所有不及格同学信息\n");
    printf("4.查询最高分\n");
    printf("5.按姓名来查询成绩\n");
    printf("0.退出系统\n");
}
//初始化系统
int f_initial(STU stu[])
{
    //system("cls");
    int num = 0;
    STU* p = stu;
    FILE* fp;
    fopen_s(&fp,"xuesheng.txt", "wb");
    if (fp == NULL)
    {
        printf("Failure to open xuesheng.txt!\n");
        exit(0);
    }
    while (1)
    {
        if (fread(p, sizeof(STU), 1, fp) != 1)
        {
            //printf("Read from file error!\n");
            break;
        }
        num++;
        p++;
    }
    printf("班级学生总人数:%d\n", num);
    fclose(fp);
    if (num == 0)    //如果从文件中导入的个数为0,则从键盘录入信息
    {
        Input(stu, N);
        num = N;
        SavetoFile(stu, num);
    }
    return num;
}
//录入学生信息
unsigned short int Input(STU* p, int n)
{
    int i, j;
    char ch;
    if (p == NULL)
    {
        printf("无指针指向\n");
        return 0;
    }
    if (n <= 0)
    {
        printf("人数不合理\n");
        return 0;
    }
    for (i = 0; i < n; i++)
    {
        printf("请输入第 %d 个人的学号:", i + 1);
        gets_s((*p).studentID);
        printf("请输入第 %d 个人的姓名:", i + 1);
        gets_s((*p).name);
        printf("请输入第 %d 个人的三门成绩:", i + 1);
        p->sum = 0;
        for (j = 0; j < 3; j++)
        {
            scanf_s("%f", &((p->score)[j]));
            p->sum = p->sum + (p->score)[j];
            ch=getchar();//处理回车符
        }
        p++;
    }
    return 1;
}

//保存数据到文件
void SavetoFile(STU* stu, int num)
{
    int i = 0;
    FILE* fp;
    fopen_s(&fp, "D:\\afterc.txt", "wb");
    if (fp== NULL)
    {
        printf("Open error!\n");
        exit(0);
    }
    for (i = 0; i < num; i++)
    {
        if (fwrite(stu, sizeof(STU), 1, fp) != 1)
        {
            printf("写入第%d 个学生信息失败!\n", i + 1);
        }
        stu++;
    }
    fclose(fp);
}

//输出
void f_output(STU* p, int n)
{
    int i;
    for (i = 0; i < n; i++, p++)
    {
        printf("第%d 个学生:学号:%s,姓名:%s,总分:%.2f,平均分:%.2f\n", i + 1,
            p->studentID, p->name, p->sum, (p->sum) / 3);
    }
}
//成绩排名
void f_px(STU* p, int n)
{
    STU* (pSTU[N]), * temp;
    STU** pf;
    int i;
    for (pf = pSTU, i = 0; i < n; pf++, i++)
    {
        *pf = p + i;
    }
    for (i = 0; i < n; i++)
    {
        for (pf = pSTU; pf < pSTU + n - 1 - i; pf++)
        {
            if ((**pf).sum < (*(pf + 1))->sum)
            {
                temp = *pf;
                *pf = *(pf + 1);
                *(pf + 1) = temp;
            }
        }
    }
    for (pf = pSTU, i = 0; i < n; pf++, i++)
    {
        printf("第%d名:%s %.2f分\n", i + 1, (*pf)->name, (*pf)->sum);
    }
}
//查找学生信息
void f_find(STU* p, int n)
{
    STU* pf;
    char nm[20];
    int i = 0;
    int k;
    printf("请输入要查找的学生的姓名:");
    gets_s(nm);
    for (pf = p; pf <= p + n - 1; pf++)
    {
        k= strcmp(nm, pf->name);
        if (k == 0)
        {
            printf("该生各科成绩如下:");
            for (i = 0; i < 3; i++)
            {
                printf("%.2f ", (pf->score)[i]);
            }
            printf("总分:%.2f,平均分:%.2f\n", pf->sum, (pf->sum) / 3);
            break;
        }
    }
}
//查找最高分
void f_max()
{
    STU stu[N] = { 0 };
    int i, j = 0;
    FILE* fp;
    int m = 0;
    fopen_s(&fp, "D:\\afterc.txt", "rb");
    if (fp== NULL)
    {
        printf("Open error!\n");
        exit(0);
    }
    while (!feof(fp))
    {
        if ((fread(&stu[m], sizeof(STU), 1, fp)) == 1)
        {
            m++;
        }
    }
    fclose(fp);
    if (m == 0)
    {
        printf("文件中没有内容!\n");
    }
    for (i = 0; i < m; i++)
    {
        if (stu[i].sum > stu[j].sum)
            j = i;
    }
    printf("总成绩最高的同学是:\n");
    printf("学号:%s,姓名:%s,总分:%.2f,平均分:%.2f\n", stu[j].studentID, stu[j].name, stu[j].sum, stu[j].sum / 3);
}
//查找不及格同学信息
void f_findfail()
{
    STU stu[N];
    int i, m = 0;
    FILE* fp;
    int ch;
    fopen_s(&fp, "D:\\afterc.txt", "rb");
    if (fp == NULL)
    {
        printf("Open error!\n");
        exit(0);
    }
    while (!feof(fp))
    {
        if ((fread(&stu[m], sizeof(STU), 1, fp)) == 1)
        {
            m++;
        }
    }
    fclose(fp);
    if (m == 0)
    {
        printf("文件中没有内容!\n");
    }
    printf("1.第一门成绩不及格\n2.第二门成绩不及格\n3.第三门成绩不及格\n请选择:");
    scanf_s("%d", &ch);
    switch (ch)
    {
    case 1:
        for (i = 0; i < m; i++)
        {
            if (stu[i].score[0] < 60)
                printf("学号:%s,姓名:%s,分数:%.2f\n", stu[i].studentID, stu[i].name, stu[i].score[0]);
        }
        break;
    case 2:
        for (i = 0; i < m; i++)
        {
            if (stu[i].score[1] < 60)
                printf("学号:%s,姓名:%s,分数:%.2f\n", stu[i].studentID, stu[i].name, stu[i].score[2]);
        }
        break;
    case 3:
        for (i = 0; i < m; i++)
        {
            if (stu[i].score[2] < 60)
                printf("学号:%s,姓名:%s,分数:%.2f\n", stu[i].studentID, stu[i].name, stu[i].score[2]);
        }
        break;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言班级成绩管理系统一个用于管理班级学生成绩的系统,它可以实现成绩的录入、显示、修改、排序和保存等功能。以下是一个简单的示例: ```c #include <stdio.h> #include <stdlib.h> #define MAX_STUDENTS 100 #define MAX_COURSES 5 struct Student { char name[50]; int scores[MAX_COURSES]; }; struct Student students[MAX_STUDENTS]; int numStudents = 0; void addStudent() { if (numStudents >= MAX_STUDENTS) { printf("班级已满,无法添加新学生。\n"); return; } struct Student newStudent; printf("请输入学生姓名:"); scanf("%s", newStudent.name); printf("请输入学生的%d门课程成绩:\n", MAX_COURSES); for (int i = 0; i < MAX_COURSES; i++) { printf("请输入第%d门课程的成绩:", i + 1); scanf("%d", &newStudent.scores[i]); } students[numStudents] = newStudent; numStudents++; printf("学生添加成功!\n"); } void displayStudents() { if (numStudents == 0) { printf("班级中没有学生。\n"); return; } printf("班级学生列表:\n"); for (int i = 0; i < numStudents; i++) { printf("姓名:%s\n", students[i].name); printf("成绩:"); for (int j = 0; j < MAX_COURSES; j++) { printf("%d ", students[i].scores[j]); } printf("\n"); } } void modifyStudent() { if (numStudents == 0) { printf("班级中没有学生。\n"); return; } char name[50]; printf("请输入要修改成绩的学生姓名:"); scanf("%s", name); int index = -1; for (int i = 0; i < numStudents; i++) { if (strcmp(students[i].name, name) == 0) { index = i; break; } } if (index == -1) { printf("未找到该学生。\n"); return; } printf("请输入学生的%d门课程成绩:\n", MAX_COURSES); for (int i = 0; i < MAX_COURSES; i++) { printf("请输入第%d门课程的成绩:", i + 1); scanf("%d", &students[index].scores[i]); } printf("成绩修改成功!\n"); } void sortStudents() { if (numStudents == 0) { printf("班级中学生。\n"); return; } // 使用冒泡排序按照总成绩排序 for (int i = 0; i < numStudents - 1; i++) { for (int j = 0; j < numStudents - i - 1; j++) { int totalScore1 = 0; int totalScore2 = 0; for (int k = 0; k < MAX_COURSES; k++) { totalScore1 += students[j].scores[k]; totalScore2 += students[j + 1].scores[k]; if (totalScore1 < totalScore2) { struct Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } printf("学生排序成功!\n"); } void saveStudents() { if (numStudents == 0) { printf("班级中没有学生。\n"); return; } FILE *file = fopen("students.txt", "w"); if (file == NULL) { printf("文件打开失败。\n"); return; } for (int i = 0; i < numStudents; i++) { fprintf(file, "%s ", students[i].name); for (int j = 0; j < MAX_COURSES; j++) { fprintf(file, "%d ", students[i].scores[j]); } fprintf(file, "\n"); } fclose(file); printf("学生信息保存成功!\n"); } int main() { int choice; while (1) { printf("\n班级成绩管理系统\n"); printf("1. 添加学生\n"); printf("2. 显示学生\n"); printf("3. 修改学生成绩\n"); printf("4. 排序学生\n"); printf("5. 保存学生信息\n"); printf("0. 退出\n"); printf("请输入您的选择:"); scanf("%d", &choice); switch (choice) { case 1: addStudent(); break; case 2: displayStudents(); break; case 3: modifyStudent(); break; case 4: sortStudents(); break; case 5: saveStudents(); break; case 0: printf("感谢使用班级成绩管理系统,再见!\n"); exit(0); default: printf("无效的选择,请重新输入。\n"); break; } } return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值