编写一个简单的公司计薪系统
时间: 2023-08-01 16:11:14 浏览: 90
好的,我可以为您提供一个简单的公司计薪系统的设计方案。该系统可以根据员工的基本信息、工作时间、工作岗位等因素,自动计算出每个员工的工资和工资条,并可以方便地进行管理和查询。
以下是该系统的主要功能模块:
1. 员工档案管理:包括员工基本信息、入职时间、薪资标准、工作岗位等信息的录入和修改,可以方便地对员工信息进行管理和查询。
2. 考勤管理:记录员工的考勤情况,包括请假、加班、旷工等情况,并根据考勤情况计算出每个员工的实际工作时间。
3. 工资计算:根据员工的薪资标准和实际工作时间,自动计算出每个员工的应发工资、扣除项(如社保、公积金等)、个人所得税等,生成工资条。
4. 工资结算:根据工资条中的应发工资和扣除项,计算出每个员工的实发工资,并进行工资结算和发放。
5. 统计报表:生成各种报表,包括员工基本信息表、工资汇总表、个人所得税汇总表等,方便管理人员进行查询和统计分析。
以上是一个简单的公司计薪系统的主要功能模块,具体实现方式可以根据公司的实际情况进行调整和完善。
相关问题
设计一个Worker类,有以下方法: (1)构造方法:带两个输入参数:工人的姓名和小时工资。 (2)小时工资的get/set方法 (3)pay()方法:带一个工作时长输入参数,输出:"Not Implemented"。 接下来设计Worker的子类:HourlyWorker和SalariedWorker。两个子类都重写继承的方法pay()来计算工人的周薪。计时工按实际工时支付每小时工资,超过40小时的超出部分为双倍工资。计薪工人的工资是40小时的工资,不管工作时间是多少。因为与工作时长无关,故SalariedWorker的方法pay()可以不带参数调用。
好的,下面是一个实现你所描述的Worker类及其子类HourlyWorker和SalariedWorker的示例代码:
```java
class Worker {
private String name;
private double hourlyWage;
public Worker(String name, double hourlyWage) {
this.name = name;
this.hourlyWage = hourlyWage;
}
public double getHourlyWage() {
return hourlyWage;
}
public void setHourlyWage(double hourlyWage) {
this.hourlyWage = hourlyWage;
}
public void pay(int hours) {
System.out.println("Not Implemented");
}
}
class HourlyWorker extends Worker {
public HourlyWorker(String name, double hourlyWage) {
super(name, hourlyWage);
}
public void pay(int hours) {
double salary;
if (hours <= 40) {
salary = hours * getHourlyWage();
} else {
salary = 40 * getHourlyWage() + (hours - 40) * getHourlyWage() * 2;
}
System.out.println(getName() + "'s weekly salary is $" + salary);
}
}
class SalariedWorker extends Worker {
public SalariedWorker(String name, double hourlyWage) {
super(name, hourlyWage);
}
public void pay() {
double salary = 40 * getHourlyWage();
System.out.println(getName() + "'s weekly salary is $" + salary);
}
}
public class Test {
public static void main(String[] args) {
HourlyWorker worker1 = new HourlyWorker("Tom", 10.0);
worker1.pay(35);
HourlyWorker worker2 = new HourlyWorker("Jerry", 12.0);
worker2.pay(50);
SalariedWorker worker3 = new SalariedWorker("Bob", 8.0);
worker3.pay();
}
}
```
在这个示例代码中,Worker类是基类,包含了name和hourlyWage两个数据成员,以及一个构造函数和一个pay()方法。HourlyWorker类是Worker类的派生类,重写了pay()方法来计算工人的周薪。SalariedWorker类同样是Worker类的派生类,但由于它的工资与工作时长无关,因此重写的pay()方法可以不带参数调用。在Test类中,我们创建了三个Worker对象,分别是HourlyWorker和SalariedWorker类型的,调用它们的pay()方法来计算工人的周薪。
#include<iostream> #include<stdlib.h> #include<string> using namespace std; //请在此处完成YearWork,MonthWorker,WeekWoker及Company类的编码 /***********begin***********/ /************end**********/ int main() { Company co; for(int i=0;i<30;i++) { int r=rand()%3+1; switch (r) { case 1: co.emp[i]=WeekWorker(580); break; case 2: co.emp[i]=MonthWorker(2500); break; case 3: co.emp[i]=YearWorker(22000); break; default: break; } } cout<<"company total pay="<<co.salarypay(); return 0; }
这段代码的作用是模拟一个公司的员工工资支付系统,其中包括三种类型的员工:WeekWorker(按周计薪的员工)、MonthWorker(按月计薪的员工)和YearWorker(按年计薪的员工)。代码中使用了一个Company类来管理所有的员工,并通过一个for循环随机生成30个不同类型的员工,然后计算公司总共需要支付的薪水。
具体来说,代码中的实现思路如下:
1. 首先定义了三个类:YearWorker、MonthWorker和WeekWorker,它们都是Employee类的子类,分别代表按年、按月和按周计薪的员工。
2. 在Company类中,定义了一个数组emp来存储所有的员工。
3. 在主函数中,通过一个for循环随机生成30个不同类型的员工,并将它们存储到Company对象的emp数组中。
4. 最后调用Company对象的salarypay方法,计算公司总共需要支付的薪水,并输出结果。
完整代码如下:
```c++
#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
//员工类
class Employee
{
public:
virtual int pay() = 0; //纯虚函数
};
//按年计薪的员工
class YearWorker :public Employee
{
private:
int salary; //年薪
public:
YearWorker(int s) :salary(s) {} //构造函数
int pay() { return salary; } //实现计算薪水的方法
};
//按月计薪的员工
class MonthWorker :public Employee
{
private:
int salary; //月薪
public:
MonthWorker(int s) :salary(s) {} //构造函数
int pay() { return salary; } //实现计算薪水的方法
};
//按周计薪的员工
class WeekWorker :public Employee
{
private:
int salary; //周薪
public:
WeekWorker(int s) :salary(s) {} //构造函数
int pay() { return salary; } //实现计算薪水的方法
};
//公司类
class Company
{
public:
Employee *emp[30]; //员工数组
int salarypay() //计算公司总共需要支付的薪水
{
int sum = 0;
for (int i = 0; i < 30; i++)
{
sum += emp[i]->pay(); //调用不同类型员工的计算薪水方法
}
return sum;
}
};
int main()
{
Company co;
for (int i = 0; i < 30; i++)
{
int r = rand() % 3 + 1;
switch (r) {
case 1:
co.emp[i] = new WeekWorker(580);
break;
case 2:
co.emp[i] = new MonthWorker(2500);
break;
case 3:
co.emp[i] = new YearWorker(22000);
break;
default:
break;
}
}
cout << "company total pay=" << co.salarypay();
return 0;
}
```