为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C语言运用文件和结构体的一个例子(简易通讯录的实现)

2013-08-25 6页 doc 48KB 71阅读

用户头像

is_264723

暂无简介

举报
C语言运用文件和结构体的一个例子(简易通讯录的实现) /*: 1.该程序建立一个通讯录文件,可存放有姓名、电话号码、住址信息, 并且有通信录输出、查找、添加、修改及删除功能。 2.请先阅读程序,依照现有函数,完成modify()和output()函数。 3.本程序缺陷,通讯录保存信息较简单;另外,每次运行程序,都重新建立通信录; 请修改程序,增加email地址信息;修改程序,使之可以对现有通信录文件操作。 */ #include #include struct person { char name[8]; char tel[15]; ...
C语言运用文件和结构体的一个例子(简易通讯录的实现)
/*: 1.该程序建立一个通讯录文件,可存放有姓名、电话号码、住址信息, 并且有通信录输出、查找、添加、修改及删除功能。 2.请先阅读程序,依照现有函数,完成modify()和output()函数。 3.本程序缺陷,通讯录保存信息较简单;另外,每次运行程序,都重新建立通信录; 请修改程序,增加email地址信息;修改程序,使之可以对现有通信录文件操作。 */ #include #include struct person { char name[8]; char tel[15]; char addr[50]; char em[20]; }; //filename数组存放通信录文件名 char filename[25]; FILE *fp; //主要函数原型声明 void creat(); void output(); void search(); void append(); void modify(); void delete(); void exit(); main() { int m;char k; printf("\n请输入你要打开的通讯录文件名:"); gets(filename); if((fp=fopen(filename,"r"))==NULL) { printf("\n当前没有此通讯录文件,现在是否执行创建(Y/N)?:"); scanf("%c",&k);getchar();//用于接收输入后的回车键,下边的delete函数同理 while(k!='Y'&&k!='N'&&k!='y'&&k!='n') {printf("\n输入有误,请再次输入一个值:");scanf("%c",&k);getchar();} if(k=='Y'||k=='y') {creat();}//当选择了Y或y时执行创建函数 else if(k=='N'||k=='n') {printf("\n由于你选择了退出,现在程序即将关闭!\n");exit();} } else //当文件存在时把通讯录信息输出,并且提示操作 { printf("\n你要打开的通讯录文件%s已存在,现在可直接对其操作*^_^*\n",filename); printf("\n通讯录文件%s现已有的通讯信息:\n",filename);output(); printf("\n请根据提示选择1~5对通讯录文件进行操作*^_^*\n"); } while(1) { printf("\n添加,请按1"); printf("\n查找,请按2"); printf("\n修改,请按3"); printf("\n删除,请按4"); printf("\n输出,请按5"); printf("\n退出,请按0\n"); printf("请输入数字1~5:"); scanf("%d",&m);getchar(); while(m<0||m>5) {printf("\n抱歉,您输入的值不是1~5的数字^@@^,请再次输入:");scanf("%d",&m);getchar();} if(m>=0&&m<=5) { switch(m) { case 1: append();break; case 2: search();break; case 3: modify();break; case 4: delete();break; case 5: output();break; case 0: exit(); } printf("\n操作完毕,请再次选择!\n"); } } } /*建立通信录函数creat():功能:建立通信录文件,并连续输入记录,以0结束输入*/ void creat() { struct person one; if((fp=fopen(filename,"w"))==NULL) { printf("\n不能建立通讯簿!"); exit(); } printf("\n成功创建%s通讯录文件,请按提示进行操作*^_^*\n",filename); fprintf(fp,"%-10s%-20s%-25s%-25s\n","姓名","电话号码","住址","电子邮件"); printf("\n请输入每个成员的姓名、电话号码、住址和电子邮件(当成员名是0时结束输入):\n"); scanf("%s",one.name); while(strcmp(one.name,"0")) //当输入的名字不为“0”的时候,执行循环,当名字为“0”时,退出循环 { scanf("%s%s%s",one.tel,one.addr,one.em); fprintf(fp,"%-10s%-20s%-25s%-25s\n",one.name,one.tel,one.addr,one.em); //把输入的信息按指定格式写入文件当中 scanf("%s",one.name); } fclose(fp); } /*输出函数output();通信录中所有通信记录,每行输出一条记录*/ void output() { struct person one; if((fp=fopen(filename,"r"))==NULL) { printf("\n不能打开通讯簿!"); exit(); } printf("\n\n%40s\n","< 通 讯 簿 >"); while(!feof(fp))//当文件未结束时,逐条读取文件信息并输出 { fscanf(fp,"%s%s%s%s\n",one.name,one.tel,one.addr,one.em); printf("%-10s%-20s%-25s%-25s",one.name,one.tel,one.addr,one.em); } fclose(fp); } /*通讯录添加函数*/ void append() { struct person one; if((fp=fopen(filename,"a"))==NULL) { printf("\n不能打开通讯簿!"); exit(); } printf("\n请输入添加的姓名:"); scanf("%s",one.name); printf("请输入电话号码:"); scanf("%s",one.tel); printf("请输入住址:"); scanf("%s",one.addr); printf("请输入电子邮件:"); scanf("%s",one.em); fprintf(fp,"%-10s%-20s%-25s%-25s\n",one.name,one.tel,one.addr,one.em); printf("\n你添加的信息:\n"); printf("%-10s%-20s%-25s%-25s\n","姓名","电话号码","住址","电子邮件"); printf("%-10s%-20s%-25s%-25s\n",one.name,one.tel,one.addr,one.em); fclose(fp); } /*通讯录查找函数*/ void search() { int flag=0; char namekey[8]; struct person one; printf("\n请输入你要查找的姓名:"); scanf("%s",namekey); if((fp=fopen(filename,"rb"))==NULL) { printf("\n不能打开通讯簿!"); exit(); } while(!feof(fp)) { fscanf(fp,"%s%s%s%s\n",one.name,one.tel,one.addr,one.em); if(!strcmp(namekey,one.name)) { printf("\n已查到,记录为:"); printf("\n%-10s%-18s%-25s%-25s",one.name,one.tel,one.addr,one.em); flag=1; } } if(!flag) printf("\n对不起,通讯簿中没有此人的记录。"); fclose(fp); } /*通讯录个人信息修改函数*/ void modify() { int flag=0; long offset; char namekey[8]; struct person one; printf("\n请输入姓名:"); scanf("%s",namekey); if((fp=fopen(filename,"r+"))==NULL) { printf("\n不能打开通讯簿!"); exit(); } while(!feof(fp)) { offset=ftell(fp);//把文件位置指针的当前值赋给offset fscanf(fp,"%s%s%s%s\n",one.name,one.tel,one.addr,one.em); if(!strcmp(namekey,one.name)) {flag=1;break;} } if(flag) { printf("已查到,当前修改在通讯录的第%ld位,记录为:",(ftell(fp)/(sizeof(struct person)))); //把通讯人的位置显示出来 printf("\n%-10s%-18s%-25s%-25s",one.name,one.tel,one.addr,one.em); printf("\n请输入新姓名、电话号码及住址:\n"); scanf("%s%s%s%s",one.name,one.tel,one.addr,one.em); fseek(fp,offset,SEEK_SET); //改变文件位置指针的位置,其中SEEK_SET代着0,即是把文件位置指针指到所找到的通讯人处 fprintf(fp,"%-10s%-20s%-25s%-25s\n",one.name,one.tel,one.addr,one.em); //把新的通讯录信息输入文件当中 } else printf("\n对不起,通讯簿中没有此人的记录。"); fclose(fp); } /*通讯录个人信息删除函数*/ void delete() { int k=0;char m; long offset; char namekey[8]; struct person one; printf("\n请输入姓名:"); scanf("%s",namekey); if((fp=fopen(filename,"r+"))==NULL) { printf("\n不能打开通讯簿!"); exit(); } while(!feof(fp)) { offset=ftell(fp); fscanf(fp,"%s%s%s%s\n",one.name,one.tel,one.addr,one.em); if(!strcmp(namekey,one.name)) {k=1;break;} } if(k) { printf("\n已查到,将要删除的记录为:"); printf("\n%-10s%-18s%-25s%-25s",one.name,one.tel,one.addr,one.em); printf("\n确实要删除?(Y/N):"); getchar();scanf("%c",&m); while(m!='Y'&&m!='N'&&m!='y'&&m!='n') {printf("\n选择有误,请重新输入新的值:");getchar();scanf("%c",&m);} if(m=='Y'||m=='y') { fseek(fp,offset,SEEK_SET);fprintf(fp,"%-10s%-20s%-25s%-25s\n","","","",""); //把空信息输入,替代原有的信息,以达到删除的目的 printf("\n已经把记录删除掉*Y_Y*\n"); } else if(m=='n'||m=='N') {printf("\n谢谢天,谢谢地,你居然没有删我*@@*\n");} } else printf("\n对不起,通讯簿中没有此人的记录。"); fclose(fp); }
/
本文档为【C语言运用文件和结构体的一个例子(简易通讯录的实现)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索