永发信息网

跪求通讯录C语言代码

答案:1  悬赏:0  手机版
解决时间 2021-01-19 01:19
跪求通讯录C语言代码
最佳答案
//通讯录系统,每条记录由姓名、qq、电话号码组成
//用结构体数组实现,可以自动扩充存储区
//多给点财富吧
#include
#include
#include

#define N 60
#define BufLen 1024

typedef struct tagRecord
{
char name[N];
char qq[N];
char tel[N];
}Record,*PtRecord;

typedef enum tagType
{
ByName=1,
ByQQ,
ByTel,
}Type;

typedef enum tagMenu
{
Quit=0,
Add,
Del,
Find,
Output,
OutputAll,
}Menu;

void processmenu(Menu m);
void init();
void begin();
void myrealloc(int reserved);
int add();
void del(int n);
int find(char *v,Type t);
void output(int n);
void outputall();

const int MinCapacity=16;
int count,capacity;
char temp[BufLen]={'\0'},temp2[BufLen]={'\0'},quit[]="quit";
PtRecord ptr;
int main()
{
begin();
system("PAUSE");
return EXIT_SUCCESS;
}
//处理菜单
void processmenu(Menu m)
{
//无法处理wfchl
int t,wfchl=0;

switch(m)
{
case Quit:
if(ptr)
{
free(ptr);
}
exit(0);
break;
case Add:
add();
break;
case Del:
printf("请输入要删除的是第几个记录:");
scanf("%d",&t);
del(t-1);
break;
case Find:
printf("子菜单:\n1、按姓名查找\n2、按qq号码查找\n3、按电话号码查找\n请选择一个:");
scanf("%d",&t);
switch(t)
{
case ByName:
strcpy(temp2,"不存在姓名为");
printf("请输入要查找的记录的姓名:");
break;
case ByQQ:
strcpy(temp2,"不存在qq号码为");
printf("请输入要查找的记录的qq号码:");
break;
case ByTel:
strcpy(temp2,"不存在电话号码为");
printf("请输入要查找的记录的电话号码:");
break;
default:
printf("无法处理的子菜单命令。\n");
wfchl=1;
break;
}
if(!wfchl)
{
scanf("%s",temp);
t=find(temp,(Type)t);
if(-1==t)
{
strcat(temp2,temp);
strcat(temp2,"的记录。");
printf("%s\n",temp2);
}
else
{
output(t);
}
}
break;
case Output:
printf("请输入要输出第几个记录的信息:");
scanf("%d",&t);
output(t-1);
break;
case OutputAll:
outputall();
break;
default:
printf("无法处理的菜单命令。\n");
break;
}
}
void init()
{
count=0;
capacity=MinCapacity;
ptr=(PtRecord)calloc(MinCapacity,sizeof(Record));
printf("初始化通讯录。\n");
while(add());
}
void begin()
{
Menu m;
char menuinfor[BufLen]={'\0'};

sprintf(menuinfor,
"菜单:\n%d、退出\n%d、添加记录\n%d、删除记录\n%d、查找记录\n%d、输出某个记录\n%d、输出所有记录\n请选择一个菜单:",
Quit,Add,Del,Find,Output,OutputAll);
init();
while(1)
{
printf("%s",menuinfor);
scanf("%d",&m);
processmenu(m);
}
}
//自动增长通讯录的容量,参数reserved表示是否要保留原有数据
//1表示保留,0表示不保留
void myrealloc(int reserved)
{
int i,c=count+1;
PtRecord tempptr;

if(c>=capacity)
{
tempptr=(PtRecord)calloc(2*c,sizeof(Record));
capacity=2*c;
if(reserved)
{
for(i=0;i {
tempptr[i]=ptr[i];
}
}
free(ptr);
ptr=tempptr;
}
}
//添加一个记录
//返回值表示本次添加操作是正常结束,还是异常结束
//返回1表示正常结束,返回0表示应用户要求终止输入
int add()
{
int r=1;

printf("添加记录。\n请输入姓名,qq,电话号码信息(以空格分隔),%s终止输入:",quit);
scanf("%s",&temp);
if(strcmp(temp,quit))
{
myrealloc(1);
strcpy(ptr[count].name,temp);
scanf("%s %s",ptr[count].qq,ptr[count].tel);
printf("记录添加成功。\n");
count++;
}
else
{
r=0;
}
return r;
}
//删除下标为n的记录
void del(int n)
{
int i;
Record r;

//printf("del\n");
if(n>=0 && n {
r=ptr[n];
for(i=n;i {
ptr[i]=ptr[i+1];
}
printf("删除成功。\n记录[%d]:\n%s,%s,%s已删除。\n",n,r.name,r.qq,r.tel);
count--;
}
else
{
printf("删除失败。\n第%d个记录不存在。\n",n+1);
}
}
//查找类型为t,值为v的记录
//返回值为此记录在通讯录数组中的下标
//返回-1表示找不到符合要求的记录
int find(char *v,Type t)
{
int i,n=-1;

for(i=0;i {
switch(t)
{
case ByName:
if(!strcmp(ptr[i].name,v))
{
n=i;
}
break;
case ByQQ:
if(!strcmp(ptr[i].qq,v))
{
n=i;
}
break;
case ByTel:
if(!strcmp(ptr[i].tel,v))
{
n=i;
}
break;
default:
break;
}
if(-1!=n)
{
break;
}
}
return n;
}
//输出下标为n的记录的信息
void output(int n)
{
if(n>=0 && n {
printf("记录[%d]:\n%s,%s,%s。\n",n,ptr[n].name,ptr[n].qq,ptr[n].tel);
}
else
{
printf("第%d个记录不存在。\n",n+1);
}
}
//输出所有记录的信息
void outputall()
{
int i;

if(0==count)
{
printf("一个记录也没有了。\n");
}
for(i=0;i {
output(i);
}
}追问知道新人,确实没什么财富点。。。抱歉
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
电影《红楼春上春》完整版是99分钟吗?
步步高vivo710l
宝马218i同宝马420i有什么区别
问题补充:100斤瓜子5.2元一斤。炒熟成本0.4
法国队鲁巴佩身高
悲伤的人总有那么几个,天亮了也有人难过是什
读图回答问题.(1)当图中A点气温为18.2℃时
夏末微雨这个网名能配哪种签名
谁收购一分二分五分硬币
温室大棚立柱向哪方倾斜?
炸学校犯法吗?一般罪有多大?
镇江市丹徒区检察院司法警察大队地址在什么地
学化妆在哪个学校最好
斌斌发屋地址有知道的么?有点事想过去!
从南坪到渝北高新园海王星怎么坐车?
推荐资讯
南航已订机票如何在网上查询详细信息
拼音xia中的a是单韵母吗
什么是全日制学习?
黄金5.97g和6.0g有什么区别
这个吓他的和恐吓他的,这意思一样吗 有什么
橡皮和铅笔的故事共7篇(连续)怎么写
单选题据新疆都市报2010年12月13日报道,新疆
请教弹吉他的高手:这两种连音要怎么弹呢?
便可白公姥 及时相遣归 白什么意思
单位向南宁社会保险事业局报的材料有错误,还
食禄不周是什么意思
主线与子线都是2.0的,对钓鱼有什么影响?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?