Wątek przeniesiony 2018-06-08 13:25 z Delphi i Pascal przez furious programming.

Pomysł na aplikację wykorzystującą różne elementy języka

0

Witam mam stworzyć projekt na informatyke, który będzie miał te elementy: rekordy,typy,funkcje,procedury,pliki tekstowe,sortowanie,baza danych itd.. Np jakaś baza np samochodowa która bedzie tworzyla metryki samochodowe(kolor,marka,silnik itp.) i w pliku tekstowym po skonczeniu kompilowania wypisze mi posortowane samochody wzgledem np pojemnosci silnika. I tu moje pytanie czy moglby ktos podrzucic jakis podobny pomysl tylko troszke bardziej rozwiniety? Dodam ze jestem noga z informatyki a chce zaliczyc to tylko na 3...

0

Podstawowe pytanie – jakiego środowiska zamierzasz użyć? TP7, Delphi, Lazarus?

Mateusz19921 napisał(a):

I tu moje pytanie czy moglby ktos podrzucic jakis podobny pomysl tylko troszke bardziej rozwiniety?

Zrób hipotetyczny serwis społecznościowy. Możliwość rejestracji użytkowników, edycji ich danych profilowych, dodawania znajomych i pisania do nich wiadomości. To wystarczy, aby móc skorzystać z wymienionych elementów jezyka, a przy okazji trochę pobawić się danymi z bazy.

0

Dziękuję za szybką odpowiedź. Używam Lazarusa. Interesuje mnie co masz na mysli 'pisania do nich wiadmości', jak to ma wyglądać ?:)

0
Mateusz19921 napisał(a):

Używam Lazarusa.

W takim razie skorzystaj z formatu INI do przechowywania danych w pliku tekstowym, a do ich obsługi z poziomu kodu użyj klasy TIniFile – jest bardzo prosta i wygodna. Lepsze to niż ręczne parsowanie zawartości za pomocą ReadLn.

Interesuje mnie co masz na mysli 'pisania do nich wiadmości', jak to ma wyglądać ?:)

Niech dany użytkownik może wysłać wiadomość do innego. Potrzebne będą dane nadawcy i odbiorcy oraz treść wiadomości. Każdy użytkownik powinien w bazie zawierać dane profilowe i listę wiadomości – wysłanych i odebranych.

1

Dziękuję, efekty pracy pokażę kiedy skończę swój mały 'projekt'. :)

1

Od razu zasugeruję pewną rzecz.

Niech program używa ogólnego licznika dla ID użytkowników – początkowo niech zawiera wartość 0. Podczas rejestracji użytkownika, użyj bieżącego ID i inkremenetuj ten licznik. Jego stan trzymaj w bazie. Po usunięciu użytkownika, nie dekrementuj ogólnego licznika – on ma tylko rosnąć.

Po wysyłaniu wiadomości, zapisz w strukturze danych odbiorcy (w bazie) wyłącznie ID nadawcy oraz treść wiadomości. Jeśli będziesz potrzebował wyświetlić wiadomość na ekranie, użyj ID nadawcy do pozyskania informacji na jego temat (np. imienia i nazwiska).

Dzięki ogólnemu licznikowi identyfikatorów, ID nie będą się powtarzać, a także pozwoli to zaoszczędzić miejsca w bazie (plik tekstowy będzie mniejszy). Takie rozwiązanie jest proste – do takiej testowej aplikacji służącej do ćwiczenia swoich umiejętności spokojnie wystarczy.

1

Witam, miałem podzielić się programem. Nie podołałem pomysłowi, który Pan mi zaproponował. Zrobiłem troche inny program - mam kilka innych pytań. Mianowicie.

  1. Jak zmienic polecenie, aby powrocilo mi do menu glownego. Kiedy stworzę, np. nową baze danych program mi sie wylacza a chce tego uniknac tylko chcialbym, zeby wrocil do menu glownego.
  2. Jak dodać mozliwosc dodawania kolejnego konkursu bez zmiany bazy glownej?
  3. Tam gdzie jest \ nie mam pojecia jak zrobic...
 program BazaDanych;
uses crt,dos;
type
  Konkurs = record
  Nazwa : string[40];
  Rok : integer;
  Miesiac : string[20];
  Dzien : byte;
  Miejsce : string[200];
  liczbaU : integer;
  end;
const
  NazwaPliku ='M:\dobry\baza.txt';
Var
  S : string;
  Dane : Konkurs;
  I, Kod : integer;
  Plik: file of Konkurs;
  Tab : array[1..6] of Konkurs;
  liczbaKon: integer;
procedure zapiszplik;
var
wybor:Char;
begin
ClrScr;
Assign(Plik, NazwaPliku);
Rewrite(Plik);
Writeln('Jaka liczbe konkursow chcesz dodac?');
readln(liczbaKon);
writeln('Wprowadz informacje o konkursie...');
for I:= Low(Tab) to LiczbaKon do
begin
with Tab[i] do
begin
Writeln('Dane konkursu numer: ', I, ' z : ',LiczbaKon);
Write('Podaj nazwe: ');
readln(Nazwa);
Write('Podaj rok w ktorym nastapi konkurs: ');
readln(Rok);
Write('Podaj miesiac w ktorym nastapi konkurs: ');
readln(Miesiac);
Write('Podaj dzien w ktorym nastapi konkurs: ');
readln(Dzien);
Write('Podaj miejsce gdzie odbedzie sie konkurs: ');
readln(Miejsce);
repeat
Write('Podaj liczbe osob bioracych udzial w konkursie: ');
readln(S);
Val(S, LiczbaU, kod)
until (kod=0) and (LiczbaU > 0 ) and (LiczbaU <High(LiczbaU));
write(plik, Tab[i]);
clrscr;
end;
end;
Writeln('Powrot do Menu Glownego - Enter.');
Writeln('Wyjscie z Programu - Esc.');
repeat
wybor :=readkey;
case wybor of
//  #13 : menu;
  #27 : exit;
end;
until (wybor = #13) or (wybor = #27) ;
close(plik);
readln;
end;
procedure WczytajPlik;
  begin
    ClrScr;
    Assign(Plik, NazwaPliku);
    Reset(Plik);
    LiczbaKon := FileSize(Plik);
    if LiczbaKon > 0 then
    begin
      for I := 1 to LiczbaKon do
      begin
        Read(Plik, Dane);
        Writeln(' Konkurs numer: ', I, ' - dane:');
        Writeln(' Nazwa: ', Dane.Nazwa);
        Writeln(' Rok: ', Dane.Rok);
        Writeln(' Miesiac: ', Dane.Miesiac);
        Writeln(' Dzien: ', Dane.Dzien);
        Writeln(' Miejsce: ', Dane.Miejsce);
        Writeln(' Liczba uczestnikow: ', Dane.LiczbaU);
        Writeln;
      end;
      Readln;
    end;
  end;
// procedure DodajKonkurs;
procedure SzukajMiejsca;
var
  Znaleziono : boolean;
  SzukaneMiejsce : string;
  begin
    ClrScr;
    Assign(Plik, NazwaPliku);
    Reset(Plik);
    LiczbaKon := FileSize(Plik);
    if LiczbaKon > 0 then
    begin
      Znaleziono := False;
      Writeln('Podaj miejsce konkursu, ktore chcesz wyszukac.');
      Write('UWAGA! wielkosc liter ma znaczenie: ');
      Readln(SzukaneMiejsce);
      for I := 1 to LiczbaKon do
      begin
        Read(Plik, Dane);
        Znaleziono := Dane.Miejsce = SzukaneMiejsce;
        if Znaleziono = True then
        begin
          Break;
        end;
      end;
      if Znaleziono = True then
      begin
        Writeln(' Znaleziono Konkurs pod numerem: ', I, ' - dane:');
        Writeln(' Nazwa: ', Dane.Nazwa);
        Writeln(' Rok: ', Dane.Rok);
        Writeln(' Miesiac: ', Dane.Miesiac);
        Writeln(' Dzien: ', Dane.Dzien);
        Writeln(' Miejsce: ', Dane.Miejsce);
        Writeln;
      end
      else
      begin
        Writeln('Nie znaleziono konkursu w podanej miejscowosci: ', SzukaneMiejsce);
        Writeln;
      end;
      Readln;
    end;
  end;
procedure Menu;
var
  Odp : Char;
begin
  ClrScr;
  writeln('Witaj w programie poswieconym tworzeniu bazy danych o konkursach Matematycznych...');
  Writeln;
  Writeln(' Co chcesz zrobic:');
  Writeln;
  Writeln(' 1 = Stworzyc nowa baze danych o konkursach.');
  Writeln(' 2 = Odczytac zapisana baze danych.');
  Writeln(' 3 = Dodac konkurs do istniejacej bazy danych.');
  Writeln(' 4 = Znalezc konkurs po miejscu organizacji.');
  Writeln;
  Writeln(' Kazdy inny klawisz - wyjscie z programu...');
  Odp := ReadKey;
  case Odp of
    '1' : Zapiszplik;
    '2' : WczytajPlik;
  //  '3' : DodajKonkurs;
    '4' : SzukajMiejsca;
  else
    Halt;
  end;
end;
begin
  Menu;
end.
1

Sformatuj ten kod bo nie da się tego analizować. Żeby wracało do menu skorzystaj z konstrukcji

repeat 
[menu] 
until (koniec)

Odpowiedź na resztę bez formatowania kodu to harakiri.

0

Dzięki za odpowiedź. Co do tego co napisałeś wraca tylko raz do menu a pozniej jak chce wlaczyc ktores z polecen wyskakuje blad RunError(5).

W jakim sensie sformatowac?

0

Pomoże ktoś na poniedziałek muszę oddać , a sesja z innych przedmiotów zbliza się. :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0