c语言中系统自动打开的文件,怎么用C语言向一个TXT文件中每输入一个结构体,然后自动换行...

已结贴√

问题点数:5 回复次数:3

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

怎么用C语言向一个TXT文件中每输入一个结构体,然后自动换行

#include

#include

#include

#include

struct record

{

char name[20]; //姓名

char street[20]; //街道

char city[20]; //城市

char eip[20]; //邮编

char state[20]; //国家

}people[500];//500个记录,可修改

struct pnode

{

record data;

};

typedef  pnode * linklist;

linklist l;//链表

int len=0;//链表长度

FILE *fp; //文件指针

void mainmenu();//主菜单

void searchmenu();//查询菜单

void enter();//添加新纪录

void search();//按条件搜索记录

void display();//显示全部记录

void load();//载入文件内容

void save();//写入文件

void del();//删除记录

void main() //主函数

{

load();

while (1)

mainmenu(); //进入主菜单,有非法输入仍停留在主菜单

}

void load()//装载已有文件信息到内存(数组)中

{

if((fp=fopen("通讯录信息.txt","rb"))==NULL) //以只读二进制(rb)的方式打开“通讯录信息.txt” 接着把返回值给fp 如果返回值时NULL说明文件打开失败了

{

printf("\n\t\t通讯录文件不存在");

if ((fp=fopen("通讯录信息.txt","wb"))==NULL) //如果以只写、二进制(wb)的方式“通讯录信息.txt” 接着把返回值给fp 如果返回值时NULL说明文件打开失败了

{

printf("\n\t\t建立失败");

exit(0);

}

else

{

printf("\n\t\t通讯录文件已建立");

printf("\n\t\t按任意键进入主菜单");

getch();

return;

}

exit(0);

}

//读取文件功能部分

fseek(fp,0,2); //移动文件的位置指针到文件的末尾

if (ftell(fp)>0) //如果文件的长度大于0  表示文件中有数据

{

rewind(fp);//这是一个反绕函数,使得文件的位置指针定位在文件的开头

for(

len=0;

!feof(fp)&&fread(&people[len],sizeof(struct record),1,fp);

len++);//从文件中读取数据,并统计读出数据的个数,每次从文件中读取一个数据,一直读到文件的末尾

fprintf(fp,"\n");

printf("\n\t");//printf("\n\t");printf("\n\t");

printf("\n\t\t文件读取成功");

printf("\n\t");

printf("\n\t\t按任意键返回主菜单");

getch(); //文件中读取一个字符

return;

}

printf("\n\t\t文件导入成功");

printf("\n\t\t通讯录文件中无任何纪录");

printf("\n\t\t按任意键返回主菜单");

getch();

return;

}

void mainmenu()//主菜单

{

char ch;

system("cls");

printf("\n");printf("\n");printf("\n");

printf("\n\t\t***********************************************");

printf("\n\t\t**      欢 迎 进 入 通 讯 录 系 统           **");

printf("\n\t\t**             1--新建联系人                 **");

printf("\n\t\t**             2--查找联系人                 **");

printf("\n\t\t**             3--删除联系人                 **");

printf("\n\t\t**             4--保存联系人                 **");

printf("\n\t\t**             5--退出程序                   **");

printf("\n\t\t***********************************************");

printf("\n\t\t\t请选择:");

printf("%c ",ch=getch());

switch (ch)

{

case '1':enter();break;

case '2':searchmenu();break;

case '3':del();break;

case '4':save();break;

case '5':exit(0);

default:mainmenu();

}

}

void enter()//添加新纪录

{

printf("\n\t\t**************** 请输入学生信息 ****************\n");

printf("\n\t\t姓名:");

scanf("%s",&people[len].name);

printf("\n\t\t街道:");

scanf("%s",&people[len].street);

printf("\n\t\t城市:");

scanf("%s",&people[len].city);

printf("\n\t\t邮编:");

scanf("%s",&people[len].eip);

printf("\n\t\t国家:");

scanf("%s",&people[len].state);

len++;

printf("\n\t\t是否继续添加?(y/n):");

if (getch()=='y')

enter();

return;

}

