0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 12
1

Написать программу, которая по заданной фамилии выводит на экран сведения о сотруднике

04.03.2014, 22:54. Показов 2561. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят, только начали Объектно-Ориентированное и я не могу придумать ничего.
Задание: В текстовом файле хранится база отдела кадров предприятия. На предприятии
100 сотрудников. Каждая строка файла содержит запись об одном сотруднике.
Формат записи: фамилия и инициалы (30 позиций, фамилия должна начинаться с
первой позиции), год рождения (5 позиций), оклад (10 позиций). Написать программу,
которая по заданной фамилии выводит на экран сведения о сотруднике,
подсчитывая средний оклад всех запрошенных сотрудников.

Код я переписал с Павловской, частично исправив сам, но есть проблемы. Первая: Допустим в текстовом файле есть 3 Петровых, а на консоль выводится только первый. Вторая: может я с кодом начудил, но он средний оклад не считает. Ну и третья: Компилятор не может прочитать русский язык, приходится все фамилии английскими буквами писать.
Помогите пожалуйста)
Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// Man.h
    //#include "CyrIOS.h" // for Visual C++ 6.0
 
    const int l_name = 30;
    const int l_year = 5;
    const int l_pay = 10;
    const int l_buf = l_name + l_year + l_pay;
 
    class Man {
    public:
    Man(int lName = 30); 
    ~Man(); 
    bool CompareName(const char*) const; 
    int GetBirthYear() const { return birth_year; } 
    float GetPay() const { return pay; } 
    char* GetName() const { return pName; } 
    void Print() const; 
    void SetBirthYear(const char*); 
    void SetName(const char*); 
    void SetPay(const char*); private:
    char* pName; 
    int birth_year; 
    float pay; };
    ///////////////////////////////////////////////////////////
    // Man.cpp
    #include<iostream>
#include<cstring>
#include<windows.h>
#include<fstream>
#include "Man.h"
using namespace std;
char bufRus[256];
char* Rus(const char* text)
{
    CharToOem(text,bufRus);
    return bufRus;
}
    
 
    Man::Man(int lName) {
    cout << "Constructor is working" << endl; 
    pName = new char[lName + 1]; }
    Man::~Man() {
    cout << "Destructor is working" << endl; 
    delete [] pName; }
    void Man::SetName(const char* fromBuf) {
    strncpy(pName, fromBuf, l_name); 
    pName[l_name] = 0; }
    void Man::SetBirthYear(const char* fromBuf) {
    birth_year = atoi(fromBuf + l_name); }
    void Man::SetPay(const char* fromBuf) {
    pay = atof(fromBuf + l_name + l_year); }
    bool Man::CompareName(const char* name) const {
    if ((strstr(pName, name)) && (pName[strlen(name)] == ' ')) 
    return true; 
    else 
    return false; }
    void Man::Print() const {
    cout << pName << birth_year << ' ' << pay << endl; }
    ///////////////////////////////////////////////////////////
 
    const char filename[] = "dbase.txt";
    int main() {
    const int maxn_record = 10; 
    Man man[maxn_record]; 
    char buf [l_buf + 1]; 
    char name[l_name + 1];
 
    ifstream fin(filename); 
    if (!fin) { 
    cout <<Rus("Нет файла ")<< filename << endl; return 1; 
    } 
    int i = 0; 
    while (fin.getline(buf, l_buf)) { 
    if (i >= maxn_record) { 
    cout << Rus("Слишком длинный файл"); return 1; } 
    man[i].SetName(buf); 
    man[i].SetBirthYear(buf); 
    man[i].SetPay(buf); 
    i++; 
    } 
    int n_record = i, n_man = 0; 
    float mean_pay = 0;
 
    while (true) { 
    cout <<Rus( "Введите фамилию или слово end: "); 
    cin >> name; 
    if (0 == strcmp(name, "end")) break; 
    bool not_found = true; 
    for (i = 0; i < n_record; ++i) { 
    if (man[i].CompareName(name)) { 
    man[i].Print(); 
    n_man++; mean_pay += man[i].GetPay(); 
    not_found = false; 
    break; 
    } 
    } 
    if (not_found) cout << Rus("Такого сотрудника нет") << endl; 
    } 
    if (n_man) cout <<Rus( " Средний оклад: " )<< mean_pay / n_man << endl; 
    return 0; }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2014, 22:54
Ответы с готовыми решениями:

Написать программу, которая выводит на экран сведения об учителях школы, у которых нет домашнего телефона
Написать программу, которая выводит на экран сведения об учителях школы, у которых нет домашнего...

Написать программу, которая выводит фамилии студентов, имеющих хотя бы одну задолженность
В структуре содержится информация о результатах летней сессии студентов первого курса. О каждом...

Написать программу, которая выводит фамилии сотрудников в порядке убывания зарплаты (зарплата=оклад+премия)
На вход программе подаются сведения о сотрудниках некоторой организации. Сначала сообщается...

Написать программу, которая по заданной фамилии студента находит и печатает его телефонный номер
2 задача. Написать программу, которая по заданной фамилии студента находит и печатает его...

2
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
05.03.2014, 05:00 2
Pro100NoObik, брейк убери из ифа с поиском.
C++
1
(double)mean_pay / n_man
0
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
05.03.2014, 05:00 3
Pro100NoObik, брейк убери из ифа с поиском.
C++
1
(double)mean_pay / n_man
0
05.03.2014, 05:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2014, 05:00
Помогаю со студенческими работами здесь

Написать программу, которая выводит на экран узор
Написать программу, которая выводит на экран узор, изображенный ниже. Контур прямоугольников...

Написать программу, которая выводит на экран изображение
Need help!!!! Помогите решить задачи на языке С++!!! 1)...

Написать программу, которая выводит на экран узор
Написать программу, которая выводит на экран узор, изображенный ниже (использовать циклы):

Написать программу, которая выводит круг на экран
Нужно написать программу,которая выводит круг на экран.Его цвет,размер и положение на экране...

Написать программу которая выводит на экран график
Напишите программу, которая выводит на экран следующий график: * * * * * * * * * * * * * * ...

Написать программу, которая выводит на экран узор
изображенный ниже


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru