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

系统的主要功能包括:

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. PHP is much better than you think

    Rants about PHP are everywhere, and they even come from smart guys.When Jeff Atwood wrote yet anothe ...

  2. C# -- 使用递归列出文件夹目录及目录下的文件

    使用递归列出文件夹目录及目录的下文件 1.使用递归列出文件夹目录及目录下文件,并将文件目录结构在TreeView控件中显示出来. 新建一个WinForm应用程序,放置一个TreeView控件: 代码实 ...

  3. Tomcat结构

    Tomcat结构 Server(服务器) 服务器代表整个Tomcat容器. Tomcat提供了服务器接口的默认实现(很少由用户定制). Service(服务) 服务是位于服务器内部的中间组件,将一个或 ...

  4. 【项目 · Wonderland】会议一 · 可达鸭

    [软件工程实践 · 团队项目] 第一次作业 Part 0 · 简 要 目 录 Part 1 · 队 伍 阵 容 Part 2 · 会 议 记 录 相 关 Part 3 · 会 议 讨 论 记 录 Pa ...

  5. 微信小程序本地引用iconfont(阿里巴巴矢量图标库)

    好,忙,我懂..... 首先把图标放进项目里(废话): 接下来把这些图标下载到本地(这里不介绍网络途径了,下载就完事了) 然后利用一个网站将这个ttf文件转成base64文件https://trans ...

  6. Cassandra联手Spark 大数据分析将迎来哪些改变?

    2014Spark峰会在美国旧金山举行,与会数据库平台供应商DataStax宣布,与Spark供应商Databricks合作,在它的旗舰产 品 DataStax Enterprise 4.5 (DSE ...

  7. vue项目,ie11 浏览器报 Promise 未定义的错误

    报错:  {description: "“Promise”未定义", message: "“Promise”未定义", name: "Referenc ...

  8. HTML做的网页 如何使当前页面跳转到另一页面锚点处

    当前页面a.html另一页面b.html当前页面: <a href="b.html#aaa">跳转到b页面aaa处</a>另一页面:<a name=& ...

  9. (转)Spring Boot(三):Spring Boot 中 Redis 的使用

    http://www.ityouknow.com/springboot/2016/03/06/spring-boot-redis.html Spring Boot 对常用的数据库支持外,对 Nosql ...

  10. 设计模式のMementoPattern(备忘录模式)----行为模式

    一.产生背景 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态. 主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态, ...