Отговори на тема  [ 29 мнения ]  Отиди на страница 1, 2  Следваща
Големичка База данни 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение Големичка База данни
Едно въпросче. Как се пише база данни за 100000 студента.
Трябва да използвам

struct student {
char name[40];
char vorname[20];
char fach[40];
int matrikelnummer;
float noten[20];
student * pNext;
};

Мислех да го правя с масив, ама няма да стане явно 8O тази структура изглежда да гълта по 182кБ на елемент. Умножено по 100000 - няма да стигне РАМ-а. Какво се прави в такива случаи? Не мога да използвам и данимачна памет или поне не се сещам как...


Сря Май 04, 2005 11:35 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
[/quote]student * pNext;
[quote]
е той отговорът на въпроса ми бил в поста :roll: . С поинтер ще става явно, сега чета за някакви навързани листи, които се използват именно в такива случаи. Абе то и с масив ще стане, ама ще трябва да поръчам повечко РАМ за РС-то, че няма да стигне :D


Сря Май 04, 2005 11:58 pm
Профил WWW
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Сря Окт 13, 2004 11:24 pm
Мнения: 500
Местоположение: Стара Загора
Мнение 
Едно вероятно решение , правиш структура само на един от редовете в базата както си направил за студента , създаваш файл от типа на структората /знам за паскал че става/, създаваш промелива от типа на структурата и когато записваш в базата попълваш променливите в структурата и добавяш запис във файла със стандартният оп. writefile, при четене е същото само че обратно, при търсене вече е гърч ... ограничението е само във макс. размер на файла в зависимост от фат-таблицата на диска!


Чет Май 05, 2005 12:00 am
Профил YIM
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Звучи подходящо решение ще опитам.
Благодаря


Чет Май 05, 2005 12:21 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
А аз имам някакви спомени че веднъж направих една програмка дето правеще структура по голяма от 100Мб а Pcto na koeto работеше беше с 64Мб или нещо такова. Никакви мерки не бях вземал за работа с паметта. Visual studioto или чичко windows са се справяли явно с това.Така и не се замислих защо работи. Това беше преди 2 години и го правих с visual studio 6 na C++. Така че що не пробваш да си компилираш програмката така и да видиш какво ше стане. Аз така и тогава не успях да я тествам щото не успях да си подкарам хардуера и, но се компилираше и тръгваше и на тая машина с 64Мб рам.


Чет Май 05, 2005 12:44 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
е точно това го нямам под ръка в момента, но ще пробвам как ще се компилира на gcc-то. Последния път като опитах да го гърча с aloc-a нещо не стана ама я да видим сега колко ми е стабилна системата. 8)


Чет Май 05, 2005 12:47 am
Профил WWW
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Сря Окт 13, 2004 11:24 pm
Мнения: 500
Местоположение: Стара Загора
Мнение 
HCL написа:
е точно това го нямам под ръка в момента, но ще пробвам как ще се компилира на gcc-то.

Ако имаш Linux предвид , мисля че ще трябва да му кажеш че смяташ да се шириш из рама, пингвина много се мръщи на процеси различни от кърнела дето искат да си играят с паметта, не забравяй че линукса е преди виндовса по стаж в многозадачноста и protected mode-то на паметта!


Чет Май 05, 2005 12:55 am
Профил YIM
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение Re: Големичка База данни
...


Последна промяна на Съб Яну 28, 2012 10:40 am, променена общо 1 път



Чет Май 05, 2005 1:11 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
хм... пропуснал съм една 0, за втори път ми се случва тази седмица :x . За курсова работа е, ама аз сам седнах да си тровя живота. Тя задачата съвсем не е сложна, искат само да видим дали сме разбрали как се работи с масиви и пойнтери, ама аз сам седнах да си тровя живота с тази база данни. Но нищо, интересно ми е, а и не вреди да поопитам туй онуй. Сега нацепих базата на 4 файла (по един за всеки параметър) не защото е някакво сложно решение за оптимизация, ами просто не се сещам как при четене да разпозная кои стойности на кои елемент от базата отговарят.
Опааа сега ми хрумна (то хубаво нещо било форума, понякога ти идват идеи докато задаваш въпроси :D ). Така, новият хак е да пиша само в един файл, а като завъртя цикъла да чета през 4 стойности, така ще знам, че на едно завъртане отговаря стойност на един елемнт. 8)


