标签:结构 通讯录 etc cells col 修改内容 exit 技术 printf
一. 他人的程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Tel
{
char num[4];
char name[13];
char phone1[25];
char mail[20];
char address[23];
}tel[30];
int size=10;
int main()
{
void add();
void del(struct Tel *p);
void change();
void px();
void search();
int scan();
int save();
int n;
printf("1---加入一个新电话号码\n2---删除一个电话号码\n3---修改功能\n4---排序功能\n5---查询功能\n0---退出\n请选择:");
scanf("%d",&n);
switch(n)
{
case 1:add();break;
case 2:del(tel);break;
case 3:change();break;
case 4:px();break;
case 5:search();break;
case 0: return 0;
default: printf("输入有误");break;
}
system("pause");
return 0;
}
void add()
{
scan();
char name1[20],a[12];
int i;
struct Tel *p=tel;
printf("输入你要添加号码的人的名字");
scanf("%s",name1);
printf("输入你要添加的号码");
scanf("%s",a);
for(i=0;i<size;i++,p++)
{
if(strcmp(name1,p->name)==0)
{
strcat(p->phone1,a);
break;
}
}
if(save())
{
display();
printf("添加成功\n");
}
else
printf("添加失败\n");
fflush(stdin);
}
void del(struct Tel *p)
{
scan();
int i;
char a[20];
printf("请输入你想要删除电话的人名:");
scanf("%s",a);
for(p=tel;p<=tel+size-1;p++)
{
if(strcmp((*p).name,a)==0)
for(i=0;i<12;i++)
p->phone1[i]=‘ ‘;
}
if(save())
{
display();
printf("删除成功\n");
}
else
printf("删除失败\n");
fflush(stdin);
}
/*void display()
{
FILE *fp;
char ch;
char *file_path = "phone.txt";
if((fp=fopen(file_path,"r"))!=NULL)
{
while((ch=fgetc(fp))!=EOF)
printf("%c",ch);
fclose(fp);
}
else
{
printf("error");
exit(0);
}
printf("\n");
}*/
void change()
{
scan();
struct Tel *p=tel;
int n;
char str[30],a[10];
printf("请输入修改者序号:");
scanf("%d",&n);
printf("请输入修改名称:");
scanf("%s",a);
printf("\n");
printf("请输入修改内容:");
scanf("%s",str);
p=p+n-1;
if(n<=size)
{
if(strcmp(a,"name")==0)
{
memset(&p->name,0,sizeof(p->name));
strcpy(p->name,str);
}
else if(strcmp(a,"phone1")==0)
{
memset(&p->phone1,0,sizeof(p->phone1));
strcpy(p->phone1,str);
}
else if(strcmp(a,"mail")==0)
{
memset(&p->mail,0,sizeof(p->mail));
strcpy(p->mail,str);
}
else if(strcmp(a,"address")==0)
{
memset(&p->address,0,sizeof(p->address));
strcpy(p->address,str);
}
else
printf("error\n");
}
else
printf("error\n");
if(save())
{
display();
printf("修改成功\n");
}
else
printf("修改失败\n");
fflush(stdin);
}
void px()
{
void pxtele();
void pxname();
scan();
char s[5];
int n,i;
printf("请选择排序方式(tele/name):");
scanf("%s",s);
printf("\n");
if(strcmp("tele",s)==0)
pxtele();
else if(strcmp("name",s)==0)
pxname();
}
void pxtele()
{
struct Tel t;
int i,j,k;
for(j=0;j<size-1;j++)
{
k=j;
for(i=j+1;i<size;i++)
if(strcmp(tel[i].phone1,tel[k].phone1)<0)
k=i;
if(k!=j)
{
t=tel[j];
tel[j]=tel[k];
tel[k]=t;
}
}
if(save())
{
display();
printf("排序成功\n");
}
else
printf("排序失败\n");
fflush(stdin);
}
void pxname()
{
struct Tel t;
int i,j,k;
for(j=0;j<size-1;j++)
{
k=j;
for(i=j+1;i<size;i++)
if(strcmp(tel[i].name,tel[k].name)<0)
k=i;
if(k!=j)
{
t=tel[j];
tel[j]=tel[k];
tel[k]=t;
}
}
if(save())
{
display();
printf("排序成功\n");
}
else
printf("排序失败\n");
fflush(stdin);
}
void search()
{
void searchname();
void searchphone();
scan();
int n;
printf("1---按姓名查询\n2---按电话查询\n");
scanf("%d",&n);
switch(n)
{
case 1:searchname();break;
case 2:searchphone();break;
default: printf("输入有误");break;
}
}
void searchname()
{
struct Tel *p=tel;
int i,flag;
char str[14];
printf("请输入要查询内容:");
scanf("%s",str);
for(i=0;i<size;i++,p++)
{
if(strcmp(p->name,str)==0)
{
flag=1;
break;
}
else
flag=0;
}
if(flag)
printf("%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->phone1,p->mail,p->address);
else
printf("查询错误!\n");
}
void searchphone()
{
struct Tel *p=tel;
int i,flag;
char str[12];
printf("请输入要查询内容:");
scanf("%s",str);
for(i=0;i<size;i++,p++)
{
if(strcmp(p->phone1,str)==0)
{
flag=1;
break;
}
else
flag=0;
}
if(flag)
printf("%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->phone1,p->mail,p->address);
else
printf("查询错误!\n");
}
int scan()
{
FILE *fp;
struct Tel *p=tel;
int i;
char *file_path = "phone.txt";
fp=fopen(file_path,"r");
if(fp==NULL)
{
printf("文件打开失败\n");
return 0;
}
else
{
for(i=0;i<size;i++,p++)
fscanf(fp,"%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->phone1,p->mail,p->address);
fclose(fp);
return 1;
}
}
int save()
{
struct Tel *p=tel;
FILE *fp;
int i;
char *file_path = "phone.txt";
fp=fopen(file_path,"w+");
if(fp==NULL)
{
printf("文件打开失败\n");
return 0;
}
else
{
for(i=0;i<size;i++,p++)
fprintf(fp,"%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->phone1,p->mail,p->address);
fclose(fp);
return 1;
}
}
二.理解(注释)并增加显示功能(红字):
/*该程序的主要功能为电话号码的增加和删除、显示所有通讯录信息、修改、排序、查询信息等,通讯录的初始信息保存在“phone.txt”中,各个功能的函数通过读写“phone.txt”实现*/
#include <stdio.h> //该程序主要实现通讯录的基本功能
#include <stdlib.h>
#include <string.h>
struct Tel //结构体
{
char num[4];
char name[13];
char phone1[25];
char mail[20];
char address[23];
}tel[30];
int size=10;
void display();
int main() //主函数
{
void add(); //调用各个功能的函数
void del(struct Tel *p);
void change();
void px();
void search();
int scan();
int save();
int n;
printf("1---加入一个新电话号码\n2---删除一个电话号码\n3---显示所有电话号码\n4---修改功能\n5---排序功能\n6---查询功能\n0---退出\n请选择:");
scanf("%d",&n); //输出菜单界面
switch(n) //switch,case语句,实现不同功能的选择
{
case 1:add();break;
case 2:del(tel);break;
case 3:display();break;
case 4:change();break;
case 5:px();break;
case 6:search();break;
case 0: return 0;
default: printf("输入有误");break;
}
system("pause"); //暂停窗口
return 0;
}
void add() //功能1:加入新的电话号码
{
scan();
char name1[20],a[12];
int i;
struct Tel *p=tel;
printf("输入你要添加号码的人的名字");
scanf("%s",name1);
printf("输入你要添加的号码");
scanf("%s",a); //该功能主要实现对已存在的联系人添加其电话号码
for(i=0;i<size;i++,p++)
{
if(strcmp(name1,p->name)==0)
{
strcat(p->phone1,a);
break;
}
}
if(save())
{
display();
printf("添加成功\n");
}
else
printf("添加失败\n");
fflush(stdin);
}
void del(struct Tel *p) //功能2:删除一个电话号码
{
scan();
int i;
char a[20];
printf("请输入你想要删除电话的人名:");
scanf("%s",a);
for(p=tel;p<=tel+size-1;p++) //删除已存在联系人的电话号码
{
if(strcmp((*p).name,a)==0)
for(i=0;i<12;i++)
p->phone1[i]=‘ ‘;
}
if(save())
{
display();
printf("删除成功\n");
}
else
printf("删除失败\n");
fflush(stdin);
}
void display() //调取文件并显示文件中的所有信息
{
FILE *fp;
char ch;
char *file_path = "phone.txt";
if((fp=fopen(file_path,"r"))!=NULL) //打开文件成功
{
while((ch=fgetc(fp))!=EOF)
printf("%c",ch);
fclose(fp);
}
else //打开文件失败
{
printf("error");
exit(0);
}
printf("\n");
}
void change() //修改电话簿中的信息
{
scan();
struct Tel *p=tel;
int n;
char str[30],a[10];
printf("请输入修改者序号:");
scanf("%d",&n);
printf("请输入修改名称:");
scanf("%s",a);
printf("\n");
printf("请输入修改内容:");
scanf("%s",str);
p=p+n-1;
if(n<=size)
{
if(strcmp(a,"name")==0)
{
memset(&p->name,0,sizeof(p->name));
strcpy(p->name,str);
}
else if(strcmp(a,"phone1")==0)
{
memset(&p->phone1,0,sizeof(p->phone1));
strcpy(p->phone1,str);
}
else if(strcmp(a,"mail")==0)
{
memset(&p->mail,0,sizeof(p->mail));
strcpy(p->mail,str);
}
else if(strcmp(a,"address")==0)
{
memset(&p->address,0,sizeof(p->address));
strcpy(p->address,str);
}
else
printf("error\n");
}
else
printf("error\n");
if(save())
{
display();
printf("修改成功\n");
}
else
printf("修改失败\n");
fflush(stdin);
}
void px() //排序
{
void pxtele();
void pxname();
scan();
char s[5];
int n,i;
printf("请选择排序方式(tele/name):");
scanf("%s",s);
printf("\n");
if(strcmp("tele",s)==0) //根据电话号码由小到大排序
pxtele();
else if(strcmp("name",s)==0) //根据名字的首字母排序
pxname();
}
void pxtele()
{
struct Tel t;
int i,j,k;
for(j=0;j<size-1;j++)
{
k=j;
for(i=j+1;i<size;i++)
if(strcmp(tel[i].phone1,tel[k].phone1)<0) //选择排序
k=i;
if(k!=j)
{
t=tel[j];
tel[j]=tel[k];
tel[k]=t;
}
}
if(save())
{
display();
printf("排序成功\n");
}
else
printf("排序失败\n");
fflush(stdin);
}
void pxname()
{
struct Tel t;
int i,j,k;
for(j=0;j<size-1;j++)
{
k=j;
for(i=j+1;i<size;i++)
if(strcmp(tel[i].name,tel[k].name)<0) //选择排序
k=i;
if(k!=j)
{
t=tel[j];
tel[j]=tel[k];
tel[k]=t;
}
}
if(save())
{
display();
printf("排序成功\n");
}
else
printf("排序失败\n");
fflush(stdin);
}
void search() //查询
{
void searchname();
void searchphone();
scan();
int n;
printf("1---按姓名查询\n2---按电话查询\n");
scanf("%d",&n); //输入1,按姓名查询 ;输入2,按电话查询
switch(n)
{
case 1:searchname();break;
case 2:searchphone();break;
default: printf("输入有误");break;
}
}
void searchname() //输入姓名,查询到该姓名的所有信息
{
struct Tel *p=tel;
int i,flag;
char str[14];
printf("请输入要查询内容:");
scanf("%s",str);
for(i=0;i<size;i++,p++)
{
if(strcmp(p->name,str)==0)
{
flag=1;
break;
}
else
flag=0;
}
if(flag)
printf("%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->phone1,p->mail,p->address);
else
printf("查询错误!\n");
}
void searchphone() //输入电话,查询该电话的所有信息
{
struct Tel *p=tel;
int i,flag;
char str[12];
printf("请输入要查询内容:");
scanf("%s",str);
for(i=0;i<size;i++,p++)
{
if(strcmp(p->phone1,str)==0)
{
flag=1;
break;
}
else
flag=0;
}
if(flag)
printf("%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->phone1,p->mail,p->address);
else
printf("查询错误!\n");
}
int scan()
{
FILE *fp;
struct Tel *p=tel;
int i;
char *file_path = "phone.txt";
fp=fopen(file_path,"r"); //读取文件“phone.txt”
if(fp==NULL)
{
printf("文件打开失败\n");
return 0;
}
else
{
for(i=0;i<size;i++,p++)
fscanf(fp,"%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->phone1,p->mail,p->address);
fclose(fp); //关闭“phone.txt”
return 1;
}
}
int save()
{
struct Tel *p=tel;
FILE *fp;
int i;
char *file_path = "phone.txt";
fp=fopen(file_path,"w+"); //改写文件“phone.txt”
if(fp==NULL)
{
printf("文件打开失败\n");
return 0;
}
else
{
for(i=0;i<size;i++,p++)
fprintf(fp,"%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->phone1,p->mail,p->address);
fclose(fp);
return 1;
}
}
三.测试用例:
测试用例ID |
场景 |
测试步骤 |
预期结果 |
备注 |
TC1 |
初始页面显示 |
运行程序 |
页面元素完整,显示与详细设计一致 |
|
TC2 |
加入一个新的电话号码 |
键盘输入1; 其次输入要添加号码者的姓名;最后输入要添加的电话号码 |
成功给指定者添加了新的号码 |
|
TC3 |
删除一个电话号码 |
键盘输入2; 其次输入要删除号码者的姓名;最后输入要删除的电话号码 |
成功删除了指定者的号码 |
|
TC4 |
显示所有的电话号码 |
键盘输入3 |
成功显示所有信息 |
|
TC5 |
修改电话簿中的内容 |
键盘输入4;输入需修改者的序号;输入修改内容(如name);最后输入要修改的信息 |
成功修改指定信息 |
|
TC6 |
根据电话或名字首字母排序 |
键盘输入5; 其次选择按电话或姓名排序 |
成功按照指定方式排序 |
|
TC7 |
查询电话簿中的信息 |
键盘输入6; 其次选择1或2;最后输入要查询的内容 |
成功查询到指定内容 |
|
TC8 |
退出程序 |
键盘输入0 |
成功退出程序 |
|
标签:结构 通讯录 etc cells col 修改内容 exit 技术 printf
原文地址:https://www.cnblogs.com/yangyushang/p/10467933.html