助けてください。困っています
初めまして
課題でメイン関数(メインメニュー)から呼び出されるサブシステムの「かな氏名検索」を作っているのですが、
自分なりに頑張ってみたものの全くの初心者のため完全に行き詰ってしまい、どこが悪いのかもわからない状態です。
なので、皆さんに教えて頂きたいと思い、
お願いにまいりました。
100人分のデータから「ふりがな」を部分一致で検索して、一致した人のデータを表示させるもので、
探すデータ(社員データ)はカンマ区切りテキストで
社員番号 名前 ふりがな 郵便番号 住所 電話番号 生年月日 入社年月日 役職コード 所属コード 性別
の順に
0523,鈴木一郎,すずきいちろう,105-0000,東京都どこどこ, ,19830101,20090404,01,01,M
のように入っています。空白部には半角スペースが入ってます。
現在の自分で作ったソースは
#include <stdio.h>
#include <string.h>
#include "CFUNC.h"
#include "display.h"
#define NUM 200
typedef struct shain{
char id[5];
char name[21];
char hurigana[31];
char yubin[9];
char jusyo[101];
char tel[14];
int birth;
int nyusya;
char yakusyokucode[3];
char syozokucode[3];
char seibetsu[2];
}shain;
int main(void)
{
int j;
int i;
int cnt = 0;
shain data[100];
FILE *fp;
char *token;
char s[NUM];
char mes[25] = "該当する結果がありません";
char mes2[30] = "該当するメニューがありません";
char str[30];
fp = fopen("shain.txt","r");
if(fp==NULL){
printf("ファイルオープンに失敗しました。\n");
return 1;
}
for(i=0; i<100; ++i){
fgets(s,NUM-1,fp);
token= strtok(s, ","); /* str1の分割(1回目) */
strcpy(data[i].id,token);
token = strtok(NULL, ",");
strcpy(data[i].name,token);
token = strtok(NULL, ",");
strcpy(data[i].hurigana,token);
token = strtok(NULL, ",");
strcpy(data[i].yubin,token);
token = strtok(NULL, ",");
strcpy(data[i].jusyo,token);
token = strtok(NULL, ",");
strcpy(data[i].tel,token);
token = strtok(NULL, ",");
data[i].birth =(int)token;
token = strtok(NULL, ",");
data[i].nyusya=(int)token;
token = strtok(NULL, ",");
strcpy(data[i].yakusyokucode,token);
token = strtok(NULL, ",");
strcpy(data[i].syozokucode,token);
token = strtok(NULL, "\n");
strcpy(data[i].seibetsu,token);
}
cls(); /*検索画面*/
printf("*****************************************************\n");
printf("[かな氏名検索]\n");
printf("かなを入力してください:\n");
printf(" \n");
printf(" \n");
printf(" 0:メニューに戻る\n");
printf("*****************************************************\n");
printf("メッセージ:\n");
for(;;){
setLocate(24,3);
scanf("%s",str);
if(strcmp(str,"0")==0){
break;
}
for(i=0; i<100; ++i){
if(strncmp(str,data[i].hurigana,5)==0){
cnt++;
if(cnt==1){ /*検索結果画面*/
printf("*****************************************************\n");
printf("[かな氏名検索結果]\n");
printf("社員番号 氏名 ふりがな 入社年度 所属 性別 役職\n");
printf(" %s %s %5s %d %s %s %s %s\n", data[i].id,data[i].name,data[i].hurigana,data[i].nyusya, data[i].syozokucode,data[i].seibetsu,data[i].yakusyokucode);
}
else{
printf(" %s %s %5s %d %s %s %s %s\n", data[i].id,data[i].name,data[i].hurigana,data[i].nyusya, data[i].syozokucode,data[i].seibetsu,data[i].yakusyokucode);
}
}
//見たつからなかった時
if (cnt==0){
setLocate(12,8);
printf("%s\n",mes);
}
//メッセージ
setLocate(24,3);
scanf("%s",str);
setLocate(12,8);
printf("%s\n",mes);
}
}
printf("\n");
fclose(fp);
return 0;
}
所々変なところもあり見にくいと思いますが、
とりあえず単独で検索だけしっかり出来るようにしたいです。
検索は1回だけでなく、何回も出来るようにしたいです。
下手な文章のうえ長文でまことにすいませんが、よろしくお願いします。
お礼
できました!! ありがとうございます。