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