当前位置: 首页 > news >正文

【挑战开发100个项目 | 1. C语言学生管理系统】

本项目是一个简易的学生信息管理系统,用户可以通过命令行界面完成学生信息的增加、删除、修改、查询、排序和列表展示等功能。数据以txt文件形式存储,实现了数据持久化。项目采用模块化设计,具有较好的可读性和扩展性。适用于初学者学习c语言,也适用于高校学生课程设计,毕业设计参考。

一,开发环境需求

  • 操作系统 :windows, linux

  • 开发环境工具 :qt ,vscode, visual studio

  • 技术要求

    • 语言: C
    • 数据结构: 链表
    • 文件操作: 文件读写操作

二,功能说明

在这里插入图片描述

三,功能实现

  1. 录入学生信息
void addStudent(StudentList *list) {Student newStudent;printf("请输入学生信息:\n");printf("学号: ");scanf("%d", &(newStudent.id));while(getchar() != '\n');printf("姓名: ");fgets(newStudent.name, sizeof(newStudent.name), stdin);newStudent.name[strlen(newStudent.name)-1] = '\0'; // remove the newlineprintf("年龄: ");scanf("%d", &(newStudent.age));while(getchar() != '\n');printf("性别: ");fgets(newStudent.gender, sizeof(newStudent.gender), stdin);newStudent.gender[strlen(newStudent.gender)-1] = '\0';printf("专业: ");fgets(newStudent.major, sizeof(newStudent.major), stdin);newStudent.major[strlen(newStudent.major)-1] = '\0';printf("班级: ");fgets(newStudent.class_name, sizeof(newStudent.class_name), stdin);newStudent.class_name[strlen(newStudent.class_name)-1] = '\0';printf("成绩: ");scanf("%f", &(newStudent.score));// add the new student to the listStudentNode *newNode = (StudentNode*)malloc(sizeof(StudentNode));newNode->data = newStudent;newNode->next = list->head;list->head = newNode;list->count++;printf("学生信息已添加成功!\n");
}

此函数用于添加学生信息。

  1. 删除学生信息
void deleteStudent(StudentList *list) {int id;printf("请输入要删除的学生的学号: ");scanf("%d", &id);StudentNode *current = list->head;StudentNode *previous = NULL;while (current != NULL) {if (current->data.id == id) {if (previous == NULL) {list->head = current->next;} else {previous->next = current->next;}free(current);list->count--;printf("学生信息已删除。\n");return;}previous = current;current = current->next;}printf("未找到该学生的信息。\n");
}

此函数用于删除指定学生信息。

3.s 修改学生信息

void modifyStudent(StudentList *list) {int id;printf("请输入要修改的学生的学号: ");scanf("%d", &id);StudentNode *current = list->head;while (current != NULL) {if (current->data.id == id) {printf("请输入新的学生信息:\n");printf("姓名: ");while(getchar() != '\n'); // clear bufferfgets(current->data.name, sizeof(current->data.name), stdin);current->data.name[strlen(current->data.name)-1] = '\0'; // remove newlineprintf("年龄: ");scanf("%d", &(current->data.age));printf("性别: ");while(getchar() != '\n');fgets(current->data.gender, sizeof(current->data.gender), stdin);current->data.gender[strlen(current->data.gender)-1] = '\0';printf("专业: ");while(getchar() != '\n');fgets(current->data.major, sizeof(current->data.major), stdin);current->data.major[strlen(current->data.major)-1] = '\0';printf("班级: ");while(getchar() != '\n');fgets(current->data.class_name, sizeof(current->data.class_name), stdin);current->data.class_name[strlen(current->data.class_name)-1] = '\0';printf("成绩: ");scanf("%f", &(current->data.score));printf("学生信息已修改。\n");return;}current = current->next;}printf("未找到该学生的信息。\n");
}

此函数用于修改指定学生信息。

  1. 查询学生信息
void queryStudent(const StudentList *list) {int id;printf("请输入要查询的学生的学号: ");scanf("%d", &id);StudentNode *current = list->head;while (current != NULL) {if (current->data.id == id) {printf("学号: %d\n", current->data.id);printf("姓名: %s\n", current->data.name);printf("年龄: %d\n", current->data.age);printf("性别: %s\n", current->data.gender);printf("专业: %s\n", current->data.major);printf("班级: %s\n", current->data.class_name);printf("成绩: %.2f\n", current->data.score);return;}current = current->next;}printf("未找到该学生的信息。\n");
}

此函数用于查询指定学生信息。

  1. 对学生信息排序
// 排序学生信息(这里以学号为例,升序排列)
void sortStudents(StudentList *list) {// 使用冒泡排序算法if (list->count < 2) return;StudentNode *i, *j;for (i = list->head; i->next != NULL; i = i->next) {for (j = list->head; j->next != NULL; j = j->next) {if (j->data.id > j->next->data.id) {// 交换数据Student temp = j->data;j->data = j->next->data;j->next->data = temp;}}}printf("学生信息已排序。\n");
}

此函数用于对学生信息进行排序。

  1. 列出所有学生信息
void displayAllStudents(const StudentList *list) {if (!list->head) {printf("没有学生信息可供显示。\n");return;}printf("学号   姓名       年龄 性别 专业                  班级       成绩\n");printf("-----------------------------------------------------------------\n");StudentNode *current = list->head;while (current != NULL) {printf("%-6d %-10s %-4d %-4s %-20s %-10s %.2f\n",current->data.id, current->data.name, current->data.age,current->data.gender, current->data.major, current->data.class_name,current->data.score);current = current->next;}printf("-----------------------------------------------------------------\n");
}

此函数用于显示所有学生的信息。

四,效果图

后续截图添加

五,源码

代码已开源,可访问gitee下载。

六,总结

本项目是一个简单的学生信息管理系统,通过命令行界面与用户交互。主要实现了学生信息的增、删、查、改等功能。项目中主要使用C语言进行开发,并使用链表作为主要数据结构。经过严格的测试和修正,现在可以正常运行并满足基本的需求。

相关文章:

【挑战开发100个项目 | 1. C语言学生管理系统】

本项目是一个简易的学生信息管理系统&#xff0c;用户可以通过命令行界面完成学生信息的增加、删除、修改、查询、排序和列表展示等功能。数据以txt文件形式存储&#xff0c;实现了数据持久化。项目采用模块化设计&#xff0c;具有较好的可读性和扩展性。适用于初学者学习c语言…...

内存利用:迟来的blindless与逃不掉的exit漏洞

0x01 前言 在计算机安全领域&#xff0c;漏洞的危险性往往与其广泛性和潜在攻击方式密切相关。今天&#xff0c;我们将深入探讨一个异常危险的漏洞&#xff0c;它存在于程序退出时执行的常见函数"exit"中。无论是在操作系统还是应用程序中&#xff0c;"exit&qu…...

Vue - 虚拟DOM的简单理解

目录 虚拟DOM虚拟DOM树生成流程 因为直接操作真实的 DOM 会比较影响效率。所以 vue 使用了 虚拟DOM&#xff08;VNode&#xff09;来描述要渲染的内容。 虚拟DOM 它是一个 js 对象&#xff0c;比如&#xff1a; const vnode {tag: "h1",children: [{ tag: undefi…...

TongWeb8下应用忙碌线程监控

问题 &#xff1a; 在系统运行过程中发现TongWeb进程占用CPU过高&#xff0c;需要分析是应用哪里引起的问题。 分析过程(仅限Linux环境)&#xff1a; 1. 通过top命令查看TongWeb的java进程占用的CPU情况。 查看误区&#xff1a;不要以为java进程CPU占到398%就是高&#xff0…...

Docker部署ActiveMQ消息中间件

1、准备工作 docker pull webcenter/activemq:5.14.3 Pwd"/data/software/activemq" mkdir ${Pwd}/data -p2、运行容器 docker run -d --name activemq \-p 61616:61616 \-p 8161:8161 \-v ${Pwd}/data:/opt/activemq/data \-v /etc/localtime:/etc/localtime \--r…...

Python并发执行(未完待续)

python的多进程执行 多进程实现方式一 from multiprocessing import Processdef func1(name):print("测试 %s 多进程" %name)if __name__ "__main__":process_list []for i in range(5):p Process(target func1, args (Python, ))p.start()process_…...

4.一元多项式相乘

题目说明&#xff1a; 要求采用链表形式&#xff0c;求两个一元多项式的乘积&#xff1a;h3 h1*h2。函数原型为&#xff1a;void multiplication( NODE * h1, NODE * h2, NODE * h3 )。 输入&#xff1a; 输入数据为两行&#xff0c;分别表示两个一元多项式。每个一元多项式以…...

Android Gilde获取网络图片显示保存路径并转化为bitmap

为某个按钮或者图片添加点击事件&#xff0c;然后&#xff1a;strImg为图片url地址 &#xff0c;loadDialog只是个提示信息,可以不要这个参数。使用Glide的onResourceReady方法获取到bitmap对象&#xff1a; LoadDialog loadDialognew LoadDialog(); loadDialog.initShow(cont…...

Uts阿里百川旗舰版插件UniApp-X

简介&#xff1a; 此插件为Uts插件&#xff0c;1.0版暂只支持安卓 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id14771 接入阿里百川安卓旗舰版最新版5.0.1.9&#xff01;支持淘宝授权登录&#xff0c;获取登录用户信息&#xff0c;拉起淘宝&#xff0c;打开商…...

一创聚宽的实盘就要关闭了,有没有好用的实盘平台推荐

挺多的&#xff0c;比较普遍的是QMT和Ptrade&#xff0c;python语言&#xff0c;易上手&#xff0c;通用性好&#xff0c;要说适用性可以考虑Ptrade&#xff0c;问一下你的客户经理有没有&#xff0c;用Ptrade的券商也多&#xff0c;如果之前用一创聚宽你可以无缝切换&#xff…...

全套办公软件Office 2019 mac专业版功能

Microsoft office 2019 Beta for Mac 是一款办公软件套装&#xff0c;它包含常用的办公应用程序&#xff0c;如 Word、Excel、PowerPoint 和 Outlook 等。office 2019 Beta 版本是一个测试版本&#xff0c;旨在让用户提前体验下一个版本的 office 套件&#xff0c;以便用户可以…...

【计算机网络】IP协议

目录 前言 IP协议 基本概念 IP协议格式 分片 16位标识 3位标志与13位片偏移 分片流程 网段划分 网络号和主机号 DHCP协议 CIDR划分方案 特殊的ip地址 ip地址数量限制 私有ip地址与公网ip地址 路由转发 前言 我们前面讲了HTTP/HTTPS协议和TCP/…...

【操作系统笔记九】并发安全问题

用户态抢占和内核态抢占 内核中可以执行以下几种程序&#xff1a; ① 当前运行的进程&#xff1a;陷阱程序&#xff08;系统调用&#xff09; 和 故障程序&#xff08;page fault&#xff09; &#xff0c;进程运行在内核态的时候&#xff0c;其实就是在执行进程在用户态触发的…...

主要文库网站网赚分析

前言 躺赚的方式有很多&#xff0c;最常见的是文档网站。你上传文档后&#xff0c;等别人来下载&#xff0c;然后你就获得收益。这似乎比开直播&#xff0c;写专栏&#xff0c;赚粉丝更轻松&#xff0c;但实际调研发现&#xff0c;情况没那么简单&#xff0c;真正赚到钱的是少…...

“ElementUI实现动态树和动态表格的综合应用“

目录 引言1. ElementUI树1.1 树的基本概念1.2 示例代码和效果展示 2. ElementUI实现动态表格2.1 表格的基本概念2.2 示例代码和效果展示 总结 引言 在前端开发中&#xff0c;动态树和动态表格是常见的功能需求。ElementUI是一套基于Vue.js的组件库&#xff0c;提供了丰富的UI组…...

按键检测|中断检测

一.按键检测 1.硬件原理 当未按下按键时&#xff0c;GPIO_5为低电平&#xff0c;按下按键GPIO_5变为高电平。 根据引脚编号找到引脚名称 根据引脚名称找到引脚编号 裸机程序控制外设 特点&#xff1a;读数据手册、设寄存器值 找出外设有哪些相关寄存器找出外设相关寄存器如何…...

MySQL的执行流程

在聊mysql的执行流程之前&#xff0c;咱们要先聊聊mysql的逻辑架构。 逻辑架构 可以将上图简化为下图 连接层 客服端访问mysql服务器前&#xff0c;要先和mysq建立tcp连接。经过3次握手建立连接成功后&#xff0c;mysql服务器对tcp传输过来的账号密码进行身份认证&#x…...

如何办一份有价值的企业内刊/报纸?向《华为人》学习就够了

前两天有一个朋友联系华研荟&#xff0c;说他是今年大学毕业加入了一个中型公司&#xff0c;他学的是企业管理&#xff0c;在公司人力资源部门工作。上周老板说公司要办一份自己的内刊&#xff0c;这个工作由人力资源部负责&#xff0c;而人力资源经理就把这个活交给她了。 她…...

C++:从初识到初识的旅程

为什么文章是初识到初识呢&#xff0c;因为我真的仅仅是初识&#xff0c;大学只上了半个学期的C&#xff0c;其他的都是网络课程为主 在我踏入大学校门的那刻&#xff0c;我对于未来充满了无限的好奇和期待。其中&#xff0c;C这门神秘的编程语言进入了我的视线。虽然我的专业…...

JavaWeb 学习

1. 基本概念 1.1 Web web&#xff1a;网络&#xff0c;网页 静态 web html&#xff0c;css提供给所有人看的数据始终不会变化 动态 web 淘宝提供给每个人看的数据会有所不同技术栈&#xff1a;Servlet/JSP&#xff0c;ASP&#xff0c;PHP Java 中&#xff0c;动态 web 资…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...