大作业题(三)

本人大一新生,这是根据老师布置的作业自己写的代码,有不足之处请指正。
问题描述
编写一个简单的通讯录管理程序。通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。
基本要求
程序应提供的基本基本管理功能有:
1)    添加:即增加一个人的记录到通信录中
2)    显示:即在屏幕上显示所有通信录中的人员信息,应能分屏显示。
3)    存储:即将通讯录信息保存在一个文件中。
4)    装入:即将文件中的信息读入程序。
5)    查询:可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。
6)    修改:可修改一个人的除姓名外其它信息。
测试数据
程序应输入不少于10个人员的通讯录信息,应考虑到人员可以同名的情况。
实现提示
程序可用数组或单向链表来管理人员信息,每个人员的姓名,地址,电话号码和邮政编码用一个类Cperson来实现。

头文件:Cperson.h

#ifndef _CPERSON_H_
#define _CPERSON_H_
#include <string>
using std::string;
class Cperson {
public:
	Cperson();
	Cperson(string, string, string, string);
	void Input();
	void Print();
	friend void Search();
	friend void Edit();
	friend void To_File();
	friend void Read_File();
private:
	static int ID;
	string Name;
	string Adress;
	string TelNumber;
	string Postal_Code;
};
#endif

类的实现:Cperson.cpp

#include "Cperson.h"
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::ifstream;
using std::ofstream;
using std::vector;
extern vector<Cperson> Cpersons;
int Cperson::ID = 0;
Cperson::Cperson() :Name(""), Adress(""), TelNumber(""), Postal_Code("") { ID++; }
Cperson::Cperson(string Name, string Adress, string TelNumber, string Postal_Code) : Name(Name), Adress(Adress), TelNumber(TelNumber), Postal_Code(Postal_Code) {}
void Cperson::Input() {
	cout << "请输入成员的姓名:";
	cin >> Name;
	cout << "请输入成员的地址:";
	cin >> Adress;
	cout << "请输入成员的电话号码:";
	cin >> TelNumber;
	cout << "请输入成员的邮政编码:";
	cin >> Postal_Code;
}
void Cperson::Print() {
	cout << Name << ' ' << Adress << ' ' << TelNumber << ' ' << Postal_Code << endl;
}
void Input() {
	Cperson p;
	p.Input();
	Cpersons.push_back(p);
}
void Print() {
	if (Cpersons.size() == 0) {
		cout << "人员信息为空" << endl;
		return;
	}
	cout << "人员的信息如下:" << endl;
	int i, j = 0;
	for (i = 0; i < Cpersons.size(); i++) {
		Cpersons[i].Print();
		j++;
		if (j % 10 == 0) system("pause");
	}
	cout << endl << "显示完毕。" << endl;
}
void Search() {
	string _Name;
	cout << "请输入要查找的人员姓名:" << endl;
	cin >> _Name;
	int j = 0;
	for (vector<Cperson>::iterator i = Cpersons.begin(); i != Cpersons.end(); i++) {
		if ((*i).Name == _Name) {
			(*i).Print();
			j++;
		}
	}
	if (j == 0) cout << "未找到名为" << _Name << "的人员信息。" << endl;
	else cout << "共找到" << j << "位名为" << _Name << "的人员信息。" << endl;
}
void Edit() {
	string _Name;
	cout << "请输入要查找的人员姓名:" << endl;
	cin >> _Name;
	int j = 0, k;
	vector<Cperson>::iterator* a = new vector<Cperson>::iterator[Cpersons.size()];
	vector<Cperson>::iterator i;
	for (i = Cpersons.begin(); i != Cpersons.end(); i++) {
		if ((*i).Name == _Name) a[j++] = i;
	}
	if (j == 0) {
		cout << "未找到名为" << _Name << "的人员信息。" << endl;
		return;
	}
two:cout << "共找到" << j << "个名为" << _Name << "的人员,请选择要编辑的人物:" << endl;
	for (k = 0; k < j; k++) {
		cout << k << ' ';
		(*a[k]).Print();
	}
	cin >> k;
	string str;
	Cperson c = *a[k];
	cout << "编辑地址:";
	cin >> str;
	c.Adress = str;
	cout << "编辑电话号码:";
	cin >> str;
	c.TelNumber = str;
	cout << "编辑邮政编码:";
	cin >> str;
	c.Postal_Code = str;
	cout << "编辑前后的内容为:";
	(*a[k]).Print();
	cout << "编辑完成后的内容为:";
	c.Print();
	cout << "确认更改吗?确认:y,返回:n,重新输入:r" << endl;
	cin >> str;
	switch (str[0]) {
	case 'y':*a[k] = c; break;
	case 'n':goto one;
	case 'r':
	default:goto two;
	}
one:delete[] a;
	return;
}
void To_File() {
	cout << "输出到程序根目录下的data_write.txt" << endl;
	ofstream fw;
	fw.open("data_write.txt");
	for (vector<Cperson>::iterator i = Cpersons.begin(); i != Cpersons.end(); i++) 
		fw << (*i).Name << ' ' << (*i).Adress << ' ' << (*i).TelNumber << ' ' << (*i).Postal_Code << endl;
	fw.close();
}
void Read_File() {
	ifstream fr("data.txt");
	if (!fr) {
		cout << "打开文件失败,请在程序根目录下放置文件data.txt。" << endl;
		return;
	}
	fr.open("data.txt");
	while (!fr.eof()) {
		string str1, str2, str3, str4;
		fr >> str1 >> str2 >> str3 >> str4;
		Cperson c(str1, str2, str3, str4);
		Cpersons.push_back(c);
	}
	fr.close();
}

主程序:main.cpp

#include "Cperson.h"
#include <iostream>
#include <vector>
using std::vector;
using std::cin;
using std::cout;
using std::endl;
vector<Cperson> Cpersons;
void Input();
void Print();
void Search();
void Edit();
void To_File();
void Read_File();
int main() {
	char a;
brk:cout << "请选择功能,输入其他内容退出:" << endl;
	cout << "1.添加" << endl;
	cout << "2.显示" << endl;
	cout << "3.存储" << endl;
	cout << "4.装入" << endl;
	cout << "5.查询" << endl;
	cout << "6.修改" << endl;
	cin >> a;
	switch (a) {
	case '1':Input(); break;
	case '2':Print(); break;
	case '3':To_File(); break;
	case '4':Read_File(); break;
	case '5':Search(); break;
	case '6':Edit(); break;
	default:return 0;
}
	goto brk;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43773570/article/details/85477383