AddressList.h
#pragma once
#pragma warning (disable:4996)
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<Windows.h>
#include<String.h>
typedef struct MAN//存放人员信息
{
char _name[20];
int _age;
char _sex[10];
int _numder;
int _tel;
char _addr[10];
}MAN;
typedef struct table//把通讯录和人员统计放在结构体内
{
MAN _num[100];
int _size;
}table;
void Init_MAN(table* p);//初始化
int Find(table* t, char*name);
void Add_MAN(table*p);//添加联系人信息
void Dele_MAN(table*p);//删除指定联系人信息
void Find_MAN(table*p);//查找联系人
void Change_MAN(table*p);//修改联系人信息
void Display_MAN(table*p);//显示联系人信息
void Empty_MAN(table*p);//清空所有联系人
void Sort_MAN(table*p);//排序联系人
AddressList.c
#include"AddressList.h"
void menu()
{
printf("************************************\n");
printf("********1、添加联系人信息***********\n");
printf("********2、删除指定联系人信息*******\n");
printf("********3、查找指定联系人信息*******\n");
printf("********4、修改指定联系人信息*******\n");
printf("********5、显示所有联系人信息*******\n");
printf("********6、清空所有联系人信息*******\n");
printf("********7、以名字排序所有联系人信息*\n");
printf("********8、按0退出程序**************\n");
printf("************************************\n");
}
void menu1()
{
printf("**********************************\n");
printf("*********1、姓名 2、年龄*********\n");
printf("*********3、学号 4、性别*********\n");
printf("*********5、地址 6、电话*********\n");
printf("***************0、 退出***********\n");
}
void Init_MAN(table* p)
{
assert(p);
int _size = (sizeof(p->_num));
p->_size = 0;
memset(p->_num, 0, _size);
}
int Find(table* t, char*name)
{
assert(t&&name);
int i;
for ( i = 0; i < (t->_size); i++)
{
if (strcmp(t->_num[i]._name,name)==0)
{
return i;
}
}
return -1;
}
void Add_MAN(table*p)
{
assert(p);
printf("请输入你要添加的联系人学号:\n");
scanf("%d", &(p->_num[p->_size]._numder));
printf("请输入你要添加的联系人姓名:\n");
scanf("%s", p->_num[p->_size]._name);
printf("请输入你要添加的联系人性别:\n");
scanf("%s", p->_num[p->_size]._sex);
printf("请输入你要添加的联系人年龄:\n");
scanf("%d", &(p->_num[p->_size]._age));
printf("请输入你要添加的联系人电话:\n");
scanf("%d", &(p->_num[p->_size]._tel));
printf("请输入你要添加的联系人地址:\n");
scanf("%s", p->_num[p->_size]._addr);
if ((p->_size)>100)
{
printf("超过上限\n");
}
else
{
printf("添加成功\n");
p->_size++;
}
}
void Dele_MAN(table*p)//删除指定联系人信息
{
assert(p);
char name[20] = { 0 };
printf("请输入要删除的联系人:");
scanf("%s", &name);
int ret = Find(p,name);
int i = 0;
int n = 0;
if (ret!=-1)
{
printf("请问是否删除:\n");
printf("删除请按1,否则请按0\n");
scanf("%d", &n);
if (n==1)
{
for (i = 0; i <= p->_size - 1; i++)
{
p->_num[i] = p->_num[i + 1];
}
p->_size--;
printf("删除成功\n");
}
else
{
printf("删除失败\n");
}
}
else
{
printf("此联系人不存在");
}
}
void Find_MAN(table*p)//查找联系人
{
assert(p);
char name[20] = { 0 };
printf("请输入你要查找联系人的名字:" );
scanf("%s", &name);
int ret = Find(p, name);
if (ret!=-1)
{
printf("联系人的学号为:%d\n", p->_num[ret]._numder);
printf("联系人的名字为:%s\n", p->_num[ret]._name);
printf("联系人性别的为:%s\n", p->_num[ret]._sex);
printf("联系人的年龄为:%d\n", p->_num[ret]._age);
printf("联系人的电话为:%d\n", p->_num[ret]._tel);
printf("联系人的地址为:%s\n", p->_num[ret]._addr);
}
else
{
printf("没找到\n");
}
}
void Change_MAN(table*p)//修改联系人信息
{
assert(p);
char name[20] = { 0 };
printf("请输入要修改的联系人姓名:");
scanf("%s", &name);
int ret = Find(&p, name);
if (ret!=-1)
{
printf("联系人的学号为:%d\n", p->_num[ret]._numder);
printf("联系人的名字为:%s\n", p->_num[ret]._name);
printf("联系人性别的为:%s\n", p->_num[ret]._sex);
printf("联系人的年龄为:%d\n", p->_num[ret]._age);
printf("联系人的电话为:%d\n", p->_num[ret]._tel);
printf("联系人的地址为:%s\n", p->_num[ret]._addr);
int i = 0;
do
{
menu1();
printf("请输入要修改的属性:\n");
scanf("%d", &i);
switch (i)
{
case 1:
printf("请输入要修改的姓名:");//姓名
scanf("%s", p->_num[ret]._name);
break;
case 2:printf("请输入要修改的年龄:");//年龄
scanf("%d", p->_num[ret]._age);
break;
case 3:printf("请输入要修改的学号:");//学号
scanf("%d", p->_num[ret]._numder);
break;
case 4:printf("请输入要修改的性别:");//性别
scanf("%s", p->_num[ret]._sex);
break;
case 5:printf("请输入要修改的地址:");//地址
scanf("%s", p->_num[ret]._addr);
break;
case 6:printf("请输入要修改的电话:");//电话
scanf("%d", p->_num[ret]._tel);
break;
case 0://退出
exit(0);
break;
default:
printf("输入错误\n");
break;
}
} while (i);
}
}
void Display_MAN(table*p)//显示联系人信息
{
assert(p);
printf("输出所有联系人的信息:\n");
printf("%10s %7s %6s %8s %9s %10s\n","学号","姓名","性别","年龄","电话","地址");
for (int i = 0; i<p->_size; i++)
{
printf("%10d ", p->_num[i]._numder);
printf("%7s ", p->_num[i]._name);
printf("%6s ", p->_num[i]._sex);
printf("%8d ", p->_num[i]._age);
printf("%9d ", p->_num[i]._tel);
printf("%10s ", p->_num[i]._addr);
printf("\n");
}
}
void Empty_MAN(table*p)//清空所有联系人
{
assert(p);
p->_size = 0;
}
void Sort_MAN(table*p)//排序联系人
{
assert(p);
int i,j;
for (i = 0; i < p->_size; i++)
{
for ( j = 0; j < p->_size-1-i; j++)
{
if (strcmp(p->_num[j]._name,p->_num[j+1]._name)>0)
{
MAN tmp;
tmp = p->_num[j];
p->_num[j] = p->_num[j + 1];
p->_num[j + 1] = tmp;
}
}
}
}
test.c
#include"AddressList.h"
table t;
void test()
{
int i = 0;
do
{
menu();
printf("请输入你要进行的选项:");
scanf("%d", &i);
switch (i)
{
case 1:
Add_MAN(&t);
break;
case 2:
Dele_MAN(&t);
break;
case 3:
Find_MAN(&t);
break;
case 4:
Change_MAN(&t);
break;
case 5:
Display_MAN(&t);
break;
case 6:
Empty_MAN(&t);
break;
case 7:
Sort_MAN(&t);
break;
case 0:
exit(0);
break;
default:
printf("输入错误\n");
break;
}
} while (i);
}
int main()
{
Init_MAN(&t);
test();
system("pause");
return 0;
}