通讯录中的联系人包含以下信息项:姓名、手机、办公电话、家庭电话、电子邮箱、所在省市、工作单位、家庭住址,群组分类(亲属、同事、同学、朋友、其他)。

系统的主要功能包括:

1. 输入联系人的信息,要求:至少输入10个联系人的数据,且注意数据的多样性。

2. 按姓名对联系人信息进行排序,并将排序后信息存放到一个文本文件中。

3. 添加联系人的信息,在已经存在的通讯录文件中添加若干个联系人。要求:添加后仍按联系人的姓名排序,并保存至原文件。

4. 删除联系人的信息,输入一个姓名,若通讯录中有该联系人的信息,则删除该联系人,否则输出提示信息,并提示用户选择是否继续进行删除操作。

5. 修改联系人的信息,输入一个姓名,根据具体需要修改该联系人的某一项信息,将修改后的信息重新保存到通讯录文件中,并提示用户选择是否继续进行修改操作。

6. 按不同条件对通讯录进行查询操作,输出满足条件的联系人的信息。

(1) 按姓名查询,包括精确查询(输入全名),模糊查询(输入姓);

(2) 按手机号码查询,输入全部号码或号码位段(如输入130、133、139等);

(3) 按群组分类查询,输入分类名称,输出该群组的全部联系人信息。

7. 输出联系人的信息,按一定格式输出信息,保证信息排列整齐美观。

三.源程序

#include<iostream>

#include <stdio.h>

#include <fstream>

#include <string.h>

#include <iomanip>

#include <string>

#define N 20

using namespace std;

struct

{

char name[20]; //人名

char post[20]; //工作单位

int tel; //电话号码

char email[20]; //email地址

}TelInfo;

void menu();

void addrecord()

{

char ch;

ofstream ofile("Result.txt",ios_base::out);

do

{

cout<<"请输入通讯录信息"<<endl;

cin>>TelInfo.name>>TelInfo.post>>TelInfo.tel>>TelInfo.email;

ofile<<TelInfo.name<<"  "<<TelInfo.post<<"  "<<TelInfo.tel<<"  "<<TelInfo.email<<endl;

cout<<"have another student record(y/n))?"<<endl;

std::cin>>ch;

}while(ch=='y');

ofile.close();

}

void  changecord()

{

ifstream da("Result.txt", ios_base::in);string str; bool flag = true;

ofstream data("return.txt", ios_base::out);

char a[20];

if (!da)

{

cout<<"找不到文件!!!!"<<endl;

return;

}

cout<<"请输入你要修改人的姓名"<<endl;

cin>>a;

while ( da>>TelInfo.name)

{

getline(da, str);

if (strcmp(TelInfo.name,a)==0)

{

cout<<"你想修改的联系人:" <<endl;

cout<<TelInfo.name<<"  "<<str<<endl;

flag=false;

break;

}

data<<TelInfo.name

<<" "<<str<<endl;

}

if(flag)cout<<"没有该人"<<endl;

else

{

while (getline(da, str))

{

data<<str <<endl;

}

da.close();

data.close();

ifstream in("return.txt", ios::in);

ofstream out("Result.txt", ios::out);

if (!out || !in)

{

cout<<endl<<"对不起不能打开文件!!!"<<endl<<endl;

return;

}

while (getline(in, str))

{

out<<str<<endl;

}

in.close();

ofstream change("Result.txt",ios_base::app);

cout<<"请输入修改的信息"<<endl;

cin>>TelInfo.name>>TelInfo.post>>TelInfo.tel>>TelInfo.email;

out<<TelInfo.name<<"  "<<TelInfo.post<<"  "<<TelInfo.tel<<"  "<<TelInfo.email<<endl;

cout<<"这个人的信息已经从你的通迅录中修改!!!" <<endl;out.close();

}

}

void delrecord()

{

ifstream da("Result.txt", ios_base::in);string str; bool flag = true;

ofstream data("return.txt", ios_base::out);

char a[20];

if (!da)

{

cout<<"找不到文件!!!!"<<endl;

return;

}

cout<<"请输入你要删除人的姓名"<<endl;

cin>>a;

while ( da>>TelInfo.name)

{

getline(da, str);

if (strcmp(TelInfo.name,a)==0)

{

cout <<endl <<"你想删除的联系人:" <<endl;

cout<<TelInfo.name<<"  "<<str<<endl;

flag=false;

break;

}

data<<TelInfo.name

<<" "<<str<<endl;

}

if(flag)cout<<"没有该人"<<endl;

else

{

while (getline(da, str))

{

data<<str <<endl;

}

da.close();

data.close();

ifstream in("return.txt", ios::in);

ofstream out("Result.txt", ios::out);

if (!out || !in)

{

cout<<endl<<"对不起不能打开文件!!!"<<endl<<endl;

return;

}

while (getline(in, str))

{

out<<str<<endl;

}

out.close();

in.close();

cout <<endl <<"这个人的信息已经从你的通迅录中删除!!!" <<endl <<endl;

}

}

void printcord()

{

char ch;

ifstream da("Result.txt");

cout<<"人名 "<<"工作单位 "<<"电话"<<" 地址"<<endl;

while (da.get(ch))

cout << ch;

da.close();

}

void searchcord()

{

char a[20],b[20];int n,m;  ifstream da("Result.txt");

cout<<"请输入要查找方式:";

cout<<"1.姓名:";

cout<<"2.电话号码:";

cin>>n;

if(n==1)

{

cout<<"请输入要查询的姓名"<<endl;

cin>>a;

while(da.eof()==0)

{

da>>TelInfo.name>>TelInfo.post>>TelInfo.tel>>TelInfo.email;

if(strcmp(TelInfo.name,a)==0)

{

cout<<"人名 "<<"工作单位 "<<"电话"<<" 地址"<<endl;

cout<<TelInfo.name<<"  "<<TelInfo.post<<"  "<<TelInfo.tel<<"  "<<TelInfo.email<<endl;

}

}

da.close();

}

if(n==2)

{

cout<<"请输入要查询的电话"<<endl;

cin>>m;

while(da.eof()==0)

{

da>>TelInfo.name>>TelInfo.post>>TelInfo.tel>>TelInfo.email;

if(TelInfo.tel==m)

{

cout<<"人名 "<<"工作单位 "<<"电话"<<" 地址"<<endl;

cout<<TelInfo.name<<"  "<<TelInfo.post<<"  "<<TelInfo.tel<<"  "<<TelInfo.email<<endl;

}

}

da.close();

}

}

void main()

{

menu();

}

void menu()

{

int i;

for(;;){

std::cout<<"通讯录管理系统字符界面版"<<std::endl;

std::cout<<"##################################"<<std::endl;

std::cout<<"请选择操作:"<<std::endl;

std::cout<<"\t1.添加记录"<<std::endl;

std::cout<<"\t2.修改记录"<<std::endl;

std::cout<<"\t3.删除记录"<<std::endl;

std::cout<<"\t4.数据显示"<<std::endl;

std::cout<<"\t5.查询记录"<<std::endl;

std::cout<<"\t6.退出"<<std::endl;

std::cin>>i;

if(!std::cin.good()){

std::cout<<"非法输入!"<<std::endl;

std::cin.clear();

}

switch(i){

case 1:

addrecord();break;

case 2:

changecord();

break;

case 3:

delrecord();

break;

case 4:

printcord();

break;

case 5:

searchcord();

break;

case 6:

return;

default:

std::cout<<"错误的选项!"<<std::endl;

}

}

通过这次通讯录的设计,我对很多的函数有了新的认识,也学会了运用多种函数,明白了写软件的基本过程和基本方法。 
 在设计的过程中遇到了很多的困难,有程序上的也有实验报告上的,尤其是软件在一次一次的调试失败后,对我们打击很大。但最后我们还是咬牙让自己坚持了下来,通过小组的不断试验和讨论以及同学们的帮助,我们总算顺利的完成了程序设计。虽然在调试过程中遇到了许多困难,但当调试成功时那种喜悦的感觉,没有什么东西可以代替。在编写过程中我们都发现我们有许多的知识漏洞和缺陷,需要进一步努力来不断完善自己。 
 总之,此次过程不仅给我很多好的经验,同时加深了同学间的关系,增强了团队解决问题的能力。

个人项目 Individual Project的更多相关文章

  1. 1415-2个人项目Individual Project

    作业要求: 个人独立完成,实践PSP相关知识. 时 间: 两周. (本来截止4月30日,考虑到刚迁移平台,延缓至5月7日) 实践目标: Github基本源代码控制方法 利用Junit4进行程序模块的测 ...

  2. 1.个人项目 Individual Project

    https://github.com/sunlitao 一. 实验1通讯录管理系统 通讯录中的联系人包含以下信息项:姓名.手机.办公电话.家庭电话.电子邮箱.所在省市.工作单位.家庭住址,群组分类(亲 ...

  3. 个人项目Individual Project:迷宫求解

    源码的github链接:           https://github.com/zhangxue520/test 1.1问题描述: a.问题描述:以一个m * n的长方阵表示迷宫,0和1分别表示迷 ...

  4. 个人项目Individual Project:n皇后问题

     源码的github链接: https://github.com/luhan420/test/tree/master 1.需求分析 在本次的课程设计中,用到的知识点主要有:类.函数.选择结构里的条件语 ...

  5. Note: SE Class's Individual Project

    虽然第一个Project还有点小问题需要修改,但是大体已经差不多了,先把blog记在这里,算是开博第一篇吧! 1.项目预计的用时 本来看到这个题的时候想的并不多,但是看了老师的要求才觉得如此麻烦ORZ ...

  6. Individual Project - Word frequency program-11061171-MaoYu

    BUAA Advanced Software Engineering Project:  Individual Project - Word frequency program Ryan Mao (毛 ...

  7. .NET: 谈谈共享项目 (Shared Project) 的使用

    从 Visual Studio 2015 起,共享项目 (Shared Project) 作为新的一种项目类型被添加到项目模板列表中,它的主要目的是使多个不同类型的项目之间可以共享代码或资源.相比它的 ...

  8. 错误 : 资产文件“项目\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标。确保已运行还原,且“netcoreapp2.0”已包含在项目的 TargetFrameworks 中。

    升级 vs201715.6.3之后发布出现 错误 : 资产文件“项目\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标.确保已运行还原,且 ...

  9. 结对项目 Pair Project

    结对项目 Pair Project 一人编程,一人操作,共同检查. 源码 https://github.com/dpch16303/test/blob/master/%E5%AE%9E%E8%B7%B ...

随机推荐

  1. 【PAT】B1012 数字分类

    注意逻辑的描述,只要认真看题,就能做对,如果自己结果一直不正确,请仔细推一下样例结果 #include<stdio.h> int arr[1005]; int main(){ int N, ...

  2. python list和tuple

    list列表简介:列表是python的基础数据类型之⼀ ,其他编程语⾔也有类似的数据类型. 比如JS中的数组, java中的数组等等. 它是以[ ]括起来, 每个元素⽤' , '隔开⽽且可以存放各种数 ...

  3. spark SQL读取ORC文件从Driver启动到开始执行Task(或stage)间隔时间太长(计算Partition时间太长)且产出orc单个文件中stripe个数太多问题解决方案

    1.背景: 控制上游文件个数每天7000个,每个文件大小小于256M,50亿条+,orc格式.查看每个文件的stripe个数,500个左右,查询命令:hdfs fsck viewfs://hadoop ...

  4. SpringBoot注册登录(三):注册--验证账号密码是否符合格式及后台完成注册功能

    SpringBoot注册登录(一):User表的设计点击打开链接SpringBoot注册登录(二):注册---验证码kaptcha的实现点击打开链接      SpringBoot注册登录(三):注册 ...

  5. 【转】Android中dip(dp)与px之间单位转换

    Android中dip(dp)与px之间单位转换 dp这个单位可能对web开发的人比较陌生,因为一般都是使用px(像素)但是,现在在开始android应用和游戏后,基本上都转换成用dp作用为单位了,因 ...

  6. web基础之http

    目录 1.Http协议介绍 Http工作原理 http的请求方法 http的响应响应状态码 状态码的类别 常用HTTP状态码简要介绍 用户访问网站携带的参数,以及服务端返回的参数 (http请求报文 ...

  7. Linux之tmux学习

    Linux之tmux学习 前言 在Linux的世界中,命令行是最优雅的交互方式. 但是,只会使用一个交互终端的程序员,是不足以成为Linux下的大牛的. 那么tmux是什么,引用一下原文介绍 tmux ...

  8. docker 11 docker的commit操作

    docker commit :表示提交一个容器的副本使之成为新的镜像.假如我们在docker上运行了一个tomcat的容器,对Tomcat容器进行了修改操作,然后我们将修改操作后的tomcat进行co ...

  9. falcon常用参数解析

    CPU.xxx cpu.idle cpu.idle表示除硬盘IO等待时间以外其它等待时间,这个值越大,表示cpu越空闲,还可以执行更多的任务,反之亦然,此处我们falcon展示的是idle的波动情况, ...

  10. ftp环境搭建并创建虚拟用户

    1. 首先安装ftp yum install -y vsftpd 2. 修改配置文件   cd /etc/vsftpd /etc/vsftpd/vsftpd.conf //主配置文件,核心配置文件 / ...