已结贴√

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

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

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

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

#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();

}

}

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

  1. python英文版怎么改成中文版_“PyQt的Qt Designer菜单是中文版的,怎么改成英文的“python的qt designer教程...

    python qt designer 怎么多建一个dialog 请说的详细点,那原消?还是只是出外一个窗口,如果出现另外一个窗口,那么这个窗口是 exec()吗?就是弹出窗口不关闭无法点击原有窗口,即 ...

  2. ai如何做倒角和圆角_在ai中怎么用小白工具把矩形的直角改成圆角?,你值得一看的技巧...

    在AI中,把矩形的直角改成圆角,方法有多种,今天小编给大家演示另一种方法,主要利用直接选择工具,也就是小白工具来操作.下面,来看下具体的操作方法. 工具/材料 AI CS6 操作方法 01 新建画板: ...

  3. dns改成什么网速快_手机速度最快的dns(dns改成114的坏处)

    不知道大家最近有没有感觉,自己的手机信号变差了,无论是WiFi还是移动网络,都没有之前的流畅?手机WiFi信号差,网页跳转太慢?教你一招,如何快速提升网速! 1.安卓手机 手机WiFi信号差,最直观的 ...

  4. UG如何把语言改成中文,UG如何把界面语言改成中文

    1 高级系统设置,高级,新建一个用户变量(变量名为lang,变量值为chs) 2 高级系统设置,高级,环境变量,系统变量中,查看变量名为UGII_LANG的值是否为simpl_chinese,如果不是 ...

  5. 如何将VMware ubuntu虚拟机磁盘增长改成自分配(未成功)

    安装虚拟机的时候选择磁盘增长还是预分配,我选择了磁盘增长,现在后悔了,虚拟机特别卡慢,于是我想改成预分配 参考文章1:如何将 VMware 磁盘从自增长改为预分配? 参考文章2:VMWare 创建的虚 ...

  6. Linux怎么改引导方式为uefi,联想电脑怎么将uefi改成legacy启动|uefi改成legacy引导模式...

    [文章导读]联想电脑怎么设置legacy启动?现在联想新型电脑都是采用uefi gpt启动模式,以适应win8.win10这些新型操作系统,不过win7之前的系统大多不支持uefi,而是采用legac ...

  7. iphone转通用,xib里面的view怎么改成ipad大小?

    iphone转通用,xib里面的view怎么改成ipad大小? iphone转通用,xib里面的view怎么改成ipad大小?我用iphone的xib复制了一份改的,xib的view的宽高都是灰的,不 ...

  8. 【Pytorch分布式训练】在MNIST数据集上训练一个简单CNN网络,将其改成分布式训练

    文章目录 普通单卡训练-GPU 普通单卡训练-CPU 分布式训练-GPU 分布式训练-CPU 租GPU服务器相关 以下代码示例基于:在MNIST数据集上训练一个简单CNN网络,将其改成分布式训练. 普 ...

  9. easyuefi只能在基于uefi启动的_uefi改成legacy启动(win8、win10改win7必读)

    怎么将uefi改成legacy启动?市场上大部分新电脑都是采用uefi gpt启动模式,配备预装win8/win10系统,而部分朋友打算安装win7系统,而安装此系统一般都是采用legacy启动模式, ...

最新文章

  1. makefile清除目标文件的规则
  2. Docker学习之路 用commit命令创建镜像
  3. sata接口_SATA接口成瓶颈 PCIe硬盘爆发: 群联主控增长120%
  4. 【直播回看】「EDGE X Kubernetes · 云原生在边缘的实践与应用」
  5. 【Asp.net】Cookie对象
  6. 华师 计算机系统 作业,华师网络学院作业答案-计算机组成原理问答题
  7. cmd删除txt部分文字_Python识别图片中的文字
  8. 在tomcat下context.xml中配置各种数据库连接池(转)
  9. Matlab之使用linearization估计人口数量
  10. html5 csss透明,详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
  11. u8显示服务器资源不足,系统提示“虚拟内存不足”的原因及解决方法
  12. 朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的8种坑
  13. PAC学习框架-泛化误差
  14. 看电视剧《天道》一点感想 + 法兰克福美景Opencv聚类分析
  15. ps 读取计算机特定首选项时出错,Photoshop“正在读取首选项”无法响应的解决办法...
  16. 总有一张图片会撩拨起你初恋时的心弦(转载)
  17. 爱奇艺知识播放体验优化的探索和实践
  18. 新手入门 | photoshop基础教程
  19. 转载:latex中.bb not found问题
  20. 看懂第一个VEC-C 程序

热门文章

  1. Android网络通信之WiFi Direct
  2. 涵子来信——AI的无限未来——谈谈想法
  3. oracle flashback 用法,使用oracle flashback database
  4. EMC之地线干扰与抑制
  5. iconfont介绍及基本使用
  6. offsetWidth和width的区别 逻辑中断 delete运算符 。。。。
  7. 无法识别的属性“targetFramework”解决办法
  8. ECCV 2020 ——RobustScanner: Dynamically Enhancing Positional Clues for Robust Text Recognition
  9. 展讯平台-sensor驱动
  10. Luogu P4933 大师(dp)