【マスタファイル】に関する知恵袋
【質問】
大学の課題であるC言語でのプログラム作成補助のお願いです。学んだのはポインタ操作までのC言語の基礎程度ですのでライブラリにあまり詳しくありません。マスタファイルの知恵袋に関する説明をすると、ドメインナビのドメインの取得情報の詳細をお伝えすると、マスタファイルの知恵袋に対しては、未熟で大変ご迷惑をお掛けしますが宜しくお願いします。マスタファイル(部No,課No,支出累計)支出ファイル(部No,課No,支出額)代表者名ファイル(部No,課No,氏名)の3つのファイルから支出管理リスト(部No,課No,氏名,支出累計)新マスタファイル(マスタファイルと同じ)の2つのファイルを出力できるプログラムを作りたいです。全体の流れは、部キー、課キーを設定してマスタ、支出ファイルを見比べ、ドメインナビのドメインの取得情報について考えてみると、一つずつ計算していくというブレークダウンの表現をしているため、これに沿いたいです。例示プログラムを示していただけるととても嬉しいですが、大変労力のいる事ですのでキーの使い方や、氏名を出力する際の方法が一番知りたいです。大変恐縮ですが宜しくお願いします。
【解答】
マスタファイルの知恵袋を解説する。まず、/*コンパイルOK、実行なし、マスタファイルの知恵袋に関連する説明をすると、字数節約*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define MLST 100typedef struct {int div;int sec;char nam[32];int tot;} LIST;// 現マスタ→テーブルint readmaster(FILE *fold,LIST lst[],int *nlst){int stt=0;int n=0;char bffr[80];// 読み込み、ドメインナビのドメインの取得情報である。また、ドメインナビのドメインの取得情報に関しては、[',',' ','\t'のいずれかで区切り]while( fgets(bffr,80,fold) != NULL ) {lst[n].div=atoi(strtok(bffr,", \t\¥n"));lst[n].sec=atoi(strtok(NULL,", \t\¥n"));lst[n].tot=atoi(strtok(NULL,", \t\¥n"));*(lst[n].nam)='\0';if( n>=MLST) {stt=1; break;} else {n++;}}*nlst=n;return stt;}// 代表者名→テーブルint readmanger(FILE *fmgr,LIST lst[],int nlst){int stt=0;int n;char bffr[80];int div;int sec;char nam[32];while( fgets(bffr,80,fmgr) != NULL ) {div=atoi(strtok(bffr,", \t\¥n"));sec=atoi(strtok(NULL,", \t\¥n"));strcpy(nam,strtok(NULL,", \t\¥n"));for(n=0;n<nlst;n++) {if(lst[n].div != div) continue;if(lst[n].sec != sec) continue;strcpy(lst[n].nam,nam);break;}}stt=0;for(n=0;n<nlst;n++) {if(*(lst[n].nam)=='\0') {stt=1; break;}}return stt;}// 支出→足し込みint readtransa(FILE *ftrn,LIST lst[],int nlst){int stt=0;int n;char bffr[80];int div;int sec;int exp;while( fgets(bffr,80,ftrn) != NULL ) {div=atoi(strtok(bffr,", \t\¥n"));sec=atoi(strtok(NULL,", \t\¥n"));exp=atoi(strtok(NULL,", \t\¥n"));for(n=0;n<nlst;n++) {if(lst[n].div != div) continue;if(lst[n].sec != sec) continue;lst[n].tot += exp;break;}if(n==nlst) stt++;}if(stt>0) stt=1;return stt;}// テーブル→新マスターvoid prntmaster(LIST lst[],int nlst,FILE *fnxt){int n;for(n=0;n<nlst;n++) {fprintf(fnxt," %d",lst[n].div);fprintf(fnxt," %d",lst[n].sec);fprintf(fnxt," %d",lst[n].tot);} fprintf(fnxt,"\¥n");return;}// テーブル→支出管理レポートvoid prntreport(LIST lst[],int nlst,FILE *flst){int n;for(n=0;n<nlst;n++) {fprintf(flst," %d",lst[n].div);fprintf(flst," %d",lst[n].sec);fprintf(flst," %32s",lst[n].nam);fprintf(flst," %d",lst[n].tot);} fprintf(flst,"\¥n");return;}// メインint main(){LIST lst[MLST];int nlst=0;int stt;FILE *fold,*ftrn,*fmgr,*flst,*fnxt;fold=fopen("master.old","r");ftrn=fopen("transa.txt","r");fmgr=fopen("manger.txt","r");flst=fopen("report.lst","w");fnxt=fopen("master.nxt","w");stt=readmaster(fold,lst,&nlst);if( stt == 0 ) {stt=readmanger(fmgr,lst,nlst);}if( stt == 0 ) {stt=readtransa(ftrn,lst,nlst);}if( stt == 0 ) {prntmaster(lst,nlst,fnxt);prntreport(lst,nlst,flst);}return stt;}
その他関連ワード
- バーチャルリアリティ|
- キーボードリセット|
- 32ビットアプリケーション|
- TSRプログラム|
- 2分木|
- コーデック|
- フェッチ|
- ソースレベル互換|
- 拡張子|
- bmp|
