C语言实现通讯录初版
生活随笔
收集整理的這篇文章主要介紹了
C语言实现通讯录初版
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
邏輯代碼塊:
#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"/*該程序中所報的警告都可忽略不計,不造成影響 *//*通訊錄:1. 可以存放一千個人的信息2. 人的信息:名字,年齡, 電話, 住址, 性別3. 增加聯系人4. 刪除聯系人5. 查找聯系人6. 修改聯系人7. 排序(名字/年齡)8. 保存聯系人9. 讀取聯系人 *///使用枚舉更方便,更易懂 enum opration {Exit,//0Add,//1Delete,//2Modify,//3Search,//4Show,//5Sort,//6Sava,//7Reading//8 };void menu() {printf(" 通訊錄 \n");printf("1. 增加聯系人 2. 刪除聯系人\n");printf("3. 修改信息 4. 查找聯系人\n");printf("5. 展示所有聯系人信息 6. 將聯系人排序 \n");printf("7. 保存聯系人信息 8. 讀取聯系人信息\n");printf("0. 退出 \n"); }int main() {int input = 0;//創建結構通訊錄conContact con;//初始化結構體Initcontact(&con);do{menu();int a = scanf("%d", &input);system("cls");switch (input){case Add:Addcontact(&con);break;case Delete:Deletecontact(&con);break;case Modify:Modifycontact(&con);break;case Search:Searchcontact(&con);break;case Show:Showcontact(&con);break;case Sort:Sortcontact(&con);break;case Sava:Savacontact(&con);break;case Reading:Readcontact(&con);break;case Exit:printf("Exit contact!\n");break;default:printf("Please input again!\n");break;}} while (input);return 0; }所需頭文件:
#pragma once#include <stdio.h> #include <assert.h> #include <string.h> #include <stdlib.h> #include <errno.h>//為了更改更方便,使用宏定義 #define NAME_MAX 20 #define GENDER_MAX 5 #define TELE_MAX 12 #define ADDRE_MAX 30 #define MAX 1000//定義人信息的結構體,為了方便,重定義個更簡單的名字 typedef struct PeoInfo {char name[NAME_MAX];int age;char gender[GENDER_MAX];char tele[TELE_MAX];char address[ADDRE_MAX]; }PeoInfo;//定義查看通訊錄里有多少人,創建通訊錄結構體 typedef struct Contact {PeoInfo data[MAX];//1000個人的信息int sz;//已經存放信息的數量 }Contact;//初始化結構體 void Initcontact(Contact* p);//增加聯系人 void Addcontact(Contact* p);//查看聯系人 void Showcontact(const Contact* p);//刪除聯系人 void Deletecontact(Contact* p);//查找聯系人 void Searchcontact(const Contact* p);//修改聯系人 void Modifycontact(Contact* p);//聯系人排序(姓名/年齡) void Sortcontact(Contact* p);//存儲聯系人 void Savacontact(Contact* p);//讀取已存儲聯系人的信息 void Readcontact(Contact* p);本體實現:
#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void Initcontact(Contact* p) {assert(p);p->sz = 0;//使用內存函數初始化memset(p->data, 0, sizeof(p->data)); }void Addcontact(Contact* p) {assert(p);//滿了則不再添加if (p->sz == MAX){printf("通訊錄已滿!\n");return;}//否則繼續添加printf("請輸入要添加聯系人的姓名\n");int a = scanf("%s", p->data[p->sz].name);printf("請輸入要添加聯系人的年齡\n");int b = scanf("%d", &(p->data[p->sz].age));printf("請輸入要添加聯系人的性別\n");int c = scanf("%s", p->data[p->sz].gender);printf("請輸入要添加聯系人的電話\n");int d = scanf("%s", p->data[p->sz].tele);printf("請輸入要添加聯系人的地址\n");int e = scanf("%s", p->data[p->sz].address);//添加成功,聯系人加一p->sz++;//提示添加成功printf("添加成功!\n"); }void Showcontact(const Contact* p) {assert(p);//打印已有聯系人printf("%-10s\t%-5s\t%-5s\t%-13s\t%-20s\n", "姓名", "性別", "年齡", "電話", "地址");int i = 0;for (i = 0; i < p->sz; i++){printf("%-10s\t", p->data[i].name);printf("%-5s\t", p->data[i].gender);printf("%-5d\t", p->data[i].age);printf("%-13s\t", p->data[i].tele);printf("%-20s\n", p->data[i].address);} }//查找聯系人 int Fine_contact(const Contact* p, char name[]) {assert(p);int i = 0;for (i = 0; i < p->sz; i++){//當strcmp返回值等于0時,說明找到了,返回szif (strcmp((p->data[i].name), name) == 0){return i;}}//否則返回return -1; }void Deletecontact(Contact* p) {assert(p);//通訊錄沒有聯系人,則無法刪除if (p->sz == 0){printf("刪除失敗,通訊錄為空!\n");return;}//否則開始刪除聯系人char name[NAME_MAX] = { 0 };printf("請輸入被刪除聯系人的姓名\n");int a = scanf("%s", name);int ret = Fine_contact(p, name);//當ret等于-1時,說明沒有該聯系人if (ret == -1){printf("沒有該聯系人!\n");return;}else{//否則開始刪除int j = 0;for (j = ret; j < (p->sz) - 1; j++){p->data[j] = p->data[j + 1];}//刪除以后人聯系人減一p->sz--;printf("刪除聯系人成功!\n");} }void Searchcontact(const Contact* p) {assert(p);char name[NAME_MAX] = { 0 };printf("請輸入想要查找聯系人的名字\n");int a = scanf("%s", name);int ret = Fine_contact(p, name);if (ret == -1){printf("查找失敗,沒有該聯系人\n");}else{printf("%-10s\t%-5s\t%-5s\t%-13s\t%-20s\n", "姓名", "性別", "年齡", "電話", "地址");printf("%-10s\t", p->data[ret].name);printf("%-5s\t", p->data[ret].gender);printf("%-5d\t", p->data[ret].age);printf("%-13s\t", p->data[ret].tele);printf("%-20s\n", p->data[ret].address);} }void Modifycontact(Contact* p) {assert(p);//通訊錄沒有聯系人if (p->sz == 0){printf("沒有聯系人,修改失敗\n");return;}//通訊錄有聯系人,并修改信息char name[NAME_MAX] = { 0 };printf("請輸入要被修改聯系人的姓名\n");int a = scanf("%s", name);int ret = Fine_contact(p, name);if (ret == -1){printf("修改失敗,沒有該聯系人\n");return;}else{printf("請輸入想要修改的信息>\n");while (1){char infor[5] = { 0 };printf("可選信息如下:\n");printf("姓名 性別 年齡 電話 住址\n");int a = scanf("%s", infor);if (strcmp(infor, "姓名") == 0){printf("請輸入更改后的姓名\n");int b = scanf("%s", p->data[ret].name);printf("更改成功!\n");break;}else if (strcmp(infor, "性別") == 0){printf("請輸入更改后的性別\n");int c = scanf("%s", p->data[ret].gender);printf("更改成功!\n");break;}else if (strcmp(infor, "年齡") == 0){printf("請輸入更改后的年齡\n");int d = scanf("%d", &(p->data[ret].age));printf("更改成功!\n");break;}else if (strcmp(infor, "電話") == 0){printf("請輸入更改后的電話號碼\n");int e = scanf("%s", p->data[ret].tele);printf("更改成功!\n");break;}else if (strcmp(infor, "住址") == 0){printf("請輸入更改后的住址\n");int f = scanf("%s", p->data[ret].address);printf("更改成功!\n");break;}else{printf("輸入錯誤,請重新輸入\n");}}} }//姓名比較函數 int com_name(Contact* p, int j) {return strcmp(p->data[j].name, p->data[j + 1].name); }//年齡比較函數 int com_age(Contact* p, int j) {return p->data[j].age - p->data[j + 1].age; }//采用冒泡思想排序 void Bubble_sort(Contact* p, int (*com)(Contact* s, int num)) {int i = 0;for (i = 0; i < p->sz - 1; i++){int j = 0;for (j = 0; j < p->sz - 1 - i; j++){if ( com(p, j)> 0){PeoInfo temp = p->data[j];p->data[j] = p->data[j+1];p->data[j+1] = temp;}}} }void Sortcontact(Contact* p) {assert(p);printf("請選擇排序方式>\n");while (1){printf("可選信息如下:\n");printf("姓名 年齡\n");char sort[5] = { 0 };int a = scanf("%s", sort);//按姓名排序if (strcmp(sort, "姓名") == 0){Bubble_sort(p, com_name);printf("排序完成,排序結果如下:\n");Showcontact(p);break;}//按年齡排序else if (strcmp(sort, "年齡") == 0){Bubble_sort(p, com_age);printf("排序完成,排序結果如下:\n");Showcontact(p);break;}else{printf("選擇錯誤,請重新輸入!\n");}} }void Savacontact(Contact* p) {assert(p);FILE* pw = fopen("contact.txt", "w");//為空時打印錯誤信息并直接返回if (pw == NULL){printf("Savacontact:%s\n", strerror(errno));return;}//聯系人信息存儲fprintf(pw, "%d\n", p->sz);//存儲聯系人個數int i = 0;//存儲聯系人信息for (i = 0; i < p->sz; i++){fprintf(pw, "%s %s %d %s %s\n",p->data[i].name, p->data[i].gender, p->data[i].age, p->data[i].tele, p->data[i].address);}//操作完成后關閉并置于NULLfclose(pw);pw = NULL;printf("保存成功!\n"); }void Readcontact(Contact* p) {assert(p);FILE* pr = fopen("contact.txt", "r");//為空時打印錯誤信息并返回if (pr == NULL){printf("Readcontact():%s\n", strerror(errno));return;}//讀取練習人個數int b = fscanf(pr, "%d", &(p->sz));printf("通訊錄情況如下:\n");//打印格式printf("%-10s\t%-5s\t%-5s\t%-13s\t%-20s\n", "姓名", "性別", "年齡", "電話", "地址");//讀取并打印聯系人信息int i = 0;for (i = 0; i < p->sz; i++){int a = fscanf(pr,"%s %s %d %s %s\n", p->data[i].name, p->data[i].gender, &(p->data[i].age), p->data[i].tele, p->data[i].address);printf("%-10s\t", p->data[i].name);printf("%-5s\t", p->data[i].gender);printf("%-5d\t", p->data[i].age);printf("%-13s\t", p->data[i].tele);printf("%-20s\n", p->data[i].address);}//操作完成后關閉并置于NULLfclose(pr);pr = NULL; }總結
以上是生活随笔為你收集整理的C语言实现通讯录初版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JAVA】poi操作,excel读取数
- 下一篇: .NET实现在Word指定页码之间插入另