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

📄 edt_rate.c

📁 BC3.1编译,小交换机计费系统.使用Dos做出如此好的界面,少有.
💻 C
📖 第 1 页 / 共 3 页
字号:
		 else
		     sound_bell();
		 break;

	    case RIGHT:
		 if(Tbltop[Count+cur_unit.unit_x-1].length)
		     move_finger(3,1);
		 else
		     sound_bell();
		 break;

	    case PAGEUP:
		 pgup_tbl();
		 break;

	    case PAGEDOWN:
		 pgdn_tbl();
		 break;

	    case F2:    /* SAVE THE RATE TABLE */
		 save_tbl(Flag,REFRESH);
		 break;

	    case F5:    /* DELETE */
		 delet_item();
		 break;

	    case F6:   /* AREA No. LOCATE */
		 loc_tbl();
		 break;

	    case F7:    /* PAGE No. LOCATE */
		 loc_page();
		 break;

	    case F9:
		 copy_last_item();
		 break;

	    case ENTER:
		 mode1 = 0x0;
		 modi_tbl(mode1);    /* MODIFY THE RATE TABLE */
		 break;

	    default:
		 sound_bell();
		 break;
	}/* END OF SWITCH */
    }/* END OF WHILE */
}

/*-----------------------------------------------------
  ------------------- save_tbl() --------------------
	       Function:       Save the rate table.
	       Calls:          None
	       Called by:      input_data()
	       Input:          mode -- IDD,DDD,LDD
			       status -- 0: not refresh
					 1: refresh
	       Output:         None
	       Return:         None
  ---------------------------------------------------*/
void save_tbl(UC mode,UC status)
{
    int  i;
    FILE *rate_file;
    UC   tbl_name[35];
    RATE_STRUCT newitem;
    RATE_STRUCT huge *tbl;

    Tbllen = tbl_len();

    message_disp(8,"正在存盘,请稍候...");      /* saving, please wait... */

    /***** RESORT THE RATE TABLE *****/
    while(Oldend < Tbllen)
    {
	 newitem = Tbltop[Oldend];
	 sort_tbl(&newitem);
	 Oldend += 1;
    }

    /***** SET TRUNK MARK IN THE TABLE *****/
    set_trunk();

    /***** SAVE THE RATE TABLE *****/
    if(mode == IDD)
	strcpy(tbl_name, IDDRateFileName);
    else  if(mode == DDD)
	strcpy(tbl_name, DDDRateFileName);
    else  if(mode == LDD)
	strcpy(tbl_name, LDDRateFileName);

    tbl = Tbltop;
    rate_file = fopen(tbl_name, "wb");
    for(i=0;i<Tbllen;i++)
    {
	fwrite(tbl, sizeof(RATE_STRUCT), 1, rate_file);
	tbl++;
    }
    fclose(rate_file);

    message_end();

    if(status == REFRESH)
    {
	hide_finger();
	brush_tbl(ITEMS, 16, 7);
	disp_tbl(&Tbltop[Count-1], Count);   /* REDISPLAY */
	echo_finger();
    }

    return;
}

/*-------------------------------------------------------------
  ------------------------ sort_tbl() -----------------------
                       Function:       Increase and resort the rate table.
		       Calls:          maxnum
                       Called by:      input_data()
                       Input:          newitem -- a new item of rate table
		       Output:         None
		       Return:         None
  -------------------------------------------------------------*/
void sort_tbl(RATE_STRUCT huge *newitem)
{
    int         result;
    UI          comp_len;
    UI          num;
    RATE_STRUCT huge *tbl, huge *tblptr;

    if(!memicmp(newitem->area_no, "", newitem->length))    /* if it is null */
        return;

    tbl = Tbltop;
    num = 0;

    /**** If the rate table is empty, the new item is
                  the first one in the table. ****/
    if(!Oldend)
    {
	tbl[0] = *newitem;
	return;
    }

    /**** The new item is inserted in middle of the table. ****/
    do
    {
         comp_len = maxnum(tbl->length, newitem->length);
	 result = memicmp(tbl->area_no, newitem->area_no, comp_len);

         if(!result)    /* result=0 : the two strings are equal */
	     return;

	 if(result > 0)       /* INSERT HERE */
	 {
	      tblptr = &Tbltop[Oldend];
	      while(tblptr > tbl)
              {
                 *tblptr = *(tblptr-1);
                 tblptr--;
	      }

	      *tblptr = *newitem;
              return;
         }

	 tbl++;
	 num++;
    }while(tbl->length && num<Max_len);

    /**** The new item is the last one in the rate table. ****/
    *tbl = *newitem;
}

