通讯薄管理 要求:(1)依次输入通讯薄的编号,用户名和电话号码,并生成一个.txt文本文件。
(2)可添加和删除通讯薄中的内容。
(3)可以修改通讯薄中某个用户的用户名或电话号码。
要过程和代码
通讯录管理运行结果:
代码:
#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;
}
#include <stdio.h>
#include <string.h>
typedef struct _book
{
int id;
char name[20];
char tel[20];
}book;
int readBooks(book *books)
{
int n=0;
FILE *fp = fopen("C:\\books.txt","r");
if(fp == NULL)
return 0;
char buf[1000];
while(fgets(buf,1000,fp) != NULL)
{
sscanf(buf,"%d %s %s",&books[n].id,books[n].name,books[n].tel);
n++;
}
fclose(fp);
return n;
}
void saveBooks(book *books,int n)
{
FILE *fp = fopen("C:\\books.txt","w");
for(int i=0;i<n;i++)
{
fprintf(fp,"%d %s %s\n",books[i].id,books[i].name,books[i].tel);
}
fclose(fp);
}
void showBooks(book *books,int n)
{
printf("%-10s%-22s%-15s\n","编号","姓名","电话");
for(int i=0;i<n;i++)
{
printf("%-10d%-22s%-15s\n",books[i].id,books[i].name,books[i].tel);
}
}
int addBooks(book *books,int n)
{
while(1)
{
printf("请输入要增加的联系人编号、姓名和电话:\n");
scanf("%d %s %s",&books[n].id,books[n].name,books[n].tel);
n++;
getchar();
printf("是否继续增加:(Y/N):");
char ch = getchar();
if(ch == 'N')
break;
}
showBooks(books,n);
return n;
}
int delBooks(book *books,int n)
{
char name[20];
printf("请输入要删除的联系人姓名:");
scanf("%s",name);
int i=0;
for(i=0;i<n;i++)
{
if(strcmp(name,books[i].name) == 0)
{
for(int j=i;j<n-1;j++)
books[j] = books[j+1];
break;
}
}
if(i<n)
{
n--;
showBooks(books,n);
}
else
printf("查无此人");
return n;
}
void updateBooks(book *books,int n)
{
char name[20];
printf("请输入要修改的联系人姓名:");
scanf("%s",name);
int i=0;
for(i=0;i<n;i++)
{
if(strcmp(name,books[i].name) == 0)
break;
}
if(i==n)
{
printf("没有这个人");
return;
}
printf("请输入要修改的联系人编号、姓名和电话:\n");
scanf("%d %s %s",&books[i].id,books[i].name,books[i].tel);
showBooks(books,n);
}
int main()
{
book books[1000];
int n=readBooks(books);
n = addBooks(books,n);
n = delBooks(books,n);
updateBooks(books,n);
saveBooks(books,n);
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!