这是我大二数据结构课设的项目,现在看来当时的代码写的惨不忍睹,不过那仍是我宝贵的过去。
反黄牛是基于现在黄牛党刷票的一个现状:由于火车票实行实现实名制,黄牛只能先用自己收集的身份证预先订票,当你因为没有余票去找黄牛党订票时他们会退订自己的票,同时及时的用你的信息去刷他们刚退出来的那张票。而我的反黄牛思路就是每个订票人排队(队列),当重新出现余票时系统会自动将余票分配给队列中的第一个人,这样黄牛党就无法操作余票了。
下面上代码+图片(图片与顺序无关)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include"Visual.h"//界面文件
#include"TRAIN_BOX.h"//链表内存储车厢
#include"TRAIN_NUM.h"//链表内存储列车
#include"stack_ZHANGTE.h"//栈内存储旅客信息
#include"Book_tickt.h"//订票头文件
int book_ticket_num();//函数
int main(int argc, char*argv[])
{
int chose;
TrainType *p;//指向某一列火车
InitStack(s0);//初始化旅客栈
initrain_addressUniti();//初始化单元组
train_addressUniti[0] = Creat_Traingroup();//列车组指针指向列车组
// Search_n_Stack(s0);
/********************默认三列火车四位旅客******************************/
Insert_Train_ceshi1(train_addressUniti[0],0);
Insert_Train_ceshi2(train_addressUniti[0],1);
Insert_Train_ceshi3(train_addressUniti[0],2);
Push_Stack_Ceshi1(s0);
Push_Stack_Ceshi2(s0);
Push_Stack_Ceshi3(s0);
Push_Stack_Ceshi4(s0);
/**********************************************************************/
/*********************用户登录*****************************************/
while(1)
{
switch(face2())
{
case 1 :{
getchar();
if(!Test_n_Stack(s0))
break;
}
case 2 : getchar();face5();break;
case 3 : getchar();face4();break;
default: printf("未知错误(1)!");break;
}
/******************************************************************************************/
getchar();
}
/******************************************************************************************
p = train_addressUniti[0]->next->zhang;
printf("\n该列车组共有火车:%d 列\n",Length_Tarin_group(train_addressUniti[0]));
Vist_Traingroup(p);
book_ticket_num(s0,0);
getchar();
book_ticket_num(s0,1);
Visit_Stack(s0);
/*******************************************************************************************/
//return 0;
}
/*********************************
int warn_1(int i)//对话框颤抖 目前对话框颤抖会清空内容
{
for(;i>0;i--)
{
system("mode con cols=44 lines=14");
system("mode con cols=44 lines=15");
}
}
**************************************/
/*******************************************/
/*函数功能:初始化列车组单元 */
/*函数参数: */
/*返回值:初始化成功返回1 */
/*******************************************/
int initrain_addressUniti()
{
int i;
for(i=0;i<18;i++)//初始化列车组单元
{
train_addressUniti[i] = 0;
}
return 1;
}
/*******************************************/
/*函数功能:查询余票信息 */
/*函数参数:point_train-指向列车的指针 */
/*返回值:查询成功返回1 */
/*******************************************/
int surplus_tick(TrainType *point_train)
{
printf("剩余硬座:%d 张\n",point_train->surplus_tick_seat);
printf("剩余卧铺:%d 张",point_train->surplus_sleeper_seat);
return 1;
}
/*******************************************/
/*函数功能:订票(根据始发站终点站) */
/*函数参数:point_train-指向列车的指针 */
/*返回值:查询成功返回1 */
/*******************************************/
/*
int book_ticket_place()
{
}
*/
#ifndef _BOOK_TICKT_H
#define _BOOK_TICKT_H
//#include <afx.h>
#include<Windows.h>
#include<stdio.h>
#include"wait_queue.h"
#include"Visual.h"//界面文件
#include"TRAIN_BOX.h"//链表内存储车厢
#include"TRAIN_NUM.h"//链表内存储列车
#include"stack_ZHANGTE.h"//栈内存储旅客信息
/*******************************************/
/*函数功能:订票(根据车次) */
/*函数参数: */
/*返回值:查询成功返回1 */
/*******************************************/
Train_group *train_addressUniti[18];//定义一个存储列车组的数组单元最多可以储存18个列车组(18个铁路局)使用时需先Creat_Traingroup函数建立列车组
/********************************************************/
/*函数功能:硬座空座订票(按顺序检索) */
/*函数参数:h-指向列车的指针 */
/*返回值:成功返回1,失败返回0 */
/********************************************************/
int tick_tickt(TrainType *h,SqStack *s,int guess)//传入要定票的列车,旅客所在栈及位置
{
int i = 0,num_Seat=0,num_Box=0,lp=0,/*lp用来标记是否有空座*/test1;
LNode *Length ;
char str1,str2;//用于整型转换为字符
Length = h->train_box->next;
while(Length)
{
num_Box ++;
if(Length->judg == 1)//判断车厢类型
{
for(num_Seat=0;num_Seat<SEAT;num_Seat++)
{
if(Length->zhang[num_Seat] == 0)//查找空座
{
Length->zhang[num_Seat] = 1;
s->sleeper_tick[guess] = 1;
s->seat_num[guess] = num_Seat; //座位编号存入个人信息(注意从0开始)
h->surplus_tick_seat --;
lp = 1;//有空座
test1 = SEAT;//测试进入if语句条件
goto LOOP3;
}
}
}
Length = Length->next;
}
LOOP3: /*if(lp == 0) //判断是否有余票。订票总函数有替代
{
MessageBox(NULL,"对不起,没有余票","温馨提示",MB_YESNO);
return 0;
}*/
if( IDYES == MessageBox(NULL,"订票成功:请您2小时内付款","温馨提示",MB_YESNO))
system("start file:///D:/专业/新建文件夹/数据结构作业/课程设计/支持包/支付网站.html");
s->seat_num[guess] = num_Seat+1;//座位信息存入旅客信息结构体
s->num_Box[guess] = num_Box;//车厢信息存入旅客信息结构体
return num_Box;
}
/********************************************************/
/*函数功能:卧铺空座订票(按顺序检索) */
/*函数参数:h-指向列车的指针 */
/*返回值:成功返回1,失败返回0 */
/********************************************************/
int sleeper_tickt(TrainType *h,SqStack *s,int guess)//传入要定票的列车,旅客所在栈及位置
{
int i = 0,num_Seat=0,num_Box=0;
LNode *Length ;
char str1,str2;//用于整型转换为字符
// CString string1;
Length = h->train_box->next;
while(Length)
{
num_Box ++;
if(Length->judg == 2)//判断车厢类型
{
for(num_Seat=0;num_Seat<SEAT;num_Seat++)
{
if(Length->zhang[num_Seat] == 0)//查找空座
{
Length->zhang[num_Seat] = 1;
s->sleeper_tick[guess] = 2;
s->seat_num[guess] = num_Seat; //座位编号存入个人信息(注意从0开始)
h->surplus_sleeper_seat --;
goto LOOP4;
}
}
}
Length = Length->next;
}
LOOP4: MessageBox(NULL,"订票成功:请您2小时内付款","温馨提示",MB_OK);
system("start file:///D:/专业/新建文件夹/数据结构作业/课程设计/支持包/支付网站.html");
s->seat_num[guess] = num_Seat+1;//座位信息存入旅客信息结构体
s->num_Box[guess] = num_Box;//车厢信息存入旅客信息结构体
return num_Box;
}
/********************************************************/
/*订票总函数 */
/********************************************************/
int book_ticket_num(SqStack *s,char ID[])//传入旅客所在的栈,及身份证号
{
char a[10];
// HWND hConsole = FindWindow("ConsoleWindowClass",NULL); //获取控制台句柄
// POINT pt;//存储光标位置变量
int guess =0,i = 0,JUDG = 0;//JUDG用来判断是否有符合条件的车次
int book;
Train_group *P;
guess = Serach_Position(s,ID);//查询旅客在栈中位置
printf("\n请输入查询车次(字母大写):");
// getchar();//接收一个回车键!调用函数需要输入回车.用getch()与getche()不需要
gets(a);
while(train_addressUniti[i])
{
P = train_addressUniti[i];
i = i + 1;
while(P->next)
{
if(strcmp(a,P->next->zhang->train_num)==0)
{
s->train[guess] = P->next->zhang;
Vist_Traingroup(P->next->zhang);
//***************************订票代码******************************************
printf("\n我要预定 1.硬座 2.卧铺 3.退出");
printf("\n请输入序号:");
scanf("%d",&book);
// GetCursorPos(&pt); //获取当前光标Desktop坐标
// ScreenToClient(hConsole,&pt);// Desktop坐标转化为控制台坐标
switch(book)
{
case 1 :{
if(!surplus_tick_tickt(P->next->zhang))//判断是否有硬座余票
{
MessageBox(NULL,"对不起,没有余票","温馨提示",MB_ICONEXCLAMATION);
if( IDYES == MessageBox(NULL,"是否加入队列","温馨提示",MB_YESNO))
In_P_Queue(q0,s0,a,ID,s0->Priority[guess]);//加入队列
}
else {
tick_tickt(P->next->zhang,s0,guess);//订票子函数(查询空票及完成订票)
strcpy(s->train_num[guess],a);
gotoxy(56,5);RED_BLACK; puts(" ");//清理原来显示的字符
gotoxy(56,5);RED_BLACK; puts(s->train_num[guess]);// 订票信息显示在旅客信息栏
switch(s->sleeper_tick[guess])
{
case 2 :{gotoxy(62,5); printf("(卧铺)"); break ;}
case 1 :{gotoxy(62,5); printf("(硬座)"); break ;}
default : {gotoxy(56,5); printf("您没有订票"); break ;}
}
}
// gotoxy(pt.x,pt.y);//光标位置恢复
return 0;
}
case 2 :{
if(!surplus_sleeper_tickt(P->next->zhang))//判断是否有硬座余票
MessageBox(NULL,"没有余票","温馨提示",MB_ICONEXCLAMATION);
else {
sleeper_tickt(P->next->zhang,s0,guess);//订票子函数(查询空票及完成订票)
strcpy(s->train_num[guess],a);
gotoxy(56,5);RED_BLACK; puts(" ");//清理原来显示的字符
gotoxy(56,5);RED_BLACK; puts(s->train_num[guess]);
switch(s->sleeper_tick[guess])
{
case 2 :{gotoxy(62,5); printf("(卧铺)"); break ;}
case 1 :{gotoxy(62,5); printf("(硬座)"); break ;}
default : {gotoxy(56,5); printf("您没有订票"); break ;}
}
}
return 0;
}
default: printf("未知错误(2)!");return 0;
}
//*****************************************************************************
//其余部分为依次遍历列车组单元内所有列车组,查找是否有符合车次条件的列车
//*****************************************************************************/
++ JUDG ;
}
P = P->next;
}
}
if(!JUDG)
{
printf("\n没有该车次!");
return 0;
}
else return 1;
}
int refund_tick(SqStack *s,char ID[])//传入要退票的列车,旅客所在栈及位置
{
int i = 0,guess =0;
TrainType *h;
LNode *Length ;
int book;
guess = Serach_Position(s,ID);//查询旅客在栈中位置
h = s->train[guess];
if(s->train[guess]==NULL)
{
MessageBox(NULL,"您还没有订票","温馨提示",MB_OK);
return 0;
}
else {
Length = h->train_box->next;
h->surplus_tick_seat--;
for(i=0;i<s->num_Box[guess];i++)//找到对应车厢
{
Length = Length->next;
}
printf("%d",s->seat_num[guess]);
// (s->seat_num[guess])-1
Length->zhang[s->seat_num[guess]-1] = 0;//该座位标记清零表示空座
strcpy(s->train_num[guess],"0");//旅客所订车票清零
MessageBox(NULL,"退票成功","温馨提示",MB_OK);
gotoxy(56,5);RED_BLACK; puts(" ");//清理原来显示的字符
gotoxy(56,5);
if (strcmp(s->train_num[guess],"0")==0)
{
RED_BLACK; gotoxy(56,5); printf("您没有订票");
}
else {
puts(s->train_num[guess]);
switch(s->sleeper_tick[guess])
{
case 2 :{gotoxy(62,5); printf("(卧铺)"); break ;}
case 1 :{gotoxy(62,5); printf("(硬座)"); break ;}
default : {gotoxy(56,5); printf("您没有订票"); break ;}
}
}
return 1;
}
}
#endif // _BOOK_TICKT_H
#ifndef _Visual_H_
#define _Visual_H_
#include<stdio.h>
#define P_QueueSize 100
#define DataType int
typedef struct Priority_QueueType{
DataType item[P_QueueSize];
int Priority[P_QueueSize];
int rear;
}P_QueueType;
int Init_P_Queue(P_QueueType *Q);//初始化队列
int In_P_Queue(P_QueueType *Q,DataType data,int P_);//入队
int Out_P_Priority_Queue(P_QueueType *Q);//出队
int Length_P_Queue(P_QueueType *Q);//求队长
int Visit_P_Queue(P_QueueType *Q);//遍历队
int main(int argc,char *argv[])
{
P_QueueType Queue,*address;
int i,a;
system("title 优先级队列测试");
address = &Queue;
Init_P_Queue(address);
for(i=1;i<3;i++)
In_P_Queue(address,i,i);
for(i=1;i<7;i++)
In_P_Queue(address,i+4,i);
In_P_Queue(address,10,5);
In_P_Queue(address,20,4);
In_P_Queue(address,30,8);
Visit_P_Queue(address);
printf("队长为:%d\n\n",Length_P_Queue(address));
printf("出队一个元素:%d\n",Out_P_Priority_Queue(address));
printf("队长为:%d\n",Length_P_Queue(address));
return 0;
}
/******************************/
/*函数功能:初始化优先级队列 */
/*函数参数:Q-指向队列的指针 */
/*返回值:插入成功返回1 */
/******************************/
int Init_P_Queue(P_QueueType *Q)
{
int i,j = P_QueueSize;
Q->rear = 0;
for(i=0;i<j;i++)//初始化优先级编号
Q->Priority[i] = 0;
return 1;
}
/**********************************************/
/*函数功能:入队 */
/*函数参数:Q-指向队列的指针 ,item- 入队元素 P_优先级 */
/*返回值:入队成功返回1 */
/**********************************************/
int In_P_Queue(P_QueueType *Q,DataType data,int P_)
{
int i = P_QueueSize,j,m;
if(Q->rear == i)
{
printf("\n\a队列已满!");
return 0;
}
if(P_ <= 0)
{
printf("\n\a最高优先级为1!");
return 0;
}
for(j=Q->rear-1;j>=0;j--)
{
if(Q->Priority[j] <= P_) //判读是否直接追加在队尾
{
Q->item[Q->rear] = data;
Q->Priority[Q->rear] = P_;
Q->rear ++;
return 0;
}
if( Q->Priority[j]>P_ && Q->Priority[j-1] <= P_) //判读插入位置
{
for(m=Q->rear;m>j;m--)
{Q->item[m] = Q->item[m-1];
Q->Priority[m] = Q->Priority[m-1];}
Q->item[j] = data;
Q->Priority[j] = P_;
Q->rear ++;
return 1;
}
}
if(Q->rear == 0)//队列中优先级没有高于插入数据优先级数据,执行插入
{
for(m=Q->rear;m>0;m--)
{Q->item[m] = Q->item[m-1];
Q->Priority[m] = Q->Priority[m-1];}
Q->item[0] = data;
Q->Priority[0] = P_;
Q->rear ++;
return 1;
}
printf("\n\a未知错误!");
return 0;
}
/*******************************/
/*函数功能:出队 */
/*函数参数:Q-指向队列的指针 */
/*返回值:返回出队元素 */
/*******************************/
int Out_P_Priority_Queue(P_QueueType *Q)
{
int i;
DataType a;
if(Q->rear == 0)
{
printf("\n\a队列已空!");
return 0;
}
a = Q->item[0];
for(i=0;i<Q->rear;i++)
Q->item[i] = Q->item[i+1];
Q->rear --;
return a;
}
/******************************/
/*函数功能:求队列长度 */
/*函数参数:Q-指向队列的指针 */
/*返回值:返回出队长 */
/******************************/
int Length_P_Queue(P_QueueType *Q)
{
return Q->rear;
}
/*******************************/
/*函数功能:遍历队 */
/*函数参数:Q-指向队列的指针 */
/*返回值:返回出队长 */
/*******************************/
int Visit_P_Queue(P_QueueType *Q)
{
int i;
if(Q->rear == 0)
{
printf("\n\a队列空!");
return 0;
}
printf("\n队列数据\t优先级\n");
for(i=0;i<Q->rear;i++)
{printf("%d\t\t",Q->item[i]);
printf("%d \n",Q->Priority[i]);}
return 1;
}
#ifndef _WAIT_QUEUE_H_
#define _WAIT_QUEUE_H_
#include<stdio.h>
//#include"stack_ZHANGTE.h"
#define P_QueueSize 100
#define DataType SqStack *//指向旅客所在栈类型
typedef struct Priority_QueueType{
DataType item[P_QueueSize];//指向旅客所对应的栈
char train_num[P_QueueSize][10];//旅客需要预定的车次
char ID[P_QueueSize][20];//旅客身份证号
int Priority[P_QueueSize];//存储优先级
int rear;
};
typedef struct Priority_QueueType P_QueueType ;
P_QueueType queue0;
P_QueueType *q0 = &queue0;//默认生成存储旅客的一个优先级队列
int Init_P_Queue(P_QueueType *Q);//初始化队列
int In_P_Queue(P_QueueType *Q,DataType data,char train_num_value[],char ID_value[],int P_);//入队
int Out_P_Priority_Queue(P_QueueType *Q);//出队
int Length_P_Queue(P_QueueType *Q);//求队长
int Visit_P_Queue(P_QueueType *Q);//遍历队
/*
int main(int argc,char *argv[])
{
P_QueueType Queue,*address;
int i,a;
system("title 优先级队列测试");
address = &Queue;
Init_P_Queue(address);
for(i=1;i<3;i++)
In_P_Queue(address,i,i);
for(i=1;i<7;i++)
In_P_Queue(address,i+4,i);
In_P_Queue(address,10,5);
In_P_Queue(address,20,4);
In_P_Queue(address,30,8);
Visit_P_Queue(address);
printf("队长为:%d\n\n",Length_P_Queue(address));
printf("出队一个元素:%d\n",Out_P_Priority_Queue(address));
printf("队长为:%d\n",Length_P_Queue(address));
return 0;
}
*/
/******************************/
/*函数功能:初始化优先级队列 */
/*函数参数:Q-指向队列的指针 */
/*返回值:插入成功返回1 */
/******************************/
int Init_P_Queue(P_QueueType *Q)
{
int i,j = P_QueueSize;
Q->rear = 0;
for(i=0;i<j;i++)//初始化优先级编号
Q->Priority[i] = 0;
return 1;
}
/**********************************************/
/*函数功能:入队 */
/*函数参数:Q-指向队列的指针 ,item- 入队元素 P_优先级 */
/*返回值:入队成功返回1 */
/**********************************************/
int In_P_Queue(P_QueueType *Q,DataType data,char train_num_value[],char ID_value[],int P_)
/*分别传入队列,旅客对应的栈地址,旅客需要订购的火车车次,旅客的身份证号,旅客的优先级*/
{
int i = P_QueueSize,j,m;
if(Q->rear == i)
{
printf("\n\a队列已满!");
return 0;
}
if(P_ <= 0)
{
printf("\n\a最高优先级为1!");
return 0;
}
for(j=Q->rear-1;j>=0;j--)
{
if(Q->Priority[j] <= P_) //判读是否直接追加在队尾
{
Q->item[Q->rear] = data;//旅客所在栈入队
Q->Priority[Q->rear] = P_;//优先级标记
strcpy(Q->ID[0],ID_value);//身份证入队
strcpy(Q->train_num[0],train_num_value); //车次入队
Q->rear ++;
MessageBox(NULL,"排队成功","温馨提示",MB_OK);
return 0;
}
if( Q->Priority[j]>P_ && Q->Priority[j-1] <= P_) //判读插入位置
{
for(m=Q->rear;m>j;m--)
{Q->item[m] = Q->item[m-1];
Q->Priority[m] = Q->Priority[m-1];}
Q->item[j] = data;
Q->Priority[j] = P_;
strcpy(Q->ID[0],ID_value);//身份证入队
strcpy(Q->train_num[0],train_num_value); //车次入队
MessageBox(NULL,"排队成功","温馨提示",MB_OK);
Q->rear ++;
return 1;
}
}
if(Q->rear == 0)//队列中优先级没有高于插入数据优先级数据,执行插入
{
for(m=Q->rear;m>0;m--)
{Q->item[m] = Q->item[m-1];
Q->Priority[m] = Q->Priority[m-1];}
Q->item[0] = data;
Q->Priority[0] = P_;
strcpy(Q->ID[0],ID_value);//身份证入队
strcpy(Q->train_num[0],train_num_value); //车次入队
MessageBox(NULL,"排队成功","温馨提示",MB_OK);
Q->rear ++;
return 1;
}
printf("\n\a未知错误!");
return 0;
}
/*******************************/
/*函数功能:出队 */
/*函数参数:Q-指向队列的指针 */
/*返回值:返回出队1 */
/*******************************/
int Out_P_Priority_Queue(P_QueueType *Q)
{
int i;
DataType a;
if(Q->rear == 0)
{
printf("\n\a队列已空!");
return 0;
}
a = Q->item[0];
for(i=0;i<Q->rear;i++)
{
Q->item[i] = Q->item[i+1];//旅客所在栈指针出队(删除!无法找回)
strcpy(Q->ID[i],Q->ID[i+1]);//身份证出队(删除!无法找回)
strcpy(Q->train_num[i],Q->train_num[i+1]); //车次出队(删除!无法找回)
Q->Priority[i] = Q->Priority[i+1];//优先级出队(删除!无法找回)
}
Q->rear --;
return 1;
}
/******************************/
/*函数功能:求队列长度 */
/*函数参数:Q-指向队列的指针 */
/*返回值:返回出队长 */
/******************************/
int Length_P_Queue(P_QueueType *Q)
{
return Q->rear;
}
/*******************************/
/*函数功能:遍历队 */
/*函数参数:Q-指向队列的指针 */
/*返回值:返回出队长 */
/*******************************/
int Visit_P_Queue(P_QueueType *Q)
{
int i;
if(Q->rear == 0)
{
printf("\n\a队列空!");
return 0;
}
printf("\n队列数据\t优先级\n");
for(i=0;i<Q->rear;i++)
{
printf("%d\t\t",Q->item[i]);
printf("优 先 级:%d \n",Q->Priority[i]);
printf("身份证号:%s\t\t",Q->ID[i]);
printf("列车车次:%d \n",Q->train_num[i]);
}
return 1;
}
#endif //_WAIT_QUEUE_H_
#ifndef _Visual_H_
#define _Visual_H_
#include<stdio.h>
#include <string.h>
#include "color.h"
#include"stack_ZHANGTE.h"//栈内存储旅客信息
#include<windows.h>
//*******************设置光标位置函数***************************
void gotoxy(int x, int y)
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(hOut, pos); /* 设置光标位置 */
}
//*************************************************************
int face1()//用户界面
{
int i,j = 0,a;
system("mode con cols=84 lines=37");
system("title 欢迎乘坐中国火车");
char text1[8][38]={
{" 铁路乘车提示 \n"},
{" ①: 旅途保持心情愉悦 \n"},
{" ②:不带危险品上车 \n"},
{" ③:遇到危险果断求助警察\n"},
{" ④: 不要太天真 \n"},
{" ⑤:上车后尽量记着给亲朋好友报平安 \n"},
{" ⑥: 常回家看看 \n"},
{" ⑦:每张身份证限购一张 \n"},
};
//system("fontsize:70");
system("color f1");
for(i=0;i<7;i++)
{
for(a=0; a<10000000;a++);
gotoxy(0, i);
YELLOW_RED;
puts(" ");
for(j=i*6;j<i*6+6;j++)
{
for(a=0; a<7;a++)
{gotoxy(42+j, a);
RED_BLACK; puts(" ");}
}
for(j=i*4;j<i*4+4;j++)
{
gotoxy(42, j+7);
BLUE_RED; puts(" ");
}
}
//****************************第一版块内容****************************************
gotoxy(3,1); YELLOW_RED; printf("1.我要订票 2.我要退票");
gotoxy(3,3); printf("3.铁道部官网 4.计算器");
gotoxy(3,5); printf("5.退出 6.关于");
//****************************第二版块内容****************************************
gotoxy(45,1); RED_BLACK; printf("姓 名:");
gotoxy(45,3); printf("身份证号:");
gotoxy(45,5); printf("已订车票:");
/****************************第三版块内容****************************************/
for(i=0;i<8;i++)
{
BLUE_WHITE;
gotoxy(45,10+2*i);//输出间隔一行
for(j=0;j<38;j++)
{
putchar(text1[i][j]);
}
}
//*****************************************************************************/
gotoxy(0,5);WHITE_BLUE;//背景色还原
gotoxy(0,7);
return 0;
}
int face2()//用户/管理员选择界面--返回选择值
{
int a;
system("mode con cols=44 lines=14");
system("color 1f");
system("title 权限选择");
DBLUE_RED; printf("\n\n\n\n\n\n\n\n\n\n\n\n Copyrighr(c)ZhangTe All Rights Reserved ");
LOOP2:DBLUE_YELLOW; gotoxy(16,2);printf("1.我要登录 ");
gotoxy(16,4);printf("2.我要注册 ");
gotoxy(16,6);printf("3.我是管理员 ");
gotoxy(16,9); printf("请选择:");
gotoxy(22,10); printf("  ̄ ");
gotoxy(24,9);
scanf("%d",&a);
if(a!=1&&a!=2&&a!=3)
{
system("title 请输入正确选项");
DBLUE_GREEN; gotoxy(15,0);printf("请输入正确选项\a\n");
gotoxy(24,9);printf(" ");
goto LOOP2; //goto LOOP2
}
DBLUE_RED;
return a;
}
int Test_n_Stack(SqStack *s)
/*用户登录界面 使用时需要将身份证号与密码一纸主函数或者引入用户个人信息指针
及用户功能界面和函数调用*/
{
int i,j=0,a,x,y,clean_y;//clean_y是清理屏幕是用到的
char ID[20];//到时候用指针引入个人信息结构体
char password[7]={0,0,0,0,0,0};//密码小于等于6位
char chose;//用户菜单选择变量
system("color f1");
//************************此段代码修改时注意*******************************************
system("title 用户登录");gotoxy(38,19);
system("mode con cols=84 lines=37");
for(j=83;j>=0;j--)
{
gotoxy(j,2);BLUE_BLACK;printf(" ");WHITE_BLACK;
gotoxy(j,3);BLUE_BLACK;printf(" ");WHITE_BLACK;
gotoxy(j,4);BLUE_BLACK;printf(" ");WHITE_BLACK;
gotoxy(j,5);BLUE_BLACK;printf(" ");WHITE_BLACK;
gotoxy(j,7);RED_BLACK;printf(" ");WHITE_BLACK;
gotoxy(j,8);RED_BLACK;printf(" ");WHITE_BLACK;
}
for(i=0;i<37;i++)
{
gotoxy(20,i); YELLOW_DBLUE; printf(" ");WHITE_BLACK;
gotoxy(3,i); RED_BLACK; printf(" ");WHITE_BLACK;
}
gotoxy(38,17);printf("身份证号:");
gotoxy(38,19);printf("密 码:");
LOOP1: gotoxy(48,17); //LOOP1
gets(ID);
gotoxy(48,19);
for(i=0;i<6;i++)
{
password[i] = getch();
printf("●");
}
//********************判断身份证号与密码是否正确********************************
for(i=s->top;i>=0;i--)
{
if(strcmp(ID,s->IDcard[i])==0 && strcmp(password,s->Password[i])==0)
{
//***********************加载条滚动***************************************
gotoxy(3,6); printf("加载中.....");
for(x=0;x<82;x+=1)
{
gotoxy(x,7);BLACK_DPURPLE; printf("█");
gotoxy(x,8);BLACK_DPURPLE; printf("█");
for(y=0;y<10050000;y++);
}
face1(); //进入用户界面的页面
/*****************************用户功能代码部分*******************************/
Find_Guess_ID(s0,ID);//个人信息载入
while(1)
{
for(clean_y=7;clean_y<37;clean_y++)//清理屏幕
{
gotoxy(0,clean_y);
WHITE_BLACK; printf(" ");
}
gotoxy(0,7);
RED_WHITE; printf("菜单选项:");WHITE_BLACK;
chose = getchar();
switch(chose)
{
case '1': getchar(); book_ticket_num(s0,ID); break;
case '2': getchar();refund_tick(s0,ID); break;
case '3': system("start www.12306.cn"); break;
case '4': system("D:\\专业\\新建文件夹\\数据结构作业\\课程设计\\支持包\\计算器.exe");break;
case '6': system("start file:///D:/专业/新建文件夹/数据结构作业/课程设计/支持包/关于.txt");break;
case '5': return 0; //退出
default : break;//输入其它值直接结束,没有提示(提示显得多此一举)
}
}
/*****************************************************************************/
return 1;
}
}
/***************************密码帐号输入错误处理**********************************/
gotoxy(40,21); BLACK_WHITE;printf("密码或者身份证号错误!\a"); WHITE_BLACK;
gotoxy(46,17);printf(" ");//原来输入的显示屏清理
gotoxy(46,19);printf(" ");
strcpy(ID,"0");//身份证变量清零
strcpy(password,"0");//密码变量清零
goto LOOP1;//返回重新输入 //goto LOOP1
//***********************************************************************************
return 0;
}
int face4()//管理员登陆界面
{
int i,j=0,a;
system("mode con cols=114 lines=24");
system("color 03");
system("title 管理员登录");
//----------------------第一行
for(j=0;j<4;j++)
{RED_BLACK; gotoxy(0,j);printf(" ");}
gotoxy(5,2);RED_WHITE;printf("A.广州铁路集团");
for(j=0;j<4;j++)
{BLUE_BLACK ;gotoxy(28,j);printf(" ");}
gotoxy(33,2);BLUE_WHITE;printf("B.哈尔滨铁路局");
for(j=0;j<4;j++)
{GRAY_BLACK;gotoxy(56,j);printf(" ");}
gotoxy(61,2);GRAY_WHITE;printf("C.沈阳铁路局 ");
//----------------------第二行
for(j=4;j<8;j++)
{GREEN_BLACK; gotoxy(0,j);printf(" ");}
gotoxy(5,6);GREEN_WHITE;printf("D.北京铁路局 ");
for(j=4;j<8;j++)
{BLACK_BLUE ;gotoxy(28,j);printf(" ");}
gotoxy(33,6);BLACK_WHITE;printf("E.太原铁路局 ");
for(j=4;j<8;j++)
{YELLOW_BLACK;gotoxy(56,j);printf(" ");}
gotoxy(61,6);YELLOW_WHITE;printf("F.呼和浩特铁路局 ");
//----------------------第三行
for(j=8;j<12;j++)
{BLUE_BLACK; gotoxy(0,j);printf(" ");}
gotoxy(5,10);BLUE_WHITE;printf("G.郑州铁路局");
for(j=8;j<12;j++)
{GRAY_BLACK ;gotoxy(28,j);printf(" ");}
gotoxy(33,10);GRAY_WHITE;printf("H.武汉铁路局");
for(j=8;j<12;j++)
{RED_BLACK;gotoxy(56,j);printf(" ");}
gotoxy(61,10);RED_WHITE;printf("Y.西安铁路局");
//----------------------第四行
for(j=12;j<16;j++)
{YELLOW_BLACK; gotoxy(0,j);printf(" ");}
gotoxy(5,14);YELLOW_WHITE;printf("J.济南铁路局 ");
for(j=12;j<16;j++)
{BLUE_BLACK ;gotoxy(28,j);printf(" ");}
gotoxy(33,14);BLUE_WHITE;printf("K.上海铁路局");
for(j=12;j<16;j++)
{GRAY_BLACK;gotoxy(56,j);printf(" ");}
gotoxy(61,14);GRAY_WHITE;printf("L.南昌铁路局");
//----------------------第五行
for(j=16;j<20;j++)
{PURPLE_BLACK; gotoxy(0,j);printf(" ");}
gotoxy(5,18);PURPLE_WHITE;printf("J.柳州铁路局 ");
for(j=16;j<20;j++)
{RED_BLACK ;gotoxy(28,j);printf(" ");}
gotoxy(33,18);RED_WHITE;printf("K.成都铁路局 ");
for(j=16;j<20;j++)
{BLUE_BLACK;gotoxy(56,j);printf(" ");}
gotoxy(61,18);BLUE_WHITE;printf("L.昆明铁路局 ");
//----------------------第六行
for(j=20;j<24;j++)
{CYAN_BLACK; gotoxy(0,j);printf(" ");}
gotoxy(5,22);CYAN_WHITE;printf("J.兰州铁路局 ");
for(j=20;j<24;j++)
{GREEN_BLACK ;gotoxy(28,j);printf(" ");}
gotoxy(33,22);GREEN_WHITE;printf("K.乌鲁木齐铁路局");
for(j=20;j<24;j++)
{GRAY_BLACK;gotoxy(56,j);printf(" ");}
gotoxy(61,22);GRAY_WHITE;printf("L.青藏铁路公司");
//----------------------管理员登录输入
BLACK_GREEN;gotoxy(89,6);puts("选择铁路局:");
gotoxy(89,10);puts(" 帐 号:");
gotoxy(89,14);puts(" 密 码:");
gotoxy(89,20);puts("(任意状态按exit返回)");
/*————————————————————————————加载滚动条——————————————————*/
gotoxy(84,23);printf("-----------------------------");
for(i=84;i<113;i+=1)
{
gotoxy(i,23); printf(">");
for(j=0;j<10050000;j++);
}
}
int face5()//注册界面
{
int j,i;
system("color f1");
system("mode con cols=54 lines=20");
system("title 中国铁路欢迎您");
char Password_test[10];
char name[10];//姓名
char IDcard[20];//身份证号
char Password[10];//密码小于等于6位
for(j=53;j>=0;j--)
{
gotoxy(j,1);BLUE_BLACK;printf(" ");WHITE_BLACK;
gotoxy(j,2);BLUE_BLACK;printf(" ");WHITE_BLACK;
gotoxy(j,4);RED_BLACK;printf(" ");WHITE_BLACK;
}
for(i=0;i<20;i++)
{
gotoxy(10,i); YELLOW_DBLUE; printf(" ");WHITE_BLACK;
gotoxy(2,i); RED_BLACK; printf(" ");WHITE_BLACK;
}
gotoxy(20,8);puts("姓 名:");
gotoxy(20,10);puts("身份证号:");
gotoxy(20,12);puts("密 码:");
gotoxy(20,14);puts("是否会员:");
Push_Stack(s0);
/*————————————————————————————加载滚动条——————————————————*/
gotoxy(0,19);printf("-----------------------------------------------------");
for(i=0;i<53;i+=1)
{
gotoxy(i,19); printf(">");
for(j=0;j<10050000;j++);
}
gotoxy(22,9);puts(" ______________");
gotoxy(22,10);puts("│ 注册成功 │");
gotoxy(22,11);puts("  ̄ ̄ ̄ ̄ ̄ ̄ ̄");
gotoxy(0,19);
}
#endif // _Visual_H_
#ifndef _TRAIN_NUM_H_
#define _TRAIN_NUM_H_
#include<stdio.h>
#include"TRAIN_BOX.h"
#include"stack_ZHANGTE.h"//栈内存储旅客信息
#define LEN1 sizeof(struct Train_group)//开辟一个结构体内存,该内存内存一列火车
#define LEN_TRAIN sizeof(struct train)//开辟一列火车
typedef struct train //定义火车信息结构体
{
char train_num[10];//车次
char city_takeoff[10];//始发站
char city_arrive[10];//终点站
char time_takeoff[10];//出发时间
char time_through[10];//行驶时间/小时
int price_tick_seat;//硬座价格
int price_sleeper_seat;//卧铺价格
int surplus_tick_seat;//硬座余票
int surplus_sleeper_seat;//卧铺余票
LNode *train_box;//定义车厢。变量指向列车车厢链表。每个结点代表一个车厢
}TrainType;
typedef struct Train_group{//一列火车
TrainType *zhang;//指向列车信息的指针
struct Train_group *next;
}Train_group;
Train_group *Creat_Traingroup()//建立一个头结点(一个列车组),返回指向该结点的指针,注意指向结第一个点指针为list->next
{
Train_group *h;
h = malloc(LEN1);
h->zhang = 1;
h->next = NULL;
return h;
}
/********************************************************/
/*函数功能:插入一列火车 */
/*函数参数:h-指向列车组的指针, pos为插入位置, */
/*返回值:插入成功返回1,插入失败0 */
/********************************************************/
int Insert_Train(Train_group *h,int pos)
{
Train_group *newlist, *movefind;
int i = 0;
if(pos<0)
{
printf("插入位置出错!\n\a");
return 0;
};
movefind = h;
while (i < pos)//寻找被插入位置的前驱
{
if(movefind->next == NULL&&i < pos)
{
printf("插入位置出错!\n\a");
return 0;
};
movefind = movefind->next;
i++;
}
newlist = malloc(LEN1);
newlist->zhang = malloc(LEN_TRAIN);
printf("\n请输入车次:");
gets((newlist->zhang)->train_num);
printf("\n请输入始发站:");
gets((newlist->zhang)->city_takeoff);
printf("\n请输入终点站:");
gets((newlist->zhang)->city_arrive);
printf("\n请输入出发时间:");
gets((newlist->zhang)->time_takeoff);
printf("\n请输入行驶时间:");
gets((newlist->zhang)->time_through);
printf("\n请输入硬座价格:");
scanf("%d",&(newlist->zhang)->price_tick_seat);
printf("\n请输入卧铺价格:");
scanf("%d",&(newlist->zhang)->price_sleeper_seat);
getchar();
(newlist->zhang)->train_box = Creat_Train();
((newlist->zhang)->surplus_sleeper_seat) = surplus_sleeper_tickt(newlist->zhang);//卧铺余票
((newlist->zhang)->surplus_tick_seat) = surplus_tick_tickt(newlist->zhang);//硬座余票
newlist->next = movefind->next;//插入元素
movefind->next = newlist;
return 1;
}
/********************************************************/
/*函数功能:打印列车信息 */
/*函数参数:h-指向列车的指针 */
/*返回值:打印成功返回1 */
/********************************************************/
int Vist_Traingroup(TrainType *h)//打印列车信息
{
if(h)
{
printf("_________________________________________");
printf("\n车次:%s ",h->train_num);
printf("\n始发站:%s ",h->city_takeoff);
printf("\n终点站:%s ",h->city_arrive);
printf("\n出发时间:%s ",h->time_takeoff);
printf("\n行驶时间:%s ",h->time_through);
printf("\n硬座价格:%d ",h->price_tick_seat);
printf("\n卧铺价格:%d ",h->price_sleeper_seat);
printf("\n硬座余票:%d ",h->surplus_tick_seat);
printf("\n卧铺余票:%d ",h->surplus_sleeper_seat);
printf("\n_________________________________________");
return 1;
}
else {
printf("怎么回事?");system("pause");
MessageBox(NULL,"没有该趟列车","温馨提示",MB_OK);
}
return 0;
}
/********************************************************/
/*函数功能:统计硬座余票 */
/*函数参数:h-指向列车的指针 */
/*返回值:返回硬座余票 */
/********************************************************/
int surplus_tick_tickt(TrainType *h)//统计硬座余票,返回硬座余票
{
int i = 0,num=0;
LNode *Length ;
Length = h->train_box->next;
while(Length)
{
if(Length->judg == 1)//判断车厢类型
{
for(i=0;i<SEAT;i++)
{
if(Length->zhang[i] == 0)//统计余票
num ++;
}
}
Length = Length->next;
}
return num;
}
/********************************************************/
/*函数功能:统计卧铺余票 */
/*函数参数:h-指向列车的指针 */
/*返回值:返回卧铺余票 */
/********************************************************/
int surplus_sleeper_tickt(TrainType *h)//统计卧铺座余票,返回卧铺余票
{
int i = 0,num=0;
LNode *Length ;
Length = h->train_box->next;
while(Length)
{
if(Length->judg == 2)//统计卧铺余票
{
for(i=0;i<SLEEP;i++)
if(Length->zhang[i] == 0)
num++;
}
Length = Length->next;
}
return num;
}
/********************************************************/
/*函数功能:统计列车组长度 */
/*函数参数:h-指向列车组指针 */
/*返回值:返回列车组长度 */
/********************************************************/
int Length_Tarin_group(Train_group *h)//求列车组长度
{
int i = 0;
Train_group *Length ;
Length = h->next;
while(Length)
{
i++;
Length = Length->next;
}
return i;
}
/********************************************************/
/*函数功能:初始三列火车K8100 , K5200, K4120 */
/*函数参数:h-指向列车组的指针, pos为插入位置, */
/*返回值:插入成功返回1,插入失败0 */
/********************************************************/
/********************************************************/
int Insert_Train_ceshi1(Train_group *h,int pos)
{
Train_group *newlist, *movefind;
int i = 0;
if(pos<0)
{
printf("插入位置出错!\n\a");
return 0;
};
movefind = h;
while (i < pos)//寻找被插入位置的前驱
{
if(movefind->next == NULL&&i < pos)
{
printf("插入位置出错!\n\a");
return 0;
};
movefind = movefind->next;
i++;
}
newlist = malloc(LEN1);
newlist->zhang = malloc(LEN_TRAIN);
strcpy((newlist->zhang)->train_num,"K8100");
strcpy((newlist->zhang)->city_takeoff,"西安");
strcpy((newlist->zhang)->city_arrive,"榆林");
strcpy((newlist->zhang)->time_takeoff,"23:29");
strcpy((newlist->zhang)->time_through,"7小时28分钟");
(newlist->zhang)->price_tick_seat = 81;
(newlist->zhang)->price_sleeper_seat = 128;
(newlist->zhang)->train_box = Creat_Train();
((newlist->zhang)->surplus_sleeper_seat) = surplus_sleeper_tickt(newlist->zhang);//卧铺余票
((newlist->zhang)->surplus_tick_seat) = surplus_tick_tickt(newlist->zhang);//硬座余票
newlist->next = movefind->next;//插入元素
movefind->next = newlist;
return 1;
}
int Insert_Train_ceshi2(Train_group *h,int pos)
{
Train_group *newlist, *movefind;
int i = 0;
if(pos<0)
{
printf("插入位置出错!\n\a");
return 0;
};
movefind = h;
while (i < pos)//寻找被插入位置的前驱
{
if(movefind->next == NULL&&i < pos)
{
printf("插入位置出错!\n\a");
return 0;
};
movefind = movefind->next;
i++;
}
newlist = malloc(LEN1);
newlist->zhang = malloc(LEN_TRAIN);
strcpy((newlist->zhang)->train_num,"K5200");
strcpy((newlist->zhang)->city_takeoff,"成都");
strcpy((newlist->zhang)->city_arrive,"北京");
strcpy((newlist->zhang)->time_takeoff,"23:29");
strcpy((newlist->zhang)->time_through,"15小时20分钟");
(newlist->zhang)->price_tick_seat = 85;
(newlist->zhang)->price_sleeper_seat = 140;
(newlist->zhang)->train_box = Creat_Train();
((newlist->zhang)->surplus_sleeper_seat) = surplus_sleeper_tickt(newlist->zhang);//卧铺余票
((newlist->zhang)->surplus_tick_seat) = surplus_tick_tickt(newlist->zhang);//硬座余票
newlist->next = movefind->next;//插入元素
movefind->next = newlist;
return 1;
}
int Insert_Train_ceshi3(Train_group *h,int pos)
{
Train_group *newlist, *movefind;
int i = 0;
if(pos<0)
{
printf("插入位置出错!\n\a");
return 0;
};
movefind = h;
while (i < pos)//寻找被插入位置的前驱
{
if(movefind->next == NULL&&i < pos)
{
printf("插入位置出错!\n\a");
return 0;
};
movefind = movefind->next;
i++;
}
newlist = malloc(LEN1);
newlist->zhang = malloc(LEN_TRAIN);
strcpy((newlist->zhang)->train_num,"K4120");
strcpy((newlist->zhang)->city_takeoff,"西安");
strcpy((newlist->zhang)->city_arrive,"鄂尔多斯");
strcpy((newlist->zhang)->time_takeoff,"23:15");
strcpy((newlist->zhang)->time_through,"8小时15分钟");
(newlist->zhang)->price_tick_seat = 90;
(newlist->zhang)->price_sleeper_seat = 142;
(newlist->zhang)->train_box = Creat_Train();
((newlist->zhang)->surplus_sleeper_seat) = surplus_sleeper_tickt(newlist->zhang);//卧铺余票
((newlist->zhang)->surplus_tick_seat) = surplus_tick_tickt(newlist->zhang);//硬座余票
newlist->next = movefind->next;//插入元素
movefind->next = newlist;
return 1;
}
/********************************************************************/
#endif // _TRAIN_NUM_H_
#ifndef _TRAIN_BOX_H_
#define _TRAIN_BOX_H_
#include<stdio.h>
#define LEN sizeof(struct Node)
#define SEAT 2//硬座座位数
#define SLEEP 1//卧铺座位数
typedef struct Node{
int judg;//judg=1为普通车厢,等于2为卧铺车厢
int zhang[SEAT];//代表座位,硬座SEAT个座位,卧铺随便个小于硬座个座位
struct Node *next;
}LNode , *PNode,*LinkList;
int Insert_Box(LNode *h,int pos,int type)
{/*插入车厢,h为需插入列车指针,pos为插入位置,type为插入普车厢类型
插入成功返回1,插入失败(输入位置大于链表长度或小于0)返回0*/
LNode *newlist, *movefind;
int i = 0;
if(pos<0)
{
printf("插入位置出错!\n\a");
return 0;
};
movefind = h;
while (i < pos)//寻找被插入位置的前驱
{
if(movefind->next == NULL&&i < pos)
{
printf("插入位置出错!\n\a");
return 0;
};
movefind = movefind->next;
i++;
}
newlist = malloc(LEN);
newlist->judg = type;
for(i=0;i<SEAT;i++)
newlist->zhang[i] = 0;
newlist->next = movefind->next;//插入元素
movefind->next = newlist;
return 1;
}
LNode *Creat_Train()//建立一个火车,返回指向该车的指针,注意指向第一个车厢指针为list->next。默认0-6,12-17硬座。7-11卧铺
{
int i;
LNode *h;
h = malloc(LEN);
h->next = NULL;
for(i=0;i<1;i++)//只有一个硬座车厢
{
Insert_Box(h,i,1);
}
for(i=1;i<2;i++)//只有一个卧铺车厢一个座位
{
Insert_Box(h,i,2);
}
/*
for(i=12;i<18;i++)
{
Insert_Box(h,i,1);
}
*/
return h;
}
int Delete_Box_pos(LNode *h,int pos)//删除车厢
{/*h为指向列车的指针,pos为删除车厢位置,
如果没有列车为空或者删除位置不存在返回0,删除成功返回1*/
LNode *movefind1,*movefind2;
int i = 0;
if(!h->next||pos<0)//判链表是否为空,或者删除位置小于0
printf("删除出错!\n\a");
movefind1 = h;
if(!movefind1->next)
return 0;
while(i <= pos-1)//指向删除结点前驱
{
if(((movefind1->next)->next)==NULL&&i <= pos-1)//如果被删除结点后继为空,pos还有值(上溢),返回0
printf("删除出错!\n\a");
movefind1 = movefind1->next;
i++;
}
movefind2 = movefind1->next;
if(movefind2->next)
movefind1->next = movefind2->next;
else movefind1->next = NULL;
free(movefind2);
return 1;
}
#endif
/************************************************************
/*Copyright (c) 2014.张特.陕西科技大学
/*All rights reserved.
/*
/*文件名称:stack_ZHANGTE.h
/*说 明:本文件为数据结构栈头文件,其中头文件默认
/* 定义了四个容量为100的栈分别为stick0,
/* stick1,stick2,stick3.以及分别指向它们的指
/* 针s0,s1,s2,s3.使用时需要对栈用InitStack函数
/* 进行初始化,用户如有更多需求可自行参照定义
/*
/*当前版本:0.1
/*作 者:张特
/*完成日期:2014年5月18日
/************************************************************/
#ifndef _STACK_ZHANGTE_H_
#define _STACK_ZHANGTE_H_
#include"TRAIN_NUM.h"//链表内存储列车
#include<stdio.h>
#include"TRAIN_BOX.h"//链表内存储车厢
#define STACKSIZE 150
struct stack_1{//旅客信息
char name[STACKSIZE][10];//姓名
char IDcard[STACKSIZE][20];//身份证号
char Password[STACKSIZE][10];//密码小于等于6位
int seat_num[STACKSIZE]; //旅客的座位编号
int num_Box[STACKSIZE]; //编号车厢
int sleeper_tick[STACKSIZE]; //车厢类型,1为普通车厢,等于0为卧铺车厢
char train_num[STACKSIZE][10];//车次
char Priority[STACKSIZE];
TrainType *train[STACKSIZE]; //指向旅客所在列车
int top ;
};
typedef struct stack_1 SqStack ;
SqStack stick0;
SqStack *s0 = &stick0;
SqStack stick1;
SqStack *s1 = &stick1;
SqStack stick2;
SqStack *s2 = &stick2;
SqStack stick3;
SqStack *s3 = &stick3;
/***********************************************************/
/*Functionality function:初始化(建立空栈) */
/*Function Parameters;s-指向栈的指针 */
/*Function return value:建栈成功返回1 ;栈顶默认存储NULL */
/***********************************************************/
int InitStack(SqStack *s)
{
s->top = -1;
return 1;
}
/*******************************************************************/
/*Functionality function:入栈(旅客订票入栈) */
/*Function Parameters:s-指向栈的指针 i-座位类型(1为硬座,2为卧铺)*/
/* seat_num-座位编号 Box-座位所在车厢 */
/*Function return value:栈满返回0;入栈成功返回1,否则提示未知错误 */
/*******************************************************************/
int Push_Stack(SqStack *s)
{
if(s->top >= STACKSIZE-1)
{
printf("\n内存已满!\a");
return 0;
}
else { s->top++;
//getchar();//接收回车
//printf("\n\n姓 名:");
gotoxy(30,8); gets(s->name[s->top]);
// printf("\n身份证号:");
gotoxy(30,10); gets(s->IDcard[s->top]);
// printf("\n密码:");
gotoxy(30,12); gets(s->Password[s->top]);
gotoxy(30,14); scanf("%d",&s->Priority[s->top]);;
return 1;}
}
/**************************************************************/
/*Functionality function:遍历栈(本函数遍历结果打印在屏幕上)*/
/*Function Parameters:s-指向栈的指针 */
/*Function return value:遍历完成返回1,空栈返回0 */
/*Remarks:栈中元素从栈顶开始依次打印 */
/**************************************************************/
int Visit_Stack(SqStack *s)
{
int i;
if (s->top<0)
return 0;
else
for(i=0;i<=s->top;i++)
{
printf("\n姓名:%s ",s->name[i]);
printf("\n身份证号:%s ",s->IDcard[i]);
printf("\n车次:%s ",s->train_num[i]);
printf("\n车厢号:%d ",s->num_Box[i]);
printf("\n座位号:%d ",s->seat_num[i]);
}
return 1;
printf("未知错误!\a\n");
}
/**************************************************************/
/*Functionality function:统计栈旅客人数 */
/*Function Parameters:s-指向栈的指针 */
/*Function return value:遍历完成返回个数,空栈返回0 */
/**************************************************************/
int Statistics_Stack(SqStack *s)
{
int i=(s->top);
printf("共有旅客人数:%d",++i);
return 1;
}
/*****************************************************/
/*Functionality function:查询中旅客信息(身份证号,密码)*/
/*Function parameters;s-指向栈的指针 n-返回栈顶元素 */
/*Function return value:栈空返回0,取出返回1 */
/*****************************************************/
/*
int Test_n_Stack(SqStack *s)
{
char a[20];
int i;
if (s->top <= -1)
{
printf("没有旅客!\n");
return 0;
}
printf("\n请输入您的身份证号:");
gets(a);
for(i=s->top;i>=0;i--)
if(strcmp(a,s->IDcard[i])==0 && 1)
{
printf("\n姓名:%d ",s->name[i]);
printf("\n身份证号:%d ",s->IDcard[i]);
}
printf("错误!\a");
return 0;
}
*/
/*****************************************************/
/*Functionality function:取栈中旅客信息(按身份证号)*/
/*Function parameters;s-指向栈的指针 n-返回栈顶元素 */
/*Function return value:栈空返回0,取出返回1 */
/*****************************************************/
/*
int Search_n_Stack(SqStack *s,)
{
char a[20];
int i;
if (s->top <= -1)
{
printf("没有旅客!\n");
return 0;
}
printf("\n请输入您的身份证号:");
gets(a);
for(i=s->top;i>=0;i--)
if(strcmp(a,s->IDcard[i])==0)
{
printf("\n姓名:%d ",s->name[i]);
printf("\n身份证号:%d ",s->IDcard[i]);
}
printf("查找元素未知错误!\a");
return 0;
}*/
/*
/**************************************************************/
/*Functionality function:遍历栈(寻找相应旅客)(按身份证) */
/*Function Parameters:s-指向栈的指针 */
/*Function return value:遍历完成返回1,空栈返回0 */
/*Remarks:栈中元素从栈顶开始依次打印 */
/**************************************************************/
int Find_Guess_ID(SqStack *s,char ID[])
{
int i;
if (s->top<0)
return 0;
else {
for(i=s->top;i>=0;i--)
if(strcmp(ID,s->IDcard[i])==0)
{
gotoxy(56,1); RED_BLACK;printf("%s ",s->name[i]);
gotoxy(56,3); printf("%s ",s->IDcard[i]);
gotoxy(56,5); printf("%s ",s->train_num[i]);
if(s->Priority[i]==1)//判断是否会员。是会员则加一个V
{
gotoxy(76,3);PURPLE_BLACK;printf(" ");RED_BLACK;
gotoxy(76,4);PURPLE_BLACK;printf(" ");RED_BLACK;
gotoxy(76,5);PURPLE_BLACK;printf(" ");RED_BLACK;
gotoxy(78,4);PURPLE_BLUE;printf("V");RED_BLACK;
}
switch(s->sleeper_tick[i])
{
case 2 :{gotoxy(66,5); printf("(卧铺)"); break ;}
case 1 :{gotoxy(66,5); printf("(硬座)"); break ;}
default : {gotoxy(56,5); printf("您没有订票"); break ;}
}
}
return 1;}
printf("未知错误!\a\n");
}
/**************************************************************/
/*Functionality function:遍历栈(寻找相应旅客)(按姓名) */
/*Function Parameters:s-指向栈的指针 */
/*Function return value:遍历完成返回1,空栈返回0 */
/*Remarks:栈中元素从栈顶开始依次打印 */
/**************************************************************/
/*
int Find_Guess_Name(SqStack *s,char Name[])
{
int i;
if (s->top<0)
return 0;
else {for(i=s->top;i>=0;i--)
printf("\n姓名:%d ",s->name);
printf("\n身份证号:%d ",s->IDcard);
return 1;}
printf("未知错误!\a\n");
}*/
/*******************************************************************/
/*Functionality function:初始化4个人入栈(旅客订票入栈) */
/*Function Parameters:s-指向栈的指针 i-座位类型(1为硬座,2为卧铺)*/
/* seat_num-座位编号 Box-座位所在车厢 */
/*Function return value:栈满返回0;入栈成功返回1,否则提示未知错误 */
/*******************************************************************/
/**************************四个人*******************************/
int Push_Stack_Ceshi1(SqStack *s)
{
if(s->top >= STACKSIZE-1)
{
printf("\n内存已满!\a");
return 0;
}
else { s->top++;
strcpy(s->name[s->top],"王建华");
strcpy(s->IDcard[s->top],"612753198505064045");
strcpy(s->Password[s->top],"111111");
s->Priority[s->top] = 2;//优先级
return 1;};
printf("输入未知错误!\a\n");
}
int Push_Stack_Ceshi2(SqStack *s)
{
if(s->top >= STACKSIZE-1)
{
printf("\n内存已满!\a");
return 0;
}
else { s->top++;
strcpy(s->name[s->top],"章子怡");
strcpy(s->IDcard[s->top],"123456");
strcpy(s->Password[s->top],"222222");
s->Priority[s->top] = 1;//优先级
return 1;};
printf("输入未知错误!\a\n");
}
int Push_Stack_Ceshi3(SqStack *s)
{
if(s->top >= STACKSIZE-1)
{
printf("\n内存已满!\a");
return 0;
}
else { s->top++;
strcpy(s->name[s->top],"朱元璋");
strcpy(s->IDcard[s->top],"612732132810213013");
strcpy(s->Password[s->top],"333333");
s->Priority[s->top] = 3;//优先级
return 1;};
printf("输入未知错误!\a\n");
}
int Push_Stack_Ceshi4(SqStack *s)
{
if(s->top >= STACKSIZE-1)
{
printf("\n内存已满!\a");
return 0;
}
else { s->top++;
strcpy(s->name[s->top],"方舟子");
strcpy(s->IDcard[s->top],"1543543");
strcpy(s->Password[s->top],"444444");
s->Priority[s->top] = 4;//优先级
return 1;};
printf("输入未知错误!\a\n");
}
/**************************************************************/
/*Functionality function:遍历栈(根据身份证号查询旅客在栈中位置)*/
/*Function Parameters:s-指向栈的指针 */
/*Function return value:遍历完成返回位置,空栈返回0 */
/*Remarks:栈中元素从栈顶开始依次打印 */
/**************************************************************/
int Serach_Position(SqStack *s,char ID[])
{
int i ;
if (s->top<0)
return 0;
else
for(i=s->top;i>=0;i--)
{
if(strcmp(ID,s->IDcard[i])==0)
{
return i;
}
return 0;}
printf("未知错误!\a\n");
}
#endif // _STACK_H_
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define WHITE_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE )
#define WHITE_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_BLUE)
#define WHITE_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_BLUE)
#define WHITE_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED)
#define WHITE_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED)
#define WHITE_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_GREEN)
#define WHITE_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_GREEN)
#define WHITE_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED |FOREGROUND_GREEN)
#define WHITE_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED |FOREGROUND_GREEN)
#define WHITE_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED |FOREGROUND_BLUE)
#define WHITE_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED |FOREGROUND_BLUE)
#define WHITE_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_GREEN|FOREGROUND_BLUE)
#define WHITE_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_GREEN|FOREGROUND_BLUE)
#define GRAY_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY)
#define GRAY_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY|FOREGROUND_INTENSITY |FOREGROUND_RED)
#define GRAY_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY|FOREGROUND_INTENSITY |FOREGROUND_GREEN)
#define GRAY_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY|FOREGROUND_INTENSITY |FOREGROUND_BLUE)
#define GRAY_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY|FOREGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_GREEN)
#define GRAY_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY|FOREGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_BLUE)
#define GRAY_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY|FOREGROUND_INTENSITY |FOREGROUND_GREEN|FOREGROUND_BLUE)
#define GRAY_WHITE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY|FOREGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN)
#define GRAY_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY |FOREGROUND_RED)
#define GRAY_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY |FOREGROUND_GREEN)
#define GRAY_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY |FOREGROUND_BLUE)
#define GRAY_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_GREEN)
#define GRAY_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_BLUE)
#define GRAY_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY |FOREGROUND_GREEN|FOREGROUND_BLUE)
#define BLACK_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED )
#define BLACK_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN)
#define BLACK_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE)
#define BLACK_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_BLUE)
#define BLACK_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN )
#define BLACK_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_GREEN | FOREGROUND_BLUE)
#define BLACK_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED )
#define BLACK_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE)
#define BLACK_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN)
#define BLACK_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_BLUE)
#define BLACK_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN )
#define BLACK_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE)
#define BLACK_WHITE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define RED_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED )
#define RED_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED |FOREGROUND_RED)
#define RED_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | FOREGROUND_GREEN)
#define RED_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | FOREGROUND_BLUE)
#define RED_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED |FOREGROUND_RED | FOREGROUND_GREEN )
#define RED_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED |FOREGROUND_RED | FOREGROUND_BLUE)
#define RED_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define RED_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED |FOREGROUND_RED)
#define RED_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | FOREGROUND_GREEN)
#define RED_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | FOREGROUND_BLUE)
#define RED_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED |FOREGROUND_RED | FOREGROUND_GREEN )
#define RED_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED |FOREGROUND_RED | FOREGROUND_BLUE)
#define RED_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define GREEN_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN )
#define GREEN_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN |FOREGROUND_RED)
#define GREEN_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | FOREGROUND_GREEN)
#define GREEN_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | FOREGROUND_BLUE)
#define GREEN_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN |FOREGROUND_RED | FOREGROUND_GREEN )
#define GREEN_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN |FOREGROUND_RED | FOREGROUND_BLUE)
#define GREEN_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define GREEN_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN |FOREGROUND_RED)
#define GREEN_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN | FOREGROUND_GREEN)
#define GREEN_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN | FOREGROUND_BLUE)
#define GREEN_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN |FOREGROUND_RED | FOREGROUND_GREEN )
#define GREEN_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN |FOREGROUND_RED | FOREGROUND_BLUE)
#define GREEN_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define BLUE_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_BLUE )
#define BLUE_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_BLUE |FOREGROUND_RED)
#define BLUE_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_BLUE | FOREGROUND_GREEN)
#define BLUE_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_BLUE | FOREGROUND_BLUE)
#define BLUE_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define BLUE_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define BLUE_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define BLUE_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_BLUE |FOREGROUND_RED)
#define BLUE_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_BLUE | FOREGROUND_GREEN)
#define BLUE_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_BLUE | FOREGROUND_BLUE)
#define BLUE_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define BLUE_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define BLUE_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define YELLOW_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED)
#define YELLOW_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_GREEN)
#define YELLOW_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_BLUE)
#define YELLOW_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED | FOREGROUND_GREEN )
#define YELLOW_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED | FOREGROUND_BLUE)
#define YELLOW_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_GREEN | FOREGROUND_BLUE)
#define YELLOW_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED)
#define YELLOW_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_GREEN)
#define YELLOW_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_BLUE)
#define YELLOW_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED | FOREGROUND_GREEN )
#define YELLOW_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED | FOREGROUND_BLUE)
#define YELLOW_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_GREEN | FOREGROUND_BLUE)
#define YELLOW_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN )
#define PURPLE_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE )
#define PURPLE_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED)
#define PURPLE_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_GREEN)
#define PURPLE_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_BLUE)
#define PURPLE_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define PURPLE_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define PURPLE_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define PURPLE_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED)
#define PURPLE_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_GREEN)
#define PURPLE_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_BLUE)
#define PURPLE_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define PURPLE_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define PURPLE_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define CYAN_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE )
#define CYAN_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED)
#define CYAN_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_GREEN)
#define CYAN_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_BLUE)
#define CYAN_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define CYAN_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define CYAN_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define CYAN_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED)
#define CYAN_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_GREEN)
#define CYAN_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_BLUE)
#define CYAN_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define CYAN_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define CYAN_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DRED_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED )
#define DRED_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED |FOREGROUND_RED)
#define DRED_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | FOREGROUND_GREEN)
#define DRED_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | FOREGROUND_BLUE)
#define DRED_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED |FOREGROUND_RED | FOREGROUND_GREEN )
#define DRED_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED |FOREGROUND_RED | FOREGROUND_BLUE)
#define DRED_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DRED_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED |FOREGROUND_RED)
#define DRED_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | FOREGROUND_GREEN)
#define DRED_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | FOREGROUND_BLUE)
#define DRED_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED |FOREGROUND_RED | FOREGROUND_GREEN )
#define DRED_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED |FOREGROUND_RED | FOREGROUND_BLUE)
#define DRED_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DGREEN_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN )
#define DGREEN_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN |FOREGROUND_RED)
#define DGREEN_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN | FOREGROUND_GREEN)
#define DGREEN_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN | FOREGROUND_BLUE)
#define DGREEN_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN |FOREGROUND_RED | FOREGROUND_GREEN )
#define DGREEN_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN |FOREGROUND_RED | FOREGROUND_BLUE)
#define DGREEN_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DGREEN_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN |FOREGROUND_RED)
#define DGREEN_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | FOREGROUND_GREEN)
#define DGREEN_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | FOREGROUND_BLUE)
#define DGREEN_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN |FOREGROUND_RED | FOREGROUND_GREEN )
#define DGREEN_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN |FOREGROUND_RED | FOREGROUND_BLUE)
#define DGREEN_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DBLUE_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE )
#define DBLUE_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_BLUE |FOREGROUND_RED)
#define DBLUE_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_BLUE | FOREGROUND_GREEN)
#define DBLUE_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_BLUE | FOREGROUND_BLUE)
#define DBLUE_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define DBLUE_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define DBLUE_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DBLUE_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE |FOREGROUND_RED)
#define DBLUE_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE | FOREGROUND_GREEN)
#define DBLUE_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE | FOREGROUND_BLUE)
#define DBLUE_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define DBLUE_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define DBLUE_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DYELLOW_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED)
#define DYELLOW_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_GREEN)
#define DYELLOW_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_BLUE)
#define DYELLOW_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED | FOREGROUND_GREEN )
#define DYELLOW_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED | FOREGROUND_BLUE)
#define DYELLOW_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DYELLOW_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED)
#define DYELLOW_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_GREEN)
#define DYELLOW_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_BLUE)
#define DYELLOW_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED | FOREGROUND_GREEN )
#define DYELLOW_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_GREEN|FOREGROUND_RED | FOREGROUND_BLUE)
#define DYELLOW_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_GREEN| FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DYELLOW_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_GREEN )
#define DPURPLE_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_BLUE )
#define DPURPLE_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED)
#define DPURPLE_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_GREEN)
#define DPURPLE_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_BLUE)
#define DPURPLE_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define DPURPLE_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define DPURPLE_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DPURPLE_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED)
#define DPURPLE_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_GREEN)
#define DPURPLE_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_BLUE)
#define DPURPLE_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define DPURPLE_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define DPURPLE_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DCYAN_BLACK SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | BACKGROUND_BLUE )
#define DCYAN_RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED)
#define DCYAN_GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_GREEN)
#define DCYAN_BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_BLUE)
#define DCYAN_YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define DCYAN_PURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define DCYAN_CYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define DCYAN_DRED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED)
#define DCYAN_DGREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_GREEN)
#define DCYAN_DBLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_BLUE)
#define DCYAN_DYELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_GREEN )
#define DCYAN_DPURPLE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED | FOREGROUND_BLUE)
#define DCYAN_DCYAN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_BLUE)
//183
#define GREEN_WHITE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | FOREGROUND_GREEN| FOREGROUND_RED| FOREGROUND_BLUE)
#define RED_WHITE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED | FOREGROUND_GREEN| FOREGROUND_RED| FOREGROUND_BLUE)
#define BLUE_WHITE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_BLUE | FOREGROUND_GREEN| FOREGROUND_RED| FOREGROUND_BLUE)
#define CYAN_WHITE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_GREEN | BACKGROUND_BLUE | FOREGROUND_GREEN| FOREGROUND_RED| FOREGROUND_BLUE)
#define PURPLE_WHITE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED| BACKGROUND_BLUE | FOREGROUND_GREEN| FOREGROUND_RED| FOREGROUND_BLUE)
#define YELLOW_WHITE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY| BACKGROUND_RED| BACKGROUND_GREEN | FOREGROUND_GREEN| FOREGROUND_RED| FOREGROUND_BLUE)
#define DRED_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY |BACKGROUND_RED )
#define DGREEN_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY |BACKGROUND_GREEN )
#define DBLUE_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY |BACKGROUND_BLUE )
#define DYELLOW_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY |BACKGROUND_RED |BACKGROUND_GREEN )
#define DPURPLE_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY |BACKGROUND_RED |BACKGROUND_BLUE)
#define DCYAN_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY |BACKGROUND_BLUE |BACKGROUND_GREEN )
#define RED_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_INTENSITY |BACKGROUND_RED )
#define GREEN_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_INTENSITY |BACKGROUND_GREEN )
#define BLUE_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_INTENSITY|BACKGROUND_BLUE )
#define YELLOW_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_INTENSITY |BACKGROUND_RED |BACKGROUND_GREEN )
#define PURPLE_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_INTENSITY |BACKGROUND_RED |BACKGROUND_BLUE)
#define CYAN_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_INTENSITY |BACKGROUND_BLUE |BACKGROUND_GREEN )
#define WHITE_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_INTENSITY |BACKGROUND_RED |BACKGROUND_BLUE |BACKGROUND_GREEN)
#define BLACK_GRAY SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_INTENSITY )
/*
int handle()
{
HANDLE consoleHwnd;
consoleHwnd = GetStdHandle(STD_OUTPUT_HANDLE);
}
*/