1. 实验目的及要求

目的:通过设计一个《个人电话号码查询系统》,进一步熟悉一些概念、基本知识和技能,利用所学的基本知识和技能解决简单的面向对象的程序设计问题。实现根据用户输入的信息进行快速的查询。

要求: 实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等),对数据进行二叉排序并实现平衡二叉树,对数据进行快速查询。编程完成通讯录的一般性管理工作,如通讯录中记录的增加、修改、查找、删除、输出等功能。每个记录包含姓名、电话号码、住址等个人基本信息。

(1)在外存上,用文件保存电话号码信息;

(2)在内存中,设计数据结构存储电话号码信息;

(3)提供查询功能,如根据姓名实现快速查询;

(4)提供其他维护功能,例如插入、删除、修改等。

  1. 实验步骤

1.实验问题分析

需要用到数据结构课上学到的平衡二叉树的知识,实现删除和插入,增加功能。理解关于二叉树的相关的基本算法。将输入的信息保存入文件和从文件输出。

2.实验概要分析

首先由于程序中要有对学生信息的增加和减少,定义一个全局变量n,在此程序的任意的模块中均可以使用。宏定义,用LEN来代替开辟地址空间,定义一个结构体变量,record,来存储联系人信息。

  1. 实验内容

代码的实现如下:

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 问题描述 设计一个电话号码查询系统,为来访的客⼈提供各种信息查询服务. 1.2 基本要求 设计每个记录有下列数据项:电话号码.用户名.地址 从键盘输入个记录,分别以电话号码和 ...

  2. 数据结构个人电话号码查询系统实验报告

    实验目的及要求 目的:通过设计一个<个人电话号码查询系统>,进一步熟悉一些二叉树的概念.以及基本知识和技能,利用所学的基本知识和技能解决简单的面向对象的程序设计问题.实现根据用户输入的信息 ...

  3. 编写电话号码查询系统

    编写电话号码查询系统 一.项目简介 设计一个通讯录管理软件,做到能够增加组.删除组. 修改组.查询好友.加好友.修改好友,删除好友,退出. (1) 通讯录的每一条信息包括姓名,手机,电话,性别,分组: ...

  4. java编程电话号码查询_java课程设计电话号码查询系统(15页)-原创力文档

    山东建筑大学 Java 课程设计报告 设计题目 电话号码查询系统 学生姓名黄瑜 学号 2010121187 专业班级信计101 指导教师 王文 1 1 1.设计目的 1.通过JAVA 课程设计,使大家 ...

  5. C/C++电话号码查询系统

    C/C++电话号码查询系统 散列表实现电话号码查询系统,语言采用C/C++. 一.设计任务 1.目的:设计并实现一个电话号码查询系统. 2.要求: (1)采用散列表(长度5)进行存储,散列函数选择除留 ...

  6. 输入手机号查询信息C语言,简单个人电话号码查询系统.doc

    课程设计任务书 2011-2012学年第1学期 电子与信息工程系 专业 班级 课程设计名称: 数据结构课程设计 设计题目: 简单个人电话号码查询系统 完成期限:自2012 年 1月2日至2012 年 ...

  7. 电话号码查询系统(链式结构)

    摘要:C/C++  数据结构 正文:用链式结构来实现电话号码查询系统,程序如下: #include<iostream> #include<malloc.h> #include& ...

  8. 哈希表实现电话号码查询系统(c++)

    问题描述:设计哈希表实现电话号码查询系统,实现下列功能: (1) 假定每个记录有下列数据项:电话号码.用户名.地址. (2) 一是从数据文件old.txt(自己现行建好)中读入各项记录,二是由系统随机 ...

  9. 【数据结构课程设计报告】电话号码查询系统(Java实现)

    数据结构课程设计报告 电话号码查询系统 数据结构课程设计报告 一.需求分析 二.系统功能划分及设计 1.存储结构设计 2.系统的功能架构设计 3.模块设计 3.代码实现 一.需求分析 问题描述:路径规 ...

  10. 电话号码查询系统(数据结构之哈希表)

    哈希表 哈希表(Hash Table)是一种根据关键字直接访问内存存储位置的数据结构.通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数. 1. ...

最新文章

  1. SQL Server 事务日志
  2. tomcat向weblogic移植需要注意的问题
  3. 类的主动使用与被动使用等
  4. ActiveRecord教程
  5. 计算机应用基础教程2015答案,《计算机应用基础教程(2015版)》_课后题答案.doc
  6. python中定义一个类、实例化时传入的参数如何传递_用实例分析Python中method的参数传递过程...
  7. 电子元件 —— 继电器
  8. C++中algorithm头文件中一些函数使用记录
  9. JTAG Pin脚定义及要求
  10. VS2003镜像安装
  11. 【02】Java进阶:17-单例设计模式、多例设计模式、枚举、工厂设计模式、Lombok
  12. 【Arduino实验16 步进电机的控制】
  13. 3Dmax2014安装问题
  14. 第十二周项目5-迷宫问题之图深度优先遍历解法
  15. 修改导航栏的背景色和字体颜色
  16. 正则表达式语法及常用实例
  17. 物联卡管理系统都有什么功能,物联卡后台使用说明
  18. C语言运算符逻辑运算符位运算符
  19. tesseract验证码训练部骤
  20. 大厂程序员裸辞,全职接单一个月的感触!

热门文章

  1. 最全TCP/UDP端口号整理
  2. 如何理解熵、交叉熵、KL散度、JS散度
  3. ANSYS 15 直接优化分析
  4. Unity实现安卓虚拟摇杆多点触控
  5. 【Object C】从Java 一步步走向Object C
  6. 设计模式之适配器与外观模式(二)
  7. Hybrid Astar 算法剖析和实现(一)
  8. 什么是脚本,脚本语言?
  9. 年轻人的第一笔债,在双11的直播间里
  10. word——VBA编程