(Easyx联合c++的通讯录系统)续

目录

一.前言

二.改进

三.题外话

四.完整代码


一.前言

忙完了考试周,才有闲情雅致写这篇博客-……-

(20条消息) 可视化图形界面编程(Easyx联合c++的通讯录系统)_Hzq958的博客-优快云博客_c++可视化界面编程

二.改进

1、总体的架构的更新

还记得上次我们的数据属性保存在一个叫person的类里面吗?

class person {//联系人的的基本信息数据
public:
	char name[15];
	char sex[5];
	char number[20];
	char diqu[15];
};

从程序实现到正常的使用来看,这样确实没有什么问题。但是从C++的类的设计初心来看,这样的设定确实是不太合理的,数据变量不应放在public里,这样破坏了数据的私密性以及没有应用到类的“封装”。所以我就把person类做了一个调整,那就是把数据通通设置成private,然后定义几个接口来实现对应的调用。

然后我们又回到上次讨论的一个问题,easyx的文本,弹窗函数等都只能支持char*,所以我上次就把所有的string都改成char*,但是我现在因为要写几个接口来调用私有数据,你如果私有数据是char*,那么你的接口来起来会特别的繁琐,所以我这次就把char*又改回起初的string,那么这样string类型的接口写起来就特别的方便(直接 = 就完事了)

//联系人的的基本信息数据
class person {
private:
	string name;
	string sex;
	string number;
	string diqu;

public:

	person() {
	
	}
	person(string a, string b, string c, string d) {
		name = a;
		sex = b;
		number = c;
		diqu = d;
	}

	string getName() {
		return name;
	}

	string getSex() {
		return sex;
	}

	string getNumber() {
		return number;
	}

	string getDiqu() {
		return diqu;
	}

	void setName(string n) {
		name = n;
	}

	void setSex(string n) {
		sex = n;
	}

	void setNumber(string n) {
		number = n;
	}

	void setDiqu(string n) {
		diqu = n;
	}

};

但是怎么解决easyx的文本,弹窗函数等都只能支持char*这个问题呢?

这是在我课程老师的指点之下,我使用了string内部提供的强制转换为char* 的功能——(char*)string.data()   可以把 string 转换为 char *。如此一来,这个系统的框架看起来就会更加严谨了。

cout << it->getName() << "  " << it->getSex() << "     " << it->getNumber() << "    " << it->getDiqu() << endl;
				outtextxy(i, j, (char*)(it->getName()).data());
				outtextxy(i + 70, j, (char*)(it->getSex()).data());
				outtextxy(i + 130, j, (char*)(it->getNumber()).data());
				outtextxy(i + 250, j, (char*)(it->getDiqu()).data());

2、Show(显示联系人)的更新

上次的可视化通讯录的Show功能虽然可以正常的显示出联系人的信息,但是细心的博友会发现一个很大问题——就是只能显示出一页的内容(大概15行的数据),这对于我们真正的使用来说是一个严重的缺陷,所以就涉及到我们要实现一个可以翻页,进而显示出更多的数据的功能,这个想法早在我设计可视化通讯录的时候就有了,但是迟迟没有实现出来。

然后我此次也花费了心思在这个翻页设计上面了。

我另外新建了一个项目,反复的测试,也终于总结出了页面跳转的两个逻辑——函数的return和while循环里面的break;好像在easyx的页面跳转里,有且仅有这两个操作了。

把数据分两页存放,这个是很简单的,只需要两个遍历,再在遍历里设定if(>15)语句。

核心的点在于,你进去第二个页面之后,要有可以返回上一页的按钮以及返回主菜单的按钮,这里就涉及到要有两个while循环,一个是在进入Show功能后自动输入第一页的循环,在这个循环里面要有两个按钮,下一页和返回主菜单,其中进去下一页的按钮之后,又要进入另外一个while循环,包含两个按钮,返回主菜单(return),上一页(break)。

ostream& operator <<(ostream& cout, Txl_systeam& x) {//重载<<运算符
	mytextwin();
	settextcolor(RGB(0, 119, 220));
	while (1) {
		int flag = 0;//记录输出多少个联系人
		int i = 10, j = 50;
		//第一页联系人
		for (vector<person>::iterator it = x.People.begin(); it != x.People.end(); it++)
		{
			flag++;
			if (flag <= 15) {
				cout << it->getName() << "  " << it->getSex() << "     " << it->getNumber() << "    " << it->getDiqu() << endl;
				outtextxy(i, j, (char*)(it->getName()).data());
				outtextxy(i + 70, j, (char*)(it->getSex()).data());
				outtextxy(i + 130, j, (char*)(it->getNumber()).data());
				outtextxy(i + 250, j, (char*)(it->getDiqu()).data());
				j = j + 30;
			}
		}
		while (1) {//输出完第一页之后就进入此循环
			MOUSEMSG mm = GetMouseMsg();

			//下一页的 触发——
			if (mm.uMsg == WM_LBUTTONDOWN && mm.y > 520 && mm.y < 560 && mm.x>220 && mm.x < 280) {
				mytextwin();
				settextcolor(RGB(74, 0, 149));
				flag = 0;
				int i = 10, j = 50;
				for (vector<person>::iterator it = x.People.begin(); it != x.People.end(); it++)//第二页联系人
				{
					flag++;
					if (flag > 15) {
						//cout << (*it).name << "  " << (*it).sex << "     " << (*it).number << "    " << (*it).diqu << endl;
						cout << it->getName() << "  " << it->getSex() << "     " << it->getNumber() << "    " << it->getDiqu() << endl;
						outtextxy(i, j, (char*)(it->getName()).data());
						outtextxy(i + 70, j, (char*)(it->getSex()).data());
						outtextxy(i + 130, j, (char*)(it->getNumber()).data());
						outtextxy(i + 250, j, (char*)(it->getDiqu()).data());
						j = j + 30;

					}
				}
			}

			//上一页的触发
			if (mm.uMsg == WM_LBUTTONDOWN && mm.y > 520 && mm.y < 560 && mm.x>120 && mm.x < 175) {
				mytextwin();
				settextcolor(RGB(0, 119, 220));
				break;
			}
			//返回主界面的 ‘按钮’
			if (mm.uMsg == WM_LBUTTONDOWN && mm.y > 595 && mm.y < 650 && mm.x>170 && mm.x < 250) {
				return cout;
			}
		}
	}
}

3、新功能的更新

到了这里,我又给主菜单多加了一个功能——格式化通讯录数据(至于为啥会突然想到多加一个功能,可能是我觉得单纯的增删查改有点过于单调了吧)。

站在用户的角度来想,我不大可能会用到这个功能,但是这个功能应该要有,并且这个功能的使用理应要验证一下是否是用户本人,这样会更加合理。所以我的设定就是在第一次点击这个功能的时候,要用户自己设定一个权限密码,这个密码设置好之后,会保存在某个文件里面,当有人下一次使用这个功能的时候,就需要输入密码,输入的密码会和当初设置的权限密码去匹配,密码正确两次才可以完成格式化。(格式化即清空所有的联系人数据)

void deletedata() {//格式化通讯录数据
		char myprivate[20];
		ifstream du("权限密码.txt", ios::in | ios::binary);//只读
		if (du.is_open()) {//打开成功的话
			du >> myprivate; //读取行字符串,直到读到空就停止
			du.close();
		}
		else {//打开失败的话
			MessageBox(NULL, "当前未设置权限密码,请输入权限密码", "Tip", MB_SYSTEMMODAL);
			ofstream xie("权限密码.txt", ios::out | ios::binary);//只写
			InputBox(myprivate, 20, "请设置您的通讯录管理权限密码", NULL, "不多于20个字符", 0, 0, true);
			xie << myprivate;
			MessageBox(NULL, "权限密码设置成功", "OK", MB_SYSTEMMODAL);
			xie.close();
			return;
		}
		char in1[20];
		MessageBox(NULL, "格式化之后无法恢复哦!", "警告!", MB_SYSTEMMODAL);
		InputBox(in1, 20, "请输入您的通讯录管理权限密码", NULL, NULL, 0, 0, false);
		if (strcmp(in1, myprivate) == 0) {
			char in2[20];
			InputBox(in2, 20, "请再次输入密码进行最后的确定", NULL, NULL, 0, 0, true); {
				if (strcmp(in2, myprivate) == 0) {
					People.clear();

					MessageBox(NULL, "格式化成功", "提示", MB_SYSTEMMODAL);
					return;
				}
				else {
					MessageBox(NULL, "密码错误!", "False", MB_SYSTEMMODAL);
					return;
				}
			}
		}
		else {
			MessageBox(NULL, "密码错误!", "False", MB_SYSTEMMODAL);
			return;
		}

	}

4、查找功能的更新

其实主要就是修改了显示出该联系人信息的方式,上一版是查找成功后连续弹出四个窗口,显示该联系人的四项信息,这次的话我就把四项信息整合到一个变量里面,一次弹窗输出。

除此之外,我多设定了一步查找完之后询问用户是否修改的操作·······~~~~~(这个也没啥好说的)我们看代码就好吧。

bool Find() { //查找指定联系人信息
		char z[200];
		//string z;
		InputBox(z, 200, "请输入要查找的联系人姓名", NULL, NULL, 0, 0, false);
		vector<person>::iterator it = People.begin();
		for (; it != People.end(); )
		{
			// if ( mystrcmp(z, (*it).name) == 1 ) {
			if (z == it->getName()) {
				string data;//整合四个 char[] 到一个 char[]里
				data += "姓名:";
				data += it->getName();
				data += "\n";
				data += "性别:";
				data += it->getSex();
				data += "\n";
				data += "号码:";
				data += it->getNumber();
				data += "\n";
				data += "地区:";
				data += it->getDiqu();

				MessageBox(NULL, (char*)data.data(), "详细信息为", MB_SYSTEMMODAL);
				if (MessageBox(NULL, (char*)data.data(), "是否修改此联系人信息", MB_YESNO) == IDYES) {
					Updata(z);
				}

				return true;
			}
			else {
				++it;
			}
		}
		MessageBox(NULL, "无此联系人", "错误!", MB_SYSTEMMODAL);
		return false;
	}

三.题外话

上次发布之后断断续续有几个哥们来问我为啥我的代码在他那边运行不了(前段也是我们学校的考试周,所以没有给予一一回复),其实关于这个问题csdn有很多回答的,这里的话我就简要的说明一下,首先我推荐你是使用visual studio系列编译器(vs2019,2022什么的都可以),然后去easyx的官网下载easyx的图形库,你下载安装完之后,就可以看到系统弹窗说是否嵌入到vs里面,你点击确定然后就彻底安装成功了。进去vs之后,你要更改一个属性,点击工具栏的项目->xxx属性->高级->字符集->改为使用多字节字符集。这样就OK了。

四.完整代码

#include<iostream>
#include<string>
#include<fstream>
#include<vector>

#include<graphics.h>//easyx库头文件

using namespace std;

//主菜单界面
void mymainmeau() {

	//closegraph();

	IMAGE photo;//定义图片变量
	loadimage(&photo, "通讯录主界面4.jpg", 400, 650);//导入图片
	putimage(0, 0, &photo);//把图片贴出来
}

//副界面的界面 以及文字格式
void mytextwin() {
	//initgraph(400, 650);
	IMAGE photo;
	loadimage(&photo, "展示联系人.jpg", 400, 650);
	putimage(0, 0, &photo);
	//cleardevice();

	settextstyle(20, 0, "宋体"); settextcolor(BLACK); setbkmode(TRANSPARENT); //设置文字的大小,形式,颜色,透明

	outtextxy(8, 8, "|姓名||性别| |电话号码|  |地区|   ");//输出文字到窗口   outtextxy(坐标,字符串)

	settextstyle(20, 0, "楷体");
}



//联系人的的基本信息数据
class person {
private:
	string name;
	string sex;
	string number;
	string diqu;

public:

	person() {
	
	}
	person(string a, string b, string c, string d) {
		name = a;
		sex = b;
		number = c;
		diqu = d;
	}

	string getName() {
		return name;
	}

	string getSex() {
		return sex;
	}

	string getNumber() {
		return number;
	}

	string getDiqu() {
		return diqu;
	}

	void setName(string n) {
		name = n;
	}

	void setSex(string n) {
		sex = n;
	}

	void setNumber(string n) {
		number = n;
	}

	void setDiqu(string n) {
		diqu = n;
	}

};

//通讯录系统
class Txl_systeam {
private:
	vector<person> People;//用vector容器来存储数据

public:
	Txl_systeam() {
		MessageBox(NULL, "“右击”任意区域可保存通讯录", "TIP", MB_SYSTEMMODAL);
		//读取文件操作
		ifstream du("通讯录数据.txt", ios::in);//只读
		if (du.is_open()) {// 打开成功的话
			string name_;
			string sex_;
			string number_;
			string diqu_;

			while (du >> name_ >> sex_ >> number_ >> diqu_) { //依次读取每一行的四个字符串,直到读到空就停止
				person temp_(name_, sex_, number_, diqu_);

				People.push_back(temp_); //传入容器 People

			}
			du.close();
		}
		else {
			MessageBox(NULL, "当前通讯录数据为空,请添加联系人", "Tip", MB_SYSTEMMODAL);
		}
	}

	void SaveTxl_systeam() {//保存数据
		ofstream xie("通讯录数据.txt", ios::out);//只写

		vector<person>::iterator it = People.begin();
		for (; it != People.end(); it++) //vector 的遍历方法,用迭代器
		{
			xie << it->getName() << "  " << it->getSex() << "     " << it->getNumber() << "    " << it->getDiqu() << endl;
		}
		xie.close();
		MessageBox(NULL, "保存成功!", "TIP", MB_SYSTEMMODAL);

	}

	bool Delete() { //删除指定联系人
		char z[20];
		InputBox(z, 20, "请输入要删除的联系人姓名", NULL, NULL, 0, 0, false);

		for (vector<person>::iterator it = People.begin(); it != People.end(); )
		{
			// if ( mystrcmp(z, (*it).name) == 1 ) {
			if (z == it->getName()) {
				if (MessageBox(NULL, "再次确定是否删除此联系人信息", "匹配成功", MB_YESNO) == IDYES) {
					it = People.erase(it);
					MessageBox(NULL, "删除成功", "OK", MB_TASKMODAL);
					MessageBox(NULL, "右击任意区域可保存通讯录", "TIP", MB_SYSTEMMODAL);
					return true;
				}
				else return true;
			}
			else {
				++it;
			}
		}
		MessageBox(NULL, "无此联系人", "错误!", MB_SYSTEMMODAL);
		return false;
	}

	bool Find() { //查找指定联系人信息
		char z[200];
		//string z;
		InputBox(z, 200, "请输入要查找的联系人姓名", NULL, NULL, 0, 0, false);
		vector<person>::iterator it = People.begin();
		for (; it != People.end(); )
		{
			// if ( mystrcmp(z, (*it).name) == 1 ) {
			if (z == it->getName()) {
				string data;//整合四个 char[] 到一个 char[]里
				data += "姓名:";
				data += it->getName();
				data += "\n";
				data += "性别:";
				data += it->getSex();
				data += "\n";
				data += "号码:";
				data += it->getNumber();
				data += "\n";
				data += "地区:";
				data += it->getDiqu();

				MessageBox(NULL, (char*)data.data(), "详细信息为", MB_SYSTEMMODAL);
				if (MessageBox(NULL, (char*)data.data(), "是否修改此联系人信息", MB_YESNO) == IDYES) {
					Updata(z);
				}

				return true;
			}
			else {
				++it;
			}
		}
		MessageBox(NULL, "无此联系人", "错误!", MB_SYSTEMMODAL);
		return false;
	}

	bool Updata(char ming[]) {//更新指定联系人信息

		for (vector<person>::iterator it = People.begin(); it != People.end(); )
		{
			if (ming == it->getName()) {
				char name_[20], sex_[5], number_[20], diqu_[10];
				InputBox(name_, 20, "请重新输入联系人姓名", NULL, NULL, 0, 0, true);
				InputBox(sex_, 20, "请重新输入联系人性别", NULL, NULL, 0, 0, true);
				InputBox(number_, 20, "请重新输入联系人号码", NULL, NULL, 0, 0, true);
				InputBox(diqu_, 20, "请重新输入联系人地区", NULL, NULL, 0, 0, true);
				if (strlen(name_) == 0 || strlen(sex_) == 0 || strlen(number_) == 0 || strlen(diqu_) == 0) {
					MessageBox(NULL, "错误的空输入", "False", MB_SYSTEMMODAL);
					return false;
				}

				it->setName(name_);
				it->setSex(sex_);
				it->setNumber(number_);
				it->setDiqu(diqu_);

				MessageBox(NULL, "修改成功", "OK", MB_SYSTEMMODAL);
				return true;
			}
			else {
				++it;
			}
		}
		MessageBox(NULL, "无此联系人", "错误!", MB_SYSTEMMODAL);
		return false;
	}

	void deletedata() {//格式化通讯录数据
		char myprivate[20];
		ifstream du("权限密码.txt", ios::in | ios::binary);//只读
		if (du.is_open()) {//打开成功的话
			du >> myprivate; //读取行字符串,直到读到空就停止
			du.close();
		}
		else {//打开失败的话
			MessageBox(NULL, "当前未设置权限密码,请输入权限密码", "Tip", MB_SYSTEMMODAL);
			ofstream xie("权限密码.txt", ios::out | ios::binary);//只写
			InputBox(myprivate, 20, "请设置您的通讯录管理权限密码", NULL, "不多于20个字符", 0, 0, true);
			xie << myprivate;
			MessageBox(NULL, "权限密码设置成功", "OK", MB_SYSTEMMODAL);
			xie.close();
			return;
		}
		char in1[20];
		MessageBox(NULL, "格式化之后无法恢复哦!", "警告!", MB_SYSTEMMODAL);
		InputBox(in1, 20, "请输入您的通讯录管理权限密码", NULL, NULL, 0, 0, false);
		if (strcmp(in1, myprivate) == 0) {
			char in2[20];
			InputBox(in2, 20, "请再次输入密码进行最后的确定", NULL, NULL, 0, 0, true); {
				if (strcmp(in2, myprivate) == 0) {
					People.clear();

					MessageBox(NULL, "格式化成功", "提示", MB_SYSTEMMODAL);
					return;
				}
				else {
					MessageBox(NULL, "密码错误!", "False", MB_SYSTEMMODAL);
					return;
				}
			}
		}
		else {
			MessageBox(NULL, "密码错误!", "False", MB_SYSTEMMODAL);
			return;
		}

	}

	friend ostream& operator <<(ostream& cout, Txl_systeam& x);
	friend istream& operator >>(istream& cout, Txl_systeam& x);
};

istream& operator >>(istream& cin, Txl_systeam& x) {
	if (x.People.size() == 30) {
		MessageBox(NULL, "通讯录已经满了!", "False ", MB_SYSTEMMODAL);
		return cin;
	}

	char name_[20], sex_[5], number_[20], diqu_[10];
	InputBox(name_, 20, "请输入联系人姓名", NULL, NULL, 0, 0, true);// EaxyX的 InputBox()函数 弹出一个窗口来用于获取用户的输入
	InputBox(sex_, 5, "请输入联系人性别", NULL, NULL, 0, 0, true);//InputBox(字符串,最大字符长度,标题,窗口标题,编辑框提示串,弹窗的宽度,高度,确定的形式【true,false】)
	InputBox(number_, 20, "请输入联系人号码", NULL, NULL, 0, 0, true);

	for (vector<person>::iterator it = x.People.begin(); it != x.People.end(); )//判断是否通讯录中已经有重复的号码
	{
		if (number_ == it->getNumber()) {
			MessageBox(NULL, "通讯录中已经有该号码!!", "False Input", MB_SYSTEMMODAL);
			return cin;
		}
		else {
			++it;
		}
	}

	InputBox(diqu_, 20, "请输入联系人地区", NULL, NULL, 0, 0, true);
	if (strlen(name_) == 0 || strlen(sex_) == 0 || strlen(number_) == 0 || strlen(diqu_) == 0) {//提高程序的健壮性——1.输入空串
		MessageBox(NULL, "错误的空输入", "False", MB_SYSTEMMODAL);//EasyX 的MessageBox()函数 弹出一个窗口用于提醒用户
		return cin;                                           // MessageBox(窗口的变量,正文字符串,标题字符串,弹出的形式【 MB_APPLMODA,MB_SYSTEMMODAL, MB_TASKMODAL】)
	}

	person temp_(name_, sex_, number_, diqu_);
	x.People.push_back(temp_);
	MessageBox(NULL, "添加成功", "OK", MB_SYSTEMMODAL);
	MessageBox(NULL, "右击任意区域可保存通讯录", "TIP", MB_SYSTEMMODAL);

	return cin;
}

ostream& operator <<(ostream& cout, Txl_systeam& x) {//重载<<运算符
	mytextwin();
	settextcolor(RGB(0, 119, 220));
	while (1) {
		int flag = 0;//记录输出多少个联系人
		int i = 10, j = 50;
		//第一页联系人
		for (vector<person>::iterator it = x.People.begin(); it != x.People.end(); it++)
		{
			flag++;
			if (flag <= 15) {
				cout << it->getName() << "  " << it->getSex() << "     " << it->getNumber() << "    " << it->getDiqu() << endl;
				outtextxy(i, j, (char*)(it->getName()).data());
				outtextxy(i + 70, j, (char*)(it->getSex()).data());
				outtextxy(i + 130, j, (char*)(it->getNumber()).data());
				outtextxy(i + 250, j, (char*)(it->getDiqu()).data());
				j = j + 30;
			}
		}
		while (1) {//输出完第一页之后就进入此循环
			MOUSEMSG mm = GetMouseMsg();

			//下一页的 触发——
			if (mm.uMsg == WM_LBUTTONDOWN && mm.y > 520 && mm.y < 560 && mm.x>220 && mm.x < 280) {
				mytextwin();
				settextcolor(RGB(74, 0, 149));
				flag = 0;
				int i = 10, j = 50;
				for (vector<person>::iterator it = x.People.begin(); it != x.People.end(); it++)//第二页联系人
				{
					flag++;
					if (flag > 15) {
						//cout << (*it).name << "  " << (*it).sex << "     " << (*it).number << "    " << (*it).diqu << endl;
						cout << it->getName() << "  " << it->getSex() << "     " << it->getNumber() << "    " << it->getDiqu() << endl;
						outtextxy(i, j, (char*)(it->getName()).data());
						outtextxy(i + 70, j, (char*)(it->getSex()).data());
						outtextxy(i + 130, j, (char*)(it->getNumber()).data());
						outtextxy(i + 250, j, (char*)(it->getDiqu()).data());
						j = j + 30;

					}
				}
			}

			//上一页的触发
			if (mm.uMsg == WM_LBUTTONDOWN && mm.y > 520 && mm.y < 560 && mm.x>120 && mm.x < 175) {
				mytextwin();
				settextcolor(RGB(0, 119, 220));
				break;
			}
			//返回主界面的 ‘按钮’
			if (mm.uMsg == WM_LBUTTONDOWN && mm.y > 595 && mm.y < 650 && mm.x>170 && mm.x < 250) {
				return cout;
			}
		}
	}
}

int main() {
	initgraph(400, 650);//画一个宽400,高650的窗口
	mymainmeau();

	Txl_systeam user;

	while (1) {//进入无限循环,不然这个界面点击一次就失效了

		MOUSEMSG m = GetMouseMsg();//定义鼠标变量
		switch (m.uMsg) {//分配鼠标的消息————比如  鼠标移动,左击,右击,左双击,右双击等等
		case WM_LBUTTONDOWN: {//左击鼠标操作
			if (m.x > 0 && m.x < 100 && m.y>0 && m.y < 100) {//  SHOW  的坐标位置
				cout << user;
				//closegraph();
				mymainmeau();
				break;
			}
			if (m.x > 325 && m.x < 400 && m.y>100 && m.y < 175) {//  +  的位置
				cin >> user;
				break;
			}
			if (m.x > 325 && m.x < 400 && m.y>230 && m.y < 290) {//  - 的位置
				user.Delete();
				break;
			}
			if (m.x > 325 && m.x < 400 && m.y>330 && m.y < 400) {//  chazhao 的位置
				user.Find();
				break;
			}
			if (m.x > 325 && m.x < 400 && m.y>450 && m.y < 515) {//  xiugai  的位置
				char ming[20];
				InputBox(ming, 20, "请输入要修改的联系人姓名", NULL, NULL, 0, 0, false);
				user.Updata(ming);

				break;
			}
			if (m.x > 320 && m.x < 400 && m.y>630 && m.y < 650) {//  xiugai  的位置
				user.deletedata();
				break;
			}
		}
		case WM_MOUSEMOVE: {//鼠标移动操作                    制造鼠标停留在按钮上会有提示文字的效果,鼠标移开,文字效果消失
			settextstyle(15, 0, "宋体");
			setbkmode(TRANSPARENT);
			if (m.x > 0 && m.x < 100 && m.y>0 && m.y < 100) {//  SHOW  的位置
				settextcolor(BLACK);
				outtextxy(100, 50, "显示所有联系人");
			}
			else {//如果 离开 SHOW 的位置
				settextcolor(WHITE);
				outtextxy(100, 50, "显示所有联系人");
			}
			if (m.x > 325 && m.x < 400 && m.y>100 && m.y < 175) {//  +  的位置
				settextcolor(BLACK);
				outtextxy(240, 150, "添加联系人");

			}
			else {
				settextcolor(WHITE);
				outtextxy(240, 150, "添加联系人");
			}
			if (m.x > 325 && m.x < 400 && m.y>230 && m.y < 290) {//  - 的位置
				settextcolor(BLACK);
				outtextxy(240, 260, "删除联系人");
			}
			else {
				settextcolor(WHITE);
				outtextxy(240, 260, "删除联系人");
			}
			if (m.x > 325 && m.x < 400 && m.y>330 && m.y < 400) {//  chazhao 的位置
				settextcolor(BLACK);
				outtextxy(240, 368, "查找联系人");
			}
			else {
				settextcolor(WHITE);
				outtextxy(240, 368, "查找联系人");
			}
			if (m.x > 325 && m.x < 400 && m.y>450 && m.y < 515) {//  xiugai  的位置
				settextcolor(BLACK);
				outtextxy(240, 480, "修改联系人");
			}
			else {
				settextcolor(WHITE);
				outtextxy(240, 480, "修改联系人");
			}
			if (m.x > 325 && m.x < 400 && m.y>620 && m.y < 650) {//  格式化  的位置
				settextcolor(BLACK);
				outtextxy(275, 590, "格式化通讯录数据");
			}
			else {
				settextcolor(WHITE);
				outtextxy(275, 590, "格式化通讯录数据");
			}
			break;
		}
		case WM_RBUTTONUP: {//右击鼠标保存
			if (m.x > 0 && m.x < 400 && m.y>0 && m.y < 650) {
				user.SaveTxl_systeam();
			}
		}
		}
	}
	system("pause");
	return 0;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值