C语言-超市管理系统(一)

演示

在这里插入图片描述在这里插入图片描述

代码:

manageSystem.h头文件:

#pragma once
#include<stdio.h>
#include<string>
#include<stdlib.h>
#include<Windows.h>
#include<time.h>
#include<process.h>
#include<graphics.h>

class manageSystem//管理系统类
{
public:
	void startInterface();//程序开始的界面
	int button_judge(int x,int y);//按钮判断,当鼠标移动到按钮上时,发生颜色变化
	int layer = 1;//图层(刚开始是为第一层)
};


manageSystem.cpp部分:

#include "manageSystem.h"
#include "superMarket.h"

#define WIDTH 1000        //画布宽度
#define HEIGHT 600       //画布高度

//贴图
IMAGE bk1,bk2;

//圆角矩形
int drawroundrect[2][6] =
{ {WIDTH / 6 - 80, 3 * HEIGHT / 4 - 100, WIDTH / 6 + 70, 3 * HEIGHT / 4 - 20, 40, 40},
	{WIDTH / 6 - 80, 3 * HEIGHT / 4 + 20, WIDTH / 6 + 70, 3 * HEIGHT / 4 + 100, 40, 40}
};

//程序开始看到的界面
void manageSystem::startInterface()
{
	int event = 0;//用来记录按钮(第一层的按钮)
	RECT rect1,rect2,rect3,rect4,rect5;//定义矩形
	ExMessage m;//定义消息
	manageSystem layer;
	setbkcolor(RGB(200,200,255));//设置背景颜色为浅蓝色(R和G值相近,B值越大颜色越浅)
	cleardevice();//刷屏,将蓝色刷到画布之上
	setfillcolor(WHITE);//设置“开始”字样的矩形框背景颜色
	//画无边框的填充圆角矩形
	solidroundrect(WIDTH / 6 - 80, 3 * HEIGHT / 4 - 100, WIDTH / 6 + 70, 3 * HEIGHT / 4 - 20, 40, 40);
	solidroundrect(WIDTH / 6 - 80, 3 * HEIGHT / 4 + 20, WIDTH / 6 + 70, 3 * HEIGHT / 4 + 100, 40, 40);
	//输出文字"开始"
	settextstyle(40, 25, "微软雅黑");//设置字体样式
	settextcolor(RGB(128,0,128));//设置字体颜色,紫色
	setbkmode(TRANSPARENT);//以透明的方式贴上文字
	rect1 = { WIDTH / 6 - 80, 3 * HEIGHT / 4 - 100, WIDTH / 6 + 70, 3 * HEIGHT / 4 - 20 };//设置文字输出的位置
	drawtext("进入", &rect1, DT_SINGLELINE | DT_VCENTER | DT_CENTER);//输出文字
	//输出文字"退出"
	settextstyle(40, 25, "微软雅黑");//设置字体样式
	settextcolor(RGB(128, 0, 128));//设置字体颜色,紫色
	setbkmode(TRANSPARENT);//以透明的方式贴上文字
	rect2 = { WIDTH / 6 - 80, 3 * HEIGHT / 4 + 20, WIDTH / 6 + 70, 3 * HEIGHT / 4 + 100 };//设置文字输出的位置
	drawtext("退出", &rect2, DT_SINGLELINE | DT_VCENTER | DT_CENTER);//输出文字
	//输出文字"超市管理系统"
	settextstyle(70, 50, "微软雅黑");//设置字体样式
	settextcolor(RGB(255, 255, 0));//设置字体颜色,紫色
	setbkmode(TRANSPARENT);//以透明的方式贴上文字
	rect3 = { 50 ,  50, WIDTH - 100,  150 };//设置文字输出的位置
	drawtext("超市管理系统", &rect3, DT_SINGLELINE | DT_VCENTER | DT_CENTER);//输出文字
	//将超市图片贴在按钮的旁边
	loadimage(&bk1, "超市1.png", 600, 400);
	loadimage(&bk2, "超市2.png", 600, 400);
	putimage(WIDTH / 6 + 150, 3 * HEIGHT / 4 - 250, &bk2, SRCAND);//贴上掩码图
	putimage(WIDTH / 6 + 150, 3 * HEIGHT / 4 - 250, &bk1, SRCPAINT);//贴上原图
	//鼠标操作
	while (true)
	{
		if (layer.layer == 1)//表示程序的第一层
		{
			m = getmessage(EM_MOUSE);//获取一条鼠标信息
			switch (m.message)//判断是哪种鼠标信息,再执行相应的语句
			{
			case WM_MOUSEMOVE://鼠标移动时,执行的语句
				setrop2(R2_XORPEN);//	绘制出的像素颜色 = 屏幕颜色 XOR 当前颜色
				setlinecolor(RED);//设置线条颜色为红色
				setfillcolor(WHITE);//设置填充颜色为白色
				if (button_judge(m.x, m.y) != 0)//将鼠标坐标传过去,返回的是非0数,执行下面代码
				{
					if (event != button_judge(m.x, m.y))
					{
						event = button_judge(m.x, m.y);//记录这一次触发的按钮
						solidroundrect(drawroundrect[event - 1][0], drawroundrect[event - 1][1], drawroundrect[event - 1][2], drawroundrect[event - 1][3], 40, 40);
					}
				}
				else
				{
					if (event != 0)//上次触发的按钮未还原颜色
					{
						solidroundrect(drawroundrect[event - 1][0], drawroundrect[event - 1][1], drawroundrect[event - 1][2], drawroundrect[event - 1][3], 40, 40);
						event = 0;
					}
				}
				break;
			case WM_LBUTTONDOWN://当鼠标左键点击时,发出响应
				setrop2(R2_NOTXORPEN);//绘制出的像素颜色 = NOT (屏幕颜色 XOR 当前颜色)
				for (int i = 0; i <= 10; i++)
				{
					setlinecolor(RGB(25 * i, 25 * i, 25 * i));//设置圆圈的颜色
					circle(m.x, m.y, 2 * i);//画出圆圈
					Sleep(25);
					circle(m.x, m.y, 2 * i);//抹去刚刚的圆
				}
				flushmessage(EM_MOUSE);//清空鼠标消息缓冲区
				if (button_judge(m.x, m.y) == 2)//如果鼠标点击“退出”按钮时,执行下面语句
				{
					setbkcolor(RGB(200, 200, 255));//设置背景颜色为浅蓝色(R和G值相近,B值越大颜色越浅)
					cleardevice();//刷屏,将蓝色刷到画布之上
					//输出文字"欢迎下次使用超市管理系统!"
					settextstyle(60, 30, "微软雅黑");//设置字体样式
					settextcolor(RGB(255, 0, 0));//设置字体颜色,红色
					setbkmode(TRANSPARENT);//以透明的方式贴上文字
					rect4 = { 100 ,  HEIGHT / 2 - 50, WIDTH - 70,  HEIGHT / 2 + 50 };//设置文字输出的位置
					drawtext("欢迎下次使用超市管理系统!", &rect4, DT_SINGLELINE | DT_VCENTER | DT_CENTER);//输出文字
					//输出文字"系统将于5秒钟后关闭"
					settextstyle(30, 10, "微软雅黑");//设置字体样式
					settextcolor(RGB(255, 0, 0));//设置字体颜色,红色
					setbkmode(TRANSPARENT);//以透明的方式贴上文字
					rect5 = { 100 ,  HEIGHT / 2 + 50, WIDTH - 70,  HEIGHT / 2 + 80 };//设置文字输出的位置
					drawtext("(系统将于5秒钟后关闭)", &rect5, DT_SINGLELINE | DT_VCENTER | DT_CENTER);//输出文字
					Sleep(5000);//在五秒后退出系统
					exit(0);//退出系统
				}
				if (button_judge(m.x, m.y) == 1)//如果鼠标点击“进入”按钮时,执行下面语句
				{
					superMarket market;//定义一个类
					layer.layer = 2;//即将跳转新的页面,将图层(layer)赋值于2(表示程序的第二层)
					market.mainInterface();//跳转到超市管理系统主界面
				}
				break;
			default:
				break;
			}
		}
	}
}

//按钮判断,当鼠标移动到按钮上时,发生颜色变化
int manageSystem::button_judge(int x, int y)//参数x和y,表示鼠标的横轴坐标与纵轴坐标
{
	//判断鼠标的位置,是否处于按钮的上方,是就执行以下语句
	if (x > WIDTH / 6 - 80 && x < WIDTH / 6 + 70 && y>3 * HEIGHT / 4 - 100 && y < 3 * HEIGHT / 4 - 20)
	{
		return 1;//返回值为1,说明鼠标已在“进入”按钮上
	}
	if (x > WIDTH / 6 - 80 && x < WIDTH / 6 + 70 && y>3 * HEIGHT / 4 + 20 && y < 3 * HEIGHT / 4 + 100)
	{
		return 2;//返回值为1,说明鼠标已在“退出”按钮上
	}
	return 0;//返回值为0,说明鼠标未在按钮的上面
}

superMarket.h头文件部分:

#pragma once
#include"manageSystem.h"
class superMarket
{
public:
	void mainInterface();//超市管理系统主页面
};

superMarket.cpp部分:

#include "superMarket.h"

#define WIDTH 1000        //画布宽度
#define HEIGHT 600       //画布高度

//超市管理系统主页面
void superMarket::mainInterface()
{
	setbkcolor(WHITE);//设置背景颜色为白色
	cleardevice();

}

主函数:

#include"manageSystem.h"

#define WIDTH 1000        //画布宽度
#define HEIGHT 600       //画布高度

int main()
{
	manageSystem supershop;//创建一个名为“supershop”的对象
	initgraph(WIDTH, HEIGHT,EW_NOMINIMIZE);//禁用关闭、最小化功能
	supershop.startInterface();//调用程序开始界面
	while (1);
	closegraph();
}

其余图片资源(与源文件在同一个文件夹里):
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Fy哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值