(其他实验详见博客)
问题:通讯录管理程序。通讯录是由通讯录条目组成的。…
子问题:通讯录条目由姓名、多个电话(各种类型的电话)组成的,。可以进行输入、输出、修改姓名、修改电话。
分析:
- 多个电话及其类型可用字符串动态数组存储。
int telCount;
string *tels;
string *telType;
- 用构造函数完成多个电话的初始化。
tels = new string[num];
telType = new string[num];
(3)在析构函数中完成内存的回收。
delete []tels;
delete []telType;
(4)其它相应的函数也要做修改。
详细代码:共三个文件:main文件、.cpp文件、.h文件
main文件:
#include "CommEntry.h"
void menu() { // 程序主菜单
cout << "---------------------" << endl;
cout << "程序主菜单如下:" << endl;
cout << "1.输入通讯录条目" << endl;
cout << "2.输出通讯录条目" << endl;
cout << "3.修改姓名" << endl;
cout << "4.修改电话" << endl;
cout << "5.修改电话类型" << endl;
cout << "0.退出" << endl;
cout << "---------------------" << endl;
cout << "请输入:";
}
int Inputchoose() {
string op; cin >> op;
if (op[1]) return 999;
return op[0] - '0';
}
int main() {
int switch_op;
CommEntry ceZS;
do {
menu();
switch_op = Inputchoose();
switch (switch_op) {
case 1: ceZS.input(); break;
case 2: ceZS.output(); break;
case 3: {
cout << "请输入修改的新姓名: ";
string name;
cin >> name;
ceZS.setName(name);
break;
}
case 4: {
cout << "需要修改电话的编号是: ";
int inum = Inputchoose();
while (inum > 3 || inum < 1) { // 确保安全性
cout << "您输入的编号有误,请重新输入需要修改的编号: ";
inum = Inputchoose();
}
cout << "新的电话为:";
string tel; cin >> tel;
ceZS.setTel(tel, inum - 1);
break;
}
case 5: {
cout << "需要修改电话类型的编号是: ";
int inum = Inputchoose();
while (inum > 3 || inum < 1) { // 确保安全性
cout << "您输入的编号有误,请重新输入需要修改的编号: ";
inum = Inputchoose();
}
cout << "新的电话类型为:";
string tel; cin >> tel;
ceZS.setTelType(tel, inum - 1);
break;
}
case 0: break; // 退出
default: cout << "您输入的命令有误,请重新输入" << endl; break;
}
} while (switch_op);
return 0;
}
.h:
#pragma once
#include <iostream>
#include <string>
using namespace std;
class CommEntry {
public:
CommEntry(int nm = 3);
~CommEntry();
void input(); // 输入通讯录条目
void output(); // 输出通讯录条目
void setName(string nam); // 修改姓名
void setTel(string t, int iNum); // 修改电话
void setTelType(string t, int iNum); // 修改电话类型
int getNum(); // 获取电话数量
string getName(); // 获取姓名
string getTel(int iNum); // 获取电话
private:
string name; // 姓名
int num; // 电话数量
string* tels; // 电话
string* telType; // 电话类型
};
cpp:
#include "CommEntry.h"
CommEntry::CommEntry(int nm) : num(nm) {
tels = new string[nm];
telType = new string[nm];
}
CommEntry::~CommEntry() {
delete[] tels;
delete[] telType;
}
void CommEntry::input() { // 输入通讯录条目
cout << "Name:";
cin >> name;
for (int i = 0; i < num; ++i) {
cout << "Tel " << i + 1 << ": ";
cin >> tels[i];
cout << "TelType " << i + 1 << ": ";
cin >> telType[i];
}
}
void CommEntry::output() { // 输出通讯录条目
cout << "通讯录条目如下:" << endl;
cout << "Name:" << name << endl;
for (int i = 0; i < num; ++i) {
cout << "Tel " << i + 1 << ": " << tels[i] << endl;
cout << "TelType " << i + 1 << ": " << telType[i] << endl;
}
cout << endl;
}
void CommEntry::setName(string nam) { // 修改姓名
name = nam;
}
void CommEntry::setTel(string t, int iNum) { // 修改电话
tels[iNum] = t;
}
void CommEntry::setTelType(string t, int iNum) { // 修改电话类型
telType[iNum] = t;
}
int CommEntry::getNum() { // 获取电话数量
return num;
}
string CommEntry::getName() { // 获取姓名
return name;
}
string CommEntry::getTel(int iNum) {// 获取电话
return tels[iNum];
}