动态版简易通讯录制作
生活随笔
收集整理的這篇文章主要介紹了
动态版简易通讯录制作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通訊錄(其中有malloc和realloc的使用)
//簡易通訊錄制作 #include<stdio.h> #include<string.h> #include<assert.h> #include<stdlib.h> #include<assert.h> #define MAX 100//通訊錄的聯系人個數 #define MAX_NAME 20//規定人名字符串長度 #define MAX_SEX 5//規定性別字符串長度 #define MAX_TELE 12//規定電話字符串長度 #define MAX_ADDR 30//規定住址字符串長度 #define DETFALT_SZ 3//動態容量默認大小 #define INC_SZ 2//增加的內存大小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; //}; // struct contact {//通訊錄結構體(動態版本)struct peoinfo* data;int sz;int capacity;//容量大小}; //函數聲明 void menu();//菜單 void initcontact(struct contact* pc);//初始化通訊錄結構體 void addcontact(struct contact* pc);//1.添加聯系人 void delcontact(struct contact* pc);//2.刪除聯系人 void updatecontact(struct contact* pc);//3.修改聯系人信息 void qsortcontact(struct contact* pc);//4.對聯系人信息排序 void showcontact(struct contact* pc);//5.查看通訊錄 void searchcontact(struct contact* pc);//6.尋找指定聯系人 void delallcontact(struct contact* pc);//7.清空所有聯系人 int check_capacity(struct contact* pc);//檢查是否能夠或者需要增容 void destroycontact(struct contact* pc);//銷毀開辟的內存void menu() {printf("*********************************************************\n");printf("*********************《簡易通訊錄》**********************\n");printf("**********1.添加聯系人 2.刪除聯系人 ************\n");printf("**********3.修改聯系人信息 4.排序 ************\n");printf("**********5.查看通訊錄 6.尋找指定聯系人 ************\n");printf("**********7.清空所有聯系人 0.退出 ************************\n");printf("*********************************************************\n"); } //void initcontact(struct contact* pc)//初始化通訊錄結構體(靜態版本) //{ // pc->sz = 0; // memset(pc->data, 0, MAX * sizeof(struct peoinfo)); //}//void addcontact(struct contact* pc)//1.添加聯系人(靜態版本) //{ // if (pc->sz == MAX) // { // printf("通訊錄已滿\n"); // return; // } // printf("請輸入你要添加聯系人的姓名->\n"); // scanf("%s", pc->data[pc->sz].name); // printf("請輸入你要添加聯系人的性別->\n"); // scanf("%s", pc->data[pc->sz].sex); // printf("請輸入你要添加聯系人的年齡->\n"); // scanf("%d", &pc->data[pc->sz].age); // printf("請輸入你要添加聯系人的電話:\n"); // scanf("%s", pc->data[pc->sz].tele); // printf("請輸入你要添加聯系人的家庭住址:\n"); // scanf("%s", pc->data[pc->sz].addr); // pc->sz++; // printf("新的聯系人添加成功!\n"); //}void initcontact(struct contact* pc)//初始化通訊錄結構體(動態版本) {assert(pc);pc->data= (struct peoinfo*)malloc(DETFALT_SZ * sizeof(struct peoinfo));if (pc->data == NULL){perror("initcontact()");return; }pc->sz = 0;pc->capacity = DETFALT_SZ; }void destroycontact(struct contact* pc)//銷毀開辟的內存 {free(pc->data);pc->data = NULL;pc->capacity = 0;pc->sz = 0; }int check_capacity(struct contact* pc) {if (pc->sz == pc->capacity){struct peoinfo* p = (struct peoinfo*)realloc(pc->data, (pc->capacity + INC_SZ) * sizeof(struct peoinfo));if (p != NULL){pc->data = p;pc->capacity += INC_SZ;printf("增容成功\n");return 1;}else{perror("addcontact()");return 0;}}elsereturn 1; } void addcontact(struct contact* pc)//1.添加聯系人(動態版本) {assert(pc);if (0 == check_capacity(pc)){return;}printf("請輸入你要添加聯系人的姓名->\n");scanf("%s", pc->data[pc->sz].name);printf("請輸入你要添加聯系人的性別->\n");scanf("%s", pc->data[pc->sz].sex);printf("請輸入你要添加聯系人的年齡->\n");scanf("%d", &pc->data[pc->sz].age);printf("請輸入你要添加聯系人的電話:\n");scanf("%s", pc->data[pc->sz].tele);printf("請輸入你要添加聯系人的家庭住址:\n");scanf("%s", pc->data[pc->sz].addr);pc->sz++;printf("新的聯系人添加成功!\n"); }int findname(struct contact* pc, char name[])//尋找與結構體中名字相同的下標 {for (int i = 0; i < pc->sz; i++){if(strcmp(pc->data[i].name,name)==0){return i;}}return -1; } void delcontact(struct contact* pc)//2.刪除聯系人 {printf("請輸入你要刪除的聯系人->\n");char name[MAX_NAME];scanf("%s", name);if (findname(pc, name) == -1){printf("你輸入的聯系人不存在\n");}else{for (int i = findname(pc, name); i < pc->sz - 1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("聯系人刪除成功!\n");} }void updatecontact(struct contact* pc)//3.修改聯系人信息 {printf("請輸入你要修改的聯系人->\n");char name[MAX_NAME];scanf("%s", name);int ret = findname(pc, name);if (findname(pc, name) == -1){printf("你輸入的聯系人不存在\n");}else{printf("請輸入修改后的聯系人的姓名->\n");scanf("%s", pc->data[ret].name);printf("請輸入修改后的聯系人的性別->\n");scanf("%s", pc->data[ret].sex);printf("請輸入修改后的聯系人的年齡->\n");scanf("%d", &pc->data[ret].age);printf("請輸入修改后的聯系人的電話:\n");scanf("%s", pc->data[ret].tele);printf("請輸入修改后的聯系人的家庭住址:\n");scanf("%s", pc->data[ret].addr);printf("聯系人信息修改成功!\n");} }void byageqsort(const char* e1, const char* e2)//通過年齡排序 {return ((struct peoinfo*)e1)->age - ((struct peoinfo*)e2)->age; }void bynamesort(const char* e1, const char* e2)//通過名字字典序排序 {return strcmp(((struct peoinfo*)e1)->name, ((struct peoinfo*)e2)->name); }void qsortcontact(struct contact* pc)//4.對聯系人信息排序 {qsort(pc->data, pc->sz, sizeof(struct peoinfo), byageqsort); }void showcontact(struct contact* pc)//5.查看通訊錄 {if (pc->sz == 0){printf("通訊錄中的內容為空!請先輸入聯系人!\n");return;}printf("%-10s %-8s %-8s %-15s %-20s\n", "姓名", "性別", "年齡", "電話", "家庭住址");for (int i = 0; i < pc->sz; i++){printf("%-10s %-8s %-8d %-15s %-20s\n", pc->data[i].name, pc->data[i].sex, pc->data[i].age, pc->data[i].tele, pc->data[i].addr);} }void searchcontact(struct contact* pc)//6.尋找指定聯系人 {printf("請輸入你要查找的聯系人->\n");char name[MAX_NAME];scanf("%s", name);int ret = findname(pc, name);if (ret == -1){printf("你輸入的聯系人不存在\n");}else{printf("你要查找的聯系人信息如下:\n");printf("%-10s %-8s %-8s %-15s %-20s\n", "姓名", "性別", "年齡", "電話", "家庭住址");printf("%-10s %-8s %-8d %-15s %-20s\n", pc->data[ret].name, pc->data[ret].sex, pc->data[ret].age, pc->data[ret].tele, pc->data[ret].addr);} }void delallcontact(struct contact* pc)//7.清空所有聯系人 {pc->sz = 0;memset(pc->data, 0, MAX * sizeof(struct peoinfo));printf("已清空所有聯系人!\n"); }int main() {struct contact con;initcontact(&con);int input=-1;do {menu();printf("請輸入你的選擇->\n");scanf("%d", &input);switch (input){case 1:addcontact(&con); break;case 2:delcontact(&con); break;case 3:updatecontact(&con); break;case 4:qsortcontact(&con); break;case 5:showcontact(&con); break;case 6:searchcontact(&con); break;case 7:delallcontact(&con); break;case 0:destroycontact(&con); printf("成功退出通訊錄\n"); break;default:printf("你輸入的數字有誤\n"); break;}} while (input); }總結
以上是生活随笔為你收集整理的动态版简易通讯录制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hibernate二级缓存作用、配置
- 下一篇: 读取 wav 格式声音文件