編 損益─資產負債表

損益表 |
新增科目 |
科目查詢 |
原始程式
原始檔-起始
/*---------( 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