《C语言之运营商话单接口》源码例程
上一篇 / 下一篇 2007-09-03 17:37:12 / 个人分类:C语言编程
h+Xz/TF-{z$e4O0//主程序:gencdr.pc
4PN)t4B(Vl1l0ru\0//连接ORACLE数据库的solar_user_subscrīption_view视图
*kH{4WL/[V0//生成话单文件LUPA开源社区Yewk-Jos;?
// Writer:Super MarioLUPA开源社区7F2k
_{'tVA'`
// mail:newhitler@163.com
'yL{q0^0// command:proc gencdr.pc;gcc -o gencdr gencdr.c filename.c /usr/lib/libclntsh.so.10.1
LUPA开源社区s7]%F{8r[)a
# include <stdio.h>
A2H6n&Gwy9B BjY0# include <string.h>LUPA开源社区6H,vQ4Oi'cJ
# include <stdlib.h>LUPA开源社区e(j3M
xqe [n
7Ra"ISv|0EXEC SQL INCLUDE SQLCA;
j9F Y3I1NPG0tE)V0]A-LRS?G|"yzb0LUPA开源社区N{U!c;Iy6M
int main()
T|g6C*O,z^0{LUPA开源社区p5i_+i)L:c
// 声明SQL变量
Q7z#s-aE_g4w0 LUPA开源社区I"|-ap\4XdF-\ EXEC SQL BEGIN DECLARE SECTION;LUPA开源社区
hv
O#JT.wU9`&U
VARCHAR user[20],pass[20],tnsname[20];
{
QA+|+j-BL0 EXEC SQL END DECLARE SECTION;LUPA开源社区\'P3U/s
A
p/|(X'M
"^"RG8OZMV
WY`0 void init();LUPA开源社区1wU
[VM{n[
FILE *fp;
s-YRD o0 char filename[32]="";
:PK9f4M*G6_)t#S0 Genfilename(filename);
0w\B[7Pd;_*li8B1u~0 if((fp=fopen(filename,"wt+"))==NULL)
$TNK-@~$q6R\0 {LUPA开源社区.@O/m~(S{(VYEgv
printf("open file failed\n");LUPA开源社区"~7e$O ~e5C6we
exit(EXIT_FAILURE);LUPA开源社区gXz7i @ ZG-r
}
jI"Bif(IQ@0 LUPA开源社区cb7{)vk
S"F
// 声明C变量
J*Y`"u1n*RR0 //计费号码(被计费号码)官方15位,实际使用11位LUPA开源社区xCAP$IrE-Jg
char sBillingNbr[12];LUPA开源社区}m"j{%jr@t
LUPA开源社区6I*v)ftD$Dg{
//呼叫类型,默认为01LUPA开源社区1L)l"SGx
char sCallType[3]={'0','1','\0'};LUPA开源社区9L5x0s&`!}
SJp&\/S:z0 //计费号码归属区号,默认为空LUPA开源社区,?@#b4Mjc5i
char sHomeAreacode[6]={'\0'}; LUPA开源社区9y2QM;b'[,g1x7|
@p+j7b/Q~2?C~cro0 //通话起始时间,取数据库系统时间LUPA开源社区{t#?di vr
t2h
char sStartTime[15];
;g3VpuIDun"U N+|
OU0
S+H7Y;LAlp3W0 //对端号码,同计费号码一致LUPA开源社区
|y6e!h P~g%C
char sTermNbr[12];
//通话时长,默认为0
si:swj.{[)J0 char sDuration[9]={'0','\0'};
^|DVx3k0 //第三方号码,默认为空
qp]} ~%I3x0 char sThirdPartyNbr[22]={'\0'};LUPA开源社区
Exc;sT#rE
b
_"w9o,X)co+I~0 //对端号码归属区号,默认为空
!H[N1OR0 char sTermAreacode[6]={'\0'};
5yj5SSs4ip+gw0b0 //计费号码通话地,默认为空LUPA开源社区qRG ^a
char sCallingAreacode[6]={'\0'};
u'{}3z+HPR#n;a0 //结束原因,默认为空
b4_V,Z8^4?1i0 char cEndReason[1]={'\0'};
//附加类型,默认为空
r({KD)x)p9[m)b,Kv0 char sSuppType[3]={'\0'};
//MIN/IMSI号,默认为空
P0N%{kI0 char sMinImsi[16]={'\0'};LUPA开源社区!p:AM(R2HF)D'V ~$|*T
//电子序列号(ESN),默认为空
!A_:v$o
]0 char sESNIMEI[17]={'\0'};
9NGS&W*`4a@4R0 //临时本地漫游号(TLDN),默认为空
F:t&QI&]0 char sTldn[12]={'\0'};
,z
QS9~1{&r}~ E.iy0 //入中继,默认为空
%A-g5r2W:x;xyfn[S0 char sTrunkIn[9]={'\0'};
4I U_2G7b
Z0 //出中继,默认为空LUPA开源社区9mV#bPk!cl
char sTrunkOut[9]={'\0'};LUPA开源社区D7hN5Z[
A'u
2i4`9q\ ehwHiZ0 //交换机代码,默认为空
@p(\3wfi$h ~jS8r M0 char sMSCId[11]={'\0'};LUPA开源社区"~0?%}K6{*SD+fS(g
//本方初始位置LAC号,默认为空LUPA开源社区k9V5Zu_+]
char sLacA[6]={'\0'};LUPA开源社区P2|{I1{0F;n9]$dq
-i~*P#s_O7r.EX0 //本方初始位置蜂窝(基站)号CELLID,默认为空
o7SR9l+~0 char sCellA[6]={'\0'};
8fr2kD nE0 //对方初始位置LAC号,默认为空LUPA开源社区7C*t)v
ji*R6uj
char sLacB[6]={'\0'};
//对方初始位置蜂窝(基站)号CELLID,默认为空LUPA开源社区W
mSjq5XM.d
char sCellB[6]={'\0'};
hc? g!U}.c%QE0 //双模标志,默认为空LUPA开源社区+e M*hO5r'q^"H*Y
char cGCFlag[1]={'\0'};LUPA开源社区$`"ieI#o&@x
"^8Q7Q$S9v ?H0 //话单属性,默认为00001
Cb8{GU$~+c/N!|0 char sTicketFlag[6]={'0','0','0','0','1','\0'};LUPA开源社区
x%jm9B-NRC%jE"h
0bi:k,lHC8T0 //付费号码,,默认为空LUPA开源社区-Yl X#q(T9w
char sCallingNbr[16]={'\0'};LUPA开源社区Bh3Dw2I Q,miJ I
//边界漫游标志,默认为空LUPA开源社区5^C L cB)ba4G
char cDeltaRoam[1]={'\0'};
//长途类型,,默认为空LUPA开源社区(wcjG5ujs(DB
char sLandType[3]={'\0'};LUPA开源社区7cL'c6g5FP'U
//漫游类型,,默认为空
;mwy)j'cJ*S}0 char sRoamType[3]={'\0'};LUPA开源社区qI7Plc;BO
6bEC?Z.bPfZnf0 //对端城市代码,默认为空LUPA开源社区4\+q0rI3Hl*P:l
char sTermCityCode[4]={'\0'};LUPA开源社区?d
yv5l(Hn
//漫游城市代码,默认为空LUPA开源社区.Cz6N`i*O3aS9y
char sRoamCityCode[4]={'\0'};
//基本费(单位:厘),默认为空
P(D2` G#q3q7o:ta0 char sBaseFee[9]={'\0'};LUPA开源社区,SKl JQX
//长途费(单位:厘),默认为空
eY
l4~
r'\0 char sLandFee[9]={'\0'};
//信息费(单位:厘),对映数据库solar_user_subscrīption_view视图的PACKAGE_SUITE_ID字段LUPA开源社区)EC[\h.K
//通过PACKAGE_SUITE_ID字段取值关联package_suite.xml文件中对映费率
MNo
`"B(Q0 char sInfoFee[9]={'\0'}; LUPA开源社区#Ef\
L3|,l
t
//国际长途费(单位:厘),默认为空
6GULtg8U0 char sPlusFee[9]={'\0'};LUPA开源社区go%e]]$qc|
_m4lmsE(R0 //长途网类型,默认为空
1~)pC/k;CD
X0 char cLandNetType[1]={'\0'};LUPA开源社区MF#r HaB/`JT
//企业码,短信双收为40001LUPA开源社区?"mdq)ij
char sCorpCode[6]={'4','0','0','0','1','\0'};
8o/k*iX+u Z6M }0 LUPA开源社区3p!MJL"t#~,BB
//业务码,短信双收为0002LUPA开源社区
`\Rccs"p,L:n
char sServCode[5]={'0','0','0','2','\0'};LUPA开源社区:JDf(Z0hb~h
DNZ9v(G0i6Y'Y0 //保留,默认为空
wZ$ISQU0\"N0 char sReserve[7]={'\0'};
//填空LUPA开源社区c$Q|UG-S:c
char cNewLine='\n';LUPA开源社区V2| oV$C-D
``1{gB7GZy&{5B0 //记费类型标记LUPA开源社区{,YQ(IS0e
int flag;
-ezb]/q0 //初始化变量
w/@$J5m;S@!\Al0 int i=0;
!B&n)Kv Lh0 //字符串长度变量LUPA开源社区CYl)NS2AA%ZR
int len=0;LUPA开源社区7[&sj;c*C6H$Q9f
CV^:[1_*St
c
N0
!T ]8V!iEW0g0 LUPA开源社区+N s3rX5M;[ ?v
// 变量赋值,用户名:solar,密码:solar,SID:db
M3D$~%@)KJ+R |0 strcpy(user.arr,"solar");
_&uH;X6`.lE }ZC0 user.len=(unsigned short)strlen((char *)user.arr);LUPA开源社区`\
bea
strcpy(pass.arr,"solar");LUPA开源社区}4mFqQ/B5t8KW
pass.len=(unsigned short)strlen((char *)pass.arr);
5M3n4g[b1@*X0 strcpy(tnsname.arr,"db");
I3gdjR{a_hV0 tnsname.len=(unsigned short)strlen((char *)tnsname.arr);
\#|%yzy$D{Av0
.uV5nA oQq0 LUPA开源社区]N6F![dQsL._
LUPA开源社区
X)p;k`-[6q
// 连接数据库LUPA开源社区qTE5_V
EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tnsname;LUPA开源社区 Rg]*U_ VSNI^e#R
'MoK2in0// 定义游标LUPA开源社区:CE*|;Q:I.g r,d5g!S
EXEC SQL declare emp_cursor cursor forLUPA开源社区W&JM'kqjZ
q,At
select mobile,package_suite_id,to_char(sysdate,'yyyymm')||'01000000',mobile from solar.solar_user_subscrīption_view;LUPA开源社区2G$ixwfAk
EXEC SQL open emp_cursor;
8uw ZK$o0 EXEC SQL WHENEVER NOT FOUND DO break;
LUPA开源社区1TSL:Py,wOP_
// 通过游标,将所有记录写入计费文件
p/F0I"aE[0 while(1)
8e`C8AU2e5d%|/V0 {
"]/c,`0o*@&R1VE0 EXEC SQL fetch emp_cursor into :sBillingNbr,:flag,:sStartTime,:sTermNbr;LUPA开源社区%@(^cQC4OI8T+n4I'D
switch(flag){LUPA开源社区3bJ!R q9P4f}y6G?
case 1:sInfoFee[0]='6';sInfoFee[1]='0';sInfoFee[2]='0';sInfoFee[3]='0';sInfoFee[4]='\0';break;LUPA开源社区F(zxA Ngj;MM3c
S
case 2:sInfoFee[0]='3',sInfoFee[1]='0';sInfoFee[2]='0';sInfoFee[3]='0';sInfoFee[4]='0';sInfoFee[5]='\0';break;LUPA开源社区,}2eFI)p%q(w`K
case 3:sInfoFee[0]='6';sInfoFee[1]='0';sInfoFee[2]='0';sInfoFee[3]='0';sInfoFee[4]='0';sInfoFee[5]='\0';break;} LUPA开源社区\2Oh*}K3L
9J/Tz0`M/u$PI0 fputs(sBillingNbr,fp);memset(sBillingNbr,' ',12);fputc('|',fp);LUPA开源社区Y-Js7j`JI
fputs(sCallType,fp);fputc('|',fp);LUPA开源社区 gV]u0T1?sbml
fputs(sHomeAreacode,fp);fputc('|',fp);
s0R^'j"p'B)|6t0 fputs(sStartTime,fp);memset(sStartTime,' ',14);fputc('|',fp);LUPA开源社区-EJuXI
fputs(sTermNbr,fp);memset(sTermNbr,' ',12);fputc('|',fp);
VW
j-a~3X0 fputs(sDuration,fp);fputc('|',fp);LUPA开源社区faf3@;u#Vp x!q
fputs(sThirdPartyNbr,fp);fputc('|',fp);
(i:`'DT4~zP4n0 fputs(sTermAreacode,fp);fputc('|',fp);
yw%xj ~b+`0 fputs(sCallingAreacode,fp);fputc('|',fp);LUPA开源社区P ZBQ4m2k/|lu
fputs(cEndReason,fp);fputc('|',fp);LUPA开源社区-n)xp[ TlvJ^
fputs(sSuppType,fp);fputc('|',fp);LUPA开源社区Uv#xOf#Yz
fputs(sMinImsi,fp);fputc('|',fp);LUPA开源社区6Wi{J,gq;?"qwM
fputs(sESNIMEI,fp);fputc('|',fp);
X
tA!c|3L,cr Q0 fputs(sTldn,fp);fputc('|',fp);LUPA开源社区5F4K$Jl~tphQ
fputs(sTrunkIn,fp);fputc('|',fp);LUPA开源社区y0O.G'i6J x
fputs(sTrunkOut,fp);fputc('|',fp);
#P(t4@l}0\MY0 fputs(sMSCId,fp);fputc('|',fp);
0g%`.K5tK7hP^sB0 fputs(sLacA,fp);fputc('|',fp);LUPA开源社区Co,pZ2O#gq8rS#r
fputs(sCellA,fp);fputc('|',fp);
4H{!~'d3}T(X^RyN0 fputs(sLacB,fp);fputc('|',fp);LUPA开源社区$FF-jA4[#B5B
fputs(sCellB,fp);fputc('|',fp);
3A"U_;yIAj0 fputs(cGCFlag,fp);fputc('|',fp);LUPA开源社区*m(Y/xcC#X
X:?D
fputs(sTicketFlag,fp);fputc('|',fp);
#bMHh_7Y%j8g'D^}0 fputs(sCallingNbr,fp);fputc('|',fp);LUPA开源社区x`_
l/o+g"iRw
fputs(cDeltaRoam,fp);fputc('|',fp);
"|Sk6k
U?wA/m0 fputs(sLandType,fp);fputc('|',fp);LUPA开源社区gfr&b&gGw
fputs(sRoamType,fp);fputc('|',fp);
+P"p)@%P&s({P*w0 fputs(sTermCityCode,fp);fputc('|',fp);
mAVt8}D"H6Y N3X0 fputs(sRoamCityCode,fp);fputc('|',fp);
$rON$\Dy!Y X
Wh
N5z%A0 fputs(sBaseFee,fp);fputc('|',fp);
8cV]%_ I9H/vbr$B0 fputs(sLandFee,fp);fputc('|',fp);LUPA开源社区
m*R?)ekA
fputs(sInfoFee,fp);memset(sInfoFee,' ',4);fputc('|',fp);LUPA开源社区WTJALR
fputs(sPlusFee,fp);fputc('|',fp);LUPA开源社区 MuH,`V"t:tk
fputs(cLandNetType,fp);fputc('|',fp);
rm
a ?Q2n%f8p,^"c0 fputs(sCorpCode,fp);fputc('|',fp);LUPA开源社区wb'V N.s.HD
fputs(sServCode,fp);fputc('|',fp);LUPA开源社区 ?9W|VjKw
H
fputs(sReserve,fp);fputc('|',fp);LUPA开源社区k y
]+W |0d3_
fputc(cNewLine,fp);LUPA开源社区8m)M]NB/O sMu
}LUPA开源社区k!}
_3i"~"o7k
fclose(fp);LUPA开源社区z"W|1{2TY
EXEC SQL close emp_cursor;
R@5ZU-](p{{0 EXEC SQL commit work release;LUPA开源社区Kzz9Q6|0E
return 0;LUPA开源社区
k!]!th R#X1_
}LUPA开源社区(`Q8Z#p3D)C
XY_(v;N'T$g0***************************************************************LUPA开源社区/Pv&Nw T;~T(t
LUPA开源社区"Yy y PT4c***************************************************************
3ZL(F)T{[0LUPA开源社区R1P*|ds
//程序:filename.c
t-qgn&spJ0//生成话单的文件名
0Y-MhCQ+c0//Writer:Super Maro
T{0sr8cS0//mail:newhitler@163.comLUPA开源社区$D(N]RJLN4z
# include <stdio.h>LUPA开源社区1}0aGqt`e0uD
LUPA开源社区)Q%FmITFl# include <string.h>LUPA开源社区.mvN^;Fu Z-nS
LUPA开源社区x7p9m{&S!Ka3z#b+K$~# include <time.h>
m@ L:y5z nO]B0x&S-?(kx0# include <stdlib.h>LUPA开源社区7rpR#DW,br!g2Y
LUPA开源社区xcg$M4pl6Kb"L-CLUPA开源社区J;U;D-p]r l
j$bU MmhB hr6Qk0void Genfilename (char filename[30])LUPA开源社区3E@e-bw^I
X*}6Z#nc EA%g0{
&W2x(g;W3hX4GH08\QV7d&q8TM0w0 FILE *fp;LUPA开源社区7\2lS5m/?
LUPA开源社区6Xc,Rg8O6csge0m!^!O L3_*d&yH0 LUPA开源社区3e1LU$N^-g%i
//打开文件cdr.log,并赋值给文件指针fpLUPA开源社区5`)p%POZ(N
if((fp=fopen("/var/log/cdr.log","at+"))==NULL)LUPA开源社区J;j;\3h5DIkh!T
{LUPA开源社区-U$J-~*|2Nu3\;T#U}
LUPA开源社区!l R8^5Uyr^2lprintf("File open failed!\n");LUPA开源社区O#C6`GKU!m?Aw[{
LUPA开源社区o@B*Z { iooexit(EXIT_FAILURE);
f J!h(S g%W0%xm f'v;i3[s0 }
@-a%rw-oM#o01t3v\!jH1E'Ue0 LUPA开源社区4[ mi;l"y+taf(N
LUPA开源社区FC/E@.u}
}6T"IQ-@F`A0 //定义timep为结构类型timep,将本地日期时间赋值为p
]XPTe0 time_t timep;LUPA开源社区IEf;~:}}r
struct tm *p;
g@}'ci0^.I){E O0 LUPA开源社区k y;i$J3A&?'kk[time(&timep);LUPA开源社区5ZC*^D5epf
U%Ui3M;f*iV1I0 p=localtime(&timep);
j#yC9vW]Pz0 LUPA开源社区"u0o2u ugNh] } J
{)b2WZ9Y{aELe0 //定义月份数组,用于生成文件名LUPA开源社区c'u,u#n'rM3O$i
)GN0|0h9O$nN/B0 char m_buf[3];
er3iZWu8lh0 LUPA开源社区%G]WsM Gk#v//定义年数组,用于生成文件名LUPA开源社区#t\/WFp Z#G^
LUPA开源社区~x?rKchar y_buf[3];LUPA开源社区~iKAK
n.L,Jj:N5U3u'VW0 //定义日期数组,用于生成文件名
)n]1o0]0A5GaTTVj b&J0 LUPA开源社区yi v'A W)qp)F+@char d_buf[3];
L*|+?^5\,]0 LUPA开源社区%t0Fy oCF//定义月/日/年的格式数组,用于标注日志的日期字段