📄 ii.txt
字号:
printf("\n修改同学地址,请按3");
printf("\n删除原来地址,请按4");
printf("\n输出所有地址,请按5");
printf("\n退出本通讯录,请按0\n");
scanf("%d",&m);
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(0);/*退出运行程序*/
}
printf("\n\n操作完毕,请再次选择!");
}
else
printf("\n\n选择错误,请再次选择!");
}
}
/********************************进入菜单函数*********************/
void creat()
{
struct person one;
printf ("\n*********湘潭大学兴湘学院05计算机**");
printf("\n请输入通讯簿名: *");
printf("\n**********作者:王平喜*************:");
scanf("%s",filename);
if((fp=fopen(filename,"rb+"))==NULL)/*用读写打开一个二进制文件,同时检验通讯录中是否存在此文件*/
{
printf("\n请输入准确的通讯录名");
printf("\n请重新输入");
exit(0);/*退出此程序*/
}
fprintf(fp,"%-10s%-15s%-15s%-30s\n","姓名","学号","电话号码","住址");/*把数据输出到fp所指定的文件中*/
printf("\n请输入姓名、电话号码及住址(后加0可进入选择)或者按“0”直接进入选择\n");
scanf("%s",one.name);
while( strcmp(one.name,"0"))/*将输入的与数据比较,若正确,返回0*/
{
scanf("%s%s%s",one.number,one.tel,one.addr);
fprintf(fp,"%-10s%-12s%-12s%-30s\n",one.name,one.number,one.tel,one.addr);/*将输入的数据输出到fp所指文件中*/
scanf("%s",one.name);
}
fclose(fp);/*关闭所指文件,释放文件缓冲区,并返回值*/
}
/***********************输出函数**********************************/
void output()
{
struct person one;
if((fp=fopen(filename,"r"))==NULL)/*用输入打开一个文本文*/
{
printf("\n不能打开通讯簿!");
exit(0);
}
printf("\n\n%12s\n","通 讯 簿");
while(!feof(fp))/*检验fp所指文件是否结束,此为一个循环语句*/
{
fscanf(fp,"%s%s%s%s\n",one.name,one.number,one.tel,one.addr);/*从fp所指文件中读出数据*/ printf("\n%-10s%-15s%-15s%-30s\n",one.name,one.number,one.tel,one.addr);/*输出上面读出数据*/
}
fclose(fp);/*关闭所指文件,释放文件缓冲区,并返回值*/
}
/*****************添加函数*******************************/
void append()
{
struct person one;
if((fp=fopen(filename,"a"))==NULL)/*向二进制文本尾追加数据*/
{
printf("\n不能打开通讯簿!");
exit(0);
}
printf("\n请输入添加的姓名、电话号码及住址\n");
scanf("%s%s%s%s",one.name,one.number,one.tel,one.addr); fprintf(fp,"%-10s%-12s%-12s%-30s\n",one.name,one.number,one.tel,one.addr);
fclose(fp);
}
/*****************查找函数********************************/
void search()
{
int k=0;
char namekey[8];
struct person one;
printf("\n请输入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)/*为输入打开一个二进制文件*/
作者:王平喜 2006-11-29 11:29 回复此发言
--------------------------------------------------------------------------------
3 C程序课程设计--通讯录
{
printf("\n不能打开通讯簿!");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s\n",one.name,one.number,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
printf("\n\n恭喜!记录为:\n");
printf("\n%-10s%-12s%-12s%-30s\n","姓名","学号","电话号码","住址");
printf("\n%-10s%-12s%-12s%-30s",one.name,one.number,one.tel,one.addr);
k=1;
}
}
if(!k)
printf("\n\n对不起,通讯簿中没有此人的记录。");
fclose(fp);
}
/****************删除函数**********************************/
void Delete()
{
int m,k=0,flag;
long offset1;/*定义一个长整型数据*/
char namekey[8], valid[4];
struct person one;
printf("\n请输入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)/*用读/写打开一个二进制文件*/
{
printf("\n不能打开通讯簿!");
exit(0);
}
while(!feof(fp))
{
offset1=ftell(fp);/*返回fp所指向的文件中的读写位置*/
fscanf(fp,"%s%s%s%s\n",one.name,one.number,one.tel,one.addr);/*从fp指定的文件将输入数据送到指定单元*/
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n恭喜!已查到,记录为:");
printf("\n%-10s%-12s%-12s%-30s","姓名","学号","电话号码","住址");
printf("\n%-10s%-12s%-12s%-30s\n",one.name,one.number,one.tel,one.addr);
printf("\n确实要删除?删除请按“1”、不删除请按“0”:");
scanf("%d",&m);
if(m)
{
fseek(fp,offset1,SEEK_SET);/*将fp所指向文件的位置指针移到以SEEK-SET为基准,以offset1为位移量的位置*/
fprintf(fp,"%-10s%-12s%-12s%-30s\n","","","","");
}
}
else printf("\n对不起,通讯簿中没有此人的记录。");
fclose(fp);
}
/**********************修改函数***************************/
void modify()
{
int m,k=0;
long offset;
char namekey[8];
struct person one;
printf("\n请输入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)/*用读/写打开一个二进制文件*/
{
printf("\n不能打开通讯簿!");
exit(0);
}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s%s\n",one.name,one.number,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n恭喜!已查到,记录为:\n");
printf("\n%-10s%-12s%-12s%-30s","姓名","学号","电话号码","住址");
printf("\n%-10s%-12s%-12s%-30s\n",one.name,one.number,one.tel,one.addr);
printf("\n请输入新姓名、学号、电话号码、住址:");
scanf("%s%s%s%s",one.name,one.number,one.tel,one.addr);
fseek(fp,offset,SEEK_SET);/*将fp所指向文件的位置指针移到以SEEK-SET为基准,以offset为位移量的位置*/
printf("%ld",ftell(fp)); fprintf(fp,"%-10s%-12s%-12s%-30s\n",one.name,one.number,one.tel,one.addr);
}
else
printf("\n对不起,通讯簿中没有此人的记录。");
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -