自分の組んだプログラムをどんどん忘れていくのは何か嫌だったので、BLOGに残していくことにした。
自分の簡単なライブラリにもなるだろうし、ふと思った時に見なおせるのは結構いいなーと思った。
とりあえず、今日はCで昔書いた簡単なデータベースのソースを。
昔に書いたソースはなんか恥ずかしいとこがいっぱいだが、上達も分かるってことで載せて行きます。
■対話型データベースシステム(TABスペースが全て消えてます)
/*--------------------------------------------------------------------------------------------*/
/* 対話型データベース検索システム */
/*--------------------------------------------------------------------------------------------*/
/* 作成日:2006/06/30 */
/*--------------------------------------------------------------------------------------------*/
/* ファイル名: data_base_system_test.c */
/*--------------------------------------------------------------------------------------------*/
#define BUF_SIZE 1024
#define FILE_SIZE 256
#define DATA_SIZE 64
int main(int argc,char *argv[])
{
char buf[BUF_SIZE],line[FILE_SIZE];
char command1[DATA_SIZE],command2[DATA_SIZE],command3[DATA_SIZE],command4[DATA_SIZE];
FILE *fp,*ofp;
int a,i,n,m;
char *token;/* 文字を一時的に確保するポインタ */
/*------------------データ入力するための構造体宣言ここから--------------------*/
typedef struct studentdata
{
char number[DATA_SIZE];
char name[DATA_SIZE];
char hobby[DATA_SIZE];
}student;
student data[FILE_SIZE];
/*------------------データ入力するための構造体宣言ここまで--------------------*/
if((fp = fopen(argv[1],"r")) == NULL)/* ファイルオープンエラー回避 */
{
printf("File not open\n");
exit(1);
}
/*------------------------構造体にデータ入力ここから--------------------------*/
a=1;
while( fgets(buf,FILE_SIZE,fp) != NULL)/* ファイルから一行読み込み */
{
token = strtok(buf , ",\n");/* ','で区切る処理 */
if(token == NULL)/* NULLにおけるエラー回避 */
{
continue;
}
else
{
strcpy(data[a].number,token);/* numberにデータ格納 */
token = strtok(NULL,",\n");
strcpy(data[a].name,token);/* nameにデータ格納 */
token = strtok(NULL,",\n");
strcpy(data[a].hobby,token);/* hobbyにデータ格納 */
a++;
}
}
fclose(fp);
/*------------------------構造体にデータ入力ここまで--------------------------*/
/*-------------------対話検索システムの設定ここから---------------------------*/
while(1)
{
printf("\n");
printf("[search]: search data\n");
printf("[number]: search data from number\n");
printf("[name] : search data from name\n");
printf("[hobby] : search data from hobby\n");
printf("[check] : check all data\n");
printf("[add] : add data\n");
printf("[save] : save data\n");
printf("[finish]: finish searching data \n\n");
printf("Enter your question :");
fgets(line,sizeof(line),stdin);
sscanf(line,"%s",command1); /* 対話コマンド入力部分 */
if( strcmp(command1,"search")==0 )/* 'search'を入力した時 */
{
printf("Enter number & question[example - '145616 name']:");
fgets(line,sizeof(line),stdin);
sscanf(line,"%s%s",command2,command3);/* 学籍番号と質問を格納 */
for(n=1;n
{
if( strcmp(data[n].number,command2)==0 )
{
if( strcmp(command3,"name")==0 )/* 質問が'name'の時 */
{
printf("\nThe name of No.%s is '%s'\n\n",data[n].number,data[n].name);
}
else if(strcmp(command3,"hobby")==0 )/* 質問が'hobby'の時 */
{
printf("\nThe hobby of No.%s is '%s'\n\n",data[n].number,data[n].hobby);
}
}
}
}
else if( strcmp(command1,"number")==0 )/* 'number'を入力した時 */
{
printf("Enter number:");
fgets(line,sizeof(line),stdin);
sscanf(line,"%s",command2);
for(n=1;n
{
if( strcmp(data[n].number , command2)==0)/* 入力されたnumberと同じデータが存在する時 */
{
printf("\n");
printf("-----------DATA OF %s-----------\n",command2);
printf("NUMBER:%s\n",data[n].number);
printf("NAME :%s\n",data[n].name);
printf("HOBBY :%s\n",data[n].hobby);
printf("------------------------------------\n");
printf("\n");
}
else/* データが存在しない時 */
{
continue;
}
}
}
else if( strcmp(command1,"name")==0 )/* 'name'を入力した時 */
{
printf("Enter name:");
fgets(line,sizeof(line),stdin);
m=strlen(line);
line[m-1]='\0';
strcpy(command2,line);
for(n=1;n
{
if( strcmp(data[n].name , command2)==0)/* 入力されたものと同じデータが存在する時 */
{
printf("\n");
printf("-----------DATA OF %s-----------\n",command2);
printf("NUMBER:%s\n",data[n].number);
printf("NAME :%s\n",data[n].name);
printf("HOBBY :%s\n",data[n].hobby);
printf("------------------------------------\n");
printf("\n");
}
else/* データが存在しない時 */
{
continue;
}
}
}
else if( strcmp(command1,"hobby")==0 )/* 'hobby'を入力した時 */
{
printf("Enter hobby:");
fgets(line,sizeof(line),stdin);
sscanf(line,"%s",command2);
for(n=1;n
{
if( strcmp(data[n].hobby , command2)==0)/* 入力されたものと同じデータが存在する時 */
{
printf("\n");
printf("-----------DATA OF %s-----------\n",command2);
printf("NUMBER:%s\n",data[n].number);
printf("NAME :%s\n",data[n].name);
printf("HOBBY :%s\n",data[n].hobby);
printf("------------------------------------\n");
printf("\n");
}
else/* データが存在しない時 */
{
continue;
}
}
}
else if( strcmp(command1,"add")==0 )/* 'add'を入力した時 */
{
printf("Enter number:");/* 番号入力 */
fgets(line,sizeof(line),stdin);
sscanf(line,"%s",command3);
strcpy(data[a].number,command3);/* 入力した番号を格納 */
printf("Enter name:");/* 名前入力 */
fgets(line,sizeof(line),stdin);
m=strlen(line);
line[m-1]='\0';/* fgetsで書き込まれた改行文字をNULLに置き換え */
strcpy(command3,line);
strcpy(data[a].name,command3);/* 入力した名前を格納 */
printf("Enter hobby:");/* 趣味入力 */
fgets(line,sizeof(line),stdin);
sscanf(line,"%s",command3);
strcpy(data[a].hobby,command3); /* 入力した趣味を格納 */
a++;
}
else if(strcmp(command1,"check")==0 )/* 'check'を入力した時 */
{
printf("\n-----------DATABASE-----------\n");
for(i=1;i
{
printf("%s,%s,%s\n",data[i].number,data[i].name,data[i].hobby);
}
printf("--------------------------------\n");
printf("\n");
}
else if( strcmp(command1,"save")==0 )/* 'save'を入力した時 */
{
printf("SAVE?(y/n):");/* yesかnoを入力 */
fgets(line,sizeof(line),stdin);
sscanf(line,"%s",command4);
if(strcmp(command4,"y")==0)
{
ofp = fopen(argv[1],"w") ;
for(i=1;i
{
fprintf(ofp,"%s,%s,%s\n",data[i].number,data[i].name,data[i].hobby);
}
printf("Save complete!!\n");
}
else
{
printf("Cannot Save\n");
}
fclose(ofp);
}
else if( strcmp(command1,"finish")==0 )/* 'finish'を入力した時 */
{
break;/* 終了 */
}
else
{
printf("such commnad is nothing\n");/* 入力間違い */
}
printf("press enter key...");
fgets(buf,FILE_SIZE,stdin);
}
/*-------------------対話検索システムの設定ここまで---------------------------*/
return 0;
}