C语言学生成绩管理系统

news2024/11/28 13:52:21

 程序示例精选

C语言学生成绩管理系统

如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助!

前言

这篇博客针对<<C语言学生成绩管理系统>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


文章目录

        一、所需工具软件

        二、使用步骤

                1. 引入库

                2. 创建结构体

                3. 创建元素操作函数

                4. 运行结果

         三在线协助


一、所需工具软件

          1. Visual Studio

          2. C/C++

二、使用步骤

1.引入库

代码如下(示例):

#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
#include<string.h>

2.创建结构体

代码如下(示例):

struct Student {   //每个学生对应一个结构体 
    char ID[20];//学号 
    char Name[10];//姓名 
    float Mark1;//语文成绩 
    float Mark2;//数学成绩 
    float Mark3;//英语成绩 
    float Mark4;//计算机成绩 
    float All; //总分 
    float Average;//平均成绩 
}students[1000];

该处使用的url网络请求的数据。

3.创建元素操作函数:

代码如下(示例):

int num = 0; //计数器
void Copy(struct Student* arr, int i, int j)
{
    strcpy(arr[i].ID, arr[j].ID);
    strcpy(arr[i].Name, arr[j].Name);
    arr[i].Mark1 = arr[j].Mark1;
    arr[i].Mark2 = arr[j].Mark2;
    arr[i].Mark3 = arr[j].Mark3;
    arr[i].Mark4 = arr[j].Mark4;
    arr[i].All = arr[j].All;
    arr[i].Average = arr[j].Average;
}
int Student_SearchByName(char name[])//通过姓名来检索学生
{
    int i;
    for (i = 0; i < num; i++)
    {
        if (strcmp(students[i].Name, name) == 0)  //通过strcmp函数来对比学生姓名,找到返回在数组的位置 
        {
            return i;
        }
    }
    return -1;    //未找到返回 -1 
}
int Student_SearchByIndex(char id[])//通过学号来检索学生信息
{
    int i;
    for (i = 0; i < num; i++)
    {
        if (strcmp(students[i].ID, id) == 0)  //通过strcmp函数来对比学生id,找到返回位置 
        {
            return i;
        }
    }
    return -1;   //未找到返回 -1 
}
void Student_DisplaySingle(int index)//输出表头
{
    printf("%10s%10s%8s%8s%8s%10s\n", "学号", "姓名", "语文", "数学", "英语", "计算机", "总成绩", "平均成绩");
    printf("-------------------------------------------------------------\n");
    printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[index].ID, students[index].Name,
        students[index].Mark1, students[index].Mark2, students[index].Mark3, students[index].Mark4, students[index].All, students[index].Average);
}
void inputt()//利用循环录入学生信息
{
    while (1)
    {
        printf("请输入学号:");
        scanf("%s", &students[num].ID);
        getchar();
        printf("请输入姓名:");
        scanf("%s", &students[num].Name);
        getchar();
        printf("请输入成绩:");
        scanf("%f", &students[num].Mark1);
        getchar();
        printf("请输入成绩:");
        scanf("%f", &students[num].Mark2);
        getchar();
        printf("请输入成绩:");
        scanf("%f", &students[num].Mark3);
        getchar();
        printf("请输入成绩:");
        scanf("%f", &students[num].Mark4);   //依次输入各项数据 
        getchar();
        students[num].All = students[num].Mark1 + students[num].Mark2 + students[num].Mark3 + students[num].Mark4;    //输完数据后自动计算总成绩与平均成绩 
        students[num].Average = (students[num].Mark1 + students[num].Mark2 + students[num].Mark3 + students[num].Mark4) / 4;
        if (Student_SearchByIndex(students[num].ID) == -1)
        {
            num++;  //移向下一个位置 
        }
        else
        {
            printf("学号重复,输入数据无效 !!!\n");
        }

        printf("是否继续?(y/n)");
        if (getchar() == 'n')
        {
            break;
        }
    }
}
void modify()//修改成绩
{
    while (1)
    {
        char id[20];
        int index;
        printf("请输入要修改的学生的学号:");
        scanf("%s", &id);
        getchar();
        index = Student_SearchByIndex(id);  //调用搜查id函数,根据其返回值确定位置 
        if (index == -1)
        {
            printf("学生不存在!\n");
        }
        else
        {
            printf("你要修改的学生信息为:\n");
            Student_DisplaySingle(index);
            printf("-- 请输入新值--\n");
            printf("请输入学号:");
            scanf("%s", &students[index].ID);
            getchar();
            printf("请输入姓名:");
            scanf("%s", &students[index].Name);
            getchar();
            printf("请输入语文成绩:");
            scanf("%f", &students[index].Mark1);
            getchar();
            printf("请输入数学成绩:");
            scanf("%f", &students[index].Mark2);
            getchar();
            printf("请输入英语成绩:");
            scanf("%f", &students[index].Mark3);
            getchar();
            printf("请输入计算机成绩:");
            scanf("%f", &students[index].Mark4);  //重新录入一套新的数据替代 
            getchar();
            students[index].All = students[index].Mark1 + students[index].Mark2 + students[index].Mark3 + students[index].Mark4;
            students[index].Average = (students[index].Mark1 + students[index].Mark2 + students[index].Mark3 + students[index].Mark4) / 4;
        }
        printf("是否继续?(y/n)");
        if (getchar() == 'n')
        {
            break;
        }
    }
}
void deletee()//删除学生信息
{
    int i;
    while (1)
    {
        char id[20];
        int index;
        printf("请输入要删除的学生的学号:");
        scanf("%s", &id);
        getchar();
        index = Student_SearchByIndex(id);   //调用搜查id函数,根据其返回值确定位置 
        if (index == -1)
        {
            printf("学生不存在!\n");
        }
        else
        {
            printf("你要删除的学生信息为:\n");
            Student_DisplaySingle(index);
            printf("是否真的要删除?(y/n)");
            if (getchar() == 'y')
            {
                for (i = index; i < num - 1; i++)
                {
                    Copy(students, i, i + 1);
                    //students[i]=students[i+1];    //把后边的对象都向前移动
                }
                num--;
            }
            getchar();
        }
        printf("是否继续?(y/n)");
        if (getchar() == 'n')
        {
            break;
        }
    }
}
void display()//打印已录入的学生信息
{
    int a;
    printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "学号", "姓名", "语文", "数学", "英语", "计算机", "总成绩", "平均成绩");
    printf("-------------------------------------------------------------\n");
    for (a = 0; a < num; a++)
    {
        printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,
            students[a].Mark1, students[a].Mark2, students[a].Mark3, students[a].Mark4, students[a].All, students[a].Average);
    }
}
void insert()//指定位置插入学生信息
{
    int a, b, c;
    printf("请输入你要插入的位置");
    scanf("%d", &a);
    if (a > num) {
        printf("输入的位置有误,请重新输入,当前共%d条数据\n", num);
        scanf("%d", &a);
    }

    b = num - 1;
    for (; b >= a - 1; b--)
    {
        //strcpy(students[b+1].ID,students[b].ID);
        //strcpy(students[b+1].Name,students[b].Name);
        //students[b+1].Mark1=students[b].Mark1;
        //students[b+1].Mark2=students[b].Mark2;
        //students[b+1].Mark3=students[b].Mark3;
        //students[b+1].Mark4=students[b].Mark4;
        //students[b+1].All=students[b].All;
        //students[b+1].Average=students[b].Average;  
        Copy(students, b + 1, b); //根据其输入的位置,将其及以后的数据向后移动一个位置 

    }
    num++;
    printf("请输入学号:");
    scanf("%s", &students[a - 1].ID);
    getchar();
    printf("请输入姓名:");
    scanf("%s", &students[a - 1].Name);
    getchar();
    printf("请输入语文成绩:");
    scanf("%f", &students[a - 1].Mark1);
    getchar();
    printf("请输入数学成绩:");
    scanf("%f", &students[a - 1].Mark2);
    getchar();
    printf("请输入英语成绩:");
    scanf("%f", &students[a - 1].Mark3);
    getchar();
    printf("请输入计算机成绩:");
    scanf("%f", &students[a - 1].Mark4);  //输入新数据 
    getchar();
    students[a - 1].All = students[a - 1].Mark1 + students[a - 1].Mark2 + students[a - 1].Mark3 + students[a - 1].Mark4;
    students[a - 1].Average = (students[a - 1].Mark1 + students[a - 1].Mark2 + students[a - 1].Mark3 + students[a - 1].Mark4) / 4;

}
void search()//查询学生信息
{
    while (1)
    {
        char name[20];
        int index;
        printf("请输入要查询的学生的姓名:");
        scanf("%s", &name);
        getchar();
        index = Student_SearchByName(name);   //调用搜查name函数,根据其返回值确定位置 
        if (index == -1)
        {
            printf("学生不存在!\n");
        }
        else
        {
            printf("你要查询的学生信息为:\n");
            Student_DisplaySingle(index);
        }
        printf("是否继续?(y/n)");
        if (getchar() == 'n')
        {
            break;
        }
    }
}
void sort()//根据平均分排序
{
    int i, j;
    //struct students tmp;
    for (i = 0; i < num; i++)
    {
        students[i].Average = (students[i].Mark1 + students[i].Mark2 + students[i].Mark3 + students[i].Mark4) / 4;
    }
    for (i = 0; i < num; i++)
    {
        for (j = 1; j < num - i; j++)
        {
            if (students[j - 1].Average < students[j].Average)
            {

                Copy(students, num, j - 1);
                Copy(students, j - 1, j);
                Copy(students, j, num);
                //tmp=students[j-1];
                //students[j-1]=students[j];
                //students[j]=tmp;      //冒泡排序 
            }
        }
    }
    int a;
    printf("%10s%10s%8s%8s%8s%10s\n", "学号", "姓名", "语文", "数学", "英语", "计算机", "总成绩", "平均成绩");
    printf("-------------------------------------------------------------\n");
    for (a = 0; a < num; a++)
    {
        printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,
            students[a].Mark1, students[a].Mark2, students[a].Mark3, students[a].Mark4, students[a].All, students[a].Average);
    }
}


