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

C基础练习(学生管理系统)

1.系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令

2.开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。”

同理,当输入其他的成绩处理命令时也作相应的处理。

3.输入命令 T,调用Type子函数录入成绩。界面提示输入学生人数

输入3 后提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,提示学号:1

输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2

以此类推,直到输入结束

4.输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

5.输入命令 A ,调用Average子函数计算平均分,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令

输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

6.输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令

输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

7.输入命令 S ,调用Search子函数查询学生成绩,提示“输入要查询的学生学号”。

输入3 ,找到3号学生的成绩并输出。Search子函数调用结束,返回。提示输入命令

8.输入命令C , 执行清屏函数语句system("clear");

清除屏幕的所有内容。提示输入命令

9.输入命令H , 调用Help子函数显示帮助菜单。Help子函数调用结束,返回。提示输入命令

10.输入命令Q , 则退出系统。

11.构造思想:

1)输出数组元素时,要将学号单独处理,输出为整数(即保留0位小数)。同理,在计算成绩时也要将第1列的学号撇开,只计算第2列之后的。成绩保留2位小数。

2)学生人数n贯穿始终,通过n的值判断当前命令的子函数是否能够调用执行。例如:当n=0时,说明还没有录入成绩。而一旦输入命令T,也即调用Type子函数录入了成绩,则n的值就不再是0。当n!=0时,就可以进行其他的成绩操作。

代码展示

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student // 定义结构体数组,用来存放学生信息
{int num;float Chinese;float math;float English;float average;
} stu[32];
void Help(); // 声明函数
int Type(struct student *p, int n);
void List(int n);
void Average(int n);
void paixu(int n);
void Search(int n);
int main(int argc, char const *argv[])
{Help(); // 调用帮助菜单函数char ml;int n = 0;while (1) // 重复输入命令{printf("请输入命令=");scanf(" %c", &ml);if (ml == 'C')system("clear"); // 输入C时,触发清屏函数else if (ml == 'Q')break; // 输入Q时退出程序else if (ml == 'T')n = Type(stu, n); // 输入T时调用Type函数录入信息else if (n == 0)      // 当学生人数为0时无法使用其它命令,需要先录入信息printf("成绩表为空!请先使用命令T录入学生成绩\n");else if (n != 0){if (ml == 'H')Help(); // 当输入H时调用Help函数打开帮助菜单else if (ml == 'L')List(n); // 输入L时调用List函数列出学生信息else if (ml == 'A')Average(n); // 输入A时调用Average函数计算平均分else if (ml == 'P')paixu(n); // 输入P时调用paixu函数进行排序else if (ml == 'S')Search(n); // 输入S时调用Search函数进行查询}getchar(); // 回收垃圾字符}return 0;
}
int Type(struct student *p, int n) // 录入信息函数
{int num;printf("请输入学生人数:");scanf("%d", &num);printf("请输入%d个学生的成绩\n", num);printf("学号  语文  数学  外语\n");for (int a = n; a < n + num; a++) // for循环遍历录入信息{printf("%d  ", a + 1);stu[a].num = a + 1;scanf("%f %f %f", &stu[a].Chinese, &stu[a].math, &stu[a].English);}n = num + n;return n; // 返回学生人数
}
void Help() // 帮助菜单
{printf("**************************************\n");printf("*  学生成绩管理系统————帮助菜单      *\n");printf("**************************************\n");printf("*        H=显示帮助菜单              *\n");printf("*        T=成绩录入                  *\n");printf("*        A=计算学生平均分            *\n");printf("*        L=列出成绩表                *\n");printf("*        P=按平均成绩由高到低排序    *\n");printf("*        S=按学号查询学生成绩        *\n");printf("*        C=清屏                      *\n");printf("*        Q=退出系统                  *\n");printf("**************************************\n");printf(" Copyright <c>  2024.08.06 By zhr\n");
}
void List(int n) // 列出学生信息函数
{printf("学生成绩如下:\n");printf("学号 语文 数学 外语  平均分\n");for (int a = 0; a < n; a++) // for循环遍历结构体数组{printf("%d   %.2f  %.2f %.2f   %.2f", stu[a].num, stu[a].Chinese, stu[a].math, stu[a].English, stu[a].average);printf("\n");}
}
void Average(int n) // 计算平均分函数
{for (int a = 0; a < n; a++)stu[a].average = (stu[a].Chinese + stu[a].English + stu[a].math) / 3;printf("平均分已计算,请使用命令L查看\n");
}
void paixu(int n) // 排序函数
{struct student stu1[32];if (stu[0].average == 0) // 平均分未计算时无法排序printf("无法排序,请先使用命令A计算平均分\n");else{for (int a = 0; a < n - 1; a++){for (int b = 0; b < n - 1 - a; b++){if (stu[b].average < stu[b + 1].average){stu1[b] = stu[b]; // 通过交换结构体数组进行排序stu[b] = stu[b + 1];stu[b + 1] = stu1[b];}}}printf("已完成排序,请使用命令L查看\n");}
}
void Search(int n)
{int num;printf("请输入要查询的学生的学号:");scanf("%d", &num);printf("学号 语文 数学 外语  平均分\n");for (int a = 0; a < n; a++)if (stu[a].num == num) // 通过学号打印学生信息printf("%d   %.2f  %.2f %.2f   %.2f\n", stu[a].num, stu[a].Chinese, stu[a].math, stu[a].English, stu[a].average);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Golang | Leetcode Golang题解之第316题去除重复字母
  • Machine_Matrix打靶渗透【附代码】(权限提升)
  • 解决ubuntu 下 SSH无法连接的问题
  • YOLOv8由pt文件中读取模型信息
  • MongoDB 未授权访问漏洞
  • c# 逻辑运算符和条件运算符
  • Spring Boot 参数校验 Validation 使用
  • 反其道而行的SAP商业AI
  • Linux搭建SVN服务器
  • 无法启动此程序,因为计算机中丢失dll的多种解决方法,3分钟修复(dll修复工具详细教程)
  • react中的装饰器
  • FPGA开发——在Quartus中实现对IP核的PLL调用
  • ⌈ 传知代码 ⌋ 基于矩阵乘积态的生成模型
  • HarmonyOS笔记3:从网络数据接口API获取数据
  • 人工智能深度学习系列—深入解析:均方误差损失(MSE Loss)在深度学习中的应用与实践
  • 03Go 类型总结
  • 11111111
  • angular2 简述
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Vue.js 移动端适配之 vw 解决方案
  • vue.js框架原理浅析
  • Vue实战(四)登录/注册页的实现
  • 测试如何在敏捷团队中工作?
  • 电商搜索引擎的架构设计和性能优化
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 类orAPI - 收藏集 - 掘金
  • 详解移动APP与web APP的区别
  • 国内开源镜像站点
  • ​​​​​​​​​​​​​​Γ函数
  • ​卜东波研究员:高观点下的少儿计算思维
  • "无招胜有招"nbsp;史上最全的互…
  • #if等命令的学习
  • #Spring-boot高级
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (16)Reactor的测试——响应式Spring的道法术器
  • (26)4.7 字符函数和字符串函数
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (floyd+补集) poj 3275
  • (搬运以学习)flask 上下文的实现
  • (二)c52学习之旅-简单了解单片机
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (汇总)os模块以及shutil模块对文件的操作
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (七)Java对象在Hibernate持久化层的状态
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转) Face-Resources
  • (转)Windows2003安全设置/维护
  • (转)用.Net的File控件上传文件的解决方案
  • .NET CORE Aws S3 使用
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET大文件上传知识整理
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?