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

Сортировка базы данных

25.03.2014, 16:54. Показов 2532. Ответов 5
Метки нет (Все метки)

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
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <io.h>
#define M [10];
 
#ifndef _lab11_cpp
#define _lab11_cpp
 
typedef struct TExport
{
    char name_tov[50];
    char kor_opis[50];
    char country[50];
    float rubl;
}str;
 
//----------------------------------------
//Прототипы функция
    int create(char *name);//Создание базы данных
    int add(char *name);//Новый товар
    int print(char *name);//Показать базу данных
    int find(char *name, char *tovar);//нахождение элемента 
    int del(char *name, int k);//удаление
    int change(char *name, int n);//Изменение товара
    void displayE(str E);
    void input(str *pE);
    int displayN(char *name, int n);
    void sort();//сортировка по алфавиту
 
//-----------------------------------------
 
int _tmain(int argc, _TCHAR* argv[])
{
 
 
    char number M;
    char name[] = "D:\\base.dat";
    int k, n;
    char tovar[20];
    while(1)
    {   
        printf("\n\t1.Create newbase\n");
        printf("\n\t2.Add new tovar\n");
        printf("\n\t3.Delete tovar\n");
        printf("\n\t4.Find tovar\n");
        printf("\n\t5.Change tovar\n");
        printf("\n\t6.Sort tovar\n");
        printf("\n\t7.Show all tovar\n");
        printf("\n\t8.End work\n");
        //Обработка номера команды
        printf("\n\nEnter number of operation\t");
        scanf("%s", number);
        switch(number[0])
        {
            case '1' :
            create(name);
            break;
            case '2' :
            add(name);
            break;
            case '3' :
                    printf("\n Delete according to the name_tov \n");
                    printf("\n Enter the name_tov: \t");
                    scanf("%s", tovar);
                    k = find(name, tovar);
                    if(k > 0)
                    del(name, k);
                break;
            case '4' :
                    printf("\n Find according to the name_tov \n");
                    printf("\n Enter the name_tov: \t");
                    scanf("%s", tovar);
                    n = find(name, tovar);
                    if(n > 0)
                    displayN(name, n);
                
            break;
            case '5' :
                    printf("\n Change according to the name_tov \n");
                    printf("\n Enter the name_tov: \t");
                    scanf("%s", tovar);
                    k = find(name, tovar);
                    if(k > 0)
                    change(name, k);
                break;
            case '7' :
            print(name);
            break;
            case '6' :
            
            break;
            case '8' :
            return 0;
            default :
            printf("\nNumber is not correct\n");
        
        }
 
    }
    
    return 0;
}
 
int create(char *name)
{
 
    FILE*f; 
    str a;
    int i, n;
    if ((f = fopen(name, "w"))== NULL)
    {
        printf("Error %s\n", name);
        return 1;
    }
        printf("\nHow much elements in database? = \t");
        scanf("%d", &n);
            for(i = 0; i < n; i++);
            {
                input(&a);
                fwrite(&a, sizeof(str), 1, f);
                            
            }
        fclose(f);
        return 0;
 
 
}
void displayE(str E)
{
        printf("\nName_tov: %s\n", E.name_tov);
        printf("\nDescription: %s\n", E.kor_opis);
        printf("\nCountry: %s\n", E.country);
        printf("\nRubl: %f\n", E.rubl);
}
void input(str *pE)
{
 
        printf("\nName_tov: ");
        scanf("%s", pE->name_tov);
        printf("\nDescription: ");
        scanf("%s", pE->kor_opis);
        printf("\nCountry: ");
        scanf("%s", pE->country);
        printf("\nRubl: ");
        scanf("%f", &pE->rubl);
 
}
int print(char *name)
{
    FILE*f;
    str a;
    if ((f = fopen(name, "r"))== NULL)
    {
        printf("Error %s\n", name);
        return 1;
    }
    while(!feof(f))
    {
        fread(&a, sizeof(str), 1, f);
        if(!feof(f))
            displayE(a);
    
    }
    fclose(f);
    return 0;
 
}
int find(char *name, char *tovar)
{
    FILE*f;
    str a;
    int i = 0;
    if ((f = fopen(name, "r"))== NULL)
    {
        printf("Error %s\n", name);
        return -1;
    }
    while(!feof(f))
    {
        fread(&a, sizeof(str), 1, f);
        if(!feof(f))
        {
            if(strcmp(a.name_tov, tovar) == 0)
            {
                fclose(f);
                return i+1;
            }
        i++;
        }
 
    
    }
    fclose(f);
    return 0;
}
int add(char *name)
{
    FILE*f;
    str a;
    int i, n;
    if ((f = fopen(name, "r+"))== NULL)
    {
        printf("Error %s\n", name);
        return 1;
    }
    input(&a);
    fseek(f , 0, SEEK_END);
    fwrite(&a, sizeof(str), 1, f);
 
    fclose(f);
    return 0;
 
}
int displayN(char *name, int n)
{
    FILE*f;
    str a;
    int i;
    if ((f = fopen(name, "r+"))== NULL)
    {
        printf("Error %s\n", name);
        return 1;
    }
    fseek(f, (n-1)*sizeof(str), SEEK_SET);
    fread(&a, sizeof(str), 1, f);
    displayE(a);
    fclose(f);
    return 0;
}
int change(char *name, int n)
{
    FILE*f; 
    str a;
    int i = n;
    if ((f = fopen(name, "r+"))== NULL)
    {
        printf("Error %s\n", name);
        return 1;
    }
    displayN(name, n);
    input(&a);
    fseek(f, (n-1)*sizeof(str), SEEK_SET);
    fwrite(&a, sizeof(str), 1, f);
    fclose(f);
    return 0;
}
int del(char *name, int k)
{
    FILE*f;
    int i;
    long int n;
    str a;
    if ((f = fopen(name, "r+")) == NULL)
    {
        printf("Error %s\n", name);
        return 1;
    }
    n = filelength(fileno(f)) / sizeof(str);
    if((k > n) || (k < 0))
    {
        printf("Not found %d \n", k);
        fclose(f);
        return 2;
    
    }
    for(i = k; i < n; i++)
    {
        fseek(f, i*sizeof(str), SEEK_SET);
        fread(&a, sizeof(str), 1, f);
        fseek(f, (i-1)*sizeof(str), SEEK_SET);
        fwrite(&a, sizeof(str), 1, f);
    }
    chsize(fileno(f), filelength(fileno(f)) - sizeof(str));
    fclose(f);
    return 0;
}
#endif
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2014, 16:54
Ответы с готовыми решениями:

