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

📄 agtpay.ec.bak

📁 简单的银行代收系统
💻 BAK
字号:
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <varargs.h>

EXEC SQL include "dbbuf.h";
EXEC SQL include sqlca;

#define RETNAME "agt_ret.txt"
#define ERRNAME "errlog"
#define ZEROAMT 0.0001 

void batlog();
char *rtrim();
char *strchr();
char *get_value();
int read_tot_line();
int read_body();


int
main(int argc, char * argv[])
{
	EXEC SQL BEGIN DECLARE SECTION;
		struct s_acc_bal acc_bal; /* 帐户余额表结构 */
		struct s_agt_payret agt_payret; /* 发放结果表结构 */
		char database[20+1]; /* 数据库名 */
	EXEC SQL END DECLARE SECTION;
	struct s_data_head datahead; /* 第一行汇总信息 */
	struct s_data_body databody; /* 明细信息 */
	char tmpstr[200+1];
	long tot_num = 0; /* 总记录条数 */
	long suc_num = 0; /* 成功记录数 */
	long bad_num = 0; /* 失败记录数 */
	long i = 0;
	long ret = 0;


	FILE * fp = NULL; /* 文件指针 */

	memset(&acc_bal, 0, sizeof(struct s_acc_bal));
	memset(&agt_payret, 0, sizeof(struct s_agt_payret));
	memset(&datahead, 0, sizeof(struct s_data_head));
	memset(&databody, 0, sizeof(struct s_data_body));
	memset(tmpstr, 0, sizeof(tmpstr));
	memset(database, 0, sizeof(database));

	/* 判断参数是否合法 */
    if (argc != 3 )
	{
		printf("Usge: agtpay database_name agt_pay.txt\n");	
		return (0);
	}

	fp = fopen(argv[2], "r");
	if (fp == NULL) 
	{
		batlog("打开文件失败!file_name[%s]  [%s][%d]", argv[2], __FILE__, __LINE__);
		return (-1);
	}

	/* 打开数据库 */
	strcpy(database, argv[1]);
	rtrim(database);
	EXEC SQL DATABASE :database;
	if (SQLCODE)
	{
		batlog("打开数据库失败!database_name[%s][%d]  [%s][%d]", database, SQLCODE, __FILE__, __LINE__);
		return (-1);
	}

	/* 读取文件第一行汇总信息 */	
	if (fgets(tmpstr, sizeof(tmpstr), fp) == NULL)
	{
		batlog("文件可能为空!file_name[%s]  [%s][%d]", argv[2], __FILE__, __LINE__);
		fclose(fp);
		return (-1);
	}
	ret = read_tot_line(tmpstr, &datahead);
	if (ret < 0)
	{
		batlog("读取文件汇总信息失败!file_name[%s]  [%s][%d]", argv[2], __FILE__, __LINE__);
		fclose(fp);
		return (-1);
	}

	/* 开始事务 */
	EXEC SQL BEGIN WORK;
	if (SQLCODE)
	{
		batlog("启动事务失败!sqlcode[%d]  [%s][%d]", SQLCODE, __FILE__, __LINE__);
		fclose(fp);
		return (-1);
	}

	/* 逐条处理汇总信息 */
    while(fgets(tmpstr, sizeof(tmpstr), fp) != NULL)
    {
		i++;
		/* 取明细信息 */
		ret = read_body(tmpstr, &databody);
		if (ret < 0)
		{
			batlog("取得数据不合法!acc[%s][%i]  [%s][%d]", databody.acc, i, __FILE__, __LINE__);
			if( strlen(databody.acc) != 0 )
			{
			}
			continue;
		}
	}

	/* 生成结果文件 */

	return (0);
}

/* 写日志函数
 * Function: batlog(char * fmt,...)
 */
void batlog(va_alist)   /*  va_alist = parameters table*/
va_dcl
{
    va_list args;/*  a varible in order to check parameters table */
    char *sign,*fmt;
    char err_str1[80],err_str2[80];
    char outfile[80];
    char *home;
    FILE *logfd;
    time_t itm;
    struct tm *stm;

    memset(err_str1,'-',79); err_str1[79]='\0';
    memset(err_str2,'*',79); err_str2[79]='\0';
    memset(outfile,0x0,80);

    itm=time(&itm);
    stm=localtime(&itm);

    sprintf(outfile,"./%s", ERRNAME );
    /*  initial parameters table, set args at start of parameters table */

    va_start(args);
    if ((logfd=fopen(outfile,"a"))==NULL)
	{
        fprintf(stderr,"Error in open %s\n",outfile);
        return;
    }

    fprintf(logfd,"%s\n",err_str2);
    fprintf(logfd,"%4d/%02d/%02d %02d:%02d:%02d\n",\
                                stm->tm_year+1900,\
                                stm->tm_mon+1,stm->tm_mday,\
                                stm->tm_hour,stm->tm_min,stm->tm_sec);

    fmt=va_arg(args,char *);
    vfprintf(logfd,fmt,args);
    fprintf(logfd,"\n%s\n",err_str1);
    fflush(logfd);

    va_end(args);       /* clear parameters table       */
    fclose(logfd);
}

/* 去右空格函数

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -