| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6074 人关注过本帖
标题:写个通讯录 想要简单就全用的是结构体数组要求改成用链表的...专业的朋友看 ...
只看楼主 加入收藏
猫啊
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-7-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
写个通讯录 想要简单就全用的是结构体数组要求改成用链表的...专业的朋友看能不能最简洁的改一下
写个通讯录 想要简单就全用的是结构体数组...不符合要求 要改成用链表的...专业的朋友看能不能最简洁的改一下
明天就要交了 还有通宵写报告 做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();
}
 
}
搜索更多相关主题的帖子: include weixin 通讯录 结构体 false 
2016-07-17 03:20
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:20 
要链表不难,但是要花不少时间,而且几乎所有的函数多少都所变动。
如果是这样你还确定要修改吗。
2016-07-17 07:52
猫啊
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-7-14
收藏
得分:0 
回复 2楼 linlulu001
就是因为变动大 时间太紧 自己又不熟练精通 所以才放在论坛上来寻求一些帮助的 不用链表的话 它的排序修改功能我不知道怎么实现 如果功能实现了的话也就没必要改了
2016-07-17 08:32
猫啊
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-7-14
收藏
得分:0 
回复 2楼 linlulu001
如果这位大哥你有时间的话愿意的话可以帮我改成链表的  谢谢
2016-07-17 08:37
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
如果你只是因为要排序就改链表,那就没必要了。
定义一个struct Person temp;类型的中间量。用法和整型的交换一样(int a=1,b=2,c;c=a;a=b;b=c;完成a,b值的交换)。
2016-07-17 08:52
猫啊
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-7-14
收藏
得分:0 
回复 5楼 linlulu001
那如何实现修改功能呢
2016-07-17 09:07
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
找到要修改的那个结构体,直接赋值不就等于修改了。
字符串scanf你全部用了“&”。不知道你修改了没有。
2016-07-17 09:15
猫啊
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-7-14
收藏
得分:0 
回复 7楼 linlulu001
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);
输入新的信息 接下来该怎么赋值呢 补充一下代码 哈
2016-07-17 09:24
猫啊
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2016-7-14
收藏
得分:0 
if(strcmp(p[d].name,p[d+1].name)>0)
    {   p[d]=temp;
        temp=p[d+1];
        p[d+1]=p[d];
    }
能这样用吗 是乱码 烫
2016-07-17 10:06
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
if (strcmp(p[i].name,name)==0)
  {
        printf("请输入新的名字:");
        scanf("%s",p[i].name);
        printf("请输入新的电话号码:");
        scanf("%s",p[i].ph);
        printf("请输入新的邮箱:");
        scanf("%s",p[i].mail);
        printf("请输入新的QQ:");
        scanf("%s",p[i].QQ);
        printf("请输入新的微信:");
        scanf("%s",p[i].weixin);
        printf("请输入新的分类:");
        scanf("%d",p[i].team);
这样不就直接修改好了。
2016-07-17 10:47
快速回复:写个通讯录 想要简单就全用的是结构体数组要求改成用链表的...专业的朋 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029152 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved