个人项目 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 ...
随机推荐
- Linux学习之路(一)
导语: 早前为了方便日常开发,建立跟生产环境类型的环境的时候考虑使用docker作为模拟生产环境,结果没想到给自己的学习挖了一个大坑.其他关于docker容器技术的坑先不在这里赘述,有时间的话在其他文 ...
- March 09th, 2018 Week 10th Friday
All good things must come to an end. 好景无常. Love is when the other person's happiness is more importa ...
- 如何合并列表中key相同的字典?
现有list: list1 = [{a: 123}, {a: 456},{b: 789}] 合并成: list2 = [{a: [123,456]},{b: [789]}] from collecti ...
- 如何在excel单元格中插入图片批注
在excel单元格中插入图片批注的方法: 1.选定要插入图片的单元格,然后右键选择插入批注. 2.然后会插入一个批注框,为了不影响图片效果,可以将批注文字都删除.然后鼠标移动到批注框边角再右键. 3. ...
- 详解Transformer模型(Atention is all you need)
1 概述 在介绍Transformer模型之前,先来回顾Encoder-Decoder中的Attention.其实质上就是Encoder中隐层输出的加权和,公式如下: 将Attention机制从Enc ...
- 002_浅析python 中__name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- 微信硬件平台(八) 4 ESP8266通过微信公众号给用户推送消息
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=自己申请微信公众号的TOKEN 输出结果: 由于aRDUINO串 ...
- 吴恩达课后作业学习1-week2-homework-logistic
参考:https://blog.csdn.net/u013733326/article/details/79639509 希望大家直接到上面的网址去查看代码,下面是本人的笔记 搭建一个能够 “识别猫” ...
- 快速搭建日志系统——ELK STACK
什么是ELK STACK ELK Stack是Elasticserach.Logstash.Kibana三种工具组合而成的一个日志解决方案.ELK可以将我们的系统日志.访问日志.运行日志.错误日志等进 ...
- Ubuntu Server 16.04修改IP、DNS、hosts
本文记录下Ubuntu Server 16.04修改IP.DNS.hosts的方法 -------- 1. Ubuntu Server 16.04修改IP sudo vi /etc/network/i ...