【发布时间】:2019-06-30 20:16:16
【问题描述】:
我正在尝试从 bin 文件中删除一条记录。
我尝试创建另一个指针并创建一个临时文件以将数据写入其中,然后从临时文件将数据写回原始文件。我想可能有更简单的方法。但主要问题是更新薪水功能要改变什么。
这是我到目前为止所做的。
因此,该程序的主要目标是,如果我输入的额外资金大于阈值,我应该删除记录。有什么建议我需要在更新工资功能中进行哪些更改?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct employee
{
int code;
char name[15];
float salary;
} Employee;
void create_bin(char *f, float* threshold);
void updateSalary(char* filename, float threshold);
void Display(char *fName);
void main() {
char filename[20] = "input.bin";
float threshold;
create_bin(filename,&threshold);
Display(filename);
updateSalary(filename, threshold);
Display(filename);
getch();
}
void create_bin(char *f,float* threshold){
FILE *f_b;
Employee emp1;
int object=0,number,i=0;
float amount;
f_b = fopen(f, "wb+");
if (!f_b) {
printf("unable to open file");
}
printf("How many Employees?");
scanf("%d",&number);
for (i = 0; i < number; i++) {
printf("Eneter employee Code:");
scanf("%d",&emp1.code);
rewind(stdin);
puts("Enter name");
gets(emp1.name);
printf("Eneter employee Salary:");
scanf("%f",&emp1.salary);
rewind(stdin);
object += fwrite(&emp1, sizeof(Employee), 1, f_b);
}
printf("Ente threshold:");
scanf("%.2f",&amount);
*threshold = amount;
printf("Total elements in file %d\n", object);
fclose(f_b);
}
void updateSalary(char* filename, float threshold)
{
float extra_money;
int i = 1;
Employee emp;
FILE *f = fopen(filename,"rb+");
FILE *f_temp = fopen("Final_file","wb+");
if (!f)
{
printf("File not found!\n");
return 0;
}
if (!f_temp) {
printf("File not found!\n");
return 0;
}
fread(&emp, sizeof(Employee), 1, f);
while (!feof(f))
{
printf("Enter how much money to add to #%d worker:",i++);
rewind(stdin);
scanf("%f",&extra_money);
emp.salary+= extra_money;
if (emp.salary <= threshold) {
fwrite(&emp, sizeof(Employee), 1, f_temp);
}
fread(&emp, sizeof(Employee), 1, f);
}
fread(&emp, sizeof(Employee), 1, f_temp);
while (!feof(f_temp)) {
fwrite(&emp, sizeof(Employee), 1,f);
fread(&emp, sizeof(Employee), 1, f_temp);
}
fclose(f_temp);
fclose(f);
}
void Display(char *fName)
{
Employee emp;
FILE *f = fopen(fName, "rb");
if (f)
{
fread(&emp, sizeof(emp), 1, f);
while (!feof(f))
{
printf("%9d %15s %8.2f\n", emp.code, emp.name, emp.salary);
fread(&emp, sizeof(emp), 1, f);
}
fclose(f);
}
}
【问题讨论】:
-
首先从不在财务计算中使用浮点数。
-
其次不要从文件中删除。开玩笑让它无效或免费。它需要更多的数据结构逻辑。
-
P__J__ 这是我需要的。给出了结构,我必须从 bin 文件中删除这是我被要求的。
-
这是我认为更安全的方法:读取原始文件并写入新文件。完成后将原始文件重命名为原始文件名 +
".bak"。将新文件重命名为原始文件的名称。然后删除原始文件。有了这个概念,如果出现任何问题,您总是至少有一个完整的文件。 (可能需要双磁盘空间,我会考虑投资于安全性。)顺便说一句。几十年前我从 Turbo Pascal IDE 中学到了这一点...... ;-)