具体的内容都在图里,大一刚学,目前只学到指针函数,麻烦各位老哥不要用超出我理解范围的函数,我真的会看不懂
根据你的要求现写的代码,望采纳,多谢。
运行截图:
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct _employee
{
char name[20]; //员工姓名
char phone[12]; //员工电话
char addr[20]; //住址
char cardId[20]; //身份证号
char department[20]; //部门
char id[10]; //工号
int workDay; //工作天数
char jiguan[20]; //籍贯
float workAge; //工龄
char isMarrid; //是否已婚
int age; //年龄
char sex; //性别
int child; //是否生育,0表示未生育,>0表示孩子个数
char grade[20]; //学历
int isIn; //公司文化活动是否签到
float base; //基础工资
float money; //薪资
float sale; //销售金额
float total; //总计
}Employee;
//显示内容
const char* g_title[] = {"员工姓名","员工电话","住址","身份证号","部门","工号","工作天数","籍贯","工龄","婚姻状况","年龄","性别","生育状况","学历","公司文化活动签到"};
//1.0显示单个员工信息
void showSingle(Employee emp)
{
printf("员工姓名:%s\n",emp.name);
printf("员工电话:%s\n",emp.phone);
printf("住址:%s\n",emp.addr);
printf("身份证号:%s\n",emp.cardId);
printf("部门:%s\n",emp.department);
printf("工号:%s\n",emp.id);
printf("工作天数:%d\n",emp.workDay);
printf("工龄:%.1f\n",emp.workAge);
printf("婚姻状况:");
if(emp.isMarrid == 'y' || emp.isMarrid == 'Y')
printf("已婚\n");
else
printf("未婚\n");
printf("年龄:%d\n",emp.age);
printf("性别:");
if(emp.sex=='F' || emp.sex =='f')
printf("女\n");
else
printf("男\n");
printf("剩余状况:");
if(emp.child <=0)
printf("无\n");
else
printf("%d个子女\n",emp.child);
printf("学历:%s\n",emp.grade);
printf("公司文化活动签到:");
if(emp.isIn == 1)
printf("是\n");
else if(emp.isIn == 0)
printf("否,但已请假\n");
else
printf("否,未请假\n");
//下面的信息题目没有要求显示,可以根据需要删除
printf("基础工资:%.2f\n",emp.base);
printf("销售金额:%.2f\n",emp.sale);
}
//1.显示所有员工信息
void showAll(char* name,Employee emp[],int n)
{
int i = 0,j=0;
printf("单位名称:%s \t 总人数:%d\n",name,n);
printf("------------------------------------------\n");
for(i=0;i<n;i++)
{
showSingle(emp[i]);
}
printf("------------------------------------------\n");
}
//2查询
void search(Employee emp[],int n)
{
int op;
int i = 0;
char buf[20]={0};
printf("1.根据工号查询\n");
printf("2.根据姓名查询\n");
printf("3.根据电话查询\n");
printf("4.返回上一层\n");
while(1)
{
scanf("%d",&op);
if(op >=1 && op <= 4)
break;
}
switch(op)
{
case 1: printf("请输入工号:");scanf("%s",buf);break;
case 2: printf("请输入姓名:");scanf("%s",buf);break;
case 3: printf("请输入电话:");scanf("%s",buf);break;
case 4: return;
}
for(i=0;i<n;i++)
{
if(op == 1 && strcmp(emp[i].id,buf)==0)
{
showSingle(emp[i]);
break;
}else if(op == 2 && strcmp(emp[i].name,buf)==0)
{
showSingle(emp[i]);
break;
}else if(op == 3 && strcmp(emp[i].phone,buf)==0)
{
showSingle(emp[i]);
break;
}
}
if(i == n)
printf("未找到符合条件的员工!!\n");
}
//3筛选
void select(Employee emp[],int n)
{
int i,op;
char buf[20]={0},tmp;
int flag = 0;
int age;
printf("1.通过部门筛选\n");
printf("2.通过性别筛选\n");
printf("3.通过年龄筛选\n");
printf("4.通过婚姻状况筛选\n");
printf("5.通过请假考勤\n");
printf("6.通过学历筛选\n");
printf("7.通过籍贯筛选\n");
printf("8.返回上一层\n");
while(1)
{
scanf("%d",&op);
if(op >=1 && op <=8)
break;
}
switch(op)
{
case 1:
printf("请输入部门:");
scanf("%s",buf);
for(i=0;i<n;i++)
{
if(strcmp(buf,emp[i].department)==0)
{
flag=1;
showSingle(emp[i]);
}
}
if(flag == 0)
printf("未找到符合条件的员工!!\n");
break;
case 2:
printf("请输入性别:");
rewind(stdin); //或者 fflush(stdin);
buf[0] = getchar();
buf[0]=toupper(buf[0]);
for(i=0;i<n;i++)
{
tmp = toupper(emp[i].sex);
if(buf[0] == tmp)
{
showSingle(emp[i]);
flag = 1;
}
}
if(flag == 0)
printf("未找到符合条件的员工!!\n");
break;
case 3:
printf("请输入年龄:");
scanf("%d",&age);
for(i=0;i<n;i++)
{
if(emp[i].age == age)
{
showSingle(emp[i]);
flag = 1;
}
}
if(flag == 0)
printf("未找到符合条件的员工!!\n");
break;
case 4:
printf("请输入婚姻状况(Y:已婚 N:未婚 ): ");
rewind(stdin);
buf[0]= getchar();
buf[0] = toupper(buf[0]);
for(i=0;i<n;i++)
{
tmp = toupper(emp[i].isMarrid);
if(buf[0] == tmp)
{
showSingle(emp[i]);
flag = 1;
}
}
if(flag == 0)
printf("未找到符合条件的员工!!\n");
break;
case 5:
printf("请输入筛选条件(1.请假 2.未请假\n): ");
scanf("%d",&age);
for(i=0;i<n;i++)
{
if(emp[i].workDay < 22) //这里通过工作天数来判断
{
showSingle(emp[i]);
flag = 1;
}
}
if(flag == 0)
printf("未找到符合条件的员工!!\n");
break;
case 6:
printf("请输入学历:");
scanf("%s",buf);
for(i=0;i<n;i++)
{
if(strcmp(buf,emp[i].grade) == 0)
{
showSingle(emp[i]);
flag = 1;
}
}
if(flag == 0)
printf("未找到符合条件的员工!!\n");
break;
case 7:
printf("请输入籍贯:");
scanf("%s",buf);
for(i=0;i<n;i++)
{
if(strcmp(buf,emp[i].jiguan) == 0)
{
showSingle(emp[i]);
flag = 1;
}
}
if(flag == 0)
printf("未找到符合条件的员工!!\n");
break;
case 8:
return;
}
}
//4.1插入新员工
int insert(Employee emp[],int n)
{
printf("更新该员工信息:\n");
printf("请输入员工姓名:");scanf("%s",emp[n].name);
printf("请输入员工电话:");scanf("%s",emp[n].phone);
printf("请输入住址:");scanf("%s",emp[n].addr);
printf("请输入身份证号:");scanf("%s",emp[n].cardId);
printf("请输入部门:");scanf("%s",emp[n].department);
printf("请输入工号:");scanf("%s",emp[n].id); //也可以不改工号
printf("请输入工作天数:");scanf("%d",&emp[n].workDay);
printf("请输入籍贯:");scanf("%s",emp[n].jiguan);
printf("请输入工龄:");scanf("%f",&emp[n].workAge);
printf("请输入婚姻状况(Y:已婚 N:未婚):"); rewind(stdin); emp[n].isMarrid = getchar();
printf("请输入年龄:");scanf("%d",&emp[n].age);
printf("请输入性别(F:女 M:男):");rewind(stdin); emp[n].sex = getchar();
printf("请输入剩余情况:");scanf("%d",&emp[n].child);
printf("请输入学历:");scanf("%s",emp[n].grade);
printf("公司文化活动签到(1.签到 0.未参加但请假 -1.未参加未请假):");scanf("%d",&emp[n].isIn);
printf("请输入员工基础薪资:");scanf("%f",&emp[n].base);
printf("请输入销售金额:");scanf("%f",&emp[n].sale);
printf("新员工信息已插入!\n");
return (n+1);
}
//4.2删除旧员工信息
int dele(Employee emp[],int n)
{
char buf[20]={0};
int i,flag=0,j;
printf("请输入要删除的员工工号:");
scanf("%s",buf);
for(i=0;i<n;i++)
{
if(strcmp(buf,emp[i].id)==0)
{
flag = 1;
for(j=i;j<n-1;j++)
emp[j] = emp[j+1];
printf("该员工信息已删除!!\n");
return (n-1);
}
}
if(flag == 0)
printf("未找到符合条件的员工!!\n");
return n;
}
//5.计算薪资
void caculate(Employee emp[],int n)
{
int i=0;
for(i=0;i<n;i++)
{
emp[i].total = emp[i].base/22*emp[i].workDay;
if(strcmp(emp[i].grade,"专科")==0)
emp[i].total += 800;
else if(strcmp(emp[i].grade,"本科")==0)
emp[i].total += 1000;
else if(strcmp(emp[i].grade,"研究生")==0)
emp[i].total += 1200;
//生育奖
if(emp[i].child == 1)
emp[i].total += 500;
else if(emp[i].child == 2)
emp[i].total += 750;
else if(emp[i].child == 3)
emp[i].total += 1000;
//工龄奖
emp[i].total += emp[i].workAge * 50;
//提成
if(emp[i].sale <1000000)
emp[i].total += emp[i].sale*0.02;
else if(emp[i].sale < 1000000)
emp[i].total += emp[i].sale*0.05;
else
emp[i].total += emp[i].sale*0.08;
//公司互动
if(emp[i].isIn == 1)
emp[i].total += 150;
else if(emp[i].isIn == 0)
emp[i].total += 100;
//这里只显示了部分信息
printf("工号:%s 姓名:%s 薪资:%.2f\n",emp[i].id,emp[i].name,emp[i].total);
}
}
//6.计算每月应缴金额
void jiaona(Employee emp[],int n)
{
int i;
float f1,f2;
for(i=0;i<n;i++)
{
printf("工号:%s 姓名:%s 薪资:%.2f ",emp[i].id,emp[i].name,emp[i].total);
f1 = emp[i].total * 0.02 + 7; //医保
f2 = emp[i].total * 0.05; //公积金
printf("医保缴纳:%.2f 公积金缴纳:%.2f 实发工资:%.2f\n",f1,f2,(emp[i].total-f1-f2));
}
}
//7.显示销售前3名
void showBef(Employee emp[],int n)
{
int i,j;
Employee t;
//根据销售额排名
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(emp[j].sale < emp[j+1].sale)
{
t = emp[j];
emp[j] = emp[j+1];
emp[j+1] = t;
}
}
}
//显示前三名
for(i=0;i<3;i++)
{
printf("工号:%s 姓名:%s 销售额:%.2f\n",emp[i].id,emp[i].name,emp[i].sale);
}
}
int main()
{
int op;
Employee emp[100];
int n = 0;
char name[20];
printf("请输入单位名称:");
scanf("%s",name);
while(1)
{
system("cls");
printf("1.插入新员工信息\n");
printf("2.删除旧员工信息\n");
printf("3.查找\n");
printf("4.筛选\n");
printf("5.显示全部信息\n");
printf("6.计算薪资\n");
printf("7.计算每月应缴纳金额并显示实发金额\n");
printf("8.显示销冠前三名\n");
printf("9.退出系统\n");
scanf("%d",&op);
switch(op)
{
case 1:
n = insert(emp,n);break;
case 2:
n = dele(emp,n);break;
case 3:
search(emp,n);break;
case 4:
select(emp,n);break;
case 5:
showAll(name,emp,n);break;
case 6:
caculate(emp,n);break;
case 7:
jiaona(emp,n);break;
case 8:
showBef(emp,n);break;
case 9:
break;
default:
break;
}
system("pause");
}
}
图片看不清楚,题目需求请写一下
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!