使用mfc 简易工资管理系统 1 每条记录包含职工姓名、工号、基本工资、岗位津贴、奖金、医疗保险、公积金,个人所得税信息; 2 其中个人所得税通过“2012年个人所得税税率表”计算获得; 3 工资信息的显示、增、删、改、查功能; 4 程序启动时可以从文件读取已存在工资信息; 5 程序退出时将最新的信息保存到原来的文件中;
时间: 2023-08-09 13:06:31 浏览: 62
以下是使用MFC实现简易工资管理系统的步骤:
1. 创建MFC对话框应用程序工程。
2. 设计UI界面,添加控件,包括职工姓名、工号、基本工资、岗位津贴、奖金、医疗保险、公积金、个人所得税等信息的输入框和按钮。
3. 设计数据结构,创建工资信息类,包含职工姓名、工号、基本工资、岗位津贴、奖金、医疗保险、公积金、个人所得税等属性,并实现相应的get和set方法。
4. 实现工资信息的显示功能。在对话框中添加一个列表框,用于显示所有的工资记录,同时添加一个“查询”按钮,可以查询指定工资记录。
5. 实现工资信息的增、删、改功能。添加“添加”、“删除”、“修改”按钮,分别用于添加、删除、修改工资记录。
6. 实现文件读写功能。程序启动时读取已存在的工资信息并显示在列表框中,程序退出时将最新的信息保存到原来的文件中。
7. 实现个人所得税计算功能。根据“2012年个人所得税税率表”计算个人所得税,并更新工资记录。
需要注意的是,实现工资管理系统时要注意数据的安全性和保密性,对于敏感信息要进行加密处理。同时,还要考虑用户体验,尽可能地让用户使用起来更加方便。
相关问题
使用mfc 1 每条记录包含职工姓名、工号、基本工资、岗位津贴、奖金、医疗保险、公积金,个人所得税信息; 2 其中个人所得税通过“2012年个人所得税税率表”计算获得; 3 工资信息的显示、增、删、改、查功能; 4 程序启动时可以从文件读取已存在工资信息; 5 程序退出时将最新的信息保存到原来的文件中;
好的,下面是一个简单的基于MFC对话框的工资管理系统实现,包括了上述要求的功能:
1. 创建一个MFC对话框应用程序。
2. 在对话框中添加文本框、列表框、按钮等控件,用于显示工资信息和进行操作。
3. 在对话框类中定义数据结构体Salary,包含职工姓名、工号、基本工资、岗位津贴、奖金、医疗保险、公积金、个人所得税等信息。
4. 在对话框类中定义变量和控件对象,例如:CListCtrl m_listCtrl,用于显示工资信息的列表框。
5. 在对话框类的OnInitDialog()函数中,初始化列表框控件,加载已存在的工资信息。
6. 在对话框类中添加函数,用于显示、增、删、改、查工资信息,例如:DisplaySalary()、AddSalary()、DeleteSalary()、EditSalary()、SearchSalary()等函数。
7. 在对话框类中添加函数,用于计算个人所得税,例如:CalculateTax()函数,根据“2012年个人所得税税率表”计算个人所得税。
8. 在对话框类的保存和销毁函数中,将最新的工资信息保存到原文件中,例如:OnOK()和OnDestroy()函数。
下面是一个简单的实现示例,供您参考:
```cpp
// Salary.h 文件
#pragma once
struct Salary
{
CString name; // 姓名
CString id; // 工号
double basicSalary; // 基本工资
double postAllowance; // 岗位津贴
double bonus; // 奖金
double medicalInsurance;// 医疗保险
double providentFund; // 公积金
double tax; // 个人所得税
};
// MyDialog.h 文件
#pragma once
#include "afxwin.h"
#include "afxcmn.h"
#include "Salary.h"
class CMyDialog : public CDialog
{
public:
CMyDialog(CWnd* pParent = NULL); // 标准构造函数
// 对话框数据
enum { IDD = IDD_MYDIALOG_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
protected:
virtual BOOL OnInitDialog();
virtual void OnOK();
virtual void OnDestroy();
afx_msg void OnBnClickedBtnAdd();
afx_msg void OnBnClickedBtnDelete();
afx_msg void OnBnClickedBtnEdit();
afx_msg void OnBnClickedBtnSearch();
DECLARE_MESSAGE_MAP()
private:
void InitListCtrl();
void DisplaySalary();
void AddSalary();
void DeleteSalary();
void EditSalary();
void SearchSalary();
void CalculateTax(Salary& salary);
private:
CListCtrl m_listCtrl;
CString m_strName;
CString m_strID;
double m_dBasicSalary;
double m_dPostAllowance;
double m_dBonus;
double m_dMedicalInsurance;
double m_dProvidentFund;
double m_dTax;
int m_nSelectedRow;
std::vector<Salary> m_vecSalaries;
};
```
```cpp
// MyDialog.cpp 文件
#include "stdafx.h"
#include "MyDialog.h"
#include <fstream>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMyDialog 对话框
CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)
: CDialog(CMyDialog::IDD, pParent)
, m_strName(_T(""))
, m_strID(_T(""))
, m_dBasicSalary(0)
, m_dPostAllowance(0)
, m_dBonus(0)
, m_dMedicalInsurance(0)
, m_dProvidentFund(0)
, m_dTax(0)
, m_nSelectedRow(-1)
{
// ...
}
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_SALARY, m_listCtrl);
DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
DDX_Text(pDX, IDC_EDIT_ID, m_strID);
DDX_Text(pDX, IDC_EDIT_BASIC_SALARY, m_dBasicSalary);
DDX_Text(pDX, IDC_EDIT_POST_ALLOWANCE, m_dPostAllowance);
DDX_Text(pDX, IDC_EDIT_BONUS, m_dBonus);
DDX_Text(pDX, IDC_EDIT_MEDICAL_INSURANCE, m_dMedicalInsurance);
DDX_Text(pDX, IDC_EDIT_PROVIDENT_FUND, m_dProvidentFund);
DDX_Text(pDX, IDC_EDIT_TAX, m_dTax);
}
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
ON_BN_CLICKED(IDC_BTN_ADD, &CMyDialog::OnBnClickedBtnAdd)
ON_BN_CLICKED(IDC_BTN_DELETE, &CMyDialog::OnBnClickedBtnDelete)
ON_BN_CLICKED(IDC_BTN_EDIT, &CMyDialog::OnBnClickedBtnEdit)
ON_BN_CLICKED(IDC_BTN_SEARCH, &CMyDialog::OnBnClickedBtnSearch)
END_MESSAGE_MAP()
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// 初始化列表框控件
m_listCtrl.InsertColumn(0, _T("姓名"), LVCFMT_CENTER, 80);
m_listCtrl.InsertColumn(1, _T("工号"), LVCFMT_CENTER, 80);
m_listCtrl.InsertColumn(2, _T("基本工资"), LVCFMT_CENTER, 80);
m_listCtrl.InsertColumn(3, _T("岗位津贴"), LVCFMT_CENTER, 80);
m_listCtrl.InsertColumn(4, _T("奖金"), LVCFMT_CENTER, 80);
m_listCtrl.InsertColumn(5, _T("医疗保险"), LVCFMT_CENTER, 80);
m_listCtrl.InsertColumn(6, _T("公积金"), LVCFMT_CENTER, 80);
m_listCtrl.InsertColumn(7, _T("个人所得税"), LVCFMT_CENTER, 80);
// 加载已存在的工资信息
std::ifstream inFile("salary.txt");
if (inFile.is_open())
{
Salary salary;
while (inFile >> salary.name >> salary.id >> salary.basicSalary >> salary.postAllowance >> salary.bonus >> salary.medicalInsurance >> salary.providentFund)
{
CalculateTax(salary);
m_vecSalaries.push_back(salary);
}
inFile.close();
}
// 显示工资信息到列表框中
DisplaySalary();
return TRUE;
}
void CMyDialog::OnOK()
{
// 保存最新的工资信息到文件中
std::ofstream outFile("salary.txt");
if (outFile.is_open())
{
for (auto& salary : m_vecSalaries)
{
outFile << salary.name << " " << salary.id << " " << salary.basicSalary << " " << salary.postAllowance << " " << salary.bonus << " " << salary.medicalInsurance << " " << salary.providentFund << std::endl;
}
outFile.close();
}
CDialog::OnOK();
}
void CMyDialog::OnDestroy()
{
// 保存最新的工资信息到文件中
std::ofstream outFile("salary.txt");
if (outFile.is_open())
{
for (auto& salary : m_vecSalaries)
{
outFile << salary.name << " " << salary.id << " " << salary.basicSalary << " " << salary.postAllowance << " " << salary.bonus << " " << salary.medicalInsurance << " " << salary.providentFund << std::endl;
}
outFile.close();
}
CDialog::OnDestroy();
}
void CMyDialog::InitListCtrl()
{
m_listCtrl.DeleteAllItems();
m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
}
void CMyDialog::DisplaySalary()
{
InitListCtrl();
for (auto& salary : m_vecSalaries)
{
CString strTax;
strTax.Format(_T("%.2f"), salary.tax);
int nIndex = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), salary.name);
m_listCtrl.SetItemText(nIndex, 1, salary.id);
m_listCtrl.SetItemText(nIndex, 2, std::to_wstring(salary.basicSalary).c_str());
m_listCtrl.SetItemText(nIndex, 3, std::to_wstring(salary.postAllowance).c_str());
m_listCtrl.SetItemText(nIndex, 4, std::to_wstring(salary.bonus).c_str());
m_listCtrl.SetItemText(nIndex, 5, std::to_wstring(salary.medicalInsurance).c_str());
m_listCtrl.SetItemText(nIndex, 6, std::to_wstring(salary.providentFund).c_str());
m_listCtrl.SetItemText(nIndex, 7, strTax);
}
}
void CMyDialog::AddSalary()
{
// 获取控件中的工资信息
UpdateData(TRUE);
// 根据工资信息计算个人所得税
Salary salary;
salary.name = m_strName;
salary.id = m_strID;
salary.basicSalary = m_dBasicSalary;
salary.postAllowance = m_dPostAllowance;
salary.bonus = m_dBonus;
salary.medicalInsurance = m_dMedicalInsurance;
salary.providentFund = m_dProvidentFund;
CalculateTax(salary);
// 添加工资信息到列表框中
m_vecSalaries.push_back(salary);
DisplaySalary();
// 清空控件中的工资信息
m_strName.Empty();
m_strID.Empty();
m_dBasicSalary = 0;
m_dPostAllowance = 0;
m_dBonus = 0;
m_dMedicalInsurance = 0;
m_dProvidentFund = 0;
m_dTax = 0;
UpdateData(FALSE);
}
void CMyDialog::DeleteSalary()
{
// 获取选中的行数
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
MessageBox(_T("请先选择一条记录!"), _T("提示"), MB_ICONWARNING);
return;
}
m_nSelectedRow = m_listCtrl.GetNextSelectedItem(pos);
// 删除选中的工资信息
m_vecSalaries.erase(m_vecSalaries.begin() + m_nSelectedRow);
DisplaySalary();
}
void CMyDialog::EditSalary()
{
// 获取选中的行数
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
MessageBox(_T("请先选择一条记录!"), _T("提示"), MB_ICONWARNING);
return;
}
m_nSelectedRow = m_listCtrl.GetNextSelectedItem(pos);
// 在控件中显示选中的工资信息
Salary& salary = m_vecSalaries[m_nSelectedRow];
m_strName = salary.name;
m_strID = salary.id;
m_dBasicSalary = salary.basicSalary;
m_dPostAllowance = salary.postAllowance;
m_dBonus = salary.bonus;
m_dMedicalInsurance = salary.medicalInsurance;
m_dProvidentFund = salary.providentFund;
m_dTax = salary.tax;
UpdateData(FALSE);
}
void CMyDialog::SearchSalary()
{
// 获取控件中的查询条件
CString strName;
CString strID;
double dMinSalary;
double dMaxSalary;
UpdateData(TRUE);
strName = m_strName;
strID = m_strID;
UpdateData(FALSE);
// 根据查询条件筛选工资信息
std::vector<Salary> vecResult;
for (auto& salary : m_vecSalaries)
{
if (!strName.IsEmpty() && salary.name != strName)
continue;
if (!strID.IsEmpty() && salary.id != strID)
continue;
double dSalary = salary.basicSalary + salary.postAllowance + salary.bonus - salary.medicalInsurance - salary.providentFund - salary.tax;
if (dSalary < dMinSalary || dSalary > dMaxSalary)
continue;
vecResult.push_back(salary);
}
// 显示筛选结果到列表框中
m_vecSalaries = vecResult;
DisplaySalary();
}
void CMyDialog::CalculateTax(Salary& salary)
{
double dTotalSalary = salary.basicSalary + salary.postAllowance + salary.bonus;
double dTax = 0;
if (dTotalSalary <= 1500)
{
dTax = dTotalSalary * 0.03;
}
else if (dTotalSalary <= 4500)
{
dTax = dTotalSalary * 0.1 - 105;
}
else if (dTotalSalary <= 9000)
{
dTax = dTotalSalary * 0.2 - 555;
}
else if (dTotalSalary <= 35000)
{
dTax = dTotalSalary * 0.25 - 1005;
}
else if (dTotalSalary <= 55000)
{
dTax = dTotalSalary * 0.3 - 2755;
}
else if (dTotalSalary <= 80000)
{
dTax = dTotalSalary * 0.35 - 5505;
}
else
{
dTax = dTotalSalary * 0.45 - 13505;
}
salary.tax = dTax;
}
void CMyDialog::OnBnClickedBtnAdd()
{
AddSalary();
}
void CMyDialog::OnBnClickedBtnDelete()
{
DeleteSalary();
}
void CMyDialog::OnBnClickedBtnEdit()
{
EditSalary();
}
void CMyDialog::OnBnClickedBtnSearch()
{
SearchSalary();
}
```
员工工资管理系统源代码mfc
员工工资管理系统是一个用于管理公司员工工资信息的软件系统。它使用MFC(Microsoft Foundation Classes)作为开发框架,以C++语言编写源代码。
该系统的源代码包括多个文件,每个文件都有不同的功能和作用。主要的源代码文件包括但不限于以下几个方面:
1. 数据库连接:系统需要连接数据库来存储和管理员工的工资信息。源代码中包含数据库连接的相关代码,通过使用MFC提供的数据库操作类来实现对数据库的连接和查询。
2. 用户界面设计:员工工资管理系统需要一个友好的用户界面,使得用户可以方便地输入、查询和修改员工的工资信息。在源代码中,会包含与用户界面相关的代码,例如创建窗口、按钮、菜单等控件,以及其相应的事件处理函数。
3. 工资计算和统计:员工工资管理系统需要根据员工的工作时间、薪资标准等信息来计算每个员工的工资,并进行统计分析。源代码中会包含工资计算和统计的相关函数和算法。
4. 文件操作:员工工资管理系统可能需要将员工工资信息导入或导出到文件中,以备份或共享给其他系统。源代码中会包含与文件操作相关的代码,例如读取和写入文件的函数。
5. 安全性和权限管理:为了保护员工的隐私和保密性,员工工资管理系统需要具备一定的安全性和权限管理功能。源代码中会包含代码用于身份验证、权限控制等相关功能。
通过这些源代码文件,开发人员可以实现员工工资管理系统的各项功能,使其能够更好地管理和核算公司员工的工资信息。同时,使用MFC作为开发框架,可以提供更强大的界面设计和数据库操作功能,为用户提供更好的使用体验。