C语言——课设万能模板、实战项目——学生信息管理系统

news2024/11/25 10:47:15

本人无偿奉献学生管理系统的所有代码,包括.h头文件和.c文件,要源码私信,或者评论,希望点个关注。可以完整运行。

介绍一下这个系统,该系统包括八个功能:

    printf("1.录入学生信息\n");
    printf("2.打印学生信息\n");
    printf("3.统计学生人数\n");
    printf("4.查找学生信息\n");
    printf("5.修改学生信息\n");
    printf("6.删除学生信息\n");
    printf("7.按成绩排序\n");
    printf("8.退出系统\n");

并且可以存储学生的个人信息,以及进行连续的存储、查找、删除。

.c文件

#include "Student_system.h"
int main()
{
    Node* head = malloc(sizeof(Node));
    head->next = NULL;
    loadstudent(head);
    while (1)
    {
        welcome();
        char c = _getch();
        switch (c)
        {
        case'1':
            inputStudent(head);
            break;
        case'2':
            printstudent(head);
            break;
        case'3':
            countstudent(head);
            break;
        case'4':
            findstudent(head);
            break;
        case'5':
            modifystudent(head);
            break;
        case'6':
            deletestudent(head);
            break;
        case'7':
            sortstudent(head);
            break;
        case'8':
            system("cls");
            printf("欢迎下次使用\n");
            exit(0);
            break;
        default:
            break;
        }
    }
    return 0;
}
void welcome()
{
    printf("**************************\n");
    printf("*****学生成绩管理系统*****\n");
    printf("**************************\n");
    printf("********请选择功能********\n");
    printf("1.录入学生信息\n");
    printf("2.打印学生信息\n");
    printf("3.统计学生人数\n");
    printf("4.查找学生信息\n");
    printf("5.修改学生信息\n");
    printf("6.删除学生信息\n");
    printf("7.按成绩排序\n");
    printf("8.退出系统\n");
    printf("**************************\n");
}

void inputStudent(Node* head)
{
    Node* fresh = (Node*)malloc(sizeof(Node));
    if (fresh == NULL) {
        printf("内存分配失败,无法录入新学生信息。\n");
        return; // 避免对 NULL 指针的解引用
    }
    fresh->next = NULL;
    printf("请输入学生的学号、姓名、成绩");
    scanf_s("%d", &fresh->student.stunum);
    scanf_s("%s",fresh->student.name,20);
    scanf_s("%d", &fresh->student.score);
    
    Node* move = head;
    while (move->next != NULL)
    {
        move = move->next;
    }
    move->next = fresh;
    savestudent(head);
    
    
    
    system("pause");
    system("cls");
}

void printstudent(Node* head)
{
    Node* move = head->next;
    while (move != NULL)
    {
        printf("\n学号:%d 姓名:%s 成绩:%d\n", move->student.stunum, move->student.name, move->student.score);
        printf("\n");
        move = move->next;
    }
}

void countstudent(Node* head)
{
    int count = 0;
    Node* move = head->next;
    while (move != NULL)
    {
        count++;
        move = move->next;
    }
    printf("学生的总人数为:%d\n", count);
    system("pause");
    system("cls");
}

void findstudent(Node* head)
{
    printf("请输入学生的学号:");
    int num;
    scanf_s("%d", &num);
    Node* move = head->next;
    while (move != NULL)
    {
        if (num == move->student.stunum)
        {
            printf("\n学号:%d 姓名:%s 成绩:%d\n", move->student.stunum, move->student.name, move->student.score);
            return;
        }
        move = move->next;

    }
    printf("未找到学生信息:\n");

    system("pause");
    system("cls");

}

void savestudent(Node* head)
{

    FILE* file = fopen("./stu.info", "w");
    if (file == NULL)
    {
        printf("打开失败");
    }
    Node* move = head->next;
    while (move != NULL)
    {
        if (fwrite(&move->student, sizeof(Student), 1, file) != 1)
        {
            printf("写入失败\n");
            return;
        }
        move = move->next;
    }
    fclose(file);
}


void loadstudent(Node* head)
{
    FILE* file = fopen("./stu.info", "r");
    if (!file)
    {
        printf("没有学生文件,跳过读取\n");
        return;

    }
    Node* fresh = malloc(sizeof(Node));
    fresh->next = NULL;
    Node* move = head;
    while (fread(&fresh->student, sizeof(Student), 1, file) == 1)
    {
        move->next = fresh;
        move = fresh;
        fresh = malloc(sizeof(Node));
        fresh->next = NULL;
    }
    free(fresh);
    fclose(file);
    printf("读取成功\n");
}

void modifystudent(Node* head)
{
    printf("请输入要修改的学生信息的学号:");
    int num;
    scanf("%d", &num);
    Node* move = head->next;
    while(move != NULL)
    {
        if (move->student.stunum == num)
        {
            printf("请输入学生的姓名、成绩\n");
            scanf_s("%s", move->student.name, 20);
            scanf_s("%d", &move->student.score);
            savestudent(head);
            printf("修改成功\n");
            system("pause");
            system("cls");
            return;
        }
        move = move->next;
    }
    printf("未找到学生信息");
    system("pause");
    system("cls");
}

void deletestudent(Node* head)
{
    printf("请输入学生的学号:");
    int num;
    scanf_s("%d", &num);
    Node* move = head;
    while (move->next != NULL)
    {
        if (move->next->student.stunum == num)
        {
            Node* tmp = move->next;
            move->next = move->next->next;
            free(tmp);
            tmp = NULL;
            savestudent(head);
            printf("删除成功\n");
            system("pause");
            system("cls");
            return;
        }

        move = move->next;
    }
    printf("未找到学生信息");
    system("pause");
    system("cls");
}

void sortstudent(Node* head)
{
    for (Node* turn = head->next; turn->next != NULL; turn = turn->next)
    {
        for (Node* move = head->next; move->next != NULL; move = move->next)
        {
            if (move->student.score > move->next->student.score)
            {
                Student temp = move->student;
                move->student = move->next->student;
                move->next->student = temp;
            }
        }
    }
    printstudent(head);
}

.h文件

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct _Student
{
    int stunum;
    char name[20];
    int score;
}Student;

typedef struct _Node
{
    Student student;
    struct _Node* next;
}Node;

void welcome();
void inputStudent(Node* head);
void printstudent(Node* head);
void countstudent(Node* head);
void findstudent(Node* head);
void savestudent(Node* head);
void loadstudent(Node* head);
void modifystudent(Node* head);
void deletestudent(Node* head);
void sortstudent(Node* head);

结果

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

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

相关文章

软考中级软件设计师-【计算机系统】必考题汇总

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持…

中原地产:人力资源数字化创新实践分享

近日&#xff0c;法大大与人力资源智享会&#xff08;以下简称“智享会”&#xff09;联合发布了《第七届人力资源共享服务中心研究报告》&#xff08;点击阅读及下载&#xff1a;最新&#xff01;《第七届人力资源共享服务中心研究报告》重磅来袭&#xff09;&#xff0c;该报…

2024【华为战报】8月HCIP考试战报!

了解更多往期考试→点 【考试战报】 华为认证 HCIP 8月 微思 | HCIP 考试战报 HCIP 最新开班 厦门面授 全国直播 每月循环开班 点击查看【华为认证 HCIP】 END 微思网络&#xff0c;始于2002年 专业IT认证培训22年&#xff0c;面向全国招生&#xff01; 微思-主要课程有&a…

【App】

1. 移动App的开发模式 原生开发 - 原生App > Android、IOS、Windows混合开发 - 混合App > React Native、Weex、Flutter React Native 是基于 React 语法开发的一个混合开发框架Weex 是基于 Vue 语法开发的一个混合开发框架Flutter 是 Google 推出来的一款混合开发框架比…

AI大模型全栈工程师课程笔记 - RAG 检索增强生成

文章目录 \1. RAG\2. 构建流程 2.1 文档加载与切分2.2 传统检索引擎2.3 LLM接口封装2.4 构建prompt \3. 向量检索\4. 向量数据库\5. 基于向量检索的RAG\6. 进阶知识 6.1 文本分割粒度6.2 检索后再排序6.3 测试 1. RAG RAG&#xff08;Retrieval Augmented Generation&#…

计算机网络 --- 计算机网络的分类

一、计算机网络分类 1.1 按分布范围分类 举例&#xff1a;广域网&#xff08;WAN&#xff09;、局域网&#xff08;LAN&#xff09; 举例&#xff1a;个域网&#xff08;PAN&#xff09; 1.2 按传输技术分类 广播式网络――当一台计算机发送数据分组时&#xff0c;广播范围…

xmake与包管理:又一个现代c++构建工具?

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 主要起因是我在逛Reddit帖子时,看到关于一些c构建系统的评价. cmake似乎有些过于复杂,它与vcpkg,conan的包管理之间的"融合"可能在有些时候也显得麻烦. 一些人尝试了我没见过的选项, 所以这里主要试试除了…

推荐一款开源的API开放平台,5分钟就可以搭建企业专属的API开放门户!

