欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

职工信息管理系统

程序员文章站 2022-05-06 20:36:00
...

/***********************************************************

* 版权所有(C)2017. zangyunpeng
*
* 文件名称:职工信息管理系统
* 文件标识:无
* 内容摘要:该代码用于函数声明及结构体构建
* 其它说明:无
* 当前版本: V1.0
* 作 者:臧云鹏
* 完成日期: 2017 12 22
*
*修改记录1:
*修改日期: 2017 12 22
*版本号 V1.0
*修改人: zangyunpeng
*
**********************************************************/

课程设计要求:

6
使
1
2
(
)
3
退
4
6
使
1
2
(
)
3
退
4
6
使
1
2
(
)
3
退
4
职工信息管理系统职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。设计一个职工信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作(2)职工信息录入功能(职工信息用文件保存)--输入(3)职工信息浏览功能--输出,包括在退出系统时,将数据保存到文件(4)查询和排序功能:按工资查询按学历查询等
6
使
1
2
(
)
3
退
4

实现源代码如下:

1.source.cpp

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"head.h"


/***************************************************************************************
*功能描述:菜单函数
*输入参数:无
*输出参数:无
*返回值:1

***************************************************************************************/
void menu()
{

                   system("color 6E");
        printf("\t◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
        printf("\t◆        欢迎使用职工信息管理系统      ◆\n");
        printf("\t◆                                      ◆\n");
        printf("\t◆              【菜单】                ◆\n");
        printf("\t◆          1.录入职工信息              ◆\n");
        printf("\t◆          2.查询职工信息              ◆\n");
        printf("\t◆          3.职工信息排序              ◆\n");
        printf("\t◆          4.插入职工信息              ◆\n");
        printf("\t◆          5.浏览职工信息              ◆\n");
        printf("\t◆          6.修改职工信息              ◆\n");
        printf("\t◆          7.删除职工信息              ◆\n");
        printf("\t◆          8.保存职工信息              ◆\n");
        printf("\t◆          【9】退出系统               ◆\n");
        printf("\t◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
}
/***************************************************************************************
*功能描述:初始化单链表
*输入参数:无
*输出参数:无
*返回值:1

***************************************************************************************/
int Initlist(Linklist *L) //初始化单链表
{
    *L=(Linklist )malloc(sizeof(LNode));
    if((*L)==NULL)
        return (0);
    (*L)->next=NULL;
    return OK;
}


/***************************************************************************************
*功能描述:头插法生成单链表
*输入参数:职工各项信息工号、姓名、性别、年龄、学历、工资、住址 
*输出参数:无
*返回值:1或0

***************************************************************************************/
int CreatList(Linklist L)//头插法生成单链表
{
    LNode *p,*r,*s;
	char id[30];

    int k=0;
	r=L;
	s=L->next;//链表没有节点时,s=null;/链表有节点时,指向第一个职工节点
	while(r->next!=NULL)//如果存在后继结点时,r指针后移一个
	{
		r=r->next;
	}
	while(L)
	{
        printf("\t职工号:");
        scanf("%s",id);
		s=L->next;//每次从第一个节点开始找,看id是否重复
		while(s)
		{
			if(strcmp(s->data.id,id)==0)
			{
				printf("\t提示:职工号为'%s'的职工已经存在!\n",id);
                k=1;
				return OK;
			}
			s=s->next;
		}
        p=(Linklist)malloc(sizeof(LNode));
		memset(p,0,sizeof(LNode));//清空内存
        strcpy(p->data.id,id);
        printf("\t姓名:");
        scanf("%s",p->data.name);
        printf("\t性别:");
        scanf("%s",p->data.sex);
        printf("\t年龄:");
        scanf("%d",&p->data.age);
        printf("\t学历:");
        scanf("%s",p->data.edu);
        printf("\t工资:");
        scanf("%lf",&p->data.salary);
        printf("\t电话:");
        scanf("%s",p->data.phone);
        printf("\t地址:");
        scanf("%s",p->data.address);

       break;
	}
        p->next=NULL;//表明这是链表的尾部结点
		r->next=p;//将新建的结点加入链表尾部中
        r=p;

	return OK;
}


/***************************************************************************************
*功能描述:显示职工信息
*输入参数:p指针
*输出参数:职工各项信息
*返回值:无

***************************************************************************************/
void Display(Linklist L)//显示职工信息
{
    LNode *p;
	p=L->next;
    if(p==NULL)
    {
        printf("\t现在没有职工信息,请先输入职工信息\n\n");
        return;
    }
    printf("\t职工号\t姓名\t\t性别\t年龄\t学历\t工资\t电话\t地址\n\n");
    while(p)
    {
        printf("\t%s\t",p->data.id);
        printf("%s\t\t",p->data.name);
        printf("%s\t",p->data.sex);
        printf("%d\t",p->data.age);
        printf("%s\t",p->data.edu);
        printf("%0.2lf\t",p->data.salary);
        printf("%s\t",p->data.phone);
        printf("%s\t",p->data.address);
		printf("\n");
        p=p->next;
    }

}
/***************************************************************************************
*功能描述:职工信息查询
*输入参数:a k
*输出参数:查找到的职工信息
*返回值:1

***************************************************************************************/
void Search(Linklist L)//职工信息查询
 {
      int a,k=0;
      char name[10];
      char id[20];
	  char phone[30];
      printf("\t请输入查询方式(1按职工号查询,2按姓名查找):");
      scanf("%d",&a);
      if(a==1)
      {
		  k=1;
          printf("\t请输入查询职工号:");
          scanf("%s",&id);
          SearchID(L,id);//ID查询
	  }
      if(a==2)
      {
		  k=1;
          printf("\t请输入查询职工姓名:");
          scanf("%s",&name);
          SearchName(L,name);//姓名查询
	  }

	  if(k==0)
	  {
		  printf("\t请输入正确的序号!\n");
	  }

 }

/***************************************************************************************
*功能描述:职工号查询
*输入参数:职工工号 p指针 L
*输出参数:该职工各项信息
*返回值:1

***************************************************************************************/
int SearchID(Linklist L,char id[20])//职工号查询
{
    LNode *p;  p=L;
	int k=0;
    while(p)
    {
        if(strcmp(p->data.id,id)==0)
        {
            printf("\t职工号        %s\n",p->data.id);
            printf("\t姓名        %s\n",p->data.name);
            printf("\t性别        %s\n",p->data.sex);
            printf("\t年龄        %d\n",p->data.age);
            printf("\t学历        %s\n",p->data.edu);
            printf("\t工资        %0.2lf\n",p->data.salary);
            printf("\t电话        %s\n",p->data.phone);
            printf("\t地址        %s\n",p->data.address);
			k=1;
        }
        p=p->next;
    }
	if(k==0)
	{
		printf("\t对不起,没有您想要查找的人!\n");
	}
    return OK;
}


/***************************************************************************************
*功能描述:姓名查询
*输入参数:职工姓名 p指针
*输出参数:该职工各项信息
*返回值:1

***************************************************************************************/
int SearchName(Linklist L,char name[10])//姓名查询
{
    LNode *p;  p=L;
	int k=0;
    while(p)
    {
        if(strcmp(p->data.name,name)==0)
        {
            printf("\t职工号         %s\n",p->data.id);
            printf("\t姓名         %s\n",p->data.name);
            printf("\t性别         %s\n",p->data.sex);
            printf("\t年龄         %d\n",p->data.age);
            printf("\t学历         %s\n",p->data.edu);
            printf("\t工资         %0.2lf\n",p->data.salary);
            printf("\t电话         %s\n",p->data.phone);
            printf("\t地址         %s\n",p->data.address);
			k=1;
        }
        p=p->next;
    }
	if(k==0)
	{
		printf("\t对不起,没有您想要查找的人!\n");
	}
    return OK;
}

/***************************************************************************************
*功能描述:职工信息排序
*输入参数:b k 
*输出参数:ID排序 ;姓名排序; 工资排序后的职工信息
*返回值:无

***************************************************************************************/
void Sort(Linklist L)//职工信息排序
{
   int b,k=0;
   printf("\t请输入排序方式(1按职工号排序,2按姓名排序,3按工资排序):");
   scanf("%d",&b);
   if(b==1)
   {
	    k=1;
        printf("\t按职工号排序为:\n");
        SortID(L);//职工号排序
        Display(L);

    }
    if(b==2)
    {
	     k=1;
         printf("\t按姓名排序为:\n");
         SortName(L);//姓名排序
         Display(L);//显示职工信息

    }
	if(b==3)
    {
		k=1;
		printf("\t按工资排序为:\n");
		SortSalary(L);//工资排序
		Display(L);//显示职工信息

    }
	if(k==0)
	{
		printf("\t请输入正确的序号!\n");
	}
}
/***************************************************************************************
*功能描述:职工号排序
*输入参数:p指针 q指针
*输出参数:按照职工号排序后各职工各项信息
*返回值:无

***************************************************************************************/
void SortID(Linklist L)//职工号排序
{
    Linklist p,q;
    struct employee temp;
    for(p=L->next;p!=NULL;p=p->next)
     {
        for(q=p->next;q!=NULL;q=q->next)
        {
            if((strcmp(p->data.id,q->data.id)>0))
            {
                temp=q->data;
                q->data=p->data;
                p->data=temp;
            }
        }
    }
}


/***************************************************************************************
*功能描述:姓名排序
*输入参数:p,q指针
*输出参数:按照姓名排序后各职工各项信息
*返回值:无
*其他说明:
***************************************************************************************/
void SortName(Linklist L)//姓名排序
{
    Linklist p,q;
    struct employee temp;
    for(p=L->next;p!=NULL;p=p->next)
    {
        for(q=p->next;q!=NULL;q=q->next)
        {
            if((strcmp(p->data.name,q->data.name)>0))
            {
                temp=q->data;
                q->data=p->data;
                p->data=temp;
            }
        }
    }

}
/***************************************************************************************
*功能描述:职工工资排序
*输入参数:p,q指针
*输出参数:按照职工工资排序后各职工各项信息
*返回值:无

***************************************************************************************/
void SortSalary(Linklist L)//职工工资排序
{
    Linklist p,q;
    struct employee temp;
    for(p=L->next;p!=NULL;p=p->next)
	{
        for(q=p->next;q!=NULL;q=q->next)
        {
            if(p->data.salary>q->data.salary)
            {
                temp=q->data;
                q->data=p->data;
                p->data=temp;
            }
        }
    }
}

/***************************************************************************************
*功能描述:插入信息
*输入参数:pre s 指针  
*输出参数:职工信息
*返回值:1
*其他说明:
***************************************************************************************/
int Ins(Linklist L, char id[20])//插入信息
{
    LNode *pre,*s;
	int k=0;
    pre=L;
    while(pre->next!=NULL)
    {
        pre=pre->next;
        if((strcmp( pre->data.id,id))==0)
        {
			k=1;
			printf("\t对不起,要查找职工号已存在!\n");

        }

    }
	if(k==0)
	{
		s=(LNode*)malloc(sizeof(LNode));
		printf("\t请输入要插入员工信息\n");
		printf("\t职工号:");
		scanf("%s",&s->data.id);
		printf("\t姓名:");
		scanf("%s",&s->data.name);
		printf("\t性别:");
		scanf("%s",&s->data.sex);
		printf("\t年龄:");
		scanf("%d",&s->data.age);
		printf("\t学历:");
		scanf("%s",&s->data.edu);
		printf("\t工资:");
		scanf("%0.2lf",&s->data.salary);
		printf("\t电话:");
		scanf("%s",&s->data.phone);
		printf("\t地址:");
		scanf("%s",&s->data.address);
		s->next=pre->next;
		pre->next=s;
		printf("\t插入员工信息成功!\n");

		}
    return OK;
}


/***************************************************************************************
*功能描述:更改信息
*输入参数: c k  p指针 
*输出参数:修改后的职工信息
*返回值:1
*其他说明:
***************************************************************************************/
int Alter(Linklist L,char id[20])//更改信息
{
    int c;
	int k=0;
    LNode *p;
    p=L;
    while(p)
    {
        if(strcmp(p->data.id,id)==0)
        {
			k=1;
			printf("\t原来的职工信息:\n");
			printf("\t职工号         %s\n",p->data.id);
            printf("\t姓名         %s\n",p->data.name);
            printf("\t性别         %s\n",p->data.sex);
            printf("\t年龄         %d\n",p->data.age);
            printf("\t学历         %s\n",p->data.edu);
            printf("\t工资         %0.2lf\n",p->data.salary);
            printf("\t电话         %s\n",p->data.phone);
            printf("\t地址         %s\n",p->data.address);
            printf("\t请输入要修改的选项(1职工号,2姓名,3性别,4年龄\n");
            printf(" \t                  5学历,6工资,7电话,8地址):");
            scanf("%d",&c);
            switch(c)
            {
            case 1:
                {
                    printf("\t请输入修改员工编号:",p->data.id);
                    scanf("%s",p->data.id);
                    printf("\t修改员工信息成功!\n");

                    break;
                }
            case 2:
                {
                    printf("\t请输入员工修改姓名:",p->data.name);
                    scanf("%s",p->data.name);
                     printf("\t修改员工信息成功!\n");

                    break;
                }
            case 3:
                {
                    printf("\t请输入员工修改性别:",p->data.sex);
                    scanf("%s",p->data.sex);
                    printf("\t修改员工信息成功!\n");

                    break;
                }
            case 4:
                {
                    printf("\t请输入员工修改年龄:",p->data.age);
                    scanf("%d",&p->data.age);
                    printf("\t修改员工信息成功!\n");

					break;
                }
            case 5:
                {
                    printf("\t请输入员工修改学历:",p->data.edu);
                    scanf("%s",p->data.edu);
                    printf("\t修改员工信息成功!\n");

                    break;
                }
            case 6:
                {
                    printf("\t请输入员工修改工资:",p->data.salary);
                    scanf("%lf",&p->data.salary);
                    printf("\t修改员工信息成功!\n");

                    break;
                }
            case 7:
                {
                    printf("\t请输入员工修改电话:",p->data.phone);
                    scanf("%s",p->data.phone);
                    printf("\t修改员工信息成功!\n");

                    break;
                }
            case 8:
                {
                    printf("\t请输入员工修改地址:",p->data.address);
                    scanf("%s",p->data.address);
                    printf("\t修改员工信息成功!\n");

                    break;
                }
			default:
				printf("\t请输入正确序号!\n");
                break;
            }
        }
        p=p->next;
    }
	if(k==0)
	{
		printf("\t该职工号不存在!\n");
	}
    return OK;
 }


/***************************************************************************************
*功能描述:按职工号删除
*输入参数:p r 指针
*输出参数:无
*返回值:1
*其他说明:
***************************************************************************************/
int Del(Linklist L,char id[20])//按ID删除
{
    LNode *p;  LNode *r;
    p=L->next;  r=L;  while(!(strcmp(p->data.id,id)==0)&&p)
    {
        r=p;
        p=p->next;
    }
    if(!p)
        printf("\n删除位置不合理\n");
    else
    {
        r->next=p->next;
        free(p);
        printf("删除成功!\n");
    }
    return 1;
}


/***************************************************************************************
*功能描述:将操作完成后的信息存储到文件
*输入参数:无
*输出参数:无
*返回值:无

***************************************************************************************/
void Save(Linklist L)
{
            FILE *fpb2;              //文件指针
            LNode *p2;
            fpb2=fopen("worker.txt","wb");  //把职工信息写入到文件中
            for(p2=L->next; p2!=NULL; p2=p2->next)
            fwrite(p2,sizeof(LNode),1,fpb2);
            fclose(fpb2);

}
/***************************************************************************************
*功能描述:把文件中的职工信息读出来
*输入参数:无
*输出参数:无
*返回值:无

***************************************************************************************/
void Read(Linklist L)
{
    FILE *fpb1;              //文件指针
    LNode *p1,*s1;
    fpb1=fopen("worker.txt","rb");               //读方式打开职工文件
    if(fpb1!=NULL)
    {
        p1=(Linklist)malloc(sizeof(LNode));
        if(!p1)
			exit(1);
        p1->next=NULL;
        while(fread(p1,sizeof(LNode),1,fpb1)==1)
        {
            if(L->next==NULL)
            {
                L->next=p1;
                s1=p1;
            }
            else
            {
                s1->next=p1;
                s1=p1;
            }
            p1=(Linklist)malloc(sizeof(LNode));
            if(!p1)
				exit(1);
            p1->next=NULL;
        }
    }
}


2.main.cpp

#include<stdio.h>
#include<stdlib.h>
#include<string.H>
#include"D://head.h"


#define OK 1
#define ERROR 0


/***************************************************************************************
*功能描述:测试函数
*输入参数:你的选择
*输出参数:无
*返回值:0
*其他说明:完成各个函数测试,消息字段之间用分号(;)隔离
***************************************************************************************/
int main()//主函数
{
    Linklist L;
    int x=1;
    int y;
    char m;
	char id[20];
    Initlist(&L);//初始化单链表
    Read(L);
    while(x)
    {
        menu();

        printf("\t请选择操作序号并按回车:");
        scanf("%d",&y);
        switch(y)
        {
        case 1:
            {
                system ("cls");//清空主界面

                printf("\t*********************欢迎进入录入模块********************\n");
                CreatList(L);//头插法生成单链表
                do
                {
                    printf("\t是否继续输入?(y/n):");
                    getchar();
                    scanf("%c",&m);
                    if(m=='y')
                    {
                        CreatList(L);//显示职工信息
                    }
                }
                while(m!='n');
                printf("\t*******************欢迎下次进入录入模块******************\n");
                break;

            }
        case 2:
			{
		    	system ("cls");//清空主界面
                printf("\t*********************欢迎进入查询模块********************\n");
				Search(L);//职工信息查询
		    	do
				{
		    		printf("\t是否继续查询?(y/n):");
			    	getchar();
		    		scanf("%c",&m);
		    		if(m=='y')
					{
		    			Search(L);//职工信息查询
					}
				}
			     while(m!='n');
		    	 printf("\t*******************欢迎下次进入查找模块******************\n");
                 break;

			}

        case 3:
			{
			    system ("cls");//清空主界面
                printf("\t*******************欢迎进入排序模块**********************\n");
                Sort(L);
                do
				{
				     printf("\t是否继续查询?(y/n):");
				     getchar();
					 scanf("%c",&m);
					if(m=='y')
					 {
					      Sort(L);

					 }
				}
				while(m!='n');
			    printf("\t*******************欢迎下次进入排序模块******************\n");
                break;

			}

        case 4:
			system ("cls");//清空主界面
            printf("\t*********************欢迎进入插入模块********************\n");
			printf("\t请输入要插入查找的职工号:");
            getchar();
            scanf("%s",&id);
            Ins(L,id);//插入信息
			do
			{
				printf("\t是否继续插入?(y/n):");
				getchar();
				scanf("%c",&m);
			    if(m=='y')
				{
					printf("\t请输入要插入查找的职工号:");
					getchar();
                    scanf("%s",&id);
					Ins(L,id);//插入信息
				}
			}
			while(m!='n');
            printf("\t*******************欢迎下次进入插入模块******************\n");
            break;
        case 5:
            system ("cls");//清空主界面
            printf("\t*********************欢迎进入显示模块********************\n");
            printf("\t所有职工信息如下所示\n");
            Display(L);//显示职工信息
            printf("\t*******************欢迎下次进入显示模块******************\n");
            break;
        case 6:
            system ("cls");//清空主界面
            printf("\t*********************欢迎进入修改模块********************\n");
            printf("\t请输入要修改员工职工号:");
            getchar();
            scanf("%s",&id);
            Alter(L,id);//更改信息
			do
			{
				printf("\t是否继续修改?(y/n):");
				getchar();
				scanf("%c",&m);
			    if(m=='y')
				{
					printf("\t请输入要修改员工职工号:");
					getchar();
                    scanf("%s",&id);
					Alter(L,id);//更改信息
				}
			}
			while(m!='n');
            printf("\t******************欢迎下次进入修改模块*******************\n");
            break;
        case 7:
			system ("cls");//清空主界面
            printf("\t*********************欢迎进入删除模块********************\n");
            printf("\t请输入删除员工职工号:");
            getchar();
            scanf("%s",&id);
            Del(L,id);//按职工号删除
			do
			{
				printf("\t是否继续删除?(y/n):");
				getchar();
				scanf("%c",&m);
				if(m=='y')
				{
					printf("\t请输入要删除员工职工号:");
					getchar();
                    scanf("%s",&id);
					Del(L,id);//按职工号删除
				}
			}
			while(m!='n');
            printf("\t******************欢迎下次进入删除模块*******************\n");
            break;
		case 8:
			system("cls");
			printf("\t*********************欢迎进入保存模块********************\n");
			Save(L);//保存数据
			printf("\t职工信息保存成功!\n");
            printf("\t******************欢迎下次进入保存模块*******************\n");
            break;
        case 9:
            system ("cls");//清空主界面
			x=0;
            printf("\t****************感谢您使用本系统,再见!*****************\n");
            exit(0);
        default:
            printf("\t请输入正确序号!\n");
            break;
        }
    }

    return 0;
}
3。head


#define OK 1
#define ERROR 0
struct employee
{
    char id[20];//职工号
    char name[20];//姓名
    char sex[20];//性别
    int age;//年龄
    char edu[20];//学历
    double salary;//工资
    char phone[30];//电话
    char address[30];//地址

};

//存储结构
typedef struct LNode
{
    struct employee data;
    struct LNode* next;

}LNode, *Linklist;
void menu();//菜单函数
int Initlist(Linklist *L);//初始化单链表
int CreatList(Linklist L);//头插法生成单链表
void Display(Linklist L);//显示职工信息
void Search(Linklist L);//职工信息查询
int SearchID(Linklist L,char id[20]);//职工号查询
int SearchName(Linklist L,char name[10]);//姓名查询
void Sort(Linklist L);//职工信息排序
void SortID(Linklist L);//职工号排序
void SortName(Linklist L);//姓名排序
void SortSalary(Linklist L);//工资排序
int Ins(Linklist L, char id[20]);//插入信息
int Alter(Linklist L,char id[20]);//更改信息
int Del(Linklist L,char id[20]);//按职工号删除
void Save(Linklist L);//保存到文件
void Read(Linklist L);//读取信息



运行结果截图:

职工信息管理系统


职工信息管理系统

职工信息管理系统

职工信息管理系统

职工信息管理系统

职工信息管理系统

职工信息管理系统

职工信息管理系统

职工信息管理系统


职工信息管理系统