編 損益─資產負債表

wpeE.jpg (60116 bytes)

損益表
wpeF.jpg (7196 bytes)

新增科目
wpe11.jpg (7653 bytes)

科目查詢
wpe12.jpg (10733 bytes)


原始程式

原始檔-起始
/*---------( FSACR063.C )----編損益資產負債表-------*/
#include    "W_FSAC.H"
#define      ANO   120  /*ARRAY  陣列筆數*/
#define      TNO     0  /*TITLE  抬頭項數*/
#define      RNO    17  /*ROW    螢幕列數*/
#define      CNO     6  /*COLUMM 各列項數*/
#define      SNO     7  /*螢幕起始列數   */


void Field01();
void Read1Page(char *fn);
void Write1Page();
void Print1Page();
/*================================================================*/
FSACF001_T   ACF001;
FSACR063_T   R063,R063A[ANO];
char         Wrk[10];
char  *Table="\
                         科 目 編 號                                   記 分\
    科  目  名  稱     (起 始) (結 止)      計 算 公 式                號 母\
---------------------- ------- ------- ------------------------------- -- --\
                                                                            ";
#include  "W_ACP001.C"
void main()
{   UShowTable(3,4,78,SNO-1,Table,V_TABLE);
    for(I=0; I<RNO; I++) UShowSL(3,I+SNO,76,&Table[(SNO-4)*76],V_SHOW);
/*  UShowTable(3,I+SNO,78,strlen(Table)/76+RNO+2,&Table[(SNO-3)*76],V_TABLE);*/
    NamS=GET_NAME;     USetXN(&Table[(SNO-5)*76]-2);
    UDrawBox(1,3,80,24,V_YELLOW,NO,NO,2);
    Ugd_Open("F3:建科目 F4科目 F5:損益表 F6:資產負債表 F7列印 F9插入 F10刪除 PgDn.Up:前後頁");
    OPEN_ACF001; Read1Page("R063");
    ACF001Tx();
    while(1)
    {   Field01();
        if(RetKey==PGDN) RetKey=END;
        if(RetKey==PGUP) RetKey=HOME;
        switch(RetKey)
        {   case F5   : Write1Page(); Read1Page("R063");                  break;
            case F6   : Write1Page(); Read1Page("R068");                  break;
            case F7   : Wo=Uwo_Open(1,1,80,25);
                        Print1Page();   Uwo_Close(Wo);                    break;
            case F9   : for(I=ANO-2; I>=OffSet+(Field-1)/CNO; I--) R063A[I+1]=R063A[I];
                        memset(&R063A[OffSet+(Field-1)/CNO],NULL,sizeof(R063));
                        Show1Page(); Modify=ON;                           break;
            case F10  : for(I=OffSet+(Field-1)/CNO; I<ANO-1; I++) R063A[I]=R063A[I+1];
                        memset(&R063A[ANO-1],NULL,sizeof(R063));
                        Show1Page(); Modify=ON;                           break;
            case ESC  : Write1Page();  Ugd_Close();                      exit(0);
            default   : UCtrField(ANO,TNO,RNO,CNO);                       break;
        }
    }
}
/*===========================================================================*/
void Field01()
{   int  col=(Field-TNO-1)%CNO,  row=(Field-TNO-1)/CNO;
    int  y=row+SNO, r=row+OffSet;

    switch(col)
    {   case 0: UReadS(XN(0),R063A[r].ACN,"C0",V_SHOW,V_READ);       /*科目名稱*/
                if(RetKey!=F4) break;
                if(Utx_Pick(Tx,BufS,0,0,0," 科 目 查 詢 ",V_SHOW))             /*取科目名稱*/
                {   if(Ufk_Read(ACF001K,&ACF001,BufS)==OFF) memset(&ACF001,NULL,sizeof(ACF001));
                    strcpy(R063A[r].ACN,ACF001.ACN);    UShowSL(XN(0),R063A[r].ACN,V_SHOW);
                    strcpy(R063A[r].AC[0],ACF001.KEY);  UShowSL(XN(1),R063A[r].AC[0],V_SHOW);
                }                                                break;
        case 1: UReadS(XN(1),R063A[r].AC[0],"NL",V_SHOW,V_READ);         break;
        case 2: UReadS(XN(2),R063A[r].AC[1],"NL",V_SHOW,V_READ);         break;
        case 3: UReadV(XN(3),R063A[r].FMT,FMT_L-1,"NL0",V_SHOW,V_READ);  break;
        case 4: UReadC(XN(4),&R063A[r].C,"",V_SHOW,V_READ);              break;
        case 5: UReadC(XN(5),&R063A[r].M,"",V_SHOW,V_READ);              break;
    }
    if(RetKey==F4)
    {   if(col==1 || col==2) Utx_Pick(Tx,R063A[r].AC[col-1],XN(col)," 科 目 查 詢 ",V_SHOW);   /*取科目代碼*/
        else                 Utx_View(Tx," 科 目 查 詢 ");       /*僅供查詢, 不設定*/
    }
    if(RetKey==F3)
    {   ACP001(X[1],y-1,R063A[r].AC[0]);
        if(RetKey==OFF) return;
        strcpy(R063A[r].ACN,ACF001.ACN);    UShowSL(XN(0),R063A[r].ACN,V_SHOW);
        strcpy(R063A[r].AC[0],ACF001.KEY);  UShowSL(XN(1),R063A[r].AC[0],V_SHOW);
    }
}
/*===========================================================================*/
void Show1Page()
{   int    y,r;

    for(I=0; I<RNO; I++)
    {   y=I+SNO;  r=I+OffSet;
        UShowSL(XN(0), R063A[r].ACN,V_SHOW);              /* 名稱*/
        UShowSL(XN(1), R063A[r].AC[0],V_SHOW);            /* 起始科目代碼*/
        UShowSL(XN(2), R063A[r].AC[1],V_SHOW);            /* 結止科目代碼*/
        UShowSL(XN(3), R063A[r].FMT,V_SHOW);              /* 計算公式*/
        UShowC( XN(4), R063A[r].C,V_SHOW);                /* 符號*/
        UShowC( XN(5), R063A[r].M,V_SHOW);                /* 分母*/
    }
}
/*===========================================================================*/
void Read1Page(char *fn)
{
    if(memcmp(fn,"R063",4)==0) UShowS(1,2,"☆★ (損  益  表) ★☆",V_TITLE_ON);
    if(memcmp(fn,"R068",4)==0) UShowS(1,2,"☆★ (資產負債表) ★☆",V_TITLE_ON);
    strcpy(Wrk,fn);                            /*記錄使用檔名*/
    memset(R063A,NULL,sizeof(R063A));          /*清為空白紙, 因可能檔案不存在*/
    if(access(Wrk,0)==0) strcpy(BufS,"r+b");
    else                 strcpy(BufS,"w+b");
    if((Stream=fopen(Wrk,"r+b"))!=NULL)        /*檔案存在, 則讀入資料*/
    {   for(I=0; I<ANO; I++) fread(&R063A[I],sizeof(R063),1,Stream);
        fclose(Stream);                        /*開啟讀完後, 立即 fclose()*/
    }
    Modify=OFF; OffSet=0; Field=1; Show1Page();  /*讀入時一定要Modify=OFF*/
}
/*===========================================================================*/
void Write1Page()
{
    if(Modify==OFF) return;
    if((Stream=fopen(Wrk,"w+b"))==NULL) return;
    for(I=0; I<ANO; I++) fwrite(&R063A[I],sizeof(R063),1,Stream);
    fclose(Stream);
}
/*===========================================================================*/
void ShowHead()
{
#ifdef   HP-5L          /*1998/8/27*/
   LockItemHead(0,"~I",NamS,"~Z2G2X10");
#else
   LockItemHead(0,"~IZ2G2",NamS,"~Z1");
#endif
   UPrint("    科  目  名  稱     ( 科 目 編 號 )          計 算 公 式                 記號");
   UPrint("---------------------- ------- ------- -------------------------------------- --");
}
/*===========================================================================*/
void Print1Page()
{   int   lin;

    if(UInitLpt()==OFF) return;  Stream=stdprn;
/*  Stream=fopen("TMP","w+");                    */
    Psf='P';   K0=P0=0;
    strcpy(BufS,"%S-------------------- %S----- %S----- %S------------------------------------ %C");
    for(lin=ANO-1; lin>=0; lin--)
        if(strlen(R063A[lin].ACN)>0) break;        /*先找最後一筆*/
    for(I=0; I<=lin; I++)                          /*重頭開始印到尾*/
        UPrint(BufS,R063A[I].ACN,R063A[I].AC[0],R063A[I].AC[1],R063A[I].FMT,R063A[I].C);
    fclose(Stream);
}
原始檔-結束

Byron Wey  Oct.21.1998


回首頁C之城