C语言通讯录—简单模拟实现
生活随笔
收集整理的這篇文章主要介紹了
C语言通讯录—简单模拟实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1.基本功能
- 2.源碼部分
- ①contact.h代碼
- ②contact.c源碼
- 初始化
- 擴容
- 增加通訊錄成員
- 通過姓名查找成員
- 展示通訊錄
- 刪除通訊錄成員
- 修改學生信息
- 根據姓名進行排序
- 銷毀動態內存申請的空間
- ③test.c
1.基本功能
我的通訊錄實現的幾個功能
1.增加通訊錄成員
2.動態擴容
3.通過名字搜索通訊錄成員
4.展示通訊錄
5.刪除通訊錄成員
6.修改學生信息
7.按照名字進行排序
2.源碼部分
①contact.h代碼
在這里插入代碼片 #define _CRT_SECURE_NO_WARNINGS #include<string.h> #include<stdio.h> #include<malloc.h> #include<assert.h> #include<errno.h> #include<stdlib.h>#define MAX 1000 #define NAME_MAX 20 #define TELE_MAX 13 #define ADDR_MAX 20 #define SEX_MAX 10 #define DEFAULT_SZ 3//定義每個成員數據的結構體 typedef struct PeoInfo {char name[NAME_MAX];int age;char tele[TELE_MAX];char addr[ADDR_MAX];char sex[SEX_MAX]; }PeoInfo;//定義通訊錄結構體 typedef struct Contact {PeoInfo* data;int sz; //表示當前通訊錄的名字int capacity;//表示最大容量 }Contact;//初始化結構體 void Init(Contact* pc);//增加通訊錄成員信息 void Add(Contact* pc);//擴容 void CheckCapacity(Contact* pc);//搜素學生 int SearchByName(Contact* pc);//展示數據 void Show( Contact* pc);//刪除 void Delete(Contact* pc);//修改通訊錄信息 void Modify(Contact* pc);//按照名字排序 void SortByName(Contact* pc);//銷毀動態內存分配所申請到的空間 void DestroyContact(Contact* pc);②contact.c源碼
初始化
void Init(Contact* pc) {assert(pc);pc->sz = 0;pc->capacity = DEFAULT_SZ;PeoInfo* temp = (PeoInfo*)malloc(pc->capacity * sizeof(PeoInfo));if (temp != NULL){pc->data = temp;}else{printf("Init():%s\n", strerror(errno));}memset(pc->data, 0, sizeof(pc->data)); //直接硬核初始化return; }擴容
void CheckCapacity(Contact* pc) {assert(pc);if (pc->sz == pc->capacity){PeoInfo* temp = (PeoInfo*)realloc(pc->data,(pc->capacity + 2) * sizeof(PeoInfo));if (temp != NULL){pc->data = temp;pc->capacity += 2;printf("擴容成功!\n");return;}else{printf("CheckCapacity():%s\n", strerror(errno));}}return; }增加通訊錄成員
void Add(Contact* pc) {assert(pc);CheckCapacity(pc);printf("請輸入姓名:\n");//注意這個地方姓名輸入的形式scanf("%s", pc->data[pc->sz].name);printf("請輸入年齡:\n");scanf("%d", &pc->data[pc->sz].age);printf("請輸入性別:\n");scanf("%s", pc->data[pc->sz].sex);printf("請輸入電話:\n");scanf("%s", &pc->data[pc->sz].tele);printf("請輸入地址:\n");scanf("%s", &pc->data[pc->sz].addr);pc->sz++;printf("增加成功!\n"); }通過姓名查找成員
int SearchByName(Contact* pc) {int i = 0;char name[NAME_MAX] = { 0 };printf("請輸入要查詢的姓名\n");scanf("%s", name);assert(pc && name);for (i = 0; i < pc->sz; i++){if (strcmp(name, pc->data[i].name) == 0)return i; //如果找到了,那就返回它的下標}printf("搜索不到這個目標\n"); return -1; }展示通訊錄
void Show( Contact* pc) {int i = 0;assert(pc);printf("%-20s\t%-5s\t%-10s\t%-15s\t%-20s\n", "姓名", "年齡", "性別", "電話", "地址");for (i = 0; i < pc->sz; i++){printf("%-20s\t%-5d\t%-10s\t%-15s\t%-20s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);} }刪除通訊錄成員
void Delete(Contact* pc) {int ret = 0;int i = 0;assert(pc);if (pc->sz == 0){printf("通訊錄人數太少,無法刪除!\n");return;}ret = SearchByName(pc);if (!ret){printf("查找不到這個目標!\n");}for (i = ret; i < pc->sz - 1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("刪除指定聯系人成功!\n");return; }修改學生信息
void Modify(Contact* pc) {int index = 0;assert(pc);index = SearchByName(pc);if (index==-1){printf("輸入錯誤,找不到該通訊錄成員!\n");return;}Show(pc);printf("查找成功!請依次重新輸入每項信息:\n");printf("請輸入姓名:\n");scanf("%s", pc->data[index].name);printf("請輸入年齡:\n");scanf("%d", &pc->data[index].age);printf("請輸入性別:\n");scanf("%s", pc->data[index].sex);printf("請輸入電話:\n");scanf("%s", &pc->data[index].tele);printf("請輸入地址:\n");scanf("%s", &pc->data[index].addr);return; }根據姓名進行排序
int cmp(const void* e1,const void* e2) {//這里注意要轉化成結構體指針,再指向姓名return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name); } void SortByName(Contact* pc) {int i = 0, j = 0;assert(pc);qsort(pc->data, pc->sz, sizeof(PeoInfo), cmp);/*for (i = 0; i < pc->sz - 1; i++){for (j = 0; j < pc->sz - i - 1; j++){if (strcmp(pc->data[j].name, pc->data[j + 1].name) > 0){PeoInfo temp = pc->data[j];pc->data[j] = pc->data[j + 1];pc->data[j + 1] = temp;}}}*/printf("排序成功!\n");return; }銷毀動態內存申請的空間
void DestroyContact(Contact* pc) {free(pc->data);pc->data = NULL;pc->capacity = 0;pc->sz = 0; }③test.c
#include"contact.h"enum Oprion {EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT };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;//PeoInfo* data=(PeoInfo*)calloc(MAX,sizeof(pc->data[0]);Contact con ;//先初始化這個結構體的數據Init(&con);do{ menu();printf("請輸入:\n");scanf("%d", &input);switch (input){case ADD: Add(&con);break;case DEL: Delete(&con);break;case SEARCH:SearchByName(&con);break;case MODIFY:Modify(&con);break;case SHOW: Show(&con);break;case SORT: SortByName(&con);break;case EXIT: printf("退出程序\n");DestroyContact(&con);break;default: printf("輸入數字無效!\n");break;}} while (input);return 0; }總結
以上是生活随笔為你收集整理的C语言通讯录—简单模拟实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 读取本地excel文件,PHP读
- 下一篇: sas入门之(三)条件语句,循环语句,i