个人电话号码查询系统
- 实验目的及要求
目的:通过设计一个《个人电话号码查询系统》,进一步熟悉一些概念、基本知识和技能,利用所学的基本知识和技能解决简单的面向对象的程序设计问题。实现根据用户输入的信息进行快速的查询。
要求: 实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等),对数据进行二叉排序并实现平衡二叉树,对数据进行快速查询。编程完成通讯录的一般性管理工作,如通讯录中记录的增加、修改、查找、删除、输出等功能。每个记录包含姓名、电话号码、住址等个人基本信息。
(1)在外存上,用文件保存电话号码信息;
(2)在内存中,设计数据结构存储电话号码信息;
(3)提供查询功能,如根据姓名实现快速查询;
(4)提供其他维护功能,例如插入、删除、修改等。
- 实验步骤
1.实验问题分析
需要用到数据结构课上学到的平衡二叉树的知识,实现删除和插入,增加功能。理解关于二叉树的相关的基本算法。将输入的信息保存入文件和从文件输出。
2.实验概要分析
首先由于程序中要有对学生信息的增加和减少,定义一个全局变量n,在此程序的任意的模块中均可以使用。宏定义,用LEN来代替开辟地址空间,定义一个结构体变量,record,来存储联系人信息。
- 实验内容
代码的实现如下:
Main.cpp
#include <string>
#include <vector>
#include <fstream>
using namespace std;
static int n=0;//输入的数据个数
#define limit 100//通讯录的存储空间class PostCodedress{public:struct xinxi{int id;//编号顺序char Name[20];char Phone[20];}xx;void zengPostCodedress();//增加信息;int cc(char na[]); //看输入的名字是不是重复;
};
void PostCodedress::zengPostCodedress()//增加信息的
{for(int i = 1;i<=2;i++){if(i==1){cout<<"请输入联系人姓名: "<<endl;cin>>xx.Name;}if(i==2){cout<<"请输入联系人电话号码: "<<endl;cin>>xx.Phone;}}
}
int PostCodedress::cc(char na[])
{if(strcmp(na,xx.Name)==0)return 1;else return 0;
}
PostCodedress B[10];
class POSTCODEDRESDBOOK:public PostCodedress //对信息进行排序,并且写进文件,打开文件;
{
public:void searchPostCodedress1(char nu[]);//根据电话号码查找联系人;void searchPostCodedress2(char na[]);//根据姓名查找联系人;void Save(); //实现保存功能;void Put(); //增加的信息写入文件void RePostCode(); //打开文件,显示信息void display(); //浏览功能,显示信息;void Delete(); //删除功能;
};
void POSTCODEDRESDBOOK::searchPostCodedress1(char nu[])//根据电话号码查找联系人;
{int i;if(n==0){cout<<"查无此人"<<endl;}else{for(i=0;i<n;i++){if(strcmp(nu,B[i].xx.Phone)==0){ cout<<B[i].xx.id<<" "<<B[i].xx.Name<<" "<<B[i].xx.Phone<<endl;break;}else if(strcmp(nu,B[i].xx.Phone)!=0 && i==n-1){cout<<"查无此人"<<endl;break;}}}}
void POSTCODEDRESDBOOK::searchPostCodedress2(char na[])//根据姓名查找联系人;
{int i;if(n==0){cout<<"查无此人"<<endl;}else{for(i=0;i<n;i++){if(strcmp(na,B[i].xx.Name)==0){ cout<<B[i].xx.id<<" "<<B[i].xx.Name<<" "<<B[i].xx.Phone<<endl;break;}else if(strcmp(na,B[i].xx.Name)!=0 && i==n-1){cout<<"查无此人"<<endl;break;}}}}
void POSTCODEDRESDBOOK::Save()//实现保存功能;
{ofstream f2("save_PostCodedress.txt");f2.close();remove("save_PostCodedress.txt");ofstream f3("save_PostCodedress.txt");for(int i=0;i<n;i++){f3<<B[i].xx.id<<" "<<B[i].xx.Name<<" "<<B[i].xx.Phone<<endl;}f3.close();
}
void POSTCODEDRESDBOOK::Put()//增加的信息写入文件
{ofstream RePostCode("xcc.txt");if(!RePostCode){cout << "不能打开文件 ";exit(1); // terminate with error}cout<<"这是您输入的第"<<n+1<<"个联系人 "<<endl;for(int i=n;;i++){if(i==limit){cout<<"存储空间已满,可选择删除数据再进行输入"<<endl;break;}B[i].zengPostCodedress();for(int j=0;j<n;j++){if(B[i].cc(B[j].xx.Name)){cout<<"数据录入重复"<<endl;i=i-1;break;}}n++;B[i].xx.id=n;RePostCode<<B[i].xx.id<<" "<<B[i].xx.Name<<" "<<B[i].xx.Phone<<endl;char q;cout<<"选择是否继续输入(y/n)"<<endl;cin>>q;if(q=='n')break;if(q=='y')continue;}RePostCode.close();
}
void POSTCODEDRESDBOOK::RePostCode()//输出文件
{fstream Myfile("xcc.txt");if(!Myfile) //判断是否成功打开文件{cerr<<"open error!"<<endl;abort();}string temp;while(getline(Myfile,temp)){cout<<temp<<endl;}Myfile.close();}
void POSTCODEDRESDBOOK::display()//显示当前联系人
{cout<<"当前通讯录联系人有:"<<n<<"个 "<<endl<<"通讯录中最多可以添加"<<100-n<<"个联系人"<<endl;cout<<"联系人如下: " <<endl;for(int i=0;i<n;i++){cout<<B[i].xx.id<<" "<<B[i].xx.Name<<" "<<B[i].xx.Phone<<endl;}cout<<endl;
}
void POSTCODEDRESDBOOK::Delete()//删除联系人
{char na[20];cout<<"输入你要删除的人的名字"<<endl;cin>>na;int j;for(int i=0;i<n;i++){if(strcmp(na,B[i].xx.Name)==0){j=i;break;}}for(int i1=j;i1<n-1;i1++){B[i1]=B[i1+1];B[i1].xx.id=i1;}n--;fstream Myfile("xcc.txt");ofstream f2("tmp2.txt");for(int i3=0;i3<n;i3++){f2<<B[i3].xx.id<<" "<<B[i3].xx.Name<<" "<<B[i3].xx.Phone<<endl;}Myfile.close();f2.close();remove("xcc.txt");rename("tmp2.txt","xcc.txt");
}int main()
{POSTCODEDRESDBOOK P;char Q;cout<<"***欢 迎 使 用 电 话 号 码***"<<endl;fstream f1("xcc.txt");f1.clear();f1.close();while(1){POSTCODEDRESDBOOK p;cout<<"*********通讯录*********"<<endl;cout<<"*****1.添加联系人*****"<<endl;cout<<"*****2.联系人列表*****"<<endl;cout<<"*****3.查找联系人*****"<<endl;cout<<"*****4.删除联系人*****"<<endl;cout<<"*****5.通讯录存盘*****"<<endl;cout<<"*****6.读出通讯录*****"<<endl;cout<<"*****7.退出***********"<<endl;cout<<"***********************"<<endl;int q;cout<<"请选择操作:"<<endl;cin>>q;switch(q){case 1:p.display();p.Put();break;case 2:p.display();break;case 3:p.display();char h[11];cout<<"输入你要按号码(h)查找还是按姓名(m)查找:"<<endl;char z;cin>>z;if(z=='h'){char h[11];cout<<"输入你要查找的号码:"<<endl;cin>>h;p.searchPostCodedress1(h);}if(z=='m'){char m[20];cout<<"输入你要查找的姓名:"<<endl;cin>>m;p.searchPostCodedress2(m);}break;case 4:p.display();p.Delete();break;case 5:p.display();p.Save();break;case 6:p.display();p.RePostCode();break;case 7:break;}cout<<"请问是否继续使用系统? 是(y) 否(n)"<<endl;cin>>Q;if(Q=='y')continue;if(Q=='n')break;}return 0;
}1.h
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <windows.h>
#define HASHSIZE 53 //定义表长
#define MAXSIZE 20 //电话薄记录数量
#define ok 1
#define error -1
#define LEN sizeof(HashTable)
typedef int Status;
typedef char NA[MAX_SIZE];
typedef struct //记录
{NA name;NA tel;
} Record;typedef struct
{
//散列表Record *elem[HASHSIZE]; //数据元素存储基址int count; //当前数据元素个数int size; //当前容量
} HashTable;Status eq(NA x,NA y)
{//关键字比较,相等返回1;否则返回-1if(strcmp(x,y)==0)return ok;else return error;
}Status NUM_BER; //记录的个数
.实验结果
5. 实验总结分析
通过这次实验,体会到要掌握以下几点内容:
1.要学会先做好模块,从大到小,进行细化。
2.编写好函数,并进行测试与调试。
3.写程序时要善于使用库函数,可以提高效率。
4.定义函数时,应选好参数的个数和数据类型。
但仍需进一步的学习二叉树地相关知识,才能够更加熟练的运用数据结构(C++)来设计系统。
个人电话号码查询系统相关推荐
- 设计散列表实现通讯录查找系统_[源码和文档分享]利用哈希表实现电话号码查询系统...
第一章 需求分析 1.1 问题描述 设计一个电话号码查询系统,为来访的客⼈提供各种信息查询服务. 1.2 基本要求 设计每个记录有下列数据项:电话号码.用户名.地址 从键盘输入个记录,分别以电话号码和 ...
- 数据结构个人电话号码查询系统实验报告
实验目的及要求 目的:通过设计一个<个人电话号码查询系统>,进一步熟悉一些二叉树的概念.以及基本知识和技能,利用所学的基本知识和技能解决简单的面向对象的程序设计问题.实现根据用户输入的信息 ...
- 编写电话号码查询系统
编写电话号码查询系统 一.项目简介 设计一个通讯录管理软件,做到能够增加组.删除组. 修改组.查询好友.加好友.修改好友,删除好友,退出. (1) 通讯录的每一条信息包括姓名,手机,电话,性别,分组: ...
- java编程电话号码查询_java课程设计电话号码查询系统(15页)-原创力文档
山东建筑大学 Java 课程设计报告 设计题目 电话号码查询系统 学生姓名黄瑜 学号 2010121187 专业班级信计101 指导教师 王文 1 1 1.设计目的 1.通过JAVA 课程设计,使大家 ...
- C/C++电话号码查询系统
C/C++电话号码查询系统 散列表实现电话号码查询系统,语言采用C/C++. 一.设计任务 1.目的:设计并实现一个电话号码查询系统. 2.要求: (1)采用散列表(长度5)进行存储,散列函数选择除留 ...
- 输入手机号查询信息C语言,简单个人电话号码查询系统.doc
课程设计任务书 2011-2012学年第1学期 电子与信息工程系 专业 班级 课程设计名称: 数据结构课程设计 设计题目: 简单个人电话号码查询系统 完成期限:自2012 年 1月2日至2012 年 ...
- 电话号码查询系统(链式结构)
摘要:C/C++ 数据结构 正文:用链式结构来实现电话号码查询系统,程序如下: #include<iostream> #include<malloc.h> #include& ...
- 哈希表实现电话号码查询系统(c++)
问题描述:设计哈希表实现电话号码查询系统,实现下列功能: (1) 假定每个记录有下列数据项:电话号码.用户名.地址. (2) 一是从数据文件old.txt(自己现行建好)中读入各项记录,二是由系统随机 ...
- 【数据结构课程设计报告】电话号码查询系统(Java实现)
数据结构课程设计报告 电话号码查询系统 数据结构课程设计报告 一.需求分析 二.系统功能划分及设计 1.存储结构设计 2.系统的功能架构设计 3.模块设计 3.代码实现 一.需求分析 问题描述:路径规 ...
- 电话号码查询系统(数据结构之哈希表)
哈希表 哈希表(Hash Table)是一种根据关键字直接访问内存存储位置的数据结构.通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数. 1. ...
最新文章
- SQL Server 事务日志
- tomcat向weblogic移植需要注意的问题
- 类的主动使用与被动使用等
- ActiveRecord教程
- 计算机应用基础教程2015答案,《计算机应用基础教程(2015版)》_课后题答案.doc
- python中定义一个类、实例化时传入的参数如何传递_用实例分析Python中method的参数传递过程...
- 电子元件 —— 继电器
- C++中algorithm头文件中一些函数使用记录
- JTAG Pin脚定义及要求
- VS2003镜像安装
- 【02】Java进阶:17-单例设计模式、多例设计模式、枚举、工厂设计模式、Lombok
- 【Arduino实验16 步进电机的控制】
- 3Dmax2014安装问题
- 第十二周项目5-迷宫问题之图深度优先遍历解法
- 修改导航栏的背景色和字体颜色
- 正则表达式语法及常用实例
- 物联卡管理系统都有什么功能,物联卡后台使用说明
- C语言运算符逻辑运算符位运算符
- tesseract验证码训练部骤
- 大厂程序员裸辞,全职接单一个月的感触!