/*-------------------------------------------------------------
 ------------------------ set_trunk() -----------------------
               Function:       Set trunk mark in the rate table.
               Calls:      maxnum
               Called by:      input_data()
               Input:          None
	       Output:         None
	       Return:         None
 ------------------------------------------------------------*/
void set_trunk(void)
{
    RATE_STRUCT huge *tbl, huge *l_trunk;
    int result;
    UI  count,num;

    Tbllen = tbl_len();
    tbl = Tbltop;
    num = 0;
    tbl->trunk_mark = 1;      /* THE FIRST ITEM IN TABLE IS A TRUNK. */
    l_trunk = tbl;            /* THE LAST TRUNK POSITION */
    tbl++;
    num++;

    while(tbl->length && num<Max_len)       /* NOT END OF RATE TABLE */
    {
         count = l_trunk->length;
	 result = memicmp(tbl->area_no, l_trunk->area_no, count);

	 if(result)
         {
             tbl->trunk_mark = 1;    /* SET TRUNK MARK */
	     l_trunk = tbl;
         }
         else
	     tbl->trunk_mark = 0;     /* NOT TRUNK */

	 tbl++;
	 num++;
    }/* END OF WHILE */
}

/*------------------------------------------------------------
  ---------------------- loc_tbl() --------------------------
	       Function:       Locate according to the area No..
	       Calls:      maxnum,clr_tbl,disp_tbl
	       Called by:      input_data
	       Input:          None
	       Output:         None
	       Return:         None
  -----------------------------------------------------------*/
void loc_tbl(void)
{
    int  res;
    RATE_STRUCT huge *tbl;
    UC locate_no[6] = "";
    UC result;
    UI comp_len;
    UC *msg="定位区号";       /* DING WEI QU HAO */
    UC *warn="没有该区号!";    /* WU CI QU HAO!   */

    message_disp(8," 输入区号   Enter 确认");      /*district 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_no(335, 306, 18, 30, 0, 6, locate_no, 0x00);

    rid_pop();
    message_end();

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

    /***** Locate the position in the rate table according
	       to the area number user typeed. *****/
    tbl = blocate_area(locate_no);

    do
    {
	 comp_len = maxnum(tbl->length, result);
	 res = memicmp(tbl->area_no, locate_no, comp_len);

         if(!res)       /* find! */
         {
	      Count = ((UI)(tbl-Tbltop)/16)*16+1;
	      hide_finger();
	      brush_tbl(ITEMS, 16, 7);
              disp_tbl(&Tbltop[Count-1], Count);
              locate_finger(tbl-Tbltop-Count+1, 1);       /* LOCATTED */
              return;
         }

	 if(tbl > Tbltop)
	     tbl--;
    }while(!tbl->trunk_mark);

    comp_len = maxnum(tbl->length, result);
    res = memicmp(tbl->area_no, locate_no, comp_len);

    if(!res)
    {
         Count = ((UI)(tbl-Tbltop)/16)*16+1;
         hide_finger();
	 brush_tbl(ITEMS, 16, 7);
	 disp_tbl(&Tbltop[Count-1], Count);
	 locate_finger(tbl-Tbltop-Count+1, 1);       /* LOCATTED */
	 return;
    }

    /***** Cann't locate, warning. *****/
      warn_mesg("", warn);
}

/*------------------------------------------------------
  ------------------- modi_tbl() ---------------------
	       Function:       Modify the rate table.
	       Calls:          tbl_len,maxnum
	       Called by:      input_data()
	       Input:          mode -- mode of inputting data
	       Output:         None
	       Return:         None
  ----------------------------------------------------*/
