求测试成功通讯录程序
以下是我编写的源代码,可以运行,但是测试的时候有些功能不能实现,求大神指导!
/*通讯录的制作
模块要求:
第一个模块——主函数main()的功能是:根据选单的选项调用各函数,
并完成相应的功能。
第二个模块——Menu()的功能是:显示英文提示选单。
第三个模块——Quit()的功能是:退出选单。
第四个模块——Create()的功能是:创建新的通讯录。
第五个模块——Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。
第六个模块——Find()的功能是:查询某人的信息,如果找到了,
则显示该人的信息,如果未找到,则提示通讯录中没有此
人的信息,并返回选单。
第七个模块——Alter()的功能是:修改某人的信息,
如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
第八个模块——Delete()的功能是:删除某人的信息,
如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。
第九个模块——List()的功能是:显示通讯录中的所有记录。
设计要求:
1) 每条信息至包含 :姓名(NAME )、性别(GENDER)、电话(TEL) 、
城市(CITY)邮编(EIP)几项。
2) 作为一个完整的系统,应具有友好的界面和较强的容错能力*/
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<conio.h>
#define M 100
#define N 100
struct tongxunlu //定义储存学生信息的结构体
{
char name[6];//姓名
char gender[2];//性别
char tel[11];//电话号码
char city[10];//居住城市
char eip[6];//邮编
};
void main()
{
char choose,yes_no;
void Quit();
void manu();
void Create();
void Add();
void Find();
void Alter();
void Delete();
void List();
do
{
manu(); //显示主菜单界面
printf(" ");
choose=getchar();
switch(choose)//根据选择进行相应的操作
{
case'1':Create();break;/*创建*/
case'2':Add();break;/*添加*/
case'3':Find();break;/*查询*/
case'4':Alter();break;/*修改*/
case'5':Delete();break;/*删除*/
case'6':List();break;/*显示*/
case'0':Quit();break;/*退出选单*/
default:printf("\n %c为非法选项!\n",choose);
}
printf("\n 要继续选择吗?(y/n)\n");
do
{
yes_no=getchar();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no!='Y'||yes_no!='y');
}
// 以下是各函数模块
//菜单显示函数manu()
void manu()
{
printf("\n\n\n\n\n");
printf("|---------------------------------------- |\n");
printf(" 请输入编号0—7: \n");
printf("|---------------------------------- |\n");
printf("| 0 Quit --退出选单 |\n");
printf("| 1 Create() --创建信息查询系统 |\n");
printf("| 2 Add() --添加信息查询系统 |\n");
printf("| 3 Find() --查询某人的信息 |\n");
printf("| 4 Alter() --修改某人的信息 |\n");
printf("| 5 Delete() --删除某人的信息 |\n");
printf("| 6 List() --显示通讯录中的所有记录 |\n");
printf("|---------------------------------------- |\n");
}
//0 Quit --退出选单
void Quit()
{char c;
c=getchar();
while(c==0);
system("cls");
printf("\n");
printf("\t 系统已退出!\n");
printf("\t 谢谢使用!! \n");
printf("\n");
}
// 1、Create() --创建信息查询系统
void create()
{
int i=1;
struct tongxunlu temp;
FILE *fp;
fp=fopen("g:\\个人专业学习\\数据结构\\tongxunlu.dat","w+");
if(fp==NULL)
{
printf("\n 打开文件失败!\n");
return;
}
printf("\n 请输入第一个记录:\n");
printf(" 姓名(用#号结束输入):");
do
{
gets(temp.name);
}while(strcmp(temp.name,"")==0);
printf(" 性别(用#号结束输入:)");
gets(temp.gender);
printf(" 电话号码(用#号结束输入:)");
gets(temp.tel);
printf(" 居住城市(用#号结束输入:)");
gets(temp.city);
printf(" 邮编(用#号结束输入:)");
gets(temp.eip);
while(temp.name[0]!='#'&&temp.gender[0]!='#'&&temp.tel[0]!='#'&&temp.city[0]!='#'&&temp.eip[0]!='#')
{
fprintf(fp,"%23s%15s%15s\n",temp.name,temp.gender,temp.tel,temp.city,temp.eip);
i++;
printf("\n 请输入第%d个记录:\n",i);
do
{
gets(temp.name);
}while(strcmp(temp.name,"")==0);
printf(" 性别(用#号结束输入:)");
gets(temp.gender);
printf(" 电话号码(用#号结束输入:)");
gets(temp.tel);
printf(" 居住城市(用#号结束输入:)");
gets(temp.city);
printf(" 邮编(用#号结束输入:)");
gets(temp.eip);
fclose(fp);
}
}
//2 Add() --添加信息查询系统
void Add()
{
char c;
int n=0;
struct tongxunlu temp,record[M],*p;
FILE*fp;
fp=fopen("g:\\个人专业学习\\数据结构\\tongxunlu.dat","r+");
if(fp==NULL)
{
printf("/n打开文件失败!/n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"15%s15%s15%s15%s15%s\n",p->name,p->gender,p->tel,p->city,p->eip);
p++;
n++;
}
fclose(fp);
do
{
printf("\n 请输入新记录的学生姓名:\n ");
do
{
gets(temp.name);
}while(strcmp(temp.name,"")==0);
printf(" 性别(用#号结束输入:)");
gets(temp.gender);
printf(" 电话号码(用#号结束输入:)");
gets(temp.tel);
printf(" 居住城市(用#号结束输入:)");
gets(temp.city);
printf(" 邮编(用#号结束输入:)");
gets(temp.eip);
for(p=record;p<record+n;p++)
if(strcmp(temp.name,p->name)==0)
{
printf("\n 姓名重复需要重新输入吗?(y/n)\n");
do
{
c=getchar();
}while(c!='Y'&&c!='y'&&c!='n'&&c!='N');
putchar('\n');
break;
}
if(p==record+n)
{
*p=temp;
break;
}
}while(c=='y'||c=='Y');
fp=fopen("g:\\个人专业学习\\数据结构\\tongxunlu.dat","r+");
if(fp==NULL)
{
printf("/n打开文件失败!/n");
return;
}
for(p=record;p<record+n;p++)
fprintf(fp,"15%s15%s15%s15%s15%s\n",p->name,p->gender,p->tel,p->city,p->eip);
fclose(fp);
}
// 3 Find() --查询某人的信息
void Find()
{
FILE*fp;
int flag=0,n=0;
char tempname[10];
struct tongxunlu temp;
fp=fopen("g:\\个人专业学习\\数据结构\\tongxunlu.dat","r+");
if(fp==NULL)
{
printf("/n打开文件失败!/n");
return;
}
printf("\n 请输入要查询记录的姓名:");
gets(tempname);
while(feof(fp)==0)
{
fscanf(fp,"15%s15%s15%s15%s15%s\n",&temp.name,&temp.gender,&temp.tel,&temp.city,&temp.eip);
if(strcmp(tempname,temp.name)==0)
{
if(flag==0)
printf(" 姓名 性别 电话号码 居住城市 邮编\n");
printf("15%s15%s15%s15%s15%s\n",temp.name,temp.gender,temp.tel,temp.city,temp.eip);
flag=1;
}
n++;
}
if(n==0)
printf("\n 文中无记录!\n");
else
if(flag==0)
printf("\n文件中无此人!\n");
fclose(fp);
}
//4 Alter() --修改某人的信息
void Alter()
{
char c;
int n; struct tongxunlu *find,temp,record[M],*p;//最多M条记录
FILE*fp;
fp=fopen("g:\\个人专业学习\\数据结构\\tongxunlu.dat","r+");
if(fp==NULL)
{
printf("/n打开文件失败!/n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"15%s15%s15%s15%s15%s\n",&temp.name,&temp.gender,&temp.tel,&temp.city,&temp.eip);
p++;
n++;
}
fclose(fp);
if(n==0)
{
printf("\n文中无记录!\n");
return;
}
printf("\n 请输入需要修改的记录的学生姓名:");
gets(temp.name);
for(p=record;p<record+n;p++);
if(strcmp(temp.name,p->name)==0)
{
find=p;
}
if (p==record+n)
{
printf("/n无此人!/n");
return;
}
do
{
printf("\n 请输入正确的姓名:");
do
{
gets(temp.name);
}while(strcmp(temp.name,"")==0);
printf(" 请输入正确的性别:");
gets(temp.gender);
printf(" 请输入正确的电话号码:");
gets(temp.tel);
printf(" 请输入正确的居住城市:");
gets(temp.city);
printf(" 请输入正确的邮编:");
gets(temp.eip);
for(p=record;p<record+n;p++)
if((strcmp(temp.name,p->name)==0)&&(p!=find))
{
printf("\n 姓名重复,需要重新输入码?(Y/N)");
do
{
c=getchar();
}while(c!='y'&&c!='Y'&&c!='n'&&c!='N');
putchar('\n');
break;
}
if(p==record+n)
{
*find=temp;
break;
}
}while(c=='y'||c=='Y');
fp=fopen("g:\\个人专业学习\\数据结构\\tongxunlu.dat","r+");
if(fp==NULL)
{
printf("/n打开文件失败!/n");
return;
}
for(p=record;p<record+n;p++)
fprintf(fp,"15%s15%s15%s15%s15%s\n",temp.name,temp.gender,temp.tel,temp.city,temp.eip);
fclose(fp);
}
// 5 Delete() --删除某人的信息
void Delete()
{
int n=0;
char tempname[10];
struct tongxunlu record[N],*p,*k;
FILE*fp;
fp=fopen("g:\\个人专业学习\\数据结构\\tongxunlu.dat","r+");
if(fp==NULL)
{
printf("/n打开文件失败!/n");
return;
}
p=record;
while(feof(fp)==0)
{
fscanf(fp,"15%s15%s15%s15%s15%s\n",p->name,p->gender,p->tel,p->city,p->eip);
p++;
n++;
}
fclose(fp);
printf("\n请输入需要删除的学生的姓名:");
gets(tempname);
for(k=record;k<record+n;k++)
if(strcmp(tempname,k->name)==0)
break;
if(k<record+n)
for(p=k;p<k+n-1;p++)
*p=*(p+1);
else
printf("\n无此人!\n");
fp=fopen("g:\\个人专业学习\\数据结构\\tongxunlu.dat","w");
if(fp==NULL)
{
printf("/n打开文件失败!/n");
return;
}
for(p=record;p<record+n-1;p++)
fprintf(fp,"15%s15%s15%s15%s15%s\n",p->name,p->gender,p->tel,p->city,p->eip);
fclose(fp);
}
//6 List() --显示通讯录中的所有记录
void List()
{
int n=0;
struct tongxunlu temp;FILE*fp;
fp=fopen("g:\\个人专业学习\\数据结构\\tongxunlu.dat","r+");
if(fp==NULL)
{
printf("/n打开文件失败!/n");
return;
}
system("cls");
printf(" 姓名 性别 电话号码 居住城市 邮编\n");
while(feof(fp)==0)
{
fscanf(fp,"15%s15%s15%s15%s15%s\n",&temp.name,&temp.gender,&temp.tel,&temp.city,&temp.eip);
printf("15%s15%s15%s15%s15%s\n",temp.name,temp.gender,temp.tel,temp.city,temp.eip);
n++;
}
if(n==0)
printf("文件中无记录!\n");
else printf("文件中共有%d个记录!\n",n);
fclose(fp);
}