在过去的十年中&#xff0c;企业API治理并未受到广泛关注。然而&#xff0c;随着时间的推进&#xff0c;特别是在近几年&#xff0c;企业技术管理者对API治理的重视程度显著提高&#xff0c;开始将API视为企业资产的重要组成部分。API不再仅仅是技术层面的概念&#xff0c;而是…

场外期权合法吗?

今天期权懂带你了解场外期权合法吗&#xff1f;场外期权是指在场外市场进行交易的期权合约&#xff0c;而非在标准化交易所进行交易。这些期权合约通常由交易双方直接协商具体条款&#xff0c;包括到期时间、行权价格和标的资产等。 场外期权主要特点 1.定制化&#xff1a;OT…

一种多态的实现方法

通过 Activator.CreateInstance 以及 继承关系实现 public interface Name{String GetName();}public class Join : Name{public string GetName(){return "Join";}}public class Thomas : Name{public string GetName(){return "Thomas";}}public class …

MongoDB的Map-Reduce操作与聚合管道操作的两个实例相互转换

一、插入集合 comment 的文档的内容 二、题目要求 将集合 comment 中的文档进行聚合操作&#xff0c;即将字段 state为1的文档查询出来&#xff0c;然后按字段 nickname 进行分组,最后计算出每个评论者的评论条数。 三、mapReduce 操作代码 db.comment.mapReduce(// Map函数&…

机器学习(西瓜书)第 7 章 贝叶斯分类器

7.1 贝叶斯决策论 贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方 法.对分类任务来说,在所有相关概率都已知的理想情形下&#xff0c;贝叶斯决策论考虑 如何基于这些概率和误判损失来选择最优的类别标记.下面我们以多分类任务 为例来解释其基本原理. 贝…

9月12号作业

主要更改的代码 void Widget::read_solt() { QByteArray msg socket->readAll();//接受信息 if(QString::fromLocal8Bit(msg)msg2||msg3QString::fromLocal8Bit(msg)||msg6QString::fromLocal8Bit(msg)) { QListWidgetItem *listItem new QListWidgetItem(QString::fromL…

策略抉择:左右为难,交易方向要如何破局?

交易决策的核心往往围绕着一个关键问题&#xff1a;是采取左侧交易策略还是右侧交易策略&#xff1f;左侧交易&#xff0c;亦称逆向交易&#xff0c;与右侧交易&#xff08;顺势交易&#xff09;形成鲜明对比&#xff0c;两者路径迥异&#xff0c;所以让很多交易员不知道该如何…

flac格式怎么转换成mp3?给你介绍8种flac转MP3的方法

flac格式怎么转换成mp3&#xff1f;flac格式以其无损压缩方式闻名&#xff0c;能够保存音频的原始质量&#xff0c;满足高保真音频需求。然而&#xff0c;这种高质量也意味着flac文件通常占用较多的存储空间&#xff0c;这在某些场景下可能不太方便。例如&#xff0c;对于那些希…

增益带宽积和共模抑制比

增益带宽积&#xff1a; 这是运放的开环增益曲线&#xff1a;在10hz以下开环增益不变&#xff0c;但之后&#xff0c;随着频率的增加开环增益逐渐减小&#xff0c;并有一定的函数关系。 增益带宽积 开环增益 * 带宽 不同运放的增益带宽积有所不同。 例如当增益带宽积为10^6…

[Golang] goroutine

[Golang] goroutine 文章目录 [Golang] goroutine并发进程和线程协程 goroutine概述如何使用goroutine 并发 进程和线程 谈到并发&#xff0c;大多都离不开进程和线程&#xff0c;什么是进程、什么是线程&#xff1f; 进程可以这样理解&#xff1a;进程就是运行着的程序&…

根据NVeloDocx Word模板引擎生成Word(四)

前面介绍了《E6低代码开发平台》的Word模版引擎NVeloDocx&#xff0c;实现了表单的基本字段、子表、单张图片、二维码、条形码怎么基于NVelocity脚本输出到Word文件&#xff0c;都是些比较简单且常用的需求。 本篇介绍怎么基于NVeloDocx在Word中插入图表&#xff0c;目前只支持…

Java学习 - JDBC

JDBC 这是一些我跟着网课上的JDBC的内容&#xff0c;进行了稍稍的整理 1&#xff0c;JDBC概述 在开发中我们使用的是java语言&#xff0c;那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套…

24 家国内大模型面经及考点总结!

我意识到有很多经验和知识值得分享给大家&#xff0c;也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑&#xff0c;所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限&#xff0c;很多互联网行业朋友无法获得正确的资料得到学习提升&#…