void modi_tbl(UC mode)
{
    int result;
    UC  res;
    UI  num;
    UI  xs, ys, xe, ye;
    UI  comp_len;
    UI  back_in;
    UL  rate_value = 0, rate_time = 60;
    UC  areano_buf[9] = "";
    UC  name_buf[9] = "";
    UC  *title = "注意:";
    UC  *warn = "该区号已有, 请重新输入!";
    RATE_STRUCT huge *tbl;
    UNIT_STRUCT cur_unit;

    hide_finger();

    get_current(&cur_unit);
    xs = cur_unit.dot_sx;
    ys = cur_unit.dot_sy;

    switch(cur_unit.unit_y)
    {
	case 1:    /* AREA NUMBER */
	    if(Count+cur_unit.unit_x <= Oldend)
	    {
		sound_bell();          /* add only, do not change */
		echo_finger();
		return;
	    }

	    do
	    {
		back_in = 1;
		strcpy(areano_buf,"");
		message_disp(8," 输入数字   Enter 确认");      /*number*/
		set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
		res = get_no(xs, ys, 18, 60, back_in, 8, areano_buf, mode);
		message_end();
		if(!res)
		    break;

		tbl = Tbltop;
		num = 0;
		do
		{
		    comp_len = maxnum(res, tbl->length);
		    result = memicmp(tbl->area_no, areano_buf, comp_len);

		    /*** THE AREA No. INPUTTED ALREADY EXIST, REINPUT ***/
		    /* Tbltop[Count+cur_unit.unit_x-1] is the item being
		     * editted, so not judge it
		     */
		    if(!result && (tbl!=&Tbltop[Count+cur_unit.unit_x-1]))
		    {
			UNIT_STRUCT   cur;
		        warn_mesg(title, warn);

			/* clear the current item */
			get_current(&cur);
			xs = cur.dot_sx;
			ys = cur.dot_sy;
			xe = cur.dot_ex;
			ye = cur.dot_ey;
			setfillstyle(1, BK_CLR);
			bar(xs, ys, xe, ye);

			break;
		    }

		    tbl++;
		    num++;
		}while(tbl->length && num<Max_len);
	    }while(tbl->length && num<Max_len);

	    /***** RECORD THE AREA No. AND LENGTH INPUTTED. *****/
	    if(res)
	    {
		strcpy(Tbltop[Count+cur_unit.unit_x-1].area_no, areano_buf);
		Tbltop[Count+cur_unit.unit_x-1].length = res;
		move_finger(3,1);
	    }
	    else
		echo_finger();
	    break;

	case 2:    /* RECORD AREA NAME INPUTTED */
	    strcpy(name_buf, Tbltop[Count+cur_unit.unit_x-1].area_name);

	    message_disp(8," 输入汉字   Enter 确认");      /*chinese char*/
	    set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
	    result = get_hz_str(xs, ys, 18, 80, 2, 4, name_buf);
	    message_end();

	    if(result)
		strcpy(Tbltop[Count+cur_unit.unit_x-1].area_name, name_buf);

	    move_finger(3,1);
	    break;

	case 3:    /* first_RATE */
	    message_disp(8," 输入数字   Enter 确认");      /*number*/
	    set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
	    result = get_money(xs, ys, 18, 59, 2, 3, &rate_value, mode);

	    message_end();
	    /***** IF NOT "Esc", RECORD THE RATE INPUTTED. *****/
	    if(result)
		Tbltop[Count+cur_unit.unit_x-1].first_rate = (UI)rate_value;

	    move_finger(3,1);
	    break;

	case 4:    /* first_time */
	    message_disp(8," 输入数字   Enter 确认");      /*number*/
	    set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
	    result = get_dec(xs, ys, 18, 45, 12, 3, &rate_time, mode);
	    message_end();

	    /***** IF NOT "Esc", RECORD THE RATE INPUTTED. *****/
	    if(result)
		Tbltop[Count+cur_unit.unit_x-1].first_time = (UI)rate_time;

	    move_finger(3,1);
	    break;

	case 5:    /* normal_RATE */
	    message_disp(8," 输入数字   Enter 确认");      /*number*/
	    set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
	    result = get_money(xs, ys, 18, 59, 2, 3, &rate_value, mode);
	    message_end();
	    /***** IF NOT "Esc", RECORD THE RATE INPUTTED. *****/
	    if(result)
		Tbltop[Count+cur_unit.unit_x-1].formal_rate = (UI)rate_value;

	    move_finger(3,1);
	    break;

	case 6:    /* normal_time */
	    message_disp(8," 输入数字   Enter 确认");      /*number*/
	    set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
	    result = get_dec(xs, ys, 18, 45, 12, 3, &rate_time, mode);
	    message_end();
	    /***** IF NOT "Esc", RECORD THE RATE INPUTTED. *****/
	    if(result)
		Tbltop[Count+cur_unit.unit_x-1].formal_time = (UI)rate_time;

	    move_finger(3,1);
	    break;
	case 7:    /* add fee */
	    message_disp(8," 输入数字   Enter 确认");      /*number*/
	    set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
	    result = get_money(xs, ys, 18, 59, 2, 1, &rate_value, mode);
	    message_end();
	    /***** IF NOT "Esc", RECORD THE RATE INPUTTED. *****/
	    if(result)
		Tbltop[Count+cur_unit.unit_x-1].add_fee = (UI)rate_value;

	    if(Count+cur_unit.unit_x!=Max_len && Count+cur_unit.unit_x!=Tbllen+1)
		move_finger(1,1);

	    move_finger(2,ITEMS-2);
	    break;

    }/* END OF SWITCH */

    Tbllen = tbl_len();
}

/*-----------------------------------------------------
  --------------------- pgup_tbl() ------------------
               Function:       Change a page towards up.
               Calls:          clr_tbl,disp_tbl
               Called by:      input_data
               Input:          None
               Output:         None
               Return:         None

⌨️ 快捷键说明

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