void searchmenu()//查询菜单

{

char ch;

system("cls");

printf("\n\t\t************************************************");

printf("\n\t\t**                 查询菜单                   **");

printf("\n\t\t**              1--显示所有信息               **");

printf("\n\t\t**              2--按姓名查询                 **");

printf("\n\t\t**              3--返回主菜单                 **");

printf("\n\t\t************************************************");

printf("         \n\t\t    请选择:");

printf("%c",ch=getch());

switch (ch)

{

case '1':display();break;

case '2':search();break;

case '3':mainmenu();break;

}

}

void search()

{

printf("\n\t\t***************** 按姓名查找 *******************");

char name[20];

printf("\n\t\t请输入姓名:");

scanf("%s",name);

printf(" 查询到的信息:\n");

printf(" %-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");//格式控制输出

printf(" -----------------------------------------------------------------------------\n");

for (int i=0;i

{

if(strcmp(name,people[i].name)==0)//如果people[i].name和name相同?

printf(" %-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);

// if (i+1

}

printf(" -----------------------------------------------------------------------------\n");

printf("\n\t\t按任意键返回查询菜单");

getch();

searchmenu();

}

void display()//显示所有纪录

{

int i;

system("cls"); //执行控制台命令‘清屏’,就是cmd下的cls,清除所有显示信息

if(len!=0)

{

printf("\n\t\t*************** 以下为通讯录所有信息************\n\n");

printf(" %-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");

printf(" -----------------------------------------------------------------------------\n");

for (i=0;i

{

printf(" %-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);

if (i+1

}

printf(" -----------------------------------------------------------------------------\n");

}

else

printf("\n\t\t通讯录中无任何纪录");

printf("\n\t\t按任意键返回查询菜单:");

getch();

searchmenu();

}

void del() //删除纪录

{

int a=0,i,j,findmark; //findmark为查找结果标志

//int findmark=0,delmark=0;

char name[20];

printf("\n\t\t请输入要删除学生姓名:");

scanf("%s",name);

for (i=a;i

{

if (findmark=strcmp(people[i].name,name)==0) //找到一条符合条件的记录

{

//findmark++;

printf("\n\t\t以下是您找到的一条符合记录:\n");

printf(" %-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");

printf(" -----------------------------------------------------------------------------\n");

printf(" %-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);   printf(" -----------------------------------------------------------------------------\n");

printf("\n\t\t是否删除?(y/n)");

if (getch()=='y')

{

for (j=i;j

people[j]=people[j+1];

len--;

i--;

//delmark++;

printf("\n\t\t删除成功");

if((i+1)

{

printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)"); //是否删除同名纪录

if (getch()=='y')

{

a=i;

continue; //删除上一条记录之后搜索是否有同名纪录

}

}

} //endif

if((i+1)

{

printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)"); //不删前一条纪录,删当前纪录

if (getch()=='y')

{

a=i;

continue;

}

}

} //endif

else

continue;

} //endfor

if(!findmark)//没有找到任何符合条件的记录

printf("\n\t\t没有符合条件的记录!");

printf("\n\t\t是否继续删除?(y/n)"); //无同名纪录,是否继续删除其他纪录

if (getch()=='y')

del(); //继续删除其他纪录

save();

}

void save()//写入文件

{

int i;

if ((fp=fopen("通讯录信息.txt","wb"))==NULL)

{

printf("\n\t\t文件打开失败");

}

for (i=0;i

{

if (fwrite(&people[i],sizeof(struct record),1,fp)!=1)

printf("\n\t\t写入文件错误!\n");

}

fclose(fp); //关闭文件指针

printf("\n\t\t\t\t通讯录文件已保存\n\t\t\t\t按任意键继续...");

getch();

return;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值