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

DAY18C语言笔记

C语言:第17天笔记

综合案例:学生成绩管理系统V2.0

综合案例:学生成绩管理系统v2.0

  • 需求:

    要求实现一个基于指针的学生成绩管理系统,具体功能如下:

    1. 添加学生信息:输入学号和三门成绩,存储到数组中。
    2. 显示所有学生信息:遍历数组,输出每个学生的学号和成绩。
    3. 计算每个学生的平均分和总分:遍历数组,计算每行的总分和平均分。
    4. 根据某科成绩排序:用户选择科目,然后按该科成绩排序,可以升序或降序。
    5. 查找学生信息:按学号查找,显示该生的成绩和平均分。
    6. 退出程序。
  • 代码:

    /*************************************************************************> File Name:    soresMG2.c> Author:       小刘> Description:  > Created Time: 2025年05月26日 星期一 13时45分38秒************************************************************************/#include <stdio.h>
    #include <string.h>
    #include <stdlib.h>#define MAX_STUDENT 50  // 最大学生数量
    #define COURSE_NUM 3    // 课程科目数量
    #define ID_LENGTH 4/** 函数原型声明 **/
    // 添加学生信息
    void addStudent(int (*scores)[COURSE_NUM],char (*ids)[ID_LENGTH],int *count);
    //显示所有记录
    void  displayAll(int (*scores)[COURSE_NUM],char (*ids)[ID_LENGTH],int count);
    // 显示统计信息
    void showStatistics(int (*scores)[COURSE_NUM],int count);
    // 成绩排序
    void sorseSorting(int (*scores)[COURSE_NUM],char (*ids)[ID_LENGTH],int count);
    // 学生查找
    void searchStudent(int (*scores)[COURSE_NUM],char (*ids)[ID_LENGTH],int count);
    // 学号校验 1- 校验合格  0-校验不合格
    int validate(char *id);
    int main(int argc,char *argv[])
    {int choice;int studentCount = 0;char studentIds[MAX_STUDENT][ID_LENGTH];int scores[MAX_STUDENT][COURSE_NUM];do{// 系统菜单界面printf("\033[1;32m+-----------------------+\033[0m\n"); // 绿色边框 printf("\033[1;32m| \033[1;33m学生成绩管理系统 v2.0\033[1;32m |\033[0m\n"); printf("\033[1;32m| \033[1;33m作者:小刘\033[1;32m |\033[0m\n"); printf("\033[1;32m+-----------------------+\033[0m\n"); printf("\033[31m1. 添加学生信息\033[0m\n");printf("\033[31m2. 显示所有记录\033[0m\n"); printf("\033[31m3. 查看统计信息\033[0m\n");printf("\033[31m4. 成绩排序\033[0m\n"); printf("\033[31m5. 查找学生\033[0m\n"); printf("\033[31m6. 退出系统\033[0m\n"); printf("\n请输入您的选择: "); scanf("%d",&choice);switch(choice){case 1://addStudent(scores,studentIds,&studentCount);break;case 2:displayAll(scores,studentIds,studentCount);break;case 3:showStatistics(scores,studentCount);break;case 4:sorseSorting(scores,studentIds,studentCount);break;case 5:searchStudent(scores,studentIds,studentCount);break;case 6:printf("系统已退出,感谢使用!\n");break;default:printf("无效输入,请重新选择!\n");}}while(choice != 6);return 0;
    }// 查找学生
    void searchStudent(int (*scores)[COURSE_NUM],char (*ids)[ID_LENGTH],int count)
    {if(count == 0){printf("暂无学生数据!\n");return;}char targetID[ID_LENGTH + 1];printf("\n请输入要查找的学号:\n");scanf("%4s",targetID);while(getchar() != '\n');for (int i = 0;i < count; i++){if(memcmp(ids[i],targetID,ID_LENGTH) == 0){printf("找到学生记录:\n");printf("学号:%.4s\n",ids[i]);printf("成绩:China=%d Math=%d English=%d\n",scores[i][0],scores[i][1],scores[i][2]);return;}}printf("未找到该学号的学生记录!\n");
    }// 成绩排序
    void sorseSorting(int (*scores)[COURSE_NUM],char (*ids)[ID_LENGTH],int count)
    {if(count == 0){printf("暂无学生数据!\n");return;}printf("%s\t%s\t%s\t\n","China","Math","English");for(int i = 0;i < COURSE_NUM ;i++){for(int j = 0; j < count;j++){for(int k = 0;k < count -j-1;k++){if(scores[k][i] < scores[k+1][i]){int score = scores[k][i];scores[k][i] = scores[k+1][i];scores[k+1][i] = score;}}}}for(int i = 0;i < count ;i++){for(int j = 0; j < COURSE_NUM;j++){printf("%d\t",scores[i][j]);}printf("\n");}printf("\n");}// 查看统计信息
    void showStatistics(int (*scores)[COURSE_NUM],int count)
    {if(count == 0){printf("暂无学生数据!\n");return;}int courseTota[COURSE_NUM] = {0};int max[COURSE_NUM] = {0};int min[COURSE_NUM] = {100,100,100};for(int i = 0;i < count; i++){for(int j = 0;j < COURSE_NUM;j++){int score = scores[i][j];courseTota[j] += score;if(score > max[j])max[j] = score;if(score < min[j])min[j] = score;}}printf("\n---- 课程统计信息 ----\n");char *courses[] = {"China","Math","English"};for(int i = 0;i < COURSE_NUM;i++){printf("%s:\n",courses[i]);printf("  平均分:%.2f\n",(float)courseTota[i] / count);printf("  最高分:%d\n",max[i]);printf("  最低分:%d\n",min[i]);}
    }// 显示所有记录
    void  displayAll(int (*scores)[COURSE_NUM],char (*ids)[ID_LENGTH],int count)
    {printf("\n----- 学生成绩列表 ----\n");if(count == 0){printf("暂无学生数据!\n");return;}printf("%s\t%s\t%s\t%s\t\n","学号","Chaina","Math","English");for(int i =0;i < count ; i++){printf("%.4s\t",ids[i]);for(int j = 0;j < COURSE_NUM ;j++){printf("%d\t",*(*(scores + i) + j));}printf("\n");}printf("\n");}/*** 添加学生信息*/ 
    void addStudent(int (*scores)[COURSE_NUM],char (*ids)[ID_LENGTH],int *count)
    {// 校验存储空间是否已满if(*count >= MAX_STUDENT){printf("错误信息:存储空间已满!\n");return;}printf("\n----- 请添加学生信息 -----\n");//创建一个数组,用来存放学生学号char tempId[ID_LENGTH + 1];do{printf("请输入4位学号:");scanf("%4s",tempId);while(getchar() != '\n');}while(!validate(tempId));// 检查序号是否已存在register int i;for(i = 0;i < *count; i++){//使用if (memcmp(ids[i],tempId,ID_LENGTH) == 0){printf("错误信息:该学号已存在!\n");return ;}}memcpy(ids[*count],tempId,ID_LENGTH);// 输入成绩printf("请输入%d门课程成绩(0~100):\n",COURSE_NUM);for (i = 0; i < COURSE_NUM;){printf("课程%d:",i+1);int tempScore = scanf("%d",&scores[*count][i]);if(tempScore != 1){printf("错误信息:成绩无效,请重新输入!\n");while(getchar() != '\n');continue;}if(scores[*count][i] < 0 || scores[*count][i] >100){printf("错误信息:成绩无效,请重新输入!\n");continue;}i++;}(*count)++;printf("学生信息添加成功!\n");}// 校验信息
    int validate(char *id)
    {char *p = id;int len = 0;while(*p && len < ID_LENGTH){if(!(*p >= '0' && *p <= '9')){printf("学号必须为数字!\n");return 0;}p++;len++;}// 校验输入的长度if(len != ID_LENGTH || *p != '\0'){printf("学号必须为4位!");return 0;}return 1;
    }
    
http://www.dtcms.com/a/225490.html

相关文章:

  • day16 leetcode-hot100-31(链表10)
  • 【笔记】MSYS2 安装 Python 构建依赖记录Cython + Ninja + Meson + meson-python
  • 焦虑而烦躁的上午
  • LeetCode 1497. 检查数组对是否可以被 k 整除
  • nt!MiDispatchFault函数分析之nt!MiCompleteProtoPteFault函数的作用
  • InfluxDB 高级分析实战:预测、技术指标与异常检测全指南
  • 70.新增用户内容复制功能
  • 1-2 Dart SDK 安装
  • rl_sar功能包详解
  • PTA-根据已有类Worker,使用LinkedList编写一个WorkerList类,实现计算所有工人总工资的功能。
  • Python+MongoDb使用手册(精简)
  • Baklib加速企业AI数据治理实践
  • Flickr30k Entities短语定位评测指南
  • 基于大模型预测的寻常型天疱疮诊疗方案研究报告
  • 鸿蒙OSUniApp内存管理优化实战:从入门到精通#三方框架 #Uniapp
  • 牛顿迭代算法-深度解析
  • TDengine 基于 TDgpt 的 AI 应用实战
  • Kubernetes(K8s)核心架构解析与实用命令大全
  • Ansible自动化运维工具全面指南:从安装到实战应用
  • Ansible 进阶 - Roles 与 Inventory 的高效组织
  • 《分子动力学模拟的参数困局:QML的突围方案》
  • Python实现HPSO-TVAC优化算法优化支持向量机SVC分类模型项目实战
  • 行业分析---小米汽车2025第一季度财报
  • 复杂业务场景下 JSON 规范设计:Map<String,Object>快速开发 与 ResponseEntity精细化控制HTTP 的本质区别与应用场景解析
  • 手写ArrayList和LinkedList
  • gitflow
  • 【笔记】在 MSYS2(MINGW64)中正确安装 Rust
  • 鸿蒙OSUniApp开发跨平台AR扫描识别应用:HarmonyOS实践指南#三方框架 #Uniapp
  • HarmonyOS NEXT~鸿蒙开发工具CodeGenie:AI驱动的开发效率革命
  • Goreplay最新版本的安装和简单使用