Easyx图形库实现用户与鼠标交互的可视化职工管理系统

图形库基础
鼠标光标交互

  • 此项目开发环境:编译器:VS2019,数据库:sqlite3
#include <iostream>
#include <string>
#include <conio.h>
#include <graphics.h>
#include <Windows.h>
#include <mmsystem.h>
#include "sqlite3.h"
//#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"sqlite3.lib")
using namespace std;

#define YES 0
#define Width 800  
#define High 500
//------------------------------------------------管理员类------------------------------------------------------------------------
class Manger
{
public:
	void Login();
	void Register();
	void Modify(Manger* mp);
	void Add(Manger* mp);
	void Delete(Manger* mp);
	void Browse(Manger* mp);
	void set_rand_balance(Manger* mp);
	void Payoff(Manger* mp);

	void set_account(string _account) { account = _account; }
	void set_password(string _password) { password = _password; }
	void set_balance(int _balance) { balance = _balance; }
	void set_next(Manger* p) { next = p; }

	int get_balance() { return balance; }
	string get_password() { return password; }
	string get_account() { return account; }
	Manger* get_next() { return next; }

private:
	string account;
	string password;
	int balance;
	class Manger* next;
};

//---------------------------------------------------工人类-----------------------------------------------------------------------
class Worker
{
public:
	void set_rand_working_hours(Worker* p);
	void set_name(string _name) { name = _name; }
	void set_sex(string _sex) { sex = _sex; }
	void set_salary(int _salary) { salary = _salary; }
	void set_salary_hour(int _salary_hour) { salary_hour = _salary_hour; }
	void set_working_hours(int _working_hours) { working_hours = _working_hours; }
	void set_age(int _age) { age = _age; }
	void set_id(string _id) { id = _id; }
	void set_next(Worker* p) { next = p; }

	string get_name() { return name; }
	string get_sex() { return sex; }
	int get_salary() { return salary; }
	int get_salary_hour() { return salary_hour; }
	int get_age() { return age; }
	string get_id() { return id; }
	int get_working_hours() { return working_hours; }
	Worker* get_next() { return next; }
private:
	string name;
	string sex;
	int salary;
	int salary_hour;
	int working_hours;
	string id;
	int age;
	class Worker* next;
};

//----------------------------------------------------------数据库类--------------------------------------------------------------
class Sql
{
public:
	void open_dbfile();
	void close_dbfile();
	void update_exec(string sql, sqlite3* root);
	bool sql_exec(string sql, sqlite3* root);
};

//----------------------------------------------------------功能类----------------------------------------------------------------
class Function
{
public:

	int button_judge(int x, int y, int m); // 注册页面
	void init();
	void BGM();
	void click();
	void show();

	// 创建数据库
	void create_manger_table();
	void create_worker_table();

	// 创建链表
	void manger_read();
	void worker_read();

	void over();
	void load();

	void MangerFunction(Manger* p);
};
//--------------------------------------------------------全局变量--------------------------------------------------------------
Worker* whead = NULL; Worker* wend = NULL;
Manger* mhead = NULL; Manger* mend = NULL;
sqlite3* worker = NULL; sqlite3* manger = NULL;
int n = 10;
int r[2][4] = { {350, 110, 465, 160}, {350, 210, 465, 260} };// 登录注册页面矩形数组
int m[3][4] = { {270, 80, 550, 130}, {270, 180, 550, 230}, {270, 280, 550, 330} };
int k[1][4] = { 270, 400, 550, 450 };
int e[5][4] = { {270, 40, 550, 90},{270, 120, 550, 170},{270, 200, 550, 250},{270, 280, 550, 330},{270, 360, 550, 410}};

//-------------------------------------------------数据库类实现-------------------------------------------------------------------
void Sql::open_dbfile()
{
	if (sqlite3_open("manger.db", &manger) != SQLITE_OK)
	{
		cout << "文件打开失败!";
		system("pause");
		exit(0);
	}

	if (sqlite3_open("worker.db", &worker) != SQLITE_OK)
	{
		cout << "文件打开失败!";
		system("pause");
		exit(0);
	}
}

void Sql::close_dbfile()
{
	sqlite3_close(manger);
	sqlite3_close(worker);
}

void Sql::update_exec(string sql, sqlite3* root)
{
	Sql* sp = NULL;
	if (sp->sql_exec(sql, root) != SQLITE_OK)
	{
		cout << "修改失败!\n" << endl;
	}
	else
	{
		cout << "修改成功!\n";
	}
}

bool Sql::sql_exec(string sql, sqlite3* root)
{
	if (sqlite3_exec(root, sql.c_str(), NULL, NULL, NULL))
	{
		return true;
	}
	else
	{
		return false;
	}
}

//-------------------------------------------------功能类实现---------------------------------------------------------------------
void Function::init()
{
	initgraph(Width, High, SHOWCONSOLE);
	Function* fp = NULL;
	Manger* mp = NULL;
	int event = 0;
	fp->load();
	cleardevice();
	RECT R1 = {r[0][0], r[0][1], r[0][2], r[0][3]};
	RECT R2 = {r[1][0], r[1][1], r[1][2], r[1][3]};
	LOGFONT f;
	gettextstyle(&f);
	_tcscpy_s(f.lfFaceName, _T("宋体"));
	f.lfQuality = ANTIALIASED_QUALITY;
	settextstyle(&f);
	settextcolor(BLACK);
	drawtext("登录", &R1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("注册", &R2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	setlinecolor(BLACK);
	rectangle(r[0][0], r[0][1], r[0][2], r[0][3]);
	rectangle(r[1][0], r[1][1], r[1][2], r[1][3]);
	MOUSEMSG msg;
	while (1)
	{
		msg = GetMouseMsg();
		switch (msg.uMsg)
		{
		case WM_LBUTTONDOWN:
			fp->click();
			if (fp->button_judge(msg.x, msg.y, 1) == 1)
			{
				mp->Login();
			}
			if (fp->button_judge(msg.x, msg.y, 1) == 2)
			{
				mp->Register();
			}
			FlushMouseMsgBuffer();
			break;

		case WM_MOUSEMOVE:
			setrop2(R2_XORPEN);
			setlinecolor(0x9D9D9D);
			setlinestyle(PS_SOLID, 1);
			setfillcolor(0x9D9D9D);
			if (button_judge(msg.x, msg.y, 1) != 0)
			{
				if (event != button_judge(msg.x, msg.y, 1))
				{
					event = button_judge(msg.x, msg.y, 1);//记录这一次触发的按钮
					fillrectangle(r[event - 1][0], r[event - 1][1], r[event - 1][2], r[event - 1][3]);//有框填充矩形(X1,Y1,X2,Y2)
				}
			}
			else
			{
				if (event != 0)//上次触发的按钮未被修正为原来的颜色
				{
					fillrectangle(r[event - 1][0], r[event - 1][1], r[event - 1][2], r[event - 1][3]);//两次同或为原来颜色
					event = 0;
				}
			}
			break;
		case WM_RBUTTONDOWN:
			fp->over();
			break;
		}
	}
	closegraph();
	
}

int Function::button_judge(int x, int y, int z)
{
	if (z == 1)
	{
		if (x > r[0][0] && x<r[0][2] && y>r[0][1] && y < r[0][3])
			return 1;
		if (x > r[1][0] && x<r[1][2] && y>r[1][1] && y < r[1][3])
			return 2;
	}
	if (z == 2)
	{
		if (x > 360 && x < 480 && y > 345 && y < 400)
			return 1;
	}

	if (z == 3)
	{
		if (x > 760 && x < 800 && y > 0 && y < 40)
			return 1;
	}

	if (z == 4)
	{
		if (x > m[0][0] && y > m[0][1] && x < m[0][2] && y < m[0][3])
		{
			return 1;
		}
		if (x > m[1][0] && y > m[1][1] && x < m[1][2] && y < m[1][3])
		{
			return 2;
		}
		if (x > m[2][0] && y > m[2][1] && x < m[2][2] && y < m[2][3])
		{
			return 3;
		}
	}
	if (z == 5)
	{
		if (x > k[0][0] && y > k[0][1] && x < k[0][2] && y < k[0][3])
		{
			return 1;
		}
	}
	if (z == 6)
	{
		if (x > e[0][0] && y > e[0][1] && x < e[0][2] && y < e[0][3])
		{
			return 1;
		}
		if (x > e[1][0] && y > e[1][1] && x < e[1][2] && y < e[1][3])
		{
			return 2;
		}
		if (x > e[2][0] && y > e[2][1] && x < e[2][2] && y < e[2][3])
		{
			return 3;
		}
		if (x > e[3][0] && y > e[3][1] && x < e[3][2] && y < e[3][3])
		{
		return 4;
		}
		if (x > e[4][0] && y > e[4][1] && x < e[4][2] && y < e[4][3])
		{
			return 5;
		}
	}
	return 0;
}

/*void Function::BGM()
{
	mciSendString("open qyqx.mp3 alias music", 0, 0, 0);
	mciSendString("play music repeat", 0, 0, 0);
	if (0)
	{
		mciSendString("close music", 0, 0, 0);
	} 
}*/

void Function::click()
{
	MOUSEMSG msg = GetMouseMsg();
	setrop2(R2_XORPEN);
	for (int i = 0; i < 10; i++)
	{
		setlinecolor(RGB(25 * i, 25 * i, 25 * i));
		circle(msg.x, msg.y, 2 * i);
		Sleep(25);
		circle(msg.x, msg.y, 2 * i);
	}
}

void Function::show()
{
	Function* fp = NULL;
	Worker* p = whead->get_next();
	LOGFONT f;
	gettextstyle(&f);
	_tcscpy_s(f.lfFaceName, _T("宋体"));
	f.lfQuality = ANTIALIASED_QUALITY;
	settextstyle(&f);
	settextcolor(BLACK);
	outtextxy(50, 25, "ID");
	outtextxy(120, 25, "姓名");
	outtextxy(190, 25, "性别");
	outtextxy(260, 25, "年龄");
	outtextxy(330, 25, "基本工资");
	outtextxy(430, 25, "每小时工资");
	outtextxy(560, 25, "工作时长");
	int temp = 70;
	while (p)
	{
		
		outtextxy(50, temp, p->get_id().c_str());
		outtextxy(120, temp, p->get_name().c_str());
		outtextxy(190, temp, p->get_sex().c_str());
		outtextxy(260, temp, to_string(p->get_age()).c_str());
		outtextxy(330, temp, to_string(p->get_salary()).c_str());
		outtextxy(430, temp, to_string(p->get_salary_hour()).c_str());
		outtextxy(560, temp, to_string(p->get_working_hours()).c_str());
		temp += 45;
		p = p->get_next();
	}
}

#if YES
void Function::create_manger_table()
{
	Sql* sp = NULL;
	string sql;
	sql = "create table manger(account text primary key not null,\
								password text not null,\
								balance real)";
	if (sp->sql_exec(sql, manger) != SQLITE_OK)
	{
		cout << "已有manger数据库!!无需重复创建!";
		system("pause");
	}
}

void Function::create_worker_table()
{
	Sql* sp = NULL;
	string sql;
	sql = "create table worker(name text not null,\
								sex text not null,\
								age real check(age > 0) not null,\
								id text primary key not null,\
								salary real check(salary > 0) not null,\
								working_hours real,\
								salary_hour real not null)";
	if (sp->sql_exec(sql, worker) != SQLITE_OK)
	{
		cout << "已有worker数据库!!无需重复创建!";
		system("pause");
	}
}

#endif

void Function::manger_read()
{
	string sql;
	int Row;
	int Column;
	char** Result;

	if (sqlite3_get_table(manger, "select * from manger", &Result, &Row, &Column, NULL) != SQLITE_OK)
	{
		cout << "未创建manger数据库!\n";
		system("pause");
		return;
	}

	for (int i = 3; i < (Row + 1) * Column; )
	{
		Manger* p = new Manger;
		p->set_account(Result[i++]);
		p->set_password(Result[i++]);
		p->set_rand_balance(p); i++;
		mend->set_next(p);
		p->set_next(NULL);
		mend = mend->get_next();
	}
	sqlite3_free_table(Result);
}

void Function::worker_read()
{
	string sql;
	int Row;
	int Column;
	char** Result;
	if (sqlite3_get_table(worker, "select * from worker", &Result, &Row, &Column, NULL) != SQLITE_OK)
	{
		cout << "未创建worker数据库!\n";
		system("pause");
		return;
	}

	for (int i = 7; i < (Row + 1) * Column;)
	{
		Worker* p = new Worker;
		p->set_name(Result[i++]);
		p->set_sex(Result[i++]);
		p->set_age(atoi(Result[i++]));
		p->set_id(Result[i++]);
		p->set_salary(atoi(Result[i++]));
		p->set_rand_working_hours(p); i++;
		p->set_salary_hour(atoi(Result[i++]));
		wend->set_next(p);
		p->set_next(NULL);
		wend = wend->get_next();
	}
	sqlite3_free_table(Result);
}

void Function::over()
{
	int j = 0;
	for (int i = 255; i > 0; i -= 5)
	{
		settextcolor(WHITE);
		settextstyle(20, 0, "黑体");
		setbkmode(TRANSPARENT);
		setbkcolor(RGB(i, i, i));
		cleardevice();
		outtextxy(340, 250, "正在关闭...");
		outtextxy(420, 250, to_string(j).c_str());
		outtextxy(440, 250, "%");
		if (j == 100)
		{
			break;
		}
		if (j == 56)
		{
			Sleep(1000);
		}
		j += 2;
		Sleep(50);
	}
	exit(0);
}

void Function::load()
{
	int j = 0;
	for (int i = 0; i < 256; i += 5)
	{

		setbkcolor(RGB(i, i, i));
		cleardevice();
		outtextxy(340, 250, "正在加载..");
		outtextxy(420, 250, to_string(j).c_str());
		outtextxy(440, 250, "%");
		if (j == 100)
		{
			break;
		}
		if (j == 56)
		{
			Sleep(1000);
		}
		j += 2;
		Sleep(50);
	}
}

void Function::MangerFunction(Manger* p)
{
	Function* fp = NULL;
	int sign = 0;
	fp->load();
	cleardevice();
	RECT R1 = { e[0][0], e[0][1], e[0][2], e[0][3] };
	RECT R2 = { e[1][0], e[1][1], e[1][2], e[1][3] };
	RECT R3 = { e[2][0], e[2][1], e[2][2], e[2][3] };
	RECT R4 = { e[3][0], e[3][1], e[3][2], e[3][3] };
	RECT R5 = { e[4][0], e[4][1], e[4][2], e[4][3] };
	LOGFONT f;
	gettextstyle(&f);
	_tcscpy_s(f.lfFaceName, _T("宋体"));
	f.lfQuality = ANTIALIASED_QUALITY;
	settextstyle(&f);
	settextcolor(BLACK);
	drawtext("添加员工", &R1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("删除员工", &R2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("修改员工", &R3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("浏览员工", &R4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("发放工资", &R5, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	setlinecolor(WHITE);
	rectangle(e[0][0], e[0][1], e[0][2], e[0][3]);
	rectangle(e[1][0], e[1][1], e[1][2], e[1][3]);
	rectangle(e[2][0], e[2][1], e[2][2], e[2][3]);
	rectangle(e[3][0], e[3][1], e[3][2], e[3][3]);
	rectangle(e[4][0], e[4][1], e[4][2], e[4][3]);
	while (1)
	{
		MOUSEMSG msg = GetMouseMsg();
		if (MouseHit)
		{
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
				fp->click();
				if (fp->button_judge(msg.x, msg.y, 6) == 1)
				{
					p->Add(p);
				}
				if (fp->button_judge(msg.x, msg.y, 6) == 2)
				{
					p->Delete(p);
				}
				if (fp->button_judge(msg.x, msg.y, 6) == 3)
				{
					p->Modify(p);
				}
				if (fp->button_judge(msg.x, msg.y, 6) == 4)
				{
					p->Browse(p);
				}
				if (fp->button_judge(msg.x, msg.y, 6) == 5)
				{
					p->Payoff(p);
				}
				break;
			case WM_MOUSEMOVE:
				setrop2(R2_XORPEN);
				setlinecolor(WHITE);
				setlinestyle(PS_SOLID, 1);
				setfillcolor(WHITE);
				if (fp->button_judge(msg.x, msg.y, 6) != 0)
				{
					if (sign != fp->button_judge(msg.x, msg.y, 6))
					{
						sign = fp->button_judge(msg.x, msg.y, 6);
						fillrectangle(e[sign - 1][0], e[sign - 1][1], e[sign - 1][2], e[sign - 1][3]);
					}
				}
				else
				{
					if (sign != 0)
					{
						fillrectangle(e[sign - 1][0], e[sign - 1][1], e[sign - 1][2], e[sign - 1][3]);
						sign = 0;
					}
				}
				break;
			case WM_RBUTTONDOWN:
				break;
			}
		}
		FlushMouseMsgBuffer();
	}
	_getch();
}
//-----------------------------------------------------工人类实现-----------------------------------------------------------------
void Worker::set_rand_working_hours(Worker* p)
{
	int a[10];
	srand((unsigned)time(NULL));
	for (int i = 0; i < 10; i++)
	{
		a[i] = (rand() % (24 - 16 + 1)) + 16;
	}
	p->set_working_hours(a[(rand() % (10 - 1 + 1)) + 1] * n);
	n = n - 2;
	if (n == 6)
	{
		n = 9;
	}
	if (n == 5)
	{
		n = 10;
	}
}
//-----------------------------------------------------管理员类实现-----------------------------------------------------------------
void Manger::Login()
{
	Function* fp = NULL;
	Manger* p = mhead->get_next();
	int flag = 0;
	int cnt = 3;
	int sign = 1;
	char account[20];
	char password[20];
	setbkmode(TRANSPARENT);
	fp->load();
	cleardevice();
	settextcolor(BLACK);

	outtextxy(150, 140, "账号:");
	outtextxy(150, 240, "密码:");
	outtextxy(370, 345, "登录");
	InputBox(account, 10, "请输入账号:");
	outtextxy(270, 140, account);
	InputBox(password, 10, "请输入密码:");
	int len = strlen(password);
	while (len--)
	{
		outtextxy(270 + 8 * len, 240, "*");
	}
	while (1)
	{
		if (MouseHit)
		{
			MOUSEMSG msg = GetMouseMsg();
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
				fp->click();
				if (fp->button_judge(msg.x, msg.y, 2))
				{
					while (p)
					{

						if (p->get_account() == account && p->get_password() == password)
						{
							HWND hnd = GetHWnd();
							int isok = MessageBox(hnd, "登录成功!", "提示", MB_OKCANCEL);
							cleardevice();
							flag = 1;
							fp->MangerFunction(p);
						}
						p = p->get_next();
					}
					if (flag == 0)
					{
						HWND hnd = GetHWnd();
						int isok = MessageBox(hnd, "账号或密码错误!", "提示", MB_OKCANCEL);
						InputBox(account, 10, "请输入账号:");
						outtextxy(270, 150, account);
						InputBox(password, 10, "请输入密码:");
						outtextxy(270, 250, password);
						p = mhead->get_next();
					}
				}
				break;
			case WM_MOUSEMOVE:
				setrop2(R2_XORPEN);
				setlinecolor(BLACK);
				setlinestyle(PS_SOLID, 1);
				setfillcolor(WHITE);
				if (fp->button_judge(msg.x, msg.y, 2) != 0)
				{
					if (sign != fp->button_judge(msg.x, msg.y, 2))
					{
						sign = fp->button_judge(msg.x, msg.y, 2);
						fillrectangle(350, 330, 420, 380);
					}
				}
				else
				{
					if (sign != 0)
					{
						fillrectangle(350, 330, 420, 380);
						sign = 0;
					}
				}
				break;
			case WM_RBUTTONDOWN:
				fp->init();
				break;
			}
		}
		FlushMouseMsgBuffer();
	}
}

void Manger::Register()
{
	Function* fp = NULL;
	Manger* p = new Manger;
	Manger* pp = mhead->get_next();
	char account[20];
	char password[20];
	int flag = 0;
	setbkmode(TRANSPARENT);
	fp->load();
	cleardevice();
	settextcolor(BGR(0xFF8F59));
	settextstyle(50, 0, "楷体");
	outtextxy(150, 140, "账号:");
	fillrectangle(270, 145, 570, 200);
	outtextxy(150, 240, "密码:");
	fillrectangle(270, 245, 570, 300);
	InputBox(account, 10, "请输入账号:");
	outtextxy(270, 150, account);
	InputBox(password, 10, "请输入密码:");
	outtextxy(270, 250, password);

	while (pp)
	{
		if (pp->get_account() == account)
		{
			flag = 1;
		}

		if (flag == 1)
		{
			HWND hnd = GetHWnd();
			int isok = MessageBox(hnd, "已有此账号!!请重新注册!!", "提示", MB_OKCANCEL);
			InputBox(account, 10, "请输入账号:");
			outtextxy(270, 150, account);
			InputBox(password, 10, "请输入密码:");
			outtextxy(270, 250, password);
			pp = mhead->get_next();
			continue;
		}
		pp = pp->get_next();
	}
	p->set_account(account);
	p->set_password(password);
	Sql* sp = NULL;
	string sql;
	char buf[500];
	sprintf_s(buf, "insert into manger(account, password) values('%s','%s');",account, password);
	sql = buf;
	sp->sql_exec(sql, manger);
	HWND hnd = GetHWnd();
	int isok = MessageBox(hnd, "注册成功!!", "提示", MB_OKCANCEL);
	mend->set_next(p);
	p->set_next(NULL);
	mend = mend->get_next();
	fp->init();
}

void Manger::Modify(Manger* mp)
{
	Function* fp = NULL;
	Worker* p = whead->get_next();
	Sql* sp = NULL;
	int flag = 0;
	int sign = 0;
	int event = 0;
	int r[1][4] = { 760, 0, 760, 40 };
	HWND hnd;
	string sql;
	char buf[300];
	setbkmode(TRANSPARENT);
	fp->load();
	cleardevice();
	fp->show();
	char id[10];
	while (InputBox(id, 10, "请输入要修改员工信息的员工号(按0退出):"), "修改")
	{
		if (strcmp(id, "0") == 0)
		{
			fp->MangerFunction(mp);
			exit(0);
		}
		while (p)
		{
			if (p->get_id() == id)
			{
				flag = 1;
				break;
			}
			p = p->get_next();
		}
		if (flag)
		{
			break;
		}
		else
		{
			hnd = GetHWnd();
			int isok = MessageBox(hnd, "未查询到该id!!请重新输入!", "提示", MB_OKCANCEL);
			p = whead->get_next();
		}
	}
	cleardevice();
	setfillcolor(BLACK);
	setlinecolor(WHITE);
	line(775, 25, 795, 5);
	line(775, 5, 795, 25);
	RECT R1 = { m[0][0],m[0][1],m[0][2],m[0][3] };
	RECT R2 = { m[1][0],m[1][1],m[1][2],m[1][3] };
	RECT R3 = { m[2][0],m[2][1],m[2][2],m[2][3] };
	LOGFONT f;
	gettextstyle(&f);					
	_tcscpy_s(f.lfFaceName, _T("宋体"));	
	f.lfQuality = ANTIALIASED_QUALITY;   
	settextstyle(&f);                
	settextcolor(BLACK);		
	drawtext("修改年龄", &R1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("修改基本工资", &R2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	drawtext("修改每小时工资", &R3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	rectangle(m[0][0], m[0][1], m[0][2], m[0][3]);
	rectangle(m[1][0], m[1][1], m[1][2], m[1][3]);
	rectangle(m[2][0], m[2][1], m[2][2], m[2][3]);

	char age[10];
	char salary[10];
	char salary_hour[10];
	while (1)
	{
		MOUSEMSG msg = GetMouseMsg();
		if (MouseHit)
		{
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
				fp->click();
				if (fp->button_judge(msg.x, msg.y, 4) == 1)
				{
					while (InputBox(age, 10, "请输入年龄:"))
					{
						if (atoi(age) >= 56 || atoi(age) <= 18)
						{
							HWND hnd = GetHWnd();
							int isok = MessageBox(hnd, "年龄不得超过56或小于18!", "提示", MB_OKCANCEL);
						}
						else
						{
							break;
						}
					}
					p->set_age(atoi(age));
					sprintf_s(buf, "update worker set age=%d where id='%s'", atoi(age), p->get_id().c_str());
					sql = buf;
					sp->update_exec(sql, worker);
					HWND hnd = GetHWnd();
					int ok = MessageBox(hnd, "修改成功!", "提示", MB_OKCANCEL);
					fp->MangerFunction(mp);
				}

				if (fp->button_judge(msg.x, msg.y, 4) == 2)
				{
					InputBox(salary, 10, "请输入要修改后的工资(按0退出):", "提示");
					if (strcmp(salary, "0") == 0)
					{
						break;
					}
					p->set_salary(atoi(salary));
					sprintf_s(buf, "update worker set salary=%d where id='%s'", atoi(salary), p->get_id().c_str());
					sql = buf;
					sp->update_exec(sql, worker);
					HWND hnd = GetHWnd();
					int ok = MessageBox(hnd, "修改成功!", "提示", MB_OKCANCEL);
					fp->MangerFunction(mp);
				}

				if (fp->button_judge(msg.x, msg.y, 4) == 3)
				{
					InputBox(salary_hour, 10, "请输入要修改后的每小时工资(按0退出):", "提示");
					if (strcmp(salary_hour, "0") == 0)
					{
						break;
					}
					p->set_salary(atoi(salary_hour));
					sprintf_s(buf, "update worker set salary_hour=%d where id='%s'", atoi(salary_hour), p->get_id().c_str());
					sql = buf;
					sp->update_exec(sql, worker);
					HWND hnd = GetHWnd();
					int ok = MessageBox(hnd, "修改成功!", "提示", MB_OKCANCEL);
					fp->MangerFunction(mp);
				}

				if (fp->button_judge(msg.x, msg.y, 3) == 1)
				{
					Manger* p = mhead->get_next();
					fp->MangerFunction(p);
				}
				break;
			case WM_MOUSEMOVE:
				setrop2(R2_XORPEN);
				setlinecolor(WHITE);
				setlinestyle(PS_SOLID, 1);
				setfillcolor(WHITE);
				if (fp->button_judge(msg.x, msg.y, 3) != 0)
				{
					if (fp->button_judge(msg.x, msg.y, 3) != event)
					{
						event = fp->button_judge(msg.x, msg.y, 3);
						setfillcolor(WHITE);
						fillrectangle(770, 0, 800, 35);
					}
				}
				else
				{
					if (event != 0)
					{
						event = 0;
						fillrectangle(770, 0, 800, 35);
					}
				}
				if (fp->button_judge(msg.x, msg.y,4) != 0)
				{
					if (sign != fp->button_judge(msg.x, msg.y, 4))
					{
						sign = fp->button_judge(msg.x, msg.y, 4);
						fillrectangle(m[sign - 1][0], m[sign - 1][1], m[sign - 1][2], m[sign - 1][3]);
					}
				}
				else
				{
					if (sign != 0)
					{
						fillrectangle(m[sign - 1][0], m[sign - 1][1], m[sign - 1][2], m[sign - 1][3]);
						sign = 0;
					}
				}
				break;
			case WM_RBUTTONDOWN:
				break;
			}
		}
		FlushMouseMsgBuffer();
	}


	_getch();


}

void Manger::Add(Manger* mp)
{
	Function* fp = NULL;
	Worker* p = new Worker;
	char id[10];
	char name[10];
	char age[10];
	char sex[10];
	char salary[10];
	char salary_hour[10];
	fp->load();
	cleardevice();
	LOGFONT f;
	gettextstyle(&f);
	_tcscpy_s(f.lfFaceName, _T("宋体"));
	f.lfQuality = ANTIALIASED_QUALITY;
	settextstyle(&f);
	settextcolor(BLACK);
	setlinecolor(BLACK);
	setfillcolor(BLACK);
	setbkmode(TRANSPARENT);
	outtextxy(300, 50, "ID:");
	outtextxy(285, 110, "姓名:");
	outtextxy(285, 170, "性别:");
	outtextxy(285, 230, "年龄:");
	outtextxy(255, 290, "基本工资:");
	outtextxy(240, 350, "每小时工资:");
	HWND hnd = GetHWnd();
	int isok = MessageBox(hnd, "是否要添加员工?", "提示", MB_OKCANCEL);
	if (isok != IDOK)
	{
		fp->MangerFunction(mp);
		exit(0);
	}
	InputBox(id, 10, "请输入id:");
	p->set_id(id);
	outtextxy(330, 50, id);
	InputBox(name, 10, "请输入姓名:");
	p->set_name(name);
	outtextxy(330, 110, name);
	while (InputBox(sex, 10, "请输入性别:"))
	{
		if (strcmp(sex, "男") == 0 || strcmp(sex, "女") == 0)
		{
			break;
		}
		else
		{
			hnd = GetHWnd();
			isok = MessageBox(hnd, "请输入男或女!", "提示",MB_OKCANCEL);
		}
	}
	p->set_sex(sex);
	outtextxy(330, 170, sex);
	while (InputBox(age, 10, "请输入年龄:"))
	{
		if (atoi(age) >= 56 || atoi(age) <= 18)
		{
			hnd = GetHWnd();
			isok = MessageBox(hnd, "年龄不得超过56或小于18!", "提示", MB_OKCANCEL);
		}
		else
		{
			break;
		}
	}
	p->set_age(atoi(age));
	outtextxy(330, 230, age);
	InputBox(salary, 10, "请输入基本工资:");
	p->set_salary(atoi(salary));
	outtextxy(330, 290, salary);
	InputBox(salary_hour, 10, "请输入每小时工资:");
	p->set_salary_hour(atoi(salary_hour));
	outtextxy(330, 350, salary_hour);
	Sql* sp = NULL;
	string sql;
	char buf[500];
	sprintf_s(buf, "insert into worker(name, sex, age, id, salary, salary_hour) values('%s','%s','%s','%s','%s','%s');",
					 name, sex, age, id, salary, salary_hour);
	sql = buf;
	if (sp->sql_exec(sql, worker) != SQLITE_OK)
	{
		hnd = GetHWnd();
		isok = MessageBox(hnd, "已有此id号的员工!", "提示", MB_OKCANCEL);
		fp->MangerFunction(mp);
	}

	wend->set_next(p);
	p->set_next(NULL);
	wend = wend->get_next();
	hnd = GetHWnd();
	isok = MessageBox(hnd, "添加成功!", "提示", MB_OKCANCEL);fp->MangerFunction(mp);
}

void Manger::Delete(Manger* mp)
{
	Function* fp = NULL;
	Sql* sp = NULL;
	Worker* p = whead->get_next();
	int flag = 0;
	string sql;
	char buf[300];
	HWND hnd;
	setbkmode(TRANSPARENT);
	fp->load();
	cleardevice();
	fp->show();
	char id[10];
	while (InputBox(id, 10, "请输入要删除员工的id(按0退出):"))
	{
		if (strcmp(id, "0") == 0)
		{
			fp->MangerFunction(mp);
			exit(0);
		}
		while (p)
		{
			if (p->get_id() == id)
			{
				flag = 1;
				break;
			}
			p = p->get_next();
		}
		if (flag)
		{
			break;
		}
		else
		{
			hnd = GetHWnd();
			int isok = MessageBox(hnd, "未查找到该id!!请重新输入!", "提示", MB_OKCANCEL);
			p = whead->get_next();
		}
	}

	p = whead->get_next();
	Worker* pp = whead;
	while (p)
	{
		if (p->get_id() == id)
		{
			pp->set_next(p->get_next());
		}
		p = p->get_next();
		pp = pp->get_next();
	}
	sprintf_s(buf, "delete from worker where id='%s'", id);
	sql = buf;
	sp->sql_exec(sql, worker);
	hnd = GetHWnd();
	int isok = MessageBox(hnd, "删除成功!", "提示", MB_OKCANCEL); fp->MangerFunction(mp);
}

void Manger::Browse(Manger* mp)
{
	Function* fp = NULL;
	int sign = 1;
	fp->load();
	cleardevice();
	fp->show();
	int r[1][4] = {760, 0, 760, 40};
	LOGFONT f;
	gettextstyle(&f);
	_tcscpy_s(f.lfFaceName, _T("宋体"));
	f.lfQuality = ANTIALIASED_QUALITY;
	settextstyle(&f);
	setlinecolor(WHITE);
	line(775, 25, 795, 5);
	line(775, 5, 795, 25);

	while (1)
	{
		MOUSEMSG msg = GetMouseMsg();
		if (MouseHit)
		{
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
				fp->click();
				if (fp->button_judge(msg.x, msg.y, 3) == 1)
				{
					fp->MangerFunction(mp);
				}
				break;
			case WM_MOUSEMOVE:
				setrop2(R2_XORPEN);
				setlinecolor(WHITE);
				setlinestyle(PS_SOLID, 1);
				setfillcolor(WHITE);
				if (fp->button_judge(msg.x, msg.y, 3) != 0)
				{
					if (fp->button_judge(msg.x, msg.y, 3) != sign)
					{
						sign = fp->button_judge(msg.x, msg.y,3);
						setfillcolor(WHITE);
						fillrectangle(770, 0, 800, 35);
					}
				}
				else
				{
					if (sign != 0)
					{
						sign = 0;
						fillrectangle(770, 0, 800, 35);
					}
				}
				break;
			}
		}
		FlushMouseMsgBuffer();
	}
}

void Manger::set_rand_balance(Manger* mp)
{
	int a[10], b[10];
	srand((unsigned)time(NULL));
	for (int i = 0; i < 10; i++)
	{
		a[i] = (rand() % (900000 * (i + 1) - 500000 * (i + 1) + 1)) + 500000 * (i + 1);
	}

	for (int i = 0; i < 10; i++)
	{
		b[i] = (rand() % (10 - 1 + 1)) + 1;
	}
	mp->set_balance(a[b[5]]);
}

void Manger::Payoff(Manger* p)
{
	Function* fp = NULL;
	Worker* wp = whead->get_next();
	Manger* mp = mhead->get_next();
	Sql* sp = NULL;
	HWND hnd;
	RECT R = { k[0][0], k[0][1], k[0][2], k[0][3] };
	int r[1][4] = { 760, 0, 760, 40 };
	int sign = 0;
	int flag = 0;
	int sum = 0;
	string sql;
	char buf[300];
	setbkmode(TRANSPARENT);
	fp->load();
	cleardevice();
	fp->show();
	LOGFONT f;
	gettextstyle(&f);
	_tcscpy_s(f.lfFaceName, _T("宋体"));
	f.lfQuality = ANTIALIASED_QUALITY;
	settextstyle(&f);
	settextcolor(BLACK);
	drawtext("支付工资", &R, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	rectangle(k[0][0], k[0][1], k[0][2], k[0][3]);

	setlinecolor(WHITE);
	line(775, 25, 795, 5);
	line(775, 5, 795, 25);
	while (1)
	{
		MOUSEMSG msg = GetMouseMsg();
		if (MouseHit)
		{
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
				fp->click();
				if (msg.x > k[0][0] && msg.x < k[0][2] && msg.y > k[0][1] && msg.y < k[0][3])
				{
					while (wp)
					{
						sum += wp->get_salary() + wp->get_salary_hour() * wp->get_working_hours();
						wp = wp->get_next();
					}
					if (sum <= p->get_balance())
					{
						hnd = GetHWnd();
						int ok = MessageBox(hnd, "检测到当前公司资产大于员工总工资, 是否发放工资?", "提示", MB_OKCANCEL);
						if (ok == IDOK)
						{
							p->set_balance(p->get_balance() - sum);
							sprintf_s(buf, "update manger set balance=%d", balance);
							sql = buf;
							sp->sql_exec(sql, manger);
							wp = whead->get_next();
							while (wp)
							{
								wp->set_salary(wp->get_salary() + wp->get_salary_hour() * wp->get_working_hours());
								wp->set_working_hours(0);
								string id = wp->get_id();
								sprintf_s(buf, "update worker set salary=%d,working_hours=%d where id='%s';", wp->get_salary(), 0, wp->get_id().c_str());
								sql = buf;
								sp->sql_exec(sql, worker);
								wp = wp->get_next();
							}
							int ok = MessageBox(hnd, "工资发放成功!", "提示", MB_OKCANCEL);
							fp->MangerFunction(mp);
						}
						else
						{
							break;
						}
					}
					else
					{
						hnd = GetHWnd();
						int ok = MessageBox(hnd, "检测到当前公司总工资小于员工工资!!暂时不能发放工资!", "提示", MB_OKCANCEL);
					}

				}
				if (fp->button_judge(msg.x, msg.y, 3) == 1)
				{
					Manger* p = mhead->get_next();
					fp->MangerFunction(p);
				}
				break;
			case WM_MOUSEMOVE:
				setrop2(R2_XORPEN);
				setlinecolor(WHITE);
				setlinestyle(PS_SOLID, 1);
				setfillcolor(WHITE);
				if (fp->button_judge(msg.x, msg.y, 3) != 0)
				{
					if (fp->button_judge(msg.x, msg.y, 3) != flag)
					{
						flag = fp->button_judge(msg.x, msg.y, 3);
						setfillcolor(WHITE);
						fillrectangle(770, 0, 800, 35);
					}
				}
				else
				{
					if (flag != 0)
					{
						flag = 0;
						fillrectangle(770, 0, 800, 35);
					}
				}
				
				if (fp->button_judge(msg.x, msg.y, 5))
				{
					if (sign != fp->button_judge(msg.x, msg.y, 5))
					{
						sign = fp->button_judge(msg.x, msg.y, 5);
						fillrectangle(k[0][0], k[0][1], k[0][2], k[0][3]);
					}
				}
				else if (sign != 0)
				{
					fillrectangle(k[0][0], k[0][1], k[0][2], k[0][3]);
					sign = 0;
				}
				break;
			}
		}
		FlushMouseMsgBuffer();
	}
}


int main()
{
	Sql* sp = NULL;
	sp->open_dbfile();
#if YES
	Function p;
	p.create_manger_table();
	p.create_worker_table();
#endif 
	whead = new Worker; wend = new Worker; whead->set_next(NULL); wend = whead;
	mhead = new Manger; mend = new Manger; mhead->set_next(NULL); mend = mhead;
	Function* fp = NULL;
	fp->manger_read();fp->worker_read();
	//fp->BGM();
	fp->init();
	/*initgraph(Width, High, EW_SHOWCONSOLE);
	Manger* p = mhead->get_next();
	p->Add();*/
	sp->close_dbfile();
	delete whead, wend;
	delete mhead, mend;
	return 0;
}
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值