本系统分成了三个文件,main.c student.c student.h

功能:

实现对班级成员的增加、删除、修改、遍历、根据成绩排序。

增加 会检查,现在班级已有的人数,班级是否已满(没有学号重复检测)

删除(根据学号查询-->删除) 会判断 班级中是否存在这个学生

修改(根据学号查询) 可以修改学生的其他信息(除学号外),也有检测该班级中是否存在该学生ID的功能函数

遍历 会判断该班级中是否有学生,没有学生 会做出提示

排序 根据成绩,由高到低,本系统使用的是冒泡排序

注:没有调用数据库,所有的数据都是存在内存里

---代码中有详细注释---

main.c功能

主要包含文件的整体逻辑(子函数的调用),主要的逻辑代码

student.c功能

是子函数的功能实现的执行代码

student.h功能

是函数的所有的头文件,以及结构体的定义

代码

main.c

#include "./student.h"int main(int argc, const char *argv[])
{//使用结构体之前需要定义一个结构体类型的变量class_t my_class;//定义一个班级的结构体变量my_class.count = 0;//初始化班级人数int choose = 0;//循环等待客户操作while(1){//打印主菜单print_menu();printf(">>");scanf("%d",&choose);switch(choose){case 1://插入学生insert_student(&my_class);break;case 2://遍历学生print_student(&my_class);break;case 3://修改学生信息(没有学号)xiugai_student(&my_class);break;case 4://删除学生rm_student(&my_class);break;case 5://根据成绩排序PX_student(&my_class);break;case 6://退出系统exit(0);break;default:printf("输入错误,请重新输入\n");break;}}return 0;
}

student.c

#include "./student.h"void print_menu(){printf("-------------------------------------------------\n");printf("                学生管理系统                     \n");printf("-------------------------------------------------\n");printf("|   1.添加学员  2.遍历学员信息  3.修改学员信息  |\n");printf("|   4.删除学员  5.根据成绩降序排序  6.退出程序  |\n");printf("-------------------------------------------------\n");
}//添加学员信息的函数
int insert_student(class_t *p_class){//主函数传输参数,接收,由于传输的是指针变量,需要定义一个同类型的指针接收//指针的非空检查 否则操作空指针会有段错误if(NULL == p_class){printf("入参指针为空,请检查\n");exit(-1);}if(40 == p_class->count){printf("班级人数已满,无法插入\n");return 0;}printf("请输入学员信息 :姓名 年龄 学号 成绩\n");scanf("%s%d%d%d",p_class->stu[p_class->count].name,&(p_class->stu[p_class->count].age),&(p_class->stu[p_class->count].id),&(p_class->stu[p_class->count].score));//信息写入到指针对应的结构体的 数组 的 新的位置(count位置)//添加完学生后,班级人数加加p_class->count++;
}//输出所有学员信息的函数
int print_student(class_t *p_class){//判断 非空检查if(NULL == p_class){printf("入参指针为空,请检查\n");exit(-1);}if(0 == p_class->count){printf("没有学生,无法遍历\n");return 0;}else{int i = 0;//循环遍历输出,该指针指向的结构体的数组的 第i个成员for(i = 0; i < p_class->count; i++){printf("%s %d %d %d \n",p_class->stu[i].name,p_class->stu[i].age,p_class->stu[i].id,p_class->stu[i].score);}}}//修改学生信息
int xiugai_student(class_t *p_class)
{//非空检查if(NULL == p_class){printf("修改,传入指针错误\n");exit(-1);}printf("请输入要修改的学生的学号>>");int num = 0;int i = 0;scanf("%d",&num);//接收对应的学号//循环遍历学号所对应的下标for(i=0;i<p_class->count;i++){if(num == p_class->stu[i].id){//如果找到,说明该学生存在printf("---该学生存在---\n");break;    }   }if(i == p_class->count){printf("----该学生不存在----\n");return 0;    }printf("请输入该学生新的信息:姓名 年龄 成绩\n");scanf("%s%d%d",p_class->stu[i].name,&(p_class->stu[i].age),&(p_class->stu[i].score));printf("修改成功\n");return 0;
}//删除成员
int rm_student(class_t *p_class)
{//非空检查if(NULL == p_class){printf("删除传入指针错误\n");exit(-1);}int num = 0;int i = 0;int n=0;//定义一个标识printf("请输入要删除的学生的学号>>");    scanf("%d",&num);//循环遍历找到该学生的学号,对应的数组的下标for(i=0;i<p_class->count;i++){if(num == p_class->stu[i].id){n=1;//标识printf("--该学生存在--正在删除---\n");break;   }   }//此时i里存的数据就是 对应学号的学生的 数组的下标if(n == 1){//从这一位开始,由后往前,逐个赋值---覆盖for(i;i<p_class->count;i++){p_class->stu[i] = p_class->stu[i+1];      }//删除完成后,班级人数减减p_class->count--;printf("删除成功\n");}else{printf("----该学生不存在----\n");return -1;}return 0;
}//排序
int PX_student(class_t *p_class)
{int i = 0;int j = 0;//定义一个跟学生结构体 相同类型的变量,用来充当 交换数据的桶student_t temp;printf("降序排列\n");//冒泡排序//根据成绩,交换数组中的两个 学生结构体for(i=0;i<p_class->count;i++){for(j=0;j<p_class->count-i-1;j++){if(p_class->stu[j].score < p_class->stu[j+1].score){temp = p_class->stu[j];p_class->stu[j] = p_class->stu[j+1];p_class->stu[j+1] = temp;}}}printf("排序完成\n");return 0;}

注:自己调整 菜单格式

student.h

#ifndef STUDENT_H
#define STUDENT_H
#include <stdio.h>
#include <stdlib.h>
//定义学生结构体,typedef重命名,命名成student_t
typedef struct Student{char name[32];int age;int id;int score;
}student_t;
//定义班级结构体,typedef重命名,class_t
//该结构体 调用学生结构体,生成对应的结构体数组
typedef struct Class{student_t stu[40];//学生成员结构体int count;//班级人数
}class_t;//原型声明
//注意:原型声明 传参位置需要加参数类型
void print_menu();
//传过来的是&my_class(班级的结构体指针) 需要用 班级的结构体指针 进行接收int insert_student(class_t*);
int print_student(class_t*);
int rm_student(class_t*);
int xiugai_student(class_t*);
int PX_student(class_t*);#endif

编译:执行

本系统用Ubuntu编写,gcc编译

把三个文件放一个目录下,

gcc main.c student.c

生成对应的a.out 可执行文件

C语言--学生管理系统--(完整代码)相关推荐

  1. tkinter实现学生管理系统(完整代码)

    文章目录 前言 运行环境 效果预览 项目流程 模块分讲 Login StuWindow StuPassword GuiMain 完整代码 结尾 前言 学习是一个漫长而又痛苦的过程,但学习的收获是令人欣 ...

  2. c语言 饭店管理系统 完整代码

  3. C语言学生管理系统(期末作业,超详细哟,拿走不谢!!!)

    C语言学生管理系统 前言 很多学校都选择C语言作为学生编程入门语言,许多老师都会布置C语言期末大作业,作业题目很多就是学生信息管理系统,以前都是练习小题目,几十行代码就能搞定,而完整的写完这个系统我用 ...

  4. C语言学生管理系统(开源)

    大一课设 - 一个不算糟糕的C语言学生管理系统(附报告书) 大一的时候可真美好啊,当时为了实现一个项目熬夜写一个星期都不觉得累,反而单人完成项目之后还异常兴奋,有种难言的喜悦感,也挺佩服当时的自己的, ...

  5. C语言学生管理系统心得

    心得: 10天基本完成了学生管理系统,任务很紧,还好坚持了下来.考核前一天改bug到凌晨三点多,虽然现在依然功能未能完善,逻辑上还有问题.但是总体的感受是,并没有想象中那样,困难到无法实现,收获真的很 ...

  6. C语言学生管理系统(将数据保存至TXT文档)附源码

    C语言学生管理系统(将数据保存至TXT文档) 在大一学习完C语言之后,回家遇到疫情,便有了用C语言写一个学生管理系统的想法,在家花费了一些时间,刚开始写了一点,后来可能是因为学艺不精就没写完,开学到现 ...

  7. c语言学生管理系统常见问题,关于C语言学生管理系统问题

    关于C语言学生管理系统问题 我弄了两天啦~就快疯掉啦~本来那个txt文件还可以储存的~但现在又不能啦~还有那个输出所有学生的信息~我不会弄啊~~望各位达人伸出援手啊~~小弟感激不尽 #include ...

  8. c语言实现学生管理系统,C语言学生管理系统源代码

    <C语言学生管理系统源代码>由会员分享,可在线阅读,更多相关<C语言学生管理系统源代码(12页珍藏版)>请在人人文库网上搜索. 1.C语言学生成绩管理系统源代码,保证能用#in ...

  9. c语言学生管理系统结点,学生管理系统(数据结构课程设计之完整代码)

    <学生管理系统(数据结构课程设计之完整代码)>由会员分享,可在线阅读,更多相关<学生管理系统(数据结构课程设计之完整代码)(14页珍藏版)>请在人人文库网上搜索. 1.数据结构 ...

最新文章

  1. java 接口工程_Java工程师(15)抽象类与接口
  2. 从RNA-seq结果到差异表达
  3. python的image读取的图片是什么类型的-opencv python 读取图像/显示图像/保存图像...
  4. 网站搭建从零开始(一)域名
  5. PB-treeview基本属性事件函数
  6. 华为云TaurusDB性能挑战赛-java赛题mvn编译时报错:不支持multi-catch
  7. openstack密钥对_您对OpenStack了解多少?
  8. 推荐]招商就象谈恋爱
  9. 我的世界服务器修改武器合成表,我的世界 新型武器制作大全武器合成表一览...
  10. RH413-Linux系统下umask测试
  11. linux版本信息i686,i686 linux gnu
  12. ubuntu16.04安装ros操作系统,解决网络问题
  13. OpenCV图像阈值:简单阈值、自适应阈值、OTSU、TRIANGLE
  14. 基于arduino的WiFi无线传输
  15. 网络——设备冗余HSRP
  16. ChatGPT万能工具箱 | ChatGPT辅助神器 提升了用户体验 提问回答更加精确。
  17. 用java编写一个美元汇率转换,编写一个人民币和美元的双向汇率转换程序,实现美元和人民币转换,汇率:1美元=6.92人民币...
  18. JavaScript 运算符与逻辑分支
  19. 二维数组中的查找--元素从左到右递增,从上到下递增
  20. OpenGL显示文字--显示英文

热门文章

  1. 方法文件Matlab调用动态链接库
  2. 读取excel并将其转换为xml
  3. Shadow DOM的理解
  4. 使用projectx / os和Raspberry Pi托管您自己的电子邮件
  5. Hacktoberfest活动导致GitHub捐款近5万
  6. 问题解决 | maven包冲突了怎么办,这款插件你不容错过
  7. es6 原生构造函数的继承
  8. 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建
  9. PyQt5 关于Qt Designer的初步应用和打包
  10. 李建中黑大计算机学院院长,向您致敬 | 我校开展教师节走访慰问活动