ページ 11

ファイルデータの更新処理

Posted: 2012年6月30日(土) 17:26
by taz
こんにちは。
ファイルデータの更新処理を作成したいのです。
今出来ているコードは以下のとおりです。

コード:

/* データ変更処理 */

#include <stdio.h>
#include <stdlib.h>

FILE *fp;
char *fname = "comma.csv";

main()
{
	int no;
	int ret;
	printf("---会員管理システムメニュー---\n\n");
	printf("1.新規登録\n");
	printf("2.変更\n");
	printf("3.削除\n");
	printf("4.一覧表示\n");
	printf("No? ");
	ret=scanf("%d",&no);
	if(no == 1)
	{
		ret = add_record();
	}
	else if(no == 2)
	{
		ret = update_record();
	}
}

int update_record()
{
	int no;
	char name[100];
	char adress[100];
	char tel[100];
	char mail[100];
	int choice;
	int ret;

	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no);

	fp = fopen(fname,"r");
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1;
	}

	while((ret = fscanf(fp,"%[^,],%s,%s,%s,%s",no,&name,&adress,&tel,&mail)) != EOF)
	{
	}

	fclose(fp);
	return 0;

	printf("会員名称(漢字,英語)? name");
	scanf("%s",&name);
	printf("住所(漢字,数字50文字)? adress");
	scanf("%s",&adress);
	printf("電話番号(半角文字-で区切る)? tel");
	scanf("%s",&tel);
	printf("メールアドレス(半角英数字)? mail");
	scanf("%s",&mail);
	printf("新規登録しますか?(1:yes 2:no)? ");
	scanf("%d",&choice);

	if(choice == 2)
	{
		system("cls");
		main();
	}
}
キーボードで入力された会員番号に対して、その会員番号に該当する会員情報をテキストデータから、
抽出し、表示させて、それを変更したいのですが、上のコードのとおり、抽出の部分がうまくいっていません。
どなたかアドバイスよろしくお願いします。

Re: ファイルデータの更新処理

Posted: 2012年6月30日(土) 17:40
by box
taz さんが書きました: 抽出の部分がうまくいっていません。
抽出の部分、というのは、
taz さんが書きました:

コード:

	while((ret = fscanf(fp,"%[^,],%s,%s,%s,%s",no,&name,&adress,&tel,&mail)) != EOF)
	{
	}
ここのことですか?だとすると、
noに&が付いていなくて、他の変数には&が付いているのは、なぜでしょうか。
また、while文によるループの中で何も処理を行なっていませんが、これは作成途中だから、
ということでよいのでしょうか。

Re: ファイルデータの更新処理

Posted: 2012年6月30日(土) 18:02
by taz
whileの部分もif文か何かにしなくてはいけないと思っているのですが、
どう書けばよいかわかりません。
キーボード入力

入力値とファイル中のデータの値を比較

一致したデータを出力する

というような形にしたいのです。

Re: ファイルデータの更新処理

Posted: 2012年6月30日(土) 18:23
by box
会員番号、名前、住所、電話番号、メールアドレスといった情報は、
各会員の属性情報だと思われますので、構造体か何かを使って一元的に管理するのが
よくある方法だと思います。
そして、会員全体の情報は構造体の配列か何かを使って管理する、と。

現在のupdate_record関数では、1人分の情報しか読めないようになっているように見えます。
データ構造をどう定義すべきかをよく考えてから、コードに落とすほうがいいような気がします。

Re: ファイルデータの更新処理

Posted: 2012年6月30日(土) 18:39
by taz
あとあとで、構造体を使用した形に改造していきたいと思っております。
現段階では、構造体は使わないで、機能の実現をしたいと思います。
1人の情報が読めるようになればいいと思うので、コードの書き方を教えてください。
キーボード入力

ファイル内の会員番号と比較

一致したデータを編集時の初期値として表示する

そのデータを書き換える

ファイルに保存しなおす

Re: ファイルデータの更新処理

