3-实验三-构造函数与析构函数

该文描述了一个使用C++编写的通讯录管理程序,程序包括输入、输出、修改姓名和电话功能。通讯录条目通过动态数组存储电话及其类型,利用构造函数初始化,析构函数释放内存。主函数提供用户交互菜单,允许用户执行各种操作。
摘要由CSDN通过智能技术生成

(其他实验详见博客)

问题:通讯录管理程序。通讯录是由通讯录条目组成的。…

子问题:通讯录条目由姓名、多个电话(各种类型的电话)组成的,。可以进行输入、输出、修改姓名、修改电话。

分析:

  1. 多个电话及其类型可用字符串动态数组存储。

   int telCount;

   string *tels;

   string *telType;

  1. 用构造函数完成多个电话的初始化。

   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];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值