void SearchLow()//搜索不及格的并输出 
{
    int a;
    printf("           语文不及格的有%10s%10s%8s\n", "学号", "姓名", "语文");
    for (a = 0; a < num; a++)
    {
        if (students[a].Mark1 < 60)
            printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark1);    //从头搜索到尾,若小于60就输出 
    }

    printf("           数学不及格的有%10s%10s%8s\n", "学号", "姓名", "数学");
    for (a = 0; a < num; a++)
    {
        if (students[a].Mark2 < 60)
            printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark2);
    }

    printf("           英语不及格的有%10s%10s%8s\n", "学号", "姓名", "英语");
    for (a = 0; a < num; a++)
    {
        if (students[a].Mark3 < 60)
            printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark3);
    }

    printf("           计算机不及格的有%10s%10s%8s\n", "学号", "姓名", "计算机");
    for (a = 0; a < num; a++)
    {
        if (students[a].Mark4 < 60)
            printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark4);
    }
    system("pause");
}

void SearchHigh()//搜索成绩最高者输出 
{
    int a;
    int max;
    printf("           语文最高分为%10s%10s%8s\n", "学号", "姓名", "语文");
    max = students[0].Mark1;
    for (a = 1; a < num; a++)
    {
        if (students[a].Mark1 > max)
            max = students[a].Mark1;
    }
    for (a = 0; a < num; a++)
    {
        if (max == students[a].Mark1)
            printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark1);
    }

    printf("           数学最高分为%10s%10s%8s\n", "学号", "姓名", "数学");
    max = students[0].Mark2;
    for (a = 1; a < num; a++)
    {
        if (students[a].Mark2 > max)
            max = students[a].Mark2;
    }
    for (a = 0; a < num; a++)
    {
        if (max == students[a].Mark2)
            printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark2);
    }

    printf("           英语最高分为%10s%10s%8s\n", "学号", "姓名", "英语");
    max = students[0].Mark3;
    for (a = 1; a < num; a++)
    {
        if (students[a].Mark3 > max)
            max = students[a].Mark3;
    }
    for (a = 0; a < num; a++)
    {
        if (max == students[a].Mark3)
            printf("           %10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark3);
    }

    printf("           计算机最高分为%10s%10s%8s\n", "学号", "姓名", "计算机");
    max = students[0].Mark4;
    for (a = 1; a < num; a++)
    {
        if (students[a].Mark4 > max)
            max = students[a].Mark4;
    }
    for (a = 0; a < num; a++)
    {
        if (max == students[a].Mark4)
            printf("           %10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark4);
    }
    system("pause");
}
void Save()
{
    FILE* fp = fopen("temp.txt", "w+");
    fprintf(fp, "%d\n", num);
    for (int i = 0; i < num; i++)
    {
        fprintf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, students[i].Mark1, students[i].Mark2, students[i].Mark3, students[i].Mark4, students[i].All, students[i].Average);
    }
    fclose(fp);
}
void Load()
{
    FILE* fp = fopen("temp.txt", "r");
    fscanf(fp, "%d", &num);
    for (int i = 0; i < num; i++)
    {
        fscanf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, &students[i].Mark1, &students[i].Mark2, &students[i].Mark3, &students[i].Mark4, &students[i].All, &students[i].Average);
    }
    fclose(fp);
}

