1. 程式人生 > >大作業題(三)

大作業題(三)

本人大一新生,這是根據老師佈置的作業自己寫的程式碼,有不足之處請指正。
問題描述
編寫一個簡單的通訊錄管理程式。通訊錄記錄有姓名,地址(省、市(縣)、街道),電話號碼,郵政編碼等四項。
基本要求
程式應提供的基本基本管理功能有:
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;
}