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();
}
其余图片资源(与源文件在同一个文件夹里):