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)
