#include <string.h>
#include <header.h>
/*
編寫壹個程序,該程序輸入職工工號和完成的產品數量,
程序允許同壹職工有多次輸入,由程序對其完成的產品數量實現累計。
程序按完成數量對他們排序,並確定他們的名次。按完成產品數量由多到少的順序,
輸出名次、同壹名次的職工人數及他們的工號(工號由小到大順序輸出)。
信息:職工編號(nEmployId,nProductNumber)
要求:1.允計同壹人多次輸入,對產品實行累計
*/
const int nPerson = 10;//車間工人數
char *arr_personId[] = {"001", "002", "003", "004", "005", "006", "007", "008", "009", "010"};
int arr_proNumber[nPerson] = {0};
/*
某個員工的產品數量
*/
void PersonOne(int index)
{
int nProCount, nClear;
scanf("%d", &nProCount);
while(nProCount < 0)
{
printf("您輸入的計件數量不符合標準,請輸入數字:\n");
while((nClear = getchar()) != '\n' && nClear != EOF);
scanf("%d", &nProCount);
}
arr_proNumber[index] += nProCount;
}
/*
所有員工計量統計
*/
void AllPersonPro()
{
int i =0;
while(i < nPerson)
{
char nPerId[nPerson];
memset(nPerId, '\0', nPerson);
printf("請輸入您的編號及完成的產品數量:\n");
scanf("%s", nPerId);
int j = 0, index = 0, flag = 0;
for(j = 0;j < nPerson;++j)
{
if(!strcmp(nPerId, arr_personId[j]))
{
index = j;
++flag;
}
}
j = 0;
while(flag == 0)
{
printf("對不起,您輸入的編號不正確,請確認後重新輸入:\n");
scanf("%s", nPerId);
while(j < nPerson)
{
if(!strcmp(nPerId, arr_personId[j]))
{
index = j;
++flag;
break;
}
++j;
}
}
if(arr_proNumber[index] == 0)
{
++i;
}
PersonOne(index);
}
}
struct Employ
{
char cEmpNum[nPerson];
int nNumber;
};
/*
員工計件排名
*/
void sort()
{
AllPersonPro();
struct Employ p[nPerson];
int i = 0;
for(i = 0;i < nPerson;++i)
{
strcpy(p[i].cEmpNum, arr_personId[i]);
p[i].nNumber = arr_proNumber[i];
}
//對員工作進行排名
for(i = 0;i < nPerson;++i)
{
for(int j = i; j > 0;--j)
{
//根據計件數排名
if(p[j].nNumber > p[j-1].nNumber)
{
struct Employ temp = p[j];
p[j] = p[j-1];
p[j-1] = temp;
}
//如果計件數相同,根據工號排名
if(p[j].nNumber == p[j-1].nNumber)
{
if(strcmp(p[j].cEmpNum, p[j-1].cEmpNum) < 0)
{
struct Employ temp = p[j-1];
p[j-1] = p[j];
p[j] = temp;
}
}
}
}
for(i = 0;i < nPerson;++i)
{
printf("編號:%s 計件數:%d\n", p[i].cEmpNum, p[i].nNumber);
}
}