用c语言设计代码设计一个简单的学生成绩管理系统。设有学生成绩文件student.txt,每位学生成绩信息包含学号(num)、姓名(name)、性别(sex)、出生日期(birthday,包括年、月、日,分别表示为year,month,day)、3门功课的成绩(高数、C语言、大学物理)、总分和平均分。设计程序,要求从文件student.txt中读出学生成绩表,之后参对成绩表进行如下操作: (1)建立学生成绩信息结构数组(从student.txt读入数据) (2)显示。即输出出所有成绩。 (3)添加。可添加一条或多条记录。 (4)排序。分为两个方面,按学号递增排序和按总分递减排序。 (5)查找。分为三方面:按学号查找、按姓名查找和按分数查找。 (6)计算。计算各门课的平均分数。 (7)保存。退出程序前将结果保存到studeng.txt。 2)要求 (1)设计一个简单的界面 (2)每一个功能设为一个模块

时间: 2023-12-17 12:05:25 浏览: 29
以下是一个简单的学生成绩管理系统的C语言代码实现: ```c #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX_STUDENT 100 // 学生成绩信息结构体 typedef struct { int num; // 学号 char name[20]; // 姓名 char sex[5]; // 性别 int birthday_year; // 出生日期-年 int birthday_month; // 出生日期-月 int birthday_day; // 出生日期-日 int score_math; // 高数成绩 int score_c; // C语言成绩 int score_physics; // 大学物理成绩 int score_total; // 总分 float score_average; // 平均分 } Student; Student students[MAX_STUDENT]; // 学生数组 int student_count = 0; // 学生数量 // 从文件中读入学生成绩信息 void read_students() { FILE *fp; fp = fopen("student.txt", "r"); if (fp == NULL) { printf("Error: cannot open file\n"); return; } while (!feof(fp)) { Student s; fscanf(fp, "%d %s %s %d %d %d %d %d %d", &s.num, s.name, s.sex, &s.birthday_year, &s.birthday_month, &s.birthday_day, &s.score_math, &s.score_c, &s.score_physics); s.score_total = s.score_math + s.score_c + s.score_physics; s.score_average = s.score_total / 3.0; students[student_count++] = s; } fclose(fp); } // 显示所有学生成绩信息 void show_students() { printf("学号\t姓名\t性别\t出生日期\t高数\tC语言\t大学物理\t总分\t平均分\n"); for (int i = 0; i < student_count; i++) { Student s = students[i]; printf("%d\t%s\t%s\t%d/%d/%d\t%d\t%d\t%d\t%d\t%.2f\n", s.num, s.name, s.sex, s.birthday_year, s.birthday_month, s.birthday_day, s.score_math, s.score_c, s.score_physics, s.score_total, s.score_average); } } // 添加一条或多条记录 void add_student() { int count; printf("请输入要添加的学生数量:"); scanf("%d", &count); for (int i = 0; i < count; i++) { Student s; printf("请输入第%d个学生的信息(学号 姓名 性别 出生日期-年 出生日期-月 出生日期-日 高数成绩 C语言成绩 大学物理成绩):", i + 1); scanf("%d %s %s %d %d %d %d %d %d", &s.num, s.name, s.sex, &s.birthday_year, &s.birthday_month, &s.birthday_day, &s.score_math, &s.score_c, &s.score_physics); s.score_total = s.score_math + s.score_c + s.score_physics; s.score_average = s.score_total / 3.0; students[student_count++] = s; } } // 按学号递增排序 void sort_by_num() { for (int i = 0; i < student_count - 1; i++) { for (int j = i + 1; j < student_count; j++) { if (students[i].num > students[j].num) { Student tmp = students[i]; students[i] = students[j]; students[j] = tmp; } } } } // 按总分递减排序 void sort_by_score() { for (int i = 0; i < student_count - 1; i++) { for (int j = i + 1; j < student_count; j++) { if (students[i].score_total < students[j].score_total) { Student tmp = students[i]; students[i] = students[j]; students[j] = tmp; } } } } // 按学号查找 void search_by_num() { int num; printf("请输入要查找的学生学号:"); scanf("%d", &num); for (int i = 0; i < student_count; i++) { if (students[i].num == num) { printf("学号\t姓名\t性别\t出生日期\t高数\tC语言\t大学物理\t总分\t平均分\n"); Student s = students[i]; printf("%d\t%s\t%s\t%d/%d/%d\t%d\t%d\t%d\t%d\t%.2f\n", s.num, s.name, s.sex, s.birthday_year, s.birthday_month, s.birthday_day, s.score_math, s.score_c, s.score_physics, s.score_total, s.score_average); return; } } printf("未找到该学生\n"); } // 按姓名查找 void search_by_name() { char name[20]; printf("请输入要查找的学生姓名:"); scanf("%s", name); for (int i = 0; i < student_count; i++) { if (strcmp(students[i].name, name) == 0) { printf("学号\t姓名\t性别\t出生日期\t高数\tC语言\t大学物理\t总分\t平均分\n"); Student s = students[i]; printf("%d\t%s\t%s\t%d/%d/%d\t%d\t%d\t%d\t%d\t%.2f\n", s.num, s.name, s.sex, s.birthday_year, s.birthday_month, s.birthday_day, s.score_math, s.score_c, s.score_physics, s.score_total, s.score_average); return; } } printf("未找到该学生\n"); } // 按分数查找 void search_by_score() { int score; printf("请输入要查找的学生总分数:"); scanf("%d", &score); for (int i = 0; i < student_count; i++) { if (students[i].score_total == score) { printf("学号\t姓名\t性别\t出生日期\t高数\tC语言\t大学物理\t总分\t平均分\n"); Student s = students[i]; printf("%d\t%s\t%s\t%d/%d/%d\t%d\t%d\t%d\t%d\t%.2f\n", s.num, s.name, s.sex, s.birthday_year, s.birthday_month, s.birthday_day, s.score_math, s.score_c, s.score_physics, s.score_total, s.score_average); return; } } printf("未找到该学生\n"); } // 计算各门课的平均分数 void calculate_average() { float math_total = 0, c_total = 0, physics_total = 0; for (int i = 0; i < student_count; i++) { math_total += students[i].score_math; c_total += students[i].score_c; physics_total += students[i].score_physics; } float math_average = math_total / student_count; float c_average = c_total / student_count; float physics_average = physics_total / student_count; printf("各门课的平均分数:\n"); printf("高数:%.2f\n", math_average); printf("C语言:%.2f\n", c_average); printf("大学物理:%.2f\n", physics_average); } // 保存学生成绩信息到文件 void save_students() { FILE *fp; fp = fopen("student.txt", "w"); if (fp == NULL) { printf("Error: cannot open file\n"); return; } for (int i = 0; i < student_count; i++) { Student s = students[i]; fprintf(fp, "%d %s %s %d %d %d %d %d %d\n", s.num, s.name, s.sex, s.birthday_year, s.birthday_month, s.birthday_day, s.score_math, s.score_c, s.score_physics); } fclose(fp); } // 主函数 int main() { read_students(); int choice; while (1) { printf("\n请选择操作:\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("9. 保存学生信息到文件\n"); printf("10. 退出\n"); printf("请输入操作序号:"); scanf("%d", &choice); switch (choice) { case 1: show_students(); break; case 2: add_student(); break; case 3: sort_by_num(); break; case 4: sort_by_score(); break; case 5: search_by_num(); break; case 6: search_by_name(); break; case 7: search_by_score(); break; case 8: calculate_average(); break; case 9: save_students(); break; case 10: return 0; default: printf("输入错误,请重新输入\n"); break; } } return 0; } ``` 注意:为了简化代码,这里没有对输入做太多的错误处理,实际应用中需要加入更多的判断和容错处理。

相关推荐

最新推荐

recommend-type

node-v0.10.13-sunos-x86.tar.gz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

课设毕设基于SSM的高校二手交易平台-LW+PPT+源码可运行.zip

课设毕设基于SSM的高校二手交易平台--LW+PPT+源码可运行
recommend-type

软件设计师讲义.md

软件设计师讲义.md
recommend-type

时间序列预测,股票方向应用,使用transformer-lstm融合的模型算法

适用人群 针对有一定机器学习和深度学习背景的专业人士,特别是那些对时间序列预测和Transformer以及LSTM模型有兴趣的人。需要一定的Python知识基础 适用场景 用于处理时间序列数据,尤其是在金融领域,示例是股票价格预测。Transformer模型和LSTM的混合使用表明,代码的目的是利用这两种模型的优势来提高预测准确性。 目标 代码的主要目标是利用Transformer模型和LSTM模型来预测时间序列数据,如股票价格。通过实现这两种模型,代码旨在提供一个强大的工具来进行更准确的时间序列分析和预测。
recommend-type

Autojs-PJYSDK-泡椒云网络验证-v1.15.zip

Autojs-PJYSDK-泡椒云网络验证-v1.15.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。