使用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作为开发框架,可以提供更强大的界面设计和数据库操作功能,为用户提供更好的使用体验。

相关推荐

最新推荐

recommend-type

基于MFC下的工资管理系统doc文档

mfc工资管理系统。Access数据库连接。内容简介,易懂。需要的朋友可以下载看看
recommend-type

MFC实现学生选课系统

主要为大家详细介绍了MFC实现学生选课系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C++使用MFC获取PC硬件配置信息

主要为大家详细介绍了C++使用MFC获取PC硬件配置信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

MFC MSFlexGrid基本使用

MFC MSFlexGrid基本使用 MFC MSFlexGrid基本使用 MFC MSFlexGrid基本使用 MFC MSFlexGrid基本使用
recommend-type

如何使用visual studio2019创建简单的MFC窗口(使用C++)

主要介绍了如何使用visual studio2019创建简单的MFC窗口(使用C++),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。