Jump to content

Програма на с++, как да се запаметят въведените данни


Препоръчан пост

имам следната програма:

 

#include <cstdlib>
#include <iostream>

using namespace std;

int main(){
char name[20];
cout<<"Ime na produkt"<<"\n";
cin>>name;
cout<<name<<"\n";
cout<<"Molq vuvedete cena:";
int cena;
cin>>cena;
cout<<name <<" struva :"<<cena<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

 

как да направя така, че да се запаметяват някъде данните,които се въвеждат.И как да имам достъп до тях?

Моля ви помогнете ми!

Благодаря

Редактиран от IVAN
Промяна на заглавието и част от правописа
Link to comment
Сподели другаде

Има доста възможности за записване/четене на информацията.

Аз бих предпочел база данни, но винаги можещ да използваш XML или INI файл, регистрите според мен не са добро решение за подобен тип програма...

Link to comment
Сподели другаде

#include <iostream>
using namespace std;

void menu(unsigned int& nCmd);

int main()
{
unsigned int nCmd = 0;
float cena = 0;
char name[20] = "";
FILE *store;

while ( true )
{
	menu(nCmd);
	system("cls");
	
	switch (nCmd)
	{
	case 0:
		cout << "\nBye;-)\n" << endl;
		exit (0);
		break;
	case 1:
		cout << "Ime na produkt: ";
		cin.ignore(20, '\n');
		cin.getline(name, 20);
		cout << "Molq, vuvedete cena za " << name << " : ";
		cin >> cena;
		cout << name << " struva " << cena << endl;
		break;
	case 2:
		if (name == "" || !cena)
		{
			cout << "Ne sa vyvedeni danni" << endl;
			break;
		}

		store = fopen(".\\store.txt", "w");

		fprintf(store, "%s\n", name);
		fprintf(store, "%f\n", cena);

		fclose(store);

		cout << "Dannite sa syhraneni uspeshno.\n" << endl;
		break;
	case 3:
		store = fopen(".\\store.txt", "r+");
		if ( NULL == store )
		{
			cout << "Failyt ne moje da byde zareden." << endl;
			break;
		}

		fscanf(store, "%[^\t\n]", name);
		fscanf(store, "%f\n", &cena);

		fclose(store);

		cout << "Dannite sa zaredeni uspeshno.\n" << endl;
		cout << name << " struva " << cena << endl;

		break;
	default:
		break;
	}
}

return EXIT_SUCCESS;
}

void menu(unsigned int& nCmd)
{
cout << endl;
cout << "--------------------------------------" << endl;
cout << "MENU:" << endl;
cout << "--------------------------------------" << endl << endl;

cout << "(1) vyvejdane na danni ot klaviaturata" << endl;
cout << "(2) syhraniavane na danni vyv fail" << endl;
cout << "(3) zarejdane na danni ot fail" << endl;
cout << "(0) izhod ot programata" << endl;
cout << endl;
cout << ": ";

cin >> nCmd;
}

 

Поздрави.

Link to comment
Сподели другаде

Много благодаря!!!

Явно съм още в началото,щом някой неща не са ми познати.

 

 

Имам огромното желание да науча C++ и да го практикувам лесно.Затова пак благодаря за помощта!

Link to comment
Сподели другаде

#include <iostream>
using namespace std;

void menu(unsigned int& nCmd);

int main()
{
unsigned int nCmd = 0;
float cena = 0;
char name[20] = "";
FILE *store;

while ( true )
{
	menu(nCmd);
	system("cls");
	
	switch (nCmd)
	{
	case 0:
		cout << "\nBye;-)\n" << endl;
		exit (0);
		break;
	case 1:
		cout << "Ime na produkt: ";
		cin.ignore(20, '\n');
		cin.getline(name, 20);
		cout << "Molq, vuvedete cena za " << name << " : ";
		cin >> cena;
		cout << name << " struva " << cena << endl;
		break;
	case 2:
		if (name == "" || !cena)
		{
			cout << "Ne sa vyvedeni danni" << endl;
			break;
		}

		store = fopen(".\\store.txt", "w");

		fprintf(store, "%s\n", name);
		fprintf(store, "%f\n", cena);

		fclose(store);

		cout << "Dannite sa syhraneni uspeshno.\n" << endl;
		break;
	case 3:
		store = fopen(".\\store.txt", "r+");
		if ( NULL == store )
		{
			cout << "Failyt ne moje da byde zareden." << endl;
			break;
		}

		fscanf(store, "%[^\t\n]", name);
		fscanf(store, "%f\n", &cena);

		fclose(store);

		cout << "Dannite sa zaredeni uspeshno.\n" << endl;
		cout << name << " struva " << cena << endl;

		break;
	default:
		break;
	}
}

return EXIT_SUCCESS;
}

void menu(unsigned int& nCmd)
{
cout << endl;
cout << "--------------------------------------" << endl;
cout << "MENU:" << endl;
cout << "--------------------------------------" << endl << endl;

cout << "(1) vyvejdane na danni ot klaviaturata" << endl;
cout << "(2) syhraniavane na danni vyv fail" << endl;
cout << "(3) zarejdane na danni ot fail" << endl;
cout << "(0) izhod ot programata" << endl;
cout << endl;
cout << ": ";

cin >> nCmd;
}

 

има ли начин в тази програма запаметяването на всяко едно въвеждане на продуктки да става автоматично(без да се запаметява от човек всеки път)..?

да си е като вградено в програмата-щом някой въведе нещо-всичко то да се пази и да може да се отвори и види

Благодаря предварително за помощта

 

Успях сама да го направя да се запаметява само.

Благдаря все пак.

Имам друг проблем сега: има ли как този файл"store" да се отваря само ако се напише парола

 

Всеки път след като стартирам наново програмата,предишните данни ми се изтриват от файла :"store" ....има ли начин те да се запаметяват и да си стоят винаги в този файл(и старите и новите въведени неща).Примерно да искам да погледна вчера какво съм въвеждала.????

Link to comment
Сподели другаде

Предполагам, нещо такова ти трябва, но преди да стартираш програмата, изтрий стария файл store.txt, ако съществува:

 

#include <iostream>
using namespace std;

void menu(unsigned int& nCmd);

int main()
{
unsigned int nCmd = 0;
float cena = 0;
char name[20] = "";
char pass[20] = "";
char passTmp[20] = "";
FILE *store;

while ( true )
{
	menu(nCmd);
	system("cls");
	
	switch (nCmd)
	{
	case 0:
		cout << "\nBye;-)\n" << endl;
		exit (0);
		break;
	case 1:
		store = fopen(".\\store.txt", "a+");
		fscanf(store, "%s", pass);

		while ( strlen(pass) == 0)
		{
			cout << "Molia, izberete parola za zashtita na faila: (bez intervali)";
			cin.ignore(20, '\n');
			cin >> pass;
		}

		fprintf(store, "%s\n", pass);
		fclose(store);

		cout << "Ime na produkt: ";
		cin.ignore(20, '\n');
		cin.getline(name, 20);
		cout << "Molq, vuvedete cena za " << name << " : ";
		cin >> cena;
		cout << name << " struva " << cena << endl;

		if (strlen(name) == 0 || !cena)
		{
			cout << "Ne sa vyvedeni danni" << endl;
			break;
		}
		else
		{
			store = fopen(".\\store.txt", "a");

			fprintf(store, "%s\n", name);
			fprintf(store, "%.2f\n", cena);

			fclose(store);
		}
		break;
	case 2:
		store = fopen(".\\store.txt", "r");
		if ( NULL == store )
		{
			cout << "Failyt ne moje da byde zareden." << endl;
			break;
		}

		fscanf(store, "%s", pass);
		
		do 
		{
			cout << "Failyt e zashtiten. Vyvedete parola: ";
			cin >> passTmp;
		} 
		while ( strcmp(pass, passTmp) );

		while ( true )
		{
			if ( EOF == fscanf(store, "%s%[^\t\n]", name) )
			{
				fclose(store);
				break;
			}
			else if ( EOF == fscanf(store, "%f\n", &cena) )
			{
				fclose(store);
				break;
			}

			cout << name << " struva " << cena << endl;
		}

		fclose(store);
		break;
	default:
		break;
	}
}

return EXIT_SUCCESS;
}

void menu(unsigned int& nCmd)
{
cout << endl;
cout << "--------------------------------------" << endl;
cout << "MENU:" << endl;
cout << "--------------------------------------" << endl << endl;

cout << "(1) vyvejdane na danni ot klaviaturata" << endl;
cout << "(2) zarejdane na danni ot fail" << endl;
cout << "(0) izhod ot programata" << endl;
cout << endl;
cout << ": ";

cin >> nCmd;
}

 

Поздрави.

Link to comment
Сподели другаде

Сърдечни благодарности.Точно това трябваше да постигна,само има едно нещо още-текстовият файл "store' как да го скрия или защитя и него да не може да се трие информация оттам) ?

 

Възможно ли е да въведа и "ден",освен продукт и цена?

Link to comment
Сподели другаде

Разбира се, могат да бъдат добавени произволен брой стойности. Примерът само илюстрира един от начините за решаването на задачата. А що се отнася до скриването, то това може да бъде реализирано като вместо да се зарежда файла от текущата директория, потребителят бива питан от програмата кой файл (имам предвид пълен път към файл) да бъде зареден. Оттам нататък има и други възможности като криптиране на данните и т.н...

Все пак, преди това опитай да поекспериментираш с вече дадения пример, просто за да усетиш кое какво е и за какво се използва.

 

Поздрави.

Link to comment
Сподели другаде

#include <iostream>
using namespace std;

void menu(unsigned int& nCmd);

int main()
{
unsigned int nCmd = 0;
float cena = 0;
char name[20] = "";
char pass[20] = "";
char passTmp[20] = "";
char data[22] = "";
FILE *store;

while ( true )
{
	menu(nCmd);
	system("cls");
	
	switch (nCmd)
	{
	case 0:
		cout << "\nBye;-)\n" << endl;
		exit (0);
		break;
	case 1:
		store = fopen(".\\store.txt", "a+");
		fscanf(store, "%s", pass);

		while ( strlen(pass) == 0)
		{
			cout << "Molia, izberete parola za zashtita na faila: (bez intervali)";
			cin.ignore(20, '\n');
			cin >> pass;
		}

		fprintf(store, "%s\n", pass);
		fclose(store);
		cout << "Den na poluchena stoka : " << data <<endl;
		cin >> data;
		cout << "Ime na produkt: ";
		cin.ignore(20, '\n');
		cin.getline(name, 20);
		cout << "Molq, vuvedete cena za " << name << " : ";
		cin >> cena;
		cout <<data<<":"<< name << " struva " << cena <<"lv"<< endl;

		if (strlen(name) == 0 || !cena)
		{
			cout << "Ne sa vyvedeni danni" << endl;
			break;
		}
		else
		{
			store = fopen(".\\store.txt", "a");

			fprintf(store, "%s\n", name);
			fprintf(store, "%.2f\n", cena);

			fclose(store);
		}
		break;
	case 2:
		store = fopen(".\\store.txt", "r");
		if ( NULL == store )
		{
			cout << "Failyt ne moje da byde zareden." << endl;
			break;
		}

		fscanf(store, "%s", pass);
		
		do 
		{
			cout << "Failyt e zashtiten. Vyvedete parola: ";
			cin >> passTmp;
		} 
		while ( strcmp(pass, passTmp) );

		while ( true )
		{
			if ( EOF == fscanf(store, "%s%[^\t\n]", name) )
			{
				fclose(store);
				break;
			}
			else if ( EOF == fscanf(store, "%f\n", &cena) )
			{
				fclose(store);
				break;
			}

			cout <<data <<"-"<< name << " struva " << cena <<"lv"<< endl;
		}

		fclose(store);
		break;
	default:
		break;
	}
}

return EXIT_SUCCESS;
}

void menu(unsigned int& nCmd)
{
cout << endl;
cout << "--------------------------------------" << endl;
cout << "MENU:" << endl;
cout << "--------------------------------------" << endl << endl;

cout << "(1) vyvejdane na danni ot klaviaturata" << endl;
cout << "(2) zarejdane na danni ot fail" << endl;
cout << "(0) izhod ot programata" << endl;
cout << endl;
cout << ": ";

cin >> nCmd;
}

 

Стигнах дотам,че да мога да въведа от клавиатурата "ден",след това да ми излезе на екрана денят,обаче не мога да направя така че този "ден" да се запаметява и да излиза от запаметените данни,заедно с ""продукта" и "цената"

Link to comment
Сподели другаде

За да съхраниш въведената дата е необходимо да добавиш следното:

 

fprintf(store, "%s\n", data);

 

Непосредствено преди:

 

fprintf(store, "%s\n", name);
fprintf(store, "%.2f\n", cena);

 

А за да бъде прочетена от файла по-късно, постави следния фрагмент:

 

if ( EOF == fscanf(store, "%s", data) )
{
fclose(store);
break;
}

 

непосредствено преди

 

if ( EOF == fscanf(store, "%s%[^\t\n]", name) )
{
fclose(store);
break;
}
else if ( EOF == fscanf(store, "%f\n", &cena) )
{
fclose(store);
break;

 

Отново, както и преди, необходимо е да започнеш с нов файл "store.txt", тъй като старият ще има различна структура.

 

Поздрави.

Link to comment
Сподели другаде

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гост
Отговори на тази тема

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   Не можете да качите директно снимка. Качете или добавете изображението от линк (URL)

Loading...
×
×
  • Създай ново...