用c语言写一个职工工资管理程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用c语言写一个职工工资管理程序相关的知识,希望对你有一定的参考价值。

用c语言写一个职工工资管理程序将10名职工的数据(职工号、职工名、性别、年龄、工资)从键盘输入,然后送到磁
盘文件worker1.dat中保存起来。
从磁盘文件中读出这些数据,依次打印出来。
对职工数据按工资高低排序,将排好序的各记录存放在文件worker2.dat中。
将职工号为单数和偶数的职工信息分别存放另两个磁盘文件worker3.dat和worker4.dat中,并从这两个文件中读出职工信息在显示器上显示出来。

思路:

使用结构体保存职工信息,设计单独的函数,实现录入,按职工工资排序,分解单双数职工,读取和写入文件,显示数据等功能。

1 - 从键盘录入信息到数组结构并保存至文件,录入+写入文件。

2 - 从磁盘文件中读出这些数据,依次打印出来, 读取文件+显示数据。

3 - 对职工数据按工资高低排序,将排好序的各记录存放在文件worker2.dat中, 排序+写入文件。

4 - 将职工号为单数和偶数的职工信息分别存放另两个磁盘文件worker3.dat和worker4.dat中, 分解单双数职工+写入文件。

5 - 并从这两个文件中读出职工信息在显示器上显示出来, 读取文件+显示数据。


代码片段如下:

int main(int argc, char* argv[])

    worker arr[WORKER_NUMBER];
    int cnt = WORKER_NUMBER;
    worker odd[WORKER_NUMBER];
    int oddnum = 0;
    worker even[WORKER_NUMBER];
    int evennum = 0;

    clear_worker_array(arr, cnt);
    clear_worker_array(odd, cnt);
    clear_worker_array(even, cnt);

    //1.录入并保存至worker1.dat
    entering_data(arr, cnt);
    if( save_file(arr, cnt, filename[0]) == 0 )
    
        printf("原始记录已成功保存至文件 - %s\\n", filename[0]);
    

    //2.读取worker1.dat并显示
    clear_worker_array(arr, cnt);
    if( load_file(arr, &cnt, filename[0]) == 0 )
    
        printf("载入文件 - %s\\n", filename[0]);
    
    show_data(arr, cnt);

    //3.排序并保存至worker2.dat
    sort_by_salary(arr, cnt);
    if( save_file(arr, cnt, filename[1]) ==0 )
    
        printf("按工资排序后的记录已成功保存至文件 - %s\\n", filename[1]);
    

    //4.保存单数和双数职工号信息至worker3.dat和worker4.dat
    filter_workers(arr, cnt, odd, &oddnum, even, &evennum);
    if( save_file(odd, oddnum, filename[2]) == 0 )
    
        printf("职工号为单数的记录已成功保存至文件 - %s\\n", filename[2]);
    
    if( save_file(even, evennum, filename[3]) == 0 )
    
        printf("职工号为双数的记录已成功保存至文件 - %s\\n", filename[3]);
    

    //5.读取worker3.dat和worker4.dat并显示
    clear_worker_array(odd, oddnum);
    oddnum = 0;
    if( load_file(odd, &oddnum, filename[2]) == 0 )
    
        printf("载入文件 - %s\\n", filename[2]);
    
    show_data(odd, oddnum);

    clear_worker_array(even, oddnum);
    evennum = 0;
    if( load_file(even, &evennum, filename[3]) == 0 )
    
        printf("载入文件 - %s\\n", filename[3]);
    
    show_data(even, evennum);

    return 0;

为了测试方便,此处的宏只指定了5个职工的信息,若要达到你要求的,直接改成10即可。运行结果如下:

完整代码请参考附件 - worker_manager.c

:by never715

参考技术A 可以使用一个结构体数组来做
结构体中存储各个职工的信息
然后对该结构体数组进行操作
保存到文件即将结构体数组保存到文件
显示时从文件读取数据到数组中
然后再遍历数组输出即可

如果代码不想自己写的话
我可以有偿代劳
参考技术B c语音。

C语言职工信息管理系统

*/
 * Copyright (c) 2016,烟台大学计算机与控制工程学院
 * All rights reserved.
 * 文件名:text.cpp
 * 作者:常轩
 * 微信公众号:Worldhello
 * 完成日期:2016年6月30日
 * 版本号:V1.0
 * 问题描述:模块化设计,分别有录入信息,删除信息,浏览信息,查询信息,修改信息,采用链表存储数据,用文件保存职工信息等
 * 程序输入:无
 * 程序输出:见运行结果
 */


在此博文中的程序可能会有一些BUG,如想获取此程序的工程压缩包,请关注微信公众号:Worldhello,在后台回复:职工信息管理系统,即可获得压缩包与完整的程序设计报告。另外回复:银行储蓄,可获得通过使用XML文件存取用户信息的C++程序。后台获得的程序BUG相对来说会比较少,因为一直在优化。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "malloc.h"
struct WORK{
	int     Number;                           //工号
	char    Name[32];                         //姓名
    char    Sex[2];                           //性别
	int     Old;                              //年龄
	char    Edu[20];                          //学历
	float  Salary;                            //工资
	char    Address[64];                      //住址
	long     Tel;                              //电话
	struct  WORK *next;
};
WORK* worker=NULL;                           
void Help();                                   //帮助
void saveWorToFile();                          //保存职工信息到文件
void addworker(WORK *wor);                     //添加职工信息(链表操作)
void delWork(char* name);                      //删除职工信息(链表操作) 
void delworker();                              //删除职工信息
void add();                                    //录入职工信息
void lookthrough();                            //浏览职工信息
void query();                                  //查询职工信息
void Reviseworker();                           //修改职工信息
int menu_select();                             //菜单界面
void readWorkerput ();                         //从文件中读取职工信息
int main()
{   
    readWorkerput ();
	char choose;
    for(;;)
	{
       choose=menu_select();
	   if(choose==1)
		    add();
	   else if(choose==2)
              lookthrough();
	   else if(choose==3)
              query();
	   else if(choose==4)
               delworker();
	   else if(choose==5)
		       Reviseworker()  ;                            
       else if(choose==6)
		       Help();
	   else
	      break;
	}
	return 0;
}
int menu_select()                             //菜单函数定义
{
   char c;
   printf("===============================================================\n");
   printf("|----------------------职工信息管理系统 v1.0------------------|\n");
   printf("|                                                             |\n");
   printf("|                         1.录入信息                          |\n");
   printf("|                         2.浏览信息                          |\n");
   printf("|                         3.查询信息                          |\n");
   printf("|                         4.删除信息                          |\n");
   printf("|                         5.修改信息                          |\n");
   printf("|                         6.使用帮助                          |\n");
   printf("|                         7.退出系统                          |\n");
   printf("***************************************************************\n");
   printf("                    请输入(1-7)进行操作:\n");
   do{
	    scanf("%c",&c);
   }while(c<'1'||c>'7');
   return c-48;

}
/****************************************************************************************************************************/
void add()                                    //1、录入职工信息函数定义
{
	WORK *p;
	p=worker;
	int     tmp=1;
	int     number;
	char    name[32];
    char    sex[2];
	int     old;
	char    edu[20];
	float  salary;
	char    address[64];
	long     tel;
    printf("输入工号:");
	scanf("%d",&number);
    while(p!=NULL)
	{
		if(p->Number ==number)
		{
			printf("该工号已存在!\n");
			tmp =2;
		}
        p=p->next;
	}	
	if(tmp==2)
		return ;
	printf("输入姓名:");  //姓名
	scanf("%s",name);
    printf("输入性别:");  //性别
	scanf("%s",sex);
	printf("输入年龄:");  //年龄
	scanf("%d",&old);
	printf("输入学历:");  //学历
	scanf("%s",edu);
	printf("输入工资:");  //工资
	scanf("%f",&salary);
	printf("输入地址:");  //地址
    scanf("%s",address);
	printf("输入电话:");  //电话
	scanf("%ld",&tel);
	WORK *n=(WORK *)malloc(sizeof(WORK));
    n->Number=number;
    strcpy(n->Name,name);
	strcpy(n->Sex,sex);
	n->Old=old;
	strcpy(n->Edu,edu);
	n->Salary=salary;
	strcpy(n->Address,address);
	n->Tel=tel;
    addworker(n);
	saveWorToFile();
	printf("录入成功!\n");
}
void addworker(WORK *wor)
{
	WORK *p;
	if(worker==NULL)
	{
		worker =wor;
		wor->next=NULL;
	}
	else
	{
		p = worker;
		while(p)
		{
			if(p->next==NULL)
			{
				p->next =wor;
				wor->next =NULL;
                
			}
			p= p->next;
		}
	}
}
/***************************************************************************************************************************/
void lookthrough()                              //2、浏览信息
{
	WORK * p;
	p=worker;
	if(p!=NULL)
	{   
		printf("工号 姓名 性别 年龄 学历 工资 地址 电话\n");
    	while(p!=NULL)
		{
          printf("%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
          p=p->next;
		}
	}
	else
	   printf("暂无职工信息!\n");
}
	
/***************************************************************************************************************************/
void query()                             //3、查询职工信息
{
	int num;
	int tmp=1;
	WORK * p;
	p=worker;
	int ju;
	int nianling;
	char xueli[20];
	int judge;
	printf("                   精确查找请按--1\n                   批量查找请按--2\n");
	scanf("%d",&judge);
	switch(judge)
	{
	case 1:
		printf("请输入您要查询的工号:\n");
		scanf("%d",&num);
		while(p!=NULL)
		{
			if(p->Number==num)
			{
				tmp =3;
				break;
			}
			 p=p->next;
		}
		if(tmp==3)
		{
			printf("工号 姓名 性别 年龄 学历 工资 地址 电话\n");
			printf("%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
		}
		else
		  printf("工号不存在!\n");
		break;
    case 2:
		
		printf("                   查询同一年龄职工信息请按------1\n                   查询同一学历职工信息请按------2\n");
		scanf("%d",&ju);
		if(ju==1)
		{   
			printf("请输入年龄:\n");
			scanf("%d",&nianling);
			if(p!=NULL)
			{   printf("工号 姓名 性别 年龄 学历 工资 地址 电话\n");
         		while(p!=NULL)
				{
					if(p->Old==nianling)
					{
					  printf("%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
					}
					 p=p->next;
				}
			}
			else
                printf("暂无职工信息!");
		} 
		else if(ju==2)
		{
           printf("请输入学历:");
		   scanf("%s",xueli);
           	if(p!=NULL)
			{
         		while(p!=NULL)
				{
					if(!strcmp(p->Edu,xueli))
					{
					  printf("%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
					}
					 p=p->next;
				}
			}
			else
                printf("暂无职工信息!");
		}
	}
}
/***************************************************************************************************************************/
void delworker()                                //4、删除职工信息
{
	WORK * p;
	p=worker;
	int n;
	int tem=1;
	char panduan[4];
	printf("请输入要删除的工号:\n");
    scanf("%d",&n);
	printf("确定删除%d?(yes/no)\n",n);
    scanf("%s",panduan);
	if(strcmp("no",panduan)==0)
	          return;
	else
	{
	   while(p!=NULL)
	   {
	     if(p->Number==n)
		 {
			tem =2;
			break;
		 }
         p=p->next;
	   }
    }
	if(tem==2)
		delWork(p->Name);
	saveWorToFile();
}
void delWork(char *name)
{
	WORK *p,*pre;
	if (worker==NULL)
	{
		return;
	}
	p =pre=worker;
	while(p)
	{
		if (!strcmp(p->Name,name))
		{
			if(p==worker)
			{
					worker = worker->next;
					free(p);
					printf("删除成功!\n");
					p=NULL;
			}
			else
			{
				pre->next =p->next;
				free(p);
				printf("删除成功!\n");
				p=NULL;

			}
		}
		else
		{
			pre =p;
			p= p->next;
		}
	}
}
/***************************************************************************************************************************/
void Reviseworker()                               //修改职工信息
{
	char    name[32];
    char    sex[2];
	int     old;
	char    edu[20];
	float   salary;
	char    address[64];
	long    tel;
   WORK * p;
   p=worker;
   int num;
   int a=1;
   char xueli[20];
   float money;
   int judge;
   printf("选择精确修改请按1\n选择批量修改请按2\n");
   scanf("%d",&judge);
   switch(judge)
   {
   case 1:
		   printf("请输入被修改职工工号:\n");
		   scanf("%d",&num);
		   if(p==NULL)
		   {
			   printf("暂无职工信息录入!\n");
			   return ;
		   }
		   while(p)
		   {
			   if(p->Number==num)
			   {   
				    printf("此职工原来信息如下:\n");
				    printf("工号 姓名 性别 年龄 学历 工资 地址 电话\n");
				    printf("%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
				 	printf("输入姓名:");  //姓名
					scanf("%s",name);
					printf("输入性别:");  //性别
					scanf("%s",sex);
					printf("输入年龄:");  //年龄
					scanf("%d",&old);
					printf("输入学历:");  //学历
					scanf("%s",edu);
					printf("输入工资:");  //工资
					scanf("%f",&salary);
					printf("输入地址:");  //地址
					scanf("%s",address);
					printf("输入电话:");  //电话
					scanf("%ld",&tel);
   					strcpy(p->Name,name);
					strcpy(p->Sex,sex);
					p->Old=old;
					strcpy(p->Edu,edu);
					p->Salary=salary;
					strcpy(p->Address,address);
					p->Tel=tel;
                    saveWorToFile();                              //保存修改后信息
					printf("修改成功!\n");
					a=0;
					break;
			   }
			   p=p->next;
		   }
		   if(a==1)
		   printf("没有此职工信息!\n");
		   break;
   case 2:
	 printf("根据学历批量修改职工工资\n");
     printf("请输入所要批量修改的职工学历和所加工资:\n");
	 printf("学历:");
	 scanf("%s",xueli);
	 printf("所加工资:");
	 scanf("%f",&money);
     if(p==NULL)
	 {
		 printf("暂无职工信息录入!\n");
		 return ;
	 }
	 while(p)
	 {
	   if(!strcmp(p->Edu,xueli))
	   {
           p->Salary=p->Salary+money;
	   }
	   p=p->next;
	 }
	 printf(" 修改成功!");
    saveWorToFile();
	break;
   }
}
/**************************************************************************************************************************/
void Help()                                        //使用帮助
{ 
	system("cls");
	printf("该系统用来存储职工成员信息!\n\n");
	printf("使用说明:\n查询信息有两种方式,分为精确查找(凭借学号),批量查找(凭借年龄和学历)\n");
	printf("修改信息有两种方式,分为精确修改(个人信息的修改)和批量修改(同一学历的工资修改)\n");
	printf("学历格式:小学、初中、高中、中专、大专、大学\n\n\n\n");
	printf("项目开发:常轩            技术支持:Worldhello        微信公众号:Worldhello\n\n\n\n  ");
	char a[10];
	printf("按任意键,回车后继续........\n");
	scanf("%s",a);
	system("cls");
}
/***************************************************************************************************************************/
void saveWorToFile()                //保存职工信息到文件
{
	FILE *fp;
    WORK*p;
	p = worker;
	if((fp=fopen("worker.txt","w"))==NULL)
	{
		printf("Can not open the file,press any key exit!");
		exit(1);
	}
	//	fprintf(fp,"工号   姓名   性别   年龄   学历    工资   地址    电话\n");
	while(p)
	{
		fprintf(fp,"%d %s %s %d %s %f %s %ld\n",p->Number,p->Name,p->Sex,p->Old,p->Edu,p->Salary,p->Address,p->Tel);
		p=p->next;
    }
	fclose(fp);
}	
/***************************************************************************************************************************/
void readWorkerput ()           //运行前把文件内容读取到电脑内存
{ 
 

	FILE *fp;
    fp=fopen("worker.txt","rb"); //以只读方式打开当前目录下的.txt
    if(fp==NULL)
    {
        printf("无法打开文件\n");
        exit(0);                   //-------- 终止程序 ---------
    }

    int i=0;
  	while(!feof(fp))
	{
		WORK *p=(WORK *)malloc(sizeof(WORK));
        fscanf(fp,"%d %s %s %d %s %f %s %ld",&p->Number,p->Name,&p->Sex,&p->Old,p->Edu,&p->Salary,p->Address,&p->Tel);
		i++;
	}
	fclose(fp); 
	FILE *FP;
    FP=fopen("worker.txt","rb"); //以只读方式打开当前目录下的.txt
    if(FP==NULL)
    {
        printf("无法打开文件\n");
        exit(0);                   //-------- 终止程序 ---------
    }
    int b=i-1;
	int j=1;
	if(i==1)
	{
	fclose(FP);
	}
	else
	{
		while(!feof(FP))
		{
        WORK *n=(WORK *)malloc(sizeof(WORK));
        fscanf(FP,"%d %s %s %d %s %f %s %ld",&n->Number,n->Name,&n->Sex,&n->Old,n->Edu,&n->Salary,n->Address,&n->Tel);
		//printf("%d %s %s %d %s %f %s %ld\n",n->Number,n->Name,n->Sex,n->Old,n->Edu,n->Salary,n->Address,n->Tel);
   		addworker(n);
		n=n->next;
	    if(j==b)
		break;
	    j++;
		}
    fclose(FP);    //----关闭文件-----
	}
}	



以上是关于用c语言写一个职工工资管理程序的主要内容,如果未能解决你的问题,请参考以下文章

求一C语言程序设计作业,工资管理系统

C语言程序设计 《招聘信息管理系统》

C语言职工信息管理系统

C语言课程设计:职工管理系统!源码分享+代码分析

C语言程序设计题目:学生信息管理系统设计

职工管理系统