c语言通讯录项目(电话簿)
生活随笔
收集整理的這篇文章主要介紹了
c语言通讯录项目(电话簿)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 基本版
- 升級版(使用指針、單向鏈表、動態數組malloc)
- 20200621 蔣工給的“模塊版”
基本版
#include <stdio.h> #include <stdlib.h> #include <String.h>struct User {int yet = 0;char user_name[20] = { 0 };char phone_number[20] = { 0 }; }users[3];//用戶數量//User users[10];//給10個用戶開辟存儲空間int AddContacts(char user_name[], char phone_number[]) { //添加聯系人//printf("%ld\n", sizeof(users[0]));//44for (int i = 0; i < sizeof(users)/sizeof(users[0]); i++) {if (0 == users[i].yet) {//判斷這個空間有沒有被占用users[i].yet = 1;strcpy_s(users[i].user_name, user_name);strcpy_s(users[i].phone_number, phone_number);//sprintf(users[i].user_name, user_name);return i;}}return 999; }int FindName(char find_name[]) {//不知道怎么返回字符串,只能返回下標了int i;for (i = 0; i < 100; i++) {if (1 == users[i].yet) {//判斷這個空間有沒有被占用if (strcmp(find_name, users[i].user_name) == 0) {return i;}}}return 999; }int main() {char user_name[20] = { 0 };//11char phone_number[20] = { 0 };//12char find_name[20] = { 0 };char find_phone_number[20] = { 0 };while (1){int choose = 999;printf("Number 1: add new user; Number 2: Find user; [END WITH ENTER]\n");scanf_s("%d", &choose);if (1 == choose) {printf("Please input new user name[END WITH ENTER]:\n");scanf_s("%s", user_name, sizeof(user_name));printf("Please input the user's telephone number[END WITH ENTER]:\n");scanf_s("%s", phone_number, sizeof(phone_number));int i;i = AddContacts(user_name, phone_number);if (999 == i) {printf("No space for saving!\n\n");}else {printf("The number %d user has been added!\n\n", i);}}else if (2 == choose){printf("Please input the name you want to find[END WITH ENTER]:\n");scanf_s("%s", find_name, sizeof(find_name));//printf("Hasaki!\n");int index = FindName(find_name);if (999!=index) {strcpy_s(find_phone_number, users[index].phone_number);printf("\n* Name:%s\n* phone number:%s\n\n", find_name, find_phone_number);}else {printf("Couldn't find the user, please input the user's name again!\n\n");}//system("pause");}else {printf("Please input the correct instruction!\n\n");}}return 0; }運行結果:
Number 1: add new user; Number 2: Find user; [END WITH ENTER] 1 Please input new user name[END WITH ENTER]: mike Please input the user's telephone number[END WITH ENTER]: 13344445555 The number 0 user has been added!Number 1: add new user; Number 2: Find user; [END WITH ENTER] 2 Please input the name you want to find[END WITH ENTER]: mike* Name:mike * phone number:13344445555Number 1: add new user; Number 2: Find user; [END WITH ENTER] 1 Please input new user name[END WITH ENTER]: Marry Please input the user's telephone number[END WITH ENTER]: 13344446666 The number 1 user has been added!Number 1: add new user; Number 2: Find user; [END WITH ENTER] 1 Please input new user name[END WITH ENTER]: Peter Please input the user's telephone number[END WITH ENTER]: 1345555555 The number 2 user has been added!Number 1: add new user; Number 2: Find user; [END WITH ENTER] 1 Please input new user name[END WITH ENTER]: Jenifer Please input the user's telephone number[END WITH ENTER]: 14433333333 No space for saving!Number 1: add new user; Number 2: Find user; [END WITH ENTER] 2 Please input the name you want to find[END WITH ENTER]: jjjjj Couldn't find the user, please input the user's name again!Number 1: add new user; Number 2: Find user; [END WITH ENTER]參考文章1:C語言設計簡易電話簿
參考文章2:C語言結構體詳解,C語言struct用法詳解
升級版(使用指針、單向鏈表、動態數組malloc)
#include<stdio.h> #include<stdlib.h> #include<String.h>//鏈表結點類型定義 struct LinkNode {char name[20];char number[20];struct LinkNode* next;//struct LinkNode* next = 0;//看見別人用0!//不能這么用!//struct LinkNode* next = NULL;//不能這么用!要在外面賦值 };void add_user(char* name, char* number, LinkNode* head_node) {LinkNode* add_node = (LinkNode*)malloc(sizeof(LinkNode));if (NULL == add_node) {printf("申請堆空間失敗!\n");return;}else {memcpy(add_node->name, name, sizeof(add_node->name));memcpy(add_node->number, number, sizeof(add_node->number));add_node->next = NULL;}LinkNode* node = head_node;//不設置尾結點變量的缺點就是每增加一個元素都要從頭找到尾while (NULL!=node->next) {node = node->next;}node->next = add_node; }int main() {char name[20];char number[20];LinkNode* now_node;//存儲當前結點地址//創建頭結點LinkNode* head_node = (LinkNode*)malloc(sizeof(LinkNode));if (NULL == head_node) {printf("申請堆空間失敗!\n");return 0;}else {head_node->next = NULL;}int choose;while (true) {//初始化(不然后面沒法用memcmp()函數來比較了)memset(name, 0 , sizeof(name));memset(number, 0 , sizeof(number));choose = 0;printf("1:新增\t2:查找\t3:刪除\t4:遍歷\n");scanf_s("%d", &choose);char c = getchar();//不加getchar有時候會一直打印,程序都快崩潰了!//新增用戶if (1 == choose) {printf("請輸入姓名:\n");scanf_s("%s", &name, sizeof(name));printf("請輸入電話號碼:\n");scanf_s("%s", &number, sizeof(number));add_user(name, number, head_node);printf("新增用戶成功!\n\n");}//查找用戶else if (2 == choose) {printf("請輸入查找用戶的姓名:\n");scanf_s("%s", &name, sizeof(name));c = getchar();//不加getchar有時候會一直打印,程序都快崩潰了!LinkNode* node = head_node;while(NULL!=(node->next)) {if (0 == memcmp(name, node->next->name, sizeof(name))) {printf("姓名:%s\t號碼:%s\n\n", node->next->name, node->next->number);break;}node = node->next;}if (NULL == (node->next)) {printf("用戶未找到,請重新輸入!\n\n");}}//刪除用戶else if (3==choose) {printf("請輸入要刪除的用戶名:\n");scanf_s("%s", &name, sizeof(name));c = getchar();LinkNode* node = head_node;int flag = 0;while (NULL != (node->next)) {if (0 == memcmp(name, node->next->name, sizeof(name))) {printf("姓名:%s\t號碼:%s\t用戶即將刪除...\n", node->next->name, node->next->number);LinkNode* free_node_address = node->next;if (NULL!=node->next->next) {node->next = node->next->next;}else {node->next = NULL;//如果刪除node下一個結點,后面就沒有結點了}if (NULL!=free_node_address) {free(free_node_address);free_node_address = NULL;}printf("成功刪除用戶!\n\n");flag = 1;break;}node = node->next;}if (flag == 0) {printf("用戶未找到,請重新輸入!\n\n");}}//遍歷用戶else if (4==choose) {LinkNode* node = head_node;while (NULL != (node->next)) { printf("姓名:%s\t\t電話:%s\n", node->next->name, node->next->number);node = node->next;}printf("\n");}//輸入錯誤else {printf("輸入錯誤,請重新輸入!\n\n");}}return 0; }運行結果:
1:新增 2:查找 3:刪除 4:遍歷 1 請輸入姓名: 項羽 請輸入電話號碼: 12233334444 新增用戶成功!1:新增 2:查找 3:刪除 4:遍歷 1 請輸入姓名: 劉邦 請輸入電話號碼: 1445555444 新增用戶成功!1:新增 2:查找 3:刪除 4:遍歷 2 請輸入查找用戶的姓名: 項羽 姓名:項羽 號碼:122333344441:新增 2:查找 3:刪除 4:遍歷 4 姓名:項羽 電話:12233334444 姓名:劉邦 電話:14455554441:新增 2:查找 3:刪除 4:遍歷 3 請輸入要刪除的用戶名: 項羽 姓名:項羽 號碼:12233334444 用戶即將刪除... 成功刪除用戶!1:新增 2:查找 3:刪除 4:遍歷 4 姓名:劉邦 電話:14455554441:新增 2:查找 3:刪除 4:遍歷 1 請輸入姓名: 劉備 請輸入電話號碼: 15555555555 新增用戶成功!1:新增 2:查找 3:刪除 4:遍歷 4 姓名:劉邦 電話:1445555444 姓名:劉備 電話:155555555551:新增 2:查找 3:刪除 4:遍歷20200621 蔣工給的“模塊版”
#include<memory> #include<string> #pragma warning(disable : 4996)//定義鏈表結點 typedef struct _Node {char* name;char* phone;struct _Node* next; }Node;//定義鏈表索引(里面存儲了鏈表長度和頭結點指針) typedef struct _List {int len;Node* head; }List;//定義創建結點函數 Node* node_create(const char* name, const char* phone) {Node* n = (Node*)malloc(sizeof(Node));if (NULL!=n) {n->name = (char*)malloc(strlen(name));n->phone = (char*)malloc(strlen(phone));if (NULL!= n->name && NULL!=n->phone) { strcpy(n->name, name);strcpy(n->phone, phone);}n->next = NULL;return n;} }//定義銷毀結點函數 int node_del(Node* n) {free(n->name);free(n->phone);free(n);return 0; }//初始化鏈表索引 List* list_init() {List* p = (List*)malloc(sizeof(List));if (NULL!=p) {p->head = NULL;p->len = 0;return p;} }//返回鏈表索引保存的鏈表長度 int list_len(List* l) {return l->len; }//定義刪除鏈表結點函數(同時修改鏈表索引中的鏈表長度數值) int list_del(List* l, Node* n) {Node* p = l->head;Node* tmp;if (NULL == p || NULL == n) {return -1;}while (true){if (NULL != p->next) {if (p->next = n) {if (NULL == p->next->next) { p->next = NULL;node_del(n);return 0;}else {p->next = p->next->next;node_del(n);return 0;}}else {p = p->next;}}else {return -1;}} }//定義新增結點函數 int list_add(List* l, Node* n) {Node* p = l->head;Node* tmp = p;if (l->head == NULL){l->head = n;return 0;}else {while (p != NULL){tmp = p;p = p->next;}tmp->next = n;return 0;}}int main() {List* l = list_init();int i;char name[20] = { 0 };char phone[20] = {0};for (i = 0; i < 5; i++){//Node* n = node_create("xxx", "123214");sprintf(name, "nnn%d", i);sprintf(phone, "ppp%d", i);Node* n = node_create(name , phone);list_add(l, n);n = node_create("ss", "123214");list_add(l, n);}Node* p = l->head;while (p != NULL){printf("name = %s \t phone = %s\n", p->name, p->phone);p = p->next;} }運行結果:
name = nnn0 phone = ppp0 name = ss phone = 123214 name = nnn1 phone = ppp1 name = ss phone = 123214 name = nnn2 phone = ppp2 name = ss phone = 123214 name = nnn3 phone = ppp3 name = ss phone = 123214 name = nnn4 phone = ppp4 name = ss phone = 123214總結
以上是生活随笔為你收集整理的c语言通讯录项目(电话簿)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么修改windows控制台编码?(不改
- 下一篇: visual studio c/c++变