通讯薄管理 要求:(1)依次输入通讯薄的编号,用户名和电话号码,并生成一个.txt文本文件。
(2)可添加和删除通讯薄中的内容。
(3)可以修改通讯薄中某个用户的用户名或电话号码。
要过程和代码
通讯薄管理过程和代码
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 技术专家团-小桥流水 2022-11-29 10:10关注
通讯录管理运行结果:
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> struct StNode { char num[12]; //编号 char name[20]; //用户名 char phone[40]; //电话号码 StNode* next; }; const char* filename = "record.txt"; //读文件 struct StNode* ReadFile() { struct StNode* head = 0; struct StNode* p, * t=0; FILE* fp = fopen(filename, "r"); if (fp == 0) { printf("文件打开失败\n"); return head; } while (!feof(fp)) { p = (struct StNode*)malloc(sizeof(struct StNode)); p->next = 0; p->num[0] = 0; p->name[0] = 0; p->phone[0] = 0; fscanf(fp, "%s %s %s", p->num, p->name, p->phone); if (strlen(p->phone) > 0) // { if (head == 0) { head = p; t = p; } else { t->next = p; t = p; } } else free(p); } fclose(fp); return head; } //写文件 void WriteFile(struct StNode* head) { struct StNode* p=0; FILE* fp = fopen(filename, "w"); p = head; while (p) { fprintf(fp, "%s %s %s\n", p->num, p->name, p->phone); p = p->next; } fclose(fp); fp = 0; } //录入信息 struct StNode* Input(struct StNode* head) { struct StNode* p, * node, * t; system("cls"); node = (struct StNode*)malloc(sizeof(struct StNode)); printf("请输入编号:"); scanf("%s", node->num); printf("请输入姓名:"); scanf("%s", node->name); //录入信息 printf("请输入手机号:"); scanf("%s", node->phone); //判断输入的手机号是否已经存在 t = head; while (t) { if (strcmp(t->phone, node->phone) == 0) { printf("该号码已存在,请重新输入:"); scanf("%s", node->phone); t = head; } else t = t->next; } node->next = 0; if (head == 0) { head = node; } else { p = head; while (p->next) p = p->next; //新建节点 p->next = node; } //写入文件 WriteFile(head); system("pause"); return head; } //显示所有手机信息 void showAll(struct StNode* head) { struct StNode* p; int i = 1; system("cls"); p = head; while (p) { printf("编号:%s\n", p->num); printf("姓名:%s\n", p->name); printf("手机号:%s\n",p->phone); i++; p = p->next; } system("pause"); } //删除信息 struct StNode* Del(struct StNode* head) { char tmp[40] = { 0 }; struct StNode* p, * t; p = head; printf("请输入需要删除的手机号或者姓名:"); scanf("%s", tmp); if (strcmp(head->name, tmp) == 0 || strcmp(head->phone, tmp) == 0) { p = head->next; free(head); head = p; return head; } p = head; t = head->next; while (t) { if (strcmp(t->name, tmp) == 0 || strcmp(t->phone, tmp) == 0) { printf("删除人员信息为:\n"); printf("编号:%s\n", t->num); printf("姓名:%s\n", t->name); printf("手机号:%s\n", t->phone); p->next = t->next; free(t); break; } } system("pause"); return head; } //查询信息 int Find(struct StNode* head) { int flag = 0; struct StNode* p = head; char name[40] = { 0 }; system("cls"); printf("请输入手机号或者姓名或编号:"); scanf("%s", &name); while (p) { if ((strcmp(p->name, name) == 0) || (strcmp(p->num, name) == 0) || (strcmp(p->phone, name) == 0)) { printf("编号:%s\n", p->num); printf("姓名:%s\n", p->name); printf("手机号:%s\n", p->phone); flag++; } p = p->next; } if (flag == 0) printf("查无此人\n"); return flag; } //修改手机信息 void ModInfo(struct StNode* head) { int nmb = 0, i, j; struct StNode* p = head; struct StNode* arr[30]; char name[40] = { 0 }; system("cls"); printf("请输入手机号或者姓名:"); scanf("%s", &name); while (p) { if ((strcmp(p->name, name) == 0) || (strcmp(p->num, name) == 0)) { printf("编号:%s\n", p->num); printf("姓名:%s\n", p->name); printf("手机号:%s\n", p->phone); arr[nmb] = p; nmb++; } p = p->next; } if (nmb == 0) printf("查无此人\n"); while (nmb != 1) { j = 0; printf("存在多条信息,请输入更多信息:"); scanf("%s", name); for (i = 0; i < nmb; i++) { p = arr[i]; if ((strcmp(p->name, name) == 0) || (strcmp(p->num, name) == 0) ) { arr[j++] = p; } } nmb = j; if (nmb == 0) { printf("查无此人\n"); system("pause"); return; } } // printf("请输入姓名:"); scanf("%s", arr[0]->name); printf("请输入手机号:"); scanf("%s", arr[0]->phone); printf("修改完成"); system("pause"); } int main() { struct StNode* head = 0; int opt = 0; int bgo = 1; head = ReadFile(); while (bgo) { system("cls"); printf("-------------------通讯薄管理----------------|\n"); printf("| 1.录入手机信息 |\n"); printf("| 2.显示所有手机信息 |\n"); printf("| 3.手机信息查询 |\n"); printf("| 4.手机信息修改 |\n"); printf("| 5.删除信息 |\n"); printf("| 0.退出系统 |\n"); printf("----------------------------------------------\n"); scanf("%d", &opt); switch (opt) { case 0: bgo = 0; break; case 1: head = Input(head); break; case 2: showAll(head); break; case 3: Find(head); system("pause"); break; case 4: ModInfo(head); break; case 5: head = Del(head); break; } } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 keil的map文件中Image component sizes各项意思
- ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
- ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
- ¥15 划分vlan后,链路不通了?
- ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 Centos / PETGEM
- ¥15 划分vlan后不通了
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)