| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1379 人关注过本帖
标题:一直修改还是达不到我想要的,就麻烦大家帮我修改完善一下程序,先谢过了
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
vc6我没测试环境,不保证完全兼容哦。可运行的程序在隔壁我发的测试帖中。

[ 本帖最后由 TonyDeng 于 2015-5-4 16:37 编辑 ]

授人以渔,不授人以鱼。
2015-05-04 11:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
员工编号既要自动编码,又能删除记录,这两者之间有很深的陷阱,需要再改动一下才行。

授人以渔,不授人以鱼。
2015-05-04 16:36
Vsnow
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:124
专家分:145
注 册:2015-1-3
收藏
得分:0 
嗯,好的。我仔细看看,版主辛苦~~~~,O(∩_∩)O谢谢
2015-05-04 17:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你能不能安装支持C++11的编译器vs2013?我担心就算把代码改为vs2010支持的,用vc6也未必能编译,到时你不会修改,那更麻烦。wube倒是会改,我也不清楚具体哪些地方不兼容。

授人以渔,不授人以鱼。
2015-05-04 18:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
类似这个样子的看得明白吗?

程序代码:
/*
http://bbs.bccn.net/thread-444643-1-1.html

定义一个能够记录公司员工工资的类, 比如包括:员工号,姓名,基本工资,补贴金额,奖励金额,扣税,实发工资等),
其中实发工资=基本工资+补贴金额+奖励金额-扣税。
要求:
1)新增功能,能输入10个员工信息并计算出实发工资,并且员工编号在生成员工信息时同时生成;(提示:使用构造函数生成员工编号)
2)要求对所有员工都能按照名称或编号进行显示、查找、增加和修改的功能;
3)统计出员工的平均工资。
以运行结果文本菜单的形式输出

开发环境:Visual Studio 2013
    语言:Visual C++ V12.0
    标准:C++ 11
*/

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <vector>
#include "Tools.h"
#include "Menu.h"
#include "Employee.h"

// 全局数据
std::vector<Employee> Employees;        // 员工数据库

// 函数原型
void InitData(void);
void Append(void);
void Find(void);
void Edit(void);
void Delete(void);
void Statistics(void);
void List(void);

// 程序主入口
int main(void)
{
    const std::vector<Menu::Item> menuList = {
        { '1', "1 - 新增员工", Append },
        { '2', "2 - 查找员工", Find },
        { '3', "3 - 修改资料", Edit },
        { '4', "4 - 删除员工", Delete },
        { '5', "5 - 工资统计", Statistics },
        { '6', "6 - 员工明细", List },
        { '0', "0 - 结束程序", nullptr }
    };
    Menu menu(menuList);

    InitData();

    while (true)
    {
        ClearScreen();
        menu.Show();
        Menu::Item& choiceItem = menu.Choice();
        if (choiceItem.func == nullptr)
        {
            break;
        }
        (*choiceItem.func)();
    }

    return EXIT_SUCCESS;
}

void InitData(void)
{
    Employees.push_back(Employee(5, "周伯通", 3000, 1000, 2000, 300));
    Employees.push_back(Employee(0, "黄药师", 3200, 1500, 1100, 200));
    Employees.push_back(Employee(1, "欧阳锋", 2500, 1000, 5000, 100));
    Employees.push_back(Employee(0, "洪七公", 2800, 2000, 1500, 230));
    Employees.push_back(Employee(0, "一灯大师", 1000, 4000, 1000, 0));
}

void Append(void)
{
    Employees.push_back(Employee(0, "", 0, 0, 0, 0));
    Employees.back().Edit();
}

void Find(void)
{
    ClearScreen();

    printf_s("[查找员工]\n\n");
    printf_s("员工编号: ");

    int id;
    std::cin >> id;
    printf_s("\n");

    Employee* employeePtr = Employee::Find(id, Employees);
    if (employeePtr != nullptr)
    {
        employeePtr->Show();
    }
    else
    {
        std::cout << "没有指定编号的员工" << std::endl;
    }

    Pause();
}

void Edit(void)
{
    int id;

    ClearScreen();

    std::cout << "[编辑员工资料]" << std::endl << std::endl;
    std::cout << "员工编号: ";
    std::cin >> id;

    Employee* employeePtr = Employee::Find(id, Employees);
    if (employeePtr != nullptr)
    {
        employeePtr->Edit();
    }
}

