C语言开发东北大学21级大作业—活力长者社区(图形界面)(附源码)

注:受老师许可,本程序内容与活力长者社区稍有不同。但所涉及到的功能、知识点与结构大致相似。 本程序名为 “ 陆零玖酒店管理系统 ”

任何疑问欢迎留言。此源码仅供学习,请不要过度借鉴!

目录

一、陆零玖酒店管理系统

1.程序信息

2.前言

二、程序使用展示

1.用户登录

 2.用户注册

3.客房预约

 4.设施预约

5.接送预约

6.管理端

7.关于界面

三、程序简介

1.头文件

2.全局结构体

3.封装函数

4.所需文件

四、程序功能

1.程序功能结构图

2.主函数

(1)变量声明

(2)链表创建及文件读入

(3)循环

3.文件读入

(1)用户信息读入

(2)会员信息读入

(3)客房信息读入

(4)服务信息读入

 4.系统首页

5.用户中心

6.设施预约

7.管理端用户管理

8.关于界面


一、陆零玖酒店管理系统

1.程序信息

程序名:陆零玖酒店管理程序

开发语言:C语言

程序作者:东北大学软件学院21级学生:YYYwaiwai、梅付坤、郭君朴、陈恳

开发工具:VS2019

需求环境:Easy-X Graphics.h 图形库

源码下载:C语言—东北大学大作业—活力长者社区(图形界面)源码

2.前言

本程序的创新之处为用户端完整的图形界面与鼠标交互功能

肝这个程序肝了整整半个月

因为运用了图形界面,让这个本来就有些复杂的程序变得更加的复杂

程序总共约为6000行,共封装97个函数

真的肝要肝爆了

因看到20级学长分享的文章后,才决定也自己要发一篇CSDN

由于时间原因,程序部分细节没有完全完工,但整体功能已完成。

二、程序使用展示

注:因程序功能较多,本部分仅展示部分内容

1.用户登录

 2.用户注册

3.客房预约

 4.设施预约

5.接送预约

 

6.管理端

注:因程序文件内包含他人真实信息,因此演示不予展示管理端具体功能

7.关于界面

三、程序简介

1.头文件

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <graphics.h>
#include <Mmsystem.h>
#pragma comment(lib,"winmm.lib")

2.全局结构体

//鼠标交互结构体
typedef struct button
{
	int x;
	int y;
	int width;
	int height;
	COLORREF color;
	char* ptext;
}button;

//图片按钮结构体
typedef struct picbutt
{
	int x;
	int y;
	int width;
	int height;
}picbutt;

//用户结构体
typedef struct user_info
{
	char name[10];
	char gender[10];
	char nickname[30];
	char phone[20];
	char password[20];
	int iVIPlevel;
	char cVIPlevel[10];
	struct user_info* next;
}user;

//会员结构体
typedef struct VIP_info
{
	char name[10];
	char gender[10];
	char nickname[30];
	char phone[20];
	char password[20];
	int iVIPlevel;
	char cVIPlevel[10];
	struct VIP_info* next;
}VIP;

//客房结构体
//单人客房
typedef struct single_room_info
{
	int number;
	user* puser;
	char yearmonth[20];
	int date;
	int day;
	int status;
}single_r;

//双人客房
typedef struct double_room_info
{
	int number;
	user* puser;
	char yearmonth[20];
	int date;
	int day;
	int status;
}double_r;

//家庭客房
typedef struct family_room_info
{
	int number;
	user* puser;
	char yearmonth[20];
	int date;
	int day;
	int status;
}family_r;

//豪华客房
typedef struct deluxe_room_info
{
	int number;
	user* puser;
	char yearmonth[20];
	int date;
	int day;
	int status;
}deluxe_r;

//服务结构体
typedef struct service_info
{
	user* puser;
	char date[30];
	int mobile_status;
	char mobile_cartype[50];
	int mobile_time;
	int canteen_status;
	int canteen_time;
	int fitness_status;
	int fitness_time;
	int pool_status;
	int pool_time;
	struct service_info* next;
}service;

3.封装函数

//函数声明
void colour(short);
//鼠标交互函数
button* creat_button(int, int, int, int, COLORREF, const char*);
picbutt* creat_picbutt(int, int, int, int);
void draw_button(button*);
int button_detect(button*, MOUSEMSG, COLORREF);
int picbutt_detect(picbutt*, MOUSEMSG, IMAGE, IMAGE);

//用户端页面函数
void about_page();
int front_page();
int login_page(char[], char[], user*, user*);
user* login_check(char[], char[], user*);
void input_phone(char[]);
void input_password(char[]);

int signin_page();
void signin_hint();
void signin_input(char[], char[], char[], char[], char[], user*);
void signin_name(char[]);
void signin_nickname(char[]);
void signin_gender(char[]);
void signin_phone(char[]);
void signin_password(char[]);
void signin_user(char[], char[], char[], char[], char[], user*);
int detect_user(char[], user*);
user* get_puser(user*, char[]);

int user_page(user*, VIP*);
void user_upgrade_page(user*, VIP*, user*);
void user_upgrade_level0(user*, VIP*, char[]);
void user_upgrade_level1(user*, VIP*, char[]);
void user_upgrade_level2(user*, VIP*, char[]);
void user_upgrade_level3(user*, VIP*, char[]);
void user_upgrade_silver(user*, VIP*);
void user_upgrade_gold(user*, VIP*);
void user_upgrade_diamond(user*, VIP*);

int detect_service_mobile(service*, user*);
service* detect_service(service*, user*);
void user_mobile_page(user*, VIP*, service*);
int user_mobile_normal(user*);
int user_mobile_VIP(user*);

void user_facility_page(user*);
void facility_canteen(user*, IMAGE, IMAGE, IMAGE, IMAGE, IMAGE, IMAGE, IMAGE, picbutt*, picbutt*, picbutt*, button*);
void facility_fitness(user*, IMAGE, IMAGE, IMAGE, IMAGE, IMAGE, IMAGE, IMAGE, picbutt*, picbutt*, picbutt*, button*);
void facility_pool(user*, IMAGE, IMAGE, IMAGE, IMAGE, IMAGE, IMAGE, IMAGE, picbutt*, picbutt*, picbutt*, button*);

void house_page(user*, single_r[], double_r[], family_r[], deluxe_r[]);
int house_page_user();
int house_page_VIP();
int house_distribute_single(single_r[]);
int house_distribute_double(double_r[]);
int house_distribute_family(family_r[]);
int house_distribute_deluxe(deluxe_r[]);
int detect_house_status(user*, single_r[], double_r[], family_r[], deluxe_r[]);


//管理端函数
void admin_page(user*, VIP*, single_r[], double_r[], family_r[], deluxe_r[]);

void admin_user(user*);
void admin_user_add(user*);
void admin_user_delete(user*);
user* admin_user_delete_name(char[], user*);
user* admin_user_delete_phone(char[], user*);
void admin_user_alter(user*);
void admin_user_search(user*);
void admin_user_through(user*);

void admin_VIP(VIP*, user*);
void admin_VIP_add(VIP*, user*);
void admin_VIP_delete(VIP*, user*);
VIP* admin_VIP_delete_name(char[], VIP*);
VIP* admin_VIP_delete_phone(char[], VIP*);
void admin_VIP_alter(VIP*);
void admin_VIP_search(VIP*);
void admin_VIP_through(VIP*);
int detect_VIP(char[], VIP*);

void admin_room(single_r[], double_r[], family_r[], deluxe_r[], user*);
void admin_room_add(single_r[], double_r[], family_r[], deluxe_r[], user*);
void admin_room_delete(single_r[], double_r[], family_r[], deluxe_r[], user*);
void admin_room_change(single_r[], double_r[], family_r[], deluxe_r[], user*);
void admin_room_search(single_r[], double_r[], family_r[], deluxe_r[], user*);
user* get_puser_name(user*, char[]);


//文件操作函数
int read_user(user*);
user* auto_adduser(user*);
user* auto_addnuser(user*);
void delete_r(char[]);
void read_VIP(VIP*, user*);
VIP* auto_addnVIP(VIP*);
int write_user(user*);

void read_house(single_r[], double_r[], family_r[], deluxe_r[], user*);
void read_house_single(single_r[], user*);
void read_house_double(double_r[], user*);
void read_house_family(family_r[], user*);
void read_house_deluxe(deluxe_r[], user*);

int read_service(user*, service*);
service* auto_addservice(service*);
service* auto_addnservice(service*);

void house_write(single_r[], double_r[], family_r[], deluxe_r[]);
void house_write_single(single_r[]);
void house_write_double(double_r[]);
void house_write_family(family_r[]);
void house_write_deluxe(deluxe_r[]);

4.所需文件

以上两个文件夹需放在工程文件根目录下。

info文件夹内包含程序所需读取的文件

file文件夹内包含程序所需读取的媒体文件 

四、程序功能

由于程序体量比较庞大,本文挑选部分重要部分展示

1.程序功能结构图

2.主函数

(1)变量声明

int fp_select = 0;
int lp_select = 0;
int sp_select = 0;
int up_select = 0;
int back_flag = 0;
int login_flag = 0;

char login_account[20] = "";
char login_password[20] = "";

char signin_name[10] = "";
char signin_nickname[30] = "";
char signin_gender[10] = "";
char signin_phone[20] = "";
char signin_password[20] = "";

single_r single_room[30] = { 0,NULL,"",0,0 };
double_r double_room[30] = { 0,NULL,"",0,0 };
family_r family_room[30] = { 0,NULL,"",0,0 };
deluxe_r deluxe_room[10] = { 0,NULL,"",0,0 };

(2)链表创建及文件读入

user* puser = NULL;
int user_house_status = 0;

user* user_head;
user_head = (user*)malloc(sizeof(user));
user_head->next = NULL;

VIP* VIP_head;
VIP_head = (VIP*)malloc(sizeof(VIP));
VIP_head->next = NULL;

service* service_head;
service_head = (service*)malloc(sizeof(service));
service_head->next = NULL;

read_user(user_head);
read_VIP(VIP_head, user_head);
read_house(single_room, double_room, family_room, deluxe_room, user_head);
read_service(user_head, service_head);

(3)循环

while (1)
	{
		fp_select = front_page();

		switch (fp_select)
		{
		case 1:
		{
			lp_select = login_page(login_account, login_password, user_head, puser);
			switch (lp_select)
			{
			case 1: back_flag = 1; break;
			case 2: break;
			case 3: admin_page(user_head, VIP_head, single_room, double_room, family_room, deluxe_room); back_flag = 1; break;
			case 4: puser = get_puser(user_head, login_account); login_flag = 1; back_flag = 1;  break;
			}
			if (back_flag == 1)
			{
				back_flag = 0;
				break;
			}
		}
		case 2:
		{
			sp_select = signin_page();
			switch (sp_select)
			{
				case 1: break;
				case 2:
				{
					signin_input(signin_name, signin_nickname, signin_gender, signin_phone, signin_password, user_head);
					write_user(user_head);
					puser = get_puser(user_head, signin_phone);
					if (puser == NULL)
					{
						system("pause");
						break;
					}
					else
					{
						login_flag = 1;
						signin_hint();
					}
				}
			}
			break;
		}
		case 3: return 0; break;
		case 4: about_page(); break;
		}
		if (login_flag == 1)
		{
			login_flag = 0;

			while (1)
			{
				user_house_status = detect_house_status(puser, single_room, double_room, family_room, deluxe_room);
				up_select = user_page(puser, VIP_head);

				switch (up_select)
				{
				case 0: back_flag = 1; break;
				case 1:
				{
					if (user_house_status == 1)
					{
						settextstyle(25, 0, "黑体");
						settextcolor(RED);
						setbkmode(TRANSPARENT);
						outtextxy(220, 130, "您已预约,无法再次预约!");
						system("pause");
						break;
					}
					house_page(puser, single_room, double_room, family_room, deluxe_room);
					house_write(single_room, double_room, family_room, deluxe_room);
					break;
				}
				case 2:
				{
					if (user_house_status != 1)
					{
						settextstyle(25, 0, "黑体");
						settextcolor(RED);
						setbkmode(TRANSPARENT);
						outtextxy(220, 130, "入住后才能享受该服务!");
						system("pause");
						break;
					}
					else
						user_facility_page(puser);
					break;
				}
				case 3:
				{
					settextstyle(25, 0, "黑体");
					settextcolor(RED);
					setbkmode(TRANSPARENT);
					outtextxy(220, 130, "即将推出!");
					system("pause");
					break;
				}
				case 4:
				{
					if (user_house_status != 1)
					{
						settextstyle(25, 0, "黑体");
						settextcolor(RED);
						setbkmode(TRANSPARENT);
						outtextxy(220, 130, "入住后才能享受该服务!");
						system("pause");
						break;
					}
					if (detect_service_mobile(service_head, puser) == 1)
					{
						settextstyle(25, 0, "黑体");
						settextcolor(RED);
						setbkmode(TRANSPARENT);
						outtextxy(220, 130, "您已预约,请勿重复操作!");
						system("pause");
						break;
					}
					else
						user_mobile_page(puser, VIP_head, service_head);
					break;
				}
				case 5: user_upgrade_page(puser, VIP_head, user_head); break;
				case 6:;
				}

				if (back_flag == 1)
				{
					back_flag = 0;
					break;
				}
			}
		}
	}

3.文件读入

(1)用户信息读入

用户信息由 info/user_info.txt 内读入,并将信息存入user_info链表

user_info.txt内 包含 

 可用任意符号间隔不同用户,此处运用" * "号间隔

//读取用户数据
int read_user(user* user_head)
{
	char info[1000] = "";
	user* fn;

	FILE* file = fopen("./info/user_info.txt", "r");
	if (file == NULL)
	{
		printf("文件读取失败,请联系开发者!\n");
		return 0;
	}
	fn = auto_adduser(user_head);

	while (1)
	{
		fgets(info, 1000, file);
		strcpy(fn->name, info);
		delete_r(fn->name);

		fgets(info, 1000, file);
		strcpy(fn->gender, info);
		delete_r(fn->gender);

		fgets(info, 1000, file);
		strcpy(fn->nickname, info);
		delete_r(fn->nickname);

		fgets(info, 1000, file);
		strcpy(fn->phone, info);
		delete_r(fn->phone);

		fgets(info, 1000, file);
		strcpy(fn->password, info);
		delete_r(fn->password);

		fgets(info, 1000, file);
		fn->iVIPlevel = atoi(info);

		switch (fn->iVIPlevel)
		{
		case 0: strcpy(fn->cVIPlevel, "普通用户"); break;
		case 1: strcpy(fn->cVIPlevel, "白银会员"); break;
		case 2: strcpy(fn->cVIPlevel, "黄金会员"); break;
		case 3: strcpy(fn->cVIPlevel, "钻石会员"); break;
		}

		/*
		printf("%s\n", fn->name);
		printf("%s\n", fn->gender);
		printf("%s\n", fn->nickname);
		printf("%s\n", fn->phone);
		printf("%s\n", fn->password);
		printf("%d\n", fn->iVIPlevel);
		printf("%s\n\n", fn->cVIPlevel);
		*/

		if (fgets(info, 1000, file) == NULL)
			break;
		fn = auto_addnuser(user_head);
	}
	fclose(file);
}

//第一次读取用户新增信息
user* auto_adduser(user* user_head)
{
	user* pn;
	pn = (user*)malloc(sizeof(user));
	user_head->next = pn;
	pn->next = NULL;

	return pn;
}

//第n次读取用户新增信息
user* auto_addnuser(user* user_head)
{
	user* pn;
	user* tem;
	pn = (user*)malloc(sizeof(user));
	pn->next = NULL;
	tem = user_head;

	while (1)
	{
		if (tem->next != NULL)
			tem = tem->next;
		else
			break;
	}
	tem->next = pn;

	return pn;
}

//去文件内换行符
void delete_r(char str[])
{
	int i = 0;
	for (i = 0; str[i] != '\n'; i++);
	str[i] = '\0';
}

(2)会员信息读入

会员信息由user_info链表中读入,并创建VIP_info链表。

//读取会员信息
void read_VIP(VIP* VIP_head, user* user_head)
{
	user* pn;
	pn = user_head->next;

	VIP* fn;
	fn = (VIP*)malloc(sizeof(VIP));
	VIP_head->next = fn;
	fn->next = NULL;

	while (pn->next != NULL)
	{
		if (pn->iVIPlevel != 0)
		{
			strcpy(fn->name, pn->name);
			strcpy(fn->gender, pn->gender);
			strcpy(fn->nickname, pn->nickname);
			strcpy(fn->phone, pn->phone);
			strcpy(fn->password, pn->password);
			fn->iVIPlevel = pn->iVIPlevel;
			strcpy(fn->cVIPlevel, pn->cVIPlevel);

			/*
			printf("\n\n%s\n", fn->name);
			printf("%s\n", fn->gender);
			printf("%s\n", fn->nickname);
			printf("%s\n", fn->phone);
			printf("%s\n", fn->password);
			printf("%d\n", fn->iVIPlevel);
			printf("%s\n\n", fn->cVIPlevel);
			*/

			if (pn-> next == NULL)
				break;
			fn = auto_addnVIP(VIP_head);
		}
		pn = pn->next;
	}
}

//第n次读取会员信息
VIP* auto_addnVIP(VIP* VIP_head)
{
	VIP* pn;
	VIP* tem;
	pn = (VIP*)malloc(sizeof(VIP));
	pn->next = NULL;
	tem = VIP_head;

	while (1)
	{
		if (tem->next != NULL)
			tem = tem->next;
		else
			break;
	}
	tem->next = pn;

	return pn;
}

(3)客房信息读入

因代码过长,仅展示部分代码

//客房信息读入
void read_house(single_r single_room[], double_r double_room[], family_r family_room[], deluxe_r deluxe_room[], user* user_head)
{
	read_house_single(single_room, user_head);
	read_house_double(double_room, user_head);
	read_house_family(family_room, user_head);
	read_house_deluxe(deluxe_room, user_head);
}

//读入单人房数据
void read_house_single(single_r single_room[], user* user_head)
{
	FILE* fp = fopen("./info/single_room.txt", "r");
	if (fp == NULL)
	{
		printf("文件读取失败,请联系开发者!\n");
		return;
	}
	char s[100] = "\0";
	int i = 0;
	int a = 0;
	user* p = NULL;

	for (i = 0; i < 30; i++)
	{
		fgets(s, 100, fp);
		delete_r(s);
		a = atoi(s);
		single_room[i].number = a;

		fgets(s, 100, fp);
		delete_r(s);
		p = get_puser(user_head, s);
		single_room[i].puser = p;

		fgets(s, 100, fp);
		delete_r(s);
		strcpy(single_room[i].yearmonth, s);

		fgets(s, 100, fp);
		delete_r(s);
		a = atoi(s);
		single_room[i].date = a;

		fgets(s, 100, fp);
		delete_r(s);
		a = atoi(s);
		single_room[i].day = a;

		fgets(s, 100, fp);
		delete_r(s);
		a = atoi(s);
		single_room[i].status = a;
	}
	for (i = 0; i < 30; i++)
	{
		//printf("%d\n%s\n%s\n%d\n%d\n%d\n", single_room[i].number, single_room[i].puser->name, single_room[i].yearmonth, single_room[i].date, single_room[i].day, single_room[i].status);
	}
	fclose(fp);
}

(4)服务信息读入

//读取服务数据
int read_service(user* user_head, service* service_head)
{
	char info[1000] = "";
	int tem = 0;
	service* fn;

	FILE* file = fopen("./info/service_info.txt", "r");
	if (file == NULL)
	{
		printf("文件读取失败,请联系开发者!\n");
		return 0;
	}
	fn = auto_addservice(service_head);

	while (1)
	{
		fgets(info, 1000, file);
		delete_r(info);
		fn->puser = get_puser(user_head, info);

		fgets(info, 1000, file);
		strcpy(fn->date, info);
		delete_r(fn->date);

		fgets(info, 1000, file);
		tem = atoi(info);
		if (tem == 0)
		{
			fn->mobile_status = 0;
			strcpy(fn->mobile_cartype, "0");
			fn->mobile_time = 0;
			fgets(info, 1000, file);
			fgets(info, 1000, file);
		}
		else
		{
			fn->mobile_status = 1;

			fgets(info, 1000, file);
			strcpy(fn->mobile_cartype, info);
			delete_r(fn->mobile_cartype);

			fgets(info, 1000, file);
			tem = atoi(info);
			fn->mobile_time = tem;
		}

		fgets(info, 1000, file);
		tem = atoi(info);
		if (tem == 0)
		{
			fn->canteen_status = 0;
			fn->canteen_time = 0;
			fgets(info, 1000, file);
		}
		else
		{
			fn->canteen_status = 1;

			fgets(info, 1000, file);
			tem = atoi(info);
			fn->canteen_time = tem;
		}

		fgets(info, 1000, file);
		tem = atoi(info);
		if (tem == 0)
		{
			fn->fitness_status = 0;
			fn->fitness_time = 0;
			fgets(info, 1000, file);
		}
		else
		{
			fn->fitness_status = 1;

			fgets(info, 1000, file);
			tem = atoi(info);
			fn->fitness_time = tem;
		}

		fgets(info, 1000, file);
		tem = atoi(info);
		if (tem == 0)
		{
			fn->pool_status = 0;
			fn->pool_time = 0;
			fgets(info, 1000, file);
		}
		else
		{
			fn->pool_status = 1;

			fgets(info, 1000, file);
			tem = atoi(info);
			fn->pool_time = tem;
		}

		/*
		printf("%s\n", fn->puser->name);
		printf("%s\n", fn->date);
		printf("%d\n", fn->mobile_status);
		printf("%s\n", fn->mobile_cartype);
		printf("%d\n", fn->mobile_time);
		printf("%d\n", fn->canteen_status);
		printf("%d\n", fn->canteen_time);
		printf("%d\n", fn->fitness_status);
		printf("%d\n", fn->fitness_time);
		printf("%d\n", fn->pool_status);
		printf("%d\n\n", fn->pool_time);
		*/

		fgets(info, 1000, file);
		if (strcmp(info, "&") == 0)
			break;
		fn = auto_addnservice(service_head);
	}
	fclose(file);
}

//第一次读取服务信息
service* auto_addservice(service* service_head)
{
	service* pn;
	pn = (service*)malloc(sizeof(service));
	service_head->next = pn;
	pn->next = NULL;

	return pn;
}

//第n次读取服务信息
service* auto_addnservice(service* service_head)
{
	service* pn;
	service* tem;
	pn = (service*)malloc(sizeof(service));
	pn->next = NULL;
	tem = service_head;

	while (1)
	{
		if (tem->next != NULL)
			tem = tem->next;
		else
			break;
	}
	tem->next = pn;

	return pn;
}

 4.系统首页

int front_page()
{
	initgraph(1280, 720);

	IMAGE photo;
	loadimage(&photo, "./file/front_page.jpg");
	putimage(0, 0, &photo);
	
	button* login = creat_button(210, 380, 180, 50, YELLOW, "用户登录");
	button* signin = creat_button(210, 450, 180, 50, YELLOW, "用户注册");
	button* exit = creat_button(210, 520, 180, 50, YELLOW, "退出系统");
	button* about = creat_button(210, 590, 180, 50, YELLOW, "关于系统");
	
	while (1)
	{
		
		draw_button(login);
		draw_button(signin);
		draw_button(exit);
		draw_button(about);

		MOUSEMSG mouse = GetMouseMsg();
		if (button_detect(login, mouse, YELLOW))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 1;
		}
		if (button_detect(signin, mouse, YELLOW))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 2;
		}
		if (button_detect(exit, mouse, YELLOW))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 3;
		}
		if (button_detect(about, mouse, YELLOW))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 4;
		}
		
	}
}

5.用户中心

//用户中心页面
int user_page(user* puser, VIP* VIP_head)
{
	char call[50] = "欢迎您,";
	char male[10] = "先生";
	char female[10] = "女士";
	int i = 0;
	int j = 0;

	IMAGE photo;
	loadimage(&photo, "./file/user_page.jpg");
	putimage(0, 0, &photo);

	settextstyle(25, 0, "楷体");
	setbkmode(TRANSPARENT);
	settextcolor(RED);

	if (puser->name[0] >= 'A' && puser->name[0] <= 'Z')
	{
		strcat(call, puser->name);
	}
	else
	{
		strncat(call, puser->name, 2);
	}
	
	if (strcmp(puser->gender, male) == 0)
		strcat(call, male);
	else
		strcat(call, female);

	outtextxy(1030, 135, call);
	

	IMAGE house_1;
	IMAGE house_2;
	IMAGE facility_1;
	IMAGE facility_2;
	IMAGE service_1;
	IMAGE service_2;
	IMAGE mobile_1;
	IMAGE mobile_2;
	IMAGE upgrade_1;
	IMAGE upgrade_2;
	IMAGE alter_1;
	IMAGE alter_2;

	loadimage(&house_1, "./file/house_1.jpg");
	loadimage(&house_2, "./file/house_2.jpg");
	picbutt* house = creat_picbutt(140, 190, 490, 150);

	loadimage(&facility_1, "./file/facility_1.jpg");
	loadimage(&facility_2, "./file/facility_2.jpg");
	picbutt* facility = creat_picbutt(660, 190, 490, 150);

	loadimage(&service_1, "./file/service_1.jpg");
	loadimage(&service_2, "./file/service_2.jpg");
	picbutt* service = creat_picbutt(140, 360, 490, 150);

	loadimage(&mobile_1, "./file/mobile_1.jpg");
	loadimage(&mobile_2, "./file/mobile_2.jpg");
	picbutt* mobile = creat_picbutt(660, 360, 490, 150);

	loadimage(&upgrade_1, "./file/upgrade_1.jpg");
	loadimage(&upgrade_2, "./file/upgrade_2.jpg");
	picbutt* upgrade = creat_picbutt(140, 530, 490, 150);

	loadimage(&alter_1, "./file/alter_1.jpg");
	loadimage(&alter_2, "./file/alter_2.jpg");
	picbutt* alter = creat_picbutt(660, 530, 490, 150);

	button* back = creat_button(50, 120, 150, 50, YELLOW, "<<登出");
	
	while (1)
	{
		draw_button(back);

		MOUSEMSG mouse = GetMouseMsg();
		if (button_detect(back, mouse, YELLOW))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 0;
		}
		if (picbutt_detect(house, mouse, house_1, house_2))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 1;
		}
		if (picbutt_detect(facility, mouse, facility_1, facility_2))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 2;
		}
		if (picbutt_detect(service, mouse, service_1, service_2))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 3;
		}
		if (picbutt_detect(mobile, mouse, mobile_1, mobile_2))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 4;
		}
		if (picbutt_detect(upgrade, mouse, upgrade_1, upgrade_2))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 5;
		}
		if (picbutt_detect(alter, mouse, alter_1, alter_2))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				return 6;
		}
	}
}

6.设施预约

因代码过长,仅展示部分代码

//设施预约界面
void user_facility_page(user* puser)
{
	IMAGE facility;
	loadimage(&facility, "./file/facility_page.jpg");
	putimage(0, 0, &facility);

	IMAGE canteen_1;
	IMAGE canteen_2;
	IMAGE fitness_1;
	IMAGE fitness_2;
	IMAGE pool_1;
	IMAGE pool_2;

	loadimage(&canteen_1, "./file/facility_canteen_1.jpg");
	loadimage(&canteen_2, "./file/facility_canteen_2.jpg");
	picbutt* canteen = creat_picbutt(115, 190, 330, 186);

	loadimage(&fitness_1, "./file/facility_fitness_1.jpg");
	loadimage(&fitness_2, "./file/facility_fitness_2.jpg");
	picbutt* fitness = creat_picbutt(475, 190, 330, 186);

	loadimage(&pool_1, "./file/facility_pool_1.jpg");
	loadimage(&pool_2, "./file/facility_pool_2.jpg");
	picbutt* pool = creat_picbutt(835, 190, 330, 186);

	button* back = creat_button(50, 120, 150, 50, YELLOW, "<<返回");

	facility_canteen(puser, facility, canteen_1, canteen_2, fitness_1, fitness_2, pool_1, pool_2, canteen, fitness, pool, back);
}

//餐厅预约界面
void facility_canteen(user* puser, IMAGE facility, IMAGE canteen_1, IMAGE canteen_2, IMAGE fitness_1, IMAGE fitness_2, IMAGE pool_1, IMAGE pool_2, picbutt* canteen, picbutt* fitness, picbutt* pool, button* back)
{
	int timei = 8;
	char timec[10] = "";
	cleardevice();

	putimage(0, 0, &facility);
	putimage(115, 190, &canteen_2);
	setlinecolor(BLACK);
	setlinestyle(1, 4);
	line(100, 180, 460, 180);
	line(460, 180, 460, 395);
	line(460, 395, 1180, 395);
	line(1180, 395, 1180, 700);
	line(100, 700, 1180, 700);
	line(100, 180, 100, 700);
	setlinestyle(0, 1);

	setlinecolor(BLACK);
	setfillcolor(WHITE);
	fillrectangle(470, 570, 540, 620);

	settextcolor(BLACK);
	settextstyle(30, 0, "黑体");
	setbkmode(TRANSPARENT);
	outtextxy(320, 470, "日期:2022年1月18日");
	outtextxy(320, 520, "设施:餐厅10F 星露谷餐厅");
	outtextxy(320, 580, "时间:     8        时");

	button* plus = creat_button(400, 570, 70, 50, WHITE, "+");
	button* minus = creat_button(540, 570, 70, 50, WHITE, "-");
	button* reserve = creat_button(800, 485, 180, 50, YELLOW, "在线订餐");
	button* sure = creat_button(800, 555, 180, 50, YELLOW, "确认预约");

	while (1)
	{
		draw_button(back);
		draw_button(plus);
		draw_button(minus);
		draw_button(reserve);
		draw_button(sure);

		MOUSEMSG mouse = GetMouseMsg();
		if (button_detect(back, mouse, YELLOW))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				break;
		}
		if (picbutt_detect(fitness, mouse, fitness_1, fitness_2))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
			{
				facility_fitness(puser, facility, canteen_1, canteen_2, fitness_1, fitness_2, pool_1, pool_2, canteen, fitness, pool, back);
				break;
			}
		}
		if (picbutt_detect(pool, mouse, pool_1, pool_2))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
			{
				facility_pool(puser, facility, canteen_1, canteen_2, fitness_1, fitness_2, pool_1, pool_2, canteen, fitness, pool, back);
				break;
			}
		}
		if (button_detect(plus, mouse, WHITE))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
			{
				setlinecolor(BLACK);
				setfillcolor(WHITE);
				fillrectangle(470, 570, 540, 620);
				settextcolor(BLACK);
				settextstyle(30, 0, "黑体");
				setbkmode(TRANSPARENT);
				if (timei < 20)
					timei += 1;
				itoa(timei, timec, 10);
				outtextxy(490, 580, timec);
			}
		}
		if (button_detect(minus, mouse, WHITE))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
			{
				setlinecolor(BLACK);
				setfillcolor(WHITE);
				fillrectangle(470, 570, 540, 620);
				settextcolor(BLACK);
				settextstyle(30, 0, "黑体");
				setbkmode(TRANSPARENT);
				if (timei > 8)
					timei -= 1;
				itoa(timei, timec, 10);
				outtextxy(490, 580, timec);
			}
		}
		if (button_detect(reserve, mouse, YELLOW))
			strcpy(reserve->ptext, "即将推出");
		else
			strcpy(reserve->ptext, "在线订餐");

		if (button_detect(sure, mouse, YELLOW))
		{
			if (mouse.uMsg == WM_LBUTTONDOWN)
				break;
		}
	}
}

7.管理端用户管理

因代码过长,仅展示部分代码

//管理用户主页面
void admin_user(user* user_head)
{
	char input = '0';
	int select = 0;
	int flag = 0;

	while (1)
	{
		system("cls");
		colour(11);
		printf("**************\n");
		printf("管理员,你好!\n");
		printf("**************\n");
		colour(15);
		printf("\n你可以进行以下操作:\n1.增加用户信息\n2.删除用户信息\n3.更改用户信息\n4.查询用户信息\n5.遍历用户信息\n6.返回管理员页面\n");

		fflush(stdin);
		while (1)
		{
			if (!_kbhit());
			else
				input = _getch();

			if (input >= '1' && input <= '6')
				break;
		}
		select = input - 48;

		switch (select)
		{
		case 1: admin_user_add(user_head); break;
		case 2: admin_user_delete(user_head); break;
		case 3: admin_user_alter(user_head); break;
		case 4: admin_user_search(user_head); break;
		case 5: admin_user_through(user_head); break;
		case 6: flag = 1; break;
		}
		input = 0;
		if (flag == 1)
		{
			initgraph(1280, 720);
			break;
		}
	}

}

//管理端增加用户函数
void admin_user_add(user* user_head)
{
	char temphone[20] = "";
	int detect = 0;
	user* p;
	p = (user*)malloc(sizeof(user));

	while (1)
	{
		system("cls");
		colour(11);
		printf("******************\n");
		printf("添 加 用 户 界 面\n");
		printf("******************\n");
		colour(15);
		printf("请输入手机号码:");
		scanf("%s", temphone);

		if (detect_user(temphone, user_head))
		{
			colour(12);
			printf("\n该用户已存在!\n");
			colour(15);
			system("pause");
		}
		else
		{
			strcpy(p->phone, temphone);
			printf("请输入您的姓名:");
			scanf("%s", &p->name);
			printf("请输入性别:");
			scanf("%s", &p->gender);
			printf("请输入昵称:");
			scanf("%s", &p->nickname);
			printf("请输入密码:");
			scanf("%s", &p->password);
			p->iVIPlevel = 0;
			strcpy(p->cVIPlevel, "普通用户");

			p->next = user_head->next;
			user_head->next = p; system("cls");
			colour(5);
			printf("\n用户已成功添加,请核实信息\n"); colour(8);
			printf("用户姓名:%s\n", p->name);
			printf("用户性别:%s\n", p->gender);
			printf("用户昵称:%s\n", p->nickname);
			printf("用户手机号码:%s\n", p->phone);
			printf("用户密码:%s\n", p->password);
			printf("用户类型:%s\n", p->cVIPlevel);
			system("pause");
			break;
		}
	}
}

8.关于界面

本界面中实现了字幕滚动的简易动画制作

//关于系统页面
void about_page()
{
	char read[1000] = "";
	int i = 0;
	int j = 0;

	FILE* about = fopen("./info/about.txt", "r");
	if (about == NULL)
	{
		printf("文件读取失败,请联系开发者!\n");
		return;
	}

	initgraph(1280, 720);
	IMAGE page;
	IMAGE title;
	mciSendString("open ./file/about.wav", NULL, 0, NULL);
	mciSendString("play ./file/about.wav", NULL, 0, NULL);
	loadimage(&page, "./file/about_page.jpg");
	loadimage(&title, "./file/about_title.jpg");
	settextstyle(30, 0, "黑体");
	setbkmode(TRANSPARENT);
	settextcolor(BLACK);

	for( j = 0; j <= 8200; j += 1)
	{
		BeginBatchDraw();
		putimage(0, 0, &page);

		for( i = 0; fgets(read, 1000, about) != NULL; i++)
		{
			outtextxy(285, 720 + 40 * i - j, read );
			if (720 + 40 * i - j > 800)
				break;
		}
		putimage(0, 0, &title);

		rewind(about);
		Sleep(15);
		EndBatchDraw();
		if (!_kbhit());
		else
			if (_getch() == ' ')
				break;
		cleardevice();
	}
	fclose(about);
	mciSendString("pause ./file/about.wav", NULL, 0, NULL);
}

原理解析: 

 其他代码请下载源码查看

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值