通讯录管理系统详细实现

源代码

通讯录管理系统的设计与实现
(1) 问题描述
设计与实现一个通讯录管理系统,实现按姓名、电话号、QQ 号查找。
(2) 功能及界面要求
要求能够管理通讯录,即具有通讯录的建立、增、删、改记录功能;
要求实现在指定通讯录中按姓名、电话号、QQ 号查找功能。
通讯录编辑子系统
① 从无到有建立一个通讯录,以文件形式存储。在建立通讯录的同时允许录入记录。
② 在通讯录(文件)尾部增加若干记录。
③ 通过姓名找到指定记录,删除指定记录。
④ 通过姓名找到指定记录,修改该记录后保存到文件。
通讯录查找子系统
① 读指定文件内容,以用户名为关键字建立散列表,要求完成下列功能:
采用一定的方法解决冲突;
查找并显示给定用户的记录;
设计不同的散列函数,比较冲突率;在散列函数确定的前提下,尝试各种不同处理冲突
的方法,考察平均查找长度的变化。
②读指定文件内容,以电话号码为关键字建立二叉排序树。在二叉排序树上查找并显示
给定电话号码的记录。
③对从键盘输入的各记录,以 QQ 号为关键字建立有序表。在有序表上二分查找并显示
给定 QQ 号的记录。

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<iomanip>
#define MAXSIZE 1000
using namespace std;
typedef char *KeyType;
/*---------------------------------------信息结构--------------------------------------*/
typedef struct
{
   
    char name[20];
    char phonenum[20];
    char QQnum[20];
    char company[50];
    char address[100];
} ElemType,*Phone;
/*---------------------------------------信息结构--------------------------------------*/
typedef struct LNode
{
   
    ElemType data;
    struct LNode *next;
} LNode,*Linklist;
typedef struct
{
   
    Phone *data;
    int length;
} SqList;

/*----------------------------树结构-----------------------------------*/
typedef struct BSTNode
{
   
    ElemType *data;
    struct BSTNode *lchild,*rchild;
} BSTNode,*BSTree;
/*----------------------------树结构-----------------------------------*/
/*---------------------------hash表----------------------------------*/
typedef struct HashLN
{
   
    ElemType *data;
    struct HashLN *next;
} HashLN,*HashLL;
/*---------------------------hash表----------------------------------*/
int n;
int m_num(int n,char *file)//计算文件中信息个数
{
   
    FILE *fp;
    long length;//计算文件字节数
    if((fp = fopen(file,"rb")) != NULL)
        fp = fopen(file,"rb");
    fseek(fp,0L,2);
    length = ftell(fp);
    fclose(fp);
    return length/n;
}
void FILEREAD(char *file,Linklist &head)//循环按块读取
{
   
    FILE *fp;
    Linklist r,p,q;
    head=new LNode;
    head->next=NULL;
    r=head;
    if((fp=fopen(file,"rb"))==NULL)
        return;
    while(!feof(fp))
    {
   
        q=r;
        p=new LNode;
        fread(&p->data,sizeof(ElemType),1,fp);
        r->next=p;
        r=p;
    }
    q->next=NULL;
    delete p;
    fclose(fp);
}
void printelem(ElemType e)
{
   
    //cout<<"  姓名       电话号       QQ号       单位        住址"<<endl;
    cout<<"|  "<<setw(20)<<e.name;
    cout<<setw(20)<<e.phonenum;
    cout<<setw(20)<<e.QQnum;
    cout<<setw(20)<<e.company;
    cout<<setw(20)<<e.address<<"  |";
    cout<<endl;
}
SqList Link_Sq(Linklist head)//建立链表
{
   
    SqList ph;
    ph.data=new Phone[n];
    Linklist p=head->next;
    int i=0;
    while(p)
    {
   
        ph.data[i]=&p->data;
        i++;
        p=p->next;
    }
    ph.length=n;
    return ph;
}
void sort_QQ(SqList &p)//qq排序
{
   
    int i,j,w;
    ElemType *temp;
    for(i=0; i<n; i+
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二琳爱吃肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值