写个通讯录 想要简单就全用的是结构体数组要求改成用链表的...专业的朋友看能不能最简洁的改一下
写个通讯录 想要简单就全用的是结构体数组...不符合要求 要改成用链表的...专业的朋友看能不能最简洁的改一下明天就要交了 还有通宵写报告 做ppt 自己又不会改 只会从头再来 没时间了...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <malloc.h>
#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<num;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<num;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<num;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<num;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<num-1;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<num;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<num;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();
}
}