Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2013, 18:00   #1
enerlol
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 24
По умолчанию Структуры данных. Двунаправленный список

Нужно написать базу записей при помощи использования структур баз данных:
1) Реализовать возможность добавления, удаления и изменения записей.
2) Реализовать возможность сортировки базы по любому из полей.
Поля: IP, Название ком-ра, Имя, Фамилия, Тип компьютера, Рабочая группа.

Собственно идея: есть двунаправленный список, в списке имеется массив. В массиве строки.
Проблема реализовать. Как это сделать? помогите.

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define LEN 30

struct base
{
int numer;
char IP[LEN];
char NameComp[LEN];
char Name[LEN];
char Surname[LEN];
char Type[LEN];
char Groupe[LEN];
unsigned char Record [LEN];
struct base *prev;
struct base *next;
};
struct base *head;
struct base *tail;
extern int j=0;
create(struct base **tail); // создание
print_all(struct base **el);
del(struct base **tail); // удаление
del_all(struct base **head);


int main()
{
 int action;
 head=(struct base*) malloc(sizeof(struct base));
 head->prev=NULL;
 head->next=NULL;
 tail=head;
 do {
 printf("press comand: ");
 scanf("%d",&action);
if (action=1){create(&tail);}
if (action=2){print_all(&head);}
if (action=3){del(&tail);}
else {printf(" failed\n");}
    /*create(&tail);
    print_all(&head);
    del(&tail);
    print_all(&head);
    create(&tail);*/
    //del_all(&head);
 }
   while (getch()!=27);
    return 0;
}


print_all(struct base **head)
{
    struct base *p, *temp;
    temp=*head;
    while(temp)
    {
        printf("%s", &temp->IP);
        temp=temp->next;
    };
 free(temp);
}


create(struct base **tail)
{  struct base *p,*left;
   left=NULL;
   int i=0;
   printf(" Press any key for entering new record. Press <esc> for end.\n");
   do {
        p=(struct base*)malloc(sizeof(struct base));

        printf ("Number of record: %d\n",j);
        printf("IP: ");
        gets(p->IP);
        /*printf("NameComp:\t");
        gets(p->NameComp);
        printf("Name:      ");
        gets(p->Name);
        printf("Surname:   ");
        gets(p->Surname     );
        printf("Type:      ");
        gets(p->Type);
        printf("Groupe:    ");
        gets(p->Groupe);*/
        p->prev=left;
        if (left != NULL) {left->next=p;}
        else
        head=p;
        left=p;
        j++;
        }
    while (getch()!=27);
    *tail=p;
    (*tail)->next=NULL;
}

del(struct base **tail)
{
   struct base *p,*temp;
   int RecordNumber=0;
   int FindRecordNumber=0;
   printf ("delete number:");
   scanf("%d",&RecordNumber);
   p=head;
   while (p!=NULL)
   { if (RecordNumber==FindRecordNumber)
     { if (p==head)
       { head=p->next;
         head->prev=NULL;
         free(p);
         p=head;
        }
        else if (p==tail)
             { tail=p->prev;
               (*tail)->next=NULL;
               free(p);
               p=tail;
              }
              else
              { p->next->prev=p->prev;
                p->prev->next=p->next;
                temp=p;
                p=p->next;
                free(temp);
               }
     }
            else
       FindRecordNumber++;
       p=p->next;
   }
}
enerlol вне форума Ответить с цитированием
Старый 15.01.2013, 00:45   #2
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

циклический или не циклический список?
Olejik вне форума Ответить с цитированием
Старый 15.01.2013, 01:21   #3
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

ну начало выглядит как то так:
Код:
// list.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#define LEN 30

struct base
{
	int numer;
	char IP[LEN];
	char NameComp[LEN];
	char Name[LEN];
	char Surname[LEN];
	char Type[LEN];
	char Groupe[LEN];
	unsigned char Record [LEN];
	struct base *prev;
	struct base *next;
};

void print_all(base *tail)
{
	while(tail->next!=NULL)
	{
		printf("%d\n",tail->numer);
		tail=tail->next;
	}
}


