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控制台编码?(不改
- 下一篇: vs(visual studio)调试功