Posted: 2012年6月30日(土) 19:45
by box
add_record関数の中身は、トピック「出力される値がおかしい」の分を修正済だとして、
同関数とupdate_record関数の両方に、同じ配列定義が登場していないでしょうか。

今後、他の機能のための関数を用意するとき、また同じ配列定義をその関数の中に書くのでしょうか。
どういう風にされる予定ですか?

Re: ファイルデータの更新処理

Posted: 2012年6月30日(土) 19:54
by taz
同じように書くと思います。

Re: ファイルデータの更新処理

Posted: 2012年6月30日(土) 22:12
by へにっくす
taz さんが書きました:あとあとで、構造体を使用した形に改造していきたいと思っております。
現段階では、構造体は使わないで、機能の実現をしたいと思います。
1人の情報が読めるようになればいいと思うので、コードの書き方を教えてください。
boxさんが指摘した、
box さんが書きました:noに&が付いていなくて、他の変数には&が付いているのは、なぜでしょうか。
を考えた方がよいですね。
fscanfで代入する変数を指定するときはすべてポインタですが、charの配列ならば、&はつけなくてもそれ自体がポインタと見なされます。逆にnoはintという配列でもなくポインタでもない変数ですがなぜ&がついていないんでしょうかねえ。&をつけるのが逆ですよ。
それと、fscanfが返すのは、代入された変数の数です。
5つ全部入ったのを確認するのであれば、EOFでなく5と比較すべきですねえ。

Re: ファイルデータの更新処理

Posted: 2012年7月02日(月) 22:59
by taz

コード:

