个人项目 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 ...
随机推荐
- JavaScript实现元素拖动性能优化
前言:前几天没事干写了个小网站,打算用原生的javascript实现元素的拖动,但是事情并没有想象的那么顺利,首先是实现了拖动的元素卡的不能再卡,简直不能够,上图~~ 看见没?这就是效果,简直让人欲哭 ...
- 【Git 学习三】深入理解git reset 命令
重置命令(git reset)是Git 最常用的命令之一,也是最危险最容易误用的命令.来看看git reset命令用法. --------------------------------------- ...
- 对讲解OS文献的反思
前天把OS中Taneubaum写的那篇论文Can We Make Operating Systems Reliable and Secure?给班上的同学讲解了一遍.这篇文献我花了三天的时间才把它弄好 ...
- LeetCode算法题-Balanced Binary Tree(Java实现)
这是悦乐书的第167次更新,第169篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第26题(顺位题号是110).给定二叉树,判断它是否是高度平衡的.对于此问题,高度平衡二 ...
- SudokuGame 记软工第二次作业
整体概况 1.描述编写整体程序正确过程(含关键代码) 2.整体心路历程及新知分析 3.效能分析.构建之法及整体耗时时间表 4.一些心得体会 GitHub 链接如下: 1.[基础作业BIN文件(最新版) ...
- vue与jquey
vue与jquey jQuery是使用选择器($)选取DOM对象,对其进行赋值.取值.事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的.比如需要 ...
- Python之Requests库的异常
异常 说明 requests.ConnectionError 网络链接错误一场,如 ...
- [ZJOI2012]网络
嘟嘟嘟 今天复习lct,趁着还年轻多写点数据结构. 首先不得不吐槽一下,题面好长啊-- 通过观察发现,\(c \leqslant 10\).那么就可以暴力的建10棵lct. 接下来说下具体做法: 1. ...
- 转://Oracle 11gR2 硬件导致重新添加节点
一.环境描述: 这是一套五年前部署的双节点单柜11g RAC,当时操作系统盘是一块164g的单盘,没有做RAID. OS: RedHat EnterPrise 5.5 x8 ...
- Python:Day07 作业
三级菜单: 自己做的代码: china = { '江苏':{ '南京':{ '江宁':{}, '白下':{}, '栖霞':{}, '江淮':{}, '浦口':{} }, '宿迁':{ '宿城区':{} ...