C语言系统工资管理系统

基本功能: 实现一个工资管理系统,要求具有以下几大功能模块:输入员工工资信息模块,查询记录模块,统计记录模块,更新记录模块,输出记录模块。

拓展功能: 复杂的统计功能,如按部门统计、按职称统计、按照工资项目统计等等。

如果只是单纯的记录工资用一个 一维数组就行,统计也没说统计什么,总数还是平均还是最值?

#include "stdafx.h"
#include "iostream"
#include "string"
#include "list"
#include "cassert"
using namespace std;
/*
编号、姓名、部门、应付工资、保险、税金、实付工资。
其中实付工资由公式计算得到:实付工资=应付工资 - 保险- 税金
*/
struct employee{
string m_num;//编号
string m_name;//姓名
string m_dep;//部门
double m_salary;//应付工资
double m_insurance;//保险
double m_tax;//税金
};/*
(1)录入:输入职工数据,其中“实付工资”通过计算得到;
(2)删除:删除指定的职工信息(输入姓名,若找到则删除该信息)
(3) 修改:允许对已经录入的数据重新进行编辑、修改;
(4) 显示:显示全体职工数据;
(5)查询:
a. 输入职工姓名,显示该职工的全部数据;
b. 输入某部门值,显示该部门职工的数据、工资总额、平均工资。
(6) 退出程序。
*/list<employee> emps;int _tmain(int argc, _TCHAR* argv[])
{
void print(const employee &e);
void input();
void del();
void mod();
void show_all();
void show_name();
void show_dep();cout<<"简易职工薪水管理程序 by 做他\n";// delete this line
cout<<"版权没有 请随意复制或修改任何代码\n";//delete this linecout<<"请选择操作:1.录入 2.删除 3.修改 4.查询 5.显示所有员工 6.退出 :";
int choose=0;
cin>>choose;
assert(!cin.fail());
while (choose!=6)
{
if (choose==1) input();
if (choose==2) del();
if (choose==3) mod();
if (choose==4)
{
int choice=0;
cout<<"请选择操作 1.按姓名查询 2.按部门查询 3.退出:";
cin>>choice;
if (choice==1) show_name();
if (choice==2) show_dep();
if (choice==3)
{
cout<<"请选择操作:1.录入 2.删除 3.修改 4.查询 5.显示所有员工 6.退出 :";
cin>>choose;
assert(!cin.fail());
continue;
}
}
if (choose==5) show_all();
cout<<"请选择操作:1.录入 2.删除 3.修改 4.查询 5.显示所有员工 6.退出 :";
cin>>choose;
assert(!cin.fail());
}
return 0;
}void print(const employee &e)
{
cout<<"编号:"<<e.m_num<<endl;
cout<<"姓名:"<<e.m_name<<endl;
cout<<"部门:"<<e.m_dep<<endl;
cout<<"保险:"<<e.m_insurance<<endl;
cout<<"税金:"<<e.m_tax<<endl;
cout<<"应付工资:"<<e.m_salary<<endl;
cout<<"实付工资:"<<e.m_salary-e.m_insurance-e.m_tax<<endl;
}void input()
{
string num,name,dep;
double salary,ins,tax;
cout<<"请输入员工编号:";
cin>>num;
cout<<"请输入员工姓名:";
cin>>name;
cout<<"请输入员工部门:";
cin>>dep;
cout<<"请输入员工保险:";
cin>>ins;
assert(!cin.fail());
cout<<"请输入员工税金:";
cin>>tax;
assert(!cin.fail());
cout<<"请输入员工应付工资:";
cin>>salary;
assert(!cin.fail());
employee temp;
temp.m_dep=dep;
temp.m_insurance=ins;
temp.m_name=name;
temp.m_num=num;
temp.m_salary=salary;
temp.m_tax=tax;
emps.push_back(temp);
cout<<"员工录入操作完毕.\n";
}void del()
{
if (emps.size()==0)
{
cout<<"没有员工记录.\n";
return;
}
string name;
bool isfind=false;
cout<<"请输入要删除的员工姓名:";
cin>>name;
list<employee>::iterator iter;
for (iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name)
{
isfind=true;
emps.erase(iter);
cout<<"姓名为\""<<name<<"\"的员工记录已删除.\n";
return;
}
}
if (!isfind)
{
cout<<"没有找到姓名为\""<<name<<"\"的员工.\n";
return;
}
}void mod()
{
if (emps.size()==0)
{
cout<<"员工记录为空.\n";
return;
}
bool isfind=false;
string name;
cout<<"请输入要修改的员工姓名:";
cin>>name;
list<employee>::iterator iter;
for (iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name)
{
isfind=true;
cout<<"姓名为\""<<name<<"\"的员工记录已找到.\n";
break;
}
}
if (isfind)
{
string num,name,dep;
double tax,ins,salary;
print(*iter);
cout<<endl;
cout<<"请输入新的员工编号:";
cin>>num;
cout<<"请输入新的员工姓名:";
cin>>name;
cout<<"请输入新的员工部门:";
cin>>dep;
cout<<"请输入新的员工保险:";
cin>>ins;
assert(!cin.fail());
cout<<"请输入新的员工税金:";
cin>>tax;
assert(!cin.fail());
cout<<"请输入新的员工工资:";
cin>>salary;
assert(!cin.fail());
iter->m_dep=dep;
iter->m_insurance=ins;
iter->m_name=name;
iter->m_num=num;
iter->m_salary=salary;
iter->m_tax=tax;
cout<<"1 员工记录被成功修改.\n";
}
else
{
cout<<"没有找到姓名为\""<<name<<"\"的员工记录.\n";
}
}void show_all()
{
if (emps.size()==0)
{
cout<<"员工记录为空.\n";
return;
}
cout<<"显示全体员工数据:\n";
cout<<"--------------------\n";
list<employee>::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
cout<<endl;
print(*iter);
cout<<endl;
}
cout<<"--------------------\n";
}void show_name()
{
if (emps.size()==0)
{
cout<<"员工记录为空.\n";
return;
}
bool isfind=false;
string name;
cout<<"请输入要查询的员工姓名:";
cin>>name;
list<employee>::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name)
{
isfind=true;
cout<<"姓名为\""<<name<<"\"的员工记录已找到.\n";
print(*iter);
break;
}
}
if (!isfind)
{
cout<<"没有找到姓名为\""<<name<<"\"的员工.\n";
return;
}
}void show_dep()
{
if (emps.size()==0)
{
cout<<"员工记录为空.\n";
return;
}
double isfind=0.00;
double total_salary=0.00;
string dep;
cout<<"请输入要查询的部门名称:";
cin>>dep;
cout<<"部门["<<dep<<"]的员工信息:\n";
cout<<"--------------------\n\n";
list<employee>::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_dep==dep)
{
isfind++;
total_salary+=iter->m_salary;
print(*iter);
cout<<endl;
continue;
}
}
cout<<"--------------------\n";
if (isfind==0)
{
cout<<"没有找到名称为["<<dep<<"]的部门.\n";
}
else
{
cout<<"部门["<<dep<<"]工资统计:\n";
cout<<"工资总额:"<<total_salary<<endl;
cout<<"平均工资:"<<total_salary/isfind<<endl;
}
}

 

代码如下:如有帮助,请采纳一下,谢谢。

#include <stdio.h>
#include <string.h>
#define MAXNMB 100
#include <process.h>
//定义三个职称:经理、组长、普通员工
enum EZhicheng
{
	e_jingli=1,
	e_zuzhang,
	e_putong
};

//定义部门:销售部门、研发部门、售后部门
enum EPartment
{
	e_part_xs=1,
	e_part_yf,
	e_part_sh
};

//定义员工结构体
struct Employee
{
	int id;         //工号
	char name[20];  //名字
	EPartment ePart;//部门
	EZhicheng eZc;  //职称
	int solary;     //工资
};

//录入人员信息
void Input(struct Employee a[],int *n)
{
	int i;
	printf("请输入人员数量:");
	scanf("%d",n);
	for (i = 0;i < *n;i++)
	{
		printf("请输入员工工号:");
		scanf("%d",&a[i].id);
		printf("请输入员工姓名:");
		scanf("%s",a[i].name);
		printf("请输入员工部门(1销售 2研发 3售后):");
		scanf("%d",&a[i].ePart);
		printf("请输入员工职称(1经理 2组长 3普通员工):");
		scanf("%d",&a[i].eZc);
		printf("请输入员工薪资:");
		scanf("%d",&a[i].solary);
	}
}
//查询
void Find(struct Employee a[],int n)
{
	int i;
	char name[20] = {0};
	printf("请输入需要查询的员工姓名:");
	scanf("%s",name);
	for (i = 0;i<n;i++)
	{
		if (strcmp(a[i].name,name) == 0)
		{
			printf("员工工号:%d\n",a[i].id);
			printf("员工姓名:%s\n",a[i].name);
			printf("员工部门(1销售 2研发 3售后):%d\n",a[i].ePart);
			printf("请输入员工职称(1经理 2组长 3普通员工):%d\n",a[i].eZc);
			printf("请输入员工薪资:%d\n",a[i].solary);
			break;
		}
	}
}

//统计
void Tongji(struct Employee a[],int n)
{
	int opt,i;
	int sum[3]={0,0,0};
	printf("1.按照部门统计  2.按照职称统计\n");
	scanf("%d",&opt);
	if (1 == opt)
	{
		for (i=0;i<n;i++)
		{
			if(a[i].ePart == e_part_xs)
				sum[0] += a[i].solary;
			else if (a[i].ePart == e_part_yf)
				sum[1] += a[i].solary;
			else
				sum[2] += a[i].solary;
		}
		printf("销售部门薪资:%d\n",sum[0]);
		printf("研发部门薪资:%d\n",sum[1]);
		printf("售后部门薪资:%d\n",sum[2]);
	}else
	{
		for (i=0;i<n;i++)
		{
			if(a[i].eZc == e_jingli)
				sum[0] += a[i].solary;
			else if (a[i].eZc == e_zuzhang)
				sum[1] += a[i].solary;
			else
				sum[2] += a[i].solary;
		}
		printf("经理薪资:%d\n",sum[0]);
		printf("组长薪资:%d\n",sum[1]);
		printf("普通员工薪资:%d\n",sum[2]);
	}
	
}




int main()
{
	struct Employee a[MAXNMB];
	int nmb = 0;
	int opt;
	int bgo = 1;
	while(bgo)
	{
		system("cls");
		printf("----------简易薪资管理系统-------\n");
		printf("   1.录入员工信息                \n");
		printf("   2.查询员工信息                \n");
		printf("   3.统计员工信息                \n");
		printf("   4.退出系统                    \n");
		printf("---------------------------------\n");
		scanf("%d",&opt);
		switch(opt)
		{
		case 1:
			Input(a,&nmb);
			break;
		case 2:
			Find(a,nmb);
			break;
		case 3:
			Tongji(a,nmb);
			break;
		case 4:
			bgo = 0;
			break;;
		}
	}
	return 0;
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632