求助 C语言中如何往txt文件增加数据

leoJD 2017-06-13 11:59:28
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
int size=0;
struct GZ
{long int num;
char name[20];
float jbgz;
float jt;
float ks;
float sfgz;
};

struct GZ s[100];

void Input()
{
FILE *fp;
int n=0;
fp=fopen("e:\\1.txt","r");
while(fscanf(fp,"%ld %s %f %f\n",&s[n].num,s[n].name,&s[n].jbgz,&s[n].jt)!=EOF)
{
n++;
}
fclose(fp);
size=n;
}

void Disp()
{
int n;

printf("\t\t\tNum Name jbgz jt ks sfgz \n");
for(n=0;n<size;n++)
{
printf("\t\t\t%-5ld%-10s%-7.2f%-7.2f%-7.2f%-7.2f\n",s[n].num,s[n].name,s[n].jbgz,s[n].jt,s[n].ks,s[n].sfgz);
printf("\n");
}
}


void Count()/*计算实发工资*/
{
float c,k,a,b;
int n;
for(n=0;n<size;n++)
{
a=s[n].jbgz ;
b=s[n].jt ;
c=a+b;
if(c<=1500) k=0;
else if(c<=2000) k=(float)((c -1500)*0.05);
else if(c>2000) k=(float)((c -1500)*0.05+(c -2000)*0.1);
s[n].sfgz =c-k ;
s[n].ks =k;
printf("\t\t\t%-5ld %-10s %-7.2f %-7.2f %-7.2f %-7.2f\n",s[n].num,s[n].name,s[n].jbgz,s[n].jt,s[n].ks,s[n].sfgz);
printf("\n");
}
}


void Append()/*追加1条职工信息*/
{
int a;
FILE *fp;
printf("please input the people's information that you want to append.\n");
a=size;
fp=fopen("e:\\1.txt","a");
printf("\t\t\tplease re-input the Num Name jbgz jt.\n");
scanf("%ld %s %f %f",&s[a].num,s[a].name,&s[a].jbgz,&s[a].jt);

fwrite(&s[a],sizeof(GZ),1,fp);
fclose(fp);

}


void Modify()/*修改数据*/
{
int a,b,i;
FILE *fp;
printf("please input the people's id number that you want to change.\n");
scanf("%d",&a);
a=a-201700;
if(a>size) printf("sorry the people not exist.\n");
else
{
b=a-1;
fp=fopen("e:\\1.txt","a");
printf("\t\t\tplease re-input the Num Name jbgz jt.\n");
scanf("%ld %s %f %f",&s[b].num,s[b].name,&s[b].jbgz,&s[b].jt);
fseek(fp,i*sizeof(GZ),2);
fwrite(&s[b],sizeof(GZ),1,fp);
fclose(fp);
}

}

void Query()/*查询职工信息*/
{
int a;
printf("please input the people's information that you want to change.\n");
scanf("%d",&a);
a=a-201700;
if(a>size) printf("sorry the people not exist.\n");
else
{
FILE *fp;
float c,k,h,b;
int m=0,n;
printf("\t\t\tNum Name jbgz jt ks sfgz \n");
for(n=0;n<size;n++)
{
h=s[n].jbgz ;
b=s[n].jt ;
c=h+b;
if(c<=1500) k=0;
else if(c<=2000) k=(float)((c -1500)*0.05);
else if(c>2000) k=(float)((c -1500)*0.05+(c -2000)*0.1);
s[n].sfgz =c-k ;
s[n].ks =k;
}
printf("\t\t\t%-5ld %-10s %-7.2f %-7.2f %-7.2f %-7.2f\n",s[a].num,s[a].name,s[a].jbgz,s[a].jt,s[a].ks,s[a].sfgz);
printf("\n");
}
}


void main()
{
int choice;
menu:printf("\t\t\t1.Input employee's information\n");
printf("\t\t\t2.Display employee's information\n");
printf("\t\t\t3.Count\n");
printf("\t\t\t4.Append a employee information\n");
printf("\t\t\t5.Query a employee information\n");
printf("\t\t\t6.Modify employee's intformation\n");
printf("\t\t\t0.Exit system\n\n");
printf("\t\t\tPlease enter choice(0~7)");
scanf("%d",&choice);
switch(choice)
{
case 1:Input();break;
case 2:Disp();break;
case 3:Count();break;
case 4:Append();break;
case 5:Query();break;
case 6:Modify();break;
case 0:exit(0);
}
if(choice<0||choice>6)printf("\n\n\n\t\tplease choose again!\n\n");
goto menu;
}

请问这中间的modify和append应如何编写,谢谢
...全文
1042 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leoJD 2017-06-14
  • 打赏
  • 举报
回复
引用 9 楼 cfjtaishan 的回复:
[quote=引用 6 楼 leoJD 的回复:] [quote=引用 3 楼 cfjtaishan 的回复:] 对于修改,对于普通文件还没有什么捷径直接修改文件里的某行数据,甚至是某个数据(要做到这些,需要专门的软件),只能是将所有数据读出来,在内存里修改,然后在重新写入文件中; 对于增加数据,如果是在文件末尾增加,可以在打开文件时,以追加的形式打开;若在某行数据之后增加,也只能读到内存里,然后在增加。
我在运行这个程序的时候 用修改再重新输出就是修改后的 但如果重新运行的时候 就不对了,txt文件里也会出现乱码,这要如何解决啊 谢谢[/quote] 看到你的写入用fwrite,但是读取用fscanf,读和写的函数不匹配呢。fscanf是格式化的,一个元素一个元素读取,而fwrite是整个结构体进行写的,建议若用fwrite写,那么就要用fread读吧;注意读写函数要匹配[/quote]好的 谢谢了
自信男孩 2017-06-14
  • 打赏
  • 举报
回复
对于修改,对于普通文件还没有什么捷径直接修改文件里的某行数据,甚至是某个数据(要做到这些,需要专门的软件),只能是将所有数据读出来,在内存里修改,然后在重新写入文件中; 对于增加数据,如果是在文件末尾增加,可以在打开文件时,以追加的形式打开;若在某行数据之后增加,也只能读到内存里,然后在增加。
  • 打赏
  • 举报
回复
建议用数据库做这类题目,数据不多可以用access之类的小型DB。 往文件追加数据可以以"a"方式打开文件,然后中fwrite.
自信男孩 2017-06-14
  • 打赏
  • 举报
回复
引用 6 楼 leoJD 的回复:
[quote=引用 3 楼 cfjtaishan 的回复:] 对于修改,对于普通文件还没有什么捷径直接修改文件里的某行数据,甚至是某个数据(要做到这些,需要专门的软件),只能是将所有数据读出来,在内存里修改,然后在重新写入文件中; 对于增加数据,如果是在文件末尾增加,可以在打开文件时,以追加的形式打开;若在某行数据之后增加,也只能读到内存里,然后在增加。
我在运行这个程序的时候 用修改再重新输出就是修改后的 但如果重新运行的时候 就不对了,txt文件里也会出现乱码,这要如何解决啊 谢谢[/quote] 看到你的写入用fwrite,但是读取用fscanf,读和写的函数不匹配呢。fscanf是格式化的,一个元素一个元素读取,而fwrite是整个结构体进行写的,建议若用fwrite写,那么就要用fread读吧;注意读写函数要匹配
leoJD 2017-06-14
  • 打赏
  • 举报
回复
引用 7 楼 libing403 的回复:
关于c语言对文件的操作,以及输入输出,你可以参考一下这个资料 http://blog.csdn.net/libing403
哦 好的谢谢!
「已注销」 2017-06-14
  • 打赏
  • 举报
回复
关于c语言对文件的操作,以及输入输出,你可以参考一下这个资料 http://blog.csdn.net/libing403
leoJD 2017-06-14
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
对于修改,对于普通文件还没有什么捷径直接修改文件里的某行数据,甚至是某个数据(要做到这些,需要专门的软件),只能是将所有数据读出来,在内存里修改,然后在重新写入文件中; 对于增加数据,如果是在文件末尾增加,可以在打开文件时,以追加的形式打开;若在某行数据之后增加,也只能读到内存里,然后在增加。
我在运行这个程序的时候 用修改再重新输出就是修改后的 但如果重新运行的时候 就不对了,txt文件里也会出现乱码,这要如何解决啊 谢谢
leoJD 2017-06-14
  • 打赏
  • 举报
回复
引用 2 楼 js_gary 的回复:
建议用数据库做这类题目,数据不多可以用access之类的小型DB。 往文件追加数据可以以"a"方式打开文件,然后中fwrite.
谢了但目前只学了C
leoJD 2017-06-14
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
fp=fopen("e:\\1.txt","a") //a 模式是追加写入,不清楚内容并且从最后位置写入数据
谢谢
幻夢之葉 2017-06-14
  • 打赏
  • 举报
回复
fp=fopen("e:\\1.txt","a") //a 模式是追加写入,不清楚内容并且从最后位置写入数据
一.C语言基础 1.C语言特点(识记); 2.C语言程序基本组成(识记): 3.基本数据类型: 3.1 标识符与基本数据类型(识记), 3.2 常量与变量(领会) 3.3 内存的概念(识记) 4.基本输入、输出函数(领会): 5.运算符与表达式(简单应用): 5.1 运算符的优先级与结合性 二.程序控制结构 1.C语言的语句(识记): 2.顺序结构(领会): 3.分支结构(简单应用): 4.循环结构(综合应用): 5 算法特点 6 流程图 三.构造型数据 1.数组(综合应用): 1.1 定义和引用 1.2 字符数组 1.3 指针和数组 2.结构类型: 2.1 结构类型的概念 2.2 结构类型定义及结构变量说明 2.3 结构变量的初始化 2.4 结构数组的初始化 3.联合类型(识记): 3.1 联合类型的概念 3.2 联合类型定义和联合变量说明 3.3 联合类型的使用 3.4 Struct 和 Union区别 4.枚举型(识记): 4.1 枚举型的定义 4.2 使用枚举型变量 5.typedef的用途(识记): 四.指针 1.指针与指针变量(识记): 2.指针运算符(领会): 3. 指针与函数 4.指针数组与指向指针的指针(识记): 5.指针与结构(领会): 6. 难点和易混淆 五.函数 1.常见的系统库函数(识记): 2.用户自定义函数(简单应用): 2.1函数定义 2.2 函数调用 2.3 函数声明 2.4 函数返回值 2.5 函数参数 3.函数之间的数据传递(领会): 4.函数的嵌套调用及递归调用(领会): 5.局部变量与全局变量(识记): 6.变量的存储类型与变量的初始化(领会): 7.编译预处理(领会): 六.文件 1.文件的基本概念,C语言的两种文件(识记) 2.文件的打开、关闭和文件结束测试,文件的读写,文件的定位(识记) 2.1文件操作函数 2.2 文件权限 七.算法与编程(综合应用) 1 使用Turbo C集成开发环境调试程序 1.1.源程序的编写、编辑与改错(领会); 1.2.集成环境下的求助Help(识记); 1.3.程序的编译与目标代码的生成(识记); 1.4.程序的调试(综合应用): 1.5.了解Turbo C程序的常见错误提示(识记)。 2 重点编程题 八 位运算 1. & 2. | 3. ^ 4. ~ 5. << 6. >> ———————————————— 版权声明:本文为CSDN博主「kaikai_sk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/kaikai_sk/article/details/106061539

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