8. 程序示例 8.1中心机端应用服务程序
● 编译: cc demoserv.c s.a -o demoserv -lsocket
● 程序: /* demoserv.c */ #include "STrans.h"
/* 定义交易处理函数 */
int ex1(), ex2();
term_t stab[]= { {"000001", ex1}, {"000002", ex2}, {"", 0}, };
main() { ServCtrl(stab, "demoserv"); }
ex1(rq, ans) prq_t *rq; pans_t *ans; { char buf[100],note[30]; /* 根据rq进行处理 */ /* ... ... */
if (...) { Fail(rq, ans, "数据错误"); return 1; }
/* . . */ strcpy(buf, "1234567890"); strcpy(note, "交易成功"); /* 发回成功报文 */ Ok(rq, ans, "%-15s%-20s", buf, note); /* 处理数据 */ . . */ strcpy(ans->;text, "ABCDEFGH");
/* 主动发回处理结果 */ SendRes("100006", ans, rq->;addr); /* 拷贝文件,rq->;addr是请求抱文中的客户机名称 */ CopyStoC(PutFlag, "/tmp/file1", "/tmp/file1", rq->;addr); CopyStoC(GetFlag, "/tmp/file2", "/tmp/file2", rq->;addr); }
ex2(rq, ans) prq_t *rq; pans_t *ans; { char buf[30000]; char p[10]; int i; /* 交易处理,产生应答报文 */ ans->;text[0] = 0; for (i = 0;i< 5000;i++) { sprintf(p, "%04d\n", i); strcat(ans->;text, p); } strcpy(ans->;bz, "0"); /* 置应答报文成功标志 */ SendAns(rq, ans); }
/* The end */
8.2 客户机端应用程序
● 编译:
cc democlnt.c CTrans.a -o democlnt -lsocket #include "CTrans.h" main() { ex(); }
ex() { pans_t pans; prq_t prq;
/* 取得消息队列 */ ClntMsgGet(); /* 定义请求报文*/ CInitRq(&prq, "1234567", "12", "1234", "ABCD"); strcpy(prq.text, "0"); /* 进行交易000010 */ PktCtrl("000010", "demoserv", &prq, &pans); printf("text=%s\n", pans.text);
/* 等待接收主机主动发回处理结果报文 ,报文代号为100060 */ WaitRes("100060" , &pans); printf("text=%s\n", pans.text); getchar(); strcpy(prq.text, "1"); PktCtrl("000020", "demoserv", &prq, &pans); printf("text=%s\n", pans.text);
/* 拷贝文件 */
CopyCtoS(PutFlag, "/tmp/demo1", "/tmp/demo1"); CopyCtoS(GetFlag, "/tmp/demo2", "/tmp/demo2"); }
中创金融系统开发平台(BSDP)
(业务支持部分)
Ver 1.0
BSDP业务支持系统(BSS)
● cxfloor
[语法] double cxfloor(x, n) double x; int n;
[说明] cxfloor 根据传入的双精度浮点数 x, 保留小数点后 n位, 生成新的 浮点数返回.
[返回值] 留有小数点后 n位的新浮点数
● dateymd
[语法] dateymd(s, y, m, d) char *s; int *y, *m, *d;
[说明] dateymd 根据字符串日期 s (格式: "yyyy/mm/dd"), 生成其对应的 年, 月, 日, 存放在地址 y, m, d 中.
[返回值] 无
● date_dqr
[语法] date_dqr(qxr, qx, dqr) char *qxr, *dqr; int qx;
[说明] 该函数调用根据起息日期 qxr, 以月为单位的存期 qx, 计算到期日 dqr.
[返回值] 无
● daysof
[语法] int daysof(rq1, rq2) char *rq1, *rq2;
[说明] 该函数返回两日期之间的间隔天数.
[返回值] 间隔天数
● daysofjxr
[语法] int daysofjxr(m, d, jxr) int m, d; char *jxr;
[说明] 该函数用于活期利息积数计算, 求得到结息日的天数.
[返回值] 间隔天数
● rjdate
[语法] char * rjdate(rq, n) char *rq; int n;
[说明] 该函数返回与日期 rq 间隔 n 天的新日期.
[返回值] 新日期字符串.
● rjtrim
[语法] rjtrim(s) char *s;
[说明] 该函数将字符串 s 的前后空格及尾回车去掉
[返回值] 无
● v_floor
[语法] v_floor(m) double *m;
[说明] 该函数对 m 对应的浮点数取整.
[返回值] 无
● monthsof
[语法] int monthsof(rq1, rq2) char *rq1, *rq2;
[说明] 该函数返回两日期之间的间隔月数.
[返回值] 间隔月数
● lx000
[语法] int lx000(hxfs, jxr, rq, fse, yjs, js, jsout) char *hxfs, *jxr, *rq, *jsout; double fse, yjs, *js;
[说明] 活折类利息积数计算函数, 其中: hxfs: 活期利息积数方式, jxr: 结息日, rq: 工作日期 fse: 发生额, yjs: 原利息积数, js: 业务后利息积数 jsout: 业务后利息积数表示.
[返回值] 成功返回 0
● lx001
[语法] int lx001(hbcz, qxr, rq, fse, lx) char *hbcz, *qxr, *rq; double fse, *lx;
[说明] 活单类利息计算函数, 其中: hbcz: 贷币储种, qxr: 起息日, rq: 工作日期 fse: 发生额, lx: 利息额
[返回值] 成功返回 0
● lx002
[语法] int lx002(hbcz, qxr, rq, fse, lx) char *hbcz, *qxr, *rq; double fse, *lx;
[说明] 定活类利息计算函数, 其中: hbcz: 贷币储种, qxr: 起息日, rq: 工作日期 fse: 发生额, lx: 利息额
[返回值] 成功返回 0
● lx003
[语法] int lx003(hbcz, qxr, rq, qx, fse, lx, bt, zdzc, yyzc, cc) char *hbcz, *qxr, *rq, *zdzc, *yyzc; double fse, *lx, *bt; int qx, cc;
[说明] 整整类利息计算函数, 其中: hbcz: 贷币储种, qxr: 起息日, rq: 工作日期, qx: 原存期 fse: 发生额, lx: 利息额, bt: 保值贴补, zdzc: 自动转存标志, yyzc: 预约转存标志, cc: 到期提过标志
[返回值] 成功返回 0
● lx004
[语法] int lx004(zh, qxr, rq, jxfs, qx, lx, cc) char *zh, *qxr, *rq, *jxfs; int qx, cc; double *lx;
[说明] 零整类利息计算函数, 其中: zh: 帐号, qxr: 起息日, rq: 工作日期, jxfs: 计息方式 qx: 原存期, lx: 利息额, cc: 到期提过标志
[返回值] 成功返回 0
● lx005
[语法] int lx005(hbcz, qxr, rq, qx, jc, cqe, lx, cc) char *hbcz, *qxr, *rq; int qx, cc; double jc, cqe, *lx;
[说明] 整零类利息计算函数, 其中: hbcz: 贷币储种, qxr: 起息日, rq: 工作日期 qx: 原存期, jc: 开户金额, cqe: 周期取款额 lx: 利息额, cc: 到期提过标志
[返回值] 成功返回 0
● cxtty_init
[语法] int cxtty_init()
[说明] 初始化当前终端参数.
[返回值] 成功返回 0, 当前终端未定义, 返回 -1.
● prt_init
[语法] int prt_init()
[说明] 初始化打印参数.
[返回值] 成功返回 0, 失败返回 -1.
● cxprt_file
[语法] int cxprt_file(fname, flag, mode) char *fname; int flag; int mode;
[说明] 文件打印函数, fname: 打印文件, flag: 0_使用存折打印机 1_报表打印机.
[返回值] 成功返回 0, 失败返回 -1.
● dzprint
[语法] int dzprint(fname_data, fname_form) char *fname_data, *fname_form;
[说明] 存折打印函数, fname_data: 数据文件, fname_form: 格式文件
[返回值] 成功返回 0, 失败返回 -1.
● get_field
[语法] int get_field(fname,key,field,key_n,field_n, sep) char *fname, *key, *field; int key_n, field_n; char sep;
[说明] 本函数用于在文件 fname 中寻找第 key_n 个字段为 key 的记录, 把该记录的第 field_n 个字段赋给 field, 字段以 sep 为分隔符.
[返回值] 成功返回 0, 失败返回 -1.
● get_serial
[语法] int get_serial()
[说明] 本函数用于得软件序列号
[返回值] 成功返回 0, 失败返回 -1.
● get_uname
[语法] int get_uname()
[说明] 本函数用于得使用单位名称
[返回值] 成功返回 0, 失败返回 -1.
● verify
[语法] char verify(s) char *s;
[说明] 本函数根据字符串 s, 生成校验位字符.
[返回值] 返回校验字符
● gen_mm
[语法] gen_mm(s) char *s;
[说明] 本函数用于储户密码加密
[返回值] 无
● chk_mm
[语法] chk_mm(s1, s2) char *s1, *s2;
[说明] 本函数用于储户密码检查
[返回值] 密码正确返回 0
● rjdelfrm
[语法] int rjdelfrm(sfile, dfile) char *sfile, *dfile;
[说明] 本函数用于将带伪打印控制码的文件, 转换成普通文件.
[返回值] 成功返回 0
● getdlldh
[语法] int getdlldh(hbcz, qx, rq, lldh) char *hbcz, *rq, *lldh; int qx;
[说明] 本函数用于取帐户到期支取时的利率代号.
[返回值] 成功返回 0
● gettlldh
[语法] int gettlldh(hbcz, qx, rq, lldh) char *hbcz, *rq, *lldh; int qx;
[说明] 本函数用于取帐户提前支取时的利率代号.
[返回值] 成功返回 0
● getglldh
[语法] int getglldh(hbcz, qx, rq, lldh) char *hbcz, *rq, *lldh; int qx;
[说明] 本函数用于取帐户过期支取时的利率代号.
[返回值] 成功返回 0
● get1ll
[语法] get1ll(lldh, rq, ll) char *lldh, *rq; double *ll;
[说明] 本函数用于根据代号 lldh, 日期 rq, 取利率, ll.
[返回值] 无
/* The end */
| | |