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

📄 acc_fee.c

📁 BC3.1编译,小交换机计费系统.使用Dos做出如此好的界面,少有.
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -