Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/47: Рейтинг темы: голосов - 47, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 02.04.2014
Сообщений: 21
1

Учет товара на складе

03.04.2014, 11:07. Показов 8561. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа называется Учет товаров на складе. Помогите мне сделать в данной программе поиск и сортировку. Исходник ниже:
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
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <fstream>
using namespace std;
 
const int l_name = 30;
const int l_data = 30;
 
 struct Man
  { char name[l_name];
    int kol_vo;
    float stoimost;
    char data[l_data];
  };
 
 
int compare(const void *manl, const void *man2);
 
void create(void) 
 
{ SetConsoleCP(1251);
    SetConsoleOutputCP(1251); 
Man man; int pr; FILE *fbin;
  if ((fbin =fopen("dbase.bin","wb")) == NULL)
   puts("Ошибка создания файлы\n ");
  else
    { do
       {
        cout << "\n-------------Добавление данных-----------------";
        cout << "\n Наименование товара: ";
         cin.get() ; gets (man.name) ;
         cout << "\n Кол-во: ";
         cin >> man.kol_vo;
         cout << "\n Стоимость: ";
         cin >> man.stoimost;
         cout << "Дата:";
         cin>> man.data;
         fwrite(&man, sizeof(man),1,fbin);
         cout<< "\n Продолжить ввод (1-да/0-нет)";
         cin >> pr;
         cout << "\n----------------------------------";
         } while(pr == 1);
   }  
  fclose(fbin);
}
 void create2(void) 
 
{ Man man; int pr; FILE *fbin;
  if ((fbin =fopen("dbase.bin","ab")) == NULL)
   puts("Ошибка создания файлы\n ");
  else
    { do
       {
        cout << "\n-------------СОЗДАНИЕ ФАЙЛА-----------------";
        cout << "\n Наименование товара: ";
         cin.get() ; gets (man.name) ;
         cout << "\n Кол-во: ";
         cin >> man.kol_vo;
         cout << "\n Стоимость: ";
         cin >> man.stoimost;
         cout << "Дата:";
         cin>> man.data;
         fwrite(&man, sizeof(man),1,fbin);
         cout<< "\n Продолжить ввод (1-да/0-нет)";
         cin >> pr;
         cout << "\n----------------------------------";
         } while(pr == 1);
   }  
  fclose(fbin);
}
 
void view(void) 
  { SetConsoleCP(1251);
    SetConsoleOutputCP(1251); 
  FILE *fbin;
    if ((fbin =fopen("dbase.bin","rb")) == NULL)
      puts("Ошибка открытия файла\n");
    else
     {cout << "\n-------------ФАЙЛ ОТКРЫТ-----------------"; 
     fseek(fbin, 0, SEEK_END);
       int n_record = ftell(fbin)/sizeof(Man);
       Man *man = new Man[n_record];
       fseek(fbin, 0, SEEK_SET);
       fread(man, sizeof(Man),n_record, fbin);
       fclose(fbin);
      
       for (int i=0; i < n_record; i++)
 
        cout << "\n* Товар: " << man[i].name << "\n* Количество:  " <<
         man[i].kol_vo << "\n* Стоимость: " << man[i].stoimost <<"\n* Дата: " << man[i].data;
        cout << "\n";
        cout << "\n**************************************************";
     }
  }
 
 
 void work(void)
  { FILE *fbin;
    if ((fbin =fopen("dbase.bin","rb")) == NULL)
      puts("Ошибка открытия файла\n");
    else
     { fseek(fbin, 0, SEEK_END);
       int n_record = ftell(fbin)/sizeof(Man);
       Man *man = new Man[n_record];
       fseek(fbin, 0, SEEK_SET);
       fread(man, sizeof(Man),n_record, fbin);
       fclose(fbin);
       
       for (int i=0; i < n_record ; i++){
        if (man[i].stoimost > 1000)cout << "\n" << man[i].name << "  " <<
         man[i].kol_vo << "  " << man[i].stoimost <<" " << man[i].data;
        cout << "\n";
     }}
 }
 
 
int main(void)
 { int num;
 setlocale(LC_ALL,"Russian");
   do
    { cout << "\n-------------МЕНЮ-----------------"; 
      cout << "\n--- 1 - Добавление данных      ---";
      cout << "\n--- 2 - Просмотр файла         ---";
      cout << "\n--- 3 - Обработка файл         ---";
      cout << "\n--- 4 - Создать новый файл     ---";
      cout << "\n--- 5 - Поиск                  ---";
      cout << "\n--- Ваш выбор:";cin>>num; 
      cout << "\n----------------------------------";
      
      switch(num)
       { case 1: create2();break;
         case 2: view();break;
         case 3: work();break;
         case 4: create();break;
        
       }
    } while (num != 4);
}
 
int compare(const void *manl, const void *man2)
{ return strcmp(((Man *)manl)->name,
((Man *)man2)->name);
 }
 
 
//---------------------------------------------------------------------------
Помогите пожалуйста...

Добавлено через 21 час 53 минуты
Помогите пожалуйста с поиском и сортировкой по товарам. Или подскажите как сделать.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2014, 11:07
Ответы с готовыми решениями:

Разработать программу:«Учет товаров на складе» используя классы
Помогите пожалуйста с программой , которая должна состоять из классов. Коробки(объекты) в складе...

Выполнить учет трех наименований товаров, которые имеются на складе
Выполнить учет трех наименований товаров, которые имеются на складе. Спросить в количестве и цене...

Класс "Складская книга", содержащая названия товара, цену и количество на складе
Написать программу, обеспечивающую простейшие манипуляции с классом, определяющим: запись в...

Учет товара на складе
Ребята помогите пожалуйста разобратса .есть таблица с двух страниц нужно при добавление товара или...

10
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
03.04.2014, 11:09 2
Fanarik1960, а что конкретно не получается и как вы хотите организовать поиск и сортировку?
1
1 / 1 / 0
Регистрация: 02.04.2014
Сообщений: 21
03.04.2014, 11:40  [ТС] 3
Не получается сделать поиск, надо чтобы поиск работал так:
Вводишь название товара, результат вывести на экран, желательно чтобы кроме товара выводилось еще цена, количество и дата т.е. все что с ним связанно.
0
183 / 182 / 56
Регистрация: 10.06.2011
Сообщений: 871
03.04.2014, 12:02 4
Fanarik1960, ну так в чем проблема, выдаете запрос на поиск, пользователь вводит нужный ему товар и далее вы осуществляете поиск по файлу. Было бы неплохо если бы у вас были данные в файле по форме какой нибудь записаны(например: [Имя товара] [Цена] [Количество] [Дата]) и для этой формы, для каждого параметра задать определенную границу названия, скажем к примеру 20 символов. И когда производится поиск, вы проверяете(если на 1 строку отводится 1 товар) в каждой строке совпадение n(число символов в искомом слове) символов и если вы нашли, то делаете какой нибудь счетчик-массив(если введено: лук. а в вашем списке есть: лук-порей, лук репчатый и т.д.) или же сразу на вывод.
1
1 / 1 / 0
Регистрация: 02.04.2014
Сообщений: 21
07.04.2014, 08:18  [ТС] 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
void find(void)
{
FILE *fbin;
    if ((fbin =fopen("dbase.bin","rb")) == NULL)
      puts("Ошибка открытия файла\n");
    else
 
    {cout << "\n-------------Поиск-----------------\n"; 
    fseek(fbin, 0, SEEK_END);
       int n_record = ftell(fbin)/sizeof(Man);
       Man *man = new Man[n_record];
       fseek(fbin, 0, SEEK_SET);
       fread(man, sizeof(Man),n_record, fbin);
       fclose(fbin);
    char tov[l_tov];
    cout << "Введите товар:";
    cin >> tov;;
       for (int i=0; i = n_record ; i++){
    
        if (man[i].name == tov)
        cout<<"\n"<<man[i].name << "\n" << "  " << man[i].kol_vo << "  " << man[i].stoimost <<" " << man[i].data;
        cout << "\n";
     }}  
}
0
Заблокирован
07.04.2014, 08:32 6
Лучший ответ Сообщение было отмечено Fanarik1960 как решение

Решение

Строка 20:
Цитата Сообщение от Fanarik1960 Посмотреть сообщение
if (man[i].name == tov)
if (strcmp (man[i].name, tov ) == 0) - сравнение двух строк char

Особенности strcmp: возвращает 0, если строки равны. Подробней здесь.
1
1 / 1 / 0
Регистрация: 02.04.2014
Сообщений: 21
07.04.2014, 09:34  [ТС] 7
Исправил, программа запускается, но поиск не работает. Ввожу товар, который есть в списке товаров. Но результаты не отображаются.
0
Заблокирован
07.04.2014, 09:45 8
А когда просто распечатываешь все результаты, они отображаются?
1
1 / 1 / 0
Регистрация: 02.04.2014
Сообщений: 21
07.04.2014, 15:03  [ТС] 9
Да. В программе происходит зацикливание

