#pragma once
typedef struct Peo//每一個人的信息用一個結構來接收,包括姓名,性別,年齡,電話,地址
{
char name[20];
char sex[4];
int age;
char tell[12];
char address[20];
}Peo;
typedef struct Contact//將通訊錄和人員計數也聲明在結構體裡
{
Peo Dhb[1000];
int count;
}Contact;
void add_stu(Contact *p);//相應函數
void del_stu(Contact *p);
void find_stu(Contact *p);
void modify_stu(Contact *p);
void show_stu(Contact *p);
void clear_stu(Contact *p);
void sort_stu(Contact *p);
模塊2:(測試功能)
#include<stdio.h>
#include"contact.h"
#include<stdlib.h>
Contact con;//類型為Contact變量,裡面包含電話本和計數變量
void menu()
{
printf("menu:\n");
printf("**********1.添加聯系人信息************\n");
printf("********2.刪除指定聯系人信息**********\n");
printf("********3.查找指定聯系人信息**********\n");
printf("********4.修改指定聯系人信息**********\n");
printf("********5.顯示所有聯系人信息**********\n");
printf("**********6.清空聯系人信息************\n");
printf("******7.以名字排序所有聯系人信********\n");
}
void test()//測試函數
{
int input = 1;
menu();
while (input)
{
printf("請輸入選項:");
scanf_s("%d", &input);
switch (input)//方法選擇功能的實現
{
case 1:
add_stu(&con);
break;
case 2:
del_stu(&con);
break;
case 3:
find_stu(&con);
break;
case 4:
modify_stu(&con);
break;
case 5:
show_stu(&con);
break;
case 6:
clear_stu(&con);
break;
case 7:
sort_stu(&con);
break;
case 0:
exit(1);
break;
}
}
}
int main()
{
test();
return 0;
}
模塊3:(方法的具體實現)
#include"contact.h"
#include<string.h>
int search(Contact *p,char *pname)//分裝的函數利於刪除,查找,修改方法的實現
{
int ret;
int i;
for (i = 0; i < p->count; i++)
{
if(strcmp(p->Dhb[i].name, pname)==0)
return i;
}
return -1;
}
void add_stu(Contact *p)//添加聯系人
{
printf("請輸入姓名:");
scanf("%s", p->Dhb[p->count].name);
printf("請輸入性別:");
scanf("%s", p->Dhb[p->count].sex);
printf("請輸入年齡:");
scanf("%d", &p->Dhb[p->count].age);
printf("請輸入電話:");
scanf("%s", p->Dhb[p->count].tell);
printf("請輸入地址:");
scanf("%s", p->Dhb[p->count].address);
p->count++;
printf("聯系人添加成功\n");
}
void del_stu(Contact *p)//刪除聯系人
{
int ret;
int n;
int i = 0;
char name[20];
printf("請輸入要刪除人的姓名:");
scanf("%s",name);
ret=search(p,name);
if (ret !=-1)
{
printf("要刪除的人存在\n");
printf("你是否確定刪除該聯系人?\n");
printf("確定輸入1,不刪除輸入0\n");
scanf("%d",&n);
if (n == 1)
{
for (i = 0; i < p->count; i++)
{
p->Dhb[i] = p->Dhb[i + 1];//使i後面的元素向前覆蓋便可以刪掉
}
printf("刪除成功\n");
}
else
{
printf("刪除失敗\n");
}
}
}
void find_stu(Contact *p)//查找聯系人
{
int ret;
char name[20];
printf("請輸入要查找人的姓名:");
scanf("%s", name);
ret = search(p, name);
if (ret !=-1)
{
printf("要查找的人存在\n");
printf("%s ", p->Dhb[ret].name);
printf("%s ", p->Dhb[ret].sex);
printf("%d ", p->Dhb[ret].age);
printf("%s ", p->Dhb[ret].tell);
printf("%s ", p->Dhb[ret].address);
}
}
void modify_stu(Contact *p)//修改聯系人
{
int ret;
char name[20];
printf("請輸入要修改人的姓名:");
scanf("%s", name);
ret = search(p, name);
if (ret != -1)
{
printf("請把姓名修改成:");
scanf("%s", p->Dhb[ret].name);
printf("請把性別修改成:");
scanf("%s", p->Dhb[ret].sex);
printf("請把年齡修改成:");
scanf("%d", &p->Dhb[ret].age);
printf("請把電話修改成:");
scanf("%s", p->Dhb[ret].tell);
printf("請把地址修改成:");
scanf("%s", p->Dhb[ret].address);
}
else
{
printf("不存在此人\n");
}
}
void show_stu(Contact *p)//顯示聯系人信息
{
int i = 0;
printf("輸出所有人的信息:");
for (i = 0; i <( p->count); i++)
{
printf("%s ",p->Dhb[i].name);
printf("%s ", p->Dhb[i].sex);
printf("%d ", p->Dhb[i].age);
printf("%s ", p->Dhb[i].tell);
printf("%s ", p->Dhb[i].address);
}
printf("\n");
}
void clear_stu(Contact *p)//清空聯系人
{
p->count = 0;//是人員計數的變量置0就可以實現清空
}
void sort_stu(Contact *p)//以名字排序所有聯系人
{
int i = 0;
int j = 0;
for (i = 0; i < p->count-1;i++)//冒泡法
for (j = 0; j < p->count - 1 - i;j++)
{
if (strcmp(p->Dhb[j].name, p->Dhb[j + 1].name)>0)
{
Peo tmp;
tmp=p->Dhb[j];
p->Dhb[j] =p-> Dhb[j + 1];
p->Dhb[j + 1] = tmp;
}
}
void show_stu( p);
}
總結:此題只是利用了相關結構體的知識,主要難處就是三個模塊各自的分工不好想到,其他地方便只是基本方法的實現。