📄 acc_fee.c
字号:
#include <stdlib.h>
#include <string.h>
#include <graphics.h>
#include <bio.inc>
#include <menu.inc>
#include <key.inc>
#include "feedef.h"
/* function :
* called by :
* date : 1993.12.11
*/
UC inq_acc_fee(UC isacc)
{
UI key;
UI position = 0;
FILE *fp;
ACC_STRUCT acc;
TABLE_STRUCT accfee_tbl = { 0, 97, 40, 18, 16, 7,
{103, 65, 110, 110, 110, 66, 68},
GREEN
};
fp = open_acc_file(isacc);
if(fp == NULL)
return(FALSE);
clr_DialWin(2);
disp_accfee_head(isacc);
draw_table(&accfee_tbl);
message_disp(8,"Enter 继续 Esc 终止"); /* press any key */
while(fread(&acc, sizeof(ACC_STRUCT), 1, fp) == 1)
{
disp_a_accfee(&acc, position, isacc);
position++;
if( (position >= 16) && (!EndofAccFile(fp)) )
{
while(1)
{
key = get_key1();
if(key == ESC)
{
fclose(fp);
recover_screen(2);
message_end();
return(FALSE);
}
else if(key == ENTER)
{
brush_tbl(10, 16, 7);
position = 0;
break;
}
}
}
}
fclose(fp);
while(1)
{
key = get_key1();
if(key == ESC)
{
recover_screen(2);
message_end();
return(FALSE);
}
else if(key == ENTER)
break;
}
recover_screen(2);
message_end();
return(TRUE);
}
/* function :
* called by :
* date : 1993.12.11
*/
UC prn_acc_fee(UC isacc)
{
UI i, num;
UC flag;
FILE *fp;
ACC_STRUCT acc;
double l_f = 0, d_f = 0, i_f = 0, a_f = 0, total_f = 0;
UL l_c = 0, d_c = 0, i_c = 0;
flag = check_prn();
if(flag == FALSE)
{
return(FALSE);
}
fp = open_acc_file(isacc);
if(fp == NULL)
return(FALSE);
message_disp(8,"正在打印,请稍候..."); /* printing */
if(print_accrpt_head(isacc) == FALSE)
{
message_end();
return(FALSE);
}
num = 0;
while(fread(&acc, sizeof(ACC_STRUCT), 1, fp) == 1)
{
num ++ ;
if(print_accrpt_detail(&acc, num, isacc) == FALSE)
{
fclose(fp);
message_end();
return(FALSE);
}
l_c += acc.local_count;
d_c += acc.nation_count;
i_c += acc.intern_count;
l_f += (double)(acc.local_charge)/100;
d_f += (double)(acc.nation_charge)/100;
i_f += (double)(acc.intern_charge)/100;
for(i=0; i<5; i++)
a_f += (double)(acc.addfee[i])/100;
total_f += (double)(acc.local_charge)/100+\
((double)(acc.nation_charge)+(double)(acc.intern_charge))/100+\
(double)(acc.addfee[0])/100+\
(double)(acc.addfee[1])/100+\
(double)(acc.addfee[2])/100+\
(double)(acc.addfee[3])/100+\
(double)(acc.addfee[4])/100;
}
fclose(fp);
if(prnf("总 计: %4u", l_c) == FALSE)
{
message_end();
return(FALSE);
}
if(prnf(" %8.2f %4u", l_f, d_c) == FALSE)
{
message_end();
return(FALSE);
}
if(prnf(" %8.2f %4u",d_f,i_c) == FALSE)
{
message_end();
return(FALSE);
}
if(prnf(" %8.2f %8.2f %8.2f\n", i_f, a_f, total_f) == FALSE)
{
message_end();
return(FALSE);
}
if(print_accrpt_tail(isacc) == FALSE)
{
message_end();
return(FALSE);
}
message_end();
return(TRUE);
}
/*
* date : 1993.10.5
*/
void disp_accfee_head(UC isacc)
{
if(isacc == FEE_ACC || isacc == HFEE_ACC)
outf(218, 75, 7, 0, "已 结 算 话 费 报 告");
else if(isacc == BAN_ACC || isacc == HBAN_ACC)
outf(218, 75, 7, 0, "班 电 话 营 业 报 告");
else if(isacc == DAY_ACC || isacc == HDAY_ACC)
outf(218, 75, 7, 0, "日 电 话 营 业 报 告");
else if(isacc == MON_ACC || isacc == HMON_ACC)
outf(218, 75, 7, 0, "月 电 话 营 业 报 告");
else if(isacc == YEAR_ACC || isacc == HYEAR_ACC)
outf(218, 75, 7, 0, "年 电 话 营 业 报 告");
outf(189, 102, 7,0, "市内电话");
outf(301, 102, 7,0, "国内长话");
outf(413, 102, 7,0, "国际长话");
outf(512, 102, 7,0, "月租及");
outf(11, 120, 7,0, "流 水 号");
if(isacc == FEE_ACC || isacc == HFEE_ACC)
outf(113, 120, 7, 0, "分 机");
else if(isacc == BAN_ACC || isacc == HBAN_ACC)
outf(113, 120, 7, 0, "班 次");
else if(isacc == DAY_ACC || isacc == HDAY_ACC)
outf(113, 120, 7, 0, "日 期");
else if(isacc == MON_ACC || isacc == HMON_ACC)
outf(113, 120, 7, 0, "月 份");
else if(isacc == YEAR_ACC || isacc == YEAR_ACC)
outf(113, 120, 7, 0, "年 份");
outf(173, 120, 7,0, "次数");
outf(241, 120, 7,0, "话费");
outf(285, 120, 7,0, "次数");
outf(353, 120, 7,0, "话费");
outf(395, 120, 7,0, "次数");
outf(465, 120, 7,0, "话费");
outf(504, 120, 7,0, "附加费等");
outf(574, 120, 7,0, "费用合计");
return;
}
/* function :
* called by :
* input : pos -- display position in the table
* num -- sequence number
* date : 1993.10.5
*/
void disp_a_accfee(ACC_STRUCT *acc, UC pos, UC isacc)
{
int j;
UI x, y;
double total_f;
UC serial_no[13];
UNIT_STRUCT cur_unit;
get_s_no(acc, serial_no);
total_f = (double)(acc->local_charge)/100+\
((double)(acc->nation_charge)+(double)(acc->intern_charge))/100+\
(double)(acc->addfee[0])/100+\
(double)(acc->addfee[1])/100+\
(double)(acc->addfee[2])/100+\
(double)(acc->addfee[3])/100+\
(double)(acc->addfee[4])/100;
cur_unit.unit_x = pos;
for(j=0;j<10;j++)
{
cur_unit.unit_y = j;
get_certain(&cur_unit);
x = cur_unit.dot_sx+4;
y = cur_unit.dot_sy+1;
switch(j)
{
case 0: /* sequence number */
outf(x,y,7,0,"%s",serial_no);
break;
case 1: /* sequence number */
if(isacc == FEE_ACC || isacc == HFEE_ACC)
outf(x-4,y,7,0,"%7lu",acc->phone_no);
else if(isacc == BAN_ACC || isacc == HBAN_ACC)
outf(x-4,y,7,0,"%4u",acc->seral_no.hour/8 + 1);
else if(isacc == DAY_ACC || isacc == HDAY_ACC)
outf(x-4,y,7,0,"%4u",acc->seral_no.day);
else if(isacc == MON_ACC || isacc == HMON_ACC)
outf(x-4,y,7,0,"%4u",acc->seral_no.month);
else if(isacc == YEAR_ACC || isacc == YEAR_ACC)
outf(x-4,y,7,0,"%5u",acc->seral_no.year+1900);
break;
case 2:
outf(x,y,7,0,"%4u",acc->local_count);
outf(x+32,y,7,0,"%9.2f", (double)(acc->local_charge)/100);
break;
case 3:
outf(x,y,7,0,"%4u",acc->nation_count);
outf(x+32,y,7,0,"%9.2f", (double)(acc->nation_charge)/100);
break;
case 4:
outf(x,y,7,0,"%4u",acc->intern_count);
outf(x+32,y,7,0,"%9.2f", (double)(acc->intern_charge)/100);
break;
case 5:
outf(x-4,y,7,0,"%8.2f",\
(double)(acc->addfee[0])/100+\
(double)(acc->addfee[1])/100+\
(double)(acc->addfee[2])/100+\
(double)(acc->addfee[3])/100+\
(double)(acc->addfee[4])/100);
break;
case 6:
outf(x-2,y,7,0,"%8.2f",total_f);
break;
} /* end of "switch(j)" */
} /* end of "for(j=0;j<8;j++)" */
return;
}
UC EndofAccFile(FILE *fp)
{
UC flag;
fpos_t filepos;
ACC_STRUCT temp;
fgetpos(fp, &filepos);
if(fread(&temp, sizeof(ACC_STRUCT), 1, fp) != 1) /* End of File*/
flag = TRUE;
else
flag = FALSE;
fsetpos(fp, &filepos);
return(flag);
}
void get_s_no(ACC_STRUCT *acc, UC *serial_no)
{
UC buf[3];
serial_no[0]='\0';
itoa( (int)acc->seral_no.year, buf, 10);
if(buf[1]==NULL)
{
buf[1] = buf[0];
buf[0] = 0x30;
buf[2] = '\0';
}
strcat(serial_no, buf);
itoa( (int)acc->seral_no.month, buf, 10);
if(buf[1]==NULL)
{
buf[1] = buf[0];
buf[0] = 0x30;
buf[2] = '\0';
}
strcat(serial_no, buf);
itoa( (int)acc->seral_no.day, buf, 10);
if(buf[1]==NULL)
{
buf[1] = buf[0];
buf[0] = 0x30;
buf[2] = '\0';
}
strcat(serial_no, buf);
itoa( (int)acc->seral_no.hour, buf, 10);
if(buf[1]==NULL)
{
buf[1] = buf[0];
buf[0] = 0x30;
buf[2] = '\0';
}
strcat(serial_no, buf);
itoa( (int)acc->seral_no.min, buf, 10);
if(buf[1]==NULL)
{
buf[1] = buf[0];
buf[0] = 0x30;
buf[2] = '\0';
}
strcat(serial_no, buf);
itoa( (int)acc->seral_no.sec, buf, 10);
if(buf[1]==NULL)
{
buf[1] = buf[0];
buf[0] = 0x30;
buf[2] = '\0';
}
strcat(serial_no, buf);
return;
}
/* function :
* called by :
* input : pos -- display position in the table
* num -- sequence number
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -