Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Mi-au disparut amigdalitele ?

Exista vreun plan de terorizare p...

Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone
 Monede JO 2024

Suprasolicitare sistem electric

CIV auto import

Mutare in MOZAMBIC - pareri, expe...
 Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...

Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...
 Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...

Kanal D va difuza serialul “...

Upgrade xiaomi mi11
 

Proiect aplicatie baza de date

- - - - -
  • Please log in to reply
66 replies to this topic

#1
georgecosmin98

georgecosmin98

    Junior Member

  • Grup: Members
  • Posts: 84
  • Înscris: 26.11.2017
Buna seara!

Dupa cum stiti din topicurile trecute, am un proiect de facut in consola (c++). M-am gandit sa fac un topic in care sa cer sfaturi. In acest topic o sa las cam toata aplicatia pentru ca toti cei interesati sau cei care vor sa faca ceva asemanator sa aiba un punct de plecare.

Am scris putin cod, dar momentan nu e foarte mult si mai am nevoie de timp pentru a ajunge la un nivel care merita postat.

Prima intrebare pe care vreau sa o pun e:

Vreau sa fac o adaugare intr-un fisier. Pana aici ma descurc, dar intrebarea mea e, cum fac sa adaug in fisier si acel fisier sa se actualizeze direct ( sa nu trebuiasca sa inchid consola) ?

Am cautat pe net, dar nu am reusit sa gasesc ceva care sa ma ajute ...

Mai jos las clasa stoc

#pragma once
#include <iostream>
#include <string>
#include <fstream>
class stoc{
private:
std::string numeSub;
int cantitate;
int pretPeUnitate;
public:

stoc(std::string="",int = 0,int = 0);	
void setStoc(std::string, int, int);
void afStoc();
void adStoc();
void stStoc();
};



Aici e CPP-ul clasei stoc(neterminat).

#include "stdafx.h"
#include "stoc.h"
#include <vector>
std::ofstream g("stoc.txt",std::ofstream::app);
std::ifstream f("stoc.txt");
stoc::stoc(std::string n,int c,int p)
{
setStoc(n, c, p);
}
void stoc::setStoc(std::string n,int c,int p)
{
numeSub = n;
cantitate = c;
pretPeUnitate = p;
}
void stoc::afStoc()
{
std::cout << "Denumire: " << numeSub << " "
	 << "Cantitate: " << cantitate << " "
	 << "Pret pe unitate: " << pretPeUnitate << std::endl;

}
void stoc::adStoc()
{
g << std::endl;
g << numeSub << " " << cantitate << " " << pretPeUnitate;
}
void stoc::stStoc()
{
}



O mare rugaminte am la dumneavoastra. Vreau sa ma corectati daca ma exprim gresit (in limbaj informatic), chiar vreau sa invat si sa imi fixez lucrurile bine!

Edited by georgecosmin98, 28 March 2018 - 20:17.


#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Apeland flush pe streamul in cauza (std::endl apelaza si el un flush)

Sfaturi aditionale:
  • Scapa de stdafx.h ca nu-l folosesti cum trebuie (si nu e standard). Alegi empty project fara precompiled headers cand creezi proiectul (poti dezactiva si in cazul unui proiect existent cauta prin setarile proiectului)
  • Scapa de variabile globale
  • Alege mai bine numele claselor/metodelor/variabilelor. Ce-i aia "afStoc" sau "stStoc"?

Edited by dani.user, 28 March 2018 - 20:23.


#3
georgecosmin98

georgecosmin98

    Junior Member

  • Grup: Members
  • Posts: 84
  • Înscris: 26.11.2017
Multumesc frumos!

Am cautat destul de mult, dar chiar nu m-am gandit sa caut sync. Ma gandeam ca e ceva functie in biblioteca fstream si am citit mult din documentatia acestei biblioteci.

afStoc -> Afisare Stoc
stStoc -> Sterge Stoc

Imi puteti spune cum se dau nume potrivite claselor/metode/variabile?

Pentru a face stergerea unei linii din fisier, singura metoda e cu un fisier temporar sau exista si o alta varianta?

Edited by georgecosmin98, 28 March 2018 - 20:36.


#4
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postgeorgecosmin98, on 28 martie 2018 - 20:32, said:

Imi puteti spune cum se dau nume potrivite claselor/metode/variabile?
Incepe prin a scrie tot codul in engleza.

Mai departe, citeste asta: http://hilton.org.uk...-things-is-hard

Apoi trebuie sa raspunzi aici:

1. cat de departe vrei sa mergi cu acest proiect?
2. Vrei sa folosesti OOP corect?
3. Cat de mult "overengineering" esti dispus sa faci? O alta interpretare a acestei intrebari e: cat de multe vrei sa inveti din acest proiect?

Edited by OriginalCopy, 28 March 2018 - 20:47.


#5
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013

View Postdani.user, on 28 martie 2018 - 20:17, said:

(si nu e standard).
Ai putea sa oferi mai multe detalii in acest sens? :D

#6
georgecosmin98

georgecosmin98

    Junior Member

  • Grup: Members
  • Posts: 84
  • Înscris: 26.11.2017
Pai trebuie sa il fac, chiar daca nu la un nivel foarte pro (sunt primul an si e primadata cand lucrez cu clase).

in loc de afStoc e ok daca folosesc, de exemplu, printStock sau print_stock? Si daca da care ar e varianta mai corecta?

View PostOriginalCopy, on 28 martie 2018 - 20:41, said:


3. Cat de mult "overengineering" esti dispus sa faci? O alta interpretare a acestei intrebari e: cat de multe vrei sa inveti din acest proiect?

Pai vreau sa invat cateva lucruri noi, dar momentan nu stiu daca am timp sa invat foarte multe tinand cont ca in jurul datei de 20 aprilie trebuie sa am deja pregatit un demo al proiectului pentru ca mai apoi sa reusesc pana pe la jumatatea lunii mai sa-l termin. Pe langa aceasta aplicatie mai am si cateva examene partiale pe care trebuie sa le trec, deci sunt putin presat si de timp

#7
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postgeorgecosmin98, on 28 martie 2018 - 20:46, said:

Si daca da care ar e varianta mai corecta?
Varianta cea mai corecta e sa faci o clasa StdStockPrinter care accepta in constructorul sau un obiect Stock si care poate printa acel stock in orice ostream.

Ai numi asta "a stock decorator* for printing stocks on any ostream".

*decorator insemnand: https://en.wikipedia...corator_pattern

Varianta gresita e sa faci o clasa Stock care face de toate: calcule matematice, afisare, interactiuni cu alte obiecte din domeniu, etc

#8
georgecosmin98

georgecosmin98

    Junior Member

  • Grup: Members
  • Posts: 84
  • Înscris: 26.11.2017
Am modificat clasa si cpp-ul.


stock.h
#pragma once
#include <iostream>
#include <string>
#include <fstream>
class stock {
private:
std::string name;
int quantity;
int price;
public:
stock(std::string = "", int = 0, int = 0);
void setStock(std::string, int, int);
void printStock();
void insertStock();
void deleteStock();
};


stock.cpp

#include "stock.h"
#include <vector>
#include <ostream>
std::ofstream g("stock.txt", std::ofstream::app);
std::ifstream f("stock.txt");
stock::stock(std::string n, int c, int p)
{
setStock(n, c, p);
}
void stock::setStock(std::string n, int c, int p)
{
name = n;
quantity = c;
price = p;
}
void stock::printStock()
{
std::cout << "Denumire: " << name << " "
  << "Cantitate: " << quantity << " "
  << "Pret pe unitate: " << price << std::endl;

}
void stock::insertStock()
{
g << std::endl;
g << name << " " << quantity << " " << price << std::flush;
}
void stock::deleteStock()
{
}




#9
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Mult mai bine. Acum treci la StdStockPrinter.

#10
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007

View Postjegmihai, on 28 martie 2018 - 20:45, said:

Ai putea sa oferi mai multe detalii in acest sens? Posted Image

Precompiled headers e o facilitate oferita pentru a reduce timpii de compilare (in special in proiecte mari). Nu e insa ceva standardizat, compilatoarele ce ofera aceasta facilitate oferind-o ca pe un bonus, fiecare cum considera mai bine. Cand schimbi compilatorul s-ar putea sa nu functioneze cum te astepti.

Nici #pragma once nu e standard, dar asta macar e suportata de multe compilatoare (si mi se pare mult mai curata fata de alternativa)

View Postgeorgecosmin98, on 28 martie 2018 - 20:32, said:

Pentru a face stergerea unei linii din fisier, singura metoda e cu un fisier temporar sau exista si o alta varianta?

Incepi sa te apropii de problemele bazelor de date. Nu exista o solutie universala pentru stergere, trebuie sa alegi un compromis, iar asta il alegi functie de cum consideri ca vor fi utilizate acele date. Daca stergi rar alegi o cale, daca stergi cate doua inregistrari la fiecare trei inserate alegi alta cale, etc.

#11
georgecosmin98

georgecosmin98

    Junior Member

  • Grup: Members
  • Posts: 84
  • Înscris: 26.11.2017
Probabil ca o sa se stearga destul de rar. M-am gandit ca stergerea sa se faca in momentul cand un produs iese de pe piata sau se inlocuieste cu altul. In momentul in care quantity = 0 sa nu se stearga din stoc, pentru ca cel mai probabil acest fisier nu va avea vreodata mai mult de 100-150 de linii.

Ma tot gandesc sa adaug si metoda de a actualiza quantity-ul din stoc si totodata sa sortez acest fisier text pentru a fi mai usor de vizualizat.

#12
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Subiectul e vast.

De la abordari pentru fisiere text, la abordari pentru fisiere binare.
De la cod scris de tine cap-coada, la cod semi-generat (gen ProtoBuffers), la baze de date adevarate ce stocheaza totul intr-un fisier sau mai multe.
De la solutii ce permit unui singur utilizator sa foloaseasca baza de date in acelasi timp, la solutii ce permit mai multora.

Edited by dani.user, 28 March 2018 - 21:40.


#13
georgecosmin98

georgecosmin98

    Junior Member

  • Grup: Members
  • Posts: 84
  • Înscris: 26.11.2017
Aplicatia nu trebuie sa fie o baza de date foarte complexa. O sa am pentru fiecare clasa cate un fisier text cu cateva valori salvate in ele.

Pana la urma, scopul aplicatiei e sa ne fixam clasele. Ni s-a spus ca nu sunt pretentii exagerate gen: sa nu folosim using namespace std, variabile globale,etc. Daca nu le folosim e bine, dar si daca le folosim nu e gresit. Eu am incercat sa nu folosesc nici variabile globale si nici "using namespace std".

#14
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,603
  • Înscris: 30.07.2003

View Postgeorgecosmin98, on 28 martie 2018 - 21:46, said:

Eu am incercat sa nu folosesc nici variabile globale si nici "using namespace std".
Pai std ai folosit. Altfel foloseste fopen, fread, fwrite etc.

#15
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Se refera la evitarea importului intregului namespace specificand in loc explicit std:: peste tot.

#16
georgecosmin98

georgecosmin98

    Junior Member

  • Grup: Members
  • Posts: 84
  • Înscris: 26.11.2017
Revin cu un update al aplicatiei.

Am reusit sa fac partea de stergere a elementelor din fisier, dar am cateva probleme in alta parte. Daca vreau sa afisez stock-ul din fisier, totul functioneaza bine, daca dau back spre meniul principal si apoi intru din nou sa afisez stock-ul, nu se mai afiseaza nimic. Momentan ma chinui sa-i fac un debug.

Mai jos las o parte din program, astept sfaturi,critici si pareri.

O sa mai fac probabil o parte de "actualizare stoc" si o sa termin cu prima parte a programului.

stock.h

#pragma once
#include <iostream>
#include <string>
#include <fstream>
class stock {
private:
std::string name;
int quantity;
int price;
public:
stock(std::string = "", int = 0, int = 0);
void setStock(std::string, int, int);
void printStock();
void insertStock();
void deleteStock();
void deleteStockLastLine();
};


functii.h

#pragma once
std::ifstream stockFile("stock.txt");
void read_Stock()
{
std::string n = "";
int c = 0, p = 0;
std::vector<stock> s1;
std::cout << "Denumire: ";
std::cin >> n;
std::cout << "Cantitate: ";
std::cin >> c;
std::cout << "Pret";
std::cin >> p;

s1.push_back(stock(n, c, p));
for (int i = 0; i < 1; i++)
  s1[i].insertStock();
}
void add_Stock()
{
std::string name = "";
int quantity = 0;
int price = 0;
std::vector<stock> s1;

while (stockFile.good())
{
  stock s;
  stockFile >> name;
  stockFile >> quantity;
  stockFile >> price;
  s1.push_back(stock(name, quantity, price));
}
for (int i = 0; i < s1.size(); i++)
  s1[i].printStock();
}
void delete_Stock(std::string n)
{
int price = 0;
int quantity = 0;
std::string name = "";
std::vector<stock> s;
while (stockFile.good())
{
  stockFile >> name;
  stockFile >> quantity;
  stockFile >> price;
  if (n != name)
   s.push_back(stock(name, quantity, price));
}
stockFile.close();
std::ifstream stockFile("stock.txt", std::ofstream::out | std::ofstream::trunc);
std::ofstream temp("stock.txt");
for (int i = 0; i < s.size(); i++)
{
  if (i < s.size() - 1)
   s[i].deleteStock();
  else
   s[i].deleteStockLastLine();
}
}



stoc.cpp

#include "stock.h"
#include <vector>
#include <ostream>
std::ofstream g("stock.txt", std::ofstream::app);
std::ifstream f("stock.txt");
stock::stock(std::string n, int c, int p)
{
setStock(n, c, p);
}
void stock::setStock(std::string n, int c, int p)
{
name = n;
quantity = c;
price = p;
}
void stock::printStock()
{
std::cout << "Denumire: " << name << " "
  << "Cantitate: " << quantity << " "
  << "Pret pe unitate: " << price << std::endl;
}
void stock::insertStock()
{
g << std::endl;
g << name << " " << quantity << " " << price << std::flush;
}
void stock::deleteStock()
{
g << name << " " << quantity << " " << price;
g << std::endl;
}
void stock::deleteStockLastLine()
{
g << name << " " << quantity << " " << price;
}



Scuzati dezordinea, cand termin toata partea de stoc o sa ma apuc sa fac si o curatenie.

#17
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Streamuri globale, chiar mai multe spre acelasi fisier.

#18
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018

View Postgeorgecosmin98, on 30 martie 2018 - 18:34, said:

Revin cu un update al aplicatiei.

Am reusit sa fac partea de stergere a elementelor din fisier, dar am cateva probleme in alta parte. Daca vreau sa afisez stock-ul din fisier, totul functioneaza bine, daca dau back spre meniul principal si apoi intru din nou sa afisez stock-ul, nu se mai afiseaza nimic. Momentan ma chinui sa-i fac un debug.
In momentul cand te intorci ai grija sa eliberezi toti pointerii si toate adresele de memorie derefentiate de acestia.
Ce ai tu semana cu memory leak.

Daca definesti  array-uri de structuri de date si le alocei cu malloc  atunci sa stii pt a elibarea zona de memorie deservita de un astfel de array trebuie sa parcuri
urmatorul limbaj pseducod:
Pentru i = 0 pana la lungime array -1 executa
eliberarea element la pozitia i
sfarsit
eliberare variabila care stocheaza array-ul


Edited by WinstonMontana, 30 March 2018 - 20:36.


Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate