鱼C论坛

 找回密码
 立即注册
查看: 2135|回复: 16

[技术交流] 用c语言做了一个 职工工作量统计系统 ,供大家观看

[复制链接]
发表于 2019-9-7 00:36:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

[hide]#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[i].number);
                  if(w[i].number==0)
                          break;
                  printf("\n");
                  printf("\n");
                  
          printf("请你输入数量:\n");/*输入数量*/
                  scanf("%d",&w[i].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[i].number==number)
                        {
                                w[i].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[j].counts>w[k].counts)
                                k=j;
        /*  交换 w[i] and w[k] */
        s = w[k];
        w[k] =w[i];
        w[i] = s;
    }
        if(length>0)
                w[0].grade =1;
        for(i=1;i<length;i++)
                if(w[i].counts==w[i-1].counts)
                        w[i].grade=w[i-1].grade;
                else
                        w[i].grade=w[i-1].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[i].grade;
                   printf("名次:%d ", grade);
                   printf(" 工作量:%d ",w[i].counts);
                   printf("%s","工号:");
                   while(i<length)
                   {
                          if(grade==w[i].grade)
                          {
                                  printf("%d ",w[i].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[i].number)
       {
                        printf("%s","欲删除职工号为:");
                    printf("%d\n",w[i].number);       
                        break;
                }
    }
    if(i<length)
        {
                printf("你确实要删除这个职工吗?(Y/N)");
                scanf("%c",&choice);
                if(choice=='Y'||choice=='y')
                {
                        for(j=i;j<length;j++)
                                w[j]=w[j+1];
                        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[N];
         int NUM;char stuName[100];
         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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-8 15:32:45 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-8 22:20:56 | 显示全部楼层
修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-14 17:10:23 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-14 19:22:21 | 显示全部楼层
5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-14 21:15:52 | 显示全部楼层
6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-14 21:29:09 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-14 21:59:13 | 显示全部楼层
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-15 14:20:59 | 显示全部楼层
hh
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-15 14:39:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-15 15:31:33 | 显示全部楼层
学术交流
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-15 16:31:24 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-15 21:19:20 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-15 21:24:20 | 显示全部楼层
这个编译运行不了啊  老铁
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-15 21:36:41 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-15 21:46:37 | 显示全部楼层
wyc_16 发表于 2019-9-15 21:24
这个编译运行不了啊  老铁

可能是复制粘贴后里面的一些代码顺序出了点小问题,你根据提示去修改一下,我刚刚去运行了一下,成功运行,用的vc++6.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-16 17:33:32 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 01:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表