/* 新規登録 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *fp;
char *fname = "comma.csv";

main()
{
	int no;
	int ret;
	printf("---会員管理システムメニュー---\n\n");
	printf("1.新規登録\n");
	printf("2.変更\n");
	printf("3.削除\n");
	printf("4.一覧表示\n");
	printf("No? ");
	ret=scanf("%d",&no);
	if(no == 1)
	{
		ret = add_record();
	}
	else if(no == 2)
	{
		ret = update_record();
	}
	//else if(no == 3)
	//{
	//	ret = del_record();
	//}
	//else if(no == 4)
	//{
	//	ret = disp_all();
	//
	//}
}

int add_record()
{
	int no;
	char name[100];
	char adress[100];
	char tel[100];
	char mail[100];
	int choice;

	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no);
	printf("会員名称(漢字,英語)? ");
	scanf("%s",&name);
	printf("住所(漢字,数字50文字)? ");
	scanf("%s",&adress);
	printf("電話番号(半角文字-で区切る)? ");
	scanf("%s",&tel);
	printf("メールアドレス(半角英数字)? ");
	scanf("%s",&mail);
	printf("新規登録しますか?(1:yes 2:no)? ");
	scanf("%d",&choice);

	if(choice == 2)
	{
		system("cls");
		main();
	}

	fp = fopen(fname,"w");
	if(fp == NULL)
	{
		printf("%ファイルが開けません\n",fname);
		return -1;
	}

	fprintf(fp,"%d,%s,%s,%s,%s",no,name,adress,tel,mail);


	fclose(fp);

	printf("%sファイル書き込みが終わりました\n",fname);
	return 0;
}

int update_record()
{
	int no;
	char name[100];
	char adress[100];
	char tel[100];
	char mail[100];
	int choice;
	int ret;
	int i;
	char a[100]="会員名称(漢字,英語)? ";
	char b[100]="住所(漢字,数字50文字)? ";
	char c[100]="電話番号(半角文字-で区切る)? ";
	char d[100]="メールアドレス(半角英数字)? ";
	//入力する変数領域
    char up_name[50];
    char up_adress[100];
    char up_tel[20];
    char up_mail[50];
    //ファイルから読み込んだ番号
    int rno;  

	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no);

	fp = fopen(fname,"r");
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1;
	}



	while(feof(fp)==0)
	{

	    if((ret = fscanf(fp,"%d,%[^,],%[^,],%[^,],%[^,]",&rno,name,adress,tel,mail)) == 5)
  	    {
		}
	}
		//入力した番号とファイルよ読み込んだ番号とをチェックする。同じなら変更する
		if(no==rno)
		{
                   printf("%s",name);
                   scanf("%s",&up_name);
                   printf("%s",adress);
                   scanf("%s",&up_adress);
                   printf("%s",tel);
                   scanf("%s",&up_tel);
                   printf("%s",mail);
                   scanf("%s",&up_mail);
                   printf("変更登録しますか?(1:yes 2:no)? ");
                   scanf("%d",&choice);
		   //選択がyesのとき書き込むデータとして変数に格納する
		   if(choice ==1)
		   {
			//ここで配列変数に格納する(次回にします)
		   }
		}	     
		
	
	fclose(fp);
	return 0;

	

	if(choice == 2)
	{
		system("cls");
		main();
	}
}

ここまで、変更しましたが、会員番号でうまく検索出来ません。なぜでしょうか?アドバイスお願いします。

Re: ファイルデータの更新処理

Posted: 2012年7月03日(火) 05:31
by へにっくす
検索うんぬんより
次は構造体にして、
その次は配列を使って、
という手順を踏んだ方がいいと思いますが。

今のままじゃ1人分しかないので
検索とは言えないですw

Re: ファイルデータの更新処理

Posted: 2012年7月03日(火) 19:12
by taz(別PC)
こんばんは。
CSVファイル中には2件のデータが記述されています。
そのデータをキーボードから入力された値によって、
それぞれ出力させたいのですが、出来ないのでしょうか?

Re: ファイルデータの更新処理

Posted: 2012年7月03日(火) 19:46
by box
taz(別PC) さんが書きました: CSVファイル中には2件のデータが記述されています。
そのデータをキーボードから入力された値によって、
それぞれ出力させたいのですが、出来ないのでしょうか?
できますよ。そのためのコードを書けば。
今のコードでは1人分にしか対応できていない、というだけのことだと思います。

# だから、まずデータ構造を決める方がいいって言ったのに…。

Re: ファイルデータの更新処理

Posted: 2012年7月03日(火) 21:19
by taz
もっと具体的に次にやるべき事を教えていただきますか?

Re: ファイルデータの更新処理

Posted: 2012年7月03日(火) 21:30
by box
1)1人分の属性として考えているものをすべて書き出す。
2)書き出した項目をメンバーとする構造体を定義する。
3)その構造体では1人分のデータを管理するので、複数人のデータを管理するには構造体の配列というデータ構造を考える必要がある。
4)お手元にあるという、2人分のデータをCSVファイルから読み取って、定義済の構造体の配列に格納する。
5)構造体の配列の中身をすべて出力して、CSVファイルの内容と一致しているかどうかを確認する。

さしあたってはこんなところでしょうか。
データの追加とか検索とかいうのは、その後ですね。

Re: ファイルデータの更新処理

Posted: 2012年7月04日(水) 02:02
by taz

コード:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *fp;
char *fname = "comma.csv";

struct member {
	int no;
	char name[20];
	char adress[20];
	char tel[20];
	char mail[20];
};

main()
{
	int no;
	int ret;
	printf("---会員管理システムメニュー---\n\n");
	printf("1.新規登録\n");
	printf("2.変更\n");
	printf("3.削除\n");
	printf("4.一覧表示\n");
	printf("No? ");
	ret=scanf("%d",&no);
	if(no == 1)
	{
		ret = add_record();
	}
	else if(no == 2)
	{
		ret = update_record();
	}
	//else if(no == 3)
	//{
	//	ret = del_record();
	//}
	//else if(no == 4)
	//{
	//	ret = disp_all();
	//
	//}
}

int update_record()
{
	struct member member[20]={0};
	int no;
	int choice;
	int ret;
	int i;
    char up_name[50];
    char up_adress[100];
    char up_tel[20];
    char up_mail[50];
    int rno;  

	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no);

	fp = fopen(fname,"r");
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1;
	}
	
	//while(feof(fp)==0)
	//{
		for(i=0;i<2;i++)
		{
			if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%[^,]",&member[i].no,member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  			{
				printf("%s",member[i].name);
				printf("%s",member[i].adress);
				printf("%s",member[i].tel);
				printf("%s",member[i].mail);
			}
		}
	//}
		//入力した番号とファイルよ読み込んだ番号とをチェックする。同じなら変更する
		//if(no==rno)
		//{
                   //printf("%s",member[i].name);
                   //scanf("%s",&up_name);
                   //printf("%s",member[i].adress);
                   //scanf("%s",&up_adress);
                   //printf("%s",member[i].tel);
                   //scanf("%s",&up_tel);
                   //printf("%s",member[i].mail);
                   //scanf("%s",&up_mail);
                   //printf("変更登録しますか?(1:yes 2:no)? ");
                   //scanf("%d",&choice);
		   //選択がyesのとき書き込むデータとして変数に格納する
		   //if(choice ==1)
		   //{
			//ここで配列変数に格納する(次回にします)
		   //}
		//}	     
	
	fclose(fp);
	return 0;

	if(choice == 2)
	{
		system("cls");
		main();
	}
}
構造体を使用して、ファイルから読み込んだ値をその構造体に代入し、出力しようとしているのですが、
1番目のデータは出力されるのですが、2番目のデータが出力されません。
なぜでしょうか?データはCSV形式です。

Re: ファイルデータの更新処理

Posted: 2012年7月04日(水) 11:13
by non
fscanf(fp,"%d,%[^,],%[^,],%[^,],%[^,]"
これの最後がまずいんじゃないの?

Re: ファイルデータの更新処理

Posted: 2012年7月04日(水) 11:31
by taz(別PC)
まずいとは、どうまずいのでしょうか?

Re: ファイルデータの更新処理

Posted: 2012年7月04日(水) 12:07
by takumi@0832080.com
taz(別PC) さんが書きました:まずいとは、どうまずいのでしょうか?
HINT 言われた周辺いじったり,色々試行錯誤してみたらいいと思う. 
(個人的には&(member.no)のが何言ってるのか分かりやすい.)

Re: ファイルデータの更新処理

Posted: 2012年7月04日(水) 12:58
by non
CSVのファイルの行の最後にカンマはありますか?

Re: ファイルデータの更新処理

Posted: 2012年7月04日(水) 13:14
by taz
non さんが書きました:CSVのファイルの行の最後にカンマはありますか?
CSVのファイルの行の最後にカンマを入れましたがだめですね。

Re: ファイルデータの更新処理

Posted: 2012年7月04日(水) 13:55
by takumi@0832080.com
taz さんが書きました:
non さんが書きました:CSVのファイルの行の最後にカンマはありますか?
CSVのファイルの行の最後にカンマを入れましたがだめですね。
俺はそーいうことじゃないと思います.
ってか両方試そうよ.
それでだめなら最後にカンマないのになんで最後%[^,]なのってことでしょ.

Re: ファイルデータの更新処理

Posted: 2012年7月04日(水) 14:24
by 顔顔プリン
このサイトの
http://dixq.net/rp/11.html
ここをみればCSVの行の最後に何があるかわかると思いますよ

Re: ファイルデータの更新処理

Posted: 2012年7月04日(水) 15:31
by taz

コード:

for(i=0;i<2;i++)
		{
			if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  			{
				printf("%s\n",member[i].name);
				printf("%s\n",member[i].adress);
				printf("%s\n",member[i].tel);
				printf("%s\n",member[i].mail);
			}
		}
上記で、2つ目のデータも表示することが出来ました。
次に、キーボードで入力した番号で、出力情報を検索し、またそれを編集するようにしたいのですが、どのように記述したらよいでしょうか?箇条書きで教えていただけるとありがたいです。

Re: ファイルデータの更新処理

Posted: 2012年7月04日(水) 21:50
by taz

コード:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *fp;
char *fname = "comma.csv";

struct member {
	int no;
	char name[20];
	char adress[20];
	char tel[20];
	char mail[20];
};

main()
{
	int no;
	int ret;
	printf("---会員管理システムメニュー---\n\n");
	printf("1.新規登録\n");
	printf("2.変更\n");
	printf("3.削除\n");
	printf("4.一覧表示\n");
	printf("No? ");
	ret=scanf("%d",&no);
	if(no == 1)
	{
		ret = add_record();
	}
	else if(no == 2)
	{
		ret = update_record();
	}
	//else if(no == 3)
	//{
	//	ret = del_record();
	//}
	//else if(no == 4)
	//{
	//	ret = disp_all();
	//
	//}
}


int update_record()
{
	struct member member[20]={0};
	int no;
	char name[100];
	char adress[100];
	char tel[100];
	char mail[100];
	int choice=0;
	int ret;
	int i=0;
	char a[100]="会員名称(漢字,英語)? ";
	char b[100]="住所(漢字,数字50文字)? ";
	char c[100]="電話番号(半角文字-で区切る)? ";
	char d[100]="メールアドレス(半角英数字)? ";
	//入力する変数領域7
    char up_name[50];
    char up_adress[100];
    char up_tel[20];
    char up_mail[50];
    //ファイルから読み込んだ番号
    int rno;  
	
	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no);

	fp = fopen(fname,"r");
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1;
	}
	
	while(feof(fp)==0)
	{
			if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  			{
				if(no==member[i].no)
				{
				   printf("%s\n",member[i].name);
                   scanf("%s\n",member[i].name);
                   printf("%s\n",member[i].adress);
                   scanf("%s\n",member[i].adress);
                   printf("%s\n",member[i].tel);
                   scanf("%s\n",member[i].tel);
                   printf("%s\n",member[i].mail);
                   scanf("%s\n",member[i].mail);
                   printf("%s\n","変更登録しますか?(1:yes 2:no) ");
                   scanf("%d\n",&choice);
				   if(choice==1)
				   {

				   }
				   else if(choice==2)
				   {
						system("cls");
						main();
				   }
				}
			}
			i++;
			
		
	}
	fclose(fp);
	return 0;
}
ここまで出来ました。しかし、最初の名前を入力するところで、2回入力しないと次の住所の項目に進みません。
また、最後の登録しますか?の質問の際に2を選択してもメイン関数に戻りません。どうしてでしょうか?
アドバイスお願いします。

Re: ファイルデータの更新処理

Posted: 2012年7月05日(木) 07:53
by beatle
main関数を再帰的に呼び出している(103行目)のは意図したことなのでしょうか?
普通のプログラムでは、自分でmainを呼び出すようなことはしません。

想像するに、update_record関数からmain関数へ戻りたいだけなのでしょうが、それならreturnすべきです。

Re: ファイルデータの更新処理

Posted: 2012年7月05日(木) 10:47
by taz
beatle さんが書きました:main関数を再帰的に呼び出している(103行目)のは意図したことなのでしょうか?
普通のプログラムでは、自分でmainを呼び出すようなことはしません。

想像するに、update_record関数からmain関数へ戻りたいだけなのでしょうが、それならreturnすべきです。
期待動作としては、意図してやっていることです。

コード:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *fp;
char *fname = "comma.csv";

struct member {
	int no;
	char name[20];
	char adress[20];
	char tel[20];
	char mail[20];
};

main()
{
	int no;
	int ret;
	printf("---会員管理システムメニュー---\n\n");
	printf("1.新規登録\n");
	printf("2.変更\n");
	printf("3.削除\n");
	printf("4.一覧表示\n");
	printf("No? ");
	ret=scanf("%d",&no);
	if(no == 1)
	{
		ret = add_record();
	}
	else if(no == 2)
	{
		ret = update_record();
	}
	//else if(no == 3)
	//{
	//	ret = del_record();
	//}
	//else if(no == 4)
	//{
	//	ret = disp_all();
	//
	//}
}

int update_record()
{
	struct member member[20]={0};
	int no;
	char name[100];
	char adress[100];
	char tel[100];
	char mail[100];
	int choice=0;
	int ret;
	int i=0;
	char a[100]="会員名称(漢字,英語)? ";
	char b[100]="住所(漢字,数字50文字)? ";
	char c[100]="電話番号(半角文字-で区切る)? ";
	char d[100]="メールアドレス(半角英数字)? ";
	//入力する変数領域7
    char up_name[50];
    char up_adress[100];
    char up_tel[20];
    char up_mail[50];
    //ファイルから読み込んだ番号
    int rno;  
	
	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no);

	fp = fopen(fname,"r");
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1;
	}
	
	while(feof(fp)==0)
	{
			if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  			{
				if(no==member[i].no)
				{
				   printf("%s\n",member[i].name);
                   scanf("%s\n",member[i].name);
                   printf("%s\n",member[i].adress);
                   scanf("%s\n",member[i].adress);
                   printf("%s\n",member[i].tel);
                   scanf("%s\n",member[i].tel);
                   printf("%s\n",member[i].mail);
                   scanf("%s\n",member[i].mail);
                   printf("%s\n","変更登録しますか?(1:yes 2:no) ");
                   scanf("%d\n",&choice);
				   if(choice==1)
				   {
					   fprintf(fp,"%d,%s,%s,%s,%s",member[i].no,member[i].name,member[i].adress,member[i].tel,member[i].mail);
				   }
				   else if(choice==2)
				   {
						system("cls");
						main();
				   }
				}
			}
			i++;
	}
	fclose(fp);
	printf("%s\n","ファイル書き込みが終わりました\n");
	return 0;
}

現状このようなコードですが、不具合がいくつかあります。

コード:

			   printf("%s\n",member[i].name);
                   scanf("%s\n",member[i].name);
この部分で、2回入力しないと、次のコードに進みません。

コード:

printf("%s\n","変更登録しますか?(1:yes 2:no) ");
                   scanf("%d\n",&choice);
				   if(choice==1)
				   {
					   fprintf(fp,"%d,%s,%s,%s,%s",member[i].no,member[i].name,member[i].adress,member[i].tel,member[i].mail);
				   }
				   else if(choice==2)
				   {
						system("cls");
						main();
				   }
この部分で、choiceで、1か2を選択する前にプログラムが終わってしまいます。
どなたかアドバイスよろしくお願いします。

Re: ファイルデータの更新処理

Posted: 2012年7月05日(木) 11:38
by かずま
taz さんが書きました: 現状このようなコードですが、不具合がいくつかあります。

コード:

			   printf("%s\n",member[i].name);
                   scanf("%s\n",member[i].name);
この部分で、2回入力しないと、次のコードに進みません。
scanf の書式に "\n" を書いてはいけません。

Re: ファイルデータの更新処理

Posted: 2012年7月05日(木) 13:02
by taz
ありがとうございます。問題を解決することが出来ました。

しかし、fp = fopen(fname,"a"); の部分で上書き禁止にして、

fprintf(fp,"%d,%s,%s,%s,%s",no,name,adress,tel,mail); でファイルに書き込みを行っているのですが、

2行のデータが1行続きのデータになり、なにやらおかしたデータになってしまいます。

例)1,takesihta,明石市,090-3222-1234,a@yahoo.co.jp,takeuti,神戸市,090-3245-3221,v@yahoo.co.jp

Re: ファイルデータの更新処理

Posted: 2012年7月05日(木) 19:54
by taz
色々と質問させていただきましたが、なんとか解決しました。ありがとうございました。
最終コード↓

コード:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *fp;
char *fname = "comma.csv";

struct member {
	int no;
	char name[20];
	char adress[20];
	char tel[20];
	char mail[20];
};

main()
{
	int no;
	int ret;
	printf("---会員管理システムメニュー---\n\n");
	printf("1.新規登録\n");
	printf("2.変更\n");
	printf("3.削除\n");
	printf("4.一覧表示\n");
	printf("No? ");
	ret=scanf("%d",&no);
	if(no == 1)
	{
		ret = add_record();
	}
	else if(no == 2)
	{
		ret = update_record();
	}
	//else if(no == 3)
	//{
	//	ret = del_record();
	//}
	//else if(no == 4)
	//{
	//	ret = disp_all();
	//
	//}
}

int add_record()
{
	int no;
	char name[100];
	char adress[100];
	char tel[100];
	char mail[100];
	int choice;

	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no);
	printf("会員名称(漢字,英語)? ");
	scanf("%s",&name);
	printf("住所(漢字,数字50文字)? ");
	scanf("%s",&adress);
	printf("電話番号(半角文字-で区切る)? ");
	scanf("%s",&tel);
	printf("メールアドレス(半角英数字)? ");
	scanf("%s",&mail);
	printf("新規登録しますか?(1:yes 2:no)? ");
	scanf("%d",&choice);

	if(choice == 2)
	{
		system("cls");
		main();
	}

	fp = fopen(fname,"a");
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1;
	}

	fprintf(fp,"%d,%s,%s,%s,%s\n",no,name,adress,tel,mail);


	fclose(fp);

	printf("%sファイル書き込みが終わりました\n",fname);
	return 0;
}

int update_record()
{
	struct member member[20]={0};
	int no;
	char name[100];
	char adress[100];
	char tel[100];
	char mail[100];
	int choice=0;
	int ret;
	int i=0;
	int g=0;
	char a[100]="会員名称(漢字,英語)? ";
	char b[100]="住所(漢字,数字50文字)? ";
	char c[100]="電話番号(半角文字-で区切る)? ";
	char d[100]="メールアドレス(半角英数字)? ";
	//入力する変数領域7
    char up_name[50];
    char up_adress[100];
    char up_tel[20];
    char up_mail[50];
    //ファイルから読み込んだ番号
    int rno;  
	
	printf("\n会員番号(0-10数値)? ");
	scanf("%d",&no);

	fp = fopen(fname,"r");
	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",fname);
		return -1;
	}
	
	while(feof(fp)==0)
	{
			if((fscanf(fp,"%d,%[^,],%[^,],%[^,],%s",&(member[i].no),member[i].name,member[i].adress,member[i].tel,member[i].mail)) != EOF)
  			{
				if(no==member[i].no)
				{
				   printf("%s\n",member[i].name);
                   scanf("%s",member[i].name);
                   printf("%s\n",member[i].adress);
                   scanf("%s",member[i].adress);
                   printf("%s\n",member[i].tel);
                   scanf("%s",member[i].tel);
                   printf("%s\n",member[i].mail);
                   scanf("%s",member[i].mail);
                   printf("%s\n","変更登録しますか?(1:yes 2:no) ");
                   scanf("%d",&choice);
				   
				   if(choice==2)
				   {
						system("cls");
						main();
				   }
				}
			}
			i++;
	}
	fclose(fp);
	fp = fopen(fname,"w");
	fprintf(fp,"%d,%s,%s,%s,%s\n",member[0].no,member[0].name,member[0].adress,member[0].tel,member[0].mail);
	fclose(fp);
	fp = fopen(fname,"a");
	g=1;
	while(g<i-1)
	{
		
		fprintf(fp,"%d,%s,%s,%s,%s\n",member[g].no,member[g].name,member[g].adress,member[g].tel,member[g].mail);
		g++;
	}
	fclose(fp);
	printf("%s","ファイル書き込みが終わりました");
	return 0;
}