您的位置:首页 > 其它

关于执行的思考

2010-03-19 14:04 190 查看
实现一个通讯录:通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1.添加联系人信息2.删除指定联系人信息3.查找指定联系人信息4.修改指定联系人信息5.显示所有联系人信息6.清空所有联系人7.以名字排序所有联系人建立一个源文件phone.h和两个头文件main.c,hanshu.c来实现
代码如下:
源文件phone.h如下:
#ifndef __PHONE_H__
#define __PHONE_H__

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 1000
#define NAME 10
#define SEX 5
#define PHONE 12
#define ADDRESS 20

enum OP
{
EXIT,
ADD,
DELETE,
FIND,
CHANGE,
SHOW,
EMPTY,
NAME_SORT,
};

typedef struct linkman
{
char name[NAME];
char sex[SEX];
int age;
char phone[PHONE];
char address[ADDRESS];
}link;

typedef struct Phonebook
{
link linkman[MAX];
int count;
}Phonebook, *Pho;//Pho为指针类型

void init(Pho phobook);
void add(Pho phobook);
void delete(Pho phobook);
void find(Pho phobook);
void change(Pho phobook);
void show(Pho phobook);
void empty(Pho phobook);
void name_sort(Pho phobook);

#endif
头文件mian.c如下:
#include"phone.h"
#include<stdlib.h>

void menu()
{
printf("\n\t\t*************简易通讯录*************\n");
printf("\t\t\t    1.添加联系人信息\n");
printf("\t\t\t    2.删除指定联系人信息\n");
printf("\t\t\t    3.查找指定联系人信息\n");
printf("\t\t\t    4.修改指定联系人信息\n");
printf("\t\t\t    5.显示所有联系人信息\n");
printf("\t\t\t    6.清空所有联系人\n");
printf("\t\t\t    7.以名字排序所有联系人\n");
printf("\t\t\t    8.退出系统\n");
}

int main()
{
Phonebook phob;
int input=1;
init(&phob);
while (input)
{
menu();
printf("请输入你要选择的序号>");
scanf("%d", &input);
switch (input)
{
case ADD: add(&phob);break;//添加
case DELETE: delete(&phob); break;//删除
case FIND: find(&phob); break;//查找
case CHANGE:change(&phob); break;//修改
case SHOW: show(&phob); break;//显示
case EMPTY: empty(&phob); break;//清空
case NAME_SORT:name_sort(&phob); break;//名字排序
case EXIT:
printf("感谢使用!"); system("pause"); return 0;
default:
printf("序号输入错误,请重新输入>"); break;
}
}
system("pause");
return 0;
}
头文件hanshu.c如下:
#include"phone.h"
//由于删除或查找或修改联系人都需要判断是否存在该联系人,所以设置一个静态函数判断联系人是否存在
static int search_linkman(Pho phobook, const char *name)
{
for (int i = 0; i < (phobook->count); i++)
{
if (0 == strcmp(name, (phobook->linkman[i]).name))
{
return i;
}
}
return -1;
}

void init(Pho phobook)
{
phobook->count = 0;
}

void add(Pho phobook)//通讯录中添加联系人
{
if ((phobook->count) > MAX)
{
printf("通讯录容量已满,不能再添加!");
return;
}
printf("请输入要添加的联系人姓名>");
scanf("%s", (phobook->linkman)->name);
printf("请输入要添加的联系人性别>");
scanf("%s", (phobook->linkman)->sex);
printf("请输入要添加的联系人年龄>");
scanf("%d", &(phobook->linkman)->age);
printf("请输入要添加的联系人电话>");
scanf("%s", (phobook->linkman)->phone);
printf("请输入要添加的联系人地址>");
scanf("%s", (phobook->linkman)->address);
printf("\n添加成功\n");
(phobook->count)++;
}

void delete(Pho phobook)
{
char nam[10];
int ret = 0;
if ((phobook->count) <= 0 || (phobook->count) > MAX)
{
printf("此通讯录中没有此联系人!\n");
}
printf("请输入联系人的姓名>");
scanf("%s", &nam);
ret = search_linkman(phobook, nam);
if (ret != -1)
{
for (int j = ret; j < (phobook->count-1); j++)
{
phobook->linkman[j]=phobook->linkman[j+1];
}
(phobook->count)--;
printf("删除成功!\n");
}
else printf("此通讯录中没有此联系人!\n");
}

void find(Pho phobook)
{
char nam[10];
int ret = 0;
if ((phobook->count) <= 0 || (phobook->count) > MAX)
{
printf("此通讯录中没有此联系人!\n");
return;
}
printf("请输入联系人的姓名>");
scanf("%s", &nam);
ret = search_linkman(phobook, nam);
if (ret != -1)
{
printf("你查找的联系人信息为:\n");
printf("---------姓名:%s\n", phobook->linkman[ret].name);
printf("---------性别:%s\n", phobook->linkman[ret].sex);
printf("---------年龄:%d\n", phobook->linkman[ret].age);
printf("---------电话:%s\n", phobook->linkman[ret].phone);
printf("---------地址:%s\n\n", phobook->linkman[ret].address);
}
else printf("没有找到你要查找的联系人!\n");
}

void change(Pho phobook)
{
char nam[10];
int ret = 0;
if ((phobook->count) <= 0 || (phobook->count) > MAX)
{
printf("此通讯录中没有此联系人!\n");
return;
}
printf("请输入联系人的姓名>");
scanf("%s", &nam);
ret = search_linkman(phobook, nam);
if (ret != -1)
{
printf("请输入联系人新的姓名>");
scanf("%s", (phobook->linkman[ret]).name);
printf("请输入联系人新的性别>");
scanf("%s", (phobook->linkman[ret]).sex);
printf("请输入联系人新的年龄>");
scanf("%d", &(phobook->linkman[ret]).age);
printf("请输入联系人新的电话号码>");
scanf("%s", (phobook->linkman[ret]).phone);
printf("请输入联系人新的地址>");
scanf("%s", (phobook->linkman[ret]).address);
printf("修改成功\n");
}
else printf("此通讯录中此联系人不存在!\n");
}

void show(Pho phobook)
{
if ((phobook->count) == 0)
{
printf("该通讯录中没有联系人!\n");
}
else
{
printf("***********该通讯录中所有人信息如下>\n");
printf("%10s\t%5s\t%3s\t%10s\t%10s\t\n","姓名","性别","年龄","电话号码","地址");
for (int i = 0; i < phobook->count; i++)
{
printf("%10s\t%5s\t%3d\t%10s\t%10s\t",(phobook->linkman[i]).name,
(phobook->linkman[i]).sex, (phobook->linkman[i]).age,
(phobook->linkman[i]).phone, (phobook->linkman[i]).address);
}
}
}

void empty(Pho phobook)
{
if ((phobook->count) == 0)
printf("此通讯录中没有联系人!\n");
else
{
(phobook->count) = 0;
printf("清空成功!\n");
}
}

void name_sort(Pho phobook)//冒泡排序通讯录中所有联系人
{
int i = 0, j = 0;
int k = phobook->count;
if ((phobook->count) == 0)
{
printf("此通讯录中没有联系人!\n");
return;
}
for (i = 0; i < (phobook->count) - 1; i++)
{
for (j = 0; j < (phobook->count) - i - 1; j++)
{
if (strcmp((phobook->linkman[j]).name, (phobook->linkman[j+1]).name)>0)
{
link temp = phobook->linkman[j];
phobook->linkman[j] = phobook->linkman[j+1];
phobook->linkman[j+1] = temp;
}
}
}
}
本文出自 “Scen” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1719065
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: