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

系统的主要功能包括:

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. 使用 boost.asio 简单实现 异步Socket 通信

     客户端: class IPCClient { public: IPCClient(); ~IPCClient(); bool run(); private: bool connect(); bool ...

  2. xss挑战之旅wp

    Level 1  -  180831 第一关很简单,开胃菜 payload: http://localhost/xss_game/level1.php?name=test123<script&g ...

  3. 基于centOS7:新手篇→tomcat安装配置

    1.新环境,还没有安装lrzsz和unzip,先安装 yum -y install lrzsz yum -y install unzip 2.进入tomcat官网下载安装包,使用rz上传到服务器opt ...

  4. Kali 2.0 下 Metasploit 初始化配置

    在kali 2.0中,命令行中直接输入msfconsole 提示不能连接到数据库 ,是由于postgresql 未启动.因此,需要开启postgresql,并且进行postgresql 的初始化配置. ...

  5. 转载:java中Thread.sleep()函数使用

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  6. 04.Python网络爬虫之requests模块(1)

    引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...

  7. IntelliJ IDEA LicenseServer激活及使用

    一.激活 IntelliJ IDEA下载地址:https://www.jetbrains.com/idea/download/#section=windows 原文地址:http://blog.csd ...

  8. SQL TOP 子句

    TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 注释:并非所有的数据库系统都支持 TOP 子句. SQL Server 的语法: S ...

  9. 7.02-bs4_btc

    import requests from bs4 import BeautifulSoup from lxml import etree import json class BtcSpider(obj ...

  10. UVA1605-Building for UN(思维)

    Problem UVA1605-Building for UN Accept: 398  Submit: 2303Time Limit: 10000 mSec Problem Description ...