通讯薄管理 要求:(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 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
- ¥20 @microsoft/fetch-event-source 流式响应问题
- ¥15 ogg dd trandata 报错
- ¥15 高缺失率数据如何选择填充方式
- ¥50 potsgresql15备份问题
- ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
- ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
- ¥60 pb数据库修改与连接
- ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
- ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?