void create(base *tail)
{
	base *prev = NULL;
	while(tail->next!=NULL)
	{
		prev = tail;
		tail=tail->next;
	}
	tail->prev=prev;
	tail->next=new base();
	tail->numer=5;
}

int main()
{
	int action;
	base * tail;
	tail=new base();
	tail->prev=NULL;
	tail->next=NULL;
	do
	{
		printf("press comand: ");
		scanf("%d",&action);
		switch(action)
		{
		case 1:
			create(tail);
			break;
		case 2:
			print_all(tail);
			break;
		case 3:
			break;
		default:
			printf(" failed\n");
			break;
		}
	}
	while (getch()!=27);
    return 0;
}
заполнение списка и вывод всех элементов
Olejik вне форума Ответить с цитированием
Старый 15.01.2013, 09:24   #4
enerlol
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 24
По умолчанию

В задании ничего не сказано. Я делаю не циклический (по крайней мере я так думаю).
enerlol вне форума Ответить с цитированием
Старый 15.01.2013, 14:11   #5
enerlol
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 24
По умолчанию

Скомпилировал код.
Код:
tail->next=new base();
Вот тут ругается и тд. Я так понял проблема в "new". Что это такое?
Работаю в Code:Blocks.
Бтв, посоветуй компилятор толковый.
enerlol вне форума Ответить с цитированием
Старый 15.01.2013, 16:45   #6
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

смотря что он говорит, я писал этот код в Visual Studio 2008 и комилировался и работал без роблем.
Olejik вне форума Ответить с цитированием
Старый 15.01.2013, 16:50   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Вот тут ругается
Все тут телепаты. Он ругается потому что...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.01.2013, 20:00   #8
enerlol
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 24
По умолчанию

Понял, буду в будущем учитывать.

Код:
C:\Users\ener\Desktop\labs\l3.3\main.c||In function 'create':|
C:\Users\ener\Desktop\labs\l3.3\main.c|39|error: 'new' undeclared (first use in this function)|
C:\Users\ener\Desktop\labs\l3.3\main.c|39|error: (Each undeclared identifier is reported only once|
C:\Users\ener\Desktop\labs\l3.3\main.c|39|error: for each function it appears in.)|
C:\Users\ener\Desktop\labs\l3.3\main.c|39|error: expected ';' before 'base'|
C:\Users\ener\Desktop\labs\l3.3\main.c||In function 'main':|
C:\Users\ener\Desktop\labs\l3.3\main.c|46|error: 'base' undeclared (first use in this function)|
C:\Users\ener\Desktop\labs\l3.3\main.c|46|error: 'tail' undeclared (first use in this function)|
C:\Users\ener\Desktop\labs\l3.3\main.c|47|error: 'new' undeclared (first use in this function)|
C:\Users\ener\Desktop\labs\l3.3\main.c|47|error: expected ';' before 'base'|
||=== Build finished: 8 errors, 0 warnings ===|
enerlol вне форума Ответить с цитированием
Старый 15.01.2013, 20:14   #9
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

вот тут я не знаю, бери Visual Studio или жди, когда скажут, что делать, компилятору не нравится аж new.

скорей всего ты в классическом C пишешь, а надо в C++

скорей всего ты в классическом C пишешь, попробуй сделать проект C++

Последний раз редактировалось Stilet; 18.01.2013 в 21:07.
Olejik вне форума Ответить с цитированием
Старый 18.01.2013, 19:55   #10
enerlol
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 24
По умолчанию

Так и есть. Собственно у меня задание и в Си
enerlol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двунаправленный список Вельвет Помощь студентам 1 10.01.2012 14:14
двунаправленный список Максикок Помощь студентам 3 02.05.2011 10:34
Двунаправленный список grave123 Общие вопросы C/C++ 1 08.03.2010 10:44
Двунаправленный список dip Помощь студентам 3 02.03.2010 12:16
База данных + двунаправленный список. qwertytol Помощь студентам 1 06.12.2009 14:46