17 C语言学生管理系统

news2024/11/18 23:35:49

学生管理系统

👍😂💯 项目代码

代码可能存在细节上的错误,希望大家可以指导意见。


#define _CRT_SECURE_NO_WARNINGS  1

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

#define MAX_STUDENTS 100

typedef struct {
    int id;
    char name[50];
    float score1;
    float score2;
    float score3;
    float average;
} Student;

Student students[MAX_STUDENTS];
int num_students = 0;

void display_menu() {
    printf("**********************************************\n");
    printf("              学生管理系统\n");
    printf("**********************************************\n");
    printf("                                          \n");
    printf(" 1.增加一位学生信息  2.删除一位同学信息      \n");
    printf(" 3.按学号查询学生    4.按姓名查询学生       \n");
    printf(" 5.修改学生信息      6.按姓名排序           \n");
    printf(" 7.按平均分排序      8.装入学生信息         \n");
    printf(" 9.保存学生信息      0.显示全部同学的信息   \n");
    printf("                                          \n");
    printf("按q或者Q退出系统                    \n");
    printf("**********************************************\n");
    printf("请选择操作:");
}

void add_student() {
    Student new_student;
    printf("输入学生的学号(-1 结束): ");
    scanf("%d", &new_student.id);

    if (new_student.id == -1) {
        return;
    }

    printf("输入学生的姓名: ");
    scanf("%s", new_student.name);
    printf("输入学生的高数成绩: ");
    scanf("%f", &new_student.score1);
    printf("输入学生的C语言成绩: ");
    scanf("%f", &new_student.score2);
    printf("输入学生的英语成绩: ");
    scanf("%f", &new_student.score3);
    new_student.average = (new_student.score1 + new_student.score2 + new_student.score3) / 3.0;
    students[num_students++] = new_student;
    printf("学生信息添加成功\n");
}

void delete_student() {
    int student_id;
    int i;
    printf("输入学生的学号: ");
    scanf("%d", &student_id);
    int index = -1;
    for (i = 0; i < num_students; i++) {
        if (students[i].id == student_id) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        printf("学号不存在\n");
        return;
    }
    for (i = index; i < num_students - 1; i++) {
        students[i] = students[i + 1];
    }
    num_students--;
    printf("删除学生信息成功\n");
}

void search_by_id() {
    int student_id;
    int i;
    printf("输入学生的学号: ");
    scanf("%d", &student_id);
    int index = -1;
    for (i = 0; i < num_students; i++) {
        if (students[i].id == student_id) {
            index = i;
            break;
        }
    }

    if (index == -1) {
        printf("学号不存在\n");
        return;
    }
    printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
    printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
           students[index].id, students[index].name, students[index].score1,
           students[index].score2, students[index].score3, students[index].average);
}

void search_by_name() {

    int found = 0;
    char student_name[50];
    int i;
    printf("输入学生的姓名: ");
    scanf("%s", student_name);
    printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
    for (i = 0; i < num_students; i++) {
        if (strcmp(students[i].name, student_name) == 0) {
            printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
                   students[i].id, students[i].name, students[i].score1,
                   students[i].score2, students[i].score3, students[i].average);
            found = 1;
        }
    }

    if (!found) { printf("学生不存在\n"); }
}

void update_student() {
    int student_id;
    int index = -1;
    int i;
    printf("输入学生的学号: ");
    scanf("%d", &student_id);
    for (i = 0; i < num_students; i++) {
        if (students[i].id == student_id) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        printf("学号不存在\n");
        return;
    }
    printf("输入学生的姓名: ");
    scanf("%s", students[index].name);
    printf("输入学生的课程1成绩: ");
    scanf("%f", &students[index].score1);
    printf("输入学生的课程2成绩: ");
    scanf("%f", &students[index].score2);
    printf("输入学生的课程3成绩: ");
    scanf("%f", &students[index].score3);
    students[index].average = (students[index].score1 + students[index].score2 + students[index].score3) / 3.0;
    printf("学生信息更新成功\n");
}

void sort_by_name() {
    int i, j;
    for (i = 0; i < num_students - 1; i++) {
        for (j = 0; j < num_students - 1 - i; j++) {
            if (strcmp(students[j].name, students[j + 1].name) > 0) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
    printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
    for (i = 0; i < num_students; i++) {
        printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
               students[i].id, students[i].name, students[i].score1,
               students[i].score2, students[i].score3, students[i].average);
    }
}

void sort_by_average() {
    int i, j;
    for (i = 0; i < num_students - 1; i++) {
        for (j = 0; j < num_students - 1 - i; j++) {
            if (students[j].average < students[j + 1].average) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
    printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
    for (i = 0; i < num_students; i++) {
        printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
               students[i].id, students[i].name, students[i].score1,
               students[i].score2, students[i].score3, students[i].average);
    }
}

void load_students() {
    FILE *file = fopen("student_info.bin", "rb");
    if (file == NULL) {
        printf("无法打开文件\n");
        return;
    }
    fread(&num_students, sizeof(int), 1, file);
    fread(students, sizeof(Student), num_students, file);
    fclose(file);
}

void save_students() {
    FILE *file = fopen("student_info.bin", "wb");
    if (file == NULL) {
        return;
    }
    fwrite(&num_students, sizeof(int), 1, file);
    fwrite(students, sizeof(Student), num_students, file);
    fclose(file);
    printf("学生信息保存成功\n");
}

void display_students() {
    int i;
    printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
    for (i = 0; i < num_students; i++) {
        printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].id, students[i].name, students[i].score1,
               students[i].score2, students[i].score3, students[i].average);
    }
}

int main() {
    load_students();
    while (1) {
        display_menu();
        char choice;
        scanf(" %c", &choice);
        switch (choice) {
            case '1':
                add_student();
                break;
            case '2':
                delete_student();
                break;
            case '3':
                search_by_id();
                break;
            case '4':
                search_by_name();
                break;
            case '5':
                update_student();
                break;
            case '6':
                sort_by_name();
                break;
            case '7':
                sort_by_average();
                break;
            case '8':
                load_students();
                break;
            case '9':
                save_students();
                break;
            case '0':
                display_students();
                break;
            case 'q':
            case 'Q':
                printf("再见!\n");
                exit(0);
            default:
                printf("输入错误,请重新输入!\n");
                break;
        }
    }
    return 0;
}

项目运行展示





这段代码是一个简单的学生管理系统,它使用 C 语言编写,主要用于存储、管理和展示学生的基本信息及成绩。下面是对项目结构、逻辑结构和项目背景的详细描述:

项目结构

  1. 头文件和宏定义

    • #define _CRT_SECURE_NO_WARNINGS 1:这是为了防止在 Visual Studio 等编译器中出现关于不安全函数的警告。
    • #include 指令用于引入标准库,如 stdio.hstdlib.hstring.h,这些库提供了输入输出、内存操作和字符串处理等功能。
  2. 数据结构定义

    • Student 结构体定义了学生的信息,包括学号、姓名、三门课程的成绩和平均分。
  3. 全局变量

    • students 数组用于存储所有学生的信息。
    • num_students 变量用于跟踪当前存储的学生数量。
  4. 功能函数

    • display_menu():显示系统菜单。
    • add_student():添加学生信息。
    • delete_student():删除学生信息。
    • search_by_id()search_by_name():分别通过学号和姓名查询学生信息。
    • update_student():更新学生信息。
    • sort_by_name()sort_by_average():分别按姓名和平均分对学生进行排序。
    • load_students()save_students():从文件加载和保存学生信息。
    • display_students():显示所有学生信息。
  5. 主函数 main()

    • 初始化学生信息数组。
    • 进入一个无限循环,显示菜单并根据用户输入执行相应的操作。
    • 提供退出选项。

逻辑结构

  1. 初始化

    • main() 函数开始时,调用 load_students() 从文件加载已有的学生信息。
  2. 用户交互

    • 通过 display_menu() 函数显示操作选项。
    • 用户输入选择后,通过 switch 语句执行相应的功能函数。
  3. 数据处理

    • 每个功能函数都对 students 数组和 num_students 变量进行操作,以实现增加、删除、查询、更新、排序和显示学生信息的功能。
  4. 数据持久化

    • load_students()save_students() 函数通过二进制文件 student_info.bin 实现数据的持久化存储。

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

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

相关文章

轻量级 C Logger

目录 一、描述 二、实现效果 三、使用案例 四、内存检测 一、描述 最近实现一个 WS 服务器&#xff0c;内部需要一个日志打印记录服务器程序的运行过程&#xff0c;故自己实现了一个轻量级的 logger&#xff0c;主要包含如下特征&#xff1a; 可输出 debug、info、warn、er…

C++ 进阶(3)虚函数表解析

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 请多多指教&#xff01; 目录 一、虚函数表 二、单继承&#xff08;无虚函数覆盖&#xff09; 继承关系表&#xff1a; 对于实例&#xff1a;derive d 的虚函数表&#xff1a; 对于实例&#xff1a;b…

现货白银交易点差是多少

现货白银投资者通过交易平台进行买卖操作的时候&#xff0c;平台会以“点差”的形式向投资者收取一定的交易费用。所谓的点差&#xff0c;也就是平台所报出的买入价和卖出价之间的固定差额&#xff0c;由于现货白银的报价是“成对”的&#xff0c;所以点差的存在也是其交易模式…

连锁收银系统支持带结算功能

连锁实体店的收银系统需要支持结算功能&#xff0c;以适应连锁运营效率和提升连锁管理的水平。商淘云连锁收银系统与您一起分享连锁收银系统需支持结算功能的三大必要点。大家点赞收藏&#xff0c;以免划走后找不到了。 一是&#xff0c;连锁模式的运营比较复杂&#xff0c;有加…

【小技巧】Keil C51 报错“*** ERROR L107: ADDRESS SPACE OVERFLOW****

软件&#xff1a;Keil C51 C51V961版本 电脑&#xff1a;Win10 报错提示&#xff1a; compiling System.c... linking... *** ERROR L107: ADDRESS SPACE OVERFLOW SPACE: DATA SEGMENT: ?DT?LCD LENGTH: 0034H Program Size: data174.0 xdata17 code1205 Target not create…

开源进销存系统

推荐一款开源的进销存系统 项目地址&#xff1a;进销存系统 仓库管理系统 SAAS进销存 进销存ERP: 进销存系统 仓库管理系统 SAAS进销存 进销存ERPhttps://gitee.com/flyemu/jxc.git 主要功能模块 销售 采购 库存 资料 设置 支持saas多租户&#xff0c;100%开源可二开 …

【Redis】 关于 Redis 有序集合类型

文章目录 &#x1f343;前言&#x1f334;普通命令介绍&#x1f6a9;zadd&#x1f6a9;zcard&#x1f6a9;zcount&#x1f6a9;zrange&#x1f6a9;zrevrange&#x1f6a9;zrangebyscore&#x1f6a9;zpopmax&#x1f6a9;zpopmin&#x1f6a9;zrank&#x1f6a9;zrevrank&…

办公自动化-Python如何提取Word标题并保存到Excel中?

办公自动化-Python如何提取Word标题并保存到Excel中&#xff1f; 应用场景需求分析实现思路实现过程安装依赖库打开需求文件获取word中所有标题去除不需要的标题创建工作簿和工作表分割标题功能名称存入测试对象GN-TC需求标识符存入测试项标识存入需求标识符 完整源码实现效果学…

交换机的三层交换技术

现有pc1与pc2不在同一个网段之下&#xff0c;通过交换机相连接。 进人交换机1&#xff0c;创建两个vlan 10和vlan 20 &#xff0c;进入串口2设置串口模式为access&#xff0c;并且设置默认vlan为10.进入串口3设置串口模式为access&#xff0c;并且设置默认vlan为20. 进入串口1…

学习笔记——动态路由协议——OSPF(OSPF基本术语)

OSPF基本术语 1、链路状态(LS)与链路状态通告(LSA) 链路(LINK)&#xff1a;路由器上的一个接口。 状态(State)&#xff1a;描述接口以及其与邻居路由器之间的关系。 (1)链路状态(LS) OSPF是一种链路状态协议&#xff0c;所谓的链路状态&#xff0c;其实就是路由器的接口状态…

Java-数组内存解析

文章目录 1.内存的主要结构&#xff1a;栈、堆2.一维数组的内存解析3.二维数组的内存解析 1.内存的主要结构&#xff1a;栈、堆 2.一维数组的内存解析 举例1&#xff1a;基本使用 举例2&#xff1a;两个变量指向一个数组 3.二维数组的内存解析 举例1&#xff1a; 举例2&am…

Thingsboard规则链:Calculate Delta节点详解

在物联网(IoT)应用中&#xff0c;对设备数据的实时分析和处理是优化运营、预测维护的关键。Thingsboard作为一款功能强大的物联网平台&#xff0c;其规则引擎提供了丰富的节点来处理和分析数据流。其中&#xff0c;Calculate Delta节点是一个重要的工具&#xff0c;用于计算连续…

HAL库+LWIP+LAN8720+热插拔

定时任务中&#xff0c;查询LAN8720的状态寄存器 PHY_BSR 0x01&#xff0c;成功读取后&#xff0c;检查16位数据的BIT2&#xff0c;即可获取网线连接状态 uint32_t phyreg 0;if(HAL_ETH_ReadPHYRegister(&g_eth_handler, PHY_BSR, &phyreg) HAL_OK){if(((phyreg >…

电脑显示不出网络

你的电脑是否在开机后显示不出网络&#xff0c;或者有网络消失的现象&#xff1f;今天和大家分享我学到的一个办法&#xff0c;希望对大家有用。 分析出现这类现象的原因&#xff1a;可能是电脑网卡松动了&#xff0c;电脑中存在静电流。 解决办法&#xff1a;先将电脑关机&am…

20 VUE学习:插件

介绍 插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码。下面是如何安装一个插件的示例&#xff1a; import { createApp } from vueconst app createApp({})app.use(myPlugin, {/* 可选的选项 */ })一个插件可以是一个拥有 install() 方法的对象&#xff0c;也可以直接…

全文最详细的生产管理完整方案!那些让人头疼的生产管理难题及解决方法!

什么是生产管理系统&#xff1f;为何生产管理系统在企业管理中如此重要&#xff1f;生产管理系统的核心模块包括哪些&#xff1f;为何企业在生产管理系统中常常遭遇项目信息碎片化、任务分配和跟踪困难等痛点&#xff1f;又该如何针对生产管理痛点进行优化&#xff1f; 本文40…

【数据结构与算法 | 基础篇 | 队列篇】力扣102, 107

1. 力扣102 : 二叉树的层序遍历 (1). 题 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3]…

Nginx教程(持续更新中~)

浏览器优先查看host文件中的映射&#xff0c;如果host中没有就会从网上CDN找该域名对应的ip,但是目前使用的www.123.com是外卖假设的&#xff0c;CDN中并没有&#xff0c;所以就采用host中填写 第二种weight: 第三种 ip_hash: 第四种 fair: ​​​​​​

AWS 高防和阿里云高防深度对比

随着网络攻击的不断增加&#xff0c;企业对于网络安全的需求也越来越高。在这种情况下&#xff0c;高防护服务成为了企业网络安全的重要组成部分。AWS和阿里云作为全球领先的云计算服务提供商&#xff0c;都提供了高防护服务&#xff0c;但它们之间存在着一些差异。我们九河云一…

Idea java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space 解决

咱们平时的开发过程中一定会进行本地调试&#xff0c;今天我也是安装了新的idea之后拉了一个比较大的项目进行本地调试的时候报错。报错信息如下&#xff1a; java: java.lang.OutOfMemoryError: Java heap space java.lang.RuntimeException: java.lang.OutOfMemoryError: Ja…