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

系统的主要功能包括:

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. shell 函数用法

    近期在学习shell编程方面的知识,写的不怎么好,请大家多多指点,下面给大家分享一下shell函数的用法. 我们为什么要用shell函数? 简单的说,函数的作用就是把程序多次调用相同的代码部分定义成一 ...

  2. 关于java中assert(断言)的使用讲解

    说明:写的不是很全面,有任何问题请留言,多交流,谢谢! 1.eclipse.myeclipse开启assert(断言),默认是关闭,如下: 说白了就是设置一下jvm的参数,参数是-ea或者-enabl ...

  3. CentOS 7.0下解决ifconfig: command not found的方法

    在CentOS7.0中输入ifconfig命令会遇到-bash: ifconfig: command not found. 在CentOS最小安装时是没有附带ifconfig,我们进入sbin目录下可 ...

  4. C++实现程序单实例运行的两种方式

    简介 在我们编写程序的时候,经常会注意到的一个问题就是如何能够让程序只运行一个实例,确保不会让同一个程序多次运行,从而产生诸多相同进程,给我们的带来不便呢?那么常用的有以下四种方法,第一种方法是通过扫 ...

  5. LeetCode算法题-Implement Queue Using Stacks(Java实现)

    这是悦乐书的第195次更新,第201篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第57题(顺位题号是232).使用栈实现队列的以下操作. push(x) - 将元素x推 ...

  6. Servlet(二):初识Servlet

    在手动写完一个Servlet小例子后,是不是有很多疑问,接下来会为大家详细介绍Servlet的知识. 1.什么是Servlet 是在服务器上运行的小程序.一个servlet就是一个Java类,并且可以 ...

  7. 【递推】ZSC1072: 数学、不容易系列之二—— LELE的RPG难题

    思路如下: f(n) = 1, ... , n-2 , n-1, n 前n-2个已涂好后,涂第n-1个即有2种情况: n-1的色与n-2和1的色都不相同,那么n就是剩下的那个色,没有选择. 即就是f( ...

  8. 新近碰到的病毒(TR.Spy.Babonock.A)

    先来段Microsoft的说明: Worm:Win32/Babonock.A Alert level: Severe Detected with Windows Defender Antivirus ...

  9. 【车】汽车X40保养

    参考文档: [养车成本]小保养331元,奔腾X40养车成本调查

  10. Kafka consumer group位移0ffset重设

    本文阐述如何使用Kafka自带的kafka-consumer-groups.sh脚本随意设置消费者组(consumer group)的位移.需要特别强调的是, 这是0.11.0.0版本提供的新功能且只 ...