员工信息管理系统

 一. 目的

C语言的课设选择了员工管理系统,处理的对象为员工的信息,分为3个端(管理员,普通员工,部门经理)登录。进入主函数首先读取文件内容,其次用户选择登录身份,验证登录密码,其次选择每个登录身份的各项功能。存在文件及文件之间的交互,*输入密码等。

二. 功能模块图





三.各功能简单描述

1.管理员模块:

密码验证成功后,进入管理员菜单选项,管理员可以进行:

      1采集信息(添加员工信息,添加部门经理信息):添加信息后选择是否保存,若保存将员工(部门经理)信息保存到存放员工(部门经理)信息的文件(staff.txt/manager.txt),其中添加员工信息时每种输入都有限制,如名字只能输入中文、工号只能输入小于等于8位的数字、电话只能输入11位的数字等,输入工号、电话的时候会有查重提示,输入部门和职位时只能输入公司机构文件存在的本公司现有的部门和职位,在公司机构文件里面查找,保证员工基本资金与职位对应。

      2管理员工信息(查找、修改、删除、排序):其中修改、删除后需要选择是否将改动信息保存到文件。

      3浏览员工信息,按照报表的格式输入公司所有员工的信息。

      4管理登录密码(管理员密码、员工密码、经理密码):若是管理管理员密码,因为管理员只有一个,所以直接将存放管理员密码文件的数据修改,若是管理员工和经理密码找到对应员工或经理修改其密码

      5管理公司机构:管理员为公司添加新的部门、职位、和职位对应的工资,添加时存在查重。

      6)查看公司现有机构:输出该公司现存在部门、职位。

 

2.普通员工模块:

密码验证成功后,进入菜单选项,管理员可以进行:

      1)查询员工信息:该公司是公开,所以员工可以查询公司每个员工的信息。

      2)修改自己的信息:员工只能修改自己的基础信息(姓名,工号,电话),不能修改请假、迟到、加班信息。

      3查看加班信息:可以查看自己的部门经理给其分配的加班天数

      4)发送请假请求:向经理发送请假请求,将发送请求的员工保存到另外一个文件,等待经理审核。


3.部门经理模块:

      1)采集员工信息:经理有权利添加员工。

      2)浏览所有员工信息:经理可以查看该公司所有员工的信息

      3查看本部门员工信息:将经理所在部门的员工信息以报表的形式输出

      4)通知本部门员工加班信息:经理只能通知自己部门的员工加班,无权给其他部门员工给予加班信息,通知加班信息时加班时间不能(压榨员工)太长。

      5)审核请假信息:经理读取需要请假的员工文件,进行审核,若批准将员工信息的请假次数修改,若不批准则不改动。

四.程序部分运行










大一结束了,C语言也学完了,为了课设第一次写这么长的代码,下面是我的课设代码,在vc++6.0运行的,如果要复制查看的换运行程序后会出现多个.txt ( 其中manage.txt存放管理员密码,刚开始要手动打开.txt给里面添加密码,不然无法进行之后的程序 ), 刚开始程序有有点low....之后改了好多,输入也加了好多限制,不过应该有没发现的bug,希望大佬们别吐槽。奋斗

