职工工资管理系统 --C语言

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NUM 1000
void enter();
void search_num();
void dele_num();
void modi_num();
void browse();
void count();
void load();
void add();
void menu();
int n;   //员工的总数
struct emploee  //职工数据结构
{
 char no[5];
 char name[8];
 char sex[3];
 int age;
 float wage1;      //员工的基本工资
 float wage2;      //员工的职务工资
 float funds;      //员工的住房公积金
 float WATERfee;   //员工的水电费
 float TAXfee;     //员工的个人所得税
 float wage3;      //员工的实发工资
}emp[NUM],newemp;
void main()
{
 menu();
}

void menu()//主界面
{  int n,w1;

   do
   { system("cls");
      printf("************* 职工工资管理系统 **************\n");
      printf("*            1-----输入职工信息                     *\n");
      printf("*            2-----查询职工信息                     *\n");
      printf("*            3-----根据职工ID号修改              *\n");
      printf("*            4-----根据职工ID号删除              *\n");
      printf("*            5-----据工资统计并浏览              *\n");
      printf("*            6-----从文件载入信息                 *\n");
      printf("*            7-----浏览全部职工                    *\n");
      printf("*            8-----追加职工信息                    *\n");
      printf("*            9-----退出程序                           *\n");
      printf("***************************************************\n");
  printf("       输入您的选择(1-9):[ ]\b\b");
  scanf("%d",&n);
  if(n<1||n>9)                                    //对选择的数字作判断
         {
            w1=1;
            printf("your choice is not between 1 and 9,Please input again:");
            getchar();
          }
         else    w1=0;
      }
    while(w1==1);
  switch(n)
  { case 1:enter();    break;
    case 2:search_num();   break;
    case 3:modi_num();   break;
    case 4:dele_num();   break;
    case 5:count ();    break;
    case 6:load();    break;      //保存模块
    case 7:browse();    break;      //加载模块
    case 8:add();    break;
    case 9:printf("\n×××××××谢谢,欢迎下次光临!×××××××\n\n");
    default:exit(0);  //退出系统,exit(0)函数功能是退出程序。
  }
}
/*************************输入模块**********************/
void enter()
{
     FILE *fp;
     int n,i;
     if ((fp=fopen("emp.txt","wb"))==NULL)
     {

     printf("不能建立emp文件\n");
     exit(1);
     }
     printf("输入职工人数:");
    scanf("%d",&n);
     printf("输入格式:职工号 姓名 性别 年龄 基本工资 职务工资  公积金 水电费  税<Enter>\n");
     for(i=0;i<n;i++)   /*  循环获取n个职工记录 */
     {
         printf("第%d个职工:",i+1);
         scanf("%s%s%s%d%f%f%f%f%f",emp[i].no,emp[i].name,emp[i].sex,&emp[i].age,
           &emp[i].wage1,&emp[i].wage2,&emp[i].funds,&emp[i].WATERfee,&emp[i].TAXfee);
         emp[i].wage3=emp[i].wage1+emp[i].wage2+emp[i].funds-emp[i].WATERfee-emp[i].TAXfee;
     }
     for(i=0;i<n;i++)      /*将n个职工记录写入文件*/
          fwrite(&emp[i],sizeof(struct emploee),1,fp);
     fclose(fp);
}
/*************************统计模块**********************/
void count()
{
     FILE *fp;
     int n,num;
     if((fp=fopen("emp.txt","rb"))==NULL)
     {
         printf("不能打开emp文件\n");
         exit(1);
     }
     printf("请输入工资数:");
     scanf("%d",&num);
     printf("记录号 职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费  税  实发工资\n");
     for(n=0;fread(&emp[n],sizeof(struct emploee),1,fp)!=0;n++)
     if(emp[n].wage3>=num)
     printf("%6d%6s%9s%4s%5d   %.1f   %.1f  %.1f   %.1f   %.1f   %.1f\n",n+1,emp[n].no,emp[n].name,emp[n].sex, emp[n].age,emp[n].wage1,
             emp[n].wage2,emp[n].funds,emp[n].WATERfee,emp[n].TAXfee,emp[n].wage3);
     fclose(fp);
}
/********************删除模块*******************/

void dele_num()
{
     FILE *fp;
     int i,j,n;
     char num[5];
     if((fp=fopen("emp.txt","rb"))==NULL)
     {
         printf("不能打开emp文件\n");
         exit(1);
      }
     printf("删除前:\n");
     printf("记录号 职工号 姓名 性别 年龄   基本工资 职务工资 公积金  水电费   税  实发工资\n");
    for(n=0;fread(&emp[n],sizeof(struct emploee),1,fp);n++)
     printf("%6d%6s%9s%4s%5d   %.1f   %.1f   %.1f   %.1f   %.1f   %.1f\n",n+1,emp[n].no,emp[n].name,emp[n].sex, emp[n].age,emp[n].wage1,
             emp[n].wage2,emp[n].funds,emp[n].WATERfee,emp[n].TAXfee,emp[n].wage3);/*n为emp文件中记录数*/
     printf("要删除的职工号:");
     scanf("%s",num);
     for(i=0;(strcmp(emp[i].no,num)!=0&&i<n);i++)
     if(i>=n)
     {
          printf("\t没有%s职工号的职工\n",num);
          exit(2);
     }
     fclose(fp);
     fp=fopen("emp.dat","w+");
     if(n==1)  /*一个记录已经删除了*/
     {
           fclose(fp);
           exit(3);
     }
     for(j=0;j<i;j++)
        fwrite(&emp[j],sizeof(struct emploee),1,fp);
     for(j=i+1;j<n;j++)
         fwrite(&emp[j],sizeof(struct emploee),1,fp);
     printf("删除后:\n");
     fseek(fp,0,SEEK_SET);
     printf("记录号 职工号 姓名 性别 年龄   基本工资 职务工资 公积金 水电费   税  实发工资\n");
     for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
         printf("%6d%6s%9s%4s%5d%   %.1f    %.1f   %.1f   %.1f   %.1f   %.1f\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
                 emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
       fclose(fp);
}
/********************修改模块*******************/
void modi_num()
{
     FILE *fp;
     int i,j;
     char num[5];
     if((fp=fopen("emp.txt","rb+"))==NULL)
     {
         printf("不能 打开emp文件\n");
         exit(1);
     }
     printf("要修改的职工号:");
     scanf("%s",num);
     for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
    if(!strcmp(emp[i].no,num))break;
     if(feof(fp))
     {
          printf("\t没有%s职工号的职工\n",num);
          exit(2);
     }
     printf("记录号 职工号   姓名 性别 年龄 基本工资 职务工资  公积金  水电费   税  实发工资\n");
     printf("%6d%6s%9s%4s%5d%   %.1f   %.1f   %.1f   %.1f   %.1f   %.1f\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
              emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
    printf("输入格式:职工号   姓名 性别 年龄 基本工资 职务工资 公积金  水电费 税 <Enter>\n");
    printf("第%d个记录:",i+1);
    scanf("%s%s%s%d%f%f%f%f%f",newemp.no,newemp.name,newemp.sex,&newemp.age,
               &newemp.wage1,&newemp.wage2,&newemp.funds,&newemp.WATERfee,&newemp.TAXfee);//获取新的职工记录
             newemp.wage3=newemp.wage1+newemp.wage2+newemp.funds-newemp.WATERfee-newemp.TAXfee;
    fseek(fp,-(long)sizeof(struct emploee),SEEK_CUR);  //文件指针指向该修改的记录开头
     fwrite(&newemp,sizeof(struct emploee),1,fp);  //用newemp覆盖当前记录
     printf(" 修改后:\n");
    fseek(fp,0,SEEK_SET);        //显示修改后的文件数据
     printf("记录号 职工号   姓名 性别 年龄   基本工资 职务工资   公积金  水电费   税   实发工资\n");
     for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++)
         printf("%6d%6s%9s%4s%5d   %.1f   %.1f  %.1f   %.1f  %.1f   %.1f\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
                   emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
    fclose(fp);
}
 /*************************查询模块***********************/
void search_num()
{
     FILE *fp;
     int i;
     char num[5];
     if((fp=fopen("emp.txt","rb"))==NULL)
     {
          printf("不能打开emp文件\n");
          exit(1);
     }
     printf("要查询的职工号:");
     scanf("%s",num);
     for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++)
         if(!strcmp(emp[i].no,num)) break;
    if(feof(fp))
    {
        printf("\t查无此人\n");
        exit(2);
    }
     printf("记录号 职工号   姓名 性别 年龄   基本工资 职务工资   公积金  水电费    税   实发工资\n");
     printf("%6d%6s%9s%4s%5d  %.1f  %.1f  %.1f  %.1f   %.1f   %.1f\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
               emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
       fclose(fp);
}
/*******************浏览模块********************/
void browse()
{    int i;
     FILE *fp;
     if((fp=fopen("emp.txt","r"))==NULL)
     {
         printf("不能打开emp文件\n");
         exit(0);
     }
     printf("记录号 职工号   姓名 性别 年龄   基本工资 职务工资   公积金  水电费   税   实发工资\n");
     for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++)
     {
          printf("%6d%6s%9s%4s%5d  %.1f  %.1f     %.1f    %.1f    %.1f   %.1f\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
                   emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
    }
    fclose(fp);
}
/******************追加模块*******************/
void add()
{
      FILE *fp;
      int n,i,j;
      if((fp=fopen("emp.txt","ab+"))==NULL)
      {
          printf("不能打开emp文件\n");
           exit(0);
      }
    printf("要追加的职工人数:");
      scanf("%d",&n);
      for(i=0;i<n;i++)
      {
          printf("输入格式:职工号   姓名 性别 年龄   基本工资 职务工资  公积金  水电费  税   <Enter>\n");
         printf("追加记录:\n");
         scanf("%s%s%s%d%f%f%f%f%f",newemp.no,newemp.name,newemp.sex,&newemp.age,
                   &newemp.wage1,&newemp.wage2,&newemp.funds,&newemp.WATERfee,&newemp.TAXfee);
             newemp.wage3=newemp.wage1+newemp.wage2+newemp.funds-newemp.WATERfee-newemp.TAXfee;//获取一个新的职工记录
        fwrite(&newemp,sizeof(struct emploee),1,fp);   //将该职工记录写入文件
      }
      fclose(fp);
}

/*************************载入模块**********************/
void load()          //加载记录或可以计算记录个数的函数
{
     FILE *fp;
     int i,w;
     w=1;
     system( "cls" );
    if((fp=fopen("emp.txt","rb"))==NULL)      //以输出打开方式,在此前的记录被覆盖
    {
        printf("\nCannot open file\n");
        w=0;
        return ;
    }
    n=0;
    for(i=0;!feof(fp);i++)
    {
        fread(&emp[i],sizeof(struct emploee),1,fp);
        n++;
    }
    n=n-1;
          fclose(fp);
    if(w==1)
    {
        printf("Load file ok!");
        getchar();
        getchar();
        menu();
    }
}
 
时间: 2024-10-02 18:31:46

职工工资管理系统 --C语言的相关文章

C++ 职工工资管理的设计与实现

职工工资管理的设计与实现 职工工资管理设计与实现 功能设计要求 1. 输入记录:将每一个职工的姓名.ID号以及基本工资.职务工资.岗位津贴.医疗保险.公积金的数据作为一个记录.该软件能建立一个新的数据文件或给已建立好的数据文件增加记录. 2. 显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资. 3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示. 4.查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显

职工工资管理

https://wenku.baidu.com/view/d7bee9bdfd0a79563c1e7286.html 5 职工工资管理系统 2.3 接口设计 1. 外部接口 (1) 用户界面 采用图形用户界面( GUI ) ,包含用户名.密码等. (2) 软件接口 软件运行于 windous 以上和 XP 平台上. 2. 内部接口 (1) 初始化模块:系统初始时由操作系统调用,之后进入消息循环状态. (2) 关闭系统模块:由系统功能模块调用,之后退出系统. (3) 系统功能模块:接受各事件驱动消

C语言职工信息管理系统

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

工资管理系统的需求概述的资料收集与分析:

小马峰:20160401082,飞飞飞:20160401092 需求概述: 2.1 系统总体需求概况 本系统开发的主要目标就是要使企业单位工资管理实现计算机管理,使管理员能够有序的管理每一-位职工的各项工资条款的发放,以及企业工资的统计,使企业运用现代化技术创造更多更高的经济效益,在此基础上开发一个功能实用.界面美观.操作方便.实用性强的工资管理软件.实现本单位财务部门对工资发放的集中管理.可供财务人员对本单位的人员工资进行增加.删除.修改.查询.导入.导出文件.输出报表,并对系统的可登录人员进

13组《职工考勤管理系统》---心得

本周我们小组开始分配任务,我开始负责项目背景和项目目标这块的内容,针对当下企业转型面临的巨大生存压力,企业内部的职工考勤管理变得至关重要.但是老板每天要负责的项目太多了,为了保证老板和员工的联系,所以开发一个职工考勤管理系统是最佳的选择.首先它可以在员工的出勤情况上做出准确的记录,同时为工资结算提供有效的证明,这个考勤内容是透明的,职工和老板都可以及时查询单日或者当月的出勤情况,使得员工和老板之间的矛盾减少.项目目标上,由于刚刚入门我们争取保证我们产品的稳定性,确保我们的系统能够准确合理的运作.

人事管理系统 c语言版

int menu(){ printf("请按提示输入完成操作!\n"); printf("1.查询员工信息\n"); printf("2.统计员工数量\n"); printf("3.录入员工信息\n"); printf("4.删除员工信息\n"); printf("5.按id排序所有员工\n"); printf("6.打印所有员工信息\n"); printf(&quo

C#桌面办公应用-工资管理系统系列九

今天介绍介绍一下我自主开发的工资管理系统中的"汇总查询打印"模块,改小模块具有以下的功能:可以汇总统计员工的工资发放明细信息,可以查询指定的某个部门下的某些员工的工资发放明细信息,并打印成报表!开发的流程为:建立一个用于汇总的数据库表.制作报表.汇总.查询打印!我自己觉得这个功能是相当有趣的,而且在实际的企业中也具有一定的适用性,可以根据企业的需要自主定制相应的报表!若有博友想获取该系统的源码,或者想作为自己的毕业设计的系统实现,可以加我QQ:1974544863进行交流! 下面以&q

企业员工工资管理系统

企业工资管理是人力资源管理的一个核心环节,在市场经济和全球一体化的大背景下,随着人力资源管理在战略层面上发挥着越来越重要的作用,传统的薪酬制度已于现代化的要求不匹配,并越来越限制着企业的发展.本系统以员工的考勤信息作为基础,因为本系统是使用员工考勤信息来计算员工的工资.系统结合实际的人事.财务制度,通过实际的需求分析,采用功能强大的VS2008作为开发工具.SQL作为数据库开发出来的企业工资管理系统.使用的技术有:数据库的访问,菜单控制.本文分析了企业工资管理系统的应用现状,阐述了本工资管理系统

C#桌面办公应用-工资管理系统系列七

接前文工资管理系统系列六,本文将介绍C# winform应用程序中的查询模块功能.其中,就包括了综合.模糊查询以及分页查询:值得说明的是,综合查询,其实就是多个条件组合起来的组合查询啦,只不过我换了个不严谨的称呼罢了!组合多个条件并采用模糊查询的方法实现查询功能:而对于分页查询,我想,参与过企业的项目或者是一些实用的项目的博友而言,都不会陌生,就像我一样,我是搞java开发的,公司用的数据库是mysql,所以对于项目中前端页面使用的分页查询我是再熟悉不过了,这个等改天有空我也写篇博文介绍介绍我们