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

Подскажите, пожалуйста, что неправильно ? - C++

Восстановить пароль Регистрация
 
Анна29
Сообщений: n/a
22.06.2012, 16:38     Подскажите, пожалуйста, что неправильно ? #1
В файловой системе каталог файлов организован в виде линейного списка
Для каждого файла в каталоге содержатся следующие сведения:
* имя файла
* дата создания
* количество обращений к файлу
Написать программу, которая обеспечит:
1)начальное формирование каталога файлов
2)вывод каталога файлов
3)удаление файлов, дата создания которых меньше заданной
4)выборку файла с наибольшим количеством обращений
Программа должна обеспечить диалог с помощью меню и контроль ошибок при вводе....

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


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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include <iostream> // заголовочный файл с классами, функциями и переменными для организации ввода-вывода 
#include <stdio.h> // файл содержит функции ввода/вывода 
#include <stdlib.h> // заголовочный файл, который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие
#include <conio.h> // содержит функции для работы с экраном
 
using namespace std; // эта строчка означает, что компилятор должен использовать пространство имен std 
 
struct Catalog  //Описываем структуры для каждого файла:
{
    char name[30]; // Имя файла
    char year[30]; // Год создания
    int kol; // Количество обращений
};
 
struct CATALOG
{
    Catalog *file; // поле для записи адреса нового узла списка
    CATALOG *next; // поле для записи адресов элементов типа CATALOG
};
 
  //начальное формирование каталога файлов
  CATALOG *CREATE(Catalog *file); // прототипы функций:
 
  //добавление информации о новом файле:
  void add(Catalog *file, CATALOG *r); 
 
  //вывод на экран по пользовательскому запросу
  void vivod(Catalog *file);
 
  //добавление информации о новом файле:
  Catalog *addfile();
 
  // меню:
  int MENU();
 
 
int main()
{
    CATALOG *r=NULL; // в поле указателя первого элемента засылается значение NULL
    int ch; // переменная для отслеживания запроса пользователя (от 1 до 5)
    setlocale(LC_CTYPE,"Russian"); // ф-я, позволяющая выводить в консоле на русском языке
    while(1) // при каждом запросе выполняется одно действие 
    {
       ch=MENU();
       if(ch==1) //если пользователь захотел добавить новый файл
       {
           cout<<endl;
           if(r==NULL) // если список пустой, то мы создаем элементы списка
             r=CREATE(addfile()); // передача управления в функцию create
           else
             add(addfile(),r); // в противном случае, добавляем новые элементы
           
       }
 
       
       else if(ch==2) //если пользователь захотел вывести на экран информацию о каталоге
       {
           setlocale(LC_CTYPE,"Russian"); 
           cout<<endl;
           int i=0; 
           int N=0; // счетчик для файлов
           
           CATALOG *pr=r;
           while (r)
           {
               N++; // запоминаем количество элементов списка, количество структур
               r=r->next;
           }
            // формируем список для вывода на печать с выделением памяти под этот список:
           Catalog *buf;
           Catalog **pCatalog=new Catalog*[N];
           r=pr;
           // запоминаем записи:
           while (r)
           {
                   pCatalog[i]=r->file;
                   r=r->next;
                   i++;
           }
           r=pr;
         
               for (i=0;i<N;i++)
                   vivod(pCatalog[i]); // передаем управление в функциюю для печати списка
               getch(); // ввод запроса пользователем (ввод одной из цифр 1-5)
               
       }
 
            
      else if(ch==3) //если пользователь хочет найти и удалить книгу
       {
           char qwe[30]; // 
           char qw[30], q[1];
           cout<<"Введите год = ";
           
           cin>>qwe;
           while (r)
           {
               if (!strcmp(qwe,r->file->year)) // 
               {  
                    {
                   vivod(r->file); // 
                   cout<<"Удалить информацию о файле? (y/n) "<<endl;// спрашиваем, хочет ли пользователь ее удалить
                   cin.getline(q,1); // считываем его решение
                        if (q=="y") // проверяем совпадение символа, введенного на вопрос об удалении
                                    {
                                r->file=NULL; // обнуляем запись, если пользователь решил запись о книге удалить
                         }
                   r=r->next; // возвращаем изначальную позицию для дальнейших действий
                    }
                     }
               else if (strcmp(qwe,r->file->year)) // сравниваем 
                   r=r->next;
           }
           cout<<endl;
       }
       
       else if(ch==4)
       {
           break;
           cout<<endl;
       }
       
    }
    return 0;
} 
//начальное формирование списка книг
CATALOG *CREATE(Catalog *file) 
{
   setlocale(LC_CTYPE,"Russian"); 
   CATALOG *r=new CATALOG;
   r->file=file;
   r->next=NULL;
   return r;
}
//добавление новой книги в библиотеку
void add(Catalog *file, CATALOG *r) 
{
    setlocale(LC_CTYPE,"Russian");
    while(r->next)
      r=r->next;
    r->next=new CATALOG; //выделяем память под новый файл
    r->next->file=file; //запоминаем 
    r->next->next=NULL;
}
//вывод на экран по пользовательскому запросу
void vivod(Catalog *file)   
{
    setlocale(LC_CTYPE,"Russian");
    cout<<endl; 
    cout<<"Имя файла:  "<<file->name<<endl;
    cout<<"Год:  "<<file->year<<endl;
    cout<<"Количество обращений:  "<<file->kol<<endl;
     
    cout<<endl;
     
}
//добавление файла (+выделение памяти под определенный размер каждого поля)
Catalog *addfile() 
{
   cout<<"Введите каталог:"<<endl;
    Catalog *file=new Catalog;
    fflush(stdin);
    cout<<"Введите имя файла: => "; // вводи имя файла
    cin.getline(file->name,30);
 
    cout<<"Введите год создания:  => "; // вводим год создания
    cin>>file->year;
 
    cout<<"Введите количсетво обращений (0-10) :  => "; // вводим количество обращений
    cin>>file->kol;
 
    return file;
}
int MENU()
{
    int answer;getch();
    system("cls"); // для  очищения экрана
    setlocale(LC_CTYPE,"Russian"); // Ф-я, позволяющая выводить в консоле на русском языке
    cout<<"-------------------------------Главное меню-------------------------------"<<endl<<endl;
    cout<<"  1-> Добавить информацию о новом файле "<<endl; // формирование списка
    cout<<"  2-> Вывести каталог файлов на экран "<<endl; // вывод каталога на экран
    cout<<"  3-> Поиск и удаление файлов, дата создания которых совпадает заданной "<<endl; // удаление файлов, дата создание которых меньше заданной
    cout<<"  4-> Выход "<<endl<<endl;
    cout<<"Введите число от 1 до 4 : ";
    cin>>answer;
    
    
    if(answer>=1 && answer<=4) // если введенное число в пределах от 1 до 5, то возвращаем это значение и передаем в главной функции управление соответствующей функции                        
      return answer;
    else
      return 0; // иначе, если введено другое число, мы его забываем 
                // и вновь предлагаем пользователю ввести цифру по меню 
    fflush(stdin); // очищаем буфер (защита от переполнения)
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2012, 16:38     Подскажите, пожалуйста, что неправильно ?
Посмотрите здесь:

Подскажите пожалуйста, что я дулаю не правильно? C++
C++ подскажите пожалуйста, что не так?
Подскажите пожалуйста,что нужно сделать,что бы отображался русский язык?? C++
C++ Подскажите пожалуйста, что не так
Подскажите,пожалуйста ,что не так с кодом! C++
Подскажите пожалуйста что не так C++
C++ Пожалуйста подскажите, что делает программа?
C++ Подскажите пожалуйста что нужно исправлять

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

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

Текущее время: 21:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru