上课的时候老师布置了一个作业,利用结构体实现一个简单地通讯录,这可是我们大一的时候学期末的课设题目啊,不过还好现在的水平比之前高了那么一点。。
实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
这个是通讯录的主要功能。
这个比较大,所以我们写在三个文件里。
首先是头文件:
#pragma once//宏定义,避免文件多次编译。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_NAME 10//使用简单宏定义可用宏代替一个在程序中经常使用的常量,方便程序的修改
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 20
#define MAX 1000
//人信息的结构体的定义
typedef struct People
{
char name[MAX_NAME];
char sex[MAX_SEX];
int age;
char tele[MAX_TELE];
char addr[MAX_ADDR];
}peo;
//人数的结构体定义
typedef struct Contact
{
peo con[MAX];
int count;
}contact;
//枚举,在下面使用的switch case 语句中,不用关心函数的顺序对齐,比较方便
enum OP
{
EXIT,
ADD,
DEL,
SEARCH,
MODIFY,
SHOW,
CLEAR,
SORT
};
//函数声明
void init_contact(contact *pcon);
void add_contact(contact *pcon);
void del_contact(contact *pcon);
void search_contact(contact *pcon);
void modify_contact(contact *pcon);
void show_contact(contact *pcon);
void clear_contact(contact *pcon);
void sort_contact(contact *pcon);
函数实现部分:
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
//初始化通讯录
void init_contact(contact *pcon)
{
pcon->count = 0;
}
//添加联系人
void add_contact(contact *pcon)
{
if (pcon->count >= MAX)
{
printf("电话本已满,无法添加");
return;
}
printf("请输入名字:");
scanf("%s", pcon->con[pcon->count].name);
printf("请输入性别:");
scanf("%s", pcon->con[pcon->count].sex);
printf("请输入年龄:");
scanf("%d", &pcon->con[pcon->count].age);
printf("请输入电话:");
scanf("%s", pcon->con[pcon->count].tele);
printf("请输入地址:");
scanf("%s", pcon->con[pcon->count].addr);
pcon->count++;
printf("添加成功!\n");
}
//内部查找函数
static int find(contact *pcon,const char *name)//name用const保护,名字不被改变
{
int i = 0;
for (i = 0; i < pcon->count; i++)
{
if (strcmp(name, pcon->con[i].name) == 0)
return i;
}
return -1;
}
//删除联系人
void del_contact(contact *pcon)
{
char name[MAX_NAME];
int i = 0;
printf("请输入要删除的人的姓名");
scanf("%s", &name);
int ret = find(pcon,name);
if (ret == -1)
{
printf("要删除的人不存在!\n");
return;
}
else
{
for (i = ret; i < pcon->count - 1; i++)
{
pcon->con[i] = pcon->con[i + 1];//从要删除的那位开始,后面依次向 //前覆盖
}
}
pcon->count--;
printf("删除成功\n");
}
//查找联系人
void search_contact(contact *pcon)
{
char name[MAX_NAME];
int i = 0;
printf("请输入要查找的人的姓名");
scanf("%s", &name);
int ret = find(pcon, name);
if (ret == -1)
{
printf("要查找的人不存在\n");
return;
}
else
{
printf("%10s %5s %d %12s %20s\n" ,
pcon->con[ret].name,
pcon->con[ret].sex,
pcon->con[ret].age,
pcon->con[ret].tele,
pcon->con[ret].addr);
}
}
//修改联系人
void modify_contact(contact *pcon)
{
char name[MAX_NAME];
int i = 0;
printf("请输入要修改的人的姓名");
scanf("%s", &name);
int ret = find(pcon, name);
if (ret == -1)
{
printf("要修改的人不存在\n");
return;
}
else
{
printf("请输入名字:");
printf("%s", pcon->con[ret].name);
printf("请输入性别:");
printf("%s", pcon->con[ret].sex);
printf("请输入年龄:");
printf("%d", pcon->con[ret].age);
printf("请输入电话:");
printf("%s", pcon->con[ret].tele);
printf("请输入地址:");
printf("%s", pcon->con[ret].addr);
}
}
//显示联系人
void show_contact(contact *pcon)
{
int i = 0;
printf("%10s %5s %5s %12s %20s\n",
"name", "sex", "age", "tele", "addr");
for (i = 0; i < pcon->count; i++)
{
printf("%10s %5s %5d %12s %20s\n",
pcon->con[i].name,
pcon->con[i].sex,
pcon->con[i].age,
pcon->con[i].tele,
pcon->con[i].addr);
}
}
//清空联系人
void clear_contact(contact *pcon)
{
pcon->count = 0;
printf("清空成功\n");
}
//排序联系人,此函数用的是冒泡排序
void sort_contact(contact *pcon)
{
int i = 0;
int j = 0;
peo tmp;
for (i = 0; i < pcon->count - 1; i++)
{
for (j = 0; j < pcon->count - 1 - i; j++)
{
if (strcmp(pcon->con[j].name, pcon->con[j + 1].name)>0)
{
tmp = pcon->con[j];
pcon->con[j + 1] = pcon->con[j];
pcon->con[j] = tmp;
}
}
}
printf("排序完成\n");
}
测试部分:
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
//简易菜单
void menu()
{
printf("***************************************\n");
printf(" 通讯录 \n");
printf(" 1.添加 \n");
printf(" 2.删除 \n");
printf(" 3.查找 \n");
printf(" 4.修改 \n");
printf(" 5.显示 \n");
printf(" 6.清空 \n");
printf(" 7.以名字排序 \n");
printf(" 0.EXIT \n");
printf("***************************************\n");
}
void test()
{
contact mycon;
init_contact(&mycon);
int input = 1;
while (input)
{
menu();
printf("请输入选择:");
scanf("%d", &input);
switch (input)
{
case ADD:
add_contact(&mycon);
break;
case DEL:
del_contact(&mycon);
break;
case SHOW:
show_contact(&mycon);
break;
case SEARCH:
search_contact(&mycon);
break;
case MODIFY:
modify_contact(&mycon);
break;
case CLEAR:
clear_contact(&mycon);
break;
case SORT:
sort_contact(&mycon);
break;
case EXIT:
exit(0);
break;
default:
break;
}
}
}
int main()
{
test();
system("pause");
return 0;
}
这是一个简单的通讯录,以后会有更好更严谨,功能更完善的呈献给大家。希望大家能一起交流,写的不好的能多多指正。(*^__^*)