#include <stdlib.h>#include <stdio.h>#include <memory.h> //提供了内存操作相关的一些函数及声明float waterfact, powerfact;int counter;typedef struct userinfo{long number;int waterconsump;int powerconsump;} userinfo;userinfo users[100];void createdatafile(){FILE *fp;int ws, ps;long num;float t1, t2;if ((fp = fopen("input.dat", "w")) == NULL){printf("打开文件失败!\n");exit(-1);}printf("请输入水费的标准和电费标准(空格分开):\n");scanf("%f %f", &t1, &t2);fprintf(fp, "%.2f %.2f\n", t1, t2);printf("请输入住户信息(住户地址 水耗<吨> 电耗<度>,0结束输入):\n");while (1){scanf("%ld", &num);if (num == 0) break;scanf("%d %d", &ws, &ps);fprintf(fp, "%ld %d %d\n", num, ws, ps);}fclose(fp);}void readdatafile(){FILE *fp;int i = 0;if ((fp = fopen("input.dat", "r")) == NULL){printf("打开文件失败!\n");exit(-1);}fscanf(fp, "%f %f", &waterfact, &powerfact);while (1){memset(users + i, 0, sizeof(userinfo));fscanf(fp, "%ld %d %d", &users[i].number, &users[i].waterconsump, &users[i].powerconsump);if (users[i].number == 0)break;++i;}counter = i;fclose(fp);}void processdata(){FILE *fp;float t1, t2, t3, s1, s2, s3;int i, s4, s5;t1 = t2 = t3 = s1 = s2 = s3 = 0.0;s4 = s5 = 0;if ((fp = fopen("charge.dat", "w")) == NULL){printf("打开文件失败!\n");exit(-1);}printf("住户地址 水耗(吨) 水费(元) 电耗(度) 电费(元) 合计(元)\n");for (i = 0; i < counter; ++i){t1 = users[i].waterconsump * waterfact;t2 = users[i].powerconsump * powerfact;t3 = t1 + t2;s1 += t1; s2 += t2;s3 += t3;s4 += users[i].waterconsump;s5 += users[i].powerconsump;fprintf(fp, "%ld %d %.2f %d %.2f %.2f\n", users[i].number, users[i].waterconsump, t1, users[i].powerconsump, t2, t3);printf("%ld\t%d\t%.2f\t%d\t%.2f\t%.2f\n", users[i].number, users[i].waterconsump, t1, users[i].powerconsump, t2, t3);}fprintf(fp, "总共 %d %.2f %d %.2f %.2f\n", s4, s1, s5, s2, s3);printf("总共\t%d\t%.2f\t%d\t%.2f\t%.2f\n", s4, s1, s5, s2, s3);fclose(fp);}void main(){createdatafile();readdatafile();processdata();system("PAUSE");}
3 回答
largeQ
TA贡献2039条经验 获得超8个赞
#include
#include
#include //提供了内存操作相关的一些函数及声明
float waterfact, powerfact;
int counter;
typedef struct userinfo
{
long number;
int waterconsump;
int powerconsump;
} userinfo;
userinfo users[100];//定义结构体数组
void createdatafile()
{
FILE *fp;
int ws, ps;
long num;
float t1, t2;
if ((fp = fopen("input.dat", "w")) == NULL) //判断文件是否能打开
{
printf("打开文件失败!\n");
exit(-1); // 打开文件失败 退出
}
printf("请输入水费的标准和电费标准(空格分开):\n");
scanf("%f %f", &t1, &t2); // 输入 注意 : 两个输入之间有一个空格 格式输出 ,
fprintf(fp, "%.2f %.2f\n", t1, t2); // 数据写入 文件fp
printf("请输入住户信息(住户地址 水耗 电耗,0结束输入):\n");
while (1) // 录入数据,直到 num=0
{
scanf("%ld", &num);
if (num == 0) break;
scanf("%d %d", &ws, &ps);
fprintf(fp, "%ld %d %d\n", num, ws, ps);
}
fclose(fp);
}
void readdatafile()
{
FILE *fp;
int i = 0;
if ((fp = fopen("input.dat", "r")) == NULL)
{
printf("打开文件失败!\n");
exit(-1);
}
fscanf(fp, "%f %f", &waterfact, &powerfact);
while (1)
{
memset(users + i, 0, sizeof(userinfo));
fscanf(fp, "%ld %d %d", &users[i].number,
&users[i].waterconsump, &users[i].powerconsump);
if (users[i].number == 0)
break;
++i;
}
counter = i;
fclose(fp);
}
void processdata()
{
FILE *fp;
float t1, t2, t3, s1, s2, s3;
int i, s4, s5;
t1 = t2 = t3 = s1 = s2 = s3 = 0.0; // 初始化
s4 = s5 = 0;
if ((fp = fopen("charge.dat", "w")) == NULL)
{
printf("打开文件失败!\n");
exit(-1);
}
幕布斯7119047
TA贡献1794条经验 获得超8个赞
createdatafile(); 让用户输入一些数据(住户地址 水耗<吨> 电耗<度>等 ),然后产生一个数据文件 ;
readdatafile 则从改文件中读出数据放到 users,counter中;
processdata 比较简单,对Users数据进行处理打印,同事做点统计工作。
- 3 回答
- 0 关注
- 186 浏览
添加回答
举报
0/150
提交
取消
