课设——C语言学生成绩管理系统

介绍

        相信许多同学在大学期间,学习计算机相关课程的时候,都有一个令人头疼的问题——课程设计。那么本片文章就详细的分享一个用C语言实现一个简单学生成绩管理系统,供同学们学习和参考(文章最后会附上源程序)。

项目分析

1.建立一张学生成绩表,每个学生包含 学号、姓名、性别、语文、数学、英语、平均分

2.将表中所有信息按平均分降序排列。

3.按学号查找某学生所有成绩。

4.能够实现某学生的成绩插入和删除

5.实现文件操作,程序退出时将学生成绩保存在studen_grad.txt文件中;程序开始时,能够从student_grad.txt文件中加载已有的学生成绩信息。

整题框架

包含文件:

1.main函数文件(main.c),主程序整题框架

2.学生成绩管理函数文件(score managemen.c),用来实现各接口函数

3.学生成绩管理头文件(score managemen.h),用来定义和声明函数。

main.c文件

主函数框架

int main()
{
    Slist* List = ListInit();
    ListLoad(List);
    int input = 0;
    do
    {

        menu();
        printf("请选择:>");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            ListPushBack(List);
            break;
        case 2:
            ListDelet(List);
        case 3:
            ListPrint(List);
            break;
        case 4:
            ListSort(List);
            break;
        case 5:
            ListSearch(List);
            break;
        case 0:
            ListSave(List);
            printf("保存成功,退出!\n");
            break;

        }

    }
    while(input);

    return 0;
}

menu()函数

void menu()
{
    printf("*****************************************\n");
    printf("******      学生成绩管理系统     ********\n");
    printf("******  1.增加           2.删除  ********\n");
    printf("******  3.显示           4.排序  ********\n");
    printf("******  5.查找           0.退出  ********\n");
    printf("*****************************************\n");
}

score managemen.h文件

结构体链表

//双向循环链表 存储学生信息
typedef struct ScoreList
{
    char number[20];
    char name[20];
    char sex[5];
    int chinese;
    int math;
    int english;
    float average;
    struct ScoreList* next;
    struct ScoreList* prev;

}Slist;

接口函数声明

Slist* ListInit();//链表初始化
void ListPushBack(Slist* phead);//链表尾部插入学生成绩
void ListDelet(Slist* phead);//按学号删除
void ListSearch(Slist* phead);//按学号查找
void ListPrint(Slist* phead);//打印链表
void ListSort(Slist* phead);//排序(平均分降序)
void ListSave(Slist* phead);//文件保存
void ListLoad(Slist* phead);//加载

scor managem.c文件

Slist* ListInit() 链表初始化函数

Slist* ListInit()
{
    Slist* phead = (Slist*)malloc(sizeof(Slist));
    phead->next = phead;
    phead->prev = phead;
    return phead;
}

void ListPushBack(Slist* phead)  链表尾部插入学生成绩

//链表尾部插入
void ListPushBack(Slist* phead)
{
    system("cls");
    assert(phead);
    Slist* newnode = (Slist*)malloc(sizeof(Slist));

    printf("请输入学号:");
    scanf("%s",newnode->number);
    printf("请输入姓名:");
    scanf("%s",newnode->name);
    printf("请输入性别:");
    scanf("%s",newnode->sex);
    printf("请输入语文成绩:");
    scanf("%d",&(newnode->chinese));
    printf("请输入数学成绩:");
    scanf("%d",&(newnode->math));
    printf("请输入英语成绩:");
    scanf("%d",&(newnode->english));
    newnode->average =(float)(newnode->chinese + newnode->math + newnode->english)/3;

    Slist* tailnode = phead->prev;
    tailnode->next = newnode;
    newnode->prev = tailnode;
    newnode->next = phead;
    phead->prev = newnode;
    printf("添加成功\n");
}

void ListDelet(Slist* phead)  按学号链表删除

//按学号删除
void ListDelet(Slist* phead)
{
    assert(phead);
    system("cls");
    char number[20];//存储要删除学生的学号
    printf("请输入要删除的学号:>");
    scanf("%s",number);
    Slist* cur = phead->next;
    while(cur != phead)
    {
        if(strcmp(number,cur->number) == 0)//判断成绩表中是否存在该学生学号
        {
            Slist* nextnode = cur->next;
            Slist* prevnode = cur->prev;
            free(cur);

            prevnode->next = nextnode;
            nextnode->prev = prevnode;
            printf("删除成功!\n");
            return;
        }
        cur = cur->next;
    }
    printf("该学生不存在\n");

}

void ListSearch(Slist* phead)   按学号查找

void ListSearch(Slist* phead)
{
    assert(phead);
    system("cls");
    char number[20];
    printf("请输入学号:>");
    scanf("%s",number);
    Slist* cur = phead->next;
    while(cur != phead)
    {
        if(strcmp(number,cur->number) == 0) //判断学生是否存在
        {
            printf("姓名:%s  性别:%s  语文:%d  数学:%d  英语:%d  平均分:%f\n",
                   cur->name,cur->sex,cur->chinese,cur->math,cur->english,cur->average);
            return;
        }
        cur = cur->next;
    }
    printf("没有找到该学生\n");
}

void ListPrint(Slist* phead);//打印链表

//链表打印
void ListPrint(Slist* phead)
{
    assert(phead);
    system("cls");
    printf("%-10s\t%-8s\t%-5s\t%-5s\t%-5s\t%-5s\t%-10s\n","学号","姓名","性别","语文","数学","英语","平均分");

    Slist* cur = phead->next;
    while(cur != phead)
    {
        printf("%-10s\t%-8s\t%-5s\t%-5d\t%-5d\t%-5d\t%-10.3f\n",
               cur->number,cur->name,cur->sex,
               cur->chinese,cur->math,cur->english,cur->average);
        cur = cur->next;
    }
}

void ListSort(Slist* phead);//排序(平均分降序)

//按平均分降序
void ListSort(Slist* phead)
{
    assert(phead);
    system("cls");
    int count = 0;//记录链表长度
    Slist* cur = phead->next;
    while(cur != phead)
    {
        count++;
        cur = cur->next;
    }

    int i = 0;
    int j = 0;
    for(i = 0;i < count;i++)//冒泡排序
    {
        Slist* prevnode = phead;
        Slist* curnode = prevnode->next;
        Slist* nextnode = curnode->next;
        Slist* tailnode = nextnode->next;
        for(j = 0;j < count-i;j++)
        {
            if(curnode->average < nextnode->average)
            {
                prevnode->next = nextnode;
                nextnode->prev = prevnode;

                curnode->next = tailnode;
                tailnode->prev = curnode;

                nextnode->next = curnode;
                curnode->prev = nextnode;

            }
                tailnode = tailnode->next;
                nextnode = nextnode->next;
                curnode = curnode->next;
                prevnode = prevnode->next;
        }
    }
    printf("排序成功!\n");
}

void ListSave(Slist* phead);//文件保存

void ListSave(Slist* phead)
{
    FILE* fpWrite = fopen("student_grad.txt","w");
    if(fpWrite == NULL)
    {
        printf("%s\n",strerror(errno));
        return;
    }
    Slist* cur = phead->next;
    while(cur != phead)
    {
        fprintf(fpWrite,"%-10s\t%-8s\t%-5s\t%-5d\t%-5d\t%-5d\t%-10.3f\n",
               cur->number,cur->name,cur->sex,
               cur->chinese,cur->math,cur->english,cur->average);
        cur = cur->next;
    }
    fclose(fpWrite);
    fpWrite = NULL;
}

void ListLoad(Slist* phead);//加载

void ListLoad(Slist* phead)
{
    FILE* fpRead = fopen("student_grad.txt","r");

    while(1)
    {
        Slist* newnode = (Slist*)malloc(sizeof(Slist));
        if(fscanf(fpRead,"%s\t%s\t%s\t%d\t%d\t%d\t%f\n",
            newnode->number,newnode->name,newnode->sex,
            &(newnode->chinese),&(newnode->math),&(newnode->english),&(newnode->average)) != EOF)//判断是否读取完
        {
            Slist* tailnode = phead->prev;
            tailnode->next = newnode;
            newnode->prev = tailnode;
            newnode->next = phead;
            phead->prev = newnode;
        }
        else
        {
            break;
        }
    }

}

