银行排队系统的设计与实现(源代码)

时间:2022-04-14 21:35:01

(该系统在DEV编译器中不出现问题,在VC6.0中,要注意这样子设置就可以了,在“工程”->“设置”->“C/C++”->“工程选项中”在”/c“之前加上“/Zm1000”

#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
#include <conio.h>//对密码输入保护的一个函数包含
//#include <cctype>//对密码输入保护的一个函数包含
#include<sstream>//调用txt文件时的时间函数包含文件 
using namespace std;
#define SIZE 4  //定义银行业务窗口数目,“SIZE”可以自己修改
#define QNKH 269 //查看文档时,通过传值匹配用的 
#define QNGLY 656//查看文档时,通过传值匹配用的 
#define QNCZY 894//查看文档时,通过传值匹配用的 


typedef struct knode{//客户信息结构体定义OK
char id[12];//客户身份证号码  在客户注册之后保存,暂时用2001、2002、2003之类来模拟
char psw[12];//客户密码    在客户注册之后保存  
char yw[12];//客户选择的业务(“0”表示默认值,"非现金","现金")  在客户登录之后保存
char numd[12];//存放客户的等待号码  在客户登录之后保存
char numw[12];//客户所在的窗口序号   在客户办理业务时赋值
char czyid[12];//存放受理业务的操作员id,便于系统进行统计分析  在客户办理业务时赋值
char cg[12];//"0"表示默认值,成功/缺到
char enuse[12];//"可用"/“不可用”
struct knode *next;
}KNode,*KList;


typedef struct gnode{//管理员/操作员信息结构体定义 操作员的信息都是由管理员来管理,通过属性来区分OK
string id;//操作员工作ID(想定为1001、1002、1003之类,管理员用0001、0002之类的)
string psw;//操作员密码(限定6位)
string quxian;//权限(“1”表示管理员,“0”表示操作员) 
string num;//操作员工作的服务窗口序号(默认为“0”)//这个只有操作员有,每天对操作员信息存档
struct gnode *next;
}GNode, *GList;


struct Wnode{//定义一个业务窗口结构体 //存放该文件的第一行有,两个数,
//第一个表示已经处理了的总数(包括未到的),第二个表示已经排队,但是未到的OK
    char kx[12]; //用来判断该窗口是不是空闲,“0”是默认值,也是表示空闲,但是也要当操作员id不是默认值的时候,“1”表示忙碌 
char ckczyid[12];//办理业务的操作员ID
char ckid[12];//客户ID
char finally_cznumber[12];//存放该操作员处理了业务的个数,可以按这个处理量来进行一个业务评选的排名
char weidao[12];//已经分派号码,但未进行操作的 
}WNode[SIZE+1];//注意,这里的下表是从1开始,0号,存放的是第一行表头信息


typedef struct Qnode{//队列  OK
KNode data;//元素的属性(客户的结构体定义)
struct Qnode *next;
}QNode,*QList;


typedef struct LinkQueue{//队列的指针定义  OK 
QList front;//队头指针
QList rear;//队尾指针
}LinkQueue;


//以下区域是所有调用函数的申明
string password(void);//密码输入显示*的保护模式输入函数  OK
string time_title(void);//用于文件存档时的时间操作函数 OK
string time_title2(void);//用于当日业务查看时的title函数调用 OK
void show_time(void);//显示日期函数 OK
bool K_InitList(KList &K);//构造一个空的线性表K OK
int K_ListLength(KList K);//计算链表K的元素个数 OK
bool A_Existadmin(void); //测试administrationtxt文件是不是存在 OK
bool K_Existkhzc(void);//测试当天的客户注册txt文件是不是存在 OK
bool K_Existywsl(void);  //测试当天的业务受理txt文件是不是存在 OK
bool Q_Existw(void); //判断当天的窗口信息txt文件是不是存在 OK
bool K_ropenkhzc(void);  //打开当天的客户注册txt文件 OK
void K_readzc(KList &K, int &n);//将txt文件中的数据读到K链表到中 OK
void K_readywsl(KList &K, int &n);//将txt文件中的数据读到K链表到中 OK
void K_savezc(KList &K, int n, KNode q);//将K链表中的数据写入到txt文件中去 OK
void K_saveywsl(KList &K, int n, KNode q);//将K链表中的数据写入到txt文件中去 OK
bool G_InitList(GList &G);//构造一个空的线性表G OK
bool Q_InitList(QList &Q);//构造一个空的队列Q   OK
bool Q_EnQueue(LinkQueue &Q, KNode e);//入队操作 OK
bool Q_DeQueue(LinkQueue &Q, KNode &e);//出队操作 OK
int Q_Length(LinkQueue Q);//求队列长度  OK
void G_AddTxt(GList &G, int &n);//将administration.txt文件的内容写入管理员链表G中 OK
void G_CinTxt(GList &G, int n, string id, string psw, string quxian, string num);//注释如下面两行 OK
//将链表G中的信息写入到administration.txt文件中
//将administration.txt文件中的信息进行输出
void W_strtoint(Wnode &w, int &czn, int &wein);//将字符串数转换成int型的数,然后返回,用于在窗口中统计个数用的OK
void W_thedays(int year, int &sum, int month);//返回输入的年月当月的天数 OK


//以下区域是界面函数的申明
void main_welcome(void); //副页 OK 
void main_interface(void);//主界面 OK
void kh_interface(void);//客户登录界面 OK
void khzc_interface(void);//客户注册界面 OK
void kh_welcome(KNode kh);//客户欢迎界面 OK
void kh_information(KNode kh,char yw);//客户选号信息界面 OK
void kh_seepaidui(KNode kh);//客户查看当前排队情况界面 OK
void gly_interface(void);//管理员登录界面 OK
void gly_control(GNode gly);//管理员管理界面 OK
void gly_ywshow(GNode gly);//查看业务受理情况OK
void gly_ontimeyw(GNode gly);//查看当天实时业务受理情况OK
void gly_seedayyw(GNode gly);//查看某日业务OK
void gly_seemonthyw(GNode gly);//查看某月业务 OK
void gly_seeczy(GNode gly);//查看管理员(或者操作员)详细信息 OK
void gly_addczy(GNode gly); // 添加管理员(或者操作员)信息 OK
void gly_updataczy(GNode gly); //修改管理员(或者操作员)信息OK
void gly_deleteczy(GNode gly); //删除管理员(或者操作员)信息OK
void czy_interface(void);//操作员登录界面 OK
void czy_ywinterface(GNode czy, int wnum);//操作员业务受理窗口界面 OK
void czy_ywshow(GNode czy, int wnum);//操作员业务情况查看界面 OK
void czy_ywshouli(GNode czy, int wnum);//操作员业务受理界面OK
void czy_success(GNode czy, int wnum, KNode e); //操作员成功处理OK
void czy_next(GNode czy, int wnum, KNode e); //操作员继续呼叫下一位OK
void Help_interface(void);//帮助主界面 OK
void Help_kh1(void);//客户帮助文档界面(未登录的)  OK
void Help_gly1(void);//管理员帮助文档界面(未登录的)OK
void Help_czy1(void);//操作员帮助文档界面(未登录的)OK
void Help_kh(KNode kh, int n);//客户帮助文档界面  OK
void Help_khtuichu(KNode kh, int n);//客户帮助文档退出中转界面OK
void Help_gly(GNode gly, int n);//管理员帮助文档界面OK
void Help_glytuichu(GNode gly, int n);//管理员帮助文档退出中转界面 OK
void Help_czy(GNode czy, int n, int wnum);//操作员帮助文档界面OK
void Help_czytuichu(GNode czy, int n, int wnum);//操作员帮助文档退出中转界面OK


//以下是main函数,提供各个窗口跳转的函数接口
int main(void){//主函数
char str;
while(1)
{
main_welcome();   
cout<<"\n\n\n";
        cout<<"\t\t\t是否继续(Y/N):";
        cout<<"输入字母'Y'(不区分大小写),界面将调整至主页,其他任意键,将结束系统运行。"<<endl; 
        cout<<"请输入您想进行的操作:"<<endl; 
        cout<<"\t\t\t→"; 
cin>>str;
cout<<"\n\n";
if(str == 'y' || str == 'Y')
continue;
else
return 0;
}
system("pause");
    return 0; 



//以下区域是所有调用函数的具体实现
string password(){ //密码输入显示*的保护模式输入函数  OK
    char c; 
    int i=0; 
    string pas; 
    while ((c=getch())!='\r')  {   
        if (c=='\b') { //处理退格键      
            putch(c);      
            putch(' ');      
            putch(c);      
            if (!pas.empty()) 
               pas=pas.erase(pas.size()-1,1);   
        }   
        else if (isprint(c)){//只用可显示字符做密码    
            putch('*');    
            pas+=c;   
        }  
    } 
return pas;
}


string time_title(){//用于文件存档时的时间操作函数 OK
string tr;
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
    stringstream ss1, ss2, ss3;  //
ss1 <<  1900+p->tm_year; //将年份的int型转化成string型
ss2 <<  1+p->tm_mon; //将月份的int型转化成string型
ss3 <<  p->tm_mday; //将天数的int型转化成string型
tr = ss1.str() + ss2.str() + ss3.str();
return tr;
}


string time_title2(void){//时间函数2,直接显示年月日的函数,用于文件名操作的 OK
 time_t t = time(0);
char tmp[64];
string th;
strftime(tmp, sizeof(tmp), "%Y%m%d",localtime(&t) );
th = tmp;
return tmp;
}


void show_time(void){//仅仅只是显示日期用的函数 OK
time_t timer =time(NULL);
printf("\t\t现在时间:%s\n",ctime(&timer)); //得到日历时间
}


bool K_InitList(KList &K){//构造一个空的线性表L OK
K = new KNode;//分配空间
if (!K) //如果存储分配失败,exit(false);
exit(false);
K->next = NULL;
return true;
}


int K_ListLength(KList K){//计算链表L的元素个数  OK
int i = 0;//计数器初始值为0
KList p = K->next;//p指向第1个结点
while (p){//未到末尾
i++;//计数器+1
p = p->next;//p指向下一个结点
}
return i;//返回链表的长度,也就是L中数据元素的个数
}


bool A_Existadmin(void){  //测试administrationtxt文件是不是存在 OK
    char a[30] = {0}; //如果不存在,就自动创建,一个带有表头的txt文件,并界面跳转至客户注册界面
    FILE *fp=NULL;
char *k = "administrator";
sprintf(a,"%s.txt",k);
fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败! 
if(fp==0){
        int n = 1; 
        char idd[12] = "操作员ID";
        char psww[12] = "密码";
        char yww[12] ="操作权限"; 
char enusee[12] = "窗口";
char idd1[12] = "admin";
        char psww1[12] = "admin";
        char yww1[12] ="1"; 
char enusee1[12] = "0";
        //下面进行创建文件,该文件要包含一个n = 0,以及表头部分 
        fp=fopen(a,"w+");//用为读写建立一个新的文本文件 
        fprintf(fp,"%d\n",n); //写入n 
        fprintf(fp,"%s\t%s\t%s\t%s\n",idd,psww,yww,enusee);//写操作 
        fprintf(fp,"%s\t%s\t%s\t%s\n",idd1,psww1,yww1,enusee1);//写操作
        fclose(fp); //关闭文件 
        _sleep(2000);//延时2秒,方便您查看提示信息              
        return false;         
    } 
    else{
         cout<<"\t\t成功打开"<<a<<"文件"<<endl; 
         return true; 
    }    
}


bool K_Existkhzc(void){  //测试当天的客户注册txt文件是不是存在 OK
    char a[30] = {0}; //如果不存在,就自动创建,一个带有表头的txt文件,并界面跳转至客户注册界面
    FILE *fp=NULL;
char *k = "客户注册";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败! 
if(fp==0){
        int n = 0; 
        char idd[12] = "客户ID";
        char psww[12] = "密码";
        char yww[12] ="业务类型"; 
char enusee[12] = "是否可用";
        //下面进行创建文件,该文件要包含一个n = 0,以及表头部分 
        fp=fopen(a,"w+");//用为读写建立一个新的文本文件 
        fprintf(fp,"%d\n",n); //写入n 
        fprintf(fp,"%s\t%s\t%s\t%s\n",idd,psww,yww,enusee);//写操作 
        fclose(fp); //关闭文件 
        _sleep(2000);//延时2秒,方便您查看提示信息              
        return false;         
    } 
    else{
         cout<<"\t\t成功打开"<<a<<"文件"<<endl; 
         return true; 
    }    
}


bool K_Existywsl(void){  //测试当天的客户注册txt文件是不是存在 OK
    char a[30] = {0}; //如果不存在,就自动创建,一个带有表头的txt文件,并界面跳转至客户注册界面
    FILE *fp=NULL;
char *k = "业务受理";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败! 
if(fp==0){
        int n = 0; 
        char idd[12] = "客户ID";
        char yww[12] ="业务类型";
        char nn[12] = "等待号码";
        char numm[12] ="窗口";
        char czyidd[12] = "操作员ID";
char cgg[12] = "成功办理?";
        //下面进行创建文件,该文件要包含一个n = 0,以及表头部分 
        fp=fopen(a,"w+");//用为读写建立一个新的文本文件 
        fprintf(fp,"%d\n",n); //写入n 
        fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\n",idd,yww,nn,numm,czyidd,cgg);//写操作  
        fclose(fp); //关闭文件 
        _sleep(2000);//延时2秒,方便您查看提示信息              
        return false;         
    } 
    else{
         cout<<"\t\t成功打开"<<a<<"文件"<<endl; 
         return true; 
    }    
}


bool Q_Existw(void){  //测试当天的窗口信息txt文件是不是存在 OK
    char a[30] = {0}; //如果不存在,就自动创建,一个带有表头的txt文件,并界面跳转至客户注册界面
    FILE *fp=NULL;
char *k = "窗口信息";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
    int len = tempstring.length();
int j, i;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败! 
if(fp==0){
        int size = SIZE; 
        int sum = 0;
int sumw = 0;
strcpy(WNode[0].ckczyid,"操作员ID");
strcpy(WNode[0].kx,"是否空闲");        
        strcpy(WNode[0].ckid,"客户ID");
        strcpy(WNode[0].finally_cznumber,"完成客户");
        strcpy(WNode[0].weidao,"缺到客户");
for (i = 1; i <= SIZE; i++){
            strcpy(WNode[i].ckczyid,"0");
            strcpy(WNode[i].kx,"0");
            strcpy(WNode[i].ckid,"0");
            strcpy(WNode[i].finally_cznumber,"0");
            strcpy(WNode[i].weidao,"0");             
        } 
        //下面进行创建文件,该文件要包含一个n = 0,以及表头部分 
        fp=fopen(a,"w+");//用为读写建立一个新的文本文件 
        fprintf(fp,"%d\n",size); //写入size 
        fprintf(fp,"%d\n",sum); //写入sum 
        fprintf(fp,"%d\n",sumw); //写入sumw 
        for (i = 0; i <= SIZE; i++)
        fprintf(fp,"%s\t%s\t%s\t%s\t%s\n",WNode[i].ckczyid,WNode[i].kx,WNode[i].ckid,WNode[i].finally_cznumber,WNode[i].weidao);//写操作 
        fclose(fp); //关闭文件 
        _sleep(2000);//延时2秒,方便您查看提示信息              
        return false;         
    } 
    else{
         cout<<"\t\t成功打开"<<a<<"文件"<<endl; 
         return true; 
    }    
}


bool K_ropenkhzc(void){  //打开当天的客户注册txt文件 OK
char a[30] = {0}; //如果不存在,就自动创建,一个带有表头的txt文件,并界面跳转至客户注册界面
    FILE *fp=NULL;
char *k = "客户注册";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败!
if(fp==0){puts("error");return false;}
return true;
}


void K_readzc(KList &K, int &n){//将txt文件中的数据读到K链表到中 OK
    FILE *fp=NULL;            //注意传参数时传的值要正确
char *k = "客户注册";
string tempstring; 
char b[10] = {0};
char a[30] = {0};
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用读写的形式打开文件 
if(fp==0){puts("error");exit(0);}
    int i;
    KList p; 
    p = K; 
    fscanf(fp, "%d\n",&n);//读入n
    for (i = 1; i <= n+1; i++){
        KList qq;
        qq = new KNode;
        qq->next = p->next;
        fscanf(fp,"%s%s%s%s\n",qq->id,qq->psw,qq->yw,qq->enuse); //读入数据      
        p->next = qq;
        p = qq;
    }
    fclose(fp); //关闭文件
}


void K_readywsl(KList &K, int &n){//将txt文件中的数据读到K链表到中 OK
    FILE *fp=NULL;            //注意传参数时传的值要正确
char *k = "业务受理";
string tempstring; 
char b[10] = {0};
char a[30] = {0};
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用读写的形式打开文件 
if(fp==0){puts("error");exit(0);}
    int i;
    KList p; 
    p = K; 
    fscanf(fp, "%d\n",&n);//读入n
    for (i = 1; i <= n+1; i++){
        KList qq;
        qq = new KNode;
        qq->next = p->next;
        fscanf(fp,"%s%s%s%s%s%s\n",qq->id,qq->yw,qq->numd,qq->numw,qq->czyid,qq->cg);//读入数据      
        p->next = qq;
        p = qq;
    }
    fclose(fp); //关闭文件
}


void K_savezc(KList &K, int n, KNode q){//将K链表中的数据写入到txt文件中去 OK
char ch = '\n';                   //注意传参数时传的值要正确     
char a[30] = {0};
    FILE *fp=NULL;
char *k = "客户注册";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"w");//用读写的形式打开文件 
if(fp==0){puts("error");exit(0);}
n = n+1;//添加一个人的信息 
fprintf(fp,"%d\n",n); //写入n 
KList pp;
pp = K->next;//链表的头是个乱码,必须指向下一个
    free(K);
    K = pp;
    while (K){
fprintf(fp,"%s\t%s\t%s\t%s\n",K->id,K->psw,K->yw,K->enuse);//写操作
pp = K->next;//进行链表的空间释放 
        free(K);
K = pp;
    }
fprintf(fp,"%s\t%s\t%s\t%s\n",q.id,q.psw,q.yw,q.enuse);//写操作
fclose(fp); //关闭文件
}


void K_saveywsl(KList &K, int n, KNode q){//将K链表中的数据写入到txt文件中去 OK
char ch = '\n';                   //注意传参数时传的值要正确     
char a[30] = {0};
    FILE *fp=NULL;
char *k = "业务受理";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"w");//用读写的形式打开文件 
if(fp==0){puts("业务受理error");exit(0);}
n = n+1;//添加一个人的信息 
fprintf(fp,"%d\n",n); //写入n 
KList pp;
pp = K->next;//链表的头是个乱码,必须指向下一个
    free(K);
    K = pp;
    while (K){
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\n",K->id,K->yw,K->numd,K->numw,K->czyid,K->cg);//写操作
pp = K->next;//进行链表的空间释放 
        free(K);
K = pp;
    }
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\n",q.id,q.yw,q.numd,q.numw,q.czyid,q.cg);//写操作
fclose(fp); //关闭文件
}


bool G_InitList(GList &G){//构造一个空的线性表G OK
G = new GNode;////分配空间
if (!G)//如果存储分配失败,exit(false);
exit(false);
G->next = NULL;
return true;
}


bool Q_InitList(LinkQueue &Q){//构造一个空的队列Q   OK
Q.front = Q.rear = new QNode;
if (!Q.front) {
cout<<"队列初始化失败!"<<endl;
exit(false);
}//储存分配失败
Q.front->next = NULL;
return true;
}


bool Q_EnQueue(LinkQueue &Q, KNode e){//入队操作 OK
QList p = new QNode;
if (!p) 
exit(false);
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return true;
}


bool Q_DeQueue(LinkQueue &Q, KNode &e){//出队操作  OK 
if (Q.front == Q.rear)//若队列空,则返回false 
return false;
QList p;//定义p
p = Q.front->next;//p指向对头元素
e = p->data;//e保存对头元素的值
Q.front->next = p->next;//修改对头指针
if (Q.rear == p)
Q.rear = Q.front;//最后一个元素被删,队尾指针指向头结点
delete p;
return true;
}


int Q_Length(LinkQueue Q){//求队列长度  OK
int i = 0;
QList p = Q.front;
while (Q.rear != p){
i++;
p = p->next;
}
return i;
}


void G_AddTxt(GList &G, int &n){//将administration.txt文件的内容写入管理员链表G中  OK
int i;
    GList p;
ifstream cinFile;//定义一个文件操作名//进行读操作
cinFile.open("administrator.txt");//打开文件
if (!cinFile.is_open()){
cout<<"\t\t\t☆☆☆☆打开文件失败!请检修系统☆☆☆☆"<<endl;
}
p = G;
cinFile>>n;
for (i = 1; i <= n+1; i++){//因为有第一行的表格提示信息,所以为“n+1”
GList q;
q = new GNode;
q->next = p->next;
cinFile>>q->id>>q->psw>>q->quxian>>q->num;
p->next = q;
p = q;
}
cinFile.close();
}


void G_CinTxt(GList &G, int n, string id, string psw, string quxian, string num){
//将链表中的信息添加到administration.txt文件中,同时也将新添加的操作员信息写入  OK
//同时也将administration.txt文件中的信息进行输出
system("cls");//清屏操作
system("color ec");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"★★★★★★★★★管理员以及操作员信息表★★★★★★★★★★★"<<endl; 
ofstream coutFile;
coutFile.open("administrator.txt"); //打开文件
if (!coutFile.is_open()){
cout<<"\t\t\t☆☆☆☆打开文件失败!请检修系统☆☆☆☆"<<endl;
}
coutFile<<n;
cout<<"共有";
cout<<n<<"位操作员(包括管理员)";
int i;
GList q;
while (G)
{
coutFile<<G->id<<"\t"<<G->psw<<"\t"<<G->quxian<<"\t"<<G->num<<endl;
        cout<<G->id;
for (i = 1; i <= 10-G->id.length(); i++)
 cout<<' ';
cout<<G->psw;
for (i = 1; i <= 10-G->psw.length(); i++)
 cout<<' ';
        cout<<G->quxian;
        for (i = 1; i <= 10-G->quxian.length(); i++)
 cout<<' ';
        cout<<G->num<<endl;
        q = G->next;//进行链表的空间释放 
        free(G);
G = q;
}
coutFile<<id<<"\t"<<psw<<"\t"<<quxian<<"\t"<<num<<endl;
    cout<<id;
for (i = 1; i <= 10-id.length(); i++)
 cout<<' ';
cout<<psw;
for (i = 1; i <= 10-psw.length(); i++)
 cout<<' ';
        cout<<quxian;
        for (i = 1; i <= 10-quxian.length(); i++)
 cout<<' ';
        cout<<num<<endl;
coutFile.close();//关闭文件
}


void W_thedays(int year, int &sum, int month){//返回输入的年月当月的天数
    int leap;
switch (month)
{
case 1: sum = 31;break;
case 2: sum = 28;break;
case 3: sum = 31;break;
case 4: sum = 30;break;
case 5: sum = 31;break;
case 6: sum = 30;break;
    case 7: sum = 31;break;
case 8: sum = 31;break;
case 9: sum = 30;break;
case 10: sum = 31;break;
case 11: sum = 30;break;
case 12: sum = 31;break;
default : printf("date error");break;
}
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
leap = 1;
else
leap = 0;
if(leap == 1 && month == 2)
sum++;



//以下区域是界面函数的具体实现
void main_welcome(void){//副页 OK 
     system("cls");
    system("color ec");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
    cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl; 
    cout<<"★                            数据结构课程设计                              ★\n";
    cout<<"★                                                                          ★\n";
    cout<<"★                                                                          ★\n";    
    cout<<"★                课题:银行排队系统的设计与实现                            ★\n";     
    cout<<"★                                                                          ★\n";
    cout<<"★                制作者:计算机工程系11级2班 石雄伟                        ★\n";
    cout<<"★                                                                          ★\n";
cout<<"★                指导老师:黄隆华                                          ★\n";    
    cout<<"★                                                                          ★\n"; 
cout<<"★                完成时间:2013年06月                                      ★\n";
cout<<"★                                                                          ★\n";
cout<<"★                                                                          ★\n";     
cout<<"★                                                                          ★\n";
cout<<"★                                                                          ★\n";     
cout<<"★                                                                          ★\n";     
cout<<"★               正在配置系统文件,即将为您跳转至主界面                     ★\n";
cout<<"★                                                                          ★\n";     
    cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
    K_Existkhzc();//如果不存在,就自动创建
Q_Existw();
K_Existywsl();
A_Existadmin(); 
_sleep(2000); 
    main_interface();      
}
     
void main_interface(void){//主界面 OK
char xuhao; //业务序号
system("cls");//清屏操作
system("color ec");//设置控制台前景色和背景色
cout<<"★★★★★★★★★★★★★★★中国农业银行主页★★★★★★★★★★★★★★★"<<endl; 
cout<<"\n";
cout<< "\t\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\n\n";
cout<<"\t\t\t1、客户登录" <<endl;
cout<<"\t\t\t2、客户注册"<<endl;
cout<<"\t\t\t3、管理员登陆"<<endl;
cout<<"\t\t\t4、操作员登陆"<<endl;
cout<<"\t\t\t5、帮助"<<endl;
cout<<"\n\n\n\n";
    show_time();//调用时间函数,显示此时的时间
cout<< "\t\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n";
cout<<"★★★★★★★★★★★★★★★中国农业银行主页★★★★★★★★★★★★★★★"<<endl; 
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>xuhao;//输入要选择功能对应的序号
switch(xuhao){//OK
case '1': kh_interface(); break;
case '2': khzc_interface(); break;
case '3': gly_interface(); break;
case '4': czy_interface(); break;
case '5': Help_interface(); break;
default: cout<<"您输入的有误,请从新输入!";
_sleep(1000); //延时1秒
main_interface(); //重新调用主界面函数
break;  
}
}


void kh_interface(){//客户登录界面 OK
    char ch; 
string id;//客户身份证ID
string psw;//客户密码
system("cls");//清屏操作
system("color ec");//设置控制台前景色和背景色
cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆客户登录界面◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"\n";
cout<<"\t\t\t中国农业银行排队系统"<<endl;
cout<<"\t";
show_time();//调用时间函数,显示此时的时间
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
    cout<<"\t★                                                        ★\n"; 
    cout<<"\t★    温馨提示:                                           ★\n";    
    cout<<"\t★           您即将进行登录操作,您确定要继续进行么?     ★\n";     
cout<<"\t★                                                        ★\n";
cout<<"\t★           Y、继续                                      ★\n";     
cout<<"\t★           N、返回                                      ★\n";
cout<<"\t★                                                        ★\n";     
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n";     
cout<<"\t\t\t请输入您的选择(Y/N):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
if(ch == 'y' || ch == 'Y')
;
else
main_interface();  
cout<<"\t\t\t请进行客户登录操作"<<endl; 
cout<<"\t\t\t请输入您注册的身份证ID:"<<endl;
cout<<"\t\t\t→";
cin>>id;
//cout<<endl;
cout<<"\t\t\t请输入您的密码(6位):"<<endl;
cout<<"\t\t\t→";
psw = password();
cout<<endl;
    //下面先判断是不是存在当天的客户注册txt文件,如果不存在就自动创建一个含有表头内容的文件,然后提示客户进行注册
    if (!K_Existkhzc()){//如果打开文件,跳转到客户注册界面
khzc_interface();
}
else{//在下面进行身份id和密码的匹配
FILE *fp=NULL;
char *k = "客户注册";
string tempstring; 
char b[10] = {0};
char a[30] = {0};
tempstring = time_title2();
int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//为输入打开一个文本文件 
if(fp==0){
cout<<"\t\t\t☆☆打开文件失败!,请检修系统☆☆"<<endl;
exit(0);
}
int i;
KNode qq;  
int n; 
fscanf(fp, "%d\n",&n);//读n
for (i = 1; i <= n+1; i++){
fscanf(fp,"%s%s%s%s\n",qq.id,qq.psw,qq.yw,qq.enuse);//读数 
if (qq.id == id && qq.psw == psw && (strcmp(qq.enuse,"可用") == 0)){ //成功之后跳转至“客户欢迎界面”OK
cout<<endl;
cout<<"\t\t\t登录成功!"<<endl;
fclose(fp); //关闭文件
_sleep(2000); //延时1秒
kh_welcome(qq);//跳转至操作员业务受理窗口界面 OK
break;
}
}

if (i > n+1){//失败之后,重新加载次页面,重新登录输入操作  OK
cout<<"\t\t\t登录失败!"<<endl;
cout<<"\t\t您输入的密码或用户ID错误,请重新登录!"<<endl;
_sleep(1000); //延时1秒
kh_interface();//操作员登录界面 OK
}
}
}


void khzc_interface(){//客户注册界面 OK
    char ch;
//下面检查,是否存在当天的“客户注册txt文件”
if (K_Existkhzc()){;}
char id[12] = {0};//客户身份证ID
string psw1, psw2;//客户密码
system("cls");//清屏操作
system("color ec");//设置控制台前景色和背景色
cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆客户注册界面◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"\n";
cout<<"\t\t\t中国农业银行排队系统"<<endl;
cout<<"\t";
show_time();//调用时间函数,显示此时的时间
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
    cout<<"\t★                                                        ★\n"; 
    cout<<"\t★    温馨提示:                                           ★\n";    
    cout<<"\t★           您即将进行注册操作,您确定要继续进行么?     ★\n";     
cout<<"\t★                                                        ★\n";
cout<<"\t★           Y、继续                                      ★\n";     
cout<<"\t★           N、返回                                      ★\n";
cout<<"\t★                                                        ★\n";     
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n";     
cout<<"\t\t\t请输入您的选择(Y/N):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
if(ch == 'y' || ch == 'Y')
;
else
main_interface();  
cout<<"\t\t\t请输入您的身份证ID:"<<endl;
cout<<"\t\t\t→";
cin>>id;
//下面判断是否已经注册但还没有登录选号的,如果已经注册了,就显示该ID的注册信息
KNode tempk;
int tempn;
char a[30] = {0};
    FILE *fp=NULL;
char *k = "客户注册";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用读的形式打开文件,不存在,则打开失败!
if(fp==0){puts("error");exit(0);}
fscanf(fp,"%d\n",&tempn);
for (int i = 1; i <= tempn+1; i++){
fscanf(fp,"%s%s%s%s\n",tempk.id,tempk.psw,tempk.yw,tempk.enuse);
if ((strcmp(id,tempk.id)) == 0 && (strcmp(tempk.enuse,"可用")) == 0){
fclose(fp);
cout<<"\t\t您上次已经注册成功了,请用上次的注册信息进行登录。"<<endl;
cout<<"\t\t您上次的注册信息如下\n"<<endl;
cout<<"\t\t"<<"客户ID  "<<"密码  "<<"业务类型  "<<"是否可用"<<endl;
cout<<"\t\t"<<tempk.id<<'\t'<<tempk.psw<<'\t'<<tempk.yw<<'\t'<<tempk.enuse<<endl;
cout<<"\n\n\t\t请记住您的ID和密码,5秒钟之后,为您跳转至“客户登录界面”";
_sleep(5500);
kh_interface();
}
}
    //继续进行注册操作的密码输入
cout<<"\t\t\t请输入密码(6位):"<<endl;
cout<<"\t\t\t→";
psw1 = password();
cout<<endl;
cout<<"\t\t\t请再次输入密码(6位):"<<endl;
cout<<"\t\t\t→";
psw2 = password();
cout<<endl;
//下面匹配两次输入的密码是否相容
if (psw1 == psw2){//将客户注册信息插入到链表以及写入到TXT文档中 000000000
KList K;
KNode q;
int n;
K_InitList(K);//初始化K链表 
K_readzc(K,n);//将类似”20130605客户.txt“中的内容读入到K链表中,n存放的是客户注册的总个数
//下面设其他数据项的默认值
sprintf(q.id,"%s",id); 
sprintf(q.yw,"%s","0"); 
sprintf(q.enuse,"%s","可用");
        //下面将字符串这样子转换字符数组
int tempi;
for (tempi = 0; tempi < psw1.length(); tempi++)
    q.psw[tempi] = psw1[tempi];
    q.psw[tempi] = '\0'; //加上字符数组的结束符,不然会读取内存出错
K_savezc(K,n,q);
cout<<"\t\t\t☆☆☆☆注册成功!☆☆☆☆\n";//提示注册成功,
cout<<"\t\t\t今天已经有"<<n<<"位完成了客户注册。"<<endl;
cout<<"\t\t\t您是第"<<n+1<<"位注册客户!"<<endl;
cout<<"\t\t3秒钟之后将自动跳转到客户登录界面";
_sleep(3000); //延时1秒
kh_interface();
}
else {
cout<<"您两次输入密码的不同,请重新注册!";
_sleep(1500); //延时1秒
khzc_interface(); //重新调用客户注册界面
}
}


void kh_welcome(KNode kh){//客户欢迎界面 0
KNode khh = kh;
char xuhao;//对应业务选项的序号
system("cls");//清屏操作
system("color ec");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※※※※※客户欢迎界面※※※※※※※※※※※※※※※※※"<<endl;
    cout<<"\n";
cout<< "\t\t\t欢迎登录中国农业银行排队系统"<<endl;
cout<<"\n\n\n";
cout<<"\t\t\t1、现金业务办理" <<endl;
cout<<"\t\t\t2、非现金业务办理"<<endl;
cout<<"\t\t\t3、查看当前排队情况"<<endl;
cout<<"\t\t\t4、查看客户帮助文档"<<endl;
cout<<"\t\t\t5、返回上一界面"<<endl;
cout<<"\t\t\t6、退出"<<endl;
cout<<"\n\n\n\n";
show_time();//调用时间函数,显示此时的时间
cout<< "\t\t\t欢迎登录中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※※※※※客户欢迎界面※※※※※※※※※※※※※※※※"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>xuhao;
switch(xuhao){
case '1': kh_information(khh, xuhao); break;
case '2': kh_information(khh, xuhao); break;
case '3': kh_seepaidui(khh); break;
case '4': Help_kh(khh, QNKH); break;
case '5': kh_interface(); break;
case '6': main_interface(); break;
default : cout<<"您输入的操作序号有误,请重新输入!";
_sleep(1500); //延时1.5秒
kh_welcome(khh); //重新调用客户欢迎界面
break;  
}
}


void kh_information(KNode kh,char yw){//客户选号信息界面 OK
KNode khh = kh;
char leixin[12] = {0};
char yww[12] = {0};
char ch = yw;
switch (ch){
case '1': strcpy(leixin,"现金"); strcpy(yww,"现金"); break;
case '2': strcpy(leixin,"非现金"); strcpy(yww,"非现金"); break;
}


if (strcmp("0",khh.yw) == 0){//说明,还没有进行序号分配,然后对客户注册表中的yw进行改写,并将类容写到“业务受理”中
//将客户注册txt中的yw进行改写OK
        FILE *fp=NULL;
char *k = "客户注册";
string tempstring; 
char b[10] = {0};
char a[30] = {0};
tempstring = time_title2();
int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//为输入打开一个文本文件 
if(fp==0){
cout<<"\t\t\t☆☆打开文件失败!,请检修系统☆☆"<<endl;
exit(0);
}
int i;
KList qq, p, K; 
K_InitList(K);
p = K;
int n; 
fscanf(fp, "%d\n",&n);//读n
for (i = 1; i <= n+1; i++){
qq = new KNode;
qq->next = p->next;
fscanf(fp,"%s%s%s%s\n",qq->id,qq->psw,qq->yw,qq->enuse);//读数据 
if (strcmp(khh.id,qq->id) == 0){
strcpy(qq->yw,leixin);//将客户注册txt中的类容读出来,进行修改
}
p->next = qq;
p = qq;
}
fclose(fp); //关闭文件
//将K链表中的内容写入到txt文本中OK
fp=fopen(a,"w");//为写入打开一个文本文件,不增加个数的函数调用
if(fp==0){
cout<<"\t\t\t☆☆打开文件失败!,请检修系统☆☆"<<endl;
exit(0);
}
fprintf(fp, "%d\n",n);//写入n
qq = K->next;//链表的头是个乱码,必须指向下一个
free(K);
K = qq;
while (K){
fprintf(fp,"%s\t%s\t%s\t%s\n",K->id,K->psw,K->yw,K->enuse);//写操作
qq = K->next;//进行链表的空间释放 
free(K);
K = qq;
}
fclose(fp); //关闭文件
        //将类容写到“业务受理”中OK
KList K1;
K_InitList(K1);
if (K_Existywsl()){;}//判断是否存在该文件,不存在,就创建一个
K_readywsl(K1, n);//将txt文件中的数据读到K1链表到中
//下面对新添加的元素,进行一个赋值
KNode q1;
strcpy(q1.id,khh.id);
strcpy(q1.yw,yww);
strcpy(khh.yw,yww);//将传递用的KNode值改变,不然可以一直选业务类型 
stringstream ss1;  //字符串流的定义
string tr;
ss1 <<  n+1; //将排队的序号的int型转化成string型
tr = ss1.str();
int tt, kk;
tt = tr.length();
for (kk = 0; kk < tt; kk++)
q1.numd[kk] = tr[kk];
q1.numd[kk] = '\0';
strcpy(q1.numw,"0");
strcpy(q1.czyid,"0");
strcpy(q1.cg,"0");
K_saveywsl(K1, n, q1);//在函数里面增加一个
system("cls");//清屏操作
system("color ec");//设置控制台前景色和背景色  红色
cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆分配等待号码页面◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"\n";
cout<<"\t\t\t中国农业银行排队系统"<<endl;
cout<<"\t\t温馨提示:"<<endl;//
cout<<"\t\t\t您已经成功选号!"<<endl;
cout<<"\t\t\t您选择的是“"<<yww<<"”业务类型"<<endl;
cout<<"\t\t\t您的排队号码为:"<<n+1<<"号"<<endl;
cout<<"\t\t\t请耐心等候,祝你生活愉快!"<<endl;
cout<<"\n\n";
cout<<"\t\t请继续选择您的操作:"<<endl;
cout<<"\t\t\t1、返回上一页"<<endl;
cout<<"\t\t\t2、退出"<<endl;
show_time();//调用时间函数,显示此时的时间
cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆分配等待号码页面◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
char xuhao;
cin>>xuhao;
switch(xuhao){
case '1': kh_welcome(khh); break;
case '2': main_interface(); break;
default : main_interface(); break;  
}
}
else{//已经选了号的,如果再登录,则直接跳转到“客户查看当前排队情况界面”
kh_seepaidui(khh);//直接跳转到“客户查看当前排队情况界面”
}
}


void  kh_seepaidui(KNode kh){//客户查看当前排队情况界面 0000000000000
int n;
KNode khh;
FILE *fp=NULL;            //注意传参数时传的值要正确
char *k = "业务受理";
string tempstring; 
char b[10] = {0};
char a[30] = {0};
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用读写的形式打开文件 
if(fp==0){puts("error");exit(0);}
fscanf(fp,"%d\n",&n);//读入n就可以了
int tempsumd = 0;//当前排队的人数
for (int i = 1; i <= n+1; i++){
fscanf(fp,"%s%s%s%s%s%s\n",khh.id,khh.yw,khh.numd,khh.numw,khh.czyid,khh.cg);
if (strcmp(khh.id,kh.id) == 0 && strcmp(khh.cg,"0") == 0){
break;
}
if (strcmp(khh.czyid,"0") == 0)
tempsumd++;
}    
fclose(fp); //关闭文件
system("cls");//清屏操作
system("color ec");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆查看当前排队情况◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"\n";
cout<<"\t\t\t中国农业银行排队系统"<<endl;
cout<<"\t\t温馨提示:"<<endl;//
cout<<"\t\t\t尊敬的“"<<khh.id<<"”客户,您好!"<<endl;
cout<<"\t\t\t您选择的是“"<<khh.yw<<"”业务类型"<<endl;
cout<<"\t\t\t您的排队号码为:"<<khh.numd<<"号"<<endl;
cout<<"\t\t在您前面还有“"<<tempsumd<<"”人在等候!"<<endl;
cout<<"\t\t请耐心等候,祝你生活愉快!"<<endl;
cout<<"\n\n";
cout<<"\t\t请继续选择您的操作:"<<endl;
cout<<"\t\t\t1、返回上一页"<<endl;
cout<<"\t\t\t2、退出"<<endl;
show_time();//调用时间函数,显示此时的时间
cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆查看当前排队情况◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
    cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
char xuhao;
cin>>xuhao;
switch(xuhao){
case '1': kh_welcome(khh); break;
case '2': main_interface(); break;
default : main_interface(); break; 
}
}


void gly_interface(){//管理员登陆界面 0K
    char ch; 
string id;//管理员ID
string psw;//管理员密码
system("cls");//清屏操作
GNode gly;//管理员定义
int n, i;//对文件中文件个数进行终止和统计
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆管理员登录界面◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
    cout<<"\n";
cout<<"\t\t\t中国农业银行排队系统"<<endl;
cout<<"\t";
show_time();//调用时间函数,显示此时的时间
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
    cout<<"\t★                                                        ★\n"; 
    cout<<"\t★    温馨提示:                                           ★\n";    
    cout<<"\t★           您即将进行登录操作,您确定要继续进行么?     ★\n";     
cout<<"\t★                                                        ★\n";
cout<<"\t★           Y、继续                                      ★\n";     
cout<<"\t★           N、返回                                      ★\n";
cout<<"\t★                                                        ★\n";     
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n";     
cout<<"\t\t\t请输入您的选择(Y/N):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
if(ch == 'y' || ch == 'Y')
;
else
main_interface();  
cout<<"\t\t\t请输入ID:"<<endl;
cout<<"\t\t\t→";
cin>>id;
cout<<"\t\t\t请输入密码(6位):"<<endl;
cout<<"\t\t\t→";
psw = password();//用密码保护方式进行密码输入
    cout<<endl;
    //在下面进行身份id和密码的匹配   OK
ifstream cinFile;//定义一个文件操作名//进行读操作
cinFile.open("administrator.txt");//打开文件
if (!cinFile.is_open())//判断文件是否被打开
cout<<"\t\t\t☆☆打开文件失败!,请检修系统☆☆"<<endl;
cinFile>>n;
for (i = 1; i <= n+1; i++){
cinFile>>gly.id;
cinFile>>gly.psw;
cinFile>>gly.quxian;
cinFile>>gly.num; 
if (id == gly.id  && psw == gly.psw && gly.quxian == "1"){ //成功之后跳转至“管理员管理界面” OK
cout<<endl;
cout<<"\t\t\t登录成功!"<<endl;
_sleep(1000); //延时1秒
gly_control(gly);//跳转至管理员管理界面
break;
}
}
if (i > n+1){//失败之后,重新加载次页面,重新登录输入操作 OK
cout<<"\t\t\t登录失败!"<<endl;
cout<<"\t\t您输入的密码或用户ID错误,请重新登录!"<<endl;
_sleep(1000); //延时1秒
gly_interface();//重新跳转至
}
cinFile.close();//文件关闭
}


void gly_control(GNode gly){//管理员管理界面 OK
GNode glyy = gly;
char xuhao;//对应业务选项的序号
system("cls");//清屏操作
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※※※※管理员管理界面※※※※※※※※※※※※※※※"<<endl;
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\n";
cout<<"\t\t\t1、查看业务受理情况" <<endl;// void gly_ywshow(void);//查看业务受理情况 0
cout<<"\t\t\t2、查看管理员(或者操作员)信息"<<endl;// void gly_seecay(void);//查看管理员(或者操作员)详细信息 OK
cout<<"\t\t\t3、查看管理员帮助文档"<<endl;//void Help_gly(int n);//查看管理员帮助文档界面 OK
cout<<"\t\t\t4、添加管理员(或者操作员)信息"<<endl;// void gly_addczy(void); //添加管理员(或者操作员)信息 OK
cout<<"\t\t\t5、修改管理员(或者操作员)信息"<<endl;// void gly_updataczy(void);//修改管理员(或者操作员)信息OK
cout<<"\t\t\t6、删除管理员(或者操作员)信息"<<endl;// void gly_deleteczy(void);//删除管理员(或者操作员)信息0
cout<<"\t\t\t7、返回上一界面"<<endl;// OK
cout<<"\t\t\t8、退出"<<endl; // OK
cout<<"\n\n\n";
show_time();//调用时间函数,显示此时的时间 
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※※※※管理员管理界面※※※※※※※※※※※※※※※※"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>xuhao;
switch(xuhao){
case '1': gly_ywshow(glyy); break;//查看业务受理情况 0
case '2': gly_seeczy(glyy);break;//查看管理员(或者操作员)详细信息 OK 
case '3': Help_gly(glyy, QNGLY);break;//查看管理员帮助文档OK
case '4': gly_addczy(glyy); break;// 添加管理员(或者操作员)信息 OK
case '5': gly_updataczy(glyy); break;//修改管理员(或者操作员)信息OK
case '6': gly_deleteczy(glyy); break;//删除管理员(或者操作员)信息OK
case '7': gly_interface(); break;//返回上一界面,也就是返回到管理员登陆界面 OK
case '8': main_interface(); break; //返回到主界面 OK
default : cout<<"您输入的操作序号有误,请从新输入!";
_sleep(1500); //延时1.5秒
gly_control(glyy); //重新调用管理员管理界面 OK
break;  
}
}


void gly_ywshow(GNode gly){//查看业务受理情况界面 0000000000
    GNode glyy = gly;
char xuhao;//对应业务选项的序号
system("cls");//清屏操作
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※※※※业务受理情况查看界面※※※※※※※※※※※※※※※"<<endl;
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\n";
cout<<"\t\t\t1、查看当天实时业务受理情况" <<endl;//OK
cout<<"\t\t\t2、查看某日业务受理情况"<<endl;// 0
cout<<"\t\t\t3、查看某月业务受理情况"<<endl;// 0
cout<<"\t\t\t4、返回"<<endl;// OK
cout<<"\t\t\t5、退出"<<endl; // OK
cout<<"\n\n\n";
show_time();//调用时间函数,显示此时的时间 
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※※※※管理员管理界面※※※※※※※※※※※※※※※※"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>xuhao;
switch(xuhao){
case '1': gly_ontimeyw(glyy); break;// 0
case '2': gly_seedayyw(glyy); break;// 0
case '3': gly_seemonthyw(glyy); break;// 0
case '4': gly_control(glyy); break;//返回上一界面,也就是返回到管理员登陆界面 OK
case '5': main_interface(); break; //返回到主界面 OK
default : cout<<"您输入的操作序号有误,请从新输入!";
_sleep(1000); //延时1秒
gly_ywshow(glyy); //重新调用查看业务受理情况界面 OK
break;  
}
}


void gly_ontimeyw(GNode gly){//查看当天实时业务受理情况OK
system("cls");//清屏操作
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
GNode glyy = gly;
    KList K;
char ch;
K_InitList(K);
int n;
K_readywsl(K, n);//将txt文件中的数据读到K链表到中 OK
cout<<"\t\t    今天共有"<<n<<"人取票办理业务"<<endl;
KList p = K;
int i;
K = K->next;
while(K){
        cout<<K->id;
for (i = 1; i <= 10-strlen(K->id); i++)
   cout<<' ';
cout<<K->yw;
for (i = 1; i <= 10-strlen(K->yw); i++)
   cout<<' ';
        cout<<K->numd;
        for (i = 1; i <= 10-strlen(K->numd); i++)
 cout<<' ';
        cout<<K->numw;
        for (i = 1; i <= 10-strlen(K->numw); i++)
 cout<<' ';
cout<<K->czyid;
for (i = 1; i <= 10-strlen(K->czyid); i++)
 cout<<' ';
cout<<K->cg<<endl;
p = K->next;
delete(K);
K = p;
}
cout<<"\n";
    cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";;
show_time();//调用时间函数,显示此时的时间
cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  gly_ywshow(glyy); break; //带参数返回管理员欢迎界面
case '2':  main_interface(); break; //OK
default: cout<<"您输入的操作序号有误,请重新输入!";
_sleep(1500); //延时1.5秒
gly_ontimeyw(glyy); //管理员帮助文档界面 OK
break;

}


void gly_seedayyw(GNode gly){//查看某日业务
    system("cls");//清屏操作
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
    char riqi[12] = {0};
    GNode glyy = gly;
    cout<<"请输入你要查询的日期,格式:“20130613”表示查询2013年6月13日的业务记录";
    cout<<"\t\t\t→";
    cin>>riqi;
    char a[30] = {0}; //如果不存在,就自动创建,一个带有表头的txt文件,并界面跳转至客户注册界面
    FILE *fp=NULL;
    char *k2 = "业务受理";
    char *k1 = "窗口信息";
    sprintf(a,"%s%s.txt",riqi,k1);//
    fp = fopen(a,"r");
    if (fp == 0){
           cout<<a<<".txt文件失败,没有该天的记录!"<<endl;
           _sleep(2000);
           gly_seedayyw(glyy);  
    }
    int n1, n2, n3;
    fscanf(fp,"%d\n",&n1);
    fscanf(fp,"%d\n",&n2);
    fscanf(fp,"%d\n",&n3);
    fclose(fp);
    cout<<"\t该天共有"<<n2<<"人登录本系统,并成功分派号码!"<<endl;
    cout<<"共有"<<n2-n3<<"位客户成功办理业务,"<<n3<<"位客户放弃了业务办理。"<<endl; 
    sprintf(a,"%s%s.txt",riqi,k2);    
    fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败!
    if (fp == 0){
           cout<<a<<".txt文件失败,没有该天的记录!"<<endl;
           _sleep(2000);
           gly_seedayyw(glyy); 
    }
    KList K;
K_InitList(K);
int n,i;
    KList p; 
    p = K; 
    fscanf(fp,"%d\n",&n);//读入n
    for (i = 1; i <= n+1; i++){
        KList qq;
        qq = new KNode;
        qq->next = p->next;
        fscanf(fp,"%s%s%s%s%s%s\n",qq->id,qq->yw,qq->numd,qq->numw,qq->czyid,qq->cg);//读入数据      
        p->next = qq;
        p = qq;
    }
    fclose(fp); //关闭文件

cout<<"\t\t    今天共有"<<n<<"人取票办理业务"<<endl;
p = K;
K = K->next;
while(K){
        cout<<K->id;
for (i = 1; i <= 10-strlen(K->id); i++)
   cout<<' ';
cout<<K->yw;
for (i = 1; i <= 10-strlen(K->yw); i++)
   cout<<' ';
        cout<<K->numd;
        for (i = 1; i <= 10-strlen(K->numd); i++)
 cout<<' ';
        cout<<K->numw;
        for (i = 1; i <= 10-strlen(K->numw); i++)
 cout<<' ';
cout<<K->czyid;
for (i = 1; i <= 10-strlen(K->czyid); i++)
 cout<<' ';
cout<<K->cg<<endl;
p = K->next;
delete(K);
K = p;
}
    cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";;
show_time();//调用时间函数,显示此时的时间
cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
char ch;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  gly_ywshow(glyy); break; //带参数返回管理员欢迎界面
case '2':  main_interface(); break; //OK
default: cout<<"您输入的操作序号有误,请重新输入!";
_sleep(1500); //延时1.5秒
gly_seedayyw(glyy); //管理员帮助文档界面 OK
break;
}



void gly_seemonthyw(GNode gly){//查看某月业务
    GNode glyy = gly;
    char m;
    int year, month, i;
    int sum = 0, sum1 = 0, sum2 = 0;
    char riqi[12] = {0};
    char dd[4] = {0};
    system("cls");//清屏操作
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;    
    cout<<"请输入你要查询的年月,格式:“2013/06”表示2013年6月的业务详情"<<endl;
    cout<<"\t\t\t→";
    scanf("%d%c%d",&year, &m, &month);//要输入2009/01,用这种方式 
    W_thedays(year,sum,month);//求出该月有多少天 
     char a[30] = {0}; //如果不存在,就自动创建,一个带有表头的txt文件,并界面跳转至客户注册界面
    FILE *fp=NULL;
    char *k2 = "业务受理";
    char *k1 = "窗口信息";
    int n1, n2, n3;
    if (month < 10)
    sprintf(riqi,"%d0%d",year,month);//将年月赋值成一个字符数组
    else
    sprintf(riqi,"%d%d",year,month);//将年月赋值成一个字符数组  
    for (i = 1; i <= sum; i++){
        if (i < 10)
        sprintf(dd,"0%d",i);
        else
        sprintf(dd,"%d",i);
        sprintf(a,"%s%s%s.txt",riqi,dd,k1);
        fp = fopen(a,"r");//打开文件 
        if (fp == 0){
           //cout<<a<<"文件失败,没有该天的记录!"<<endl;
           fclose(fp);//关闭文件
        }
        else {    
            fscanf(fp,"%d\n",&n1);
            fscanf(fp,"%d\n",&n2);
            fscanf(fp,"%d\n",&n3);
            fclose(fp);//关闭文件 
            sum1 += n2;
            sum2 += n3;
        }        
    }
    cout<<"\t该月共有"<<sum1<<"人登录本系统,并成功分派号码!"<<endl;
    cout<<"共有"<<sum1-sum2<<"位客户成功办理业务,"<<sum2<<"位客户放弃了业务办理。"<<endl;
    cout<<"\t\t\t具体详情如下:\n"<<endl; 
    //搜索查看业务受理.txt文件 
    for (i = 1; i <= sum; i++){
        if (i < 10)
        sprintf(dd,"0%d",i);
        else
        sprintf(dd,"%d",i);
        sprintf(a,"%s%s%s.txt",riqi,dd,k2);
        fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败!
        if (fp == 0){
            fclose(fp); //关闭文件 
        }
        else{
            KList K;
        K_InitList(K);
        int nn,ii;
            KList p; 
            p = K; 
            fscanf(fp,"%d\n",&nn);//读入n
            for (ii = 1; ii <= nn+1; ii++){
                KList qq;
                qq = new KNode;
                qq->next = p->next;
                fscanf(fp,"%s%s%s%s%s%s\n",qq->id,qq->yw,qq->numd,qq->numw,qq->czyid,qq->cg);//读入数据      
                p->next = qq;
                p = qq;
            }
            fclose(fp); //关闭文件
       
        cout<<"\t"<<riqi<<dd<<"这天共有"<<nn<<"人取票办理业务"<<endl;
        p = K;
        K = K->next;
        while(K){
                cout<<K->id;
        for (ii = 1; ii <= 10-strlen(K->id); ii++)
           cout<<' ';
        cout<<K->yw;
        for (ii = 1; ii <= 10-strlen(K->yw); ii++)
           cout<<' ';
                cout<<K->numd;
                for (ii = 1; ii <= 10-strlen(K->numd); ii++)
         cout<<' ';
                cout<<K->numw;
                for (ii = 1; ii <= 10-strlen(K->numw); ii++)
         cout<<' ';
        cout<<K->czyid;
        for (ii = 1; ii <= 10-strlen(K->czyid); ii++)
         cout<<' ';
        cout<<K->cg<<endl;
        p = K->next;
        delete(K);
        K = p;
        }
        cout<<endl;
        }        
    }
    cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";;
show_time();//调用时间函数,显示此时的时间
cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
char ch;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  gly_ywshow(glyy); break; //带参数返回管理员欢迎界面
case '2':  main_interface(); break; //OK
default: cout<<"您输入的操作序号有误,请重新输入!";
_sleep(1500); //延时1.5秒
gly_seedayyw(glyy); //管理员帮助文档界面 OK
break;
}   
}


void gly_seeczy(GNode gly){//查看管理员(或者操作员)详细信息 00000
GList G, q;
GNode glyy = gly;
int n, i;
G_InitList(G);//初始化G链表
G_AddTxt(G,n);//将Txt文件中的内容读入到G链表中
system("cls");//清屏操作
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"★★★★★★★★★中国农业银行**分行管理员以及操作员信息表★★★★★★★★★"<<endl; 
show_time();//调用时间函数,显示此时的时间 
ofstream coutFile;//定义一个打开文件
coutFile.open("administrator.txt");//打开文件
if (!coutFile.is_open()){//打开文件失败
cout<<"\t\t\t☆☆☆☆打开文件失败!请检修系统☆☆☆☆"<<endl;
}
coutFile<<n;
cout<<"共有";
cout<<n<<"位操作员(包括管理员)"<<endl;
while (G)
{
coutFile<<G->id<<"\t"<<G->psw<<"\t"<<G->quxian<<"\t"<<G->num<<endl;
        cout<<G->id;
for (i = 1; i <= 10-G->id.length(); i++)
 cout<<' ';
cout<<G->psw;
for (i = 1; i <= 10-G->psw.length(); i++)
 cout<<' ';
        cout<<G->quxian;
        for (i = 1; i <= 10-G->quxian.length(); i++)
 cout<<' ';
        cout<<G->num<<endl;
        q = G->next;//进行链表的空间释放 
        free(G);
G = q;
}
coutFile.close();//关闭文件
    char xuhao;//定义输入选择的序号
    cout<<"\n\n"; 
    cout<<"\t\t☆☆☆☆☆查看数据成功!☆☆☆☆☆" <<endl;
cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
    cin>>xuhao;
switch(xuhao){
case '1': gly_control(glyy); break;//返回上一界面,重新调用管理员管理界面 OK
case '2': main_interface(); break; //退出,返回到主界面 OK
default : cout<<"您输入的是任意键,即将为您直接跳转至主界面!!";
_sleep(1000); //延时1秒
main_interface(); //返回到主界面 OK
break;  




void gly_addczy(GNode gly){// 添加管理员(或者操作员)信息 1
system("cls");//清屏操作
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※※※※添加操作员信息界面※※※※※※※※※※※※※※※"<<endl;
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\n";
cout<<"\t\t操作提示:"<<endl;
cout<<"\t\t                     “工号   密码   权限 窗口 ”"<<endl;
cout<<"\t\t管理员信息添加格式如:“0000  111111   1    0”"<<endl;
cout<<"\t\t                     “工号   密码   权限 窗口 ”"<<endl;
cout<<"\t\t操作员信息添加格式如:“1000  111111   0    0”"<<endl;
cout<<"\t\t其中工号和密码自己定义,“权限”和“窗口”根据提示信息填写"<<endl;
cout<<"\n\n\n";
show_time();//调用时间函数,显示此时的时间 
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※※※※添加操作员信息界面※※※※※※※※※※※※※※※※"<<endl;
cout<<"输入您要添加的管理员(或者操作员)信息,每条语句之间由空格控制:"<<endl;
cout<<"\t\t “工号 密码 权限 窗口”"<<endl;
cout<<"\t\t→";
int n;
GNode glyy = gly;
string id, psw, quxian, num;
cin>>id>>psw>>quxian>>num;
GList G;
n = G_InitList(G);
    G_AddTxt(G,n);//调用//将administration.txt文件的内容写入管理员链表G中   
//以下代码是将链表G的信息,加入到administration.txt文件中
n++;//对n进行自加,下一步将添加一个操作员信息
system("cls");//清屏操作
cout<<"★★★★★★★★★中国农业银行**分行管理员以及操作员信息表★★★★★★★★★"<<endl; 
show_time();//调用时间函数,显示此时的时间 
G_CinTxt(G,n,id,psw,quxian,num);//将administration.txt文件中的信息进行写入输出
    char xuhao;//定义输入选择的序号
    cout<<"\n\n"; 
    cout<<"\t\t☆☆☆☆☆添加数据成功!☆☆☆☆☆" <<endl;
cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
    cin>>xuhao;
switch(xuhao){
case '1': gly_control(glyy); break;//返回上一界面,重新调用管理员管理界面 OK
case '2': main_interface(); break; //退出,返回到主界面 OK
default : cout<<"您输入的是任意键,即将为您直接跳转至主界面!!";
_sleep(1000); //延时1秒
main_interface(); //返回到主界面 OK
break;  
}   



void gly_updataczy(GNode gly){//修改管理员(或者操作员)信息0000
GList G;
GNode glyy = gly;
int n, i = 0;
G_InitList(G);//初始化G 
G_AddTxt(G,n);//将txt文件中的内容读入到G链表中来
string id;
string psw1, psw2;
system("cls");//清屏操作 
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※修改管理员(或者操作员)信息界面※※※※※※※※※※※※"<<endl;
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\n";
cout<<"\t\t操作提示:"<<endl;
cout<<"\t\t输入您要修改的“工号”"<<endl;
cout<<"\t\t管理员工号如:“0000”"<<endl;
cout<<"\t\t操作员工号如:“1000”"<<endl;
cout<<"\t\t其中工号的输入根据要修改的工号输入"<<endl;
cout<<"\t\t可以修改的内容为该工号对应的密码!"<<endl;
cout<<"\n";
show_time();//调用时间函数,显示此时的时间 
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※修改管理员(或者操作员)信息界面※※※※※※※※※※※"<<endl;
cout<<"输入您要修改的管理员(或者操作员)的ID:"<<endl;
cout<<"\t\t→";
cin>>id;//输入要修改的ID
//下面根据输入的ID在链表中进行查找,如果查找成功,就继续输入新密码,否则,重新调用该函数
ofstream coutFile;
coutFile.open("administrator.txt");//打开文件 ,进行写操作
if (!coutFile.is_open()){
cout<<"\t\t\t☆☆☆☆打开文件失败!请检修系统☆☆☆☆"<<endl;
}
coutFile<<n;
GList q;
while (G)
{
coutFile<<G->id<<"\t"<<G->psw<<"\t"<<G->quxian<<"\t"<<G->num<<endl;
   if (id == G->id)
i = 1;
q = G->next;
free(G);
G = q;
}
coutFile.close();//关闭文件
if (i == 0){
        cout<<"\t\t\t您输入的ID不存在,请重新输入ID!"<<endl;
        cout<<"\t\t\t请稍等,即将为您跳转!"<<endl; 
        _sleep(1000);//延时1秒 
gly_updataczy(glyy);//重新调用修改管理员(或者操作员)信息界面OK
        } 
else{
cout<<"\t\t “请您输入新密码”"<<endl;
cout<<"\t\t→";
psw1 = password();
cout<<endl;
cout<<"\t\t “请再次输入新密码”"<<endl;
cout<<"\t\t→";
psw2 = password();
while(psw1 != psw2){
cout<<"您两次输入的密码不一样!请重新输入"<<endl;
cout<<"\t\t “请您输入新密码”"<<endl;
cout<<"\t\t→";
psw1 = password();
cout<<endl;
cout<<"\t\t “请再次输入新密码”"<<endl;
cout<<"\t\t→";
psw2 = password();
}
GList G, q;//要重新定义
int n, i;//要重新定义
G_InitList(G);//要重新定义,进行G链表的初始化操作 
G_AddTxt(G,n);//要重新定义,将文件中的内容读入到G链表中 
ofstream coutFile;
coutFile.open("administrator.txt");//打开文件 

if (!coutFile.is_open()){
cout<<"\t\t\t☆☆☆☆打开文件失败!请检修系统☆☆☆☆"<<endl;
}
coutFile<<n;//写入操作员总个数 
system("cls");//清屏操作
        cout<<"★★★★★★★★★管理员以及操作员信息表★★★★★★★★★"<<endl; 
        show_time();//调用时间函数,显示此时的时间 
        cout<<"\t共有";
        cout<<n<<"位操作员(包括管理员)";
        while (G)
        {
        if (id == G->id){
        G->psw = psw1;
        }
        coutFile<<G->id<<"\t"<<G->psw<<"\t"<<G->quxian<<"\t"<<G->num<<endl;
        cout<<G->id;
        for (i = 1; i <= 10-G->id.length(); i++)
         cout<<' ';
        cout<<G->psw;
        for (i = 1; i <= 10-G->psw.length(); i++)
         cout<<' ';
            cout<<G->quxian;
            for (i = 1; i <= 10-G->quxian.length(); i++)
         cout<<' ';
            cout<<G->num<<endl;
        q = G->next;
        free(G);
        G = q;
        }
        coutFile.close();//关闭文件
        char xuhao;//定义输入选择的序号
        cout<<"\n";
        cout<<"\t\t☆☆☆☆☆修改管理员(或操作员)信息成功!☆☆☆☆☆" <<endl;
        cout<<"\t\t\t1、返回上一界面"<<endl;
        cout<<"\t\t\t2、退出(2或者其他任意键)"<<endl;
        cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
        cout<<"\t\t\t→";
        cin>>xuhao;
        switch(xuhao){
        case '1': gly_control(glyy); break;//返回上一界面,重新调用管理员管理界面 OK
        case '2': main_interface(); break; //退出,返回到主界面 OK
        default : cout<<"\t\t您输入的是任意键,即将为您直接跳转至主界面!!";
        _sleep(1000); //延时1秒
main_interface(); //返回到主界面 OK
break;  
}      
}
}




void gly_deleteczy(GNode gly){//删除管理员(或者操作员)信息0000000 测试出现问题,不能继续下去
GList G;
GNode glyy = gly;
int n, i = 0;
G_InitList(G);//初始化G 
G_AddTxt(G,n); //将txt文件中的内容读取到G链表中 
string id;
system("cls");//清屏操作 
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※删除管理员(或者操作员)信息界面※※※※※※※※※※※※"<<endl;
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\n";
cout<<"\t\t操作提示:"<<endl;
cout<<"\t\t输入您要删除的“工号”"<<endl;
cout<<"\t\t管理员工号如:“0000”"<<endl;
cout<<"\t\t操作员工号如:“1000”"<<endl;
cout<<"\t\t其中工号的输入根据要删除的工号输入"<<endl;
cout<<"\t\t删除的内容为该工号对应的管理员(或者操作员所有的信息)!"<<endl;
cout<<"数据删除后将不能恢复,请谨慎操作!!!"<<endl; 
cout<<"\n";
show_time();//调用时间函数,显示此时的时间 
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※删除管理员(或者操作员)信息界面※※※※※※※※※※※"<<endl;
cout<<"输入您要删除的管理员(或者操作员)的ID:"<<endl;
cout<<"\t\t→";
cin>>id;//输入要删除的ID
//下面根据输入的ID在链表中进行查找,如果查找成功,就进行删除操作,否则,重新调用该函数
ofstream coutFile;
coutFile.open("administrator.txt"); //打开文件,进行写入操作 
if (!coutFile.is_open()){
cout<<"\t\t\t☆☆☆☆打开文件失败!请检修系统☆☆☆☆"<<endl;
}
coutFile<<n;//写入n,n表示个数 
GList q;//定义一个q,用来对G进行空间释放
while (G)
{
coutFile<<G->id<<"\t"<<G->psw<<"\t"<<G->quxian<<"\t"<<G->num<<endl;
   if (id == G->id)
i = 1;
q = G->next;
free(G);
G = q;

coutFile.close();//关闭文件 
if (i == 0){
          cout<<"您要删除的管理员(或操作员)的ID不存在,请重新输入要删除的ID!"<<endl;
          cout<<"\t\t\t请稍等,即将为您跳转!"<<endl; 
          _sleep(2000);//延时2秒钟 
 gly_deleteczy(glyy);//重新调用删除管理员(或者操作员)信息界面OK
    }
    else{ 
    GList G, q;//要重新定义
int n, i;//要重新定义
G_InitList(G);//要重新定义,进行G链表的初始化操作 
G_AddTxt(G,n);//要重新定义,将文件中的内容读入到G链表中 
ofstream coutFile;
coutFile.open("administrator.txt");//打开文件 

if (!coutFile.is_open()){
cout<<"\t\t\t☆☆☆☆打开文件失败!请检修系统☆☆☆☆"<<endl;
}
    coutFile<<n-1;//写入操作员总个数
     system("cls");//清屏操作 
    cout<<"★★★★★★★★★中国农业银行**分行管理员以及操作员信息表★★★★★★★★★"<<endl; 
    show_time();//调用时间函数,显示此时的时间 
    cout<<"\t共有";
    cout<<n-1<<"位操作员(包括管理员)";
    while (G)
    {    
if (id == G->id){//刚开始是这里出现错误,
    q = G->next;
      free(G);
      G = q;
}
if (G == NULL) break;//注意,不是判断(G->next == NULL),这里容易出错误 
    coutFile<<G->id<<"\t"<<G->psw<<"\t"<<G->quxian<<"\t"<<G->num<<endl;
    cout<<G->id;
    for (i = 1; i <= 10-G->id.length(); i++)
     cout<<' ';
    cout<<G->psw;
    for (i = 1; i <= 10-G->psw.length(); i++)
     cout<<' ';
        cout<<G->quxian;
        for (i = 1; i <= 10-G->quxian.length(); i++)
     cout<<' ';
        cout<<G->num<<endl;
    q = G->next;
    free(G);
    G = q;
    }
    coutFile.close();//关闭文件 
    char xuhao;//定义输入选择的序号
        cout<<"\n\n"; 
        cout<<"\t\t☆☆☆☆☆删除管理员(或操作员)信息成功!☆☆☆☆☆" <<endl;
        cout<<"\t\t\t1、返回上一界面"<<endl;
        cout<<"\t\t\t2、退出(2或者其他任意键)"<<endl;
        cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
        cout<<"\t\t\t→";
        cin>>xuhao;
        switch(xuhao){
        case '1': gly_control(glyy); break;//返回上一界面,重新调用管理员管理界面 OK
        case '2': main_interface(); break; //退出,返回到主界面 OK
        default : cout<<"您输入的是任意键,即将为您直接跳转至主界面!!";
        _sleep(1000); //延时1秒
main_interface(); //返回到主界面 OK
break;  
}

}


void czy_interface(void){//操作员登录界面  OK
    char ch; 
string title;//文件名,存放时间的比如2013611
string id;//操作员ID
string psw;//操作员密码
GNode czy;
int n, i;//对文件中文件个数进行终止和统计
system("cls");//清屏操作
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆操作员登录界面◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"\n";
cout<<"\t\t\t中国农业银行排队系统"<<endl;
cout<<"\t";
show_time();//调用时间函数,显示此时的时间
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
    cout<<"\t★                                                        ★\n"; 
    cout<<"\t★    温馨提示:                                           ★\n";    
    cout<<"\t★           您即将进行登录操作,您确定要继续进行么?     ★\n";     
cout<<"\t★                                                        ★\n";
cout<<"\t★           Y、继续                                      ★\n";     
cout<<"\t★           N、返回                                      ★\n";
cout<<"\t★                                                        ★\n";     
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n";     
cout<<"\t\t\t请输入您的选择(Y/N):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
if(ch == 'y' || ch == 'Y')
;
else
main_interface();  
cout<<"\t\t\t请输入您的操作员ID:"<<endl;
cout<<"\t\t\t→";
cin>>id;  
cout<<"\t\t\t请输入密码(6位):"<<endl;
cout<<"\t\t\t→";
psw = password(); 
cout<<endl;
//在下面进行身份id和密码的匹配 OK
ifstream cinFile;//定义一个文件操作名//进行读操作
cinFile.open("administrator.txt");//打开文件
if (!cinFile.is_open())//判断文件是否被打开
cout<<"\t\t\t☆☆打开文件失败!,请检修系统☆☆"<<endl;
cinFile>>n;//读入n 
for (i = 1; i <= n+1; i++){
cinFile>>czy.id;
cinFile>>czy.psw;
cinFile>>czy.quxian;
cinFile>>czy.num;
if (id == czy.id  && psw == czy.psw && czy.quxian == "0"){ //成功之后跳转至“操作员业务受理窗口界面”OK
cout<<endl;
cout<<"\t\t\t登录成功!"<<endl;
cinFile.close();//文件关闭
//下面输出哪些窗口是空闲的,
//将窗口信息txt文件写入到那个wNode数组中,
char a[30] = {0}; 
FILE *fp=NULL;
char *k = "窗口信息";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
int len = tempstring.length();
int j, in, tempsum = 0;
for (j = 0; j < len ;j++)
b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败! 
if(fp==0){
cout<<"打开"<<a<<".txt文件失败"<<endl; 
exit(0);

int size, temps1, temps2;
fscanf(fp, "%d\n", &size);
fscanf(fp, "%d\n", &temps1);
fscanf(fp, "%d\n", &temps2);
for (in = 0; in <= size; in++){
fscanf(fp, "%s",WNode[in].ckczyid);
fscanf(fp, "%s",WNode[in].kx);
fscanf(fp, "%s",WNode[in].ckid);
fscanf(fp, "%s",WNode[in].finally_cznumber);
fscanf(fp, "%s",WNode[in].weidao);
}
fclose(fp);//文件关闭
//将string类型的ip装换成char*类型
len = id.length();
char ipp[12] = {0};
for (j = 0; j < len ;j++)
ipp[j] = id[j]; 
for (in = 0; in <= size; in++){
if (strcmp(WNode[in].ckczyid,ipp) == 0){//已经登录过
cout<<"\t\t亲爱的"<<id<<"操作员,您已经在"<<in<<"号窗口登录!"<<endl;
_sleep(2500); //延时1秒
czy_ywinterface(czy, in);//跳转至操作员业务受理窗口界面 OK
break; 
}
if (strcmp(WNode[in].ckczyid,"0") == 0)
tempsum++;
}
if (tempsum == 0){
cout<<"\t\t\t您今天没有被安排工作!祝您假日愉快!"<<endl;
cout<<"\t\t\t即将为您跳转至主界面!"<<endl;
_sleep(4000);
main_interface();//返回主界面
}
else{
cout<<"\t\t\t还有"<<tempsum<<"个业务窗口为登录!"<<endl;
cout<<"\t\t未登录的窗口有:";
for (in = 0; in <= size; in++){
if (strcmp(WNode[in].ckczyid,"0") == 0)
cout<<in<<"号、";
}
cout<<endl; 
cout<<"\t\t\t请您根据上面提示的空闲窗口进行输入!"<<endl;
cout<<"\t\t\t请输入您要选择的窗口进行登录!"<<endl;
int tempmm, kp = 0, tpp = 0;
                while(kp == 0){
                    cout<<"\t\t\t→";
                    cin>>tempmm;
                    tpp = 0; 
                    for (in = 0; in <= size; in++){
if (strcmp(WNode[in].ckczyid,"0") != 0){
                       if (tempmm == in)
                       tpp++;                       
                    }                     
  } 
                   if(tpp == 0){ 
                    kp = 1; 
                    cout<<"\t\t您选择业务窗口成功!祝您工作愉快!"<<endl;                    
                    }
                    else{
                         cout<<"\t\t\t该窗口已有操作员在上班"<<endl; 
                         cout<<"\t\t\t请您根据上面提示的空闲窗口进行输入!"<<endl; 
                    }                  
                }
//将该操作员的ID号写到txt文件中去
strcpy(WNode[tempmm].ckczyid,ipp);
fp=fopen(a,"w");//用输入的形式打开文件,不存在,则打开失败! 
if(fp==0){
cout<<"打开"<<a<<".txt文件失败"<<endl; 
exit(0);
}
fprintf(fp,"%d\n",size);
fprintf(fp,"%d\n",temps1);
fprintf(fp,"%d\n",temps2);
for (in = 0; in <= size; in++){
fprintf(fp,"%s\t%s\t%s\t%s\t%s\n",WNode[in].ckczyid,WNode[in].kx,WNode[in].ckid,WNode[in].finally_cznumber,WNode[in].weidao);
}
fclose(fp);
                _sleep(2000); //延时1秒
czy_ywinterface(czy, tempmm);//跳转至操作员业务受理窗口界面 OK
break;
}
}
}
cinFile.close();//文件关闭
if (i > n+1){//失败之后,重新加载次页面,重新登录输入操作  OK
cout<<"登录失败!"<<endl;
cout<<"您输入的密码或用户ID错误,请重新登录!"<<endl;
_sleep(1000); //延时1秒
czy_interface();//操作员登录界面 OK
}
}


void czy_ywinterface(GNode czy, int wnum){//操作员业务受理窗口界面  OK
GNode czyy = czy;
int wn = wnum;
char xuhao;//对应业务选项的序号
system("cls");
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※※※※操作员业务受理窗口界面※※※※※※※※※※※※※※※"<<endl;
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\t\t亲爱的"<<czyy.id<<"操作员现在在"<<wn<<"号窗口登录!"<<endl;
cout<<"\n\n";
cout<<"\t\t\t1、查看业务受理情况" <<endl;//void czy_ywshow(void);//操作员业务情况查看界面 
cout<<"\t\t\t2、业务受理操作"<<endl;//
cout<<"\t\t\t3、查看操作员帮助文档"<<endl;//
cout<<"\t\t\t4、返回上一页"<<endl;//
cout<<"\t\t\t5、退出"<<endl;//
cout<<"\n\n\n";
show_time();//调用时间函数,显示此时的时间 OK
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※※※※操作员业务受理窗口界面※※※※※※※※※※※※※※※※"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>xuhao;
switch(xuhao){
case '1': czy_ywshow(czyy, wn); break;//操作员业务情况查看界面 
case '2': czy_ywshouli(czyy, wn); break;//
case '3': Help_czy(czyy, QNCZY, wn); break;//查看操作员帮助文档0000000记得修改
case '4': czy_interface(); break;//返回上一界面,也就是返回到操作员登录界面 OK
case '5': main_interface(); break; //返回到主界面 OK
default : cout<<"您输入的操作序号有误,请从新输入!";
_sleep(1000); //延时1秒
czy_ywinterface(czyy,wn); //重新调用操作员业务受理窗口界面 OK
break;  
}
}


void czy_ywshow(GNode czy, int wnum){////操作员业务情况查看界面   OK
    GNode czyy = czy;
int wn = wnum;//对应的窗口序号 
char xuhao;//对应业务选项的序号
system("cls");
system("color 8e");//设置控制台前景色和背景色  3a 8e 0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※※※※操作员业务情况查看界面※※※※※※※※※※※※※※※"<<endl;
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\n";
cout<<"\t\t\t今天业务办理详细情况\n";
    KList K;
K_InitList(K);
int n;
K_readywsl(K, n);//将txt文件中的数据读到K链表到中 OK
cout<<"\t\t    今天共有"<<n<<"人取票办理业务"<<endl;
KList p = K;
int i;
K = K->next;
while(K){
        cout<<K->id;
for (i = 1; i <= 10-strlen(K->id); i++)
   cout<<' ';
cout<<K->yw;
for (i = 1; i <= 10-strlen(K->yw); i++)
   cout<<' ';
        cout<<K->numd;
        for (i = 1; i <= 10-strlen(K->numd); i++)
 cout<<' ';
        cout<<K->numw;
        for (i = 1; i <= 10-strlen(K->numw); i++)
 cout<<' ';
cout<<K->czyid;
for (i = 1; i <= 10-strlen(K->czyid); i++)
 cout<<' ';
cout<<K->cg<<endl;
p = K->next;
delete(K);
K = p;
}
cout<<"\n";
    cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";;
show_time();//调用时间函数,显示此时的时间 OK
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※※※※操作员业务受理界面※※※※※※※※※※※※※※※※"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>xuhao;
switch(xuhao){
case '1': czy_ywinterface(czyy, wn); break;//返回上一界面 OK
case '2': main_interface(); break; //返回到主界面 OK
default : cout<<"您输入的操作序号有误,请从新输入!";
_sleep(1500); //延时1秒
czy_ywshow(czyy,wn); // OK
break;  
}
}
 
void czy_ywshouli(GNode czy, int wnum){//操作员业务受理界面OK
GNode czyy = czy;
KNode e;
int wn = wnum;
char wnn[12] = {0};
sprintf(wnn,"%d",wn);
char xuhao;//对应业务选项的序号
system("cls");
system("color 8e");//设置控制台前景色和背景色  3a 8e 0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※※※※操作员业务受理界面※※※※※※※※※※※※※※※"<<endl;
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\t\t\t顾客至上,服务创造美好生活!\n";
    //进入的时候就检查是不是空闲的,是空闲的就出队列,分配一个,否则,就是已经分配了
char a[30] = {0}; //如果不存在,就自动创建,一个带有表头的txt文件,并界面跳转至客户注册界面
    FILE *fp=NULL;
char *k = "窗口信息";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败! 
if(fp==0){
cout<<"打开"<<a<<".txt文件失败"<<endl;
exit(0);
    }
    //读入内容 
    int size, temp1, temp2;
    fscanf(fp, "%d\n", &size);
    fscanf(fp, "%d\n", &temp1);
    fscanf(fp, "%d\n", &temp2);
for (j = 0; j <= size; j++){
fscanf(fp, "%s",WNode[j].ckczyid);
fscanf(fp, "%s",WNode[j].kx);
fscanf(fp, "%s",WNode[j].ckid);
fscanf(fp, "%s",WNode[j].finally_cznumber);
fscanf(fp, "%s",WNode[j].weidao);
}
fclose(fp);//文件关闭
if ((strcmp(WNode[wn].kx,"1") == 0)){//如果已经分配了(strcmp(WNode[wn].ckczyid,czyy.id) == 0) && 
cout<<"\t\t"<<WNode[wn].ckid<<"客户将在您的窗口办理业务\n";
cout<<"\t\t如果该客户在40秒之后没有来,就选择“继续呼叫下一位”操作\n";
cout<<"\t\t如果成功处理完客户的业务,请选择“处理完成”操作\n\n";
}
else{//否则就是没有分配客户,这就要调用函数进行分配啊
        strcpy(WNode[wn].kx, "1"); 
        char *kk = "业务受理";
   sprintf(a,"%s%s.txt",b,kk);
    fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败! 
    if(fp==0){
    cout<<"打开"<<a<<".txt文件失败"<<endl;
    exit(0);
        }
        //读入内容 
        int tempn;
        LinkQueue Q1;
        if(Q_InitList(Q1)){
            fscanf(fp, "%d\n", &tempn); 
            for (j = 0; j <= tempn; j++){
                fscanf(fp, "%s%s%s%s%s%s\n",e.id,e.yw,e.numd,e.numw,e.czyid,e.cg);
        if (strcmp(e.czyid,e.numw) == 0){//进队操作
        Q_EnQueue(Q1,e);
        }
            }
            fclose(fp);//关闭文件 
        }
        if (Q_Length(Q1) == 0){
            cout<<"\t\t当前系统中没有排队客户,您可以暂时整理相关资料。\n\n"<<endl;
            cout<<"\t\t★★★★★★★★★★★★★★★★\n";
            cout<<"\t\t★                            ★"<<endl; 
            cout<<"\t\t★       1、返回              ★"<<endl;//
            cout<<"\t\t★       2、退出              ★"<<endl;//
            cout<<"\t\t★                            ★"<<endl;
            cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";
            show_time();//调用时间函数,显示此时的时间 OK
            cout<< "\t\t\t中国农业银行排队系统"<<endl;
            cout<<"※※※※※※※※※※※※※操作员业务受理界面※※※※※※※※※※※※※※※※"<<endl;
            cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
            cout<<"\t\t\t→";
            cin>>xuhao;
            switch(xuhao){
            case '1': czy_ywinterface(czyy, wn); break;//返回上一界面 OK
            case '2': main_interface(); break; //返回到主界面 OK
            default : cout<<"您输入的操作序号有误,请从新输入!";
            _sleep(2000); //延时1秒
            czy_ywshouli(czyy,wn); // OK
            break;  
            }
        } 
        //你需要进行出队操作,将信息窗口的信息改变,ckid可以改写
        else{ 
           Q_DeQueue(Q1, e);
           strcpy(e.numw, wnn);
           strcpy(WNode[wn].ckid,e.id);
           //下面对“业务受理”信息改写 
           KList K;
           K_InitList(K);
           int nm;
           K_readywsl(K,nm);
            fp=fopen(a,"w");//用读写的形式打开文件 
            if(fp==0){puts("业务受理error");exit(0);}
            fprintf(fp,"%d\n",nm); //写入n 
            KList pp;
            pp = K->next;//链表的头是个乱码,必须指向下一个
            free(K);
            K = pp;
            while (K){
              if ((strcmp(K->id,e.id) == 0) && (strcmp(K->cg,"0") == 0)){
              strcpy(K->numw,e.numw);//strcpy(K->czyid,czyy.id);//Gnode是string类型的
              int pp;
              for (pp = 0; pp < czyy.id.length(); pp++)
              K->czyid[pp] = czyy.id[pp];
              K->czyid[pp] = '\0'; 
              fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\n",K->id,K->yw,K->numd,K->numw,K->czyid,K->cg);
              }
              else
                fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\n",K->id,K->yw,K->numd,K->numw,K->czyid,K->cg);//写操作
                pp = K->next;//进行链表的空间释放 
                free(K);
                K = pp;
            }
fclose(fp);//文件关闭
            //下面对“窗口信息”修改
            sprintf(a,"%s%s.txt",b,k);
            fp=fopen(a,"w");//用读写的形式打开文件
            fprintf(fp, "%d\n", size);
            fprintf(fp, "%d\n", temp1+1);//进行加1操作 
            fprintf(fp, "%d\n", temp2);
            for (int i = 0; i <= SIZE; i++){
            fprintf(fp,"%s\t%s\t%s\t%s\t%s\n",WNode[i].ckczyid,WNode[i].kx,WNode[i].ckid,WNode[i].finally_cznumber,WNode[i].weidao);//写操作 
            }
            fclose(fp);//文件关闭 
            cout<<"\t\t"<<WNode[wn].ckid<<"客户将在您的窗口办理业务\n";
            cout<<"\t\t如果该客户在40秒之后没有来,就选择“处理完成!”操作\n";
            cout<<"\t\t如果成功处理完客户的业务,请选择“处理完成”操作\n\n";
            cout<<"\t\t★★★★★★★★★★★★★★★★\n";
            cout<<"\t\t★                            ★"<<endl; 
            cout<<"\t\t★       1、处理完成!         ★" <<endl;//void czy_success(GNode czy);
            cout<<"\t\t★       2、呼叫客户!         ★"<<endl;//void czy_next(GNode czy);
            cout<<"\t\t★       3、返回              ★"<<endl;//
            cout<<"\t\t★       4、退出              ★"<<endl;//
            cout<<"\t\t★                            ★"<<endl;
            cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";
            show_time();//调用时间函数,显示此时的时间 OK
            cout<< "\t\t\t中国农业银行排队系统"<<endl;
            cout<<"※※※※※※※※※※※※※操作员业务受理界面※※※※※※※※※※※※※※※※"<<endl;
            cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
            cout<<"\t\t\t→";
            cin>>xuhao;
            switch(xuhao){
            case '1': czy_success(czyy,wn, e); break;// OK
            case '2': czy_next(czyy,wn, e); break;//OK
            case '3': czy_ywinterface(czyy, wn); break;//返回上一界面 OK
            case '4': main_interface(); break; //返回到主界面 OK
            default : cout<<"您输入的操作序号有误,请从新输入!";
            _sleep(1500); //延时1秒
            czy_ywshouli(czyy,wn); // OK
            break;  
            } 
       }       
}
}


void czy_success(GNode czy, int wnum, KNode e){ //操作员成功处理  0
GNode czyy = czy;
int wn = wnum;
char xuhao;//对应业务选项的序号
system("cls");
system("color 8e");//设置控制台前景色和背景色  3a 8e 0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※※※※操作员业务操作界面※※※※※※※※※※※※※※※※\n"<<endl;
    cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\t\t\t顾客至上,服务创造美好生活!\n\n";
    char a[30] = {0}; 
    FILE *fp=NULL;
char *k = "窗口信息";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败! 
if(fp==0){
cout<<"打开"<<a<<"文件失败"<<endl;
exit(0);
    }
    //读入内容 
    int size, temp1, temp2;
    fscanf(fp, "%d\n", &size);
    fscanf(fp, "%d\n", &temp1);
    fscanf(fp, "%d\n", &temp2);
for (j = 0; j <= size; j++){
fscanf(fp, "%s",WNode[j].ckczyid);
fscanf(fp, "%s",WNode[j].kx);
fscanf(fp, "%s",WNode[j].ckid);
fscanf(fp, "%s",WNode[j].finally_cznumber);
fscanf(fp, "%s",WNode[j].weidao);
}
fclose(fp);//文件关闭
strcpy(WNode[wn].kx,"0");//改写窗口信息表中的kx属性
    strcpy(WNode[wn].ckid,"0");//改写窗口信息中的ckid属性
    int sum = atoi(WNode[wn].finally_cznumber);
    sprintf(WNode[wn].finally_cznumber,"%d",++sum);//成功办理的个数自加1 
    //下面对“窗口信息”修改
    fp=fopen(a,"w");//用读写的形式打开文件
    fprintf(fp, "%d\n", size);
    fprintf(fp, "%d\n", temp1); 
    fprintf(fp, "%d\n", temp2);
    for (int i = 0; i <= SIZE; i++){
    fprintf(fp,"%s\t%s\t%s\t%s\t%s\n",WNode[i].ckczyid,WNode[i].kx,WNode[i].ckid,WNode[i].finally_cznumber,WNode[i].weidao);//写操作 
    }
    fclose(fp);//文件关闭    
    //下面改写“业务受理”中的信息
    KList K;
    K_InitList(K);
    K_readywsl(K, sum);
    char *kk = "业务受理";
sprintf(a,"%s%s.txt",b,kk);
fp=fopen(a,"w");//用读写的形式打开文件 
if(fp==0){puts("业务受理error");exit(0);}
fprintf(fp,"%d\n",sum); //写入n 
KList pp;
pp = K->next;//链表的头是个乱码,必须指向下一个
    free(K);
    K = pp;
    while (K){
        if ((strcmp(K->id,e.id) == 0) && (strcmp(K->cg,"0") == 0))//找该元素
        fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\n",K->id,K->yw,K->numd,K->numw,K->czyid,"成功");//写操作
           //strcpy(K->cg,"成功");
        else
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\n",K->id,K->yw,K->numd,K->numw,K->czyid,K->cg);//写操作
pp = K->next;//进行链表的空间释放 
        free(K);
K = pp;
    }
fclose(fp); //关闭文件
//下面对“客户注册”信息改写
K_InitList(K);
    K_readzc(K, sum);
    char *kkk = "客户注册";
sprintf(a,"%s%s.txt",b,kkk);
fp=fopen(a,"w");//用读写的形式打开文件 
if(fp==0){puts("error");exit(0);}
fprintf(fp,"%d\n",sum); //写入n 
pp = K->next;//链表的头是个乱码,必须指向下一个
    free(K);
    K = pp;
    while (K){
if ((strcmp(K->id,e.id) == 0) && (strcmp(K->enuse,"可用") == 0))//找该元素
           strcpy(K->enuse,"不可用");
fprintf(fp,"%s\t%s\t%s\t%s\n",K->id,K->psw,K->yw,K->enuse);//写操作
pp = K->next;//进行链表的空间释放 
        free(K);
K = pp;
    }
fclose(fp); //关闭文件
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、继续办理          ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";
show_time();//调用时间函数,显示此时的时间 OK
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※※※※操作员业务操作界面※※※※※※※※※※※※※※※※"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>xuhao;
switch(xuhao){
case '1': czy_ywinterface(czyy,wn); break;// OK
case '2': main_interface(); break; //返回到主界面 OK
default : cout<<"您输入的操作序号有误,请从新输入!";
_sleep(1500); //延时1秒
main_interface(); // OK
break;  
}
}


void czy_next(GNode czy, int wnum, KNode e){ //操作员继续呼叫下一位(当前客户未到)
GNode czyy = czy;
int wn = wnum;
char xuhao;//对应业务选项的序号
system("cls");
system("color 8e");//设置控制台前景色和背景色  
cout<<"※※※※※※※※※※※※※操作员业务操作界面※※※※※※※※※※※※※※※※\n"<<endl;
    cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\t\t\t顾客至上,服务创造美好生活!\n\n";
    char a[30] = {0}; 
    FILE *fp=NULL;
char *k = "窗口信息";
string tempstring; 
char b[10] = {0}; 
tempstring = time_title2();
    int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)
    b[j] = tempstring[j]; 
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用输入的形式打开文件,不存在,则打开失败! 
if(fp==0){
cout<<"打开"<<a<<"文件失败"<<endl;
exit(0);
    }
    //读入内容 
    int size, temp1, temp2;
    fscanf(fp, "%d\n", &size);
    fscanf(fp, "%d\n", &temp1);
    fscanf(fp, "%d\n", &temp2);
for (j = 0; j <= size; j++){
fscanf(fp, "%s",WNode[j].ckczyid);
fscanf(fp, "%s",WNode[j].kx);
fscanf(fp, "%s",WNode[j].ckid);
fscanf(fp, "%s",WNode[j].finally_cznumber);
fscanf(fp, "%s",WNode[j].weidao);
}
fclose(fp);//文件关闭
strcpy(WNode[wn].kx,"0");//改写窗口信息表中的kx属性
    strcpy(WNode[wn].ckid,"0");//改写窗口信息中的ckid属性
    int sum = atoi(WNode[wn].weidao);
    sprintf(WNode[wn].weidao,"%d",++sum);//缺到的个数自加1 
    //下面对“窗口信息”修改
    fp=fopen(a,"w");//用读写的形式打开文件
    fprintf(fp, "%d\n", size);
    fprintf(fp, "%d\n", temp1); 
    fprintf(fp, "%d\n", temp2+1);//未到进行加1 
    for (int i = 0; i <= SIZE; i++){
    fprintf(fp,"%s\t%s\t%s\t%s\t%s\n",WNode[i].ckczyid,WNode[i].kx,WNode[i].ckid,WNode[i].finally_cznumber,WNode[i].weidao);//写操作 
    }
    fclose(fp);//文件关闭    
    //下面改写“业务受理”中的信息
    KList K;
    K_InitList(K);
    K_readywsl(K, sum);
    char *kk = "业务受理";
sprintf(a,"%s%s.txt",b,kk);
fp=fopen(a,"w");//用读写的形式打开文件 
if(fp==0){puts("业务受理error");exit(0);}
fprintf(fp,"%d\n",sum); //写入n 
KList pp;
pp = K->next;//链表的头是个乱码,必须指向下一个
    free(K);
    K = pp;
    while (K){
        if ((strcmp(K->id,e.id) == 0) && (strcmp(K->cg,"0") == 0))//找该元素
           fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\n",K->id,K->yw,K->numd,K->numw,K->czyid,"缺到");//写操作
        else
     fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\n",K->id,K->yw,K->numd,K->numw,K->czyid,K->cg);//写操作
pp = K->next;//进行链表的空间释放 
        free(K);
K = pp;
    }
fclose(fp); //关闭文件
//下面对“客户注册”信息改写
K_InitList(K);
    K_readzc(K, sum);
    char *kkk = "客户注册";
sprintf(a,"%s%s.txt",b,kkk);
fp=fopen(a,"w");//用读写的形式打开文件 
if(fp==0){puts("error");exit(0);}
fprintf(fp,"%d\n",sum); //写入n 
pp = K->next;//链表的头是个乱码,必须指向下一个
    free(K);
    K = pp;
    while (K){
if ((strcmp(K->id,e.id) == 0) && (strcmp(K->enuse,"可用") == 0))//找该元素
           strcpy(K->enuse,"不可用");
fprintf(fp,"%s\t%s\t%s\t%s\n",K->id,K->psw,K->yw,K->enuse);//写操作
pp = K->next;//进行链表的空间释放 
        free(K);
K = pp;
    }
fclose(fp); //关闭文件
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、继续办理          ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";
show_time();//调用时间函数,显示此时的时间 OK
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※※※※操作员业务操作界面※※※※※※※※※※※※※※※※"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>xuhao;
switch(xuhao){
case '1': czy_ywinterface(czyy,wn); break;// OK
case '2': main_interface(); break; //返回到主界面 OK
default : cout<<"您输入的操作序号有误,请从新输入!";
_sleep(1500); //延时1秒
main_interface(); // OK
break;  
}
}


void Help_interface(){//帮助文档主界面 OK
char xuhao;//对应业务选项的序号
system("cls");
system("color 8e");//设置控制台前景色和背景色  3a 8e 0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"※※※※※※※※※※※※※帮助文档界面※※※※※※※※※※※※※※※"<<endl;
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"\n\n";
cout<<"\t\t\t1、客户帮助" <<endl;
cout<<"\t\t\t2、管理员帮助"<<endl;
cout<<"\t\t\t3、操作员帮助"<<endl;
cout<<"\t\t\t4、退出"<<endl;//
cout<<"\n\n\n";
show_time();//调用时间函数,显示此时的时间 OK
cout<< "\t\t\t中国农业银行排队系统"<<endl;
cout<<"※※※※※※※※※※※※※帮助文档界面※※※※※※※※※※※※※※※※"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>xuhao;
switch(xuhao){
case '1': Help_kh1(); break;//客户帮助文档界面(未登录进来的)OK
case '2': Help_gly1(); break;//管理员帮助文档界面(未登录进来的)OK
case '3': Help_czy1(); break;//操作员帮助文档界面(未登录进来的)OK
case '4': main_interface(); break; //
default : cout<<"您输入的操作序号有误,请从新输入!";
_sleep(1000); //延时1秒
Help_interface(); //重新调用帮助主界面 OK
break;  
}
}


void Help_kh1(){//客户帮助文档界面(未登录进来的)OK
char ch;
system("cls");
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
    cout<<"★★★★★★★★★★★★★客户帮助文档★★★★★★★★★★★★★"<<endl; 
cout<<"\n";        
cout<<"\t\t欢迎使用中国农业银行客户帮助文档:"<<endl;
//进行内容填充
cout<<"\t\t注意事项:"<<endl; 
cout<<"\t\t\t①必须先进行客户注册,然后才能进行客户登录操作;"<<endl;
cout<<"\t\t\t②注册时,须以您的省份证ID进行注册,密码为6位数字。"<<endl;
cout<<"\t\t客户登录后的操作:"<<endl; 
cout<<"\t\t\t⑴选择相应业务类型,然后系统会自动分配号码;"<<endl;
cout<<"\t\t\t⑵可以查看当前排队情况;"<<endl;
cout<<"\t\t\t⑶可以查看帮助文档;"<<endl;
cout<<"\t\t\t⑷可以返回上一界面,即返回到客户登录界面;"<<endl;
cout<<"\t\t\t⑸可以退出客户登录。"<<endl;
    cout<<"\n";
    cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";
show_time();//调用时间函数,显示此时的时间
cout<<"★★★★★★★★★★★★★客户帮助文档★★★★★★★★★★★★★"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  Help_interface(); break;//OK
case '2':  main_interface(); break; //OK
default: cout<<"您输入的操作序号有误,请重新输入!";
_sleep(1500); //延时1.5秒
Help_kh1(); //客户帮助文档界面(未登录进来的)OK
break;

}


void Help_gly1(){//管理员帮助文档界面(未登录进来的)OK
char ch;
system("cls");
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"★★★★★★★★★★★★★管理员帮助文档★★★★★★★★★★★★★"<<endl; 
cout<<"\n";        
cout<<"\t\t欢迎使用中国农业银行管理员帮助文档:"<<endl;
//进行内容填充
cout<<"\t\t注意事项:"<<endl; 
cout<<"\t\t\t①管理员具有的相关操作,请谨慎操作;"<<endl;
cout<<"\t\t\t②删除后的数据不能进行恢复。"<<endl;
cout<<"\t\t管理员登录后的操作:"<<endl; 
cout<<"\t\t\t⑴管理员分为超级管理员和一般管理员;"<<endl;
cout<<"\t\t\t⑵超级管理员具有修改、添加、删除一般管理员和操作员信息;"<<endl;
cout<<"\t\t\t⑶可以查看帮助文档;"<<endl;
cout<<"\t\t\t⑷可以查看业务受理情况"<<endl;
cout<<"\t\t\t⑸可以按业绩查看业务受理情况"<<endl;
cout<<"\t\t\t⑹可以退出。"<<endl;
    cout<<"\n";
    cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";
show_time();//调用时间函数,显示此时的时间
cout<<"★★★★★★★★★★★★★管理员帮助文档★★★★★★★★★★★★★"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  Help_interface(); break; //OK
case '2':  main_interface(); break;//OK
default: cout<<"您输入的操作序号有误,请重新输入!";
_sleep(1500); //延时1.5秒
Help_gly1(); //管理员帮助文档界面(未登录进来的) OK
break;

}


void Help_czy1(){//操作员帮助文档界面(未登录进来的)OK
char ch;
system("cls");
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"★★★★★★★★★★★★★操作员帮助文档★★★★★★★★★★★★★"<<endl; 
cout<<"\n";        
cout<<"\t\t欢迎使用中国农业银行操作员帮助文档:"<<endl;
cout<<"\t\t注意事项:"<<endl; 
cout<<"\t\t\t①必须先进行操作员登陆,然后才能进行操作;"<<endl;
cout<<"\t\t\t②操作员的信息的修改必须经过管理员实现"<<endl;
cout<<"\t\t登录后的操作:"<<endl; 
cout<<"\t\t\t⑴选择相应业务处理方式进行业务处理"<<endl;
cout<<"\t\t\t⑵可以查看当前排队情况;"<<endl;
cout<<"\t\t\t⑶可以查看帮助文档;"<<endl;
cout<<"\t\t\t⑷可以返回上一界面;"<<endl;
cout<<"\t\t\t⑸可以退出。"<<endl;
    cout<<"\n";
    cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";
show_time();//调用时间函数,显示此时的时间
cout<<"★★★★★★★★★★★★★操作员帮助文档★★★★★★★★★★★★★"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  Help_interface(); break; //OK
case '2':  main_interface(); break;//OK
default: cout<<"您输入的操作序号有误,请重新输入!";
_sleep(1500); //延时1.5秒
Help_czy1(); //操作员帮助文档界面(未登录进来的) OK
break;

}


void Help_kh(KNode kh, int n){//客户帮助文档界面 OK1
KNode khh = kh;
int qn = n;
char ch;
system("cls");
system("color ec");//设置控制台前景色和背景色  红色
cout<<"★★★★★★★★★★★★★客户帮助文档★★★★★★★★★★★★★"<<endl; 
cout<<"\n";        
cout<<"\t\t欢迎使用中国农业银行客户帮助文档:"<<endl;
//进行内容填充
cout<<"\t\t注意事项:"<<endl; 
cout<<"\t\t\t①必须先进行客户注册,然后才能进行客户登录操作;"<<endl;
cout<<"\t\t\t②注册时,须以您的省份证ID进行注册,密码为6位数字。"<<endl;
cout<<"\t\t客户登录后的操作:"<<endl; 
cout<<"\t\t\t⑴选择相应业务类型,然后系统会自动分配号码;"<<endl;
cout<<"\t\t\t⑵可以查看当前排队情况;"<<endl;
cout<<"\t\t\t⑶可以查看帮助文档;"<<endl;
cout<<"\t\t\t⑷可以返回上一界面,即返回到客户登录界面;"<<endl;
cout<<"\t\t\t⑸可以退出客户登录。"<<endl;
    cout<<"\n";
    cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";;
show_time();//调用时间函数,显示此时的时间
cout<<"★★★★★★★★★★★★★客户帮助文档★★★★★★★★★★★★★"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  kh_welcome(khh); break; //OK
case '2':  Help_khtuichu(khh, qn); break; //OK
default: cout<<"您输入的操作序号有误,请重新输入!";
_sleep(1500); //延时1.5秒
Help_kh(khh, qn); //客户帮助文档界面 OK
break;

}


void Help_khtuichu(KNode kh, int n){//客户帮助文档退出中转界面 OK
KNode khh = kh;
int qn = n;
char ch;
    system("cls");
    system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
    cout<<"\t★                                                        ★\n"; 
    cout<<"\t★    温馨提示:                                           ★\n";    
    cout<<"\t★           您已经登录了客户操作,继续退出将退出登录。   ★\n";     
cout<<"\t★                                                        ★\n";
cout<<"\t★           1、继续退出                                  ★\n";     
cout<<"\t★           2、返回上一页                                ★\n";
cout<<"\t★                                                        ★\n";     
cout<<"\t★                                                        ★\n";
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n";     
    cout<<endl;
show_time();//调用时间函数,显示此时的时间
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  main_interface(); break;
case '2':  Help_kh(khh, qn); break;
default: cout<<"您输入的操作序号有误,请从新输入!";
_sleep(1500); //延时1.5秒
Help_khtuichu(khh, qn); //客户帮助文档退出中转界面 OK
break;

}


void Help_gly(GNode gly, int n){//管理员帮助文档界面 OK
GNode glyy = gly;
int qn = n;
char ch;
system("cls");
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
cout<<"★★★★★★★★★★★★★管理员帮助文档★★★★★★★★★★★★★"<<endl; 
cout<<"\n";        
cout<<"\t\t欢迎使用中国农业银行管理员帮助文档:"<<endl;
//进行内容填充
cout<<"\t\t注意事项:"<<endl; 
cout<<"\t\t\t①管理员具有的相关操作,请谨慎操作;"<<endl;
cout<<"\t\t\t②删除后的数据不能进行恢复。"<<endl;
cout<<"\t\t管理员登录后的操作:"<<endl; 
cout<<"\t\t\t⑴管理员分为超级管理员和一般管理员;"<<endl;
cout<<"\t\t\t⑵超级管理员具有修改、添加、删除一般管理员和操作员信息;"<<endl;
cout<<"\t\t\t⑶可以查看帮助文档;"<<endl;
cout<<"\t\t\t⑷可以返回上一界面,即返回到客户登录界面;"<<endl;
cout<<"\t\t\t⑸可以查看帮助文档;"<<endl;
cout<<"\t\t\t⑹可以返回上一界面,即返回到客户登录界面;"<<endl;
cout<<"\t\t\t⑺可以退出管理员登录。"<<endl;
    cout<<"\n";
    cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";;
show_time();//调用时间函数,显示此时的时间
cout<<"★★★★★★★★★★★★★管理员帮助文档★★★★★★★★★★★★★"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  gly_control(glyy); break; //带参数返回管理员欢迎界面
case '2':  Help_glytuichu(glyy, qn); break; //OK
default: cout<<"您输入的操作序号有误,请重新输入!";
_sleep(1500); //延时1.5秒
Help_gly(glyy, qn); //管理员帮助文档界面 OK
break;

}


void Help_glytuichu(GNode gly, int n){//管理员帮助文档主页退出中转界面 OK
GNode glyy = gly;
int qn = n;
char ch;
    system("cls");
    system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
    cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
    cout<<"\t★                                                        ★\n"; 
    cout<<"\t★    温馨提示:                                           ★\n";    
    cout<<"\t★           您已经登录了管理员操作,继续退出将退出登录。 ★\n";     
cout<<"\t★                                                        ★\n";
cout<<"\t★           1、继续退出                                  ★\n";     
cout<<"\t★           2、返回上一页                                ★\n";
cout<<"\t★                                                        ★\n";     
cout<<"\t★                                                        ★\n";
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n";     
    cout<<endl;
show_time();//调用时间函数,显示此时的时间
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  main_interface(); break;
case '2':  Help_gly(glyy, qn); break;
default: cout<<"您输入的操作序号有误,请从新输入!";
_sleep(1500); //延时1.5秒
Help_glytuichu(glyy, qn); //帮助文档主页退出中转界面1 OK
break;
}        
}


void Help_czy(GNode czy, int n, int wnum){//操作员帮助文档界面OK
GNode czyy = czy;
int qn = n;
int wn = wnum;
char ch;
system("cls");
system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
    cout<<"★★★★★★★★★★★★★操作员帮助文档★★★★★★★★★★★★★"<<endl; 
cout<<"\n";        
cout<<"\t\t欢迎使用中国农业银行操作员帮助文档:"<<endl;
cout<<"\t\t注意事项:"<<endl; 
cout<<"\t\t\t①必须先进行操作员登陆,然后才能进行操作;"<<endl;
cout<<"\t\t\t②操作员的信息的修改必须经过管理员实现"<<endl;
cout<<"\t\t登录后的操作:"<<endl; 
cout<<"\t\t\t⑴选择相应业务处理方式进行业务处理"<<endl;
cout<<"\t\t\t⑵可以查看业务受理情况;"<<endl;
cout<<"\t\t\t⑶可以查看帮助文档;"<<endl;
cout<<"\t\t\t⑷可以返回上一界面;"<<endl;
cout<<"\t\t\t⑸可以退出。"<<endl;
    cout<<"\n";
    cout<<"\n\t\t谢谢您的使用,请继续选择您的操作:"<<endl;
    cout<<"\t\t★★★★★★★★★★★★★★★★\n";
cout<<"\t\t★                            ★"<<endl; 
cout<<"\t\t★       1、返回              ★"<<endl;//
cout<<"\t\t★       2、退出              ★"<<endl;//
cout<<"\t\t★                            ★"<<endl;
cout<<"\t\t★★★★★★★★★★★★★★★★\n\n";;
show_time();//调用时间函数,显示此时的时间
cout<<"★★★★★★★★★★★★★操作员帮助文档★★★★★★★★★★★★★"<<endl;
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  czy_ywinterface(czyy, wn); break; //当参数返回到操作员欢迎界面
case '2':  Help_czytuichu(czyy, qn, wn); break; //
default: cout<<"您输入的操作序号有误,请重新输入!";
_sleep(1500); //延时1.5秒
Help_czy(czyy, qn, wn); //操作员帮助文档界面 OK
break;

}


void Help_czytuichu(GNode czy, int n, int wnum){//操作员帮助文档退出中转界面 OK
GNode czyy = czy;
int qn = n;
int wn = wnum;
char ch;
    system("cls");
    system("color 8e");//设置控制台前景色和背景色  0 黑色 c淡红色 e淡黄色 2绿色 7白色 8灰色 9淡蓝色
    cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;
    cout<<"\t★                                                        ★\n"; 
    cout<<"\t★    温馨提示:                                           ★\n";    
    cout<<"\t★           您已经登录了操作员操作,继续退出将退出登录。 ★\n";     
cout<<"\t★                                                        ★\n";
cout<<"\t★           1、继续退出                                  ★\n";     
cout<<"\t★           2、返回                                      ★\n";
cout<<"\t★                                                        ★\n";     
cout<<"\t★                                                        ★\n";
cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n";     
    cout<<endl;
show_time();//调用时间函数,显示此时的时间
cout<<"输入您要选择的方式(输入对应功能的序号):"<<endl;
cout<<"\t\t\t→";
cin>>ch;
switch(ch){
case '1':  main_interface(); break;
case '2':  Help_czy(czyy, qn, wn); break;
default: cout<<"您输入的操作序号有误,请从新输入!";
_sleep(2000); //延时2秒
Help_czytuichu(czyy, qn, wn); //操作员帮助文档退出中转界面 OK
break;
}        
}