C //习题10.10 从第9题的“职工工资文件”中删除一个职工的数据,再存回原文件。

C程序设计 (第四版) 谭浩强 习题10.10

习题10.10 从第9题的“职工工资文件”中删除一个职工的数据,再存回原文件。

IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。

 

代码块
方法:使用指针,函数的模块化设计,动态分配内存
说明:文件wage.dat已经存在与项目目录下。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define N 3typedef struct{int num;char name[20];char gender;int age;char addr[20];float wage;char health;char edu[10];
}Employee;void initialVar(Employee **emp, int n, char **name){*emp = (Employee*)malloc(n * sizeof(Employee));*name = (char*)malloc(80 * sizeof(char));
}void inputFileName(FILE **file, char *name){printf("Enter File Name: ");scanf("%s", name);*file = fopen(name, "rb");if(*file == NULL){perror("Cannot open this file");system("pause");exit(0);}
}void readFile(FILE **file, Employee *emp, int n){printf("Read File Info:\n");for(int i = 0; i < n; i++){fread(&emp[i].name, sizeof(Employee), 1, *file);fread(&emp[i].wage, sizeof(Employee), 1, *file);printf("Name: %-10s  Wage: %-.2f\n", emp[i].name, emp[i].wage);}printf("\n");fclose(*file);
}void deleteRec(FILE **file, char *name, Employee *emp, int n, int num){for(int i = 0; i < n; i++){if(i == num - 1){for(int j = i; j < n - 1; j++){emp[j] = emp[j+1];}break;}}*file = fopen(name, "wb");if(*file == NULL){perror("Cannot open this file");system("pause");exit(0);}for(int i = 0; i < n - 1; i++){if(fwrite(&emp[i].name, sizeof(Employee), 1, *file) != 1){perror("File Write Error");system("pause");exit(0);}	if(fwrite(&emp[i].wage, sizeof(Employee), 1, *file) != 1){perror("File Write Error");system("pause");exit(0);}}fclose(*file);
}void outputFileNew(FILE **file, char *name, Employee *emp, int n){*file = fopen(name, "rb");if(*file == NULL){perror("Cannot open this file");system("pause");exit(0);}printf("New Employee Info:\n");for(int i = 0; i < n; i++){fread(&emp[i].name, sizeof(Employee), 1, *file);fread(&emp[i].wage, sizeof(Employee), 1, *file);printf("Name: %-10s  Wage: %-.2f\n", emp[i].name, emp[i].wage);}printf("\n");fclose(*file);
}int main(){FILE *file = NULL;Employee *emp = NULL;char *name = NULL;initialVar(&emp, N, &name);inputFileName(&file, name);readFile(&file, emp, N);deleteRec(&file, name, emp, N, 1);outputFileNew(&file, name, emp, N-1);system("pause");return 0;
}
运行结果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/263433.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

客服工单系统排行榜:提升客户满意度和效率的关键工具

随着技术的进步和企业规模的扩大&#xff0c;客户服务成为了企业成功的关键。而客服工单系统作为一个重要的组成部分&#xff0c;在优化客户服务过程中起到了至关重要的作用。本篇文章为您提供了一份客服工单系统排行榜&#xff0c;帮助您选择适合您企业需求的系统。 “本文进…

探索开源游戏的乐趣与无限可能 | 开源专题 No.47

CleverRaven/Cataclysm-DDA Stars: 9.0k License: NOASSERTION Cataclysm&#xff1a;Dark Days Ahead 是一个回合制的生存游戏&#xff0c;设定在一个后启示录世界中。尽管有些人将其描述为 “僵尸游戏”&#xff0c;但 Cataclysm 远不止于此。在这个残酷、持久、程序生成的世…

【EI征稿中|SPIE出版】 第四届传感器与信息技术国际学术会议(ICSI 2024)

第四届传感器与信息技术国际学术会议&#xff08;ICSI 2024&#xff09; 2024 4th International Conference on Sensors and Information Technology&#xff08;ICSI 2024&#xff09; 第四届传感器与信息技术国际学术会议&#xff08;ICSI 2024&#xff09;将于2024年1月5…

我有才打造知识付费小程序

一站式线上线下活动管理 为用户提供“精彩城市生活和人脉资源”。 在线活动提供创业、互联网、科技、投资、金融、教育、亲子、生活、聚会交友、医疗、设计、分享会、脱口秀、音乐演出等多种活动类型, 为职场白领提升技能、拓展人脉、聚会交友的首选平台。 为主办方提供“一…

FL Studio20版本水果软件永久免费激活码

FL Studio21水果编曲软件汉化版是一款专业的音乐制作软件&#xff0c;被广泛地应用于电子音乐、hip-hop、流行乐等多种音乐类型的制作。该软件提供了丰富的音频编曲工具和音乐效果器&#xff0c;让用户可以轻松地创作出高品质的音乐作品。同时&#xff0c;这也是一款非常易于上…

Linux权限理解

文章目录 前言概述Linux下的权限Linux权限管理文件访问者的分类&#xff1a;属性&#xff1a;文件权限值表示方法&#xff1a; 文件类型&#xff1a; 权限的修改chmod对 text.txt 文件的权限进行修改法1&#xff1a;法2&#xff1a; chownchgrpumaskfile指令目录权限粘滞位 前言…

046:vue通过axios调用json地址数据的方法

第046个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

simulink MATLABFunction模块中实时函数调用函数的使用

样例 function Predyy matlabceshi(input, Time_s) input1 input; Time_s1 Time_s; Predyy ee(input1) mm(Time_s1); end 上面是主要部分&#xff0c;下面是被调用部分 function A ee(input1) A input1 * 100; end function B mm(Time_s1) B Time_s1 * 100; end 模型…

再见了Future,图解JDK21虚拟线程的结构化并发

Java为我们提供了许多启动线程和管理线程的方法。在本文中&#xff0c;我们将介绍一些在Java中进行并发编程的选项。我们将介绍结构化并发的概念&#xff0c;然后讨论Java 21中一组预览类——它使将任务拆分为子任务、收集结果并对其进行操作变得非常容易&#xff0c;而且不会不…

c语言希尔排序总结(详解)

希尔排序&#xff1a; 1&#xff1a;分组插入排序两两分组降低元素个数提高插入的效率&#xff0c;先分组对每一组分别进行插入排序 希尔排序是插入排序的一种改进算法&#xff0c;也称为缩小增量排序。其基本原理是通过将待排序的序列分成若干个子序列&#xff0c;对每个子序…

udp多播组播

import socket ,struct,time# 组播地址和端口号 MCAST_GRP 239.0.0.1 MCAST_PORT 8888 # 创建UDP socket对象 sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # 绑定socket对象到本地端口号 # sock.bind((MCAST_GRP, MCAST_PORT)) …

sentinel整合nacos配置中心持久化

在网上找了很多的资料&#xff0c;发现sentinel整合nacos持久化的博文和视频大多数都只有改造限流部分的教程&#xff0c;并且都需要修改前端&#xff0c;略显麻烦&#xff0c;至于剩下的熔断、热点流控、授权的更是没有相关的改造教程&#xff0c;最后在知乎的看到一篇文章后让…