Сортировка базы данных (структуры)
Здравствуйте, можете помочь с сортировкой базы данных, если кто знает, как можно реализовать, или...

Сортировка базы данных
как сделать сортировку в БД с помощью DBComboBox и RadioGroup?????

Сортировка данных вывода из базы данных
Доброго времени суток друзья! У меня вот такой вопрос, помогите найти решение. Есть сайт, там есть...

Сортировка базы данных (paradox)
как в программе delphi сделать сортировку базы данных (paradox). и с какими компонентами это...

5
Заблокирован
25.03.2014, 18:39 2
Сортировку можно вести по товару, стране или цене.
Что у вас?
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
25.03.2014, 19:01  [ТС] 3
По товару
0
Заблокирован
26.03.2014, 07:04 4
Лучший ответ Сообщение было отмечено ilya0610 как решение

Решение

Здесь пример. Посмотрите и сделайте по аналогии.
Сортировка ведется по строке.

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct TExample
{   char *info;
    int num;
} TExample;
 
void SetExample (TExample *example, char *info, int num)
{   example->info = (char *) malloc (strlen (info) + 1);
    strcpy (example -> info, info);
    example->num = num;
}
 
void DeleteExample (TExample *example)
{   free (example->info);
    free (example);
}
 
TExample **CreateArray (int N)
{   TExample **arr = (TExample**) malloc (N * sizeof (TExample*));
    for (int i = 0; i<N; i++)
        arr[i] = (TExample*) malloc (sizeof (TExample));
    return arr;
}
 
void DeleteArray (TExample **arr, int N)
{   for (int i = 0; i<N; i++)
        DeleteExample (arr[i]);
    free (arr);
}
 
void PrintArray (TExample **arr, int N)
{   for (int i = 0; i<N; i++)
        printf("%-20s%5d\n", arr[i]->info, arr[i]->num);
}
 
void Swap (TExample *a, TExample *b)
{   TExample temp = *a;
    *a = *b;
    *b = temp;
}
 
 
void SortArray (TExample **arr, int N)
{   int i,j;
    for (i = 0; i<N-1; i++)
        for (j = i+1; j<N; j++)
            if(strcmp (arr[i]->info, arr[j]->info) > 0)
                Swap (arr[i], arr[j]);
}
 
 
int main ()
{   int N = 5;
    TExample **arr = CreateArray (N);
 
    SetExample (arr[0], "Nile", 6650);
    SetExample (arr[1], "Amazon", 6400);
    SetExample (arr[2], "Yangtze", 6300);
    SetExample (arr[3], "Missisipi", 6275);
    SetExample (arr[4], "Yenisei", 5539);
 
    printf("Before sorting:\n");
    PrintArray (arr, N);
    
    SortArray (arr, N);
    printf("\n\nAfter sorting:\n");
    PrintArray (arr, N);
 
    DeleteArray (arr, N);
 
    getchar();
    return 0;
}
Изображения
 
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
28.03.2014, 11:39  [ТС] 5
Не получается никак сделать
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
30.03.2014, 11:39  [ТС] 6
Никак не выходит присоединить к своей программе, весь смысл написанного понятен, но у вас там определенное количество, которое вы сами задаете, а также под определенным номером, а можно как сделать, использовав qsort() ?
0
30.03.2014, 11:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2014, 11:39
Помогаю со студенческими работами здесь

QSQLite Сортировка базы данных
Привет всем.Пишу программку на Qt и использую SQLite. Надо что бы в базе данные были отсортированы....

Базы данных. Сортировка и обновление
Здравствуйте. Пишу дипломную работу с использованием баз данных. У меня такой вопрос: Как...

Сортировка информации из базы данных
Вот функция вывода из файла: void Open() { Abbase z3; system (&quot;cls&quot;); cout&lt;&lt;&quot;Abbase 0.36...

Сортировка - выборка данных из базы
Добрый день / вечер! Подскажите решение вопроса или как бы поступили вы. Есть база данных...


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

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