📄 fee.c
字号:
#include<stdio.h>
#include "common.h"
//使用feeRation及size计算费用,累加到ID用户中
#define FEE_FILE "fee.data" //保存费用信息。
struct struct_Fee
{
int ID;
float fee;
};
//使用feeRation及size计算费用,累加到ID用户中
int recordFee(int ID,long feeRatio,long size) {
double nowFee;
long i;
int bFind;
int wordnum;
int ret=-1; //-1表示成功
struct struct_Fee Fees[1000]; //最多支持1000个人
int nFees; //人数
FILE *fp = NULL;
char linebuf[BUF_LEN];
char **wordlist = NULL;
DEBUG("recordFee");
if (feeRatio==0) return -1;
//读入文件,
if ((fp = fopen(FEE_FILE, "r")) == NULL) {
DEBUG("open file %s error", FEE_FILE);
return 0;
}
nFees=0;
//读入所有行
memset(linebuf, 0, sizeof(linebuf));
while (fgets(linebuf, sizeof(linebuf), fp) != NULL) {
if (linebuf[0] == '#')
continue;
STRIP(linebuf, '\n');
DEBUG("get line[%s]", linebuf);
wordnum = parse_line(linebuf, ",", &wordlist, 1);
if (wordnum <= 1) {
DEBUG("null line or error line");
break;
}
if (wordnum != 2) {
DEBUG("format error[%d]", wordnum);
return 0;
}
Fees[nFees].ID=atoi(wordlist[0]);
Fees[nFees].fee=atof(wordlist[1]);
nFees++;
if (wordlist && wordnum > 0) {
memset(wordlist, 0, wordnum * sizeof(char*));
free(wordlist);
wordlist = NULL;
}
}
FCLOSE(fp);
//修改相应的结果。
bFind=0;
nowFee=(double)size/(double)feeRatio;
for(i=0;i<nFees;i++)
{
if (Fees[i].ID==ID)
{
Fees[i].fee+=nowFee;
bFind=1;
}
}
if (!bFind) //新的ID,增加记录。
{
Fees[nFees].ID=ID;
Fees[nFees].fee=nowFee;
nFees++;
}
//写入文件
if ((fp = fopen(FEE_FILE, "w")) == NULL) {
DEBUG("open file for save %s error", FEE_FILE);
return 0;
}
fprintf(fp,"#ID,fee\n");
for(i=0;i<nFees;i++)
{
fprintf(fp,"%d,%7.2f\n",Fees[i].ID,Fees[i].fee);
}
FCLOSE(fp);
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -