Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 150
Завершенные тесты: 1
#1

Найти телефон сотрудника по фамилии и инициалах (работа с файлами С++) - C++

28.03.2013, 22:04. Просмотров 593. Ответов 5
Метки нет (Все метки)

Задан файл, который содержит номера телефонов сотрудников: указывается фамилия и инициалы, номер телефона. Найти телефон сотрудника по его фамилии и инициалах.
Как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2013, 22:04     Найти телефон сотрудника по фамилии и инициалах (работа с файлами С++)
Посмотрите здесь:

Найти в записной книжке телефон по фамилии - C++
5 В записной книжке указаны фамилии и номера телефонов 30-ти человек. Составить программу которая определяет, есть ли в записной книжке...

Найти фамилии и адреса людей,чей телефон начинается с цифры 3 - C++
Здравствуйте! Подскажите как реализовать эту задачу?! Известны фамилии,адреса и телефоны 25-ти человек,Найти фамилии и адреса людей,чей...

Считать данные с файла и вывести фамилии студентов, проживающих дома и имеют домашний телефон - C++
Массив структур местит информацию о 30 студентов: фамилия; имя; место проживания (общежитие или дома); номер телефона (если он есть)....

Работа с файлами ( найти ошибку) - C++
Мне нужно реализовать программу таким образом:Все выходные данные записываются в файл,и входные считываются с файла Моя проблема в том,...

Работа с файлами. Найти контрольную сумму - C++
Помогите составить задачу. Файл текстовый. Алгоритм контрольной суммы стандартный. Составить программу, которая: 1) Формирует файл...

Работа с файлами, помогите найти ошибку. - C++
Нужно написать программу которая будет выписывать в файл значения синуса от 0 до 2Pi с шагом Pi/11 в два столбика-в первом угол, во втором...

Работа с файлами (найти маленький косяк) - C++
Помогите найти косяк в программе. Нужно считать слов с одного файла и перезаписать их в обратном порядке в другой файл. Считывание файла я...

Работа с файлами в Си, не могу найти ошибку в коде - C++
Язык: "Си" Задача: "Создать файл, содержаший сведения о месячной зарплате N рабочих завода. В файле содержатся сведения: фамилия...

Работа с текстовыми файлами: найти последний символ в строке - C++
Задача: Текстовый файл состоит из нескольких строк. Записать во второй файл последние символы из каждой строки первого файла. Какую...

Работа с файлами: найти самое длинное слово в тексте - C++
Найти самое длинное слово в тексте. Затем найденное слово изменить наоборот. Например найденное слово:"ZXCVBNM" и вывести его...

Работа с файлами: как найти слово в отдельном текстовом файле? - C++
Нам даны два файла, нужно в одном файле взять одно слово, во втором файле взять другое слово...и заменить их!!! какие есть идеи?! Язык...

С чего начать написание программы, которая будет упорядочивать символы в именах и инициалах? - C++
Много страниц облазил,решил,может тут помогут,не могу монять,с чего начать даже:с


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
28.03.2013, 23:12     Найти телефон сотрудника по фамилии и инициалах (работа с файлами С++) #2
Я предполагаю, что формат файла: одна строка - одна запись.

Кроме того, фамилия и инициалы не должны содержать цифр, а номер телефона - букв. Считаем однобуквенные и небуквенные фамилии недопустимыми. Вероятно, дополнительно, следует договориться о порядке следования инициалов: первый - имя, второй - отчество, остальное несущественно.

Тогда так: считываете файл построчно, разбираете строку на слова. Если слово содержит только цифры - это номер телефона, если только одну букву - это инициал, если две и больше букв - фамилия.

Заполняете массив структур вида:

C++
1
2
3
4
5
6
7
struct PHONE_BOOK_RECORD
{
   char        pszPhone  [MAX_PHONE_NUM_LEN + 1];
   char        pszSurname[MAX_SURNAME_LEN   + 1];
   char        cName;
   char        cPatronymic;
}
Сортируете массив по фамилии, первому и второму инициалу (Multikey sort). Ищете бинарным поиском. Учтите, возможны полные тезки!
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2013, 06:35     Найти телефон сотрудника по фамилии и инициалах (работа с файлами С++) #3
Данные в файле:

Иванов И.В. 1234563
Петров С.Е. 4567890
Сидоров А.А. 2345676
Иванов И.В. 5678954

В строке три слова, разделённых любым количеством пробелов. Вводятся два слова: фамилия и инициалы, разделённые одним пробелом.

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
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    ifstream fin("file.txt");
    if (fin.is_open()) 
    {
        char ch;
        do
        {
            string name;
            cout << "Enter the name: ";
            getline(cin, name);
 
            string name_f;
            string number;
            int flag = 0;
            
            while (true)
            {
                string temp;
                
                fin >> temp;
                name_f = temp + ' ';
                
                fin >> temp;
                if (fin.eof()) break;
                name_f.append(temp);
                
                fin >> number;
                
                if (name_f == name) 
                {
                    cout << name << ' ' << number << endl;
                    flag = 1;
                }
            }
            if (flag == 0) cout << "Not is found!" << endl;
            
            cout << "Continue? (y/n): ";
            (cin >> ch).get();
            if (ch != 'y') 
            {
                fin.close();
                break;
            }
            
            flag = 0;
            fin.clear();
            fin.seekg(0);
        
        } while (true);
    }
    else cout << "Error!" << endl;
    
    system("pause");
    return 0;
}
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 150
Завершенные тесты: 1
29.03.2013, 20:25  [ТС]     Найти телефон сотрудника по фамилии и инициалах (работа с файлами С++) #4
спасибо большое)
вот только еще одна маленькая проблема...
в консоле при вводе и выводе иероглифы
если писать setlocale (LC_ALL, ""); то в консоли с символами все нормально, но тогда оно не хочет сравнивать введенную строку и строку из файла.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2013, 20:34     Найти телефон сотрудника по фамилии и инициалах (работа с файлами С++) #5
Правой кнопкой по окну запущенной консоли, и настроить шрифт консоли, как здесь показано.
Англо русский переводчик

Добавлено через 2 минуты
Цитата Сообщение от gorus95 Посмотреть сообщение
если писать setlocale (LC_ALL, ""); то в консоли с символами все нормально
Нормально только на вывод, а нужно и на ввод, поэтому нужно сделать, как в коде.
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 150
Завершенные тесты: 1
29.03.2013, 21:24  [ТС]     Найти телефон сотрудника по фамилии и инициалах (работа с файлами С++) #6
alsav22, теперь все отлично работает. круто, спасибо еще раз)
Yandex
Объявления
29.03.2013, 21:24     Найти телефон сотрудника по фамилии и инициалах (работа с файлами С++)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru