C++基于easyX的员工管理界面

代码: 

#include "workerManager.h"
#include "manager.h"
#include "worker.h"
#include "technician.h"
#include <iostream>
#include <graphics.h>
#include <windows.h>
#include <conio.h>
#include <string.h>using namespace std;// 定义菜单按钮的宽度和高度
const int BUTTON_WIDTH = 200;
const int BUTTON_HEIGHT = 50;// 按钮个数,总的操作数再加上 1
#define operations 7// 定义按钮的坐标和状态
struct Button {int x, y; // 按钮的左上角坐标bool isHovered; // 是否被鼠标悬停
};// 清屏函数
void Clear_() {system("cls");
}// 多字节字符编码转宽字符编码函数
wchar_t* multiByteToWideChar(const string& pKey) {// 第一次调用确认转换后单字节字符串的长度,用于开辟空间int pSize = WideCharToMultiByte(CP_OEMCP, 0, pWCStrKey, wcslen(pWCStrKey), NULL, 0, NULL, NULL);wchar_t* pWCStrKey = new wchar_t[pSize + 1];// 第二次调用将双字节字符串转换成单字节字符串WideCharToMultiByte(CP_OEMCP, 0, pWCStrKey, wcslen(pWCStrKey), pWCStrKey, pSize, NULL, NULL);pWCStrKey[pSize] = '\0';return pWCStrKey;
}// 宽字符编码转多字节字符编码函数
char* wideCharToMultiByte(wchar_t* pWCStrKey) {// 第一次调用返回转换后的字符串长度,用于确认为 wchar_t* 开辟多大的内存空间int pSize = MultiByteToWideChar(CP_OEMCP, 0, pCStrKey, strlen(pCStrKey) + 1, NULL, 0);char* pCStrKey = new char[pSize + 1];// 第二次调用将单字节字符串转换成双字节字符串MultiByteToWideChar(CP_OEMCP, 0, pCStrKey, strlen(pCStrKey) + 1, pCStrKey, pSize);pCStrKey[pSize] = '\0';return pCStrKey;
}// 判断是否在按钮区域内
bool isInButtonArea(Button button, int x, int y) {return (x >= button.x && x <= button.x + BUTTON_WIDTH&& y >= button.y && y <= button.y + BUTTON_HEIGHT);
}// 绘制按钮
void drawButton(Button button, string str) {if (button.isHovered) {setfillcolor(WHITE);settextcolor(RGB(59, 90, 166));}else {setfillcolor(RGB(59, 90, 166));settextcolor(WHITE);}fillroundrect(button.x, button.y, button.x + BUTTON_WIDTH, button.y + BUTTON_HEIGHT, 10, 10);RECT r = { button.x, button.y, button.x + BUTTON_WIDTH, button.y - 1 + BUTTON_HEIGHT - 1 };setbkmode(TRANSPARENT);settextstyle(20, 0, _T("微软雅黑"), 0, 0, FW_BOLD, 0, 0, 0);drawtext(multiByteToWideChar(str), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}// 输出指定字符串到屏幕指定位置
void Show_str_to_PC(int x, int y, string str, int size) {setbkmode(TRANSPARENT);settextstyle(size, 0, _T("宋体"), 0, 0, FW_BOLD, 0, 0, 0);settextcolor(WHITE);outtextxy(x, y, multiByteToWideChar(str));
}int main() {// 初始化窗口initgraph(640, 660);setbkcolor(WHITE);// 载入背景图片IMAGE bg_image;loadimage(&bg_image, _T("cqcu.jpg"), 640, 660); // 加载背景图片// 绘制背景图putimage(0, 0, &bg_image);// 操作数组string texts[operations - 1] = { "显示所有员工信息\0", "修改员工信息\0", "录入员工信息\0", "删除员工信息\0", "查询员工信息\0", "退出员工系统\0" };// 用来指定显示范围的变量RECT r;// 创建按钮数组Button* buttons = new Button[operations - 1];// 初始化按钮for (int i = 0; i < operations - 1; i++) {buttons[i].isHovered = false;buttons[i].x = 220;buttons[i].y = 150 + i * 50;}// 绘制背景图putimage(0, 0, &bg_image);// 循环处理消息while (true) {// 绘制界面setbkmode(TRANSPARENT);settextstyle(45, 0, _T("宋体"), 0, 0, FW_BOLD, 0, 0, 0);settextcolor(BLACK);r = { 0, 60, 639, 120 };drawtext(_T("员工管理系统"), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);r = { 0, 100, 639, 160 };settextstyle(20, 0, _T("宋体"), 0, 0, FW_BOLD, 0, 0, 0);drawtext(_T("计算机与信息科学学院"), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);// 遍历画出按钮for (int i = 0; i < operations - 1; i++) {drawButton(buttons[i], texts[i]);}// 循环处理鼠标消息if (MouseHit()) {MOUSEMSG m = GetMouseMsg();switch (m.uMsg) {case WM_MOUSEMOVE:// 鼠标移动时判断是否在按钮区域内for (int i = 0; i < operations - 1; i++) {buttons[i].isHovered = isInButtonArea(buttons[i], m.x, m.y);}break;case WM_LBUTTONUP:// 左键抬起时判断是否在按钮区域内for (int i = 0; i < operations - 1; i++) {if (isInButtonArea(buttons[i], m.x, m.y)) {switch (i) {// 可以在各个 case 中添加对应的处理函数case 0:Clear_();cleardevice();// 清理屏幕cout << "显示所有员工信息" << endl;// 这里可以用对应的函数绘制二级界面break;case 1:Clear_();cleardevice();cout << "录入员工信息" << endl;break;case 2:Clear_();cleardevice();cout << "查询员工信息" << endl;break;case 3:Clear_();cleardevice();cout << "修改员工信息" << endl;break;case 4:Clear_();cleardevice();cout << "删除员工信息" << endl;break;case 5:Clear_();cleardevice();cout << "排序员工信息" << endl;break;case 6:Clear_();cleardevice();cout << "退出系统" << endl;break;}putimage(0, 0, &bg_image);// 重绘背景图}}}Sleep(10);// 刷新频率}closegraph();}return 0;
}

运行结果:

在贴图的位置可以自行更换背景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud入门教程

一、SpringCloud介绍 1.概念 Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用 spring boot 的开发风格做到…

使用 Bing 的 Chat 初体验

前言 下载好 Edge 浏览器&#xff0c;并且通过 ModHeader 插件的设置才能访问外边的功能完善的 edge &#xff0c;但是想要进行 chat 需要通过申请才行&#xff0c;网上很多教程我就不赘述了。 正文 我的申请刚刚通过&#xff0c;但是使用 Chat 的效果一般&#xff0c;感觉很…

对抗攻击论文阅读—AAAI2022—CMUA-Watermark

文章目录 CMUA-Watermark: A Cross-Model Universal Adversarial Watermark for Combating Deepfakes背景1、什么是对抗攻击1.1 主动防御与被动防御 2、整体思路3、方法3.1 整体流程3.2 如何破坏单个面部修改模型 G G G论文中代码 3.3 对抗扰动融合3.4 基于TPE的自动步长调整 4…

台灯学生用哪个牌子最好?学生台灯十大名牌排行榜分享

近年来&#xff0c;我们注意到儿童近视的现象呈现出增多且趋于低龄化的趋势。这一变化&#xff0c;部分原因可以归咎于孩子们越来越多地使用电子产品&#xff0c;另一部分则与他们面临的学业压力增加有关。鉴于此&#xff0c;家长们在挑选儿童学习用品时变得格外谨慎&#xff0…

Qt系统相关

本文目录 1.Qt事件事件的处理标签事件鼠标事件滚轮事件按键事件定时器事件窗口事件事件派发器 2.Qt文件操作QFile的基本使用 3.Qt多线程使用线程线程锁connect的第五个参数 条件变量和信号量 4.Qt网络编程UDP SocketTCP SocketQTcpServerQTcpSocket HTTP的编写 5.QT多媒体播放音…

【CTF MISC】XCTF GFSJ0766 something_in_image Writeup(字符串搜索)

something_in_image 暂无 解法 用 binwalk 扫描。 binwalk badimages 找到一个 ext3 文件系统。 strings badimages | grep {*}找到 flag。 Flag Flag{yc4pl0fvjs2k1t7T}声明 本博客上发布的所有关于网络攻防技术的文章&#xff0c;仅用于教育和研究目的。所有涉及到的实验…

收音机的原理笔记

1. 收音机原理 有线广播&#xff1a;我们听到的声音是通过空气振动进行传播&#xff0c;因此可以通过麦克风&#xff08;话筒&#xff09;将这种机械振动转换为电信号&#xff0c;传到远处&#xff0c;再重新通过扬声器&#xff08;喇叭&#xff09;转换为机械振动&#xff0c…

打造精细化运维新玩法(四)

二、SLO健康度——从0到1构建SLO 和大多互联网企业一样&#xff0c;蚂蚁的基础设施侧存在众多的异构系统&#xff0c;被上层的业务应用和服务所依赖。考虑到不同系统的技术栈、架构、部署等因素&#xff0c;我们需要找到一种通用的、泛化性强的数字化方案指导和构建基础设施域内…

智能楼宇可视化:赋能智慧园区管理

图扑智慧园区楼宇可视化系统&#xff0c;集成多种数据源&#xff0c;实现全方位监控与管理&#xff0c;提升园区的资源利用率和用户满意度&#xff0c;推动智能化管理进程。

电线电缆单根燃烧试验 电缆垂直燃烧试验

电线电缆单根燃烧试验 电线电缆单根燃烧试验是一种用来评估电线电缆在受到火焰作用时的燃烧性能的测试方法。这种试验通常是将电线电缆垂直固定&#xff0c;然后使用特定的火焰源对其进行燃烧&#xff0c;以观察电线电缆的燃烧行为和燃烧速度。通过这个试验&#xff0c;可以评估…

护眼台灯哪个品牌好?几款性价比最高的护眼台灯推荐

在过去&#xff0c;科技尚未发展至如今这般先进水平时&#xff0c;晚上需要照明的时候&#xff0c;我们通常只能依赖白炽灯。尽管白炽灯以其低成本和接近自然光的显色性获得了一定的青睐&#xff0c;随着时代的发展&#xff0c;现在市面上出现了更为护眼的选择——LED台灯。然而…

一文介绍暗区突围手游 游戏特色、具体玩法和独特的玩法体验

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 《暗区突围》是一款由腾讯魔方工作室群开发的第一人称射击游戏&#xff0c;于 2022 年 7 月 13 日正式公测&#xff0c;支持 Android 和 iOS 平台。这款游戏以从虚构的暗区收集物资并安全撤离作为最终目…

OpenGauss数据库-7.用户及角色

第1关&#xff1a;创建用户 gsql -d postgres -U gaussdb -W passwd123123 CREATE USER jackson WITH PASSWORD jackson123; 第2关&#xff1a;修改用户 gsql -d postgres -U gaussdb -W passwd123123 ALTER USER jackson WITH PASSWORD Abcd123; 第3关&#xff1a;创建角色 …

【JVM】JVM 的内存区域

Java虚拟机&#xff08;JVM&#xff09;在执行Java程序时&#xff0c;将其运行时数据划分到若干不同的内存区域。这些内存区域的管理对Java应用程序的性能和稳定性有着重要影响。JVM的内存区域主要包括以下几部分&#xff1a; 方法区&#xff08;Method Area&#xff09;&#…

Qt实现简易播放器

效果如图 源码地址&#xff1a; 简易播放器: 基于Qt的简易播放器&#xff0c;底层采用VLC源码 - Gitee.com GitHub:GitHub - a-mo-xi-wei/easy-player: 基于Qt的调用VLC的API的简易播放器

QQ音乐绿钻API接口:解锁更多音乐可能性

在我们日常生活中&#xff0c;音乐是不可或缺的一部分。无论是在上班途中&#xff0c;还是在健身房锻炼时&#xff0c;我们都可以通过听音乐来放松自己。然而&#xff0c;在现如今的音乐市场中&#xff0c;有时候我们会觉得收听的歌曲有限&#xff0c;想要尝试更多不同的音乐类…

《大道平渊》· 拾贰 —— 天下大事必作于细:做好每一件小事,必然大有所成!

《平渊》 拾贰 "天下难事必作于易&#xff0c;天下大事必作于细。" 社群一位大佬最近在研究新项目, 他做事的 "方法论" 令我深受启发。 他在测试项目时, 每一步都做的非常细致&#xff1a; 整个项目的测试都被划分为一件件小事, 然后有条不紊地推进…… …

代码随想录刷题笔记-哈希表篇

文章目录 242 有效的字母异位词(easy)力扣地址题目描述题目实例解题思路代码实现 383 赎金信(easy)力扣地址题目描述题目实例解题思路代码实现 49 字母异位词分组(mid)力扣地址题目描述题目实例解题思路代码实现 438 找到字符串中所有字母异位词(mid)力扣地址题目描述题目实例解…

免费插件集-illustrator插件-Ai插件-文本属性批处理

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;进行文本属性批处理。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/87890501&am…

16个免费学习Python的网站和教程(2024年最新资源)

16个免费学习Python的网站和教程&#xff08;2024年最新资源&#xff09; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff…