首页 > 其他分享 >数据结构课程设计,用线性表做一个通讯录管理系统

数据结构课程设计,用线性表做一个通讯录管理系统

时间:2024-03-24 14:58:53浏览次数:16  
标签:课程设计 cout ret name abs 通讯录 personArray Size 线性表

求一个注释,帮忙解析以下代码

#include<iostream>
#include<string>
#include<cstdlib>
#define MAX 2000
using namespace std;
//通讯录管理系统

//设计联系人结构体
struct Person {
	string m_Name;
	int m_Sex;
	int m_Age;
	string m_Phone;
	string m_Addr;
};

//设计通讯录结构体
struct Addressbooks {
	//通讯录中保存的联系人数组
	struct Person personArray[MAX];
	
	//通讯录中当前记录的联系人个数
	int m_Size;
};

//添加联系人
void addPerson(Addressbooks* abs) {
	//判满
	if (abs->m_Size == MAX) {
		cout << "通讯录已满" << endl;
		return;
	}
	else {

		//姓名
		string name;
		cout << "请输入姓名" << endl;
		cin >> name;
		abs->personArray[abs->m_Size].m_Name = name;

		//性别
		cout << "请输入性别" << endl;
		cout << "1——男" << endl;
		cout << "2——女" << endl;
		int sex = 0;

		while (true) {
			cin >> sex;
			if (sex == 1 || sex == 2) {
				abs->personArray[abs->m_Size].m_Sex = sex;
				break;
			}
			cout << "输入有误,重新输入" << endl;
		}

		//年龄
		cout << "请输入年龄" << endl;
		int age = 0;
		cin >> age;
		abs->personArray[abs->m_Size].m_Age = age;

		//电话
		cout << "请输入电话" << endl;
		string phone;
		cin>> phone;
		abs->personArray[abs->m_Size].m_Phone = phone;

		//住址
		cout << "请输入住址" << endl;
		string address;
		cin>> address;
		abs->personArray[abs->m_Size].m_Addr = address;

		//更新通讯录人数
		abs->m_Size++;

		cout << "更新成功" << endl;
		system("pause");
		system("cls");		//清屏操作
	}
}

//显示联系人
void showPerson(Addressbooks* abs) {
	//判空
	if (abs->m_Size == 0) {
		cout << "当期记录为空" << endl;
	}
	else {
		for (int i = 0; i < abs->m_Size; i++) {
			cout << "姓名:" << abs->personArray[i].m_Name<<"\t";
			cout << "性别:" << (abs->personArray[i].m_Sex == 1 ? "男":"女")<< "\t";
			cout << "年龄:" << abs->personArray[i].m_Age << "\t";
			cout << "电话:" << abs->personArray[i].m_Phone << "\t";
			cout << "住址:" << abs->personArray[i].m_Addr << endl;
		}
	}
	system("pause");
	system("cls");		//清屏操作
}

//检测联系人是否存在
int isExist(Addressbooks* abs, string name) {
	for (int i = 0; i < abs->m_Size; i++) {
		//找到用户姓名了
		if (abs->personArray[i].m_Name == name) {
			return i;
		}
	}
	return -1;
}

//删除联系人
void deletePerson(Addressbooks* abs) {
	cout << "请输入要删除的联系人" << endl;

	string name;
	cin >> name;
	int ret = isExist(abs, name);

	if (ret != -1) {
		for (int i = ret; i < abs->m_Size; i++) {
			abs->personArray[i] = abs->personArray[i + 1];
		}
		abs->m_Size--;
		cout << "删除成功" << endl;
	}
	else {
		cout << "查无此人" << endl;
	}

	system("pause");
	system("cls");		//清屏操作
}

//查找联系人
void findPersin(Addressbooks* abs) {
	cout << "请输入要查找的联系人" << endl;
	string name;
	cin >> name;

	int ret = isExist(abs, name);

	if (ret != -1) {
		cout << "姓名:" << abs->personArray[ret].m_Name << "\t";
		cout << "性别:" << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t";
		cout << "年龄:" << abs->personArray[ret].m_Age << "\t";
		cout << "电话:" << abs->personArray[ret].m_Phone << "\t";
		cout << "住址:" << abs->personArray[ret].m_Addr << endl;
	}
	else {
		cout << "查无此人" << endl;
	}

	system("pause");
	system("cls");		//清屏操作
}

//修改联系人
void modifyRerson(Addressbooks* abs) {
	cout << "请输入要修改的联系人" << endl;
	string name;
	cin >> name;

	int ret = isExist(abs, name);

	if (ret != -1) {
		//姓名
		string name;
		cout << "请输入姓名" << endl;
		cin >> name;
		abs->personArray[ret].m_Name = name;

		//年龄
		int age;
		cout << "请输入年龄" << endl;
		cin >> age;
		abs->personArray[ret].m_Age = age;

		//电话
		int phone;
		cout << "请输入电话" << endl;
		cin >> phone;
		abs->personArray[ret].m_Phone = phone;

		//住址
		string address;
		cout << "请输入住址" << endl;
		cin >> address;
		abs->personArray[ret].m_Addr = address;

		cout << "修改成功" << endl;
	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");		//清屏操作
}

//清空联系人
void cleanPerson(Addressbooks* abs) {
	abs->m_Size = 0;		//只需要将联系人数量置为0,做逻辑清空就可以了
	cout << "通讯录已清空"<< endl;
}

//菜单界面
void showMenu() {
	cout << "1. 添加联系人" << endl;
	cout << "2. 显示联系人" << endl;
	cout << "3. 删除联系人" << endl;
	cout << "4. 查找联系人" << endl;
	cout << "5. 修改联系人" << endl;
	cout << "6. 清空联系人" << endl;
	cout << "0. 退出通讯录" << endl;
}


int main() {

	//创建通讯录
	Addressbooks abs;
	//初始化通讯录当前人员个数
	abs.m_Size = 0;
	int select = 0;		//创建用户选择输入的变量

	while (true) {
		// 菜单界面
		showMenu();

		cin >> select;
		switch (select) {
		case 1:		//1. 添加联系人
			addPerson(&abs);	//利用地址传递修改实参
			break;
		case 2:		//2. 显示联系人
			showPerson(&abs);
			break;
		case 3:		//3. 删除联系人
		//{
		//	cout << "请输入删除联系人姓名:" << endl;
		//	string name;
		//	cin >> name;

		//	if (isExist(&abs, name) == -1) {
		//		cout << "查无此人" << endl;
		//	}
		//	else {
		//		cout << "找到此人" << endl;
		//	}
		//}
			deletePerson(&abs);
			break;
		case 4:		//4. 查找联系人
			findPersin(&abs);
			break;
		case 5:		//5. 修改联系人
			modifyRerson(&abs);
			break;
		case 6:		//6. 清空联系人
			cleanPerson(&abs);
			break;
		case 0:		//0. 退出通讯录
			cout << "欢迎下次使用" << endl;
			system("pause");
			return 0;
			break;
		defult:
			break;
		}
	}

	system("pause");
	return 0;
}

标签:课程设计,cout,ret,name,abs,通讯录,personArray,Size,线性表
From: https://blog.csdn.net/2301_78402165/article/details/136987074

相关文章

  • 线性表的单链表
    目录1>.单链表的定义和表示2>.单链表基本操作1.初始化2.取值3.查找4.插入5.删除1>.单链表的定义和表示1.基本概念特点:用一组任意的存储单元存储线性表的数据元素(存储单元可以连续,也可以不连续)。对数据元素ai,存储本身的信息和一个指示直接后继的存储位置,这两部分信......
  • 通讯录
    test.cdefine_CRT_SECURE_NO_WARNINGSinclude"contact.h"voidmenu(){printf("\n");printf("1.add2.del\n");printf("3.seach4.modify\n");printf("5.show6.sort\n");printf(&qu......
  • 线性表的12 种基本操作
    #include<stdio.h>#include<stdlib.h>#defineTRUE 1#defineFALSE0#defineOK  1#defineERROR0#defineLIST_INIT_SIZE100#defineLISTINCREMENT 10#defineINFEASIBLE-1#defineOVERFLOW -2typedefintElemType;typedefstruct{   E......
  • 课程设计——基于matlab语言的PCA人脸识别系统的设计与实现,采用GUI界面进行效果演示
    本论文源码是基于Matlab实现的PCA算法来进行人脸图片的识别与比对,通过GUI界面进行效果展示,适合基于matlab、人脸识别等人工智能领域的课程设计和毕设,整个算法结构简单、易于理解,如需完整源码,可以联系博主获取。一、引言人脸识别技术作为计算机视觉领域的一个重要分支,因其......
  • 通讯录实现!(基于顺序表的项目)
    一.通讯录实现要求c语言基础要求:结构体、动态内存管理、顺序表、文件操作二、通讯录功能能够保存用户信息、能够增加联系人、删除联系人、查找联系人、修改联系人信息、显示联系人信息三、通讯录实现通讯录实现90%是基于之前的顺序表的,所以想要实现通讯录可以先去看看我有......
  • 线性表章节课后习题答案集锦
    目录2.52.62.72.82.92.102.112.122.132.5/*要比较两个单词在字典中的顺序,可以逐个比较它们的字符。首先比较两个单词的第一个字符,如果相同,则继续比较下一个字符,直到找到不同的字符或者某个单词比较完毕。比较时,可以利用ASCII码进行比较,因为字母在ASCII码中是按顺......
  • 数据结构——循环链表,双向链表,线性表和有序表的合并详解
    目录1.循环链表1.带尾指针循环链表的合并 代码示例:2.双向链表代码示例:  1.双向链表的插入​代码示例:2.双向链表的删除代码示例:3.单链表,循环链表,双向链表时间效率的比较4.顺序表和链表的比较 5.存储密度6.线性表的应用 1.线性表的合并​代码示例:2.有序表......
  • 【算法】【线性表】【数组】从中序与后序遍历序列构造二叉树
    1 题目给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。示例1:输入:inorder=[9,3,15,20,7],postorder=[9,15,7,20,3]输出:[3,9,20,null,null,15,7]示例2:输入:inor......
  • 通讯录管理系统学习记录
    黑马C++通讯录管理系统案例学习记录,并添加课堂上讲的部分功能。1.系统需求系统中需要实现的功能如下:添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人显示联系人:显示通讯录中所有联系人信息删除联系人:按照姓名进行删除指定联系......
  • 洛谷题单指南-线性表-P2234 [HNOI2002] 营业额统计
    原题链接:https://www.luogu.com.cn/problem/P2234题意解读:要计算每一天最小波动值的和,需要对每一天求最小波动值,再求和,如果暴力法,时间复杂度在1+2+3+......+32767≈5*10^8,可能会超时。解题思路:1、暴力法:由于本题测试数据比较水,实测暴力求解直接可以AC,由于没有技术含量,不做具体......