一秋 发表于 2019-9-7 00:36:17

用c语言做了一个 职工工作量统计系统 ,供大家观看

本帖最后由 一秋 于 2019-9-15 21:58 编辑

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define FILENAME "worker.bin"
#define N 20
struct worker
{
    int number;       /*工号*/
    int counts;       /*数量*/
    int grade;      /*等级*/

};
/*******************************************************      
             定义
*******************************************************/
void xinxi()
{

      printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
      printf("+               职工工作量统计系统                      +\n");
                printf("+                                                         +\n");
      printf("+               1. 职工基本信息输入                     +\n");
      printf("+                                                         +\n");
                printf("+               2. 工作量输入                           +\n");
      printf("+                                                         +\n");
                printf("+               3. 按工作量排序                         +\n");
      printf("+                                                         +\n");
                printf("+               4. 按职工工号进行信息删除               +\n");
      printf("+                                                         +\n");
      printf("+               5. 结束程序                           +\n");
                printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");

}
/*******************************************************      
                  显示菜单
*******************************************************/
int readFromFile(struct worker w[])
{
        FILE *fp=NULL;
        int i=0;

        fp=fopen(FILENAME,"rb");/*打开文件*/

        if(fp!=NULL)
        {

                while(!feof(fp))    /*从文件中读入学生*/
                {
   
                        if(i>=N)
                                break;
                        if(fread(w+i,sizeof(worker),1,fp)==1)
                                i++;
                }

                fclose(fp);
        }
    return i;
}
/*******************************************************      
                信息显示到屏幕
*******************************************************/
int f(struct worker w[],int length)
{
       
       int i=length;
       while(i<N)
       {
                  printf("第%d个职工\n",i);
                  printf("\n");
                  printf("请你输入工号(以职工号为0结束):\n");/*输入工号*/
                  scanf("%d",&w.number);
                  if(w.number==0)
                          break;
                  printf("\n");
                  printf("\n");
                  
          printf("请你输入数量:\n");/*输入数量*/
                  scanf("%d",&w.counts);
                  printf("\n");
                  i++;
       }
       
       return i;
       }

/*******************************************************      
      功能:输入职工基本信息
*******************************************************/
void input(struct worker w[],int length)
{
   int i=1;
       int number,counts;
   printf("请输入工号:");
       scanf("%d",&number);
   while(number!=0)
       {
                printf("请输入完成数量:\n");
                scanf("%d",&counts);
               for(i=0;i<length;i++)
                        if(w.number==number)
                        {
                                w.counts+=counts;
                break;
                        }
                if(i>=length)
                        printf("工号不存在:\n");
                printf("请输入工号:");
                scanf("%d",&number);
       }
}
/*******************************************************      
      功能:工作量输入并累加
*******************************************************/
void sortCounts(struct worker w[],int length)
{
        int i=0,j=0,k=0;
        struct worker s;
        for(i=0;i<length;i++)
        {      
                k=i;
                for(j=i+1;j<length;j++)
                        if(w.counts>w.counts)
                                k=j;
      /*交换 w and w */
      s = w;
      w =w;
      w = s;
    }
        if(length>0)
                w.grade =1;
        for(i=1;i<length;i++)
                if(w.counts==w.counts)
                        w.grade=w.grade;
                else
                        w.grade=w.grade+1;


}

////////////////////////////////////////////////////////////////////////////////
                     /* 按工作量从大到小排序并标上名次 */
////////////////////////////////////////////////////////////////////////////////
void sortNumber(struct worker w[],int length)
{
        int i=0;
        int grade,count;
    if(length>0)
        {   while(i<length)
                {      
                   count=0;
                   grade=w.grade;
                   printf("名次:%d ", grade);
                   printf(" 工作量:%d ",w.counts);
                   printf("%s","工号:");
                   while(i<length)
                   {
                          if(grade==w.grade)
                          {
                                  printf("%d ",w.number);
                                  count++;
                          }
                          else
                                break;
                          i++;
         }
                   printf("人数:%d\n",count);               
                }
        }
        else
                printf("职工数据不存在!\n");


}
////////////////////////////////////////////////////////////////////////////////
       /* 输出名次、同一名次的职工人数及他们的工号,姓名*/
////////////////////////////////////////////////////////////////////////////////
int delet(struct worker w[],int length,int stuNum)
{
        int i,j;
        char choice;
        for(i=0;i<length;i++)
        {
                if(stuNum==w.number)
       {
                        printf("%s","欲删除职工号为:");
                  printf("%d\n",w.number);       
                        break;
                }
    }
    if(i<length)
        {
                printf("你确实要删除这个职工吗?(Y/N)");
                scanf("%c",&choice);
                if(choice=='Y'||choice=='y')
                {
                        for(j=i;j<length;j++)
                                w=w;
                        length--;
                 printf("删除成功!\n");
                }               
        }
    else
      printf("\n指定的职工不存在!\n");
        return length;
}

/********************************************************
               按职工号删除职工信息
********************************************************/
void writeToFile(struct worker w[],int length)
{
        FILE *fp=NULL;
        int i=0;

        fp=fopen(FILENAME,"wb");

        if(fp==NULL)
        {
                printf("打开文件出错!\n");
                exit(0);
        }

        for(i=0;i<length;i++)
                fwrite(w+i,sizeof(worker),1,fp);

        fclose(fp);

}
/********************************************************
                结构体数组中的职工信息输出到文件
********************************************************/
void main ()
{   
       int choice;
       struct worker w;
       int NUM;char stuName;
       int stuNum;
       int length=0;
       length=readFromFile(w);//读入
   do
       {    xinxi();
             
                  scanf("%d",&choice);
                  switch(choice)
                { case 1:
                          length=f(w,length);
                     break;
         
                  case 2:
                          input(w,length);
                     break;
                  case 3:
                      sortCounts(w,length);
                      sortNumber(w,length);
                      break;
                  case 4:
            printf("请输入欲删除的职工号");
                          scanf("%d",&stuNum);
                      length=delet(w,length,stuNum);
                     break;
         
                  case 5:
                          {   
                                   writeToFile(w,length);//保存
                             printf("程序使用以结束\n");
                             exit(0);
                          }
                   default:
                           {
                             printf("输入有错误请重新输入:\n");
                           }
                  }
        }while(1);
}

针对运行不了的问题,我把cpp文件上传到了百度网盘,有需要的小伙伴自行提取下载哈
百度网盘链接:https://pan.baidu.com/s/1QaSxRdw6Vqr7f6VHMmOkaQ
提取码:5nlv

tyutjianqi 发表于 2019-9-8 15:32:45

学习学习

yzyx 发表于 2019-9-8 22:20:56

修改

噶哩噶哩先生 发表于 2019-9-14 17:10:23

学习学习

chen123456... 发表于 2019-9-14 19:22:21

5

逗泥玩 发表于 2019-9-14 21:15:52

6

censing 发表于 2019-9-14 21:29:09

学习学习

andylcm42 发表于 2019-9-14 21:59:13

谢谢

爱吃鱼的猫123 发表于 2019-9-15 14:20:59

hh

Believing 发表于 2019-9-15 14:39:01

{:5_109:}

华博文 发表于 2019-9-15 15:31:33

学术交流

猫第九条命是死 发表于 2019-9-15 16:31:24

学习一下

wyc_16 发表于 2019-9-15 21:19:20

学习

wyc_16 发表于 2019-9-15 21:24:20

这个编译运行不了啊老铁

逐梦丹青令 发表于 2019-9-15 21:36:41

学习一下

一秋 发表于 2019-9-15 21:46:37

wyc_16 发表于 2019-9-15 21:24
这个编译运行不了啊老铁

可能是复制粘贴后里面的一些代码顺序出了点小问题,你根据提示去修改一下,我刚刚去运行了一下,成功运行,用的vc++6.0

雷蛇 发表于 2019-9-16 17:33:32

学习一下
页: [1]
查看完整版本: 用c语言做了一个 职工工作量统计系统 ,供大家观看