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