目录
一、用户需求
1.通过makefile管理代码
2.各个子功能:
a:添加用户
b:查看用户(按照姓名排序)
c:搜索用户(两种方式:id,用户名)
d:删除用户信息
e:修改用户信息
二、功能实现
2.1 添加用户
void Add()
{
//判断通讯录是否为满
if(ct_count >= MAX_PERSON)
{
printf("添加失败,通讯录已满!\n");
return;
}
else
{
Person *pt = NULL;
pt = (Person *)malloc(sizeof(Person));
ct[ct_count] = pt;
pt->id = id_init;
printf("请输入联系人姓名:");
scanf("%s",pt->name);
printf("请输入联系人地址:");
scanf("%s",pt->ads);
IntNum(pt->num); //定义函数实现电话号码的格式检查及输入
printf("添加联系人成功!\n");
pt = NULL;
ct_count++;
id_init++;
return;
}
}
2.2 查看用户
2.2.1 按照姓名排序
void Seq()
{
int i,j;
Person *tem = NULL;
for ( i = 0; i < ct_count-1; i++)
{
for( j = 0;j <= ct_count -i - 1; j++)
{
if(strcmp(ct[j]->name,ct[j+1]->name) > 0)
{
tem = ct[j];
ct[j] = ct[j+1];
ct[j+1] = tem;
tem = NULL;
break;
}
}
}
}
2.2.2 输出所有用户信息
void See()
{
int i;
printf("---------------------------------------------------------------------\n");
printf("id\t姓名\t\t家庭住址\t\t电话\n");
printf("---------------------------------------------------------------------\n");
for(i = 0; i < ct_count;i++)
{
printf(" %d\t%s\t\t%s\t\t\t%s\n",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
}
printf("共%d位联系人",ct_count);
}
2.3 搜索用户(通过id或者用户名)
//查找联系人
void Search()
{
printf("请选择查找方式:1.通过id查找联系人\t2.通过联系人姓名查找联系人 ");
int d,x;
int i,flags = 0;
char name[32] = {0};
scanf("%d",&d);
switch (d)
{
case 1:
printf("请输入联系人id:\n");
scanf("%d",&x);
for(i = 0;i < ct_count;i++)
{
if (x == ct[i]->id)
{
printf("---------------------------------------------------------------------\n");
printf("id\t姓名\t\t家庭住址\t\t电话\n");
printf("---------------------------------------------------------------------\n");
printf(" %d\t%s\t\t%s\t\t\t%s",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
flags = 1;
break;
}
}
if(flags == 0)
{
printf("无此id,请重新输入:");
return;
}
break;
case 2:
printf("请输入联系人姓名:\n");
scanf("%s",name);
for ( i = 0; i < ct_count; i++)
{
if(strcmp(name,ct[i]->name) == 0)
{
printf("---------------------------------------------------------------------\n");
printf("id\t姓名\t\t家庭住址\t\t电话\n");
printf("---------------------------------------------------------------------\n");
printf(" %d\t%s\t\t%s\t\t\t%s",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
flags = 1;
break;
}
}
if(flags == 0)
{
printf("无此id,请重新输入:");
return;
}
break;
default:
break;
}
}
2.4 删除用户
void Del()
{
int i,j;
char name[32];
printf("请输入联系人姓名:");
scanf("%s",name);
for ( i = 0; i < ct_count; i++)
{
if (strcmp(name,ct[i]->name) == 0)
{
j = i;
printf("删除成功!");
break;
}
else
{
printf("无此联系人,删除失败!\n");
break;
}
}
Person *tmp = ct[j];
for ( i = j; i < ct_count - 1; i++)
{
ct[i] = ct[i+1];
}
free(tmp);
tmp = NULL;
ct_count--;
ct[ct_count] = NULL;
}
2.5 修改用户信息
void Alter()
{
int i,flags = 0;
char name[32] = {0};
printf("请输入联系人姓名:\n");
scanf("%s",name);
for ( i = 0; i < ct_count; i++)
{
if (strcmp(name,ct[i]->name) == 0)
{
printf("请输入要修改的地址: ");
scanf("%s",ct[i]->ads);
printf("请输入要修改的电话: ");
scanf("%s",ct[i]->num);
printf("修改成功!\n");
flags = 1;
break;
}
}
if (flags == 0)
{
printf("输入错误,无此联系人!\n");
return;
}
}
三、头文件定义
#ifndef _TONGXUNLU_H_
#define _TONGXUNLU_H_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <unistd.h>
#define MAX_PERSON 1000
typedef char DataType;
typedef struct tongxunlu
{
int id;
DataType name[32];
DataType ads[32];
DataType num[12];
}Person;
void Welcome();
void Menu();
void IntNum(char *num);
void Add();
void Seq();
void See();
void Search();
void Del();
void Alter();
#endif
四、主函数
#include "tongxunlu.h"
Person *ct[MAX_PERSON] = {0};
int ct_count = 0;
int main()
{
Welcome();
int choice;
while (1)
{
Menu();
scanf("%d",&choice);
switch (choice)
{
case 1:
Add();
break;
case 2:
Seq();
See();
break;
case 3:
Search();
break;
case 4:
Del();
break;
case 5:
Alter();
break;
case 6:
exit(0);
break;
default:
printf("输入错误,请重新输入!");
break;
}
}
Add();
return 0;
}
五、函数代码
#include "tongxunlu.h"
extern Person *ct[MAX_PERSON];
extern int ct_count;
int id_init = 1;
//欢迎界面
void Welcome()
{
printf("---------------------------------------------------------------------\n");
printf("\n\t\t 欢迎使用通讯录\n\n");
printf("---------------------------------------------------------------------\n");
}
//菜单栏
void Menu()
{
printf("---------------------------------------------------------------------\n");
printf("\n\t\t1.添加信息 2.查看信息\n\n");
printf("\t\t3.搜索信息 4.删除信息\n\n");
printf("\t\t5.修改信息 6.退出系统\n\n");
printf("---------------------------------------------------------------------\n");
}
//新增联系人
void Add()
{
if(ct_count >= MAX_PERSON)
{
printf("添加失败,通讯录已满!\n");
return;
}
else
{
Person *pt = NULL;
pt = (Person *)malloc(sizeof(Person));
ct[ct_count] = pt;
pt->id = id_init;
printf("请输入联系人姓名:");
scanf("%s",pt->name);
printf("请输入联系人地址:");
scanf("%s",pt->ads);
IntNum(pt->num);
printf("添加联系人成功!\n");
pt = NULL;
ct_count++;
id_init++;
return;
}
}
//输入练习人电话并查重查格式错误
void IntNum(char *num)
{
int i;
printf("请输入联系人电话:");
while (1)
{
scanf("%s",num);
if(strlen(num) != 11)
{
printf("号码长度错误,请重新输入:");
continue;
}
else
{
return;
}
}
}
//以联系人首字母排序
void Seq()
{
int i,j;
Person *tem = NULL;
for ( i = 0; i < ct_count-1; i++)
{
for( j = 0;j <= ct_count -i - 1; j++)
{
if(strcmp(ct[j]->name,ct[j+1]->name) > 0)
{
tem = ct[j];
ct[j] = ct[j+1];
ct[j+1] = tem;
tem = NULL;
}
}
}
}
//查看所有联系人
void See()
{
int i;
printf("---------------------------------------------------------------------\n");
printf("id\t姓名\t\t家庭住址\t\t电话\n");
printf("---------------------------------------------------------------------\n");
for(i = 0; i < ct_count;i++)
{
printf(" %d\t%s\t\t%s\t\t\t%s\n",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
//print(ct[i]);
}
printf("共%d位联系人",ct_count);
}
//查找联系人
void Search()
{
printf("请选择查找方式:1.通过id查找联系人\t2.通过联系人姓名查找联系人 ");
int d,x;
int i;
char name[32] = {0};
scanf("%d",&d);
switch (d)
{
case 1:
printf("请输入联系人id:\n");
scanf("%d",&x);
for(i = 0;i < ct_count;i++)
{
if (x == ct[i]->id)
{
printf("---------------------------------------------------------------------\n");
printf("id\t姓名\t\t家庭住址\t\t电话\n");
printf("---------------------------------------------------------------------\n");
printf(" %d\t%s\t\t%s\t\t\t%s",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
}
else
{
printf("无此id,请重新输入:");
break;
}
}
break;
case 2:
printf("请输入联系人姓名:\n");
scanf("%s",name);
for ( i = 0; i < ct_count; i++)
{
if(strcmp(name,ct[i]->name) == 0)
{
printf("---------------------------------------------------------------------\n");
printf("id\t姓名\t\t家庭住址\t\t电话\n");
printf("---------------------------------------------------------------------\n");
printf(" %d\t%s\t\t%s\t\t\t%s",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
}
else
{
printf("无此联系人,请重新输入:");
break;
}
}
break;
default:
break;
}
}
//删除联系人
void Del()
{
int i,j;
char name[32];
printf("请输入联系人姓名:");
scanf("%s",name);
for ( i = 0; i < ct_count; i++)
{
if (strcmp(name,ct[i]->name) == 0)
{
j = i;
printf("删除成功!");
break;
}
else
{
printf("无此联系人,删除失败!\n");
break;
}
}
Person *tmp = ct[j];
for ( i = j; i < ct_count - 1; i++)
{
ct[i] = ct[i+1];
}
free(tmp);
tmp = NULL;
ct_count--;
ct[ct_count] = NULL;
}
//修改联系人信息
void Alter()
{
int i;
char name[32] = {0};
printf("请输入联系人姓名:\n");
scanf("%s",name);
for ( i = 0; i <= ct_count; i++)
{
if (strcmp(name,ct[i]->name) == 0)
{
printf("请输入要修改的地址: ");
scanf("%s",ct[i]->ads);
printf("请输入要修改的电话: ");
scanf("%s",ct[i]->num);
printf("修改成功!\n");
break;
}
else
{
printf("输入错误,无此联系人!");
break;
}
}
return;
}
六、Makefile
tar := tongxunlu
obj := main.o tongxunlu.o
cc := gcc
cflags := -c -o
cflagss := -o
$(tar):$(obj)
$(cc) $(obj) $(cflagss) $(tar)
%.o:%.c
$(cc) $< $(cflags) $@
clean:
rm -rf $(obj)
rm -rf $(tar)
本文档详细介绍了如何实现一个简单的通讯录管理系统,包括添加、查看、搜索、删除和修改用户信息等功能。系统使用C语言编写,通过结构体存储用户数据,实现了按姓名排序和多种查找方式。此外,还提供了Makefile进行代码管理。
&spm=1001.2101.3001.5002&articleId=122888028&d=1&t=3&u=e5fefd5aae4041a2a0136c562e010ec5)
430

被折叠的 条评论
为什么被折叠?



