c语言可以实现的简单程序,很好的运用了结构体,结构体数组,结构体指针,函数的实现
//contact.h
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ifndef __CONTACT_H__
#define __CONTACT_H__
#define MAX 1000
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TEL 12
#define MAX_ADDR 20
typedef struct PeoInfor
{
char name[MAX_NAME];
char sex[MAX_SEX];
int age;
char tel[MAX_TEL];
char addr[MAX_ADDR];
}PeoInfor;
typedef struct Contact
{
PeoInfor contact [MAX];
int count;
}Contact,*pContact;
void InitContact(pContact pcon);
void AddContact(pContact pcon);
void DelContact(pContact pcon);
void SearchContact(pContact pcon);
void ModifyContact(pContact pcon);
void ShowContact(pContact pcon);
void SortContact(pContact pcon);
#endif //
//contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
void InitContact(pContact pcon)
{
pcon ->count = 0;
memset(pcon->contact,0,MAX*sizeof(PeoInfor));
}
void AddContact(pContact pcon)
{
if (pcon->count >=MAX)
{
printf ("电话本满了。
");
return ;
}
printf ("请输入姓名>:");
scanf ("%s",pcon->contact[pcon->count].name);
printf ("请输入年龄>:");
scanf ("%d",&(pcon->contact [pcon->count].age));
printf ("请输入性别>:");
scanf ("%s",pcon->contact [pcon->count].sex);
printf ("请输入电话>:");
scanf ("%s",pcon->contact [pcon->count].tel);
printf ("请输入地址>:");
scanf ("%s",pcon->contact [pcon->count].addr);
pcon->count ++;
printf("添加成功
");
}
int find_entry(pContact pcon,char name[])
{
int i = 0;
for (i=0;i<pcon->count;i++)
{
if (strcmp(name,pcon->contact[i].name)==0)
return i;
}
return -1;
}
void DelContact(pContact pcon)
{
char name[MAX_NAME] = {0};
int pos = 0;
int i = 0;
if (pcon->count==0)
{
printf ("电话本为空,无法删除
");
return ;
}
printf ("请输入要删除的人名字>:");
scanf ("%s",name);
pos = find_entry(pcon,name);
if (pos==-1)
{
printf ("要删的人不存在
");
return ;
}
for (i=pos;i<pcon->count;i++)
{
pcon->contact[i] = pcon->contact[i+1];
}
pcon->count--;
printf ("删除成功
");
}
void SearchContact(pContact pcon)
{
int pos = 0;
char name[MAX_NAME] = {0};
printf ("请输入你要查找的人名字
");
scanf ("%s",name);
pos = find_entry(pcon,name);
if (pos==-1)
{
printf ("没有这个人
");
return ;
}
else
{
printf ("%10s%5s%6s%7s%8s
",
"name","age","sex","tel","addr" );
printf ("%10s%5d%6s%7s%8s
",
pcon->contact[pos].name,
pcon->contact[pos].age,
pcon->contact[pos].sex,
pcon->contact[pos].tel,
pcon->contact[pos].addr);
}
}
void ModifyContact(pContact pcon)
{
int pos = 0;
char name[MAX_NAME] = {0};
int age = 0;
char sex[MAX_SEX] = {0};
char tel[MAX_TEL] = {0};
char addr[MAX_ADDR] = {0};
printf ("请输入你要查找的人名字
");
scanf ("%s",name);
pos = find_entry(pcon,name);
if (pos==-1)
{
printf ("没有这个人
");
return ;
}
printf ("请输入你要改为的名字
");
scanf ("%s",name);
printf ("请输入你要改为的年龄
");
scanf ("%d",&age);
printf ("请输入你要改为的性别
");
scanf ("%s",sex);
printf ("请输入你要改为的电话
");
scanf ("%s",tel);
printf ("请输入你要改为的地址
");
scanf ("%s",addr);
printf ("%10s%5d%6s%7s%8s
",
strcpy(pcon->contact[pos].name,name),
age,
strcpy(pcon->contact[pos].sex,sex),
strcpy(pcon->contact[pos].tel,tel),
strcpy(pcon->contact[pos].addr,addr));
}
void ShowContact(pContact pcon)
{
int i = 0;
printf ("%10s%5s%6s%7s%8s
","name","age","sex","tel","addr" );
for (i=0;i<pcon->count;i++)
{
printf ("%10s%5d%6s%7s%8s
",
pcon->contact[i].name,
pcon->contact[i].age,
pcon->contact[i].sex,
pcon->contact[i].tel,
pcon->contact[i].addr);
}
}
static int cmp(const void *elem1,const void *elem2)
{
return strcmp ((*(PeoInfor*)elem1).name ,(*(PeoInfor*)elem2).name );
}
void SortContact(pContact pcon)
{
int i = 0;
int sz = sizeof(pcon->contact)/sizeof(pcon->contact[0]);
qsort (pcon->contact,pcon->count,sizeof (pcon->contact[0]),&cmp);
for (i=0;i<pcon->count;i++)
{
printf ("%s %d %s %s %s
",
pcon->contact[i].name,
pcon->contact[i].age,
pcon->contact[i].sex,
pcon->contact[i].tel,
pcon->contact[i].addr);
}
}
//test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "contact.h"
enum Option
{
EXIT,
ADD,
DEL,
SEARCH,
MODIFY,
SHOW,
SORT,
};
void menu ()
{
printf ("***************1.ADD *******
");
printf ("***************2.DEL *******
");
printf ("***************3.SEARCH *******
");
printf ("***************4.MODIFY *******
");
printf ("***************5.SHOW *******
");
printf ("***************6.SORT *******
");
printf ("***************0.EXIT *******
");
}
void test ()
{
int input = 0;
Contact con = {0} ;
InitContact(&con);
do
{
menu();
printf ("请选择>:");
scanf ("%d",&input);
switch (input)
{
case ADD:
AddContact(&con);
break;
case DEL:
DelContact(&con);
break;
case SEARCH:
SearchContact(&con);
break;
case MODIFY:
ModifyContact(&con);
break;
case SHOW:
ShowContact(&con);
break;
case SORT:
SortContact(&con);
break;
case EXIT:
break;
default :
printf ("输入有误,请重新输入!
");
break;
}
}while (input);
}
int main ()
{
test();
return 0;
}