c语言通讯录链表结构体排序,写个通讯录 想要简单就全用的是结构体数组要求改成用链表的...专业的朋友看能不能最简洁的改一下...

已结贴√

问题点数:20 回复次数:10

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

写个通讯录 想要简单就全用的是结构体数组要求改成用链表的...专业的朋友看能不能最简洁的改一下

写个通讯录 想要简单就全用的是结构体数组...不符合要求 要改成用链表的...专业的朋友看能不能最简洁的改一下

明天就要交了 还有通宵写报告 做ppt 自己又不会改 只会从头再来 没时间了...

1a9c7cbe48d9832dd616fe1d9a72c7b7.gif

#include

#include

#include

#include

#include

#define bool int

#define true 1

#define false 0

struct Person

{

char name[20];

int id;

char phoneNum[15];

char mail[30];

int team;

char QQ[15];

char weixin[15];

struct Person *next;

};

int num=0;

struct Person p[100];

void TJ();

void CK();

void SC();

void XG();

void CZ();

//void PX();

void ReadFromFile();

void MainMenu();

void WriteToFile();

void RegisterAccount();

bool LoginSystem();

void saveAccount();

//主菜单

void MainMenu()

{int n;

while(1)

{

printf("\n\n\n--------------------主菜单--------------------------\n");

printf("1-添加\n");

printf("2-查看\n");

printf("3-删除\n");

printf("4-修改\n");

printf("5-排序\n");

printf("6-退出程序\n");

printf("请选择:");

scanf("%d",&n);

switch (n)

{

case 1:TJ();break;

case 2:CK();break;

case 3:SC();break;

case 4:XG();break;

//case 5:PX();break;

case 6:return;

}

}

}

//添加记录

void TJ()

{

int i;

if(num>=50)

{

printf("\n储存空间不足!\n");

return;

}

printf("\n\n\n*********************添加新记录*****************************\n");

printf("输入姓名:");

scanf("%s",&p[num].name);

for (i=0;i

{

if(strcmp(p[i].name,p[num].name)==0)

{

printf("\n该姓名已存在!\n");

return;

}

}

printf("输入类型(1办公 2个人 3商务) :");

scanf("%d",&p[num].team);

printf("输入电话号码:");

scanf("%s",&p[num].phoneNum);

printf("输入E-mail地址:");

scanf("%s",&p[num].mail);

printf("输入QQ:");

scanf("%s",&p[num].QQ);

printf("输入微信:");

scanf("%s",&p[num].weixin);

p[num].id=num+1;

num++;

}

//查询菜单

void CK()

{int o;

while(1)

{

printf("\n\n-------------------查询菜单----------------------\n");

printf("1_按分组查询\n2-返回主菜单\n请选择:");

scanf("%d",&o);

switch (o)

{

case 1:

CZ();break;

default: return;

}

}

}

//按分组查找

void CZ()

{

int m,i;

printf("选择分组(1-办公 2-个人 3-商务):");

scanf("%d",&m);

printf(" 编号  姓名      电话号码     邮箱       QQ        微信        类型 \n----------------------------------------------------------------\n");

for (i=0;i

{

if (p[i].team==m)

{

printf(" %d  %s     %s      %s       %s      %s",p[i].id,p[i].name,p[i].phoneNum,p[i].mail,p[i].QQ,p[i].weixin);

if (p[i].team==1)  printf("  办公\n");

if (p[i].team==2)  printf("  个人\n");

if (p[i].team==3)  printf("  商务\n");

}

}

}

//修改信息

void XG()

{int i,team,flag=0;

char name[20],ph[20],mail[20],QQ[15],weixin[15];

printf("\n请输入要修改的姓名:");

scanf("%s",&name);

for (i=0;i

{

if (strcmp(p[i].name,name)==0)

{

printf("请输入新的名字:");

scanf("%s",&name);

printf("请输入新的电话号码:");

scanf("%s",&ph);

printf("请输入新的邮箱:");

scanf("%s",&mail);

printf("请输入新的QQ:");

scanf("%s",&QQ);

printf("请输入新的微信:");

scanf("%s",&weixin);

printf("请输入新的分类:");

scanf("%d",&team);

printf(" 编号  姓名      电话号码     邮箱       QQ        微信        类型 \n----------------------------------------------------------------\n");

printf(" %d  %s     %s      %s       %s      %s",p[i].id,p[i].name,p[i].phoneNum,p[i].mail,p[i].QQ,p[i].weixin);

if (p[i].team==1)  printf("  办公\n");

if (p[i].team==2)  printf("  个人\n");

if (p[i].team==3)  printf("  商务\n");

flag=1;

break;

}

}

if(flag==0)

{

printf("\n该姓名不存在!\n");

}

else {

printf("修改成功!\n");

}

}

//删除信息

void SC()

{

int i,flag=0;

char name[20];

printf("\n请输入要删除的姓名:");

scanf("%s",&name);

for (i=0;i

{

if (strcmp(p[i].name,name)==0)

{

printf("编号  姓名      电话号码       邮箱       QQ        微信                    类型\n-----------------------------------------------------------------\n");

printf("%d    %s     %s          %s         %s        %s",p[i].id,p[i].name,p[i].phoneNum,p[i].mail,p[i].QQ,p[i].weixin);

if (p[i].team==1)  printf("  办公\n");

if (p[i].team==2)  printf("  个人\n");

if (p[i].team==3)  printf("  商务\n");

flag=1;

break;

}

}

if(flag==0)

{

printf("\n该姓名不存在!\n");

}

else

{

for(i;i

{

p[i]=p[i+1];

p[i].id--;

}

num--;

printf("删除成功!\n");

}

}

//排序

//void PX()

//将记录写如文件

void WriteToFile()

{

FILE *fp;

int i;

if ((fp=fopen("phone.txt","wb"))==NULL)

{

printf("不能打开文件!\n");

return;

}

if (fwrite(&num,sizeof(int),1,fp)!=1)

{

printf("写入文件错误!\n");

}

for (i=0;i

{

if (fwrite(&p[i],sizeof(struct Person),1,fp)!=1)

{

printf("写入文件错误!\n");

}

}

fclose(fp);

}

//从文件读取记录

void ReadFromFile()

{

FILE *fp;

int i;

if ((fp=fopen("phone.txt","rb"))==NULL)

{

printf("电话簿不存在,已重新建立!\n");

return;

}

if (fread(&num,sizeof(int),1,fp)!=1)

{

num=-1;

}

else

{

for(i=0;i

{

fread(&p[i],sizeof(struct Person),1,fp);

}

}

fclose(fp);

}

//登陆账户结构体

typedef struct Account

{

char ID[20];

char password[20];

struct Account *next;

}Account;

//登陆账户链表头结点

Account *accounts = NULL;

//登陆函数

bool LoginSystem()

{

char ID[20], password[20];

Account *item = accounts;

int flag = 0;

printf("请输入账号: ");

scanf("%s", ID);

printf("请输入密码: ");

scanf("%s", password);

while (item != NULL)

{

if (strcmp(item->ID, ID) == 0 && strcmp(item->password, password) == 0)

{

flag = 1;

break;

}

item = item->next;

}

if (flag == 1)

{

printf("登陆成功,欢迎进入通讯录管理系统!\n");

return true;

}

else

{

printf("登陆失败!\n");

return false;

}

}

//注册函数

void RegisterAccount()

{

Account *item;

item = (Account*)malloc(sizeof(Account));

printf("请输入预注册的账号: ");

scanf("%s", item->ID);

printf("请输入密码: ");

scanf("%s", item->password);

item->next = accounts;

accounts = item;

printf("注册成功!\n");

saveAccount();

}

void saveAccount()

{

FILE *fp;

Account *item = accounts;

fp = fopen("Accounts.txt", "w");

while (item != NULL)

{

fprintf(fp, "%s %s\n", item->ID, item->password);

item = item->next;

}

printf("保存成功!\n");

fclose(fp);

}

int main()

{int i;

bool flag;

printf("-----------\n1.注册\n2.登陆\n0.退出\n");

scanf("%d",&i);

switch(i)

{    case 0: exit(0);

case 1 : RegisterAccount();flag = LoginSystem();break;

case 2:flag = LoginSystem(); break;

}

if(flag)

{    ReadFromFile();

printf("%d",num);

MainMenu();

WriteToFile();

}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值