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

这篇具有很好参考价值的文章主要介绍了课设——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

希望帮助到的同学给个三连呀~文章来源地址https://www.toymoban.com/news/detail-501512.html

到了这里,关于课设——C语言学生成绩管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言课程设计-学生成绩管理系统

    需求分析: 1.设计题目:学生成绩管理系统 2.系统功能需求分析:实现对学生各科成绩总分及平均分的排序,和成绩的查找 概要设计 1. 功能模块图 详细设计 1. 流程图 测试结果 :列出所有功能的运行界面,并作文字说明。 1.录入成绩:录入3个人的学号和各科成绩 2.每门课程

    2024年02月11日
    浏览(51)
  • C语言编程学生成绩管理系统

    目录 一、介绍 二、功能 1.录入学生 2.删除学生信息 3.修改学生信息 4.查询学生信息 5.所有学生信息 6.成绩排序  7.退出程序 三、代码 1.主函数 2.头文件 3.函数封装库         利用C语言,运用链表、指针、封装函数等基本知识实现一个学生管理系统。通过在终端对学生信息进

    2024年02月10日
    浏览(54)
  • C语言学生成绩管理系统(综合项目)

    1. 这个代码主要实现以下功能: 2. 用到的主要参数有:     1.整型变量int n;用于储存学生人数和之后的循环判断。     2.字符串char name[][];用于储存姓名。     3.浮点型变量float score[];用于储存成绩。     4.长整型变量long ID[Max];用于储存学号。 3.用到的子函数有: int  Menu(

    2024年02月11日
    浏览(43)
  • C语言课程设计_学生成绩管理系统

    设计一个学生成绩排名系统。 1)  具备对成绩的管理功能(添加、删除、排序) 2)  具备对成绩的统计功能(最高分,最低分,平均分,及格率等) 3)  具备按学号、姓名、或课程名查询成绩的功能。 4)学生成绩应该保存在文件中。 备注:成绩记录以下信息:班级,学号,

    2024年02月11日
    浏览(48)
  • 学生成绩管理系统(C语言)(数组结构体)

    学生成绩管理系统 利用结构体、排序查找算法以及模块化程序设计实现如下菜单驱动的学生成绩管理系统: 1) 首次批量输入每个学生的学号、姓名、和各科考试成绩。 2) 增添一个新学生的信息。 3) 增添一门新的学科的信息。 4) 按学生姓名或学号查询、修改、删除学生信

    2024年02月09日
    浏览(46)
  • 学生成绩管理系统——C语言版(含源码)

    一、开发环境 操作系统:Ununtu 16 开发环境工具:vscode 开发语言:C语言 二、功能需求 制作学生管理系统 在系统中能够实现 录入学生信息、帮助菜单、列出学生信息、计算总成绩平均值、根据总成绩平均值完成排序、根据学号查询学生信息、清屏、退出等功能。 三、功能说

    2024年02月08日
    浏览(51)
  • C语言学生成绩信息管理系统(超详细版)

    主题:一个简易成绩管理系统 功能介绍: 1.以文本形式存储学生信息 2.对以存信息进行   1. 插入 2. 修改3. 删除  4.查询  5.成绩数字特征 目录 一:分析 二:查询  三:菜单 四:初始化函数 五:插入函数 六:修改函数 七:删除函数 八:数字特征 九:显示函数 要进行 插入

    2024年02月12日
    浏览(46)
  • 学生成绩管理系统(C语言有结构体实现)

    本文章介绍了一个通过C语言实现的一个简单的学生管理系统,该系统要是使用结构体数组来管理学生成绩数据的,通过该系统的练习能够对结构体的相关知识有更好的理解,提高逻辑思维能力。 系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令 开

    2024年02月06日
    浏览(82)
  • ChatGPT实现用C语言写一个学生成绩管理系统

    随着ChatGPT爆火,大家都在使用ChatGPT来帮助自己提高效率,对于程序员来说使用它来写代码怎么样呢?今天尝试让ChatGPT,写了一个学生成绩管理系统。 问题是:使用C语言写一个学生成绩管理系统,要求使用链表,实现增删改查功能。 下面是ChatGPT写的代码,用时不到30秒,速

    2023年04月13日
    浏览(55)
  • 【C语言链表实现】学生成绩管理系统(功能全面,通俗易懂)

    题目 :学生成绩管理程序 要求 :本程序用于教学单位(院/系)的学生成绩管理。要求程序能够实现学生信息录入(可以实现增加、删除、修改学生的基本信息)、单科学习成绩的录入;班级内单科成绩排名;成绩查询:查询某个学生的各科成绩、统计所有不及格科目超过

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包