数据结构与算法导论---通讯录的实现

1、实验简介

   【实验内容的简要说明,具体说明实验完成的功能和性能要求】

      设计的通讯录可以实现1.添加联系人   2.显示联系人  删除联系人  4.查找联系人

5.清空联系人  6.修改联系人 7 .退出联系人的七大功能。性能比较快捷;

2、程序框架

3、关键代码实现

3.1 函数名1。Menu

void Menu()

{

    cout << "~~~~~~~~~~~~~~~~~~~~~~~~" << endl;

    cout << " $$$$$1.添加联系人$$$$$ " << endl;

    cout << " $$$$$2.显示联系人$$$$$ " << endl;

    cout << " $$$$$3.删除联系人$$$$$ " << endl;

    cout << " $$$$$4.查找联系人$$$$$ " << endl;

    cout << " $$$$$5.清空联系人$$$$$ " << endl;

    cout << " $$$$$6.修改联系人$$$$$ " << endl;

    cout << " $$$$$0.退出联系人$$$$$ " << endl;

    cout << "                        " << endl;

    cout << "~~~~~~~~~~~~~~~~~~~~~~~~" << endl;

}

用了一些字符使其更加美观

3.2 函数名2:addPerson

void addPerson(Addressbooks *abs)    //添加联系人

{

    //判断通讯录是否已满

    if (abs->size >= MAX) {

         cout << "通讯录已满,请删除一些联系人" << endl;

         return;

    }

    else {

         //添加具体联系人

         //姓名

         string Name;

         cout << "请输入姓名" << endl;

         cin >> Name;

         abs->personArray[abs->size].m_name = Name;

         //性别

         cout << "请输入性别" << endl;

         cout << "1--男" << endl;

         cout << "2--女" << endl;

         int a = 0;

         do

         {

             int  Sex;

             cin >> Sex;

             if (Sex == 1 || Sex == 2)

             {

                  if (Sex == 1)

                  {

                 

                      abs->personArray[abs->size].m_age = Sex;

                      break;

                  }

                  else

                  {

                     

                      abs->personArray[abs->size].m_age = Sex;

                      break;

                  }

                 

             }

             else {

                  cout << "输入错误,请重新输入" << endl;

                  a = 1;

             }

         } while (a = 1);

         //年龄

         cout << "请输入年龄" << endl;

         int Age = 0;

         cin >> Age;

         abs->personArray[abs->size].m_age = Age;

         //电话

         cout << "请输入电话号码" << endl;

         string Phone;

         cin >> Phone;

         abs->personArray[abs->size].m_phone = Phone;

         //住址

         cout << "请输入住址" << endl;

         string Address ;

         cin >> Address;

         abs->personArray[abs->size].m_address = Address;

         cout << "添加联系人成功!!!!" << endl;

         abs->size++;

         system("pause");

         system("cls");//实现清屏的操作

    }

}

3.3 函数名3:showPerson

void showPerson(Addressbooks *abs)

{

    //判断通讯录人数是否为零

    if (abs->size >= MAX)

       {

            cout << "通讯录人数已满,请进行删除操作" << endl;

       }

    else

        {

             for (int i = 0; i <= abs->size; i++)

             {

             cout << abs->personArray[i].m_name << "\t";

             if (abs->personArray[i].m_sex = 1)

             {

                  cout << "男" << "\t";

             }

             else {

                  cout << "女" << "\t";

             }

             cout << abs->personArray[i].m_sex << "\t";

             cout << abs->personArray[i].m_age << "\t";

             cout << abs->personArray[i].m_phone << "\t";

             cout << abs->personArray[i].m_address << endl;

            

             }

         }

}

3.4 函数名4:textbooks

void textbooks(Addressbooks *abs,string name)//判断有没有联系人在里面

{

   

    for (int i = 0; i <= abs->size; i++)

    {

         if (abs->personArray[i].m_name !=name)

         {

             cout << "没有找到该联系人" << endl;

         }

    }

}

3.5 函数名5:deletePerson

void deletePerson(Addressbooks *abs)

{

   

    if (abs->size == 0)//判断通讯录人数是否为零

    {

         cout << "通讯录人数为0,请进行添加操作" << endl;

    }

    else

    {

         cout << "请再次输入要删除的人名" << endl;

         string name;

         cin >> name;

         for (int i = 0; i <= abs->size; i++)

         {

             if (abs->personArray[i].m_name == name)

             {

                  abs->personArray[i] = abs->personArray[i + 1];

             }

             abs->size--;

            

         }

    }

    system("pause");

    system("cls");//实现清屏的操作

}

3.6 函数名6:Findperson

void Findperson(Addressbooks *abs, string rname)

{

    cout << "请输入要查找的人的姓名" << endl;

    for (int i = 0; i <= abs->size; i++)

    {

        

         cin >> rname;

         if (abs->personArray[i].m_name == rname)

         {

             cout << "已找到该联系人为第" << i << "位" << endl;

             cout << "是否进行操作?" << endl;

             cout << "是---1" << endl;

             cout << "否---2" << endl;

             int a = 0;

             cin>> a;

             if (a = 1)

             {

                  cout << abs->personArray[i].m_name << "\t";

                  if (abs->personArray[i].m_sex = 1)

                  {

                      cout << "男" << "\t";

                  }

                  else {

                      cout << "女" << "\t";

                  }

                  cout << abs->personArray[i].m_sex << "\t";

                  cout << abs->personArray[i].m_age << "\t";

                  cout << abs->personArray[i].m_phone << "\t";

                  cout << abs->personArray[i].m_address << endl;

                  system("pause");

                  system("cls");//实现清屏的操作

             }

            

         }

         else

         {

         cout<< "查无此人" << endl;

         system("pause");

         system("cls");//实现清屏的操作

         }

    }

}

3.7 函数名7: DeleteALLperson

void DeleteALLperson(Addressbooks *abs)

{

    abs->size = 0;

    cout << "通讯录已清空" << endl;

    system("pause");

    system("cls");

}

3.8 函数名8:fixPerson

oid fixPerson(Addressbooks *abs, string name)

{

    cin >> name;

    int x = 0;

    for (x = 0; x <= abs->size; x++)

    {

         if (abs->personArray[x].m_name == name)

         {

             int b;

             cout << "已找到该联系人为第" << x << "位" << endl;

             cout << "是否进行操作?" << endl;

             cout << "是---1" << endl;

             cout << "否---2" << endl;

             cout << "请选择修改的属性------" << endl;

             cout << "姓名---1" << endl;

             cout << "性别---2" << endl;

             cout << "年龄---3" << endl;

             cout << "电话号码---4" << endl;

             cout << "地址---5" << endl;

             cin >> b;

             if (b <= 5)

             {

                  switch (b)

                  {

                  case 1:

                  {

                      cout << "请输入修改后的姓名" << endl;

                      string Fixedname;

                      cin >> Fixedname;

                      abs->personArray[abs->size].m_name = Fixedname;

                      break;

                  }

                  case 2:

                  {

                      cout << "请输入修改后的性别" << endl;

                      char Fixedsex;

                      cin >> Fixedsex;

                      abs->personArray[abs->size].m_sex = Fixedsex;

                      break;

                  }

                  case 3:

                  {

                      cout << "请输入修改后的年龄" << endl;

                      int Fixedage;

                      cin >> Fixedage;

                      abs->personArray[abs->size].m_age = Fixedage;

                      break;

                  }

                  case 4:

                  {

                      cout << "请输入修改后的电话号码" << endl;

                      string Fixedphone;

                      cin >> Fixedphone;

                      abs->personArray[abs->size].m_phone = Fixedphone;

                      break;

                  }

                  case 5:

                  {

                      cout << "请输入修改后的地址" << endl;

                      string Fixedaddress;

                      cin >> Fixedaddress;

                      abs->personArray[abs->size].m_address = Fixedaddress;

                      break;

                  }

                  }

             }

             else

             {

                  cout << "未找到该联系人!!!" << endl;

             }

         }

    }

}

4、不足

【实验程序哪些函数功能还有缺陷或不足,或者程序架构有不足,或者性能还有待提高、或者代码不和规范等等,所有你自己对程序不满意的地方】

打开的速度比较慢,时间复杂度比较高。

5、心得体会

【所有你在实验中的感受和想和老师说的话都可以放在这里,篇幅不限】

通过学习通讯录,我又更加体会到了语法知识的重要性对运行效率的影响,我对数据结构和算法有了更多的认识和充分的了解。

.对项目进行性能测试,再做代码的时间复杂度、空间复杂度分析,会让我们通过不停的反思,去思考另一种算法的方式,在写代码的时候,要注意批注和注释的重要性,有的时候我就会因为读不懂自己的代码而花很多的时间又重新去看一遍。

     

附录  完整代码:

#include <iostream>
#include <string>
#define MAX 100
using namespace std;
struct person//联系人的结构体
{
    string m_name;
	char m_sex;
	int m_age;
	string m_phone;
	string m_address;
	int m_size;  
};
void Menu()
{
	cout << "~~~~~~~~~~~~~~~~~~~~~~~~" << endl;
	cout << " $$$$$1.添加联系人$$$$$ " << endl;
	cout << " $$$$$2.显示联系人$$$$$ " << endl;
    cout << " $$$$$3.删除联系人$$$$$ " << endl;
	cout << " $$$$$4.查找联系人$$$$$ " << endl;
	cout << " $$$$$5.清空联系人$$$$$ " << endl;
	cout << " $$$$$6.修改联系人$$$$$ " << endl;
	cout << " $$$$$0.退出联系人$$$$$ " << endl;
	cout << "                        " << endl;
	cout << "~~~~~~~~~~~~~~~~~~~~~~~~" << endl;
}
struct Addressbooks
{
	//通讯录中保存的联系人数组
	struct person personArray[MAX];
	//通讯录中保存的记录的联系人个数
	int size=0;
};
void addPerson(Addressbooks *abs)    //添加联系人
{
	//判断通讯录是否已满
	if (abs->size >= MAX) {
		cout << "通讯录已满,请删除一些联系人" << endl;
		return;
	}
	else {
		//添加具体联系人
		//姓名
		string Name;
		cout << "请输入姓名" << endl;
		cin >> Name;
		abs->personArray[abs->size].m_name = Name;
		//性别
		cout << "请输入性别" << endl;
		cout << "1--男" << endl;
		cout << "2--女" << endl;
		int a = 0;
		do 
		{
			int  Sex;
			cin >> Sex;
			if (Sex == 1 || Sex == 2)
			{
				if (Sex == 1)
				{
				
					abs->personArray[abs->size].m_age = Sex;
					break;
				}
				else
				{
					
					abs->personArray[abs->size].m_age = Sex;
					break;
				}
				
			}
			else {
				cout << "输入错误,请重新输入" << endl;
				a = 1;
			}
		} while (a = 1);
		//年龄
		cout << "请输入年龄" << endl;
		int Age = 0;
		cin >> Age;
		abs->personArray[abs->size].m_age = Age;
		//电话
		cout << "请输入电话号码" << endl;
		string Phone;
		cin >> Phone;
		abs->personArray[abs->size].m_phone = Phone;
		//住址
		cout << "请输入住址" << endl;
		string Address ;
		cin >> Address;
		abs->personArray[abs->size].m_address = Address;
		cout << "添加联系人成功!!!!" << endl;
		abs->size++;
		system("pause");
		system("cls");//实现清屏的操作
	}

}
void showPerson(Addressbooks *abs)
{
	//判断通讯录人数是否为零
	if (abs->size >= MAX)
	   {
		   cout << "通讯录人数已满,请进行删除操作" << endl;
	   }
	else
	    {
		    for (int i = 0; i <= abs->size; i++)
			{
			cout << abs->personArray[i].m_name << "\t";
			if (abs->personArray[i].m_sex = 1)
			{
				cout << "男" << "\t";
			}
			else {
				cout << "女" << "\t";
			}
			cout << abs->personArray[i].m_sex << "\t";
			cout << abs->personArray[i].m_age << "\t";
			cout << abs->personArray[i].m_phone << "\t";
			cout << abs->personArray[i].m_address << endl;
			
		    }
	     }
}
void textbooks(Addressbooks *abs,string name)//判断有没有联系人在里面
{
	
	for (int i = 0; i <= abs->size; i++)
	{

		if (abs->personArray[i].m_name !=name)
		{
			cout << "没有找到该联系人" << endl;
		}
	}
}
void deletePerson(Addressbooks *abs)
{
	

	if (abs->size == 0)//判断通讯录人数是否为零
	{
		cout << "通讯录人数为0,请进行添加操作" << endl;
	}
	else
	{
		cout << "请再次输入要删除的人名" << endl;
		string name;
		cin >> name;
		for (int i = 0; i <= abs->size; i++)
		{

			if (abs->personArray[i].m_name == name)
			{
				abs->personArray[i] = abs->personArray[i + 1];
			}
			abs->size--;
			
		}
	}
	system("pause");
	system("cls");//实现清屏的操作
}
void Findperson(Addressbooks *abs, string rname)
{
	cout << "请输入要查找的人的姓名" << endl;
	for (int i = 0; i <= abs->size; i++)
	{
		
		cin >> rname;
		if (abs->personArray[i].m_name == rname)
		{
			cout << "已找到该联系人为第" << i << "位" << endl;
			cout << "是否进行操作?" << endl;
			cout << "是---1" << endl;
			cout << "否---2" << endl;
			int a = 0;
			cin>> a;
			if (a = 1)
			{
				cout << abs->personArray[i].m_name << "\t";
				if (abs->personArray[i].m_sex = 1)
				{
					cout << "男" << "\t";
				}
				else {
					cout << "女" << "\t";
				}
				cout << abs->personArray[i].m_sex << "\t";
				cout << abs->personArray[i].m_age << "\t";
				cout << abs->personArray[i].m_phone << "\t";
				cout << abs->personArray[i].m_address << endl;
				system("pause");
				system("cls");//实现清屏的操作
			}
			
		}
		else 
		{
		cout<< "查无此人" << endl;
		system("pause");
		system("cls");//实现清屏的操作
		}
	}
}
void DeleteALLperson(Addressbooks *abs)
{
	abs->size = 0;
	cout << "通讯录已清空" << endl;
	system("pause");
	system("cls");
}
void fixPerson(Addressbooks *abs, string name)
{
	cin >> name;
	int x = 0;
	for (x = 0; x <= abs->size; x++)
	{
		if (abs->personArray[x].m_name == name)
		{
			int b;
			cout << "已找到该联系人为第" << x << "位" << endl;
			cout << "是否进行操作?" << endl;
			cout << "是---1" << endl;
			cout << "否---2" << endl;
			cout << "请选择修改的属性------" << endl;
			cout << "姓名---1" << endl;
			cout << "性别---2" << endl;
			cout << "年龄---3" << endl;
			cout << "电话号码---4" << endl;
			cout << "地址---5" << endl;
			cin >> b;
			if (b <= 5)
			{
				switch (b)
				{
				case 1:
				{
					cout << "请输入修改后的姓名" << endl;
					string Fixedname;
					cin >> Fixedname;
					abs->personArray[abs->size].m_name = Fixedname;
					break;
				}
				case 2:
				{
					cout << "请输入修改后的性别" << endl;
					char Fixedsex;
					cin >> Fixedsex;
					abs->personArray[abs->size].m_sex = Fixedsex;
					break;
				}
				case 3:
				{
					cout << "请输入修改后的年龄" << endl;
					int Fixedage;
					cin >> Fixedage;
					abs->personArray[abs->size].m_age = Fixedage;
					break;
				}

				case 4:
				{
					cout << "请输入修改后的电话号码" << endl;
					string Fixedphone;
					cin >> Fixedphone;
					abs->personArray[abs->size].m_phone = Fixedphone;
					break;
				}

				case 5:
				{
					cout << "请输入修改后的地址" << endl;
					string Fixedaddress;
					cin >> Fixedaddress;
					abs->personArray[abs->size].m_address = Fixedaddress;
					break;
				}


				}
			}


			else
			{
				cout << "未找到该联系人!!!" << endl;
			}
		}
	}
}
	int main()
	{
		Addressbooks abs;
		while (1)
		{
			Menu();
			int select = 0;
			cin >> select;
			switch (select)
			{
			case 1:
			{
				addPerson(&abs);
				break;
			}
			case 2:
			{
				showPerson(&abs);
				system("pause");
				system("cls");
				break;
			}
			case 3:
			{
				cout << "请输入要删除的人名" << endl;
				string FINDname;
				cin >> FINDname;
				textbooks(&abs, FINDname);
				deletePerson(&abs);
				break;
			}
			case 4:
			{
				string Findname;
				Findperson(&abs, Findname);

				break;
			}
			case 5:
			{
				DeleteALLperson(&abs);
				break;
			}
			case 6:

			{
				string Fixname;
				cin >> Fixname;
				fixPerson(&abs, Fixname);
				break;
			}
			case 0:
			{
				cout << "欢迎下次使用" << endl;
				system("pause");
				return 0;
				break;



				system("pause");
			}
			}
			
		}
	}

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tinkinon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值