帮别人改的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;

}

 

 

目录
相关文章
|
SQL 存储 Web App开发
PolarDB-X 分布式数据库中的外键
外键是关系型数据库中非常便利的一种功能,它通过一个或多个列为两张表建立连接,从而允许跨表交叉引用相关数据。外键通过约束来保持数据的一致性,通过级联来同步数据在多表间的更新和删除。在关系数据库系统中,大多数表都遵循外键的概念。
|
机器学习/深度学习 监控 自动驾驶
视觉智能详解
视觉智能详解
1033 1
|
C#
使用C#实现随机数生成器
在许多编程任务中,我们经常需要生成随机数。C#编程语言提供了用于生成伪随机数的内置类库。本篇博客将介绍如何使用C#来实现一个简单的随机数生成器。
600 0
|
6月前
|
存储 JavaScript 区块链
小试牛刀-walletconnect二维码及交互
最近在使用walletconnect协议和typescript语言实现相关交互功能,在此对从walletconnet协议二维码生成、连接后发送交易事务、签名事务、签名任意信息的处理进行记录,加深对walletconnect的理解,熟悉对其组件的使用,同时希望帮助到有实现相关功能的朋友。
248 0
|
小程序 测试技术 程序员
『软件工程12』软件工程实践方法——软件测试
该文章详细阐述了软件测试的重要性和基本原则,并按测试阶段顺序介绍了单元测试、集成测试、确认测试以及系统测试的具体内容和实施步骤。
『软件工程12』软件工程实践方法——软件测试
|
机器学习/深度学习 算法 数据可视化
如何在机器学习中检测异常值
如何在机器学习中检测异常值
440 2
|
存储 NoSQL Java
使用Java实现分布式文件系统
使用Java实现分布式文件系统
|
前端开发 UED
|
编解码 自然语言处理 前端开发
Web Audio API 第3章 音量和响度
Web Audio API 第3章 音量和响度
|
设计模式 Java 编译器
Java的带参数和不带参数的构造方法以及作用
Java的带参数和不带参数的构造方法以及作用
400 3

热门文章

最新文章