С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 13
1

Работа с файлами: по фамилии абонента выдать номер телефона

05.06.2017, 18:40. Показов 4481. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Есть несколько вопросов по поводу работы с файлами, надеюсь вы поможете разобраться)

Вот, собственно, условие задачи.


Создать файл, содержащий сведения о телефонах абонентов. Каждая запись содержит поля: фамилия абонента, год установки телефона, номер телефона. Количество записей произвольное. Написать программу, выводящую на экран следующую информацию:
- по фамилии абонента выдаётся номер телефона;
- определяется количество установленных телефонов с XXXX года.

Вот код, того, что я сделал
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
#include <conio.h>
#include <stdio.h>
#include<locale.h>
FILE* myf;
 
 
int main ()
{
setlocale(LC_ALL, "Russian");
 
        char name[10];
        int year;
        int number;
 
 
 
 myf = fopen ("mobile.txt", "r+a");
 
  
        if (!myf) {
 
        printf ("Файл не найден!\n");
 
         return 1; 
        }
    
    printf("Введите фамилию абонента\n");
    scanf("%s",name[10] );
    while (!feof(myf)) {
                                // я знаю про такую функцию, как fgets, но, как я понимаю
                                               //  она взаимодействует только с целой строкой,  
                                               // не разделяя записанные значения на элементы 
            }
 
}
Так же есть текстовый файл
Вопрос вот в чем, как взаимодействовать с определенными данными в строке?( в моем случае, фамилия=номер)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
05.06.2017, 18:40
Ответы с готовыми решениями:

Телефонная книга: по фамилии абонента выдать номер телефона
Добрый день. Вот условие задачи. Создать книжку, содержащую сведения о телефонах абонентов....

По вводимой фамилии абонента выдавать номер телефона
Ну пожалуйста помогите, нужно срочно что бы по вводимой фамилии абонента, выдается номер телефона;...

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

Найти номер телефона указанного абонента с максимальной суммой оплаты
ПаскалЬ(поиски, замена положения в массиве)(ПСЕВДО БД) Здравствуйте, очень нужна ваша помощь....

6
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 13
05.06.2017, 18:43  [ТС] 2
Так же есть текстовый файл
Вложения
Тип файла: txt mobile.txt (70 байт, 47 просмотров)
0
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
05.06.2017, 19:14 3
Цитата Сообщение от Rastfire Посмотреть сообщение
Вопрос вот в чем, как взаимодействовать с определенными данными в строке?( в моем случае, фамилия=номер)
структуру надо использовать
0
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 13
05.06.2017, 21:28  [ТС] 4
Извините, со структурами я разобрался, но каким образом ее присобачить сюда, вообще не представляю
0
0 / 0 / 0
Регистрация: 12.04.2016
Сообщений: 1
05.06.2017, 22:53 5
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include "stdafx.h"
 
struct NODE
{
  char *fio;         // фамилия
  char *tel;         // тел
  int  year;         //год
  struct NODE *next; // указатель на след абонента
};
 
// указат на перв эл списка
struct NODE *list, *cur;
 
 
char buf[1024];
 
 
char fio[1024];
 
 
char tel[1024];
 
 
int year;
 
// дескриптор файла
FILE *f;
 
char *s, *p1, *p2, *p3, c;
 
int record, cnt;
 
int main(int argc, char* argv[])
{
  printf ("Name file? ");
  gets (buf);
 
  if ((f = fopen (buf, "r")) == NULL)
  {
    printf ("File not found\nPress any key for exit...");
    getch ();
    return 0;
  }
 
  // чтение и формирование списка абонентов
  while (fgets (buf, sizeof (buf) - 1, f))
  {
    // увеличиваем номер записи
    ++record;
 
    // получаем параметры абонента
    if (sscanf (buf, "%s %d %s", fio, &year, tel) != 3)
    {
      printf ("[%d] err\n", record);
      continue;
    }
 
    // получ память для абонента списка
    cur = (struct NODE *)malloc (sizeof (struct NODE));
 
    // теперь помещаем данные для эл-та списка
    cur->fio = (char *)malloc (strlen (fio) + 1);
    strcpy (cur->fio, fio);
    cur->tel = (char *)malloc (strlen (tel) + 1);
    strcpy (cur->tel, tel);
    cur->year = year;
 
    // эл-т в начало списка
    cur->next = list;
    list = cur;
  }
 
  fclose (f);
 
  // проверочка есть ли данные в списке
  if (list == NULL)
  {
    printf ("Not information abonent\nPress any key for exit...");
    getch ();
    return 0;
  }
 
  printf
  (
    "Help:\n"
    "f <xxx>  - print telephon for xxx\n"
    "y <xxx>  - print count tel after year xxx\n"
    "e        - exit\n"
  );
  
  for (;;)
  {
    printf ("/");
    gets (buf);
    switch (buf[0])
    {
 
    case 'f': case 'F':
      if (sscanf (buf + 1, "%s", fio) != 1)
        break;
 
      //есть ли фамилиё в списке?
      for (cur = list; cur; cur = cur->next)
      {
        if (strcmp (cur->fio, fio) == 0)
        {
          printf ("TEL: %s YEAR: %d\n", cur->tel, cur->year);
          break;
        }
      }
 
      if (cur == NULL)
        printf ("FIO not found\n");
      continue;
 
    case 'y': case 'Y':
      if (sscanf (buf + 1, "%d", &year) != 1)
        break;
 
      // счет количества телефонов поле заданного года
      for (cur = list, cnt = 0; cur; cur = cur->next)
      {
        if (cur->year >= year)
        {
          ++cnt;
        }
      }
 
      if (cnt == 0)
        printf ("Not found telephon after year %d\n", year);
      else
        printf ("Count telephon after year %d = %d\n", year, cnt);
      continue;
 
    case 'e': case 'E':
    
      while (list)
      {
        free (list->fio);
        free (list->tel);
        cur = list->next;
        free (list);
        list = cur;
      }
      return 0;
    }
 
    printf ("Error command\n");
  }
}
0
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 13
06.06.2017, 10:51  [ТС] 6
Дичь же
0
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
07.06.2017, 05:33 7
Цитата Сообщение от Rastfire Посмотреть сообщение
со структурами я разобрался
Цитата Сообщение от Rastfire Посмотреть сообщение
но каким образом ее присобачить сюда, вообще не представляю
как-то не вяжется одно с другим
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
#define MAX 40
 
struct abonent
{
    char name[MAX];
    int year;
    char number[MAX];
};
int main()
{
    struct abonent primer;
    FILE *pab;
    char buff[MAX];
    int flag = 0;
    if(!(pab = fopen("abonents.txt", "a+b"))){
        fputs("Can not open file abonents.txt\n", stderr);
        exit(1);
       }
    for(int i = 0; i < N; i++){
        puts("Enter name:");
        scanf("%s", primer.name);
        puts("Enter year:");
        scanf("%d", &primer.year);
        while(getchar() != '\n');
        puts("Enter number:");
        scanf("%s", primer.number);
        fprintf(pab, "%s %d %s\n", primer.name, primer.year, primer.number);
    }
    puts("Enter phone number:");
    scanf("%s", buff);
    rewind(pab);
    while(3 == fscanf(pab, "%s%d%s", primer.name, &primer.year, primer.number)){
        if(!strcmp(primer.number, buff)){
           printf("%s\n", primer.name);
           flag = 1;
        }
    }
    if(!flag)
        puts("Number not found");
    fclose(pab);
    return 0;
}
еще нужно добавить проверки ввода и п.2 из задания. Самостоятельно.
0
07.06.2017, 05:33
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
07.06.2017, 05:33
Помогаю со студенческими работами здесь

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

Запись данных. Структура записи: фамилия абонента, номер телефона, тип заказа
Здравствуйте. Помогите пожалуйста решить следующее задание: Составить программу,...

Записи и типизированые файлы. Структура: ФИО абонента, год установки, номер телефона
Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля: фамилия...

Опишите массив записей, содержащих фамилию абонента и номер его телефона. Запрограммируйте двоичный поиск в
Опишите массив записей, содержащих фамилию абонента и номер его телефона. Запрограммируйте двоичный...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru