编写一个班级学生成绩管理的代码,要有文件的创建、文件的复制、文件的删除;可以输入班级成绩,保存文件,利用磁盘文件对学生成绩进行管理,包括查询成绩、修改成绩、显示所有学生成绩;可以实现将一个班级成绩文件复制到另一个文件的功能。学习使用文件控制,实现指定班级成绩文件的删除操作。实现目录的管理,创建与删除子目录、搜索指定的文件。

时间: 2024-03-18 10:43:51 浏览: 31
好的,以下是一个简单的班级学生成绩管理的代码示例,包含了文件的创建、文件的复制、文件的删除等功能。代码中使用了文件控制和目录管理相关的函数,如fopen、fclose、fscanf、fprintf、remove、rename等。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> #define MAX_STUDENTS 100 // 最大学生数 #define MAX_NAME_LEN 20 // 姓名最大长度 #define MAX_FILENAME_LEN 50 // 文件名最大长度 typedef struct { char name[MAX_NAME_LEN]; // 姓名 int score; // 成绩 } Student; // 文件路径处理函数,返回文件完整路径 char *get_file_path(char *filename) { static char filepath[MAX_FILENAME_LEN]; strcpy(filepath, "./data/"); strcat(filepath, filename); return filepath; } // 创建新文件 void create_file(char *filename) { FILE *fp = fopen(get_file_path(filename), "w"); if (fp == NULL) { printf("无法创建文件\n"); exit(1); } printf("已成功创建文件 %s\n", filename); fclose(fp); } // 复制文件 void copy_file(char *src_filename, char *dst_filename) { FILE *src_fp = fopen(get_file_path(src_filename), "r"); if (src_fp == NULL) { printf("无法打开文件 %s\n", src_filename); exit(1); } FILE *dst_fp = fopen(get_file_path(dst_filename), "w"); if (dst_fp == NULL) { printf("无法创建文件 %s\n", dst_filename); fclose(src_fp); exit(1); } char ch; while ((ch = fgetc(src_fp)) != EOF) { fputc(ch, dst_fp); } printf("已成功将文件 %s 复制到 %s\n", src_filename, dst_filename); fclose(src_fp); fclose(dst_fp); } // 删除文件 void delete_file(char *filename) { int ret = remove(get_file_path(filename)); if (ret == 0) { printf("已成功删除文件 %s\n", filename); } else { printf("无法删除文件 %s\n", filename); } } // 显示所有学生成绩 void show_all_scores(char *filename) { FILE *fp = fopen(get_file_path(filename), "r"); if (fp == NULL) { printf("无法打开文件 %s\n", filename); exit(1); } printf("学生姓名\t成绩\n"); printf("----------------------\n"); Student students[MAX_STUDENTS]; int count = 0; while (fscanf(fp, "%s %d", students[count].name, &students[count].score) != EOF) { printf("%-10s\t%d\n", students[count].name, students[count].score); count++; } if (count == 0) { printf("无数据\n"); } fclose(fp); } // 修改学生成绩 void modify_score(char *filename, char *name, int new_score) { FILE *fp = fopen(get_file_path(filename), "r+"); if (fp == NULL) { printf("无法打开文件 %s\n", filename); exit(1); } Student student; int found = 0; while (fscanf(fp, "%s %d", student.name, &student.score) != EOF) { if (strcmp(student.name, name) == 0) { fseek(fp, -sizeof(int), SEEK_CUR); fprintf(fp, "%d", new_score); found = 1; break; } } if (found) { printf("已成功将 %s 的成绩修改为 %d\n", name, new_score); } else { printf("找不到姓名为 %s 的学生\n", name); } fclose(fp); } // 搜索指定文件 void search_file(char *dir_path, char *filename) { DIR *dir = opendir(dir_path); if (dir == NULL) { printf("无法打开目录 %s\n", dir_path); exit(1); } struct dirent *entry; int found = 0; while ((entry = readdir(dir)) != NULL) { if (strcmp(entry->d_name, filename) == 0) { printf("已在目录 %s 中找到文件 %s\n", dir_path, filename); found = 1; break; } } if (!found) { printf("在目录 %s 中找不到文件 %s\n", dir_path, filename); } closedir(dir); } int main() { // 创建文件夹 int ret = mkdir("./data", 0777); if (ret == -1) { printf("无法创建文件夹\n"); exit(1); } printf("已成功创建文件夹 data\n"); // 创建新文件 create_file("class1.txt"); // 输入学生成绩 FILE *fp = fopen(get_file_path("class1.txt"), "w"); if (fp == NULL) { printf("无法打开文件\n"); exit(1); } printf("请输入学生成绩(格式:姓名 成绩,输入-1结束):\n"); char name[MAX_NAME_LEN]; int score; while (1) { scanf("%s %d", name, &score); if (score == -1) { break; } fprintf(fp, "%s %d\n", name, score); } fclose(fp); // 显示所有学生成绩 show_all_scores("class1.txt"); // 修改学生成绩 modify_score("class1.txt", "张三", 90); show_all_scores("class1.txt"); // 复制文件 copy_file("class1.txt", "class1_copy.txt"); // 删除文件 delete_file("class1_copy.txt"); // 搜索指定文件 search_file(".", "main.c"); // 删除文件夹及其内容 ret = system("rm -rf ./data"); if (ret == -1) { printf("无法删除文件夹\n"); exit(1); } printf("已成功删除文件夹 data\n"); return 0; } ``` 以上代码只是一个简单的示例,实际使用时可能需要根据具体需求进行修改和完善。

相关推荐

最新推荐

recommend-type

c编写、单链表,对多个班级学生成绩进行管理

***通过终端输入实现****用C语言编写程序,以单链表为存储结构,对多个班级(以两个班为例)的学生成绩进行管理,要求实现如下功能: (1)通过终端或文件输入若干学生的班级号、学号、成绩,将每个班的数据分别保存...
recommend-type

shell备份文件、重命名文件、删除指定文件的3个脚本分享

主要介绍了shell备份文件、重命名文件、删除指定文件的3个脚本分享,是学习shell时的练习脚本,shell新手朋友可以参考下哦
recommend-type

Java将对象保存到文件中/从文件中读取对象的方法

下面小编就为大家带来一篇Java将对象保存到文件中/从文件中读取对象的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

用Python下载一个网页保存为本地的HTML文件实例

今天小编就为大家分享一篇用Python下载一个网页保存为本地的HTML文件实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

c语言作业——学生成绩统计.docx

(3)统计学生成绩分布情况(每个分数段人数); (4)查找最高分、最低分;计算学生成绩均值和方差;并输出这四个结果; (5)判断成绩是否服从正态分布; (6)统计不同生源地学生的平均成绩,按平均成绩排序,并...
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

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

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