Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 28.06.2009
Сообщений: 4
1

Осуществить поиск по категории, удаление по номеру телефона абонента

28.06.2009, 07:33. Просмотров 929. Ответов 2
Метки нет (Все метки)

Здравствуйте! У меня есть программа, но она работает не так как нужно. Требуется организовать добавление, хранение, поиск, просмотр, удаление элементов структуры в виде списка: в моём случае нужно осуществить поиск по категории, удаление по номеру телефона абонента. Т.е. пользователем вводится список справок о междугородних телефонных разговорах. Справка содержит: номер телефона абонента, год, месяц, день, код города, номер телефона в другом городе, продолжительность разговора (в минутах), категорию (срочный, обычный) и тариф (плата в рублях за минуту). Вот код программы:
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
151
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "iostream"
#include "string"
 
int main()
{
    int n,i,nomer1;           //n - количество справок (абонентов) в списке, nomer1 - номер телефона, звонок которого нужно удалить, categoria1 - категория, по которой нужно найти звонок
    char categoria1[10];
    struct spravka{
     int day;
     int month;
     int year;
     int nomer;
     int kod;
     int nomer2;
     int time2;
     char categoria[10];
     int tarif;
     spravka *s;          //указатель на структуру
    }abonent[100];
spravka *head=new spravka // используется для хранения «головы» списка 
spravka *pointer=head;    //………………………………для перемещения по элементам списка
spravka *pointer2=NULL;
printf("Enter kolichestvo abonentov\n");
scanf("%i",&n);
 
for (i=0;i<=n-1;i++){
    pointer->s=new spravka;
    printf("\nVvedite nomer telefona\n");
    scanf("%i",&pointer->nomer);
 
    printf("Vvedite den\n");
    scanf("%i",&pointer->day);
 
    printf("Vvedite mesiac\n");
    scanf("%i",&pointer->month);
 
    printf("Vvedite god\n");
    scanf("%i",&pointer->year);
 
    printf("Vvedite kod goroda\n");
    scanf("%i",&pointer->kod);  
    
    printf("Vvedite nomer telefona v drugom gorode\n");
    scanf("%i",&pointer->nomer);
 
    printf("Vvedite prodolzhitelnost razgpvora\n");
    scanf("%i",&pointer->time2);
 
    printf("Vvedite kategoriu\n");
    scanf("%s",&pointer->categoria);
 
    printf("Vvedite tarif\n");
    scanf("%i",&pointer->tarif);
    
    pointer=pointer->s;
    
}
pointer->s=NULL;
 
pointer = head;
 
printf("\n");
 
while(pointer->s!=NULL){
 
    printf("Nomer telefona - %d\n",pointer->nomer);
    printf("Date - %d.%d.%d\n",pointer->day,pointer->month,pointer->year);
    printf("Kod goroda - %d\n",pointer->kod);
    printf("Nomer telefona v drugom gorode - %d\n",pointer->nomer2);
    printf("Prodolzhitelnost razgovora - %d\n",pointer->time2);
    printf("Kategoriya zvonka - %s\n",pointer->categoria);
    printf("Tarif - %d\n",pointer->tarif);
    printf("\n");
 
    pointer=pointer->s;
}
 
pointer->s=NULL;
 
pointer = head;
 
printf("Vvedite kategoriu zvonka kotoryi vam nugno naiti\n");
scanf("%s",&categoria1);
 
while(pointer->s!=NULL){
    if (categoria1==pointer->categoria){
        printf("Nomer telefona - %d\n",pointer->nomer);
        printf("Date - %d.%d.%d\n",pointer->day,pointer->month,pointer->year);
        printf("Kod - %d\n",pointer->kod);
        printf("Nomer telefona v drugom gorode - %d\n",pointer->nomer2);
        printf("Prodolzhitelnost' - %d\n",pointer->time2);
        printf("Kategoriya - %c\n",pointer->categoria);
        printf("Tarif - %d\n",pointer->tarif);
        printf("\n");
        break;
    }
        pointer=pointer->s;
}
printf("Zvonka s takoi kategoriei net v spiske\n");
pointer->s=NULL;
 
pointer = head;
printf("Vvedite nomer telefona,kotorogyi nuzhno udalit\n");
scanf("%i",&nomer1);
 
while(pointer->s!=NULL){
 
        if (nomer1==pointer->nomer) {   
        if (pointer=head    ){
            head = head->s;
 
        };
        pointer2=pointer;
        pointer2->s = pointer->s;
        delete pointer;
        break;
        
    }
    
    pointer=pointer->s;
}
 
 
pointer->s=NULL;
 
pointer = head;
 
printf("\n");
 
while(pointer->s!=NULL){
 
    printf("Nomer telefona - %d\n",pointer->nomer);
    printf("Date - %d.%d.%d\n",pointer->day,pointer->month,pointer->year);
    printf("Kod goroda - %d\n",pointer->kod);
    printf("Nomer telefona v drugom gorode - %d\n",pointer->nomer2);
    printf("Prodolzhitelnost razgovora - %d\n",pointer->time2);
    printf("Kategoriya zvonka - %s\n",pointer->categoria);
    printf("Tarif - %d\n",pointer->tarif);
    printf("\n");
 
    pointer=pointer->s;
}
 
getch();
getch();
return 0;
}
Дело в том, что после ввода данных при дальнейшем выводе в строке номера телефона абонента выводится номер телофона в другом городе, а в строке номера телефона в другом городе выводятся непонятные цифры, ещё при поиске по категории выводится сообщение, что звонка с такой категорией нет в списке (хотя он есть) и после запроса номера телефона, звонок которого нужно удалить, выводятся просто все звонки. Помогите разобраться с указателями! Подскажите, пожалуйста, что и где исправить!
А то если я не сдам эту и ещё одну лабораторные, меня не допустят к экзамену во вторник и оставят на осень...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2009, 07:33
Ответы с готовыми решениями:

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

По номеру телефона вывести ФИО и адрес абонента
Уважаемые форумчане! Прошу помощи в написании программы первокурснику В виде массива записей...

По номеру телефона вывести ФИО и адрес абонента
Доброго времени суток, уважаемые форумчане! Очень прошу помочь доработать программу, текст которой...

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

2
12 / 12 / 5
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
05.07.2009, 06:35 2
Можно больше комментариев по началу хоть немного понятно что программа делает но дальше полный капут
0
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
05.07.2009, 08:14 3
1)каковы функции "abonent[100]" ?
типа, от нефиг делать?

2)строчные переменные через "==" не сравниваются!
вот это условие
Цитата Сообщение от RODRIGEZ Посмотреть сообщение
C
1
 if (categoria1==pointer->categoria){
работать не будет.
см. MSDN, раздел "String Manipulation (CRT)".

3)вот эти два куска:
Цитата Сообщение от RODRIGEZ Посмотреть сообщение
C
1
2
        printf("\nVvedite nomer telefona\n");
        scanf("%i",&pointer->nomer);
Цитата Сообщение от RODRIGEZ Посмотреть сообщение
C
1
2
        printf("Vvedite nomer telefona v drugom gorode\n");
        scanf("%i",&pointer->nomer);
ссылаются на один и тот-же элемент структуры.
так надо?

4)
Цитата Сообщение от RODRIGEZ Посмотреть сообщение
C
1
2
3
                pointer2=pointer;
                pointer2->s = pointer->s;
delete pointer;
а это что делает?
размножил указатель, и присвоил переменной ее-же значение...
а потом удалил указатель нафиг.
и получилась в списке дырка.

и оно у тебя с ошибкой не вываливается в последнем цикле печати???
счастливчик.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2009, 08:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Удаление дубликатов по номеру абонента из таблицы
Есть таблица ABONENT IVR -------------------- --------------------...

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

Организовать поиск по номеру телефона
Добрый вечер! по условию задачи я реализовал ввод данных телефонной книги (скрин). они...

Структура: Поиск студента по номеру телефона
Список содержит фамилии студентов и номер телефона в виде0-00-00.предусмотреть правильноть...


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

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

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