IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 通讯录查询系统(c语言) -> 正文阅读

[C++知识库]通讯录查询系统(c语言)

一、需求分析

(1) 建立一个新的通讯录查询系统
(2)对已存在的通讯簿进行增加,删除操作
(3)屏幕显示通讯簿内容
(4)可以按姓名,电话等信息进行查询
(5) 系统接口采用菜单方式对应各个功能模块

二、系统设计

??整个设计要求要有显示,输入,修改,查找,删除等几个主要的功能。并且在每个功能使用前读取文件中保存的数据和在结束后自动保存操作后的数据。查找功能要满足按姓名和按城市排序的功能要编写两种按不同方式查找的子函数,在查找时因为要用到折半查找法,因此要编写能完成相应的排序功能的子函数,系统接口应采用菜单方式从而对应各个功能,在选择相应的功能时可以调用相关的子函数完成其功能,并在之后可以重新回到主菜单并继续其它操作,直到使用者想要退出通讯簿。

三、完整代码

通讯录查询系统完整代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#define HASHSIZE 53
#define MAXSIZE 200 
#define N 3
typedef struct
{
	char num[20];//关键字 
	char name[20];
	char add[20];
 } Person;//个人信息 
 typedef struct
 {
 	Person *elem[HASHSIZE];//数据元素存储基地址 
 	int c;//表中元素个数 
 	int m;//表长 
}HashTable;

typedef char T[MAXSIZE];//typedef掩饰数组类型 
typedef char W[MAXSIZE];
typedef char U[MAXSIZE];
//全局变量 
HashTable* H;
int size=0;

Person a[MAXSIZE];
int NUM;
void delay();//时间延迟 
void Create();//创建通讯录 
void List();//显示 
void Creat_hash();//创建散列表 
void Find();//查询 信息 
void Alter();//修改信息 
void Append();//插入信息 
void Delete();//删除信息 
void Save();//保存 信息 
void Load();//读取 信息 
void Quit();//退出 
void Menu();//主菜单 
void land();//登录 
void input_ma();//密码 
void land()
{
	int i;
	char zh[20]={0};
	delay();
	for(i=0;i<3;i++)
	{
		printf("账号:"); 
		scanf("%s",zh);//输入账号 
		if(strcmp("123456",zh)==0)
		{
			input_ma();
		}
		else
		{
			printf("账号错误\n");
		}
		if(3==i)
		{
			exit(0);
		}
	}
}
void input_ma()
{
	int i;
	char mm[20]={0};
	for(i=0;i<3;i++)
	{
		printf("密码:"); 
		scanf("%s",mm);//输入密码 
		if(strcmp("888888",mm)==0)
		{
			system("cls");
			printf("\t\t\t\t______________________________________\n");
			printf("\t\t\t\t|****************提示*****************|\n");
			printf("\t\t\t\t|*******按4,5,6键之前,需按3键******|\n");
			printf("\t\t\t\t|***********欢迎进入主菜单************|\n");
			printf("\t\t\t\t|_____________________________________|\n");
		
			Menu();//主菜单 
		}
		else
		{
			printf("密码错误\n");
		}
		if(3==i)//密码错误循环 3次之间退出 
		{
			exit(0);
		}
	}
}
void delay()
{
	//时间的延迟 
	long int b1;
	int b2;
	for(b1=600000;b1>0;b1--)
	{
		for(b2=500;b2>0;b2--);
	}
}
void Create()
{
	//清屏操作 
	system("cls");
	FILE *fp1,*fp2;
	if((fp1=fopen("p.txt","r"))!=NULL)//读取文件 
	{
		fclose(fp1);
		printf("已有文件,请按9键直接读取\n");
	}
	else
	{
		fp2=fopen("p.txt","w");//建立文件 
		fclose(fp2);
	
	printf("创建成功");
	printf("输入添加人数:");
	scanf("%d",&NUM);
	for(size=0;size<NUM;size++)
	{
		printf("输入第%d个用户名:\n",size+1);
		scanf("%s",a[size].name);
		printf("输入第%d个电话号码:\n",size+1);
		scanf("%s",a[size].num);
		printf("输入第%d个地址:\n",size+1);
		scanf("%s",a[size].add);
			
	}
	printf("添加成功");
	} 
	printf("\n");
}
void List()
{
	system("cls");
	printf("\n");
	int i;
	delay();
	printf("姓名   号码           地址\n");
	for(i=0;i<size;i++)
	{
	printf("%s   %s    %s\n",a[i].name,a[i].num,a[i].add);
	}
}
int Hash(T str)//哈希函数 
{
unsigned int n;//长整型 
int m;
n=atoi(str);//字符串变整型 
m=n%HASHSIZE; //留余法 
return m;
}
void Creat_hash()
{
	system("cls");
    float w;
	float ave;  
    float sum=0; 
	int q;
	int i;
	int p=-1;
	for(i=0;i<size;i++)
	{
		q=0;
		w=1;
		
		p=Hash(a[i].num);
		while(H->elem[p]!=NULL)
		{
			
			p=(++p)%HASHSIZE;//线性探测解决冲突 
			q++;
			w++;
		}
	H->elem[p]=&(a[i]);	
	H->c++;
	sum=sum+w;
		printf("第%d个解决冲突次数:",i+1);
		printf(" %d\n",q);
	
	}
    printf("\n");
    ave=sum/size;
    printf("平均查找长度为:");
    printf("%f",ave);
    printf("\n");
	printf("建表成功,容量为%d",HASHSIZE);
	printf("\n");
	printf("表中元素个数是:");
	printf("%d",H->c);
	printf("\n");
}
void Find()
{
	system("cls");
	T tel;
	int p;
	int q=0;
	printf("输入查询的号码:");
	scanf("%s",tel);
	p=Hash(tel);
	while((H->elem[p]!=NULL)&&(strcmp(tel,H->elem[p]->num)!=0))
	{
		p=(++p)%HASHSIZE;
	}  
 if( H->elem[p]!=NULL&&strcmp(tel,H->elem[p]->num)==0)
 {
        printf("姓名  地址\n");
		printf("%s  %s\n",H->elem[p]->name ,H->elem[p]->add);
}
else
{
	printf("没有此人信息");
	printf("\n");
}
}
void Alter()
{
	system("cls");
    T tel;
	int p;
	printf("输入修改的号码的信息:");
	scanf("%s",tel);
	p=Hash(tel);
	while((H->elem[p]!=NULL)&&(strcmp(tel,H->elem[p]->num)!=0))
	{
		p=(++p)%HASHSIZE;
	}  
 if( H->elem[p]!=NULL&&strcmp(tel,H->elem[p]->num)==0)
 {
        printf("姓名  地址\n");
		printf("%s  %s\n",H->elem[p]->name ,H->elem[p]->add);
	(H->elem)[p]->num[0]='\0';
		(H->elem)[p]->name[0]='\0';
			(H->elem)[p]->add[0]='\0';
	printf("输入新姓名:\n");
	scanf("%s",&H->elem[p]->name);
	printf("输入新号码:\n");
	scanf("%s",&H->elem[p]->num);
	printf("输入新地址:\n");
	scanf("%s",&H->elem[p]->add);
	printf("修改成功\n");	
}
else
{
		printf("没有此人信息");
		printf("\n");
}
    getchar();
    printf("\n");
    }
void Delete()
{
	system("cls");
T tel;
int i,j;
printf("请输入第%d人删除");
scanf("%d",&j); 
j=j-1;
printf("输入要删除的号码:");
scanf("%s",tel);
int p;
p=Hash(tel);
while((H->elem[p]!=NULL)&&(strcmp(tel,H->elem[p]->num)!=0))
{
	p=(++p)%HASHSIZE;
}
if(H->elem[p]!=NULL&&strcmp(tel,H->elem[p]->num)==0)
{
	printf("删除的信息\n");
	printf("姓名  号码         地址\n");
	printf("%s  %s  %s\n",H->elem[p]->name,H->elem[p]->num,H->elem[p]->add);
	(H->elem)[p]->num[0]='\0';//删除 
	(H->elem)[p]->name[0]='\0';
	(H->elem)[p]->add[0]='\0';
	H->c--;
    printf("删除成功!\n");
    for(i=j+1; i<size; i++)
        {
            strcpy(a[i-1].name,a[i].name);
            strcpy(a[i-1].num,a[i].num);
            strcpy(a[i-1].add,a[i].add);
        }
        size--;
}
else
{
	printf("没有此信息!");
	printf("\n");
}
}
void Append()
{
	system("cls");
    int j=size;
    int num;
    printf("输入插入的个数:");
    scanf("%d",&num);
   
	for(size;size<j+num;size++)
	{
		printf("输入第%d个姓名\n",size+1);
		scanf("%s",a[size].name);
		printf("输入第%d个号码\n",size+1);
		scanf("%s",a[size].num);
		printf("输入第%d个地址\n",size+1);
		scanf("%s",a[size].add);
	 
	}	 
	printf("插入成功!");
	printf("\n");
}
void Save()
{
	system("cls");
	int i;
	FILE *fp;
	fp=fopen("p.txt","w");
	if((fp=fopen("p.txt","w"))!=NULL)
	{
	
    fprintf(fp,"姓名    号码            地址\n");
    for(i=0;i<size;i++)
	{
		fprintf(fp,"%s\t%s\t%s\n",a[i].name,a[i].num,a[i].add );
	}
	
	fclose(fp);
	delay();
	printf("保存成功,请在p.txt找文件\n");
}
else
{
	printf("保存失败\n");
}
}
void Load()
{
	system("cls");
	int i;
	int ch;
	char m;
	
	FILE *fp1;
	fp1=fopen("p.txt","r");
	if((fp1=fopen("p.txt","r"))==NULL)
	{
		printf("没此文件,请去创建!\n");
	}
 else
 {
 
	printf("输入读取的个数:\n");
	scanf("%d",&size);
	do
	{
		ch=fgetc(fp1);
	}while(ch!='\n');//换行 
	for(i=0;i<size;i++)
	{
		fscanf(fp1,"%s\t%s\t%s\n",a[i].name,a[i].num,a[i].add);
	}
	fclose(fp1);
	printf("读取成功");
	printf("\n");}
}
void Quit()
{
	system("cls");
	printf("请按任意键退出!");
	exit(0);
}
void Menu()
{
	delay();
	int i;
	for(;;)
	{
	do{
		printf("\t\t\t\t_________________________________________\n");
		printf("\t\t\t\t|******1.Create(创建通讯录)**************|\n");
		printf("\t\t\t\t|******2.Append(添加信息)****************|\n");
		printf("\t\t\t\t|******3.Creat_hash(构建散列表)**********|\n");
		printf("\t\t\t\t|******4.Find(查询信息)****************|\n");
     	printf("\t\t\t\t|******5.Delete(删除信息)**************|\n");
    	printf("\t\t\t\t|******6.Alter(修改信息)***************|\n");
    	printf("\t\t\t\t|******7.List(显示信息)****************|\n");
		printf("\t\t\t\t|******8.Save(保存信息)****************|\n");
		printf("\t\t\t\t|******9.Load(读取信息)****************|\n");
    	printf("\t\t\t\t|******10.Quit(退出)*******************|\n");
		printf("\t\t\t\t|________________________________________|\n");
	scanf("%d",&i);
	switch(i){
		case 1:
		Create();//创建新的通讯录 
		break;
		case 2:
		Append();//在通讯录末尾写入新信息 
		break;
		case 3:
		Creat_hash();//创建散列表 
		break;
		case 4:
		Find();//查询 
		break;
		case 5:
		Delete();//修改 
		break;
		case 6:
		Alter();//删除 
		break;
		case 7:
		List();//显示 
		break;
		case 8:
		Save();//保存 
		break;
		case 9:
		Load();//读取 
		break;
		case 10:
		Quit();//退出 
		break;
		}
}while(i>0);
}}
int main()
{
	int i;
	//初始化 
    H=(HashTable*)malloc(sizeof(HashTable));//申请内存空间 
	for(i=0;i<HASHSIZE;i++)
	{
		H->elem[i]=NULL;
	}
	H->m=HASHSIZE;
	H->c=0;
	printf("\t\t*****欢迎进入登录系统*****\n");
	//登录函数 
    land();
   return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:36:17  更:2021-09-20 15:37:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:24:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码