苦力怕豹猫 2021-06-03 20:21 采纳率: 50%
浏览 17

在员工系统中如何让用户自定义员工人数

#include<stdio.h>

#include<string.h>

#include<Windows.h>

#define N 3

int isEmp = 0;

struct employee

{

int id;

char name[20];

char plase[20];

int age;

float greads;

char level[20];

};

void InputEmpInformation(struct employee emp[N])

{

int i,j;

printf("请输入%d位员工工号、姓名、岗位、年龄、成绩\n",N);

printf("工号\t姓名\t岗位\t年龄\t成绩\n");

for (i = 0;i < N;i++)

{

scanf("%d%s%s%d%f",&emp[i].id ,&emp[i].name ,&emp[i].plase ,&emp[i].age ,&emp[i].greads );

for(j=0;j<i;j++)

{

 

if(emp[i].id==emp[j].id)

{

printf("工号重复");

i--;

}

}

 

}

isEmp = 1;

};

void SetputEmpLevel(struct employee emp[N])

{

int i;

if(isEmp == 0)

{

printf("未输入员工信息!\n");

return;

}

for(i = 0;i < N;i++)

{

if(emp[i].greads<100&&emp[i].greads>=90)

strcpy(emp[i].level,"优秀");

if(emp[i].greads<90&&emp[i].greads>=80)

strcpy(emp[i].level,"良好");

if(emp[i].greads<80&&emp[i].greads>=70)

strcpy(emp[i].level,"中等");

if(emp[i].greads<70&&emp[i].greads>=60)

strcpy(emp[i].level,"及格");

if(emp[i].greads<60)

strcpy(emp[i].level,"不及格");

}

};

void OutputEmpInformation(struct employee emp[N])

{

int i;

if(isEmp == 0)

{

printf("未输入员工信息!\n");

return;

}

printf("工号\t姓名\t岗位\t年龄\t成绩\t等级\n");

for (i = 0;i < N;i++)

{

printf("%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[i].id ,emp[i].name ,emp[i].plase ,emp[i].age ,emp[i].greads ,emp[i].level );

 

}

};

void CoutEveryLevelNum(struct employee emp[N])

{

int i;

int a,b,c,d,e;

a=b=c=d=e=0;

for(i=0;i<N;i++)

{

if(strcmp(emp[i].level,"优秀")==0)

{

a++;

}else if(strcmp(emp[i].level,"良好")==0)

{

b++;

}else if(strcmp(emp[i].level,"中等")==0)

{

c++;

}else if(strcmp(emp[i].level,"及格")==0)

{

d++;

}else if(strcmp(emp[i].level,"不及格")==0)

{

e++;

}

}

printf("优秀有%d人\t良好有%d人\t中等有%d人\t及格有%d人\t不及格有%d人\n",a,b,c,d,e);

if(isEmp == 0)

{

printf("当前未输入员工信息!\n");

return;

}

};

void Lookemp(struct employee emp[N])

{

int i,cid;

char choice,name;

float greads;

if(isEmp == 0)

{

printf("未输入员工信息!\n");

return;

}

printf("请输入查找员工的id");

scanf("%d",&cid);

for(i = 0;i<= N;i++)

{

if(cid==emp[i].id)

{

printf("请输入需要修改的信息:a姓名\tb成绩\n");

scanf("%s",&choice);

getchar();

switch(choice)

{

case'a':

case'A':

printf("请输入名字");

scanf("%s",&emp[i].name);

printf("%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[i].id ,emp[i].name ,emp[i].plase ,emp[i].age ,emp[i].greads ,emp[i].level );

break;

case'b':

case'B':

printf("请输入成绩");

scanf("%s",&emp[i].greads);

printf("%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[i].id ,emp[i].name ,emp[i].plase ,emp[i].age ,emp[i].greads ,emp[i].level );

break;

}

}

if(i==N)

printf("未找到相关人员");

return;

}

};

void MarkSort(struct employee emp[N])

{

int temp;

int vIndex[20];

int i,j;

if(isEmp == 0)

{

printf("未输入员工信息!\n");

return;

}

for(i=0;i<N;i++)

{

vIndex[i]=i;

}

for(i=1;i<N;i++)

{

for(j=0;j<N-i;j++)

{

if(emp[vIndex[j]].greads>emp[vIndex[j+1]].greads)

{

temp=vIndex[j];

vIndex[j]=vIndex[j+1];

vIndex[j+1]=temp;

}

}

}

for(i=0;i<N;i++)

{

printf("%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[vIndex[i]].id ,emp[vIndex[i]].name ,emp[vIndex[i]].plase ,emp[vIndex[i]].age ,emp[vIndex[i]].greads ,emp[vIndex[i]].level );

}

};

void InputFile(struct employee emp[N])

{

FILE *fp;

int i;

char path[50];

printf("输入文件路径:");

getchar();

gets(path);

fp=fopen(path,"w");

if(fp==NULL)

{

printf("文件不能为空!");

return;

}

fprintf(fp,"工号\t姓名\t岗位\t年龄\t成绩\t等级\n");

for (i = 0;i < N;i++)

{

fprintf(fp,"%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[i].id ,emp[i].name ,emp[i].plase ,emp[i].age ,emp[i].greads ,emp[i].level);

}

fclose(fp);

printf("写入成功!\n");

};

void OutputFile(struct employee emp[N])

{

FILE *fp;

int i;

char path[50];

printf("输入文件路径:");

getchar();

gets(path);

fp=fopen(path,"r");

if(fp==NULL)

{

printf("文件为空!");

return;

}

fscanf(fp,"工号\t姓名\t岗位\t年龄\t成绩\t等级\n");

for (i = 0;i < N;i++)

{

fscanf(fp,"%d\t%s\t%s\t%d\t%.2f\t%s\n",&emp[i].id ,&emp[i].name ,&emp[i].plase ,&emp[i].age ,&emp[i].greads ,&emp[i].level);

printf("%d\t%s\t%s\t%d\t%.2f\t%s\n",emp[i].id ,emp[i].name ,emp[i].plase ,emp[i].age ,emp[i].greads ,emp[i].level);

}

fclose(fp);

printf("读取成功!\n");

};

int main()

{

int num;

struct employee emp[N];

printf("*使用提示:请在使用前在#define区域修改员工人数,默认为3人\n");

while(1)

{

printf("---------------------------\n请选择程序\n1输入员工信息\n2计算等级人数\n3修改员工信息\n4按照分数排序\n5写入文件\n6读出文件\n7退出系统\n---------------------------\n");

scanf("%d",&num);

switch(num)

{

case 1:

InputEmpInformation(emp);

SetputEmpLevel(emp);

OutputEmpInformation(emp);

break;

case 2:

CoutEveryLevelNum(emp);

break;

case 3:

Lookemp(emp);

break;

case 4:

MarkSort(emp);

break;

case 5:

InputFile(emp);

break;

case 6:

OutputFile(emp);

break;

case 7:

exit(0);

break;

}

}

system("pause");

return 0;

}

 

如上,相关基础功能已经差不多了,但是我想让用户自定义员工数量,现在的想法是添加一条让用户修改宏定义的提示,有没有让用户在程序里就能完成这些的解决方案?

  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-17 13:37
    关注

    参考GPT和自己的思路:

    可以在程序中添加一个询问,让用户输入员工数量,并且动态定义结构体数组大小来实现自定义员工数量。修改代码如下:

    1. 在头文件下方添加以下内容:

    int n;

    1. 修改InputEmpInformation函数中的定义结构体数组大小的位置:

    printf("请输入员工数量:");

    scanf("%d", &n);

    struct employee emp[n];

    replace N with n in the for loop:

    for (i = 0;i < n;i++)

    1. 在其余函数中也要将N改为n

    2. 在Menu中添加一项,提示用户输入员工数量

    printf("请输入员工数量:");

    scanf("%d",&n);

    注意:动态定义数组大小需要使用编译器支持的可变长度数组(VLA),不是所有编译器都支持。

    评论

报告相同问题?

悬赏问题

  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果