#include <stdio.h>  
#include <conio.h>  
#include <string.h>  
#include <stdlib.h>
#include <windows.h>
#include <malloc.h>
//员工:姓名 工号 电话 部门 职位 密码 工资(实际工资,基本工资,扣款(迟到/请假) ,奖金(加班天数))
struct wage  
{  int real;//实际工资int base;//基本工资int cut;//扣款( 迟到-10,请假-5 )int bonus;//奖金( 加班60 )
};
typedef struct staff 
{char name[20];char number[20];char phone[20];char depart[20];//部门	char post[20];//职位char password[20];int late;//迟到次数int leave;//请假次数int over;//加班天数struct wage z;struct staff *next;
}sta;
sta *head,*u,*p,*q,*wj,*t;//头指针
//部门经理:  姓名 工号 所管部门 密码
typedef struct manager
{char mname[20];char mnumber[20];char mdepart[20];//所管部门char mpassword[20];struct manager *next;
}mana;
mana *mhead,*mu,*mp,*mq,*mwj,*mt;
//*************************************************************************************************************
typedef struct begin//管理员输入的初始部门
{char bdepart[20];char bpost[20];int bbase;struct begin *next;
}beg;
beg *bhead,*bu,*bp,*bq,*bwj,*bt;
typedef struct gobye
{char gnumber[20];int gleave;//请假次数struct gobye *next;
}gob;
//员工个数
int n;
char nei;
//员工登录工号 员工查找自己信息	
char sdl[100];
char ddepart[100];//登录经理所管的部门
char look[100];//查找重复的时候使用
//*********************************************函数声明*****************************************
sta* new_node(sta* uu);
mana* mnew_node(mana* uu);
void add();void s_add();void m_add();
void modify();  void modi_all();void modi_num();void modi_name();  void modi_phone();	
void del();	void del_name(); void del_num(); void del_phone();
void sort();void sort_name();void sort_num();void sort_real();void sort_late();void sort_leave();void sort_over();
void find();void find_sta();void find_depart();void find_name();void find_num();void find_phone();void find_namenum();
void lookover();void callover();void overday();int overname();//关于加班
void askleave();void giveleave();//关于请假
void display();void adminxx();
void save();void read();void msave();void mread();gob* learead();void leasave();
void exi();void admin();void staff();void manager();void mjinru();
void mmgl();void stam();void manam();void adminm();
void welcome();void gotoxy(int x, int y);//光标移动
void begin();void begread();void begsave();void beg_show();void beg_add();//公司机构
//**********************************************************************************************
//构造员工结点函数   没有头结点
sta* new_node(sta* uu)  
{  uu = (sta*)malloc(sizeof(sta));  uu->next = NULL;  return uu;  
}
//构造部门经理结点函数   没有头结点mana* mnew_node(mana* uu)  
{  uu = (mana*)malloc(sizeof(mana));  uu->next = NULL;  return uu;  
} 
//构造公司机构结点函数   没有头结点
beg* bnew_node(beg* uu)  
{  uu = (beg*)malloc(sizeof(beg));  uu->next = NULL;  return uu;  
}
//构造请假结点函数   没有头结点
gob* gnew_node(gob* uu)  
{  uu = (gob*)malloc(sizeof(gob));  uu->next = NULL;  return uu;  
}void askleave()
{char c[20];FILE *fp;for(u = head; u != NULL;u = u->next) {  if(strcmp(u->number,sdl) == 0)  {  printf("\t\t\t☆ 你可以向你所在部门的经理申请一次请假\n");printf("\t\t\t☆ 友情提示: 请假太多一定不会被批准的\n");printf("\t\t\t☆ 你在这个月已经请了%d次假(被批准的)\n",u->leave);printf("\t\t\t☆ 你是否还要请假(y/n):"); while(1){scanf("%s",c);if( (strcmp(c,"n")!=0) && (strcmp(c,"y")!=0)){printf("\t\t\t☆请输入合法字符!\n");printf("\t\t\t☆请重新输入: ");fflush(stdin); //清除缓冲区 }if( (strcmp(c,"n")==0) || (strcmp(c,"y")==0)){break;}}if((strcmp(c,"n")==0)){printf("\t\t\t☆你这次选择了不请假,此次操作不会告诉上级 ^.^\n");return ;}if((strcmp(c,"y")==0)){printf("\t\t\t☆你这次选择了请假,此次操作将反馈给上级,请等待批准\n");//fp=fopen("leave.txt","a+");          //进入程序时打开/建立该文件//fclose(fp);	fp=fopen("leave.txt","a+");printf("\t\t\t☆你此次的请假信息将被记录\n");fprintf(fp,"%s ",u->number);  fprintf(fp,"%d\n",u->leave); fclose(fp);  }}  } 
}
//读取请假文件
gob * learead()  
{  FILE *fp;gob *ghead,*gu,*gr;ghead  = gr= (gob*)malloc(sizeof(gob));ghead ->next=NULL;//fp=fopen("leave.txt","a");          //进入程序时打开/建立该文件//fclose(fp);if((fp=fopen("leave.txt","r"))==NULL)  {  return NULL;  }nei=fgetc(fp);if(nei==EOF)//文件内没东西时{ return NULL;}	else{rewind(fp);}while(!feof(fp))  {   gu= (gob*)malloc(sizeof(gob));fscanf(fp,"%s ",gu->gnumber);  fscanf(fp,"%d\n",&gu->gleave);gr->next=gu;gu->next=NULL;gr=gu;}fclose(fp);return ghead;
}
void giveleave()
{ FILE *fp;char c[20];int m=0;gob *ghead,*gu;ghead=learead();//读入if(nei==EOF)//文件内没东西时{ printf("\n\n\t\t\t☆ 暂时还没有员工需要请假\n");return;}	for(gu = ghead->next; gu!= NULL;gu = gu->next)  {  m++;  printf("\t\t\t☆ 第%d个代批准员工的请假记录\n",m);printf("\t\t\t☆ 工号\t请假次数\n");printf("\t\t\t☆ %s\t%d\n",gu->gnumber,gu->gleave);printf("\t\t\t☆ 你是否批准?(y/n)");while(1){scanf("%s",c);if( (strcmp(c,"n")!=0) && (strcmp(c,"y")!=0)){printf("\t\t\t☆请输入合法字符!\n");printf("\t\t\t☆请重新输入: ");fflush(stdin); //清除缓冲区 }if( (strcmp(c,"n")==0)|| (strcmp(c,"y")==0)){break;}}if((strcmp(c,"n")==0)){printf("\t\t\t☆ 你狠心的拒绝了该员工此次的请假申请\n");continue;}if((strcmp(c,"y")==0)){printf("\t\t\t☆ 你通过了该员工的请假申请\n");//请假次数加1for(u = head; u != NULL;u = u->next) {  if(strcmp(u->number,gu->gnumber) == 0)  {  printf("\t\t\t☆ 你将给员工记录这请假\n");u->leave=gu->gleave+1;u->z.cut=u->late*10+u->leave*5;   //扣款:迟到-10 请假-5 u->z.real=u->z.base + u->z.bonus - u->z.cut;save();break;   }  } }}   fp=fopen("leave.txt","w");          //进入程序时打开直接关闭相当于清空文件fclose(fp);return;
}void lookover()//员工查看加班时间   员工登录工号全局变量char sdl[20];
{for(u = head; u != NULL;u = u->next) {  if(strcmp(u->number,sdl) == 0)  {  printf("\t\t\t☆ 你所在部门给你分配下来的本月加班%d天☆\n",u->over);printf("\t\t\t☆ 小提示: 若时间不充足,你也可以返回上一步申请请假,等待批准\n");break;   }  } 
}
void overday()
{int j;printf("\t\t\t☆ 输入你准备给分配本月的加班天数:");//匹配时输入加班时间while(1){j=scanf("%d",&u->over);if(j!=1){printf("\t\t\t☆ 加班天数是数字哦 ^.^ 请重新输入:");fflush(stdin); //清除缓冲区 u->over=1; //防止跳出循环 }else{if(u->over>32){printf("\t\t\t☆ 哇,加班天数有点都多哦,经理也不能这么压榨劳苦人民吧\n");printf("\t\t\tSo...^.^ 请你重新输入:");}if(j==1 && u->over<32){u->z.bonus=u->over*60;      //奖金:加班60 u->z.real=u->z.base + u->z.bonus - u->z.cut;printf("\n\t\t\t--->修改成功!\n");save();break;}}}
}
int overname()//经理通知加班时间*********************************
{ int k,m,j,l;//控制char overname[20];k=m=l=0;printf("\t\t\t☆ 经理特权: 你可以让自己部门的员工进行加班哦\n ");printf("\t\t\t☆ 小提示: 你可以先退回上一步查看自己部门的员工哦\n");printf("\t\t\t☆ 输入你准备给分配加班员工的姓名:");while(1){scanf("%s",overname);for(j=0;(size_t)j<strlen(overname);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(overname[j]>=0 && overname[j]<=255){printf("\t\t\t☆ 不是中文 ^.^ 请重新输入:");break;}if(strlen(overname)>15){printf("\t\t\t☆ 姓名过长了 ^.^ 请重新输入:");break;}else k=1;}if(k==1){for(u = head->next; u != NULL;u = u->next)  {  										 if( strcmp(u->depart,ddepart)==0 && strcmp(u->name,overname)==0)//不是该部门的员工则跳过;{l=1;return 1;	}}if(l==0){printf("\t\t\t☆ 哇,你不能让其他部门的员工加班 ");return 0;}if(u==NULL && l==0)  {  printf("\t\t\t☆ 哇,你的部门还木有员工,怎么让别人加班呢(T▽T)!\n");printf("\t\t\t☆ 小提示: 你可以退回上一步雇佣员工给你的部门增加人气哦");return 0;  }}}return 0;
}
void callover()
{if(overname()){overday();}elsereturn;
}
//打印该公司机构
void beg_show()  
{  if(bhead->next == NULL)  {  printf("\t\t\t--->该公司的公司机构还没有录入!\n");  return;  }printf("☆友情提示:该公司现有部门和职位\n");puts("部门            职位            \n");  for(bu = bhead->next; bu!= NULL;bu = bu->next)  {    printf("%-15s %-15s ",bu->bdepart,bu->bpost);printf("\n");}   
}  
//添加公司机构********************************************************8888
void beg_add()  
{ int j,m;//控制char c[20];bu = bnew_node(bu);  //新建一个节点printf("\t\t\t****************采集公司机构信息***************\n");while(1){printf("\t\t\t*部门:__\b\b");//查重*********************************************************scanf("%s",bu->bdepart);for(j=0;(size_t)j<strlen(bu->bdepart);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(bu->bdepart[j]>=0 && bu->bdepart[j]<=255){printf("\t\t\t不是中文呢 ^.^\t请重新输入\n");break;}if(strlen(bu->bdepart)>15){printf("\t\t\t部门输入过长 ^.^\t请重新输入\n");break;}}strcpy(look,bu->bdepart);//查重for(bt = bwj->next; bt != NULL;bt = bt->next)  {  if(strcmp(bt->bdepart,look) == 0)  {m=0;printf("\t\t\t该公司已经存在该部门了呦 ^.^\n ");printf("\t\t\t您是否要新建部门? (y/n)");while(1){scanf("%s",c);if( (strcmp(c,"n")!=0) && (strcmp(c,"y")!=0)){printf("\t\t\t请输入合法字符!\n");printf("\t\t\t请重新输入: ");fflush(stdin); //清除缓冲区 }if( (strcmp(c,"n")==0) || (strcmp(c,"y")==0)){break;}}if((strcmp(c,"n")==0)){printf("\t\t\t不新建部门 ^.^\n");m=1 ;break;}printf("\t\t\t新建部门请重新命名 ^.^\n");break;} if(strcmp(bt->bdepart,look) != 0)  { continue;}}if(bt==NULL)//新的工号时{m=1;}if(strlen(bu->bdepart)<=15 && (size_t)j==strlen(bu->bdepart)&&m==1){break;}}while(1){printf("\t\t\t*职位:__\b\b");//查重***********************************************************scanf("%s",bu->bpost);for(j=0;(size_t)j<strlen(bu->bpost);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(bu->bpost[j]>=0 && bu->bpost[j]<=255){printf("\t\t\t不是中文呢 ^.^ 请重新输入\n");break;}if(strlen(bu->bpost)>15){printf("\t\t\t职位输入过长 ^.^ 请重新输入\n");}}strcpy(look,bu->bpost);//查重for(bt = bwj->next; bt != NULL;bt = bt->next)  {  if(strcmp(bt->bpost,look) == 0)  {m=0;printf("\t\t\t该公司已经存在该职位了呦 ^.^ 新建职位请重新命名\n ");break;} if(strcmp(bt->bpost,look) != 0)  { continue;}}if(bt==NULL)//新的工号时{m=1;}if(strlen(bu->bpost)<=15 && (size_t)j==strlen(bu->bpost) && m==1){break;}}while(1){printf("\t\t\t*基本工资:");j=scanf("%d",&bu->bbase);if(j!=1){printf("\t\t\t工资是数字哦 ^.^\t请重新输入\n");fflush(stdin); //清除缓冲区 bu->bbase=1; //防止跳出循环 }if(j==1){if(bu->bbase>20000){printf("\t\t\t亲,这个工资有点高哦,请检查是不是手误啦\n");printf("\t\t\t ^.^请重新输入\n");}if(j==1 && bu->bbase<=20000){break;}}}bu->next = bhead->next;  //采用头插法将新节点的尾指针指向第二个节点bhead->next = bu;  //将新节点放在头节点后面printf("\n\t\t\t--->采集成功!\n"); begsave();printf("\n\t\t\t");system("pause");system("cls");
}//读取公司机构文件
void begread()  
{  char a[100];//存放读取的汉字FILE *fp;char ch;fp=fopen("begin.txt","a+");          //进入程序时打开/建立该文件fclose(fp);if((fp=fopen("begin.txt","r"))==NULL)  {  printf("\n\t\t\t--->没有找到文件!\n");  return ;  }ch=fgetc(fp);if(ch==EOF){return;}elserewind(fp);fgets(a,20,fp);//读取第一行汉字信息while(!feof(fp))  {   bu = bnew_node(bu);fscanf(fp,"%s %s ",bu->bdepart,bu->bpost);  fscanf(fp," %d\n",&bu->bbase);bu->next = bhead->next; //头插法建立链表 bhead->next = bu;  }fclose(fp);	
}
//保存公司机构信息
void begsave()
{char c[20];FILE *fp;printf("\n\t\t\t确认保存?(y/n): ");  while(1){scanf("%s",c);if( (strcmp(c,"n")!=0) && (strcmp(c,"y")!=0)){printf("\t\t\t请输入合法字符!\n");printf("\t\t\t请重新输入: ");fflush(stdin); //清除缓冲区 }if( (strcmp(c,"n")==0) || (strcmp(c,"y")==0)){break;}}if((strcmp(c,"n")==0)){printf("\t\t\t不保存哦 ^.^\n");return ;}if((fp=fopen("begin.txt","w+"))==NULL)  {  printf("\n\t\t\t--->begin.txt文件打开失败!\n");return ;  }fputs("部门 职位 基本工资\n",fp);
//从头节点开始依次写入文件;for(bu = bhead->next; bu != NULL;bu = bu->next)  { fprintf(fp,"%s %s ",bu->bdepart,bu->bpost);  fprintf(fp,"%d\n",bu->bbase);}  fclose(fp);  printf("\n\t\t\t--->信息成功存入\n"); 
}
//添加员工信息
void s_add()  
{ int j;int m,k,l=0;//控制u = new_node(u);  //新建一个节点printf("\t\t\t┏━━━━━━━━━━━━━━采集员工信息━━━━━━━━━━━━━━━┓\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃姓名:                                                                 ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃工号:                                                                 ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃电话:                                                                 ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃部门:                                                                 ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃职位:                                                                 ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃密码:                                                                 ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃迟到次数:                                                             ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");while(1){gotoxy(32,2);scanf("%s",u->name);for(j=0;(size_t)j<strlen(u->name);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->name[j]>=0 && u->name[j]<=255){gotoxy(32,2);printf("不是中文 ^.^ 请重新输入");Sleep(400);gotoxy(32,2);for(k=0;k<55;k++)printf(" ");break;}if(strlen(u->name)>15){gotoxy(32,2);printf("姓名过长了 ^.^ 请重新输入");Sleep(400);gotoxy(32,2);for(k=0;k<55;k++)printf(" ");break;}}if(strlen(u->name)<=15&&(size_t)j==strlen(u->name)){break;}}while(1){gotoxy(32,4);scanf("%s",u->number);for(j=0;(size_t)j<strlen(u->number);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->number[j]<'0' || u->number[j]>'9')   {gotoxy(32,4);printf("工号是数字哦 ^.^ 请重新输入");Sleep(400);gotoxy(32,4);for(k=0;k<55;k++)printf(" ");break;}if(strlen(u->number)>8){gotoxy(32,4);printf("工号控制在8位以内哦 ^.^ 请重新输入");Sleep(400);gotoxy(32,4);for(k=0;k<55;k++)printf(" ");break;}}strcpy(look,u->number);//查重for(t = wj->next; t != NULL;t = t->next)  {  if(strcmp(t->number,look) == 0)  {m=0;gotoxy(32,4);printf("该工号已经存在了哦 ^.^ 请重新给予一个工号 ");Sleep(400);gotoxy(32,4);for(k=0;k<55;k++)printf(" ");break;} if(strcmp(t->number,look) != 0)  { continue;}}if(t==NULL)//新的工号时{m=1;}if(strlen(u->number)<=8&& (size_t)j==strlen(u->number) && m==1){break;}}while(1){gotoxy(32,6);scanf("%s",u->phone);for(j=0;(size_t)j<strlen(u->phone);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->phone[j]<'0' || u->phone[j]>'9'){gotoxy(32,6);printf("电话是数字 ^.^ 请重新输入");Sleep(400);gotoxy(32,6);for(k=0;k<55;k++)printf(" ");break;}if(strlen(u->phone)!=11){gotoxy(32,6);printf("电话是11位 ^.^ 请重新输入");Sleep(400);gotoxy(32,6);for(k=0;k<55;k++)printf(" ");break;}}strcpy(look,u->phone);//查重for(t = wj->next; t != NULL;t = t->next)  {  if(strcmp(t->phone,look) == 0) {m=0;gotoxy(32,6);printf("已经存在员工为电话了哦,不可能重复呀  ^.^ 请重新输入");Sleep(400);gotoxy(32,6);for(k=0;k<55;k++)printf(" ");break;} if(strcmp(t->phone,look) != 0)  { continue;}}if(t==NULL)//新的电话时{m=1;}if(strlen(u->phone)==11&& (size_t)j==strlen(u->phone) && m==1){break;}}while(1)//应该输入公司之前存在的部门{gotoxy(32,8);scanf("%s",u->depart);for(j=0;(size_t)j<strlen(u->depart);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->depart[j]>=0 && u->depart[j]<=255){gotoxy(32,8);printf("不是中文 ^.^ 请重新输入");Sleep(400);gotoxy(32,8);for(k=0;k<55;k++)printf(" ");break;}if(strlen(u->depart)>15){gotoxy(32,8);printf("部门输入过长 ^.^ 请重新输入");Sleep(400);gotoxy(32,8);for(k=0;k<55;k++)printf(" ");break;}l=1;//输入符合 接下来判断是否存在}if(l==1){strcpy(look,u->depart);//检查输入的部门是否为公司机构文件之前存在的for(bt = bwj->next; bt != NULL;bt = bt->next)  {  if(strcmp(bt->bdepart,look) == 0)  //存在时满足{m=1;break;} if(strcmp(bt->bdepart,look) != 0)  { m=0;continue;}}if(m==0)// 请重新输入或者回到机构管理添加{gotoxy(32,8);printf("该公司还没有此部门,^.^ 请重新输入");Sleep(400);gotoxy(32,8);for(k=0;k<55;k++)printf(" ");}if(strlen(u->depart)<=15 && (size_t)j==strlen(u->depart)&& m==1){break;}}}while(1){gotoxy(32,10);scanf("%s",u->post);for(j=0;(size_t)j<strlen(u->post);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->post[j]>=0 && u->post[j]<=255){gotoxy(32,10);printf("不是中文呢 ^.^ 请重新输入");Sleep(400);gotoxy(32,10);for(k=0;k<55;k++)printf(" ");break;}if(strlen(u->post)>15){gotoxy(32,10);printf("职位输入过长 ^.^ 请重新输入");Sleep(400);gotoxy(32,10);for(k=0;k<55;k++)printf(" ");break;}l=1;}if(l==1){strcpy(look,u->post);//检查输入的职位是否为公司机构文件之前存在的for(bt = bwj->next; bt != NULL;bt = bt->next)  {  if(strcmp(bt->bpost,look) == 0)  //存在时满足{m=1;break;} if(strcmp(bt->bpost,look) != 0)  { m=0;continue;}}if(m==0)// 请重新输入或者回到机构管理添加{gotoxy(32,10);printf("该公司还没有此职位,^.^ 请重新输入");Sleep(400);gotoxy(32,10);for(k=0;k<55;k++)printf(" ");}}if(strlen(u->post)<=15 && (size_t)j==strlen(u->post) && m==1){break;}}while(1){gotoxy(32,12);scanf("%s",u->password);if(strlen(u->password)>15){gotoxy(32,12);printf("密码输入过长 ^.^ 请重新输入");Sleep(400);gotoxy(32,12);for(k=0;k<55;k++)printf(" ");}if(strlen(u->password)<=15){break;}}while(1)//迟到次数是输入的{gotoxy(35,14);j=scanf("%d",&u->late);if(j!=1){gotoxy(35,14);printf("迟到次数是数字哦 ^.^ 请重新输入");Sleep(400);gotoxy(35,14);for(k=0;k<55;k++)printf(" ");fflush(stdin); //清除缓冲区 u->late=1; //防止跳出循环 }else{if(u->late>100){gotoxy(35,14);printf("亲,迟到次数有点多哦,手误了吧 ^.^请重新输入");Sleep(300);gotoxy(35,14);for(k=0;k<55;k++)printf(" ");}if(j==1 && u->late<=100){break;}}}u->leave=u->over=0;u->z.base=bt->bbase;u->z.bonus=u->z.real=u->z.cut=0;u->z.bonus=u->over*60;      //奖金:加班60u->z.cut=u->late*10+u->leave*5;   //扣款:迟到-10 请假-5 u->z.real=u->z.base + u->z.bonus - u->z.cut;u->next = head->next;  //采用头插法将新节点的尾指针指向第二个节点head->next = u;  //将新节点放在头节点后面printf("\n\t\t\t--->采集成功!\n"); save();printf("\n\t\t\t");system("pause");system("cls");
}//添加部门经理信息
void m_add()  
{int j;int m,k,l=0;//控制mu = mnew_node(mu);  //新建一个节点printf("\t\t\t┏━━━━━━━━━━━━━━采集经理信息━━━━━━━━━━━━━━━┓\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃姓名:                                                                 ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃工号:                                                                 ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃所管部门:                                                             ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┃密码:                                                                 ┃\n");printf("\t\t\t┃                                                                      ┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");while(1){gotoxy(32,2);scanf("%s",mu->mname);for(j=0;(size_t)j<strlen(mu->mname);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(mu->mname[j]>=0 && mu->mname[j]<=255){gotoxy(32,2);printf("不是中文 ^.^ 请重新输入");Sleep(300);gotoxy(32,2);for(k=0;k<55;k++)printf(" ");break;}if(strlen(mu->mname)>15){gotoxy(32,2);printf("姓名过长了 ^.^ 请重新输入");Sleep(300);gotoxy(32,2);for(k=0;k<55;k++)printf(" ");break;}}if(strlen(mu->mname)<=15 && (size_t)j==strlen(mu->mname)){break;}}while(1){gotoxy(32,4);scanf("%s",mu->mnumber);for(j=0;(size_t)j<strlen(mu->mnumber);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(mu->mnumber[j]<'0' || mu->mnumber[j]>'9'){gotoxy(32,4);printf("工号是数字哦 ^.^ 请重新输入");Sleep(300);gotoxy(32,4);for(k=0;k<55;k++)printf(" ");break;}if(strlen(mu->mnumber)>8){gotoxy(32,4);printf("工号控制在8位以内哦 ^.^ 请重新输入");Sleep(300);gotoxy(32,4);for(k=0;k<55;k++)printf(" ");break;}}strcpy(look,mu->mnumber);//查重for(mt = mwj->next; mt != NULL;mt = mt->next)  {  if(strcmp(mt->mnumber,look) == 0)  {m=0;gotoxy(32,4);printf("该工号已经存在了哦 ^.^ 请重新给予一个工号 ");Sleep(300);gotoxy(32,4);for(k=0;k<55;k++)printf(" ");break;} if(strcmp(mt->mnumber,look) != 0)  { continue;}}if(mt==NULL)//新的工号时{m=1;}if(strlen(mu->mnumber)<=8 && (size_t)j==strlen(mu->mnumber) && m==1){break;}}while(1){gotoxy(35,6);scanf("%s",mu->mdepart);for(j=0;(size_t)j<strlen(mu->mdepart);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(mu->mdepart[j]>=0 && mu->mdepart[j]<=255){gotoxy(35,6);printf("不是中文 ^.^ 请重新输入");Sleep(300);gotoxy(35,6);for(k=0;k<55;k++)printf(" ");break;}if(strlen(mu->mdepart)>20){gotoxy(35,6);printf("部门输入过长 ^.^ 请重新输入");Sleep(300);gotoxy(35,6);for(k=0;k<55;k++)printf(" ");break;}l=1;}if(l==1){strcpy(look,mu->mdepart);//检查输入的部门是否为公司机构文件之前存在的for(bt = bwj->next; bt != NULL;bt = bt->next)  {  if(strcmp(bt->bdepart,look) == 0)  //存在时满足{m=1;break;} if(strcmp(bt->bdepart,look) != 0)  { m=0;continue;}}if(m==0)// 请重新输入或者回到机构管理添加{gotoxy(35,6);printf("该公司还没有此部门,^.^ 请重新输入");Sleep(300);gotoxy(35,6);for(k=0;k<55;k++)printf(" ");}if(strlen(mu->mdepart)<=20 && (size_t)j==strlen(mu->mdepart) && m==1){break;}}}while(1){gotoxy(32,8);scanf("%s",mu->mpassword);if(strlen(mu->mpassword)>15){gotoxy(32,8);printf("密码输入过长 ^.^ 请重新输入");Sleep(300);gotoxy(32,8);for(k=0;k<55;k++)printf(" ");}if(strlen(mu->mpassword)<=20){break;}}mu->next = mhead->next;  //采用头插法将新节点的尾指针指向第二个节点(掰开)mhead->next = mu;  //将新节点放在头节点后面printf("\n\t\t\t--->添加成功!\n"); msave();
}
void add()
{int chioce;do{printf("\n");printf("\t\t\t***********************************\n");printf("\t\t\t*        1.采集员工信息           *\n");			printf("\t\t\t*        2.采集部门经理信息       *\n");printf("\t\t\t*        3.返回上一步             *\n");printf("\t\t\t*        0.退出                   *\n");printf("\t\t\t***********************************\n");printf("\t\t\t请选择:");if(scanf("%d",&chioce)){system("cls");switch(chioce){  case 1:s_add();break;case 2:m_add();break;case 3:return;case 0:exi(); break;default:printf("\n\t\t\t--->没有该选项!\n"); }}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 chioce=1; //防止跳出循环 }}while(chioce!=0);return;
}
//修改函数  也可再里面弄一个整体修改小函数
void modify()
{int chioce;if(head->next == NULL)  {  printf("\t\t\t--->没有员工信息!");  return ;  }do{printf("\n");printf("\t\t\t********************************\n");printf("\t\t\t*        1.按姓名修改          *\n");printf("\t\t\t*        2.按工号修改          *\n");printf("\t\t\t*        3.按电话修改          *\n");printf("\t\t\t*        4.返回上一步          *\n");printf("\t\t\t*        0.退出                *\n");printf("\t\t\t********************************\n");printf("\t\t\t请选择:");if(scanf("%d",&chioce)){system("cls");switch(chioce){  case 1:modi_name();break;case 2:modi_num();break;case 3:modi_phone();break;case 4:return;default:printf("\n--->无效的指令!\n");}}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 chioce=1; //防止跳出循环 }}while(chioce!=0);return;
}void modi_all()
{						int chioce;	int j;do{printf("\n");printf("\t\t\t*********************修改信息*********************\n");printf("\t\t\t*        1.修改姓名         2.修改工号           *\n");printf("\t\t\t*        3.修改电话         4.调动部门           *\n");printf("\t\t\t*        5.调动职位         6.修改基本工资       *\n");printf("\t\t\t*        7.修改加班天数     8.修改迟到次数       *\n");printf("\t\t\t*        9.修改请假次数     10.返回上一步        *\n");printf("\t\t\t*        0.退出                                  *\n");printf("\t\t\t**************************************************\n");printf("\t\t\t请选择:");if(scanf("%d",&chioce)){system("cls");switch(chioce){  case 1:{	while(1){printf("\t\t\t*请输入新的姓名: ");  scanf("%s",u->name);for(j=0;(size_t)j<strlen(u->name);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->name[j]>=0 && u->name[j]<=255){printf("\t\t\t不是中文呢 ^.^\t请重新输入\n");break;}if(strlen(u->name)>15){printf("\t\t\t姓名过长 ^.^\t请重新输入\n");break;}}if(strlen(u->name)<=15&&(size_t)j==strlen(u->name)){break;}}printf("\n\t\t\t--->修改成功!\n");save();break;}case 2:{while(1){printf("\t\t\t*请输入新的工号(8位以内):__\b\b");scanf("%s",u->number);for(j=0;(size_t)j<strlen(u->number);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->number[j]<'1' || u->number[j]>'9'){printf("\t\t\t工号是数字 ^.^\t请重新输入\n");break;}if(strlen(u->number)>=8){printf("\t\t\t工号控制在8位以内 ^.^\t请重新输入\n");break;}}if(strlen(u->number)<8 && (size_t)j==strlen(u->number)){break;}}printf("\n\t\t\t--->修改成功!\n");save();break;}case 3:{while(1){printf("\t\t\t*请输入新的电话(11位):__\b\b");scanf("%s",u->phone);for(j=0;(size_t)j<strlen(u->phone);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->phone[j]<'1' || u->phone[j]>'9'){printf("\t\t\t电话是数字 ^.^\t请重新输入\n");break;}if(strlen(u->phone)!=11){printf("\t\t\t电话是11位 ^.^\t请重新输入\n");break;}}if(strlen(u->phone)==11&& (size_t)j==strlen(u->phone)){break;}}printf("\n\t\t\t--->修改成功!\n");save();break;}case 4:{while(1){printf("\t\t\t*请输入新的部门:__\b\b");scanf("%s",u->depart);for(j=0;(size_t)j<strlen(u->depart);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->depart[j]>=0 && u->depart[j]<=255){printf("\t\t\t不是中文呢 ^.^\t请重新输入\n");break;}if(strlen(u->depart)>20){printf("\t\t\t部门输入过长 ^.^\t请重新输入\n");break;}}if(strlen(u->depart)<=20 && (size_t)j==strlen(u->depart)){break;}}printf("\n\t\t\t--->修改成功!\n");save();break;}case 5:{while(1){printf("\t\t\t*请输入新的职位:__\b\b");scanf("%s",u->post);for(j=0;(size_t)j<strlen(u->post);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->post[j]>=0 && u->post[j]<=255){printf("\t\t\t不是中文呢 ^.^\t请重新输入\n");break;}if(strlen(u->post)>20){printf("\t\t\t职位输入过长 ^.^\t请重新输入\n");}}if(strlen(u->post)<=20 && (size_t)j==strlen(u->post)){break;}}printf("\n\t\t\t--->修改成功!\n");save();break;}case 6:{while(1){printf("\t\t\t*请输入新的基本工资:");j=scanf("%d",&u->z.base);if(j!=1){printf("\t\t\t工资是数字哦 ^.^\t请重新输入\n");fflush(stdin); //清除缓冲区 u->z.base=1; //防止跳出循环 }if(j==1){if(u->z.base>20000){printf("\t\t\t亲,这个工资有点高哦,请检查是不是手误啦\n");printf("\t\t\t ^.^请重新输入\n");}if(j==1 && u->z.base<=20000){break;}}}u->z.bonus=u->over*60;      //奖金:加班60 补贴20%u->z.real=u->z.base + u->z.bonus - u->z.cut;printf("\n\t\t\t--->修改成功!\n");save();break;}case 7:{while(1){printf("\t\t\t*请输入新的加班天数:");j=scanf("%d",&u->over);if(j!=1){printf("\t\t\t加班天数是数字哦 ^.^\t请重新输入\n");fflush(stdin); //清除缓冲区 u->over=1; //防止跳出循环 }else{if(u->over>32){printf("\t\t\t亲,加班天数比每月天数都多哦,请检查是不是手误啦\n");printf("\t\t\t^.^请重新输入\n");}if(j==1 && u->over<32){break;}}}u->z.bonus=u->over*60;      //奖金:加班60 u->z.real=u->z.base + u->z.bonus - u->z.cut;printf("\n\t\t\t--->修改成功!\n");save();break;}case 8:{while(1){printf("\t\t\t*请输入新的迟到次数: ");j=scanf("%d",&u->late);if(j!=1){printf("\t\t\t迟到次数是数字哦 ^.^\t请重新输入\n");fflush(stdin); //清除缓冲区 u->late=1; //防止跳出循环 }else{if(u->late>100){printf("\t\t\t亲,这个迟到次数有点多哦,请检查是不是手误啦\n");printf("\t\t\t^.^请重新输入\n");}if(j==1 && u->late<=100){break;}}}u->z.cut=u->late*10+u->leave*5;   //扣款:迟到-10 请假-5 u->z.real=u->z.base + u->z.bonus - u->z.cut;printf("\n\t\t\t--->修改成功!\n");save();break;}case 9:{while(1){printf("\t\t\t*请输入新的请假次数::");j=scanf("%d",&u->leave);if(j!=1){printf("\t\t\t请假次数是数字哦 ^.^\t请重新输入\n");fflush(stdin); //清除缓冲区 u->leave=1; //防止跳出循环 }else{if(u->leave>100){printf("\t\t\t亲,这个请假次数有点多哦,请检查是不是手误啦\n");printf("\t\t\t^.^请重新输入\n");}if(j==1 && u->leave<=100){break;}}}u->z.cut=u->late*10+u->leave*5;   //扣款:迟到-10 请假-5 u->z.real=u->z.base + u->z.bonus - u->z.cut;save();printf("\n\t\t\t--->修改成功!\n");break;}case 10:return;default:printf("\n\t\t\t--->无效的指令!\n");}}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 chioce=1; //防止跳出循环 }}while(chioce!=0);return;
}
//根据员工姓名修改信息
void modi_name()  
{  char xname[100];n = 0;printf("\n\t\t\t请输入您要修改的员工姓名: ");  scanf("%s",xname);  for(u = head; u != NULL;u = u->next)  {  if(strcmp(u->name,xname) == 0)  {  n = 1;printf("\t\t\t\t*员工初始信息*\n");puts("      姓名          工号     电话        部门              职位      实际工资 基本工资 迟到 请假 加班 罚款 奖金\n");    printf("%-15s %-8s %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);modi_all();break;  }  }  if(!n)  printf("\n\t\t\t--->没有这个学生的信息!\n");  
}
//根据员工工号修改信息
void modi_num()
{  char xnum[20];n = 0;printf("\n\t\t\t请输入您要修改员工的工号: ");  scanf("%s",xnum);  for(u = head; u != NULL;u = u->next)  {  if(strcmp(u->number,xnum) == 0)  {  n = 1;printf("\t\t\t\t*员工初始信息*\n");puts("      姓名          工号     电话        部门              职位      实际工资 基本工资 迟到 请假 加班 罚款 奖金\n");    printf("%-15s %-8s %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);modi_all();save();break;   }  }  if(!n)  printf("\n\t\t\t--->没有这个学生的信息!\n");  
} 
//根据员工电话修改信息
void modi_phone()  
{  char xphone[20];n = 0;printf("\n\t\t\t请输入您要修改员工的电话: ");  scanf("%s",xphone);  for(u = head; u != NULL;u = u->next)  {  if(strcmp(u->number,xphone) == 0)  {  n = 1;printf("\t\t\t\t*员工初始信息*\n");puts("      姓名          工号     电话        部门              职位      实际工资 基本工资 迟到 请假 加班 罚款 奖金\n");    printf("%-15s %-8s %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);modi_all();save();break;    }  }  if(!n)  printf("\n\t\t\t--->没有这个学生的信息!\n");  
} 
void del()			
{int chioce;if(head->next == NULL)  {  printf("--->\t\t\t没有员工信息!");  return ;  }do{printf("\n");printf("\t\t\t********************************\n");printf("\t\t\t*        1.按姓名删除          *\n");printf("\t\t\t*        2.按工号删除          *\n");printf("\t\t\t*        3.按电话删除          *\n");printf("\t\t\t*        4.返回上一步          *\n");printf("\t\t\t*        0.退出                *\n");printf("\t\t\t********************************\n");printf("\t\t\t请选择:");if(scanf("%d",&chioce)){switch(chioce){  case 1:del_name();break;case 2:del_num();break;case 3:del_phone();break;case 4:return;default:printf("\n\t\t\t--->无效的指令!\n");}}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 chioce=1; //防止跳出循环 }}while(chioce!=0);return;
} 
//根据姓名删除信息
void del_name()  
{  char dname[100];n = 0;printf("\n\t\t\t请输入您要删除员工的姓名: ");  scanf("%s",dname);  for(u = head; u != NULL;u = u->next)  {  if(strcmp(u->name,dname) == 0)  {  n = 1;printf("\t\t\t\t*员工信息*\n");puts("      姓名          工号     电话        部门              职位      实际工资 基本工资 迟到 请假 加班 罚款 奖金\n");    printf("%-15s %-8s %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);p->next = u->next;  free(u);  printf("\n\t\t\t--->删除成功!\n");save();break;  }  p = u;  }  if(!n)  printf("\n\t\t\t--->没有这个员工的信息!\n");  
} 
//根据工号删除信息
void del_num()  
{  char dnum[20];n = 0;printf("\n\t\t\t请输入您要删除员工的工号: ");  scanf("%s",dnum);  for(u = head; u != NULL;u = u->next)  {  if(strcmp(u->number,dnum) == 0)  {  n = 1; printf("\t\t\t\t*员工信息*\n");puts("      姓名          工号     电话        部门              职位      实际工资 基本工资 迟到 请假 加班 罚款 奖金\n");    printf("%-15s %-8s %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);p->next = u->next;  free(u);  printf("\t\t\t\n--->删除成功!\n");save();break; }  p = u;  }  if(!n)  printf("\n\t\t\t--->没有这个员工的信息!\n");  
}
//根据电话删除信息
void del_phone()  
{  char dphone[20];n = 0;printf("\n\t\t\t请输入您要删除员工的电话: ");  scanf("%s",dphone);  for(u = head; u != NULL;u = u->next)  {  if(strcmp(u->number,dphone) == 0)  {  n = 1; printf("\t\t\t\t*员工信息*\n");puts("      姓名          工号     电话        部门              职位      实际工资 基本工资 迟到 请假 加班 罚款 奖金\n");    printf("%-15s %-8s %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);p->next = u->next;  free(u);  printf("\n\t\t\t--->删除成功!\n");save();break; }  p = u;  }  if(!n)  printf("\n\t\t\t--->没有这个员工的信息!\n");  
}
void sort()	
{int chioce;if(head->next == NULL)  {  printf("\t\t\t--->没有员工信息!");  return ;  }do{printf("\n");printf("\t\t\t************************************\n");printf("\t\t\t*        1.按工号排序              *\n");printf("\t\t\t*        2.按实际工资排序          *\n");printf("\t\t\t*        3.按迟到次数排序          *\n");printf("\t\t\t*        4.按请假次数排序          *\n");printf("\t\t\t*        5.按加班天数排序          *\n");printf("\t\t\t*        6.返回上一步              *\n");printf("\t\t\t*        0.退出                    *\n");printf("\t\t\t************************************\n");printf("\t\t\t请选择:");if(scanf("%d",&chioce)){system("cls");switch(chioce){  		case 1:sort_num();break;			case 2:sort_real();break;case 3:sort_late();break;case 4:sort_leave();break;case 5:sort_over();break;case 6:return;default:printf("\n\t\t\t--->无效的指令!\n");}}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 chioce=1; //防止跳出循环 }}while(chioce!=0);return;
}
//按工号排序
void sort_num()  
{  int i,j;  n = 0;  //记录员工总数;for(u = head->next; u != NULL;u = u->next)  n++;  
//采用冒泡法对各个节点按工号升序for(i=1;i<=n;i++)  {  u = head;  for(j=0;j<n-i;j++)  {  p = u->next;  q = p->next;  if(strcmp(p->number,q->number) > 0 || strcmp(p->number,q->number) == 0)  {  u->next = q;  p->next = q->next;  q->next = p;  }  u = u->next;}  } printf("\t\t\t\t工号排序后员工信息\n");display();return;
}
//按实际工资排序
void sort_real()  
{  int i,j;  n = 0;  for(u = head->next; u != NULL;u = u->next)  n++;  
//采用冒泡法对各个节点按工资升序for(i=1;i<=n;i++)  {  u = head;  for(j=0;j<n-i;j++)  {  p = u->next;  q = p->next;  if(p->z.real >= q->z.real)  {  u->next = q;  p->next = q->next;  q->next = p;  }  u = u->next;  }  } printf("\t\t\t\t实际工资升序后员工信息\n");display();return;
}  
//按请假次数排序
void sort_leave()  
{  int i,j;  
//记录学生总数;n = 0;  for(u = head->next; u != NULL;u = u->next)  n++;  
//采用冒泡法对各个节点按请假次数降序排列for(i=1;i<=n;i++)  {  u = head;  for(j=0;j<n-i;j++)  {  p = u->next;  q = p->next;  if(p->leave < q->leave)  {  u->next = q;  p->next = q->next;  q->next = p;  }  u = u->next;  }  } printf("\t\t\t\t请假次数降序后员工信息\n");display();return;
}  
//按迟到次数排序
void sort_late()  
{  int i,j;  
//记录学生总数;n = 0;  for(u = head->next; u != NULL;u = u->next)  n++;  
//采用冒泡法对各个节点按迟到次数降序排列for(i=1;i<=n;i++)  {  u = head;  for(j=0;j<n-i;j++)  {  p = u->next;  q = p->next;  if(p->late< q->late)  {  u->next = q;  p->next = q->next;  q->next = p;  }  u = u->next;  }  } printf("\t\t\t\t迟到次数降序后员工信息\n");display();return;
}  //按加班天数排序
void sort_over()  
{  int i,j;  
//记录学生总数;n = 0;  for(u = head->next; u != NULL;u = u->next)  n++;  
//采用冒泡法对各个节点按加班天数降序排列for(i=1;i<=n;i++)  {  u = head;  for(j=0;j<n-i;j++)  {  p = u->next;  q = p->next;  if(p->over < q->over)  {  u->next = q;  p->next = q->next;  q->next = p;  }  u = u->next;  }  } printf("\t\t\t\t加班天数降序后员工信息\n");display();return;
}  
void find()
{int chioce;do{printf("\t\t\t********************************\n");printf("\t\t\t*        1.按姓名查找          *\n");printf("\t\t\t*        2.按工号查找          *\n");printf("\t\t\t*        3.按电话查找          *\n");printf("\t\t\t*        4.按姓名和工号查找    *\n");printf("\t\t\t*        5.返回上一步          *\n");printf("\t\t\t*        0.退出                *\n");printf("\t\t\t********************************\n");printf("\t\t\t请选择:");if(scanf("%d",&chioce)){system("cls");switch(chioce)			{  case 1:find_name();break;case 2:find_num();break;case 3:find_phone();break;case 4:find_namenum();break;case 5:return;default:printf("\n\t\t\t--->无效的指令!\n");}}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 chioce=1; //防止跳出循环 }}while(chioce!=0);return;
}
//按姓名查找某一员工
void find_name()  
{  char cname[20];//标志变量,记录是否查找成功;n = 0;printf("\t\t\t\t\t根据姓名查询信息\n");printf("\t\t\t请输入您要查询员工的姓名: ");  scanf("%s",cname);  for(u = head->next; u != NULL;u = u->next)  {  if(strcmp(u->name,cname) == 0)  {  n = 1;  puts("☆\t  姓名        工号      电话        部门             职位          实际工资  基本工资 迟到 请假 加班 罚款 奖金\n");  printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");  printf("\t  ┊%-10s %-8s  %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d┊\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n"); break;  }  }  if(!n)  printf("\t\t\t--->该员工不存在哦(⊙o⊙)!\n");  
}  
//按工号查找某一学生成绩
void find_num()  
{  
//标志变量,记录是否查找成功;char cnum[20];n = 0;printf("\t\t\t\t\t根据工号查询信息\n");printf("\t\t\t请输入您要查询员工的工号: ");  scanf("%s",cnum);  for(u = head->next; u != NULL;u = u->next)  {  if(strcmp(u->number,cnum) == 0)  {  n = 1;  puts("☆\t  姓名        工号      电话        部门             职位          实际工资  基本工资 迟到 请假 加班 罚款 奖金\n");  printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");  printf("\t  ┊%-10s %-8s  %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d┊\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n"); break;  }  }  if(!n)  printf("\t\t\t--->该员工不存在哦(⊙o⊙)!\n");  
}//按电话查找某一员工
void find_phone()  
{  
//标志变量,记录是否查找成功;char cphone[20];n = 0;printf("\t\t\t\t\t根据电话查询信息\n");printf("\t\t\t请输入您要查询员工的电话: "); scanf("%s",cphone);  for(u = head->next; u != NULL;u = u->next)  {  if(strcmp(u->phone,cphone) == 0)  {  n = 1;  printf("\n");  puts("☆\t  姓名        工号      电话        部门             职位          实际工资  基本工资 迟到 请假 加班 罚款 奖金\n");  printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");  printf("\t  ┊%-10s %-8s  %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d┊\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n"); break;  }  }  if(!n)  printf("\t\t\t--->该员工不存在哦(⊙o⊙)!\n");  
}  
//按姓名和工号查找某一员工
void find_namenum()  
{
//标志变量,记录是否查找成功;char ch[20];n = 0;printf("\t\t\t\t\t根据姓名和工号查询信息\n");printf("\t\t\t请输入您要查询员工的姓名: "); scanf("%s",ch);  for(u = head->next; u != NULL;u = u->next)  {  if(strcmp(u->name,ch) == 0)  { printf("\t\t\t请输入工号:");while(1){scanf("%s",ch);if(strcmp(u->number,ch) == 0){n = 1;  printf("\n");  puts("☆\t  姓名        工号      电话        部门             职位          实际工资  基本工资 迟到 请假 加班 罚款 奖金\n");  printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");  printf("\t  ┊%-10s %-8s  %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d┊\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n"); break;}else{printf("\t\t\t工号与姓名不匹配!请重新输入工号:");fflush(stdin);}}}  }  if(!n)  printf("\t\t\t--->该员工不存在哦(⊙o⊙)!\n");  
}   
//打印该公司所以员工的信息
void display()  
{   n=0;  if(head->next == NULL)  {  printf("--->没有员工信息!\n");  return ;  }  puts("☆\t  姓名        工号      电话        部门             职位          实际工资  基本工资 迟到 请假 加班 罚款 奖金\n");  printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");for(u = head->next; u!= NULL;u = u->next)  {  n++;  printf("\t  ┊%-10s %-8s  %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d┊\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");}  printf("\n该公司共有 %d个员工.\n\n",n);  
}  
//保存员工文件;
void save()  
{  char c[20];FILE *fp;printf("\n\t\t\t确认保存?(y/n): ");  while(1){scanf("%s",c);if( (strcmp(c,"n")!=0) && (strcmp(c,"y")!=0)){printf("\t\t\t请输入合法字符!\n");printf("\t\t\t请重新输入: ");fflush(stdin); //清除缓冲区 }if( (strcmp(c,"n")==0) || (strcmp(c,"y")==0)){break;}}if((strcmp(c,"n")==0)){printf("\t\t\t不保存哦 ^.^\n");return ;}if((fp=fopen("staff.txt","w+"))==NULL)  {  printf("\n\t\t\t--->staff.txt文件打开失败!\n");return ;  }fputs("姓名 工号 电话 部门 职位 密码 实际工资 基本工资 迟到  请假 加班 扣款 奖金\n",fp);
//从头节点开始依次写入文件;for(u = head->next; u != NULL;u = u->next)  { fprintf(fp,"%s %s %s %s %s %s ",u->name,u->number,u->phone,u->depart,u->post,u->password);  fprintf(fp,"%d %d %d %d %d %d %d\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);}  fclose(fp);  printf("\n\t\t\t--->信息成功存入\n");  
}
//读取员工文件
void read()  
{  char a[100];//存放读取的汉字FILE *fp;char ch;fp=fopen("staff.txt","a+");          //进入程序时打开/建立该文件fclose(fp);if((fp=fopen("staff.txt","r"))==NULL)  {  printf("\n\t\t\t--->没有找到文件!\n");  return ;  }ch=fgetc(fp);if(ch==EOF){return;}elserewind(fp);fgets(a,74,fp);//读取第一行汉字信息while(!feof(fp))  {   u = new_node(u);fscanf(fp,"%s %s %s %s %s %s ",u->name,u->number,u->phone,u->depart,u->post,u->password);  fscanf(fp,"%d %d %d %d %d %d %d\n",&u->z.real,&u->z.base,&u->late,&u->leave,&u->over,&u->z.cut,&u->z.bonus);u->next = head->next; //头插法建立链表 head->next = u;  }fclose(fp);}
//保存经理文件;
void msave()  
{  char c[20];FILE *fp;printf("\n\t\t\t确认保存?(y/n): ");  while(1){scanf("%s",c);if( (strcmp(c,"n")!=0) && (strcmp(c,"y")!=0)){printf("\t\t\t请输入合法字符!\n");printf("\t\t\t请重新输入: ");fflush(stdin); //清除缓冲区 }if( (strcmp(c,"n")==0) || (strcmp(c,"y")==0)){break;}}if((strcmp(c,"n")==0)){printf("\t\t\t不保存哦 ^.^\n");return ;}  if((fp=fopen("manage.txt","w+"))==NULL)  {  printf("\n--->无法打开文件\n");  return ;  } fputs("姓名 工号 所管部门 密码\n",fp);
//从头节点开始依次写入文件;
//部门经理:  姓名 工号 所管部门 密码for(mu = mhead->next; mu != NULL;mu = mu->next)  {  fprintf(fp,"%s %s %s %s\n",mu->mname,mu->mnumber,mu->mdepart,mu->mpassword);  }  fclose(fp);  printf("\n\t\t\t--->经理信息成功存入\n");  
}
//读取经理文件
void mread()  
{  FILE *fp;char ch,a[100];fp=fopen("manage.txt","a");fclose(fp);if((fp=fopen("manage.txt","r"))==NULL)  {  printf("\n--->没有找到文件!\n");  return ;  }ch=fgetc(fp);if(ch==EOF){return;}elserewind(fp);fgets(a,25,fp);//读取第一行汉字信息while(!feof(fp))  {  mu = mnew_node(mu); fscanf(fp,"%s %s %s %s\n",mu->mname,mu->mnumber,mu->mdepart,mu->mpassword);  mu->next = mhead->next; //头插法建立链表 mhead->next = mu;  }fclose(fp);	
}
//退出程序
void exi()  
{  char c[100];printf("\n\t\t\t确定退出?(y/n): ");while(1){scanf("%s",c); if( (strcmp(c,"n")!=0) && (strcmp(c,"y")!=0)){printf("\t\t\t请输入合法字符!\n");printf("\t\t\t请重新输入: ");fflush(stdin); //清除缓冲区 }if( (strcmp(c,"n")==0) || (strcmp(c,"y")==0)){break;}}if((strcmp(c,"n")==0)){printf("\t\t\t不保存哦 ^.^\n");return ;}  system("cls");  printf("\n\n");  printf("\t\t\t     ∷ ∷ ∷ ∷ ∷ ∷ ∷ ∷ ∷\n");  printf("\t\t\t     ∷ 谢谢使用 ∷\n");  printf("\t\t\t     ∷ ∷ ∷ ∷ ∷ ∷ ∷ ∷ ∷\n");  printf("\t\t\t                          Thank you! ( ̄▽ ̄) \n");  exit(0);  
}
void gotoxy(int x, int y)//位置函数
{COORD coord = {x, y};   /*COORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。其定义为:typedef struct _COORD {SHORT X; // horizontal coordinateSHORT Y; // vertical coordinate} COORD;*/SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void welcome()
{int i;system("color 0B");printf("\n\n\n\t\t\t(* ̄︶ ̄)~*  欢 迎 进 入  FengRong's  员 工 管 理 系 统");printf("\n\n\n\n\n\n\n\n\n\n");printf("\t\t\t\t┌───────────┐\n\n\n");printf("\n\t\t\t\t└───────────┘\n");gotoxy(33,15);for(i=0;i<5;i++){printf("██");Sleep(400);}system("cls");
}  
int main()  
{  int chioce;head = wj = new_node(head);//wj,mwj用于初始文件的读取mhead = mwj = mnew_node(mhead);bhead = bwj = bnew_node(bhead);//welcome();system("color 3f");read();mread();begread();do{                            printf("\t\t\t┏━━━━━员工管理系统━━━━━┓\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         1. 管理员              ┃\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         2.普通员工             ┃\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         3.部门经理             ┃\n"); printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         0.退出管理系统         ┃\n");  printf("\t\t\t┃                                ┃\n"); printf("\t\t\t┗━━━━━━━━━━━━━━━━┛\n"); printf("\t\t\t请选择登陆身份:");if(scanf("%d",&chioce)){switch(chioce){  case 0:exi(); case 1:admin();break;case 2:staff();break;case 3:manager();default:printf("\n\t\t\t请重新选择登录身份:\n");break;}}else{printf("\n\t\t\t不能输入非整型,请重新选择登录身份:\n");fflush(stdin); //清除缓冲区 chioce=1; //防止跳出循环 } }while(chioce!=0);system("pause");  
}
void mmgl()
{int chioce;do{printf("\n");printf("\t\t\t************************************\n");printf("\t\t\t*        1.修改员工密码            *\n");printf("\t\t\t*        2.修改经理密码            *\n");printf("\t\t\t*        3.修改管理员密码          *\n");printf("\t\t\t*        4.退回系统                *\n");printf("\t\t\t*        0.退出                    *\n");printf("\t\t\t************************************\n");printf("\t\t\t请选择:");if(scanf("%d",&chioce)){system("cls");switch(chioce){  case 1:stam();break;case 2:manam();break;case 3:adminm();break;case 4:return;default:printf("\n--->无效的指令!\n");}}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 chioce=1; //防止跳出循环 }}while(chioce!=0);return;
}
void stam()   // 管理员修改密码--找到要修改员工的工号
{  char mm[100];    //变量:修改密码的工号,输入旧密码,修改的新密码n = 0;printf("\n\t\t\t请输入要您要修改密码的工号");  scanf("%s",mm);  for(u = head; u != NULL;u = u->next)  {  if(strcmp(u->number,mm) == 0){  n = 1; printf("\n\t\t\t请输入旧的密码: ");scanf("%s",mm);if(strcmp(u->password,mm) != 0){printf("\t\t\t旧密码输入错误哦\n");printf("\t\t\t请谨慎输入 ^.^ 重新输入旧密码\n");scanf("%s",mm);if(strcmp(u->password,mm) != 0){printf("\t\t\t两次输入错误了!\n");printf("\t\t\t您已经没有权利修改密码了 =_= 将返回上一步\n");}else{printf("\t\t\t旧密码验证成功!\n");printf("\t\t\t请输入新的密码: ");  while(1){scanf("%s",u->password);if(strlen(u->password)>15){printf("\t\t\t密码输入过长 ^.^\t请重新输入\n");}if(strlen(u->password)<=15){break;}}printf("\n\t\t\t--->修改成功!\n");save();break; } }else{printf("\t\t\t旧密码验证成功!\n");printf("\t\t\t请输入新的密码: ");  while(1){scanf("%s",u->password);if(strlen(u->password)>15){printf("\t\t\t密码输入过长 ^.^\t请重新输入\n");}if(strlen(u->password)<=15){break;}} printf("\n\t\t\t--->修改成功!\n");save();break; }   }  }  if(!n)  printf("\n\t\t\t--->没有这个员工!\n");  
}
void manam()  
{  char mm[100];n = 0;printf("\n\t\t\t请输入要修改经理密码的工号 ");  scanf("%s",mm);  for(mu = mhead; mu != NULL;mu = mu->next)  {  if(strcmp(mu->mnumber,mm) == 0)  {  n = 1;printf("\n\t\t\t请输入旧的密码: ");scanf("%s",mm);if(strcmp(mu->mpassword,mm) != 0){printf("\t\t\t旧密码输入错误哦\n");printf("\t\t\t请谨慎输入 ^.^ 重新输入旧密码\n");scanf("%s",mm);if(strcmp(mu->mpassword,mm) != 0){printf("\t\t\t两次输入错误了!\n");printf("\t\t\t您已经没有权利修改密码了 =_= 将返回上一步\n");}else{printf("\t\t\t旧密码验证成功!");printf("\n\t\t\t请输入新的密码: ");  scanf("%s",mu->mpassword); printf("\n\t\t\t--->修改成功!\n");msave();break; } }else{printf("\t\t\t旧密码验证成功!");printf("\n\t\t\t请输入新的密码: ");  scanf("%s",mu->mpassword); printf("\n\t\t\t--->修改成功!\n");msave();break; } }}  if(!n)  printf("\n\t\t\t--->没有这个经理!\n");  
}void adminm()
{FILE *fp;unsigned i;char ch[100];char ps[100];fp=fopen("admin.txt","rt"); fscanf(fp,"%s",ps);//读取管理员密码fclose(fp);if((fp=fopen("admin.txt","w+"))==NULL)  {  printf("\n\t\t\t--->无法打开文件\n");  return;  }printf("\n\t\t\t请输入旧密码:");scanf("%s",ch);if(strcmp(ps,ch)!=0){printf("\t\t\t旧密码输入错误哦\n");printf("\t\t\t请谨慎输入 ^.^ 重新输入旧密码\n");scanf("%s",ch);if(strcmp(mu->mpassword,ch) != 0){printf("\t\t\t两次输入错误了!\n");printf("\t\t\t您已经没有权利修改密码了 =_= 将返回上一步\n");}else{printf("\n\t\t\t请输入新的管理员密码:\n");scanf("%s",ch);for(i=0;i<(strlen(ch));i++){fputc(ch[i],fp);}fclose(fp);return;}}else{printf("\n\t\t\t请输入新的管理员密码:\n");scanf("%s",ch);for(i=0;i<(strlen(ch));i++){fputc(ch[i],fp);}fclose(fp);return;} 
}
int getadmin()
{int i=0;FILE *fp;char password[100],password1[100];char c;fp=fopen("admin.txt","a");fclose(fp);fp=fopen("admin.txt","rt"); fscanf(fp,"%s",password);//读取管理员密码fclose(fp);printf("\n\n\n\n\t\t\t请输入管理员密码:");//scanf("%s",password1);while((c=getch())!=13){if(c==8){printf("\b \b");i--;continue;}password1[i++]=c;putchar('*');}password1[i]='\0';if(strcmp(password1,password)==0){printf("\n\t\t\t登录中");for(i=1;i<6;i++){printf("★");Sleep(100);}printf("\n");return 1;}else{printf("\n\t\t\t密码输入错误!密码在admin.txt中\n\t\t\t请重新输入密码:");fflush(stdin);scanf("%s",password1);if(strcmp(password1,password)==0){printf("\n\t\t\t登录中");for(i=1;i<6;i++){printf("★");Sleep(100);}printf("\n");return 1;}else{printf("\n\t\t\t你已经两次密码输入错误!\n\t\t\t将返回上一步,请重新选择登录身份!\n");system("pause");system("cls");return 0;}}
}
void adminxx()
{int chioce;do{printf("\t\t\t┏━━━━━━━━━━━━━━━━┓\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         1. 查询员工信息        ┃\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         2. 修改员工信息        ┃\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         3. 删除员工信息        ┃\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         4. 排序员工信息        ┃\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         5. 返回上一步          ┃\n");  printf("\t\t\t┃                                ┃\n"); printf("\t\t\t┃         0.退出管理系统         ┃\n");  printf("\t\t\t┃                                ┃\n"); printf("\t\t\t┗━━━━━━━━━━━━━━━━┛\n");  printf("\t\t\t请选择:");if(scanf("%d",&chioce)){system("cls");switch(chioce)  {   case 1:find();break;case 2:modify();break;case 3:del();break; case 4:sort();break;case 5:return;case 0:exi(); break;default:printf("\n--->无效的指令!\n");  }}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 chioce=1; //防止跳出循环 }}while(chioce!=0);return;
}   
void admin()
{int choice;   system("color 0a");system("cls");if(getadmin()){system("cls");//*****while(1)  {  printf("\t\t\t\t\t\t\t\t管理员模式\n\n\n\n");printf("\t\t\t┏━━━━━员工管理系统━━━━━┓\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         1. 采集信息            ┃\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         2. 管理员工信息        ┃\n");//查询find()  修改modify() 删除del() 排序sort();printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         3. 浏览员工信息        ┃\n");//display()printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         4. 管理密码            ┃\n");printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         5. 管理公司机构        ┃\n"); //beg_add()printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         6. 查看公司机构        ┃\n"); //beg_show()printf("\t\t\t┃                                ┃\n");printf("\t\t\t┃         7. 返回上一步          ┃\n");  printf("\t\t\t┃                                ┃\n"); printf("\t\t\t┃         0.退出管理系统         ┃\n");  printf("\t\t\t┃                                ┃\n"); printf("\t\t\t┗━━━━━━━━━━━━━━━━┛\n");    printf("\t\t\t       请选择功能:");if(scanf("%d",&choice))   {system("cls");switch(choice)  {   case 1:add();break;case 2:adminxx();break;case 3:display();break; case 4:mmgl();break;case 5:beg_add();break;case 6:beg_show();break;case 7:return;case 0:exi(); break;default:printf("\n--->无效的指令!\n");  }}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 choice=1; //防止跳出循环 }printf("\n");    }    }else return ;
}
int sgetmima()
{int m,i=0;//控制char smima[20];char c;m=0;printf("\t\t\t请输入工号:");scanf("%s",sdl);if(head->next==NULL){printf("\t\t\t没有员工信息\n");return 0;}for(u=head->next;u!=NULL;u=u->next){if(strcmp(u->number,sdl)==0){printf("\t\t\t请输入密码:");//scanf("%s",smima);while((c=getch())!=13){if(c==8){printf("\b \b");i--;continue;}smima[i++]=c;putchar('*');}smima[i]='\0';if(strcmp(u->password,smima)==0){m=1;printf("\n\t\t\t登录中");for(i=1;i<6;i++){printf("★");Sleep(100);}printf("\n");return 1;}else{printf("\n\t\t\t请再次输入密码:");scanf("%s",smima);if(strcmp(u->password,smima)==0){m=1;printf("\n\t\t\t登录中");for(i=1;i<6;i++){printf("★");Sleep(100);}printf("\n");return 1;}else{printf("\t\t\t密码输入错误!\n");return 0;}}}}if(!m){printf("\n\t\t\t没有此工号的员工!\n");return 0;}return 0;
}void modi_self()//员工修改自己基本信息
{int chioce;	int j;do{printf("\n");printf("\t\t\t*********************修改信息*********************\n");printf("\t\t\t*        1.修改姓名         2.修改电话           *\n");printf("\t\t\t*        3.修改密码         4.返回上一步         *\n");printf("\t\t\t*        0.退出                                  *\n");printf("\t\t\t**************************************************\n");printf("\t\t\t请选择:");if(scanf("%d",&chioce)){switch(chioce){  case 1:{	while(1){printf("\t\t\t*请输入新的姓名: ");  scanf("%s",u->name);for(j=0;(size_t)j<strlen(u->name);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->name[j]<'a' || u->name[j]>'z'){printf("\t\t\t姓名不符合常规 ^.^\t请重新输入\n");break;}if(strlen(u->name)>15){printf("\t\t\t姓名过长 ^.^\t请重新输入\n");break;}}if(strlen(u->name)<=15&&(size_t)j==strlen(u->name)){break;}}printf("\n--->修改成功!\n");save();break;}case 2:{while(1){printf("\t\t\t*请输入新的电话(11位):__\b\b");scanf("%s",u->phone);for(j=0;(size_t)j<strlen(u->phone);j++) //strlen函数返回的类型是size_t 实质是无符号整型{if(u->phone[j]<'1' || u->phone[j]>'9'){printf("\t\t\t电话是数字 ^.^\t请重新输入\n");break;}if(strlen(u->phone)!=11){printf("\t\t\t电话是11位 ^.^\t请重新输入\n");break;}}if(strlen(u->phone)==11&& (size_t)j==strlen(u->phone)){break;}}printf("\n--->修改成功!\n");save();break;}case 3:{printf("\t\t\t请输入新的密码: ");  while(1){scanf("%s",u->password);if(strlen(u->password)>15){printf("\t\t\t密码输入过长 ^.^\t请重新输入\n");}if(strlen(u->password)<=15){break;}}printf("\n\t\t\t--->修改成功!\n");save();break; }case 4:return;default:printf("\n\t\t\t--->无效的指令!\n");}}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 chioce=1; //防止跳出循环 }}while(chioce!=0);return;
}//员工修改自己的基本信息    员工登录工号全局变量char sdl[20];
void mself()
{  for(u = head; u != NULL;u = u->next)  {  if(strcmp(u->number,sdl) == 0)  {  printf("\t\t\t\t\t*员工初始信息*\n");puts("      姓名          工号     电话        部门              职位      实际工资 基本工资 迟到 请假 加班 罚款 奖金\n");    printf("%-15s %-8s %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);modi_self();break;   }  } 
} 
void sjinru()
{int choice;system("color 3f");system("cls");while(1)  {   printf("\t\t\t\t\t\t\t\t\t\t\t员工模式\n\n\n\n");printf("\t\t\t┏━━━━━━━━━━━━━━━┓\n");         printf("\t\t\t┃       1.查询信息             ┃ \n"); //员工可以查询自己和别人的信息 printf("\t\t\t┃                              ┃\n");  printf("\t\t\t┃       2.修改信息             ┃\n");  //该工号员工只能修改自己的基本信息(姓名 电话 密码)printf("\t\t\t┃                              ┃\n");printf("\t\t\t┃       3.查看加班信息         ┃\n");  //员工查看经理发布的加班时间printf("\t\t\t┃                              ┃\n");printf("\t\t\t┃       4.发送请假信息         ┃\n");printf("\t\t\t┃                              ┃\n");printf("\t\t\t┃       5.返回上一步           ┃\n"); printf("\t\t\t┃                              ┃\n");printf("\t\t\t┃       0.退出管理系统         ┃\n");  printf("\t\t\t┃                              ┃\n"); printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n"); printf("\t\t\t请选择功能: ");if(scanf("%d",&choice)){system("cls");switch(choice)  {  case 1:find();break;  case 2:mself();break; case 3:lookover();break;case 4:askleave();break;case 5:return;case 0:exi();break;  default:printf("\n\t\t\t--->无效的指令!\n");  }}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 choice=1; //防止跳出循环 }printf("\n"); system("pause");  system("cls");  } 
}
void staff()
{system("color 0b");//while(1)// {if(sgetmima()) //工号和密码{system("cls");sjinru();}elsereturn;//}}
int mgetmima()
{int m,i=0;//控制char mmima[20];char mnumber[20];char c;m=0;printf("\t\t\t请输入部门经理工号:");scanf("%s",mnumber);if(mhead->next==NULL){printf("\t\t\t没有经理\n");return 0;}for(mu=mhead->next;mu!=NULL;mu=mu->next){if(strcmp(mu->mnumber,mnumber)==0){printf("\n\t\t\t请输入密码:");//scanf("%s",mmima);while((c=getch())!=13){if(c==8){printf("\b \b");i--;continue;}mmima[i++]=c;putchar('*');}mmima[i]='\0';if(strcmp(mu->mpassword,mmima)==0){m=1;strcpy(ddepart,mu->mdepart);//查看自己部门员工的信息printf("\n\t\t\t登录中");for(i=1;i<6;i++){printf("★");Sleep(100);}printf("\n");return 1;}else{printf("\n\t\t\t请再次输入密码:");scanf("%s",mmima);if(strcmp(mu->mpassword,mmima)==0){m=1;strcpy(ddepart,mu->mdepart);printf("\n\t\t\t登录中");for(i=1;i<6;i++){printf("★");Sleep(100);}printf("\n");return 1;}else{printf("\t\t\t密码输入错误!\n");return 0;}}}}if(!m){printf("\n\t\t\t没有此工号的经理!\n");return 0;}return 0;
}//查找自己部门所有员工的信息;
void find_depart() 
{   n=0; for(u = head->next; u != NULL;u = u->next)  {  //不是该部门的员工则跳过;if(strcmp(u->depart,ddepart))  continue;                                 //如果是第一个员工则打印头信息if(!n)  puts("☆\t  姓名        工号      电话        部门             职位          实际工资  基本工资 迟到 请假 加班 罚款 奖金\n");  printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");  n++;printf("\t  ┊%-10s %-8s  %-11s %-15s %-15s ",u->name,u->number,u->phone,u->depart,u->post);printf("%-8d %-8d %-4d %-4d %-4d %-4d %-4d┊\n",u->z.real,u->z.base,u->late,u->leave,u->over,u->z.cut,u->z.bonus);printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n"); }  if(!n)  {  printf("没有这个部门员工的信息!\n");  return ;  }  printf("\n该部门共有 %d个员工.\n\n",n);  
}
void mjinru()
{int choice;system("color 2f");system("cls");while(1)  {  printf("\t\t\t\t\t\t\t\t\t\t\t>经理模式\n\n\n\n");printf("\t\t\t┏━━━━━━━━━━━━━━━┓\n");   printf("\t\t\t┃       1.采集员工信息         ┃\n");printf("\t\t\t┃                              ┃\n");   printf("\t\t\t┃       2.浏览信息             ┃\n");printf("\t\t\t┃                              ┃\n"); printf("\t\t\t┃       3.查看本部门信息       ┃\n"); printf("\t\t\t┃                              ┃\n");printf("\t\t\t┃       4.通知加班信息         ┃\n"); printf("\t\t\t┃                              ┃\n");printf("\t\t\t┃       5.审核请假信息         ┃\n"); printf("\t\t\t┃                              ┃\n");printf("\t\t\t┃       6.返回上一步           ┃\n");printf("\t\t\t┃                              ┃\n");printf("\t\t\t┃       0.退出管理系统         ┃\n");printf("\t\t\t┃                              ┃\n"); printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n"); printf("\t\t       请选择功能:");  if(scanf("%d",&choice)){system("cls");switch(choice)  {       case 1:s_add();break;  case 2:display();break;case 3:find_depart();break;case 4:callover();break;case 5:giveleave();break;case 6:return;case 0:exi(); break;default :system("cls");printf("\n--->请重新输入!\n");  }}else{printf("\n\t\t\t不能输入非整型,请重新输入:");fflush(stdin); //清除缓冲区 choice=1; //防止跳出循环 }printf("\n"); system("pause");  system("cls");  }    
}
void manager()
{system("color 0b");//while(1)// {if(mgetmima()){system("cls");mjinru();}elsereturn;// }
}


查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 用c语言实现一个简单的计算器(数据结构)

    概要:主要以c语言为例对数据结构中写一个简易的计算器(计算整数间加减乘除括号运算)的算法进行大致讲述,细说如何去实现符号优先级的比较的函数实现。 注:由于编辑器缘故,本文内我以小写x代替了*作为乘号 栈的相关内容:https://blog.csdn.net/weixin_44579240/article/d…...

    2024/5/6 12:54:40
  2. C语言的编译器

    C语言的常用编译器 目前最流行的C语言编译器有以下几种: GNU Compiler Collection 或称 GCC Microsoft C 或称 MS C Borland Turbo C 或称 Turbo C 这些C语言版本不仅实现了ANSI C标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。 Windows及Linux平台编译…...

    2024/5/6 5:07:47
  3. Junit 实例精讲基础教程(一) 使用@Ignore注解跳过单元测试方法的执行

    实际开发完成后,我们经常可能在一个单元测试类中进行多个方法的单元测试,但是每次只想对某一个方法进行单元测试,这时我们可以使用@Ignore注解来跳过其他方法,仅仅对指定的某个方法进行单元测试,这里分享一下@Ignore注解的使用。(本文章分享在CSDN平台,更多精彩请阅读 东…...

    2024/4/28 14:52:17
  4. c语言编写学生管理系统

    昨天我一高中同学让我写一个学生管理系统,说怎么简单怎么来,其实管理系统是每个学编程的人必须会的代码,下面分享给大家。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>#define number 50#define LEN sizeof(struct ad…...

    2024/5/6 14:19:06
  5. 数据结构与算法知识点总结—思维导图

    数据结构与算法是学习编程者的必修课,下面是我学习完之后的知识点梳理与总结。本来用xmind做的时候把重要知识点都附了博客链接,但是xmind导出来后打不开了。 有喜欢的可以关注我的公众号:微信搜索 龙跃十二 ,可获得pdf版本总结。...

    2024/4/19 13:23:33
  6. 单元测试的基本方法

    单元测试的基本方法单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。单元测试任务单元测试任务包括:…...

    2024/4/9 18:07:53
  7. 如何对顺序表进行创建和赋值,调用?c语言 数据结构

    先要对顺序表的存储方式有个了解,它与数组存储的不同之处在于,这个的储存是连续的,并且是动态存储的。1、首先对先对SqList进行预定义2、省略了其他的预定义。大致的创立和赋值代码如下,先是声明个顺序表a,然后对其进行分配空间,用malloc函数,for循环是对顺序表里的数据经…...

    2024/4/12 10:04:55
  8. 深入浅出C语言(1) ----编译器的作用

    在学习C语言的时候,一般人可能着重点在于C语法上,忽略了编译器的作用。 而真正深入理解C语言是绝不能离开编译器的。C语言跟其他诸如C++,Java,C#,Perl等应该算是一种符号标准,真正实现这种标准的是-----编译器。用C语言写的源代码程序,最终是要运行在CPU上的。对于CPU来说…...

    2024/4/9 18:07:51
  9. 使用c语言单向链表实现简单学生成绩管理系统(2)

    使用c语言单向链表实现简单学生成绩管理系统 本文优化整个代码框架结构,完善用户可以对系统信息的修改。本例中,使用一系列c语言知识,有利于巩固c语言语法,具体包括结构体,枚举,while循环,switch语句,还有数据结构等内容。 基于上一个内容(使用c语言单向链表实现简单学…...

    2024/5/6 5:58:40
  10. 一个优雅的程序猿教你认识C语言编译器

    编程语言有很多种,主要分为三大类,分别是机器语言、汇编语言、高级语言。计算机只能理解识别二进制代码,也就是0和1。我们用机器语言开发我们得记住计算机所有的指令代码和代码涵义。这样的编程枯燥而繁琐费力,也容易出错。汇编语言应运而生,汇编语言用助记符代替机器指令…...

    2024/5/6 10:26:43
  11. 数据结构舞伴问题——C语言

    #include <stdio.h> #include <stdlib.h> #include <string.h> #define OK 1 #define ERROR 0 typedef struct {char name[20];char sex; }Person; typedef struct {Person m[20];//存储名字和性别Person *base;//存储空间的基地址int front;//头指针int rea…...

    2024/5/6 9:08:12
  12. 基于C语言单链表的成绩管理程序

    单向链表实现增删改查 1.数据结构 typedef struct item {item *prev = NULL;item *next = NULL;char name[20];int math;int cna;int eng;int avg;bool flag = false;//有内容标志,可以忽略掉第一个数据得问题 }date;*prev------------->指向上一个数据存储空间的指针 *nex…...

    2024/5/6 8:19:55
  13. C语言语法在不同编译器下的问题,简单谈谈地址,试用初学者

    ReceiveData = *(u32 *)&SPI2_RxBUF[1]; ReceiveData = *((u32 *)&SPI2_RxBUF[1]); 对于C语言来说语法上没什么区别,*与& 都是同等优先级,结合方式从右到左。 这两句都是取SPI2_RxBUF[1]的地址,强制转换为32位地址指针,取指针即可得到32位数据,然后赋值给R…...

    2024/4/19 14:50:23
  14. GO程序单元测试案例编写与Gogland运行单元测试方法

    一,GO语言为我们准备好了测试框架!单元测试文件的执行需要单元测试框架,GO语言已经为我们准备好了,Go语言中自带有一个轻量级的测试框架testing,可以使用"go test"命令来实现单元测试和性能测试!无须进行任何其它安装或配置,我们就可以编写GO程序的单元测试程…...

    2024/4/12 23:39:13
  15. 【数据结构】数据结构知识思维导图

    数据结构知识思维导图:思维导图源文件: 链接:https://pan.baidu.com/s/1Z44pX_jn3P6L4BSS13WmUA 提取码:zmga...

    2024/4/12 10:05:19
  16. C语言练手自己编写学生成绩管理系统

    #include<stdio.h> #include<stdlib.h> /*定义学生结构体*/ struct Student {char ID[20];char Name[20];float Mark1;float Mark2;float Mark3;float Avarage; };/*声明学生数组及学生数量*/ struct Student students[1000]; int num=0;/*计算平均成绩*/ float Av…...

    2024/4/18 13:21:06
  17. C语言数据结构----栈与递归

    本节主要说程序中的栈函数栈的关系以及栈和递归算法的关系。 一、函数调用时的栈 1.程序调用时的栈是也就是平时所说的函数栈是数据结构的一种应用,函数调用栈一般是从搞地质向低地址增长的,栈顶为内存的低地址,栈底为内存的高地址。函数调用栈中存储的是数据的活动记录。活…...

    2024/4/18 22:54:07
  18. C#的单元测试方法

    一、 单元测试 是软件测试方法的其中一种,其中还有比如动态黑盒测试、数据测试、破坏性测试等等。 单元测试也称之为“模块测试”,是对程序设计中的最小单元——函数进行测试的一种方法,所谓测试,就是验证我们自己编写的方法能不能够得到正确的结果,即用方法得到的…...

    2024/4/19 13:01:06
  19. 学生管理系统(C语言综合链表实现)

    学生管理系统(C语言综合链表实现) 题目:定义单向链表类型StuLink,链表结点包含xh、xm、cj、dj、mc、nxet六个数据项,分别代表学生的学号、姓名、成绩、等级、名次和指向下一个结点的指针,其中:学号、姓名、成绩是输入项,等级、名次是计算项。请按如下功能要求设计一个学…...

    2024/4/18 16:26:45
  20. C 语言编译器 gcc 命令详解

    Linux 系统中最重要的软件开发工具是 gcc,在 Linux 系统中,c89、cc 和 gcc 这些命令基本上都指向系统的C语言编译器,通常是GNU C编译器,或都简称 gcc。在 UNIX 系统中,C 语言编译器称为 cc。实际上,gcc 能够编译三种语言:C、C++ 和 Object C(C 语言的一种面向对象扩展)…...

    2024/5/1 8:12:00

最新文章

  1. C#运算符“/”使用方法

    C#中&#xff0c;当需要对两个整数进行除法运算时&#xff0c;结果会被截断为整数部分&#xff0c;即使结果本应是一个小数。这是因为整数除法会丢弃小数部分&#xff0c;只保留整数部分。 要想保留小数部分&#xff0c;需要将至少其中一个操作数转换为float、double或者 deci…...

    2024/5/6 17:48:47
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. gateway的授权思考

    gateway的授权思考 1、看了一下若依的cloud项目。 登录&#xff1a;是传将authoration 这个token和当前用户绑定&#xff0c;然后放在redis.在登录的时候&#xff0c;也将相关的信息&#xff0c;比如校验了一下。不通过就不通过。 Override public OAuth2ClientDO validOAuth…...

    2024/4/30 22:16:10
  4. ChatGPT 初学者指南

    原文&#xff1a;ChatGPT for Beginners 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 介绍 如果您一直关注新闻和趋势&#xff0c;您可能已经在某个地方读到或听到过&#xff0c;Sam Altman 的生成式人工智能平台 ChatGPT 已经将人工智能推向了一个新的高度 - 许多…...

    2024/5/5 16:47:03
  5. 在 Visual Studio Code (VSCode) 中隐藏以 . 开头的文件

    打开VSCode。 按下Ctrl ,快捷键打开设置。您也可以点击屏幕左下角的齿轮图标&#xff0c;然后选择“Settings”。 在设置搜索框中&#xff0c;键入files.exclude。 在找到的Files: Exclude项中&#xff0c;点击Add Pattern按钮来添加一个新的模式&#xff0c;或者直接在搜索…...

    2024/5/5 2:03:53
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57