帮别人改的DS课设3

简介: #include "stdio.h"#include "string.h" #define NULL 0#define m 20unsigned int key;unsigned int key2;    int *p;struct node //...

#include "stdio.h"
#include "string.h"

#define NULL 0
#define m 20
unsigned int key;
unsigned int key2;
    int *p;
struct node //建节点
{
   char name[8],address[20];
   char num[11];
        node * next;
};

typedef node* pnode;
typedef node* mingzi;
        node **phone;
        node **nam;
        node *a;

void hash(char num[11]) //哈希函数
{
   int i = 0;
   key=num[i]-48;
   while(num[i]!=NULL)
   {
     key+=(num[i]-48);
     i++;
   }
   key=key%m;
}

void hash2(char name[8]) //哈希函数
{
   int i = 0;
   key2=name[i]-48;
   while(name[i]!=NULL)
   {
     key2+=(name[i]-48);
     i++;
   }
   key2=key2%m;
}

node* input() //输入节点
{
   node *temp;
   temp = new node;
   temp->next=NULL;
   printf("输入姓名:/n");
   scanf("%s",&temp->name);
   printf("输入地址:/n");
   scanf("%s",&temp->address);
   printf("输入电话:/n");
   scanf("%s",&temp->num);
   return temp;
}

int apend() //添加节点
{
   node *newphone;
   node *newname;
   newphone=input();
   newname=newphone;
   newphone->next=NULL;
   newname->next=NULL;
   hash(newphone->num);
   hash2(newname->name);
   newphone->next = phone[key]->next;
   phone[key]->next=newphone;
   newname->next = nam[key2]->next;
   nam[key2]->next=newname;
   return 0;
}

void create() //新建节点
{
   int i;
   phone=new pnode[20];
   for(i=0;i<20;i++)
   {
      phone[i]=new node;
      phone[i]->next=NULL;
   }
}
void create2() //新建节点
{
   int i;
   nam=new mingzi[20];
   for(i=0;i<20;i++)
   {
      nam[i]=new node;
      nam[i]->next=NULL;
   }
}
void list() //显示列表
{
   int i;
   node *p;
   for(i=0;i<20;i++)
   {
      p=phone[i]->next;
      while(p)
      {
         printf("%s_%s_%s/n",p->name,p->address,p->num);
         p=p->next;
   }
    }
}
void list2() //显示列表
{
   int i;
   node *p;
   for(i=0;i<20;i++)
   {
      p=nam[i]->next;
      while(p)
      {
          printf("%s_%s_%s/n",p->name,p->address,p->num);
          p=p->next;     
   }
   }
}

void find(char num[11]) //查找用户信息
{
 node *q;
    hash(num);
    q=phone[key]->next;
    while(q!= NULL)
    {
       if(strcmp(num,q->num)==0)
       break;
       q=q->next;
    }
    if(q)
    printf("%s_%s_%s/n",q->name,q->address,q->num);
    else printf("无此记录/n");
}
void find2(char name[8]) //查找用户信息
{
 node *q;
    hash2(name);
    q=nam[key2]->next;
    while(q!= NULL)
    {
        if(strcmp(name,q->name)==0)
        break;
        q=q->next;
    }
    if(q)
    printf("%s_%s_%s/n",q->name,q->address,q->num);
    else printf("无此记录/n");
}


void save() //保存用户信息
{
    int i;
    node *p;
    for(i=0;i<20;i++)
    {
      p=phone[i]->next;
      while(p)
      {
//         fstream cout("phone.txt", ios::out);
         printf("%s_%s_%s/n",p->name,p->address,p->num);
         p=p->next;
       }
    }
}

void menu() //菜单
{

   printf("0.添加记录/n");
   printf("3.查找记录/n");
   printf("2.姓名散列/n");
   printf("4.号码散列/n");
   printf("5.清空记录/n");
   printf("6.保存记录/n");
   printf("7.退出系统/n");
}

int main()
{
 char num[11];
 char name[8];

 create();
 create2() ;
 
 int sel;
 while(1)
 {
  menu();
  scanf("%d",&sel);
    if(sel==3)
       {  printf("9号码查询,8姓名查询/n");
         int b;
         scanf("%d",&b);
         if(b==9)
          {  printf("请输入电话号码:/n");
             scanf("%s",&num);
             printf("输出查找的信息:/n");
             find(num);
          }
          else
          {  printf("请输入姓名:/n");
             scanf("%s",&name);
             printf("输出查找的信息:/n");
             find2(name);}
     }
     if(sel==2)
     {  printf("姓名散列结果:/n");
        list2();
  }
     if(sel==0)
     {  printf("请输入要添加的内容:/n");
        apend();
  }
     if(sel==4)
     {  printf("号码散列结果:/n");
        list();
     }
     if(sel==5)
     {  printf("列表已清空:/n");
        create();
  create2();
  }
     if(sel==6)
     {  printf("通信录已保存:/n");
        save();
  }
     if(sel==7) return 0;
   }
   return 0;

}

 

 

目录
相关文章
|
网络协议 Linux 网络安全
干货|不出网上线CS的各种姿势(二)
干货|不出网上线CS的各种姿势
379 0
|
11月前
|
网络协议 安全 Linux
不出网上线CS的各种姿势
不出网上线CS的各种姿势
898 0
|
网络协议 安全
干货|不出网上线CS的各种姿势(三)
干货|不出网上线CS的各种姿势
305 0
|
存储 测试技术 Go
10秒改struct性能直接提升15%,产品姐姐都夸我好棒
如果您以前写过 Golang ,那您很可能见过或者写过 Struct 结构体。但是,您可能不知道,通过简单地重新排序结构体中的字段,您可以极大地提高 Go 程序的速度和内存使用率!
87 0
|
SQL Web App开发
艾伟:从别人那拷下来的几点Session使用的经验(转载)
问:当页面中是否了frameset,发现在每个frame中显示页面的SessionID在第一次请求时都不相同,为什么?答:原因是你的frameset是放在一个htm页面上而不是ASPX页面。在一般情况下,如果frameset是aspx页面,当你请求页面时,它首先将请求发送到Web服务器,此时已经获得了SessionID,接着浏览器会分别请求Frame中的其他页面,这样所有页面的SessionID就是一样的,就是FrameSet页面的SessionID。
850 0
|
关系型数据库 MySQL 数据库
顺丰被删库?半个DBA的跑路经验总结
最近顺丰又搞出一个热门:运维误删库事件! 看看有没有什么后路好走啊哥们~ 0. 国内呆不下了,赶紧出国 首先,不要选动车,要选最近的一班飞机,尽快出国,能走高速走高速,不然选人少的路线。
1691 0