请问以下文件与链表结合的代码该怎么写才能实现文件某一行数据的修改?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#define LEN sizeof(struct Member)
struct Member
{
int memnum;
char name[50];
long long idnum;
long long telnum;
float remain;
struct Member *next;
};
void SaveNode( struct Member *head, char *filename)
{
struct Member *p;
if (head ==NULL)
{
printf("print nothing,data is NULL\n");
return;
}
FILE *fp;
fp=fopen(filename,"w");
if (fp==NULL)
{
printf("error to write !");
return;
}
p=head;
do
{
fprintf(fp,"%d,%lld,%lld,%.2f,%s\n", p->memnum,p->idnum,p->telnum,p->remain, p->name);
p=p->next;
}
while(p !=NULL);
printf("save node datas to <%s>....Ok\n",filename);
fclose(fp);
}
void PrintNode(struct Member *head)
{
struct Member *p=head;
int n=0;
if (head==NULL)
{
printf("\n List is NULL\n");
return;
}
do
{
printf("%2d---%d,%lld,%lld,%.2f,%s\n", ++n,p->memnum,p->idnum,p->telnum,p->remain, p->name);
p=p->next;
}
while(p !=NULL);
}
void PrintNode2(struct Member *head,long thenum)
{
struct Member *p=head;
int n=0;
if (head==NULL)
{
printf("\n List is NULL\n");
return;
}
do
{
if(p->memnum==thenum) printf("%2d---%d,%lld,%lld,%.2f,%s\n", ++n,p->memnum,p->idnum,p->telnum,p->remain, p->name);
p=p->next;
}
while(p !=NULL);
}
struct Member *AddNewNode(struct Member *head,struct Member *newNode)
{
struct Member *p=head;
if (head==NULL)
{
head=newNode;
newNode->next=NULL;
return head;
}
while (p->next!=NULL)
{
p=p->next;
}
p->next=newNode;
newNode->next=NULL;
return head;
}
struct Member *AddNewNodeFromFile(struct Member *head,char *filename)
{
struct Member *p;
FILE *fp;
printf("Get data from file: %s...\n",filename);
fp=fopen(filename,"r");
if (fp==NULL)
{
printf("open file error!\n");
return head;
}
p=( struct Member *) malloc(LEN);
while(fscanf(fp,"%d,%lld,%lld,%.2f,%s",&p->memnum,&p->idnum,&p->telnum,&p->remain,p->name)!=EOF)
{
head=AddNewNode(head,p);
p=( struct Member *) malloc(LEN);
}
fclose(fp);
return head;
}
struct Member *AddNewNodeFromKeyboard(struct Member *head)
{
struct Member *p;
for (;;)
{
p=( struct Member *) malloc(LEN);
printf("input new datas (End:0,0):\n");
scanf("%d,%lld,%lld,%.2f,%s",&p->memnum,&p->idnum,&p->telnum,&p->remain,p->name);
if (p->memnum==0)
{
free(p);
break;
}
head=AddNewNode(head,p);
}
return head;
}
struct Member *FreeNodeSpace(struct Member *head)
{
struct Member *p1,*p2;
p1=head;
while(p1!=NULL)
{
p2=p1->next;
free(p1);
p1=p2;
}
return NULL;
}
void DisplayMenu()
{
printf("\n=====[ver 1.0 Menu]=============\n");
printf("[A]-Display Current all Nodes\n");
printf("[B]-Add New Node Datas\n");
printf("[C]-reLoad Node Datas From File\n");
printf("[D]-Save Node Datas to File\n");
printf("[E]-Display a Node\n");
printf("[Q]-Quit\n");
printf("=================================\n");
}
int main(void)
{
struct Member *nodehead=NULL;
char readFilename[56]="C:\\D C program\\address of homework\\MemberQuantity.txt";
char saveFilename[30]="";
long thenum;
system("cls");
nodehead=AddNewNodeFromFile(nodehead,readFilename);
PrintNode(nodehead);
for(;;)
{
DisplayMenu();
switch(getch())
{
case 'A':
case 'a':
PrintNode(nodehead);
break;
case 'B':
case 'b':
nodehead=AddNewNodeFromKeyboard(nodehead);
PrintNode(nodehead);
break;
case 'C':
case 'c':
nodehead= FreeNodeSpace(nodehead);
nodehead=AddNewNodeFromFile(nodehead,readFilename);
PrintNode(nodehead);
break;
case 'D':
case 'd':
printf("input the filename (data.txt):");
gets(saveFilename);
if (strlen(saveFilename)==0)strcpy(saveFilename,readFilename);
SaveNode(nodehead, saveFilename);
break;
case 'E':
case 'e':
printf("Input the num:");
scanf("%ld",&thenum);
PrintNode2(nodehead,thenum);
break;
case 'Q':
case 'q':
printf("\nbye!\n");
return(0);
}
fflush(stdin);
}
return 0;
}