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

📄 mon_add.c

📁 BC3.1编译,小交换机计费系统.使用Dos做出如此好的界面,少有.
💻 C
📖 第 1 页 / 共 2 页
字号:
	    {
		move_finger(1,1);
		move_finger(2,4);
	     }
	    break;
	default:
	    sound_alarm();
	    break;
    }/* END OF SWITCH */

    Newlen = phone_tbl_len();

    message_end();
    return;
}

/* function  : save the fee table
 * called by : input_fee_tbl()
 * date      : 1993.9.23
 */
void save_fee_tbl(void)
{
    FILE *fp;

    message_disp(8,"正在存盘,请稍候...");      /* saving, please wait... */
    fp = fopen(ChargeDataFile[PHONE_CASH], "wb");
    fwrite(Phone_top, sizeof(PHONE_STRUCT), Newlen, fp);
    fclose(fp);
    message_end();
    return;
}

/* function  : locate according to phone_no
 * called by : input_fee_data()
 * date      : 1993.9.23
 * note      : using the binary-search method
 */
void loc_fee_tbl(void)
{
    PHONE_STRUCT *tbl;
    UC locate_no[7] = "";
    UC result;
    UC *msg="定位分机号";       /* DING WEI hua ji HAO */
    UC *warn="没有该分机号码!";    /* WU CI QU HAO!   */

    message_disp(8," 输入分机号   Enter 确认");    /*phone no.*/
    pop_back(250, 295, 420, 335, 7);
    draw_back(345, 304, 410, 326, 11);
    outf(260, 308, 7, 0, "%s", msg);
    /***** LOCATE ACCODING TO THE PAGE No. USERS INPUT. *****/
    set_get_color(11, 0, 12, 11, 0);
    result = get_no(350, 306, 18, 24, 0, 6, locate_no, 0x00);
    message_end();

    rid_pop();

    if(!result)      /* IF USER TYPE "Esc", RETRUN. */
	return;

    /***** Locate the position in the fee table according
	       to the phone number user typed. *****/
    tbl = binary_search(locate_no);
    if(tbl == NULL)     /* can not find the phone_number, then warn */
    {
        warn_mesg("", warn);
	return;
    }

    Count = ((UI)(tbl-Phone_top)/16)*16+1;
    hide_finger();
    brush_tbl(7, 16, 7);
    disp_fee_tbl(&Phone_top[Count-1], Count);
    locate_finger(tbl-Phone_top-Count+1, 2);       /* LOCATTED */

    return;
}


/*             Function:       Change a page towards up.
	       Calls:          clr_fee_tbl,disp_fee_tbl
	       Called by:      input_fee_data
	       Input:          None
	       Output:         None
	       Return:         None
	       Date  :         1993.9.23
 */
void pgup_fee_tbl(void)
{
    /***** IF THE FIRST PAGE, RETURN. *****/
    if((Count-16) < 0)
    {
	sound_bell();
	return;
    }

    /***** DISPLAY THE LAST PAGE. *****/
    hide_finger();
    brush_tbl(7, 16, 7);
    Count = Count-16;
    disp_fee_tbl(&Phone_top[Count-1], Count);
    locate_finger(15,2);

    return;
}

/*             Function:       Change a page towards down.
	       Calls:          clr_fee_tbl,disp_fee_tbl
	       Called by:      input_data
	       Input:          None
	       Output:         None
	       Return:         None
	       Date  :         1993.9.23
 */
void pgdn_fee_tbl(void)
{
    UC *title = "注意:";
    UC *warn  = "最多只能有这么多分机号码!";

    /***** IF MORE THAN THE MAX LENGTH, WARN AND RETURN. *****/
    if( (Count+16) > MAX_USERS)
    {
        warn_mesg(title, warn);
	return;
    }

    /***** IF END OF TABLE, RETURN. *****/
    if((Count+16) > Newlen)
    {
	sound_bell();
	return;
    }

    /***** DISPLAY THE NEXT PAGE. *****/
    Count = Count+16;
    hide_finger();
    brush_tbl(7, 16, 7);
    disp_fee_tbl(&Phone_top[Count-1], Count);
    locate_finger(0,2);

    return;
}

/*             Function:       Locate according to the page No..
	       Calls:          clr_fee_tbl,disp_fee_tbl
	       Called by:      input_fee_data()
	       Input:          None
	       Output:         None
	       Return:         None
	       Date  :         1993.9.23
 */
void loc_fee_page(void)
{
    UL locate_no=500;
    UI page_no;
    UC result;
    UC *msg="定位页号";
    UC *warn="没有该页号!";

    /***** DISPLAY THE PAGE LOCATE WINDOW. *****/
    message_disp(8," 输入页号   Enter 确认");      /*page no.*/
    pop_back(250, 295, 400, 335, 7);
    draw_back(330, 304, 390, 326, 11);
    outf(260, 308, 7, 0, "%s", msg);

    /***** LOCATE ACCODING TO THE PAGE No. USERS INPUT. *****/
    set_get_color(11, 0, 12, 11, 0);
    result=get_dec(335, 306, 18, 24, 0, 3, &locate_no, 0x00);
    message_end();

    rid_pop();

    if(!result)   /* "Esc" */
	return;

    if(!(Newlen%16) && Newlen)         /* calculate the total pages */
	 page_no = Newlen/16;
    else
	 page_no = (UI)(Newlen/16)+1;

    if(!locate_no || locate_no > page_no)
    {
         warn_mesg("", warn);
	 return;
    }

    /***** DISPLAY THE PAGE. *****/
    hide_finger();
    brush_tbl(7, 16, 7);
    Count = (UI)(locate_no-1)*16+1;
    disp_fee_tbl(&Phone_top[Count-1], Count);
    locate_finger(0,2);       /* LOCATTED */

    return;
}

/* function  :    Locate the phone number using the binary search method
 * calls     :    None
 * called by :    loc_fee_tbl(), search_area_no()
 * input     :    input_no -- telephone number
 * return    :    The position of location. If not find, return NULL
 * note      :    using binary search method
 * date      :    1993.9.23
 */
PHONE_STRUCT *binary_search(UC *input_no)
{
    PHONE_STRUCT *tbl, *tbl_top;
    UI tbllen, top, bottom, middle;
    int result;

    tbl_top = Phone_top;
    tbl = Phone_top;
    if(Newlen == 0)
	tbllen = phone_tbl_len();
    else
	tbllen = Newlen;

    top = 0;
    bottom = tbllen-1;

    /***** Compare with the first item. *****/
    if(strcmp(tbl->phone_no, input_no) < 0 &&\
       strcmp((tbl+1)->phone_no, input_no) > 0)
	return(NULL);

    if(strcmp(tbl->phone_no,input_no) > 0)
	return(NULL);

    /***** Compare with the last item. *****/
    if(strcmp(tbl[bottom].phone_no,input_no) < 0)
	return(NULL);

    /***** Compare and locate in the fee table. *****/
    while(top <= bottom)
    {
	middle = (UI) (top+bottom)/2;
	tbl = &tbl_top[middle];
	result = strcmp(tbl->phone_no, input_no);

	if(!result)          /* find! */
	    return(tbl);

	else if(result < 0)       /* tbl->phone_no < input_no */
	    top = middle+1;
	else if(result > 0)       /* tbl->phone_no > input_no */
	    bottom = middle-1;
    }

    return(NULL);                 /* not find! */
}


void copy_last_afee(void)
{
    UC  i;
    UI  seq_no;
    UNIT_STRUCT cur_unit;

    get_current(&cur_unit);
    seq_no = Count+cur_unit.unit_x;    /* sequence no of item being edited */
    if(seq_no==1 || seq_no>MAX_USERS || \
       !strlen(Phone_top[seq_no-1].phone_no)  )
	return;

    Phone_top[seq_no-1].month_lease = Phone_top[seq_no-2].month_lease;
    for(i=0; i<4; i++)
	Phone_top[seq_no-1].addfee[i]  = Phone_top[seq_no-2].addfee[i];

    hide_finger();

    disp_one_afee(cur_unit.unit_x);
    if(seq_no < MAX_USERS)
    {
	move_finger(1,1);
	move_finger(2,cur_unit.unit_y-1);
    }
    echo_finger();

    Newlen = phone_tbl_len();
    return;
}

/* function  : display one row of the rate table
 * date      : 1993.11.19
 */
void disp_one_afee(UC row)
{
    UI j;
    UI x, y;
    UNIT_STRUCT  cer_unit;
    PHONE_STRUCT *tbl;

    tbl = Phone_top+Count+row-1;
    cer_unit.unit_x = row;

    for(j = 1; j < 7; j++)
    {
	cer_unit.unit_y = j;
	get_certain(&cer_unit);
	x = cer_unit.dot_sx;
	y = cer_unit.dot_sy+1;

	switch(j)
	{
	    case 1:    /* telephone no */
		 if(!strcmp(tbl->phone_no,""))
		     break;
		 outf(x+10,y,BK_CLR,CHR_CLR,"%-s",tbl->phone_no);
		 break;

	    case 2:    /* month lease */
		 outf(x+10,y,BK_CLR,CHR_CLR,"%6.2f",((double)tbl->month_lease)/100);
		 break;
	    case 3:    /* new service fee */
		 outf(x+2,y,BK_CLR,CHR_CLR,"%7.2f",((double)tbl->addfee[0])/100);
		 break;
	    case 4:    /* manly long call fee */
		 outf(x+2,y,BK_CLR,CHR_CLR,"%7.2f",((double)tbl->addfee[1])/100);
		 break;
	    case 5:    /* reparing fee */
		 outf(x+2,y,BK_CLR,CHR_CLR,"%7.2f",((double)tbl->addfee[2])/100);
		 break;
	    case 6:    /* other fee    */
		 outf(x+2,y,BK_CLR,CHR_CLR,"%7.2f",((double)tbl->addfee[3])/100);
		 break;
	}     /* END SWITCH */
    }         /* END FOR2   */
    return;
}


⌨️ 快捷键说明

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