个人项目 Individual Project
通讯录中的联系人包含以下信息项:姓名、手机、办公电话、家庭电话、电子邮箱、所在省市、工作单位、家庭住址,群组分类(亲属、同事、同学、朋友、其他)。
系统的主要功能包括:
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的更多相关文章
- 1415-2个人项目Individual Project
作业要求: 个人独立完成,实践PSP相关知识. 时 间: 两周. (本来截止4月30日,考虑到刚迁移平台,延缓至5月7日) 实践目标: Github基本源代码控制方法 利用Junit4进行程序模块的测 ...
- 1.个人项目 Individual Project
https://github.com/sunlitao 一. 实验1通讯录管理系统 通讯录中的联系人包含以下信息项:姓名.手机.办公电话.家庭电话.电子邮箱.所在省市.工作单位.家庭住址,群组分类(亲 ...
- 个人项目Individual Project:迷宫求解
源码的github链接: https://github.com/zhangxue520/test 1.1问题描述: a.问题描述:以一个m * n的长方阵表示迷宫,0和1分别表示迷 ...
- 个人项目Individual Project:n皇后问题
源码的github链接: https://github.com/luhan420/test/tree/master 1.需求分析 在本次的课程设计中,用到的知识点主要有:类.函数.选择结构里的条件语 ...
- Note: SE Class's Individual Project
虽然第一个Project还有点小问题需要修改,但是大体已经差不多了,先把blog记在这里,算是开博第一篇吧! 1.项目预计的用时 本来看到这个题的时候想的并不多,但是看了老师的要求才觉得如此麻烦ORZ ...
- Individual Project - Word frequency program-11061171-MaoYu
BUAA Advanced Software Engineering Project: Individual Project - Word frequency program Ryan Mao (毛 ...
- .NET: 谈谈共享项目 (Shared Project) 的使用
从 Visual Studio 2015 起,共享项目 (Shared Project) 作为新的一种项目类型被添加到项目模板列表中,它的主要目的是使多个不同类型的项目之间可以共享代码或资源.相比它的 ...
- 错误 : 资产文件“项目\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标。确保已运行还原,且“netcoreapp2.0”已包含在项目的 TargetFrameworks 中。
升级 vs201715.6.3之后发布出现 错误 : 资产文件“项目\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标.确保已运行还原,且 ...
- 结对项目 Pair Project
结对项目 Pair Project 一人编程,一人操作,共同检查. 源码 https://github.com/dpch16303/test/blob/master/%E5%AE%9E%E8%B7%B ...
随机推荐
- Docker 入门到实践(三)Docker 安装
注意:不要在没有配置 Docker APT 源的情况下直接使用 apt 命令安装 Docker. 一.准备工作 系统要求 Docker CE 支持一下版本的 Ubuntu 操作系统 Cosmic 18 ...
- spring cloud 微服务日志跟踪 sleuth logback elk 整合
看过我之前的文章的就可以一步一步搭建起日志传输到搜索引擎 不知道的 看下之前的文章 (1) 记一次logback传输日志到logstash根据自定义设置动态创建ElasticSearch索引 (2)关 ...
- February 28th, 2018 Week 9th Wednesday
Knowledge makes humble, ignorance makes proud. 博学使人谦逊,无知使人骄傲. Humility is not equal with being passi ...
- 【项目 · Wonderland】需求规格说明书 · 终版
[项目 · Wonderland]需求规格说明书 · 终版 Part 0 · 简 要 目 录 Part 1 · 流 程 / 分 工 Part 2 · 需 求 规 格 说 明 书 Part 1 · 流 ...
- Nginx使用教程(四):提高Nginx网络吞吐量之buffers优化
请求缓冲区在NGINX请求处理中起着重要作用. 在接收到请求时,NGINX将其写入这些缓冲区. 这些缓冲区中的数据可作为NGINX变量使用,例如$request_body. 如果缓冲区与请求大小相比较 ...
- spark on yarn 集群部署
概述 hadoop2.7.1 spark 1.5.1 192.168.31.62 resourcemanager, namenode, master 192.168.31.63 nodeman ...
- 如何在python中把两个列表的各项分别合并为列表
[ [a,b] for a,b in zip(list1,list2)] 生成一个以列表list1,list2各项合并列表为元素的列表
- Google Colab 基本操作
## 上传 from google.colab import files uploaded = files.upload() for fn in uploaded.keys(): print('Use ...
- [HAOI2018]苹果树
嘟嘟嘟 这种计数大题就留给南方的计数神仙们做吧-- 刚开始我一直想枚举点,考虑新加一个点在根节点的左右子树,以及左右子树大小怎么分配,但是这样太难计算新的点带来的贡献了. 后来lba又提示我枚举边,考 ...
- 发现一款比echarts更牛B,效果更炫的图表组件 d3.js
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code d3.js ,能制作更加复杂的图表 https://github.com/d3/d3 ...