2016年8月16日火曜日
2016年7月8日金曜日
C言語:簡易住所録(簡単なインメモリーDB)
問題1
下記の条件で構造体を用いた簡易住所録を作成。
・レコード内容:ID(2ケタ)、氏名、住所(簡単なもの)
・参照・追加・更新・削除が可能
・最初から5件分のメモリ領域を確保しておき、
6件以上登録する場合は随時動的にメモリを確保する(制限無し)
・[Ctrl+c]を押すことで現在の情報をディスク上へファイルとして生成
問題1のプログラム
忙しさにかまけて、ちゃんと理解できないところがあるので復習しなきゃ。。。
次はpythonへ...
下記の条件で構造体を用いた簡易住所録を作成。
・レコード内容:ID(2ケタ)、氏名、住所(簡単なもの)
・参照・追加・更新・削除が可能
・最初から5件分のメモリ領域を確保しておき、
6件以上登録する場合は随時動的にメモリを確保する(制限無し)
・[Ctrl+c]を押すことで現在の情報をディスク上へファイルとして生成
問題1のプログラム
#define DEFALUT_NUM 5 /* Global Variable*/ typedef struct { int id; char name[15]; char address[200]; int delflag; } card_t; card_t *info,*tmp_info; int current_id=1; /*Function*/ void genCSV() { int i=1; FILE *fp; fp = fopen("test.dat","w"); if( fp==NULL ){ fprintf(stderr,"test.dat can not be opened!\n"); } while ( i < current_id ) { if ( info[i].delflag == 0 ) { fprintf(fp,"%d,%s,%s\n",info[i].id,info[i].name,info[i].address); } i++; } fclose(fp); } /* FLG */ /*Signal Handle*/ void endfunc() { genCSV(); free(info); exit(0); } typedef void (*handler_t) (int); static int sigHandlerSet(int sig, handler_t handler) { struct sigaction new_action; struct sigaction old_action; memset( &new_action, 0, sizeof( struct sigaction ) ); new_action.sa_handler = handler; /* Temporarily block all other signals during handler execution */ sigfillset ( &new_action.sa_mask ); /* Auto restart syscalls after handler return */ new_action.sa_flags = SA_RESTART; if ( sigaction( sig, NULL, &old_action ) != 0 ) { return -1; } /* Honor inherited SIG_IGN that's set by some shell's */ if ( old_action.sa_handler != SIG_IGN ) { if ( sigaction( sig, &new_action, NULL ) != 0 ) { return -1; } } return 0; } int HandleSignals( void ) { if (sigHandlerSet(SIGINT, endfunc) != 0) return -1; return 0; } void selectAll() { int i=1; int flag = 0; while( i < current_id ) { if ( info[i].delflag == 0 ) { fprintf(stdout,"id=%d,name=%s,address=%s\n",info[i].id,info[i].name,info[i].address); flag = 1; } i++; } if ( flag == 0 ) { fprintf(stdout,"not found!\n"); } } int selectId(int pid) { int i=1; int flag=0; while( i < current_id ) { if ( info[i].id == pid && info[i].delflag == 0 ) { fprintf(stdout,"id=%d,name=%s,address=%s\n",info[i].id,info[i].name,info[i].address); flag = 1; break; } i++; } return flag; } void insert(char *name,char *address) { if ( current_id > DEFALUT_NUM ) { tmp_info = (card_t*)realloc(info,(current_id + 1) * sizeof(card_t)); info = tmp_info; } info[current_id].delflag = 0; info[current_id].id = current_id; sprintf(info[current_id].name,"%s",name); sprintf(info[current_id].address,"%s",address); fprintf(stdout,"stored with id=%d\n",info[current_id].id); current_id++; } void delete(int pid) { info[pid].delflag = 1; } void update(int pid,char *name,char *address) { sprintf(info[pid].name,"%s",name); sprintf(info[pid].address,"%s",address); } void printMenu() { fprintf(stdout,"Please choose a number from following!\n"); fprintf(stdout,"1 -> select\n"); fprintf(stdout,"2 -> insert\n"); fprintf(stdout,"3 -> update\n"); fprintf(stdout,"4 -> delete\n\n"); fprintf(stdout,"menu num[1-4] = "); } int main(void) { char c[2]; int i; int input=0; int id=-1; int rc=0; char name[15]; char address[200]; info = (card_t*) malloc ( sizeof(card_t) * (DEFALUT_NUM + 1) ); for( i = 0; i < DEFALUT_NUM; i++ ) { info[i].id = 0; info[i].delflag = 0; } if ( ( rc = HandleSignals()) != 0 ) exit(-1); while ( 1 ) { printMenu(); scanf("%d",&input); switch(input) { case 1: fprintf(stdout,"id(-1:ALL, or id > 0)-> "); scanf("%d",&id); if ( id < 0 ) { selectAll(); } else { if ( ! selectId(id) ) { fprintf(stdout,"not found!\n"); }; } break; case 2: fprintf(stdout,"name-> "); scanf("%s",name); fprintf(stdout,"address-> "); scanf("%s",address); insert(name,address); break; case 3: fprintf(stdout,"id-> "); scanf("%d",&id); if ( id > 0 ) { if( selectId(id) ) { fprintf(stdout,"name-> "); scanf("%s",name); fprintf(stdout,"address-> "); scanf("%s",address); update(id,name,address); } else { fprintf(stdout,"not found id = %d!\n",id); } } else { fprintf(stderr,"Please set correct id!\n"); } break; case 4: fprintf(stdout,"id-> "); scanf("%d",&id); if ( id > 0 ) { if( selectId(id) ) { delete(id); } else { fprintf(stdout,"not found id = %d!\n",id); } } else { fprintf(stderr,"Please set correct id!\n"); } break; default: break; } fprintf(stdout,"do you exit this program?[y|n] "); scanf("%s",c); if ( c[0] == 'y' ) { endfunc(); } fprintf(stdout,"\n\n"); }; free(info); return 0; }
忙しさにかまけて、ちゃんと理解できないところがあるので復習しなきゃ。。。
次はpythonへ...
2016年7月6日水曜日
2016年6月12日日曜日
ヒトには時間でしか癒せない痛みがある
先日28歳になりました。この世に生を受けて10000日ちょっと。
昔想像してた28歳よりも、幼く、未熟だけど、
健康で大きな悩みもなく、生活できていると思います。
こういう節目だと、いつもどう生きていこうかな、とか考えてしまうけど、
シンプルに、これからも自分の納得のために生きていきたいと思う。
こだわりこそが人生の彩りだとも思う。
ああ、人生で一度はオーロラを観たいなあ。
Boards of Canada - Macquarie Ridge (Aurora Borealis, Northern Lights) HD...
2016年5月14日土曜日
[tips]Google Chromeを常にシークレットモードで起動する
Google Chromeを常にシークレットモードで起動する
Windows8
Windows8
- デスクトップのショートカットやスタートメニュー>すべてのプログラムにあるChromeアイコンを右クリック。
- 右クリックメニューからプロパティを選択。
- Google Chromeのプロパティ起動後、ショートカットタブのリンク先の項目の語尾に--incognitoオプションを追加。こんな感じ→"~\chrome.exe" --incognito
- 適用、OKをクリック。
- これでChromeアイコンからChromeを起動するとシークレットモードで起動する。
2016年4月27日水曜日
The circle of life.
20代までは、若さと外見の小奇麗さがあれば、押し切れる時代。
30代からは、人生のテーマとどんな風に時間を過ごしているかが外見に出てくる時代。
したがって、年老いても美しいひとは昔から容姿が整っていたのではなく、
長い年月、充実した時間を過ごしてきた証明。
2016年4月23日土曜日
2016年4月4日月曜日
C言語:ファイルの入出力
問題1
下記の条件で、5人分キーボードから入力し、
それをディスク上にファイルとして生成するプログラムを作成。
・受験番号(4ケタ)
・性別(男:M、女:F)
・氏名(20ケタ以内、姓と名の間を"-"でつなぐ)
問題2
問題1で生成したファイルを読み込み、まず性別で分け、
その中を氏名順でソートするプログラムを作成。
問題1のプログラム
下記の条件で、5人分キーボードから入力し、
それをディスク上にファイルとして生成するプログラムを作成。
・受験番号(4ケタ)
・性別(男:M、女:F)
・氏名(20ケタ以内、姓と名の間を"-"でつなぐ)
問題2
問題1で生成したファイルを読み込み、まず性別で分け、
その中を氏名順でソートするプログラムを作成。
問題1のプログラム
struct exam{ int no; char sex; char first[10]; char last[10]; }; int main(void){ FILE *fp; int i; struct exam member[10]; for(i=0;i<5 i="" p=""> printf("%d番目の受験番号を入力してください:",i+1); scanf("%d", &member[i].no ); printf("%d番目の性別を入力してください M/F:",i+1); scanf(" %[MF]", &member[i].sex ); printf("%d番目のファーストネームを入力してください:",i+1); scanf("%s", member[i].first ); printf("%d番目のラストネームを入力してください:",i+1); scanf("%s", member[i].last ); } fp = fopen("test.txt","a"); for(i =0;i<5 i="" p=""> printf("受験番号:%d\n性別:%c\n氏名:%s-%s\n",member[i].no, member[i].sex, member[i].first,member[i].last); fprintf(fp,"%d %c %s-%s\n",member[i].no, member[i].sex, member[i].first,member[i].last); } fclose(fp); printf("test.txtに出力完了\n"); return 0; }
問題2のプログラム
typedef struct {int no;char sex[5];char name[20];} exam;int main(void){FILE *fp;int i,j,s=0,t=0;exam member[10];exam male[10],female[10],x[1],y[1];fp = fopen("test.txt","r");// ファイルの終端まで文字列を読み取り表示for(i=0;i<5 div="" i="">if(fscanf(fp,"%d %s %s\n" ,&member[i].no,member[i].sex, member[i].name ) != 3 ) break;}fclose(fp);//性別ごとに分類printf( "女性だけ表示\n");for (i=0;i<5 div="" i="">if(strcmp(member[i].sex,"M")){female[t].no = member[i].no;strcpy(female[t].sex,member[i].sex);strcpy(female[t].name,member[i].name);printf( "%d %s %s\n", female[t].no, female[t].sex, female[t].name);t++;}}printf( "男性だけ表示\n");for (i=0;i<5 div="" i="">if(strcmp(member[i].sex,"F")){male[s].no = member[i].no;strcpy(male[s].sex,member[i].sex);strcpy(male[s].name,member[i].name);printf( "%d %s %s\n", male[s].no, male[s].sex, male[s].name);s++;}}//女性の並べ替えfor(i=0;i for(j=0;j if (strcmp(female[j].name,female[j+1].name) > 0) {y[1] = female[j];female[j] = female[j+1];female[j+1] = y[1];}}}printf( "女性を氏名順に並び替え\n");for(i=0;i printf( "%d %s %s\n", female[i].no, female[i].sex, female[i].name);//男性の並べ替えfor(i=0;i for(j=0;j if (strcmp(male[j].name,male[j+1].name) > 0) {x[1] = male[j];male[j] = male[j+1];male[j+1] = x[1];}}}printf( "男性を氏名順に並び替え\n");for(i=0;iprintf( "%d %s %s\n", male[i].no, male[i].sex, male[i].name);return 0;}
登録:
投稿 (Atom)