void Delete(void)
{
    int id;

    ClearScreen();

    printf_s("\n[删除员工]\n\n");
    printf_s("员工编号: ");
    std::cin >> id;

    Employee* employeePtr = Employee::Find(id, Employees);
    if (employeePtr != nullptr)
    {
        for (std::vector<Employee>::iterator it = Employees.begin(); it != Employees.end(); ++it)
        {
            if (it->ID() == employeePtr->ID())
            {
                Employees.erase(it);
                break;
            }
        }
    }
    else
    {
        std::cout << "没有指定编号的员工" << std::endl;
    }
}

void Statistics(void)
{
    double totalWage = 0.0;
    size_t number = 0;
    for (Employee employee : Employees)
    {
        totalWage += employee.Wage();
        ++number;
    }
    printf_s("\n平均工资: %.2f\n", totalWage / number);
    Pause();
}

void List()
{
    ClearScreen();
    Employee::Show(Employees);
    Pause();
}


[ 本帖最后由 TonyDeng 于 2015-5-4 21:48 编辑 ]

授人以渔,不授人以鱼。
2015-05-04 21:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其中一个头文件:

Employee.h
程序代码:
#pragma once

#include <string>
#include <vector>

class Employee
{
    private:

        int _id;
        std::string _name;
        double _basicSalary;
        double _subsidy;
        double _award;
        double _tax;

    public:

        int ID(void)             { return _id; }                                        // 编号
        std::string Name(void)   { return _name; }                                      // 姓名
        double BasicSalary(void) { return _basicSalary; }                               // 基本工资
        double Subsidy(void)     { return _subsidy; }                                   // 补贴
        double Award(void)       { return _award; }                                     // 奖励
        double Tax(void)         { return _tax; }                                       // 税金
        double Wage(void)        { return _basicSalary + _subsidy + _award - _tax; }    // 实发工资

        // 构造函数
        // 备注:当参数id为零时,编号自增编码,否则以传入值为编号。计数器取其大者。
        Employee(int id, std::string name, double basicbasicSalary, double subsidy, double award, double tax);

        void Show(void);
        void Edit(void);

        //--------------------------------
        // 以下为类静态方法
        //--------------------------------
        static void Show(std::vector<Employee>& employees);
        static Employee* Find(int id, std::vector<Employee>& employees);
};

授人以渔,不授人以鱼。
2015-05-04 21:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
Menu.h
程序代码:
#pragma once

#include <string>
#include <vector>

class Menu
{
    public:

        // 菜单条结构
        struct Item
        {
            char        KeyChar;            // 按键字符
            std::string Text;               // 菜单项文本
            void        (*func)(void);      // 选择该菜单项时执行的函数
        };

        std::vector<Item> List;             // 菜单列表

        Menu(const std::vector<Item>& m) : List(m) {}
        void Show(void);
        Item& Choice(void);

    private:

        std::vector<Item>::size_type FindKey(char key) const;
};

授人以渔,不授人以鱼。
2015-05-04 21:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
多文件项目的做法,留意右侧的解决方案结构:

图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2015-05-04 22:01
c语言总虐我
Rank: 2
等 级:论坛游民
帖 子:112
专家分:66
注 册:2014-11-22
收藏
得分:0 

连渣都不是——5.8
要拜雍正,专治八阿哥  b u g——6.27
2015-05-04 22:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
使用vector(矢量容器),并不需要限制员工的数目,数据无限伸缩,属于动态数组。如果你不会这个(我不大清楚VC++6是否支持得好),那么要改用自己维护数组,代码量增大许多,当然,要做也是可以办得到的,自己想办法吧。其实按照《C++ Primer》的主张,是不教学生用C字符串和数组的了,前者用string替代,后者用vectot替代,作者的观点,是重点在思想,要改变过去的观念有难度,尤其是C++11标准之后,程序员要思想革命,并不是那么好学。我只能说,坚守旧习惯和XP的人,要小心了!

授人以渔,不授人以鱼。
2015-05-04 22:36
快速回复:一直修改还是达不到我想要的,就麻烦大家帮我修改完善一下程序,先谢过 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024213 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved