12.04.2009, 23:45 | #1 (permalink) |
Новичок
Регистрация: 12.04.2009
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите с Базой Данных
Код:
#include <stdio.h> #include <string.h> struct computers { int id; char surname_owner[6]; int number_of_processors; //число процессоров char type_of_processors[100]; //тип процессоров int size_memory; //объем памяти char type_of_video_controller[100]; //тип видеоконтроллера int size_of_video_buffer; //объем видеопамяти char type_of_hard_disk[100]; //тип винчестера int number_of_hard_disk; //число винчестера char capacity_of_hard_disk[100]; //емкость винчестера int number_of_integrated_controller; //кол-во интегрированных контроллеров int number_of_outside_device; //колво внешних устройств char operational_system[100]; //операционная система }row[100]; /*int compareStrings( char surname_owner1[], char surname_owner2[]) { int k=0, answer; while( surname_owner1[k]==surname_owner2[k] && surname_owner1[k] !='\0' && surname_owner2[k] !='\0' ) ++k; if (surname_owner1[k]==surname_owner1[k]) answer = 0; //printf("Y\n"); return i; } */ void viewConfig(FILE* file) { struct computers one, two; file = fopen("KRII.txt", "rb"); rewind(file); fread (&one, sizeof(struct computers), 1, file); fread (&two, sizeof(struct computers), 2, file); if(strcmp(one.surname_owner, two.surname_owner)!=0) { printf("1\n"); printf("%s %s\n", one.surname_owner, two.surname_owner); } } int main() { int n; char number=0; FILE *file; printf("\t\tMENU\n"); printf(" \tPrint 1 for adding row\n"); printf(" \tPrint 2 for showing\n"); printf(" \tPrint 3 for searching \n"); printf(" \tPrintf 4 for exit\n"); scanf("\t\t%c", &number); if(number=='1') { int k; printf("How much much lines do you want to add?\n"); scanf("%i", &k); file = fopen("KRII.txt","ab+"); for (int i=0; i<k; i++) { printf ("Enter id\n"); scanf ("%d", &row[i].id); printf ("Enter surname_owner\n"); scanf ("%s", &row[i].surname_owner); printf ("Enter number_of_processors\n"); scanf ("%d", &row[i].number_of_processors); printf ("Enter type_of_processors\n"); scanf ("%s", &row[i].type_of_processors); printf ("Enter size_memory\n"); scanf ("%d", &row[i].size_memory); printf ("Enter type_of_video_controller\n"); scanf ("%s", &row[i].type_of_video_controller); printf ("Enter size_of_video_buffer\n"); scanf ("%d", &row[i].size_of_video_buffer); printf ("Enter type_of_hard_disk\n"); scanf ("%s", &row[i].type_of_hard_disk); printf ("Enter number_of_hard_disk\n"); scanf ("%d", &row[i].number_of_hard_disk); printf ("Enter capacity_of_hard_disk\n"); scanf ("%s", &row[i].capacity_of_hard_disk); printf ("Enter number_of_integrated_controller\n"); scanf ("%d", &row[i].number_of_integrated_controller); printf ("Enter number_of_outside_device\n"); scanf ("%d", &row[i].number_of_outside_device); printf ("Enter operational_system\n"); scanf ("%s\n", &row[i].operational_system); fprintf(file,"%i %s %i %s %i %s %i %s %i %s %i %i %s\n", row[i].id, row[i].surname_owner, row[i].number_of_processors, row[i].type_of_processors, row[i].size_memory, row[i].type_of_video_controller, row[i].size_of_video_buffer, row[i].type_of_hard_disk, row[i].number_of_hard_disk, row[i].capacity_of_hard_disk, row[i].number_of_integrated_controller, row[i].number_of_outside_device, row[i].operational_system); } fclose(file); char number; scanf("%c", &number); } if (number=='2') { printf("i surname\tn t_p\tsmem\ttvc\tsvb\tthd\th chd c d oper_system\n"); file = fopen("KRII.txt", "rb"); for(int i = 0; !feof(file); i++) { fscanf(file, "%i %s %i %s %i %s %i %s %i %s %i %i %s\n", &row[i].id, &row[i].surname_owner, &row[i].number_of_processors, &row[i].type_of_processors, &row[i].size_memory, &row[i].type_of_video_controller, &row[i].size_of_video_buffer, &row[i].type_of_hard_disk, &row[i].number_of_hard_disk, &row[i].capacity_of_hard_disk, &row[i].number_of_integrated_controller, &row[i].number_of_outside_device, &row[i].operational_system); printf("%i %s\t%i %s\t%i\t%s\t%i\t%s\t%i %s %i %i %s\n", row[i].id, row[i].surname_owner, row[i].number_of_processors, row[i].type_of_processors, row[i].size_memory, row[i].type_of_video_controller, row[i].size_of_video_buffer, row[i].type_of_hard_disk, row[i].number_of_hard_disk, row[i].capacity_of_hard_disk, row[i].number_of_integrated_controller, row[i].number_of_outside_device, row[i].operational_system); } fclose(file); char number; scanf("%c\n", &number); } if (number=='3')//определение однофамильцев { viewConfig(file); } return 0; } |
12.04.2009, 23:45 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Помогу вам списком тем, которых похожи на вашу Задача на бейсике. Работа с базой даных Помогите сделать базу данных в Access для зачета, пожалуйста |
14.04.2009, 12:23 | #2 (permalink) |
Member
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
|
Проблемы, которые не дают работать проге:
1. Когда производится запись и чтение ты работаешь с БД как с простой строкой параметров, а при поиске однофамильцев - как с записанными в бинарном виде структурами 2. Считываются и сравниваются между собой только первые две записи Думаю, что мог бы помочь - но нужно точнее знать - какая информация должна выводится при запуске этой функции (однофамильцев), например - должны выводится вообще все записи у которых есть однофамильцы или же должны выводится однофамильцы для какой-то конкретной записи, или вообще как-то ещё? |
14.04.2009, 15:19 | #3 (permalink) |
Новичок
Регистрация: 12.04.2009
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
НА самом деле задача состоит в том, чтобы напечатать список однофамильцев, имеющих однотипные компьютеры. Для этого мне нужно вывести все строки с однофамильцами)
|
14.04.2009, 18:14 | #4 (permalink) | |
Member
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
|
Излишки в остальном коде не стал править, а то так можно далеко зайти
Переписал функцию по который собственно был вопрос: Код:
void viewConfig(FILE *file) { int count, i, markers[100]; // Открываем файл file = fopen("KRII.txt", "rb"); // Считываем содержимое файла в массив row for(i = 0; i < 100; i++) { // Считываем строчку count = fscanf(file, "%i %s %i %s %i %s %i %s %i %s %i %i %s\n", &row[i].id, &row[i].surname_owner, &row[i].number_of_processors, &row[i].type_of_processors, &row[i].size_memory, &row[i].type_of_video_controller, &row[i].size_of_video_buffer, &row[i].type_of_hard_disk, &row[i].number_of_hard_disk, &row[i].capacity_of_hard_disk, &row[i].number_of_integrated_controller, &row[i].number_of_outside_device, &row[i].operational_system); // Если количество считанных элементов не совпадает с нужным для одной записи - прекращаем чтение if(count != 13) break; // Устанавливаем маркер обработанности в нуль markers[i] = 0; } // Закрываем файл - он нам больше не понадобится fclose(file); // Проверяем записи на совпадение фамилий for(int j = 0; j < i; j++) // Для каждой записи if(markers[j] == 0) // Если запись не обработана { // Устанавливаем маркер наличия однофамильцев для текущей записи в нуль count = 0; for(int k = j + 1; k < i; k++) // Для всех записей после текущей обрабатываемой if((markers[k] == 0) && (strcmp(row[j].surname_owner, row[k].surname_owner) == 0)) // Если запись ещё не обработана и фамилия совпадает с фамилией в текущей обрабатываемой записи { // Устанавливаем маркер обработанности для этой записи markers[k] = 1; // Устанавливаем маркер наличия однофамильцев count = 1; // Выводим информацию о найденной записи на экран printf("Id: %i, surname: %s\n", row[k].id, row[k].surname_owner); } // Если для текущей записи найдены однофамильцы - выводим эту запись на экран if(count == 1) printf("Id: %i, surname: %s\n", row[j].id, row[j].surname_owner); } } Результат выводится примерно так: (Случай когда в базе есть два Ивановых и три Петровых) Цитата:
|
|
15.04.2009, 18:24 | #5 (permalink) |
Новичок
Регистрация: 12.04.2009
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо!
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|