源程序

链接:https://pan.baidu.com/s/1u9fQKzVYo-LcodWqw4LSaw?pwd=1234 
提取码:1234

希望帮助到的同学给个三连呀~

  • 27
    点赞
  • 205
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 好的,学生成绩管理系统可以使用C语言来实现。以下是一个简单的实现,包括添加学生信息、查找学生信息、修改学生信息和删除学生信息等功能。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> struct student { char name[50]; int id; int score; }; int main() { struct student s[100]; int choice, i, n = 0, id, found = 0; do { printf("\n\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: printf("请输入学生姓名:"); scanf("%s", s[n].name); printf("请输入学生学号:"); scanf("%d", &s[n].id); printf("请输入学生成绩:"); scanf("%d", &s[n].score); n++; printf("学生信息添加成功!\n"); break; case 2: printf("请输入要查找的学生学号:"); scanf("%d", &id); found = 0; for (i = 0; i < n; i++) { if (s[i].id == id) { printf("学生姓名:%s\n", s[i].name); printf("学生学号:%d\n", s[i].id); printf("学生成绩:%d\n", s[i].score); found = 1; break; } } if (!found) { printf("没有找到该学生信息!\n"); } break; case 3: printf("请输入要修改的学生学号:"); scanf("%d", &id); found = 0; for (i = 0; i < n; i++) { if (s[i].id == id) { printf("请输入学生姓名:"); scanf("%s", s[i].name); printf("请输入学生成绩:"); scanf("%d", &s[i].score); found = 1; printf("学生信息修改成功!\n"); break; } } if (!found) { printf("没有找到该学生信息!\n"); } break; case 4: printf("请输入要删除的学生学号:"); scanf("%d", &id); found = 0; for (i = 0; i < n; i++) { if (s[i].id == id) { for (int j = i; j < n - 1; j++) { s[j] = s[j + 1]; } n--; found = 1; printf("学生信息删除成功!\n"); break; } } if (!found) { printf("没有找到该学生信息!\n"); } break; case 5: printf("所有学生信息如下:\n"); for (i = 0; i < n; i++) { printf("学生姓名:%s\n", s[i].name); printf("学生学号:%d\n", s[i].id); printf("学生成绩:%d\n", s[i].score); } break; case 0: printf("感谢使用学生成绩管理系统!\n"); break; default: printf("输入错误,请重新输入!\n"); break; } } while (choice != 0); return 0; } ``` 以上代码仅为一个简单的示例,实际开发中还需要考虑一些细节问题,比如数据的存储和读取、输入的合法性判断等。同时,也可以根据实际需求来进行功能扩展和优化。 ### 回答2: 学生成绩管理系统是一个基于C语言开发的应用程序,主要用于学校或教育机构对学生成绩进行管理和分析。 该系统的主要功能包括学生信息录入、成绩录入、成绩查询、成绩分析和报告输出等。通过学生信息录入功能,管理员或教师可以将学生的基本信息录入系统,包括学号、姓名、性别、年级等。成绩录入功能则允许管理员或教师录入学生的各门课程的成绩信息,包括考试成绩、平时成绩等。 学生成绩查询功能可以根据学生的学号或姓名快速查询其对应的成绩信息。而成绩分析功能可以进行单个学生或整个班级的成绩分析,包括各科目成绩的平均分、最高分、最低分等统计数据,以及对学生的成绩进行排名等。管理员或教师可以根据这些分析结果了解学生的学习情况,并进行针对性的辅导。 另外,学生成绩管理系统还可以生成成绩报告或成绩单,以便管理员或教师将学生的成绩情况及时告知给学生或家长。报告输出功能可以根据需要进行灵活的设置,可以生成简单的成绩单,也可以生成详细的成绩报告。 总的来说,学生成绩管理系统利用C语言的编程优势,结合数据库技术,能够高效、准确地管理学生的成绩信息,并提供各种查询、分析和报告功能,帮助学校和教育机构更好地进行学生成绩管理工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值