用C语言编写朋友通讯录软件
题目要求:编写朋友通讯录软件,实现添加、查找、删除、显示所有记录的功能。每条个人信息记录包括:姓名、性别、手机号、电子邮件、生日、爱好等。可根据实际通讯录情况编辑以上个人信息。
具体要求:
朋友通讯录信息存放在一个文件中(.txt),当进行添加、删除操作时,对应文件中的信息也发生相应的变化。
功能实现
#include<stdio.h>
#include<string.h>
#include<Windows.h>
typedef struct tongxunlu
{
char name[30];
char sex[20];
char number[30];
char email[30];
char shengri[30];
char hobby[30];
struct tongxunlu *next;
}tong;
void ListInsert(tong *L, tong *p)//节点
{
tong *q = L;
p->next = NULL;
while (q->next != NULL)
{
q = q->next;
}
q->next = p;
}
void ADD(tong *p)//添加
{
struct tongxunlu *q, *n = p;
struct tongxunlu *h = p->next;
int flag = 0;
system("cls");
q = (struct tongxunlu*)malloc(sizeof(struct tongxunlu));
q->next = NULL;
printf("\t请输入你添加的用户的姓名,性别,电话,电子邮件,生日及爱好:\n");
scanf("%s %s %s %s %s %s", q->name, q->sex, q->number, q->email, q->shengri, q->hobby);
getchar();
while (h != NULL)
{
if (strcmp(h->number, q->number) == 0)
{
flag = 1;
printf("\t该账号已存在\n");
Sleep(1000);
ADD(p);
break;
}
h = h->next;
}
while (n->next != NULL)
{
n = n->next;
}
n->next = q;
if (flag == 0)
{
printf("\t添加成功\n");
printf("\t 姓名,性别,电话,电子邮件,生日及爱好\n");
printf("\t%s %s %s %s %s %s\n", q->name, q->sex, q->number, q->email, q->shengri, q->hobby);
printf("\t按回车键返回菜单\n");
}
else
printf("\t添加失败\n");
getchar();
menu(p);
}
void Dele(tong *p)//删除
{
struct tongxunlu *q = p->next;
struct tongxunlu *n = p;
char num[20];
int flag = 0;
system("cls");
printf("\t请输入你要删除的电话号码:");
scanf("%s", num);
while (q != NULL)
{
if (strcmp(q->number, num) == 0)
{
flag = 1;
n->next = q->next;
free(q);
break;
}
n = q;
q = q->next;
}
if (flag != 1)
{
printf("\t无该用户信息\n");
}
else
{
printf("\t删除成功\n");
}
menu(p);
}
void chaxun(tong *p)//查找好友
{
struct tongxunlu *n = p->next;
char name[20];
int flag = 0;
system("cls");
printf("\t欢迎进入联系人查询界面\n");
printf("\t请输入客户名称:\n");
scanf("%s", name);
while (n != NULL)
{
if (strcmp(n->name, name) == 0)
{
flag = 1;
printf("\t\t\t该用户信息:\t\n");
printf("姓名 性别 电话号码 电子邮件 生日 爱好\n");
printf("%s %s %s %s %s %s", n->name, n->sex, n->number, n->email, n->shengri, n->hobby);
}
n = n->next;
}
if (flag == 0)
{
printf("\t无该用户信息\n");
}
menu(p);
}
void savetongxunluFile(tong *p)//文件保存
{
FILE *fp;
tong *q = p->next;
if ((fp = fopen("tongxunlu.txt", "w")) == NULL)
{
printf("不能打开此文件,请按回车键退出\n");
exit(0);
}
while (p)
{
fprintf(fp, "%s %s %s %s %s %s \n", p->name, p->sex, p->number, p->email, p->shengri, p->hobby);
p = p->next;
}
fclose(fp);
}
void readtongxunluput(tong *p)//链表读取
{
FILE *fp;
tong *n;
char name[30];
char sex[20];
char number[30];
char email[30];
char shengri[30];
char hobby[30];
fp = fopen("tongxunlu.txt", "r");
if (fp == NULL)
{
fp = fopen("tongxunlu.txt", "w+");
}
else
{
while (!feof(fp))
{
fscanf(fp, "%s %s %s %s %s %s \n", name, sex, number, email, shengri, hobby);
n = (tong*)malloc(sizeof(tong));
strcpy(n->name, name);
strcpy(n->sex, sex);
strcpy(n->number, number);
strcpy(n->email, email);
strcpy(n->shengri, shengri);
strcpy(n->hobby, hobby);
ListInsert(p, n);//插入新节点
}
}
fclose(fp);
}
void denglu(tong *p)//机主登陆
{
char b[20], c[20];
system("cls");
printf("\t欢迎登录通讯录系统\n");
printf("请输入账号和密码:\n");
printf("\t账号:");
scanf("%s", b);
if (strcmp(b, "zcy123") != 0)
{
printf("输入账号错误。");
Sleep(1000);
menu(p);
}
else
{
printf("\t密码:");
scanf("%s", c);
if (strcmp(c, "123456") != 0)
{
printf("输入密码错误!");
Sleep(1000);
menu(p);
}
else
{
system("cls");
menu(p);
}
}
}
void dayin(tong *p)//打印所有好友信息
{
struct tongxunlu *n = p->next;
system("cls");
if (n == NULL)
{
printf("\t暂无信息打印\n");
}
else
{
while (n != NULL)
{
printf("姓名 性别 电话号码 电子邮件 生日 爱好\n");
printf("%s %s %s %s %s %s\n", n->name, n->sex, n->number, n->email, n->shengri, n->hobby);
n = n->next;
}
}
menu(p);
}
int menu(struct tongxunlu *p)//主菜单
{
int z;
printf("\t欢迎登录系统管理员界面\n");
printf("\t 1.添加用户\n");
printf("\t 2.删除用户\n");
printf("\t 3.查找用户信息\n");
printf("\t 4.显示所有记录信息\n");
printf("\t 5.退出\n");
scanf("%d", &z);
switch (z)
{
case 1:ADD(p); break;
case 2:Dele(p); break;
case 3:chaxun(p); break;
case 4:dayin(p); break;
case 5:savetongxunluFile(p); exit(0);
default:printf("\t输入不合法\n");
}
}
int main()
{
struct tongxunlu *p;
p = (struct tongxunlu*)malloc(sizeof(struct tongxunlu));
p->next = NULL;
readtongxunluput(p);
denglu(p);
system("pause");
return 0;
}
代码可能还存在一些小瑕疵,希望能和大家一起交流。第一次写博客,多多支持。