企业员工管理系统 c语言版

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <malloc.h>

#define N 100;


/********************************************结构体部分*******************************************************/
//构建员工的结构体
struct employee
{
    int num;//编号
    char name[8];//姓名
    char sex[2];//性别
    int   Csrq;//出生日期
    char  Jrsj[5];//进入时间
    char Sfzh[20];//身份证号
    int Ssbm;//所属部门
    int Zw;//职位
    int state;
    char phone[15];//电话号码
    char mail[15];//电子邮件
    char Qita[20];//其他w

};
struct employee em[100];

typedef struct loginUser
{
    char userName[20];//登陆用户账号
    char userPWD[20];//登陆密码
    int userRole;//用户角色,0--未审核用户,1--普通用户,2--超级管理员(审核新注册用户)
    struct loginUser *next;
} LoginUser;
typedef struct zwInfo//职务
{
    int zwId;
    char zwName[20];
    char zwBZ[50];
} ZwInfo;

typedef struct bminfo//定义结构体数组,并自定义命名Bminfo
{
    int bmid;//部门编号
    char bmname[10];//部门名称
    char bmphone[13];//部门电话
    char bmCZphone[13];//部门传真电话
    char bmaddress[50];//部门地址
    char bmQTSM[50];//其他说明
    struct bminfo *next;
} BmInfo;
/***************************************************************************************************/


LoginUser inUser;//已登陆用户,全局变量


/********************************************函数声明部分*******************************************************/
//函数声明
void showend(void);
void search();
void allshow();
void PrintZwTr();
void part();
void change();
void add();
void Fanhui();
void del();
void save(int);
void Tjzjinfo();
void Tjljinfo();
//void Tjage();

void tjinfo(int a);

int password(char *str,int size);//密码输入,“*”显示, p指向存储用户输入密码的数组,size为限制输入数
int StringLength(char *str,int max,int THEMAX,const int a);//限制输入字符长度,str为用于存储字符串的指针,max为自定义限制长度,THEMAX为自定义容错范围,a为选择超长是否截取(0:不截取即重新输入;1:截取即只取max长度)
int Login();//登陆系统函数,按ESC键退出,失败返回0,成功返回1,ESC退出返回2
int Logon();//用户注册函数,按ESC键退出,失败返回0,成功返回1,ESC退出返回2
void MainMenu();//主菜单函数
void Welcome();//登陆成功后,选择:进入系统、修改密码
void userManage();//用户管理
void PrintUserTr(int a ,char *userName,char *userPWD,char *userRole);//显示用户列表行,职务管理
void AddUser();//管理员添加用户
void AduUser();//管理员审核用户
void DelUser();//管理员删除用户
void ModifyPWD();//用户登陆后修改密码
void mainpage();//进入系统后主界面
void ExitSys();//退出系统,<Y/N>
void PrintZwTr(int a ,char *zwName,char *zwBZ);//显示职务列表行,职务管理
void ZwManage();//职务管理
void AddZW();//添加职务
void ModifyZW();//修改职务
void DelZW();//删除职务信息,假删除,将职务编号置为零
void BmManage(int a);//部门管理
void AddBM();//添加部门
void ModifyBM();//修改部门
void DelBM();//删除部门
void getZW(char *str,int a);//根据id获取职务名称
void getBM(char *str,int a);//根据id获取部门名称
void showZW();//显示职务名称
void showBM();//显示部门名称

/***********************************************************************************************************/
void main()
{
    system("color 3F");   
    MainMenu(1);
}
/***********************************************************************************************************/

/********************************************魏凡设计部分*******************************************************/

void MainMenu()//主菜单函数
{
    int a=1;
    while (1)
    {
        int num,i;
        char pointto[5];
        system("cls");
        for(i=0;i<5;i++)
        {
            pointto[i]='/0';
        }
        pointto[a-1]='<';
        printf("/t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n");
        printf("/t ★●             欢迎使用            ●★/n");
        printf("/t    ★●                             ●★/n");
        printf("/t        ★★★★★★★★   XWL    ★★★★★★★★★/n");
        printf("/n");
        printf("/t/t  ┏─────────────────┓/n/n/n");
        printf("/t/t         1,输入密码         %c   /n/n",pointto[0]);
        printf("/t/t          2,用户注册        %c   /n/n",pointto[1]);
        printf("/t/t         3,退出系统     %c   /n/n/n",pointto[2]);
        printf("/t/t  ┗─────────────────┛/n");
        num=getch()-48;
        if(num==-35)
        {
            switch(a)
            {
            case 1:
                Login();
                break;
            case 2:
                Logon();
                break;
            case 3:
                printf("/t/t/t真的要退出吗?(Y/N)");
                if(getch()=='y')
                {
                    exit(0);   
                }
                break;
            }
        }
        else
        {
            if (num>0&&num<5)
            {
                a=num;
            }
        }

    }
}
int password(char *p,int size)//密码输入,“*”显示, p指向存储用户输入密码的数组,size为限制输入数
{
    //char p[20];
    char key;
    int i=0;
    //memset(p,0,20);
    //memset(str,0,20);

    while(1)
    {
        if(i>size)
        {
            key=_getch();
            if(key==8)
            {
                printf("/b /b");
                i--;
            }
            if(key==13)
            {
                p[i]='/0';
                //strcpy(str,p+1);
                break;
            }
            continue;
        }
        p[i]=_getch();
        if(p[i]==8)
        {
            if (i==0)
            {
                continue;
            }
            printf("/b /b");
            i--;
            continue;
        }
         else if(p[i]==13)
        {
            p[i]='/0';
            //strcpy(str,p+1);
            break;
        }
        printf("*");
        i++;
    }
    return 0;
}
int Login()//登陆系统函数,按ESC键退出,失败返回0,成功返回1,ESC退出返回2
{
    LoginUser user;
    char userName[20];
    char userPWD[20];
    FILE *fp;
    printf("/n/t/t/t/t账号:");
    //gets(userName);
    scanf("%s",userName);
     printf("/n/t/t/t/t密码:");
     //gets(userPWD);
    //scanf("%s",userPWD);
    password(userPWD,18);//密码输入函数,“*” 显示,限制18位
    if ((fp=fopen("login.txt","r"))==NULL)
    {
        return 0;
    }
    else
    {
        rewind(fp);
        while (!feof(fp))
        {
            fread(&user,sizeof(LoginUser),1,fp);
            if (strcmp(user.userName,userName)==0)
            {
                if (user.userRole==0)
                {
                    printf("/n该用户暂未经过审核/n请等待超级管理员审核……/n");
                    getch();
                    MainMenu();
                    return 0;
                }
                if (strcmp(user.userPWD,userPWD)==0)
                {
                    strcpy(inUser.userName,user.userName);
                    strcpy(inUser.userPWD,user.userPWD);
                    inUser.userRole=user.userRole;
                    Welcome();
                    break;
                }
                else
                {
                    printf("/n/n/t/t/t密码错误,登陆失败!按任意键返回!/n");
                    getch();
                    MainMenu();
                }
            }   
        }
        if (inUser.userName==NULL)
        {
            printf("/n/n/t/t/t该用户不存在,登陆失败!按任意键返回!");
            fclose(fp);
            getch();
        }   
        MainMenu();   
    }
}

int Logon()//用户注册函数,按ESC键退出,失败返回0,成功返回1,ESC退出返回2
{
    FILE *fp;
    char userName[20];
    char userPWD[20];
    LoginUser user;
    LoginUser user1;
    int usersCount=0;
    do
    {
        int isNameVil=1;//用户名是否通过,1--通过,0--未通过   
        do
        {
            printf("输入账号:");
            //gets(userName);
            //scanf("%s",userName);
            StringLength(userName,15,200,0);
            if (strlen(userName)==0)
            {
                printf("用户名不能为空/n/n按任意键重新输入/n按ESC返回/n");
                switch(_getch())
                {
                case 0x1b:
                    //fclose(fp);
                    return 2;
                default:
                    //fclose(fp);
                    break;
                }
            }
        } while(strlen(userName)==0);
        if ((fp=fopen("login.txt","r"))==NULL)
        {
            printf("Can not open file!");
        }
        else
        {
            while (!feof(fp))
            {
                usersCount+=fread(&user,sizeof(LoginUser),1,fp);
                if (strcmp(user.userName,userName)==0)
                {
                    isNameVil=0;//用户名已存在,未通过
                }
            }
            fclose(fp);
            if (isNameVil)
            {
                if ((fp=fopen("login.txt","a"))==NULL)
                {
                    printf("Can not open file!");
                }
                else
                {
                    do
                    {
                        strcpy(user1.userName,userName);
                        printf("/n输入密码(18位以内):");
                        //gets(user1.userPWD);
                        //scanf("%s",user1.userPWD);
                        password(user1.userPWD,18);//密码输入函数,“*” 显示,限制18位
                        printf("/n确认密码:");
                        //gets(userPWD);
                        //scanf("%s",userPWD);
                        password(userPWD,18);//密码输入函数,“*” 显示,限制18位
                        if (strcmp(user1.userPWD,userPWD)!=0)
                        {
                            printf("/n两次输入不一致/n");
                        }
                    } while(strcmp(user1.userPWD,userPWD)!=0);
                    if (usersCount==0)
                    {
                        user1.userRole=2;
                    }
                    else
                    {
                        user1.userRole=0;
                    }
                    fseek(fp,0,SEEK_END);
                    fwrite(&user1,sizeof(LoginUser),1,fp);
                    printf("/n成功!");
                    fclose(fp);
                    _getch();
                    MainMenu();
                    //return 1;
                }
            }
            else
            {
                printf("/n该用户名已存在/n按任意键重新输入/n按ESC返回/n");
                switch(_getch())
                {
                case 0x1b:
                    fclose(fp);
                    return 2;
                default:
                    break;
                }
            }
        }
    } while(1);   
}

int StringLength(char *str,int max,int THEMAX,const int a)//限制输入字符长度,str为用于存储字符串的指针,max为自定义限制长度,THEMAX为自定义容错范围,a为选择超长是否截取(0:不截取即重新输入;1:截取即只取max长度)
{
    char *p;
    memset(str,0,max);
    p=(char *)malloc(sizeof(char)*THEMAX);
    while (1)
    {
        fflush(stdin);
        gets(p);
        if (a==0)
        {
            if (strlen(p)>max)
            {
                printf("输入字符过长,重新输入/n");
                continue;
            }
            else
            {
                strcpy(str,p);
                break;
            }
        }
        else
        {
            strncpy(str,p,max);
            str[max]='/0';
            break;
        }
    }
    free(p);
    return 0;
}

void ExitSys()//退出系统,<Y/N>
{
    char key;
    printf("谢谢使用……/n");
    printf("是否退出<Y/N>/n");
    while (1)
    {
        scanf("%c",&key);
        switch(key)
        {
        case 'y':
        case 'Y':
            exit(0);
            break;
        case 'n':
        case 'N':
            return;
            break;
        }
    }
}
void Welcome()//登陆成功后,选择:进入系统、修改密码
{
    int a=1;
    while (1)
    {       
        int num,i;
        char pointto[5];
        system("cls");
        for(i=0;i<4;i++)
        {
            pointto[i]='/0';
        }
        pointto[a-1]='<';
        printf("/t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n");
        printf("/t ★●             欢迎使用            ●★/n");
        printf("/t    ★●                             ●★/n");
        printf("/t        ★★★★★★★★   XWL    ★★★★★★★★★/n");
        printf("/n");
        printf("/t/t      ┏─────────┓        /n");
        printf("/t/t      │     主界面       │        /n");
        printf("/t/t┏───┴─────────┴───┓/n/n/n");
        printf("/t/t       1◆进入系统         %c   /n/n",pointto[0]);
        printf("/t/t        2◆修改密码        %c   /n/n",pointto[1]);
        if (inUser.userRole==2)
        {
            printf("/t/t       3◆用户管理     %c   /n/n",pointto[2]);
            printf("/t/t        4◆返    回         %c   /n/n/n",pointto[3]);
        }
        else
        {
            printf("/t/t        3◆返    回         %c   /n/n/n",pointto[2]);
        }
        printf("/t/t┗─────────────────┛/n");
        num=getch()-48;
        if(num==-35)
        {
            switch(a)
            {
            case 1:
                mainpage(1);
                return;
                break;
            case 2:
                ModifyPWD();
                break;
            case 3:
            case 4:
                if (inUser.userRole==2)
                {
                    if (a==3)
                    {
                        userManage();
                    }
                    else if (a==4)
                    {
                        return;
                    }
                }
                else
                {
                    if (a==3)
                    {
                        return;
                    }
                }
                break;
            }
        }
        else
        {
            if (num>0&&num<5)
            {
                a=num;
            }
        }
    }
}


void ModifyPWD()//用户登陆后修改密码
{
    FILE *fp;
    LoginUser user;
    LoginUser user1;
    fpos_t oldpos;
    char userPWD1[20];
    char userPWD2[20];
    printf("/n/t/t/t/t用户名:%s/n",inUser.userName);
    printf("/n/t/t/t/t原始密码:");
    //gets(userPWD1);
    //scanf("%s",userPWD1);
    password(userPWD1,18);
    if (strcmp(userPWD1,inUser.userPWD)!=0)
    {
        printf("/n/t/

  • 16
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值