用c语言,构建多个自定义函数,实现相对比较完善的作品。 具体的功能和数据结构自行定义,要求不少于5个功能模块,至少要有一个文件的相关操作。 题目:班级C语言成绩管理。序号,学号,姓名,成绩 比如信息的录入、查询、新增、删除、统计等等。

时间: 2024-02-18 19:05:11 浏览: 17
好的,针对班级C语言成绩管理,我可以建议以下5个功能模块: 1.成绩录入模块:该模块用于录入学生的成绩信息,包括学生序号、学号、姓名、成绩等信息。可以将录入的信息保存到文件中。 ```c void addScore() { FILE *fp; struct student stu; printf("请输入学生的序号:"); scanf("%d", &stu.id); printf("请输入学生的学号:"); scanf("%s", stu.stuId); printf("请输入学生的姓名:"); scanf("%s", stu.name); printf("请输入学生的成绩:"); scanf("%f", &stu.score); fp = fopen("score.txt", "a"); if (fp == NULL) { printf("打开文件失败!"); return; } fprintf(fp, "%d %s %s %.2f\n", stu.id, stu.stuId, stu.name, stu.score); fclose(fp); } ``` 2.成绩查询模块:该模块用于查询学生的成绩信息,可以根据学生序号、学号、姓名等条件进行查询,并将查询结果输出到屏幕上。 ```c void queryScore() { FILE *fp; struct student stu; int find = 0; char query[20]; printf("请输入您要查询的内容:"); scanf("%s", query); fp = fopen("score.txt", "r"); if (fp == NULL) { printf("打开文件失败!"); return; } printf("序号\t学号\t姓名\t成绩\n"); while (fscanf(fp, "%d %s %s %f", &stu.id, stu.stuId, stu.name, &stu.score) != EOF) { if (strcmp(query, stu.name) == 0 || strcmp(query, stu.stuId) == 0 || atoi(query) == stu.id) { printf("%d\t%s\t%s\t%.2f\n", stu.id, stu.stuId, stu.name, stu.score); find = 1; } } if (!find) { printf("没有找到相关信息!\n"); } fclose(fp); } ``` 3.成绩新增模块:该模块用于新增学生的成绩信息,可以根据学生序号、学号、姓名、成绩等信息新增学生的成绩,并将新增的信息保存到文件中。 ```c void modifyScore() { FILE *fp,*tmp; struct student stu; int id, modify = 0; printf("请输入要修改的学生序号:"); scanf("%d", &id); fp = fopen("score.txt", "r"); tmp = fopen("tmp.txt", "w"); if (fp == NULL || tmp == NULL) { printf("打开文件失败!"); return; } while (fscanf(fp, "%d %s %s %f", &stu.id, stu.stuId, stu.name, &stu.score) != EOF) { if (stu.id == id) { printf("原信息:%d %s %s %.2f\n", stu.id, stu.stuId, stu.name, stu.score); printf("请输入新的学号:"); scanf("%s", stu.stuId); printf("请输入新的姓名:"); scanf("%s", stu.name); printf("请输入新的成绩:"); scanf("%f", &stu.score); modify = 1; } fprintf(tmp, "%d %s %s %.2f\n", stu.id, stu.stuId, stu.name, stu.score); } if (!modify) { printf("没有找到相关信息!\n"); } fclose(fp); fclose(tmp); remove("score.txt"); rename("tmp.txt", "score.txt"); } ``` 4.成绩删除模块:该模块用于删除学生的成绩信息,可以根据学生序号、学号、姓名等信息进行删除,并将删除后的信息保存到文件中。 ```c void deleteScore() { FILE *fp,*tmp; struct student stu; int id, deleted = 0; printf("请输入要删除的学生序号:"); scanf("%d", &id); fp = fopen("score.txt", "r"); tmp = fopen("tmp.txt", "w"); if (fp == NULL || tmp == NULL) { printf("打开文件失败!"); return; } while (fscanf(fp, "%d %s %s %f", &stu.id, stu.stuId, stu.name, &stu.score) != EOF) { if (stu.id == id) { printf("已删除的信息:%d %s %s %.2f\n", stu.id, stu.stuId, stu.name, stu.score); deleted = 1; continue; } fprintf(tmp, "%d %s %s %.2f\n", stu.id, stu.stuId, stu.name, stu.score); } if (!deleted) { printf("没有找到相关信息!\n"); } fclose(fp); fclose(tmp); remove("score.txt"); rename("tmp.txt", "score.txt"); } ``` 5.成绩统计模块:该模块用于统计学生的成绩信息,可以根据科目、日期等条件进行统计,并将统计结果输出到屏幕上。 ```c void statisticsScore() { FILE *fp; struct student stu; char query[20]; float sum = 0; int count = 0; printf("请输入要统计的科目:"); scanf("%s", query); fp = fopen("score.txt", "r"); if (fp == NULL) { printf("打开文件失败!"); return; } while (fscanf(fp, "%d %s %s %f", &stu.id, stu.stuId, stu.name, &stu.score) != EOF) { if (strcmp(query, stu.name) == 0) { sum += stu.score; count++; } } printf("科目:%s 总分:%.2f 平均分:%.2f\n", query, sum, sum/count); fclose(fp); } ``` 以上模块可以通过函数的方式实现,并且可以将它们分别保存到不同的文件中,以达到模块化的设计思想。同时,可以使用结构体等数据结构来存储学生的成绩信息,以便于查询、新增、删除和统计操作。

最新推荐

recommend-type

C语言模拟实现atoi函数的实例详解

主要介绍了C语言模拟实现atoi函数的实例详解的相关资料,atoi函数,主要功能是将一个字符串转变为整数,这里就实现这样的函数,需要的朋友可以参考下
recommend-type

用C语言求幂函数和指数函数的方法

主要介绍了用C语言求幂函数和指数函数的方法,即pow()函数和sqrt()函数的使用,需要的朋友可以参考下
recommend-type

C语言数据结构实现链表逆序并输出

主要介绍了C语言数据结构实现链表逆序并输出的相关资料,需要的朋友可以参考下
recommend-type

C语言数据结构之平衡二叉树(AVL树)实现方法示例

主要介绍了C语言数据结构之平衡二叉树(AVL树)实现方法,结合实例形式分析了C语言平衡二叉树的相关定义与使用技巧,需要的朋友可以参考下
recommend-type

详解C语言中symlink()函数和readlink()函数的使用

主要介绍了详解C语言中symlink()函数和readlink()函数的使用,是C语言入门学习中的基础知识,需要的朋友可以参考下
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

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

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