int main() {
    int i;
    while (1) {
        Load();
        printf("\t\t\t\t\t-------- 学生成绩管理系统-------\n\n\n\n");     //菜单 
        printf("\t\t\t\t\t1. 增加学生记录\n\n");
        printf("\t\t\t\t\t2. 修改学生记录\n\n");
        printf("\t\t\t\t\t3. 删除学生记录\n\n");
        printf("\t\t\t\t\t4. 插入学生记录\n\n");
        printf("\t\t\t\t\t5. 显示所有记录\n\n");
        printf("\t\t\t\t\t6. 查询学生记录\n\n");
        printf("\t\t\t\t\t7. 按平均成绩排序\n\n");
        printf("\t\t\t\t\t8. 输出各科目不及格学生\n\n");
        printf("\t\t\t\t\t9. 输出各科目最高分\n\n");
        printf("\t\t\t\t\t0. 退出\n\n\n");
        printf("请选择(0-9):");
        scanf("%d", &i);
        switch (i) {
        case 1:inputt(); break;
        case 2:modify(); break;
        case 3:deletee(); break;
        case 4:insert(); break;
        case 5:display(); break;
        case 6:search(); break;
        case 7:sort(); break;
        case 8:SearchLow(); break;
        case 9:SearchHigh(); break;
        case 0:exit(0);
        default:;
        }
        Save();
    }
    return 0;
}

4.运行结果如下: 

 

三、在线协助: 

如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DFS算法-leetcode java题解

DFS算法-leetcode java题解 本文目录DFS算法-leetcode java题解leetcode 547. 省份数量leetcode 463. 岛屿的周长leetcode 200. 岛屿数量leetcode 130. 被围绕的区域leetcode 417. 太平洋大西洋水流问题leetcode 17. 电话号码的字母组合leetcode 22. 括号生成leetcode 39. 组合…

List 容器的接口使用、迭代器失效(仅erase)

目录 一、接口使用 ① 构造函数 ②迭代器 ③ 容量与元素修改 ④ remove ⑤remove_if ⑥ unique ⑦sort&#xff08;&#xff09; ⑧ merge() 二、对于迭代器失效问题 一、接口使用 ① 构造函数 void MyListTest1() {list<int> l1;list<int> l5(10, 5);vector…

〖产品思维训练白宝书 - 产品思维认知篇⑦〗- 聊一聊 产品经理 的工作内容与职责划分

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

自定义类型【c语言】

前言&#xff1a; c语言提供了丰富的内置类型&#xff0c;但是在描述一些复杂对象的时候仍不能满足一定的功能&#xff0c;因此c语言为了支持我们能描述一些复杂对象给出了我们能自定义的一些类型&#xff0c;因此便有了自定义类型。 在之前我们已经初步对结构体进行相应的了解…

提升工作效率,领导都夸的开源数据可视化工具

echarts官网有很多好看的图例&#xff0c;怎么结合起来放到自己的项目中呢&#xff1f;比如这种酷酷的首页&#xff1a; 这种看起来美观又大方&#xff0c;自己要是能用上就好了。 其实这是可以的&#xff0c;echarts上有现成的图例和示例代码&#xff0c;咱们只要改改数据源就…

华为防火接与二层交换机对接配置VLAN上网设置

拓扑图 一、防火墙设置 1、G1/0/0接口设置IP&#xff0c;G1/0/1接口切换二层口设置VLAN&#xff0c;G1/0/0 桥接了本地无线网卡来模拟外网地址 <USG6000V1>sys [USG6000V1]sys FW1 [FW1]un in en# 设置外网IP [FW1]int g1/0/0 [FW1-GigabitEthernet1/0/0]ip addr 192.1…

ORB-SLAM2 --- LocalMapping::SearchInNeighbors函数

0.函数更新内容 仅对地图点进行融合。 1.函数作用 检查并融合当前关键帧与相邻帧&#xff08;两级相邻&#xff09;重复的地图点。 2.函数步骤 Step 1&#xff1a;获得当前关键帧在共视图中权重排名前nn的邻接关键帧 Step 2&#xff1a;存储一级相邻关键帧及其二级相邻关键帧 将…

Java变量的作用域:静态变量、全局变量和局部变量

变量的作用域规定了变量所能使用的范围&#xff0c;只有在作用域范围内变量才能被使用。根据变量声明地点的不同&#xff0c;变量的作用域也不同。根据作用域的不同&#xff0c;一般将变量分为不同的类型&#xff1a;成员变量和局部变量。下面对这几种变量进行详细说明。成员变…

代码随想录训练营第四十二天

1.背包问题 1.1 01背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 1.1.1 用动态规划的方法解决------二维dp数组01背包 ①确定dp…

学一下这个60秒的男人

程序员求职简历&#xff0c;项目经验怎么写&#xff1f;免费修改简历、提供模板并内部推荐今天想跟大家聊一下这个“60秒”的男人。10月21日&#xff0c;罗辑思维发文&#xff1a;《罗胖60秒&#xff1a;10年期满&#xff0c;今日告别》。10年前&#xff0c;罗振宇开始干一件事…

智能防雷,智能防雷系统的应用研究方案

“智慧智能防雷”是近年来防雷界提出的一个全新的防雷理念&#xff0c;是防雷业发展的趋势。所谓“智慧智能防雷”&#xff0c;是将大数据分析、云存储、人工智能、移动互联网和物联网技术融入到传统防雷措施中&#xff0c;并通过软、硬件系统的集成&#xff0c;实现对特定的区…

企业微信收款后可以进行退款吗?如何操作?

很多企业使用企业微信运营&#xff0c;就是看中了企业微信对外收款的功能&#xff0c;它不仅简化了转账步骤&#xff0c;而且可以在必要时直接完成退款&#xff0c;操作简单方便。前言随着企业微信的普及度&#xff0c;越来越多的企业认识到企业微信运营功能的强大&#xff0c;…

带你了解2023新版本Internet Download Manager有哪些新功能优势

作为一款体积只有10M的下载软件&#xff0c;IDM却常年霸占着各软件评测榜的前列。它的界面简洁清爽&#xff0c;使用过程中无弹窗、无广告&#xff0c;小小的体积竟能将下载速度提升5倍&#xff01;该软件一进入中国市场&#xff0c;便受到了广大用户的追捧&#xff0c;被大家亲…

2023年留学基金委(CSC)联合培养博士研究生项目解读及建议

近日&#xff0c;国家留学基金委&#xff08;CSC&#xff09;公布了2023年国家建设高水平大学公派研究生项目&#xff0c;该项目分为两部分&#xff0c;1.申请攻读博士学位研究生&#xff1b;2.申请联合培养博士研究生。本文知识人网小编仅就联合培养博士研究生部分进行解读&am…

【生信】R语言进行id转换的方法(附可直接使用代码)

本文我都默认已经下载好了表达矩阵exp了哦 代码都是直接给出来了&#xff0c;需要修改的地方我进行了标记 一般只要修改一下都能直接用了 方法一&#xff1a;下载平台数据以得到对应信息 然后进入官网https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi&#xff0c;在这里我以G…

【数据结构】4.4 数组

4.4.1 数组的定义 数组&#xff1a; 按照一定格式排列起来的&#xff0c;具有相同类型的数据元素的集合。 一维数组&#xff1a; 若线性表中的数据元素为非结构的简单元素&#xff0c;则称为一维数组。逻辑结构&#xff1a;线性结构&#xff0c;固定长度的线性表。声明格式…

如何学习微服务架构?(项目学习)

哪些项目适合使用微服务架构&#xff1f;对于一般的公司来说&#xff0c;微服务的实践有着很大的技术挑战&#xff0c;所以并不是所有的公司都适合将整体架构拆分成微服务架构。一般来说&#xff0c;微服务架构更适合于未来具有一定扩展复杂度、具有大量增量用户期望的应用&…

最新综述:基于语言模型提示学习的推理

©PaperWeekly 原创 作者 | OE-Heart引言推理能力是人类智能的核心能力之一。随着预训练技术的不断发展&#xff0c;大模型辅之以提示学习&#xff08;如 Chain-of-Thought Prompting [1]&#xff09;涌现出一系列的惊人的推理能力&#xff0c;引起了学术界、工业界学者的…

动态规划——数位dp

数位dp 文章目录数位dp概述题目特征基本原理计数技巧模板例题度的数量思路代码数字游戏思路代码不要62思路代码概述 数位是指把一个数字按照个、十、百、千等等一位一位地拆开&#xff0c;关注它每一位上的数字。如果拆的是十进制数&#xff0c;那么每一位数字都是 0~9&#xf…

unity 前向渲染 渲染阴影原理

下面情况默认是 前向渲染路径&#xff0c;场景中平行光开启了阴影方式原理备注ShadowMap把相机放到光源的位置&#xff0c;那么场景中该光源的阴影区域就是那些相机看不到的位置得到的是&#xff1a;场景中距离光源最近的表面位置&#xff08;深度信息&#xff09;unity中专门的…