您的位置:首页 > 理论基础 > 数据结构算法

数据结构之反黄牛火车票订票系统

2015-09-05 10:54 555 查看
这是我大二数据结构课设的项目,现在看来当时的代码写的惨不忍睹,不过那仍是我宝贵的过去。反黄牛是基于现在黄牛党刷票的一个现状:由于火车票实行实现实名制,黄牛只能先用自己收集的***预先订票,当你因为没有余票去找黄牛党订票时他们会退订自己的票,同时及时的用你的信息去刷他们刚退出来的那张票。而我的反黄牛思路就是每个订票人排队(队列),当重新出现余票时系统会自动将余票分配给队列中的第一个人,这样黄牛党就无法操作余票了。下面上代码+图片(图片与顺序无关)
#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); 
}
*/

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: