亲 谁给帮忙帮我这程序写个读取文件的函数啊? 急啊。。。各路大神帮帮忙啊
#include <stdio.h>#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
typedef struct node //定义单链表
{
char name[10];
char tel[11];
struct node *next;
}students;
void ADD(students *S); //增加数据函数
void SAVE1(students *S); //保存函数1
void SAVE2(students *S); //保存函数2
void DEL(students *S);//删除函数
void SEARCH(students *S);//搜索主函数
void SEARCH_NAME(students *S);//搜索子函数
void SEARCH_TEL(students *S);//搜索子函数
void help();
int num;//程序中要用到的数据的个数
int main()
{
int choice;//存储选择的项目
students *point;
printf("\t****************欢迎使用通讯录***********\n");
printf("\t\t\t1:增加记录\n");
printf("\t\t\t2:保存记录\n");
printf("\t\t\t3:删除记录\n");
printf("\t\t\t4:查询记录\n");
printf("\t\t\t5:结束运行\n");
printf("\t\t\t6:帮助\n");
printf("请输入数字进行选择:\n");
while(1)
{
scanf("%d",&choice);
switch(choice)//选择项目
{
case 1: ADD(point) ; break;
case 2: SAVE1(point); break;
case 3: DEL(point); break;
case 4: SEARCH(point);
printf("请输入数字进行选择主菜单项:\n");break;
case 5: printf("谢谢使用,再见\n");
exit(0); break;
case 6: help(); break;
default: printf("输入错误!重新输入!\n");break;
}
}
return 0;
}
void ADD(students *S)
{
students *r,*s;
FILE *fp,*fp2,*fp3;
char c,d;
int i;//计数器
S=(students *)malloc(sizeof(students));//创建头结点
if(S==NULL)
{
printf("创建头结点失败,程序返回主菜单!\n");
return ;
}//创建失败,程序返回
S->next=NULL;
r=S;
printf("请输入要添加的数据的个数:\n");
scanf("%d",&num);
for(i=0;i<num;i++)
{
s=(students *)malloc(sizeof(students));//创建新结点 分配空间
printf("输入姓名:\t");//存储数据
scanf("%s",s->name);
printf("输入电话号码:\t");
scanf("%s",s->tel);
}
r->next=NULL;
getchar();
printf("需要存储吗?(y/n)\n");
scanf("%c",&c);
if(c=='y')
{
fp=fopen("通讯录.txt","r+");
if(fp==NULL)
{
getchar();
printf("没有这个文件,需要创建吗?(y/n)\n");
scanf("%c",&d);
if(d=='y')
{
printf("正在创建文件...\n");
fp2=fopen("通讯录.txt","w+");
fclose(fp2);
}
else
{
printf("没有这个文件,保存出错,程序正在返回\n");
return ;
}
}
printf("正在保存,请稍后...\n");
fp3=fopen("通讯录.txt","r+");
fprintf(fp3,"%s\t%s\t\n","姓名","电话号码");
r=S;
for(i=0;i<num;i++)
{
r=r->next;
fprintf(fp3,"%s\t%s\t\n",r->name,r->tel);
}
fclose(fp3);
printf("保存成功\n");
}
printf("按任意键返回主菜单重新选择...\n");
getchar();
system("cls");//清屏
printf("\t\t\t1:增加记录\n");
printf("\t\t\t2:显示记录\n");
printf("\t\t\t3:删除记录\n");
printf("\t\t\t4:查询记录\n");
printf("\t\t\t5:结束运行\n");
printf("\t\t\t6:帮助\n");
printf("请输入数字进行选择:\n");
return ;
}
void SAVE1(students *S)//输入数据保存到原链表中
{
int i;//循环控制变量
students *p,*q;
FILE *fp;
p=S;
for(i=0;i<num;i++)
{
p=p->next;
}
if(!(q=(students *)malloc(sizeof(students))))//分配结点空间
{
printf("分配空间失败,程序返回主菜单\n");
return ;
}
else
{
p->next=q;//尾插入原来的链表
q->next=NULL;
num++;//表长加一
printf("输入姓名:\t");
scanf("%s",q->name);
printf("输入电话号码:\t");
fp=fopen("通讯录.txt","w");
fseek(fp,0L,1);
fprintf(fp,"%s\t%s\t\n",q->name,q->tel);
fclose(fp);
}
printf("保存完毕!\n");
printf("按任意键返回主菜单!");
getchar();
system("cls");//清屏
printf("\t\t\t1:增加记录\n");
printf("\t\t\t2:显示记录\n");
printf("\t\t\t3:删除记录\n");
printf("\t\t\t4:查询记录\n");
printf("\t\t\t5:结束运行\n");
printf("\t\t\t6:帮助\n");
printf("请输入数字进行选择:\n");
return ;
}
void DEL(students *S)
{
int i;//记录要删除的数据的位置
int a;
students *p,*q,*r;
p=S;
for(a=0;a<num;a++)
{
p=p->next;
printf("%s\t%s\t\n",p->name,p->tel);
}
printf("请问你要删除第几个?\n");
scanf("%d",&i);
if(i<=0||i>num)//判断输入的值是否有效
{
printf("你输入的值非法,系统将自动返回主菜单\n");
return ;
}
else//i值正确有效
{
q=S;
for(a=0;a<i-1;a++)//找到第i-1个结点
{
q=q->next;
}
r=q->next;//保存第i个结点的位置
q->next=r->next;
free(r);
num--;//表长减一
printf("删除成功,请按任意键返回主菜单\n");
system("cls");//清屏
printf("\t\t\t1:增加记录\n");
printf("\t\t\t2:显示记录\n");
printf("\t\t\t3:删除记录\n");
printf("\t\t\t4:查询记录\n");
printf("\t\t\t5:结束运行\n");
printf("\t\t\t6:帮助\n");
printf("请输入数字进行选择:\n");
}
return ;
}
void SAVE2(students *S)
{
int i;//循环控制变量
students *p,*q;
p=S;
for(i=0;i<num;i++)
{ p=p->next;}
if(!(q=(students *)malloc(sizeof(students))))//分配结点空间
{
printf("分配空间失败,程序返回主菜单\n");
return ;
}
else
{
p->next=q;//尾插入原来的链表
q->next=NULL;
num++;//表长加一
printf("输入姓名:\t");
scanf("%s",q->name);
printf("输入电话号码:\t");
scanf("%s",q->tel);
}
}
void SEARCH(students *S)
{
int num;
printf("\t***********************************************\n");
printf("\t\t\t1:按姓名进行查找\n");
printf("\t\t\t2:按号码进行查找\n");
while(1)
{
scanf("%d",&num);
switch(num)
{
case 1:SEARCH_NAME(S); break;
case 2:SEARCH_TEL(S); break;
default:printf("输入错误!请重新输入!");break;
}
}
}
void SEARCH_NAME(students *S)
{
char search_name[10];//搜索的人名
int i;//循环控制器
int flag;//标记
students *r;//指向头结点
r=S;
printf("请输入你要搜索的人名\n");
scanf("%s",search_name);
for(i=0,flag=0;i<num;i++)
{
r=r->next;
if(strcmp(r->name,search_name)==0)
{
flag=1;
printf("已经找到数据,正在输出\n");
printf("%s\t%s\t\n",r->name,r->tel);
}
}
if(flag==0)
printf("没有找到数据!\n");
printf("查找结束!按任意键返回子菜单!");
getch();
system("cls");
printf("\t***********************************************\n");
printf("\t\t\t按姓名进行查找\n");
}
void SEARCH_TEL(students *S)
{
char search_tel[11];//搜索的电话号码
int i;//循环控制器
int flag;//标记
students *r;//指向头结点
r=S;
printf("请输入你要搜索的电话号码\n");
scanf("%s",search_tel);
for(i=0,flag=0;i<num;i++)
{
r=r->next;
if(strcmp(r->tel,search_tel)==0)
{
flag=1;
printf("已经找到数据,正在输出\n");
printf("%s\t%s\t\n",r->name,r->tel);
}
}
if(flag==0)
printf("没有找到数据!\n");
printf("查找结束!按任意键返回子菜单!");
getch();
system("cls");
printf("\t***********************************************\n");
printf("\t\t\t按姓名进行查找\n");
}
void help()
{
int choice2;
system("cls");
printf( "1: 我的系统出现了什么问题\n");
printf( "2: 怎样删除所有记录\n");
printf( "3: 什么时候有新的版本\n");
printf( "4: 新版本中会有什么\n");
printf( "5: 退出\n");
scanf("%d",&choice2);
switch(choice2) //Menu for help
{
case 1:
printf( "有可执行的方法在目录中核对在通讯录.txt中\n");
printf( "如果它不在那里就永远不在了如果重命名就命名为 通讯录.txt\n");
printf("按回车键继续\n");
getch();
system("cls");
help();
break;
case 2:
printf( "删除文件通讯录.txt\n");
printf("按回车键继续\n");
getch();
system("cls");
help();
break;
case 3:
printf( "等我有创意的时候\n");
printf( "按回车键继续\n");
getch();
system("cls");
help();
break;
case 4:
printf( "我希望增加以下功能\n");
printf( "多用户和口令\n");
printf( "密码 \n");
printf( "删除所有记录\n");
printf( "错误校对\n");
printf( "按回车键继续\n");
getch();
system("cls");
help();
break;
default:
printf( "按回车退出\n");
printf( "按回车键继续\n");
break;
}
}
// Function to ask user to verify intention to delete the node.
各位大神 小妹我初学C语言 各种不懂 各种混乱 周围也是一群菜鸟 束手无策啊!!!求哪位帮帮忙啊