Чет Май 05, 2005 1:38 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
...


Последна промяна на Съб Яну 28, 2012 10:41 am, променена общо 1 път



Чет Май 05, 2005 2:16 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
pirev, закова ме. Това което си ми дал тръгна :D
Аз тук се мъча да разбера защо не мога да отворя файла с
ofstream file ("base")
дава ми
Цитат:
undefined reference to `std::basic_fstream<char, std::char_traits<char> >::~basic_fstream [in-charge]()'

Не разбирам, включил съм fstream в начлото, опитах и с fstream.h, нали там трябва да ги има дефинирани тези функции. Ще се поровя още малко, ама вече е 2 часа посреднощ, а такива идиотски грешки да ми спъват работата. :evil: :x :evil:


Чет Май 05, 2005 3:09 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Аааааа, това е като му се спи на човек не става хубава работата. Компилирам си сорса на gcc, а не на g++. Ама глупавата грешка трудно се открива, щото си мислех, че като му пусна една опция -x c++ ще ползва препроцесора на с++ ама не става явно точно така. Защо ли? :?


Чет Май 05, 2005 3:27 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Друга чудесия изникна. В тази част:
Код:
if (nfile.is_open()) //|| ! vnfile.is_open() || ! ffile.is_open())
   {      cout << "\n\n\nNew student:\n\n";
         cout << "Name: ";
         cin.getline (stud.name, 40);      //what is this?
         cin.getline (stud.name, 40);
         cout << "\nVorname: ";
         cin.getline (stud.vorname, 20);
         cout << "\nFach: ";
         cin.getline (stud.fach, 40);
         cout << "\nMatrikelnummer: ";      
         cin >> stud.mn;

Там където е дублиран реда. Ако не му поискам два пъти вход, на първия сам си решава че е въведене табулация и преминава направо към stud.vorname без да иска въобще вход от потребителя за stud.name Така както е в монета си работи, но ми е интересно откъде може да идва грешката.


Чет Май 05, 2005 3:55 am
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Мар 18, 2005 4:14 pm
Мнения: 67
Местоположение: Русе.BG/Oldenburg.DE
Мнение 
Останал ти е непрочетен /n някъде в буфера. Чел си нещо директно от там с get(), или input-а е повече от maxN-а на някой предишен getline() и съответно /n остава вътре, или нямам представа защо. Както и да е, преди да го четеш наново го накарай да игнорира всичко преди този /n със:
Код:
cin.ignore(cin.rdbuf()->in_avail(),'\n');


Особено ако някой ще ти проверява кода, никак не е разумно това "измъкване" с двойното викане на getline(); представи си, че байтовете преди /n в буфера отново са повече от maxN-a :D


Чет Май 05, 2005 4:33 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Нов проблем, този е по интересен:
Код:
begin1:
      system("clear");
      cout << "Main Menu:\n\n";      //print the main menu
      cout << "1. Enter new student\n";
      cout << "2. Search the data base\n";
      cout << "3. Change student's information\n";
      cout << "4. Exmatrikuliere student\n";
      cout << "5. Exit\n\n";
      cin >> i;

      if(cin.fail() || (i!=1 && i!=2 && i!=3 && i!=4 && i!=5))
      {   cout << "Please enter a correct value (1-5): ";
         goto begin1;
      

Ако потребителя въведе некоректна стойност, но integer, програмата се държи нормално и го пита отново за вход, а ако въведе нещо различно от integer, goto го връща на позиция begin1 ... и от там рограмата вллиза в цикъл 8O . Защо???
Нали съм сложил cin >> i; би трябвало на това място всеки път да спира и да чака вход от конзолата. Къде греша?


Чет Май 05, 2005 4:48 am
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 29 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни