要求用C语言编写:1.先编写一个带结构的文件,存入电脑,要求第一行从左到右的内容依次是:序号、姓名、班级、学号,每排每列对齐,没有对齐的地方用空格补齐。2.从电脑中能够读入这个带结构的文件,并进行删增改后,重新存入电脑,3.这个文件要有纵横结构,每横表示一个记录4. 编出来的代码要能够在c的运行界面进行后续的插入、删除和修改

时间: 2024-03-18 16:40:30 浏览: 19
好的,我明白了您的问题。以下是一个可能的解决方案: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME_LENGTH 20 #define MAX_CLASS_LENGTH 10 #define MAX_ID_LENGTH 10 typedef struct { int id; char name[MAX_NAME_LENGTH]; char class[MAX_CLASS_LENGTH]; char student_id[MAX_ID_LENGTH]; } Record; void print_header() { printf("序号\t姓名\t班级\t学号\n"); } void print_record(Record r) { printf("%d\t%s\t%s\t%s\n", r.id, r.name, r.class, r.student_id); } int get_record_count(FILE* fp) { int count = 0; char line[1024]; while (fgets(line, sizeof(line), fp) != NULL) { count++; } rewind(fp); return count - 1; // 减去表头 } void read_records(Record* records, int count, FILE* fp) { char line[1024]; fgets(line, sizeof(line), fp); // 忽略表头 for (int i = 0; i < count; i++) { fgets(line, sizeof(line), fp); sscanf(line, "%d %s %s %s", &records[i].id, records[i].name, records[i].class, records[i].student_id); } } void write_records(Record* records, int count, FILE* fp) { fprintf(fp, "序号\t姓名\t班级\t学号\n"); for (int i = 0; i < count; i++) { fprintf(fp, "%d\t%s\t%s\t%s\n", records[i].id, records[i].name, records[i].class, records[i].student_id); } } void insert_record(Record* records, int* count, Record r, int index) { for (int i = *count; i > index; i--) { records[i] = records[i - 1]; records[i].id++; } records[index] = r; records[index].id = index; (*count)++; } void delete_record(Record* records, int* count, int index) { for (int i = index; i < *count - 1; i++) { records[i] = records[i + 1]; records[i].id--; } (*count)--; } void modify_record(Record* records, int index) { printf("请输入新的姓名:"); scanf("%s", records[index].name); printf("请输入新的班级:"); scanf("%s", records[index].class); printf("请输入新的学号:"); scanf("%s", records[index].student_id); } int main() { FILE* fp = fopen("records.txt", "r+"); if (fp == NULL) { printf("文件打开失败!\n"); return 1; } int count = get_record_count(fp); Record* records = (Record*) malloc(count * sizeof(Record)); read_records(records, count, fp); printf("读入了 %d 条记录:\n", count); print_header(); for (int i = 0; i < count; i++) { print_record(records[i]); } char op; int index; Record r; while (1) { printf("请输入操作类型(i/d/m/q):"); scanf(" %c", &op); if (op == 'q') { break; } switch (op) { case 'i': printf("请输入要插入的位置:"); scanf("%d", &index); if (index < 0 || index > count) { printf("无效的位置!\n"); break; } printf("请输入要插入的记录(格式:姓名 班级 学号):"); r.id = -1; // 插入时会重新分配序号 scanf("%s %s %s", r.name, r.class, r.student_id); insert_record(records, &count, r, index); printf("插入成功!\n"); break; case 'd': printf("请输入要删除的位置:"); scanf("%d", &index); if (index < 0 || index >= count) { printf("无效的位置!\n"); break; } delete_record(records, &count, index); printf("删除成功!\n"); break; case 'm': printf("请输入要修改的位置:"); scanf("%d", &index); if (index < 0 || index >= count) { printf("无效的位置!\n"); break; } modify_record(records, index); printf("修改成功!\n"); break; default: printf("无效的操作类型!\n"); break; } // 保存修改后的记录到文件中 rewind(fp); write_records(records, count, fp); } fclose(fp); free(records); return 0; } ``` 这段代码实现了您的要求,具体说明如下: - `Record` 是记录的结构体,包含四个字段:序号、姓名、班级和学号。 - `print_header()` 和 `print_record()` 分别用于打印表头和一条记录。 - `get_record_count()` 用于获取文件中记录的数量。 - `read_records()` 用于从文件中读取记录。 - `write_records()` 用于将记录写入文件。 - `insert_record()` 用于在指定位置插入一条记录。 - `delete_record()` 用于删除指定位置的记录。 - `modify_record()` 用于修改指定位置的记录。 - `main()` 函数用于控制程序的流程,包括读取文件、执行操作、保存修改后的记录等。 您只需要将表格保存为名为 `records.txt` 的文本文件,然后编译并运行上述代码,即可在命令行界面进行插入、删除和修改操作。注意,在进行修改、删除操作时需要输入记录的位置(从 0 开始),而在进行插入操作时需要输入要插入的位置(从 0 开始),并按照格式输入要插入的记录。

相关推荐

zip

最新推荐

recommend-type

ssm框架设备故障报修管理系统微信小程序源码+项目说明(高分毕设)

毕业设计ssm框架设备故障报修管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 毕业设计ssm框架设备故障报修管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 毕业设计ssm框架设备故障报修管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 项目主要功能: 该项目是基于微信的设备故障报修管理系统,旨在改善传统管理方式的不足。系统涉及管理员、用户和维修员三个角色,管理员可进行用户、维修员、实验室等多方面管理,而用户和维修员可通过微信小程序注册登录,分别进行报修、查看维修状态和交流经验。系统采用Java的SSM框架开发后端,
recommend-type

开车不犯困100首MP3,之41-50,DJ.rar

开车不犯困100首MP3,之41-50,DJ.rar
recommend-type

ssm框架外籍人员管理系统微信小程序源码+项目说明(高分毕设)

毕业设计ssm框架外籍人员管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 毕业设计ssm框架外籍人员管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 毕业设计ssm框架外籍人员管理系统微信小程序源码+项目说明(高分毕设).zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 项目主要功能: 该项目是一个基于微信小程序的外来人员管理系统,旨在方便用户管理和查看个人中心、外籍人员信息及派出所信息。系统设计注重功能与界面的融合,支持派出所在线审核外籍人员信息。开发采用成熟技术,如微信开发者工具和JAVA SSM框架,结合源代码进行功能调整,以满足实际管理需求。该系统对外来
recommend-type

光大证券-20180309-放量恰是入市时:成交量择时初探-技术择时系列报告之三

光大证券-20180309-放量恰是入市时:成交量择时初探——技术择时系列报告之三 深度学习 多因子模型 quant 股市 股票 量化交易 量化策略
recommend-type

六个盒子及其应用.pptx

六个盒子及其应用.pptx
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://ucc.alicdn.com/pic/developer-ecology/666d2a4198c6409c9694db36397539c1.png?x-oss-process=image/resize,s_500,m_lfit) # 1. MATLAB分段函数绘制概述** 分段函数绘制是一种常用的技术,用于可视化不同区间内具有不同数学表达式的函数。在MATLAB中,分段函数可以通过使用if-else语句或switch-case语句来实现。 **绘制过程** MATLAB分段函数绘制的过程通常包括以下步骤: 1.
recommend-type

SDN如何实现简易防火墙

SDN可以通过控制器来实现简易防火墙。具体步骤如下: 1. 定义防火墙规则:在控制器上定义防火墙规则,例如禁止某些IP地址或端口访问,或者只允许来自特定IP地址或端口的流量通过。 2. 获取流量信息:SDN交换机会将流量信息发送给控制器。控制器可以根据防火墙规则对流量进行过滤。 3. 过滤流量:控制器根据防火墙规则对流量进行过滤,满足规则的流量可以通过,不满足规则的流量则被阻止。 4. 配置交换机:控制器根据防火墙规则配置交换机,只允许通过满足规则的流量,不满足规则的流量则被阻止。 需要注意的是,这种简易防火墙并不能完全保护网络安全,只能起到一定的防护作用,对于更严格的安全要求,需要
recommend-type

JSBSim Reference Manual

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