源代码
通讯录管理系统的设计与实现
(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+