⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fee.c

📁 本Linux网络应用程序采用客户-服务器模型,并发型交互。在OSI参考模型的传输层,通过调用TCP套接字(Socket)的各种函数,使服务器和各个客户端之间建立快速可靠的连接
💻 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 + -