c语言通讯录链表结构体排序,写个通讯录 想要简单就全用的是结构体数组要求改成用链表的...专业的朋友看能不能最简洁的改一下...
已结贴√
问题点数: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语言通讯录链表结构体排序,写个通讯录 想要简单就全用的是结构体数组要求改成用链表的...专业的朋友看能不能最简洁的改一下...相关推荐
- python英文版怎么改成中文版_“PyQt的Qt Designer菜单是中文版的,怎么改成英文的“python的qt designer教程...
python qt designer 怎么多建一个dialog 请说的详细点,那原消?还是只是出外一个窗口,如果出现另外一个窗口,那么这个窗口是 exec()吗?就是弹出窗口不关闭无法点击原有窗口,即 ...
- ai如何做倒角和圆角_在ai中怎么用小白工具把矩形的直角改成圆角?,你值得一看的技巧...
在AI中,把矩形的直角改成圆角,方法有多种,今天小编给大家演示另一种方法,主要利用直接选择工具,也就是小白工具来操作.下面,来看下具体的操作方法. 工具/材料 AI CS6 操作方法 01 新建画板: ...
- dns改成什么网速快_手机速度最快的dns(dns改成114的坏处)
不知道大家最近有没有感觉,自己的手机信号变差了,无论是WiFi还是移动网络,都没有之前的流畅?手机WiFi信号差,网页跳转太慢?教你一招,如何快速提升网速! 1.安卓手机 手机WiFi信号差,最直观的 ...
- UG如何把语言改成中文,UG如何把界面语言改成中文
1 高级系统设置,高级,新建一个用户变量(变量名为lang,变量值为chs) 2 高级系统设置,高级,环境变量,系统变量中,查看变量名为UGII_LANG的值是否为simpl_chinese,如果不是 ...
- 如何将VMware ubuntu虚拟机磁盘增长改成自分配(未成功)
安装虚拟机的时候选择磁盘增长还是预分配,我选择了磁盘增长,现在后悔了,虚拟机特别卡慢,于是我想改成预分配 参考文章1:如何将 VMware 磁盘从自增长改为预分配? 参考文章2:VMWare 创建的虚 ...
- Linux怎么改引导方式为uefi,联想电脑怎么将uefi改成legacy启动|uefi改成legacy引导模式...
[文章导读]联想电脑怎么设置legacy启动?现在联想新型电脑都是采用uefi gpt启动模式,以适应win8.win10这些新型操作系统,不过win7之前的系统大多不支持uefi,而是采用legac ...
- iphone转通用,xib里面的view怎么改成ipad大小?
iphone转通用,xib里面的view怎么改成ipad大小? iphone转通用,xib里面的view怎么改成ipad大小?我用iphone的xib复制了一份改的,xib的view的宽高都是灰的,不 ...
- 【Pytorch分布式训练】在MNIST数据集上训练一个简单CNN网络,将其改成分布式训练
文章目录 普通单卡训练-GPU 普通单卡训练-CPU 分布式训练-GPU 分布式训练-CPU 租GPU服务器相关 以下代码示例基于:在MNIST数据集上训练一个简单CNN网络,将其改成分布式训练. 普 ...
- easyuefi只能在基于uefi启动的_uefi改成legacy启动(win8、win10改win7必读)
怎么将uefi改成legacy启动?市场上大部分新电脑都是采用uefi gpt启动模式,配备预装win8/win10系统,而部分朋友打算安装win7系统,而安装此系统一般都是采用legacy启动模式, ...
最新文章
- makefile清除目标文件的规则
- Docker学习之路 用commit命令创建镜像
- sata接口_SATA接口成瓶颈 PCIe硬盘爆发: 群联主控增长120%
- 【直播回看】「EDGE X Kubernetes · 云原生在边缘的实践与应用」
- 【Asp.net】Cookie对象
- 华师 计算机系统 作业,华师网络学院作业答案-计算机组成原理问答题
- cmd删除txt部分文字_Python识别图片中的文字
- 在tomcat下context.xml中配置各种数据库连接池(转)
- Matlab之使用linearization估计人口数量
- html5 csss透明,详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
- u8显示服务器资源不足,系统提示“虚拟内存不足”的原因及解决方法
- 朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的8种坑
- PAC学习框架-泛化误差
- 看电视剧《天道》一点感想 + 法兰克福美景Opencv聚类分析
- ps 读取计算机特定首选项时出错,Photoshop“正在读取首选项”无法响应的解决办法...
- 总有一张图片会撩拨起你初恋时的心弦(转载)
- 爱奇艺知识播放体验优化的探索和实践
- 新手入门 | photoshop基础教程
- 转载:latex中.bb not found问题
- 看懂第一个VEC-C 程序
热门文章
- Android网络通信之WiFi Direct
- 涵子来信——AI的无限未来——谈谈想法
- oracle flashback 用法,使用oracle flashback database
- EMC之地线干扰与抑制
- iconfont介绍及基本使用
- offsetWidth和width的区别 逻辑中断 delete运算符 。。。。
- 无法识别的属性“targetFramework”解决办法
- ECCV 2020 ——RobustScanner: Dynamically Enhancing Positional Clues for Robust Text Recognition
- 展讯平台-sensor驱动
- Luogu P4933 大师(dp)