Добавлено через 5 часов 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
void find(void)
{
 
  FILE *fbin;
    if ((fbin =fopen("dbase.bin","rb")) == NULL)
           puts("Ошибка открытия файла\n");
     else
        {
            cout << "\n-------------ПОИСК-----------------"; 
            fseek(fbin, 0, SEEK_END);
            int n_record = ftell(fbin)/sizeof(Man);
            //Man *man = new Man[n_record];
            fseek(fbin, 0, SEEK_SET);  
            char tov[l_tov];
            cout << "\n Введите товар:";
            cin >> tov;
            int k=0;
             for (int i=0; i < n_record; i++){
                 fread(&man2, sizeof(Man),1, fbin);
                 if (strcmp (man2.name, tov )==0)
                     {
                        cout<<"\n"<<man2.name << "\n" << "  " << man2.kol_vo << "  " << man2.stoimost <<" " << man2.data<<"\n";
                        k++;
                     cout << "**************************************************\n";
                    }                
             }
             if (k ==0)cout<<"Данные не найдены. Проверте правильность написания \n"; 
             fclose(fbin);
         } 
}
Спасибо всем кто помог. Помогите пожалуйста еще и с удалением строки с файла. Буду очень благодарен
0
Заблокирован
07.04.2014, 18:25 10
Цитата Сообщение от Fanarik1960 Посмотреть сообщение
с удалением строки с файла
Самый простой способ - с помощью вспомогательного файла.
1) создаем вспомогательный файл
2) копируем во вспомогательный файл то, что нам нужно (ненужное отфильтровываем ифом).
3) копируем из вспомогательного файла в основной
4) убиваем вспомогательный файл (remove)

Способ можно усовершенствовать (например, копировать только часть после ненужной записи). Но основная идея останется та же.
0
1 / 1 / 0
Регистрация: 02.04.2014
Сообщений: 21
11.04.2014, 09:19  [ТС] 11
Сделал удаление, но оно не работает. Посмотрите что не так пожалуйста:
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
void del(void)
{
    char s[200];
   FILE *t, *fbin;
    t = fopen("dbase.bin","rb");
    if(t == NULL)
    {
        printf("Îøèáêà ïðè îòêðûòèè ôàéëà.\n");
        system ("pause");
        exit(1);
    }
    fbin = fopen ("dbase1.bin", "wb");//ñîçäàþ íîâûé ôàéë äëÿ çàïèñè â íåãî ñòðîê, â êîòîðûõ íåò ñîâïàäåíèé ñ ââåäåííîé ôàìèëèåé
    
    printf("Ââåäèòå òîâàð: ");
    scanf("%s",man2.name);
    int flag = 0;
    while(!feof(t))
    {
        if (fgets(s, 200, t))
        {
            char temp[30];
            int i = 0;
            while (sscanf(s + i, "%s", temp))
            {
                if (!strcmp(man2.name, temp)) 
                {
                    flag = 1;
                    break;
                }
                i += strlen(temp) + 1;
                if (i >= strlen(s)) break;
            }
            
            if (!flag) //åñëè íåò ñîâïàäåíèé
                fputs(s, fbin); //çàïèñûâàþ ñòðîêó â íîâûé âðåìåííûé
            flag = 0;
        }
    }
    fclose (t);
    fclose (fbin);
    
    remove("dbase.bin");
    rename("dbase1.bin","dbase.bin");
Добавлено через 21 час 11 минут
Помогите доделать пожалуйста!!!
0
11.04.2014, 09:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2014, 09:19
Помогаю со студенческими работами здесь

Учет движения товара на складе
Сразу извинюсь . . . не знал в какую ветку вставить этот топик, поэтому он здесь :) Может у...

Складской учет | Вычисление остатка товара на складе
Здравствуйте! Обращаюсь к вам за помощью, потому что самостоятельно не могу найти информации ни на...

Учет товара на складе в разрезе дат. Ваши предложения?
Коротенькое вступление. Фирма занимается производством продуктов питания. Сроки хранения не очень...

"Магазин оптики", учет товара на складе
БД обеспечивает работу магазина-оптики (учитывает заказы и товары на складе). есть одна проблема:...


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

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