对于通讯的实习,想必会是,学习计算机专业的毕业设计吧!!但是,却是难到了不少人!!叫苦连天!也有不少人在咨询笔者的!!最近以来,笔者刚学习了结构体!所以顺便花了三天多,研究了一下通讯录的实现!所以,笔者打算分享出来,与大家共勉!!
注意,这个是:静态的版本!!其他的版本,请等待笔者后续更新!!请不要着急!
下面,我们需要在写之前,有自己的想法:在以下三个文件名中,分别有自己的专门输入的东西!!
1.test.c : 测试通讯录的!
2.contact.c : 通讯录的实现!
3.contact.h : 通讯录的声明!
在通讯录中:定义100个人的信息,每个人的信息都包含:
姓名
性别
电话
年龄
住址
在菜单栏中的提示:也是该通讯录的主要内容!!
1.增加联系人
2.修改指定联系人
3.删除指定联系人
4.查找指定联系人
5.排序通讯录
6.显示通讯录的信息
下面请看笔者的源代码!!
在test.c文件中!测试通讯录的!
#define _CRT_SECURE_NO_WARNINGS 1 #include "contact.h" void menu() { printf("**************************************\n"); printf("***** 1. add 2. del *****\n"); printf("***** 3. search 4. modify *****\n"); printf("***** 5. show 6. sort *****\n"); printf("***** 0. exit *****\n"); printf("**************************************\n"); } int main() { int input = 0; //创建通讯录 struct Contact con;//通讯录 //初始化通讯录 InitContact(&con); do { menu(); printf("请选择>:"); scanf("%d", &input); switch (input) { case 1: AddContact(&con); break; case 2: DelContact(&con); break; case 3: SearchContact(&con); break; case 4: ModifyContact(&con); break; case 5: ShowContact(&con); break; case 6: SortContact(&con); break; case 0: printf("退出通讯录\n"); break; default: printf("选择错误\n"); break; } } while (input); return 0; }
在contact .c文件中:通讯录的实现!
#define _CRT_SECURE_NO_WARNINGS 1 #include "contact.h" void InitContact(struct Contact* pc) { assert(pc); pc->sz = 0; memset(pc->data, 0, MAX *sizeof(struct PeoInfo)); } void AddContact(struct Contact* pc) { assert(pc); if (pc->sz == MAX) { printf("通讯录已满,无法添加数据\n"); return; } //增加人的信息 printf("请输入名字:>"); scanf("%s", pc->data[pc->sz].name); printf("请输入性别:>"); scanf("%s", pc->data[pc->sz].sex); printf("请输入年龄:>"); scanf("%d", &(pc->data[pc->sz].age)); printf("请输入电话:>"); scanf("%s", pc->data[pc->sz].tele); printf("请输入地址:>"); scanf("%s", pc->data[pc->sz].addr); pc->sz++; printf("成功增加联系人\n"); } void ShowContact(const struct Contact* pc) { int i = 0; printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "性别", "年龄", "电话", "地址"); for (i = 0; i < pc->sz; i++) { printf("%-20s\t%-5s\t%-5d\t%-12s\t%-30s\n", pc->data[i].name, pc->data[i].sex, pc->data[i].age, pc->data[i].tele, pc->data[i].addr); } } static int FindByName(const struct Contact* pc, char name[]) { int i = 0; for (i = 0; i < pc->sz; i++) { if (0 == strcmp(pc->data[i].name, name)) { return i; } } return -1; } void DelContact(struct Contact* pc) { char name[MAX_NAME]; printf("请输入要删除人的名字:>"); scanf("%s", name); //查找一下指定的人是否存在 int ret = FindByName(pc, name); if (ret == -1) printf("要删除的人不存在\n"); else { //删除 int j = 0; for (j = ret; j < pc->sz-1; j++) { pc->data[j] = pc->data[j + 1]; } pc->sz--; printf("成功删除指定联系人\n"); } } void SearchContact(const struct Contact* pc) { char name[MAX_NAME]; printf("请输入要查找的人的名字:>"); scanf("%s", name); //查找一下指定的人是否存在 int ret = FindByName(pc, name); if (ret == -1) printf("要查找的人不存在\n"); else { printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "性别", "年龄", "电话", "地址"); printf("%-20s\t%-5s\t%-5d\t%-12s\t%-30s\n", pc->data[ret].name, pc->data[ret].sex, pc->data[ret].age, pc->data[ret].tele, pc->data[ret].addr); } } void ModifyContact(struct Contact* pc) { printf("请输入要修改人的名字:>"); char name[MAX_NAME]; scanf("%s", name); int ret = FindByName(pc, name); if (ret == -1) printf("要修改的人不存在\n"); else { printf("请输入名字:>"); scanf("%s", pc->data[ret].name); printf("请输入性别:>"); scanf("%s", pc->data[ret].sex); printf("请输入年龄:>"); scanf("%d", &(pc->data[ret].age)); printf("请输入电话:>"); scanf("%s", pc->data[ret].tele); printf("请输入地址:>"); scanf("%s", pc->data[ret].addr); printf("修改成功\n"); } } //int CmpByAge(const void* e1, const void* e2) //{ // return ((struct PeoInfo*)e1)->age - ((struct PeoInfo*)e2)->age; //} // 按照年龄来排序 //void SortContact(struct Contact* pc) //{ // qsort(pc->data, pc->sz, sizeof(struct PeoInfo), CmpByAge); //} int CmpByName(const void* e1, const void* e2) { return strcmp( ((struct PeoInfo*)e1)->name, ((struct PeoInfo*)e2)->name); } //按照年龄来排序 void SortContact(struct Contact* pc) { qsort(pc->data, pc->sz, sizeof(struct PeoInfo), CmpByName); }
在contact.h文件中:通讯录的声明!
#include <string.h> #include <stdio.h> #include <assert.h> #include <stdlib.h> #define MAX 100 #define MAX_NAME 20 #define MAX_SEX 5 #define MAX_TELE 12 #define MAX_ADDR 30 //表示人信息 struct PeoInfo { char name[MAX_NAME]; char sex[MAX_SEX]; char tele[MAX_TELE]; int age; char addr[MAX_ADDR]; }; //通讯录 struct Contact { struct PeoInfo data[MAX]; int sz; }; //初始化通讯录 void InitContact(struct Contact* pc); //增加人的信息到通讯录 void AddContact(struct Contact* pc); //显示通讯录中的信息 void ShowContact(const struct Contact* pc); //删除指定联系人 void DelContact(struct Contact* pc); //查找指定联系人 void SearchContact(const struct Contact* pc); //修改指定联系人的信息 void ModifyContact(struct Contact* pc); //排序通讯录中的信息 - 年龄 void SortContact(struct Contact* pc);
上面就是一个静态的通讯录源代码!!与大家分享一下!!若有不懂得地方,请各位老铁及时私聊!!