//autoeditácia príspevku ( 14 May 2009, 14:42 )
uz som s tym zacal nieco mi ide nieco treba dorobit jedna sa o evidenciu knih. Potrebujem pomoct s par procedurami
//autoeditácia príspevku ( 14 May 2009, 16:31 )
nikto?
Kód: Vybrať všetko
#include "stdafx.h"
#include "iostream"
#include "fstream"
using namespace std;
class Kniha
{
public:
Kniha();
~Kniha();
void pridaj(int i);
void vypis();
private:
char Meno[30];
char Priezvisko[30];
char Nazov[30];
int Rok;
int Ev_cislo;
unsigned short int Cena;
};
char menu()
{
char ans;
cout << " __________________________________________ \n";
cout << " M E N U \n";
cout << " K N I Z N I C E \n";
cout << " __________________________________________ \n";
cout << " - 1 - Pridanie knihy - 1 - \n";
cout << " - 2 - Editacia - 2 - \n";
cout << " - 3 - Mazanie - 3 - \n";
cout << " - 4 - Vyhladavanie - 4 - \n";
cout << " - 5 - Zoradenie - 5 - \n";
cout << " - 6 - Vypis - 6 - \n";
cout << " - 0 - Koniec - 0 - \n";
cout << " __________________________________________ \n";
cin >> ans;
return ans;
}
Kniha::Kniha()
{
}
Kniha::~Kniha()
{
}
void Kniha::pridaj(int i)
{
Kniha TKniha[30];
fstream subor;
subor.open ("Knihy.txt",fstream::out | fstream::app);
cout << "Zadajte meno autora " << i << ". knihy:\n";
cin >> TKniha[i].Meno;
cout << "Zadajte priezvisko autora " << i << ". knihy\n";
cin >> TKniha[i].Priezvisko;
cout << "Zadajte nazov " << i << ". knihy\n";
cin >> TKniha[i].Nazov;
cout << "Zadajte rok vydania " << i << ". knihy\n";
cin >> TKniha[i].Rok;
cout << "Zadajte evidencne cislo " << i << ". knihy\n";
cin >> TKniha[i].Ev_cislo;
cout << "Zadajte cenu " << i << ". knihy\n";
cin >> TKniha[i].Cena;
subor << i << " " << TKniha[i].Meno << " " << TKniha[i].Priezvisko << " " << TKniha[i].Nazov << " " << TKniha[i].Rok << " " << TKniha[i].Ev_cislo << " " << TKniha[i].Cena <<endl;
subor.close();
}
void Kniha::vypis()
{
Kniha TKniha [30];
char vypis[100];
fstream subor;
subor.open ("Knihy.txt",fstream::in);
while(!subor.eof())
{
subor.getline(vypis,100);
cout << vypis << endl;
}
subor.close();
}
int _tmain(int argc, _TCHAR* argv[])
{
int i=0;
fstream subor;
Kniha TKniha[30];
char ans;
do
{
ans=menu();
switch(ans)
{
case '0': ans='0';
break;
case '1': system("cls");
i++;
TKniha[i].pridaj(i);
break;
case '6': system("cls");
TKniha[i].vypis();
break;
}
}while (ans != '0');
return 0;
}
Kód: Vybrať všetko
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct Zakaznik{
char *Meno;
char *Priezvisko;
char *ID;
char *Adresa;
char *Rok;
char *Tel;
char *Tovar;
int Cena;
}ZAKAZNIK;
#define MAX_POLOZIEK 500
#define STRUCT_SIZE sizeof(ZAKAZNIK)
ZAKAZNIK **Polozka;
int Pocet=0;
void UvolniPamat(void)
{ int i;
for(i=0;i<Pocet;i++){
free(Polozka[i]->Meno);
free(Polozka[i]->Priezvisko);
free(Polozka[i]->Adresa);
free(Polozka[i]->ID);
free(Polozka[i]->Tel);
free(Polozka[i]->Rok);
free(Polozka[i]->Tovar);
free(Polozka[i]);
}
free(Polozka);
Pocet = 0;
}
int Menu()
{ char akcia;
printf("\n\nZADANIE Z PROGRAMOVANIA\n\n");
printf(" 1. Pridaj zakaznika\n 2. Odober zakaznika\n 3. Usporiadaj podla ceny\n");
printf(" 4. Usporiadaj podla priezviska\n 5. Vypis zoznamu\n 6. Uloz do suboru\n");
printf(" 7. Nacitaj zo suboru\n 8. Ukonci program\n");
printf("\nZadaj cislo pozadovanej akcie: ");
do{
akcia = getchar();
}while(akcia > '8' || akcia < '1');
return (akcia);
}
char flushkbd(void)
{ char key;
do{}while((key = getchar()) == '\n');
return key;
}
char *fgetstr(FILE *fp)
{ char pom[1000], ch, *ret;
int i=0;
do{
ch = fgetc(fp);
pom[i] = ch;
i++;
}while(ch != '\n');
pom[i-1] = '\0';
ret = (char *)malloc(strlen(pom)+1);
strcpy(ret, pom);
return ret;
}
char *ReadStr()
{ char pom[1000]="", ch, *ret;
int index=1;
pom[0] = flushkbd();
do{
ch = getc(stdin);
if(ch != '\n') pom[index] = ch; else pom[index] = '\0';
index++;
}while(ch != '\n');
ret = (char *)malloc(strlen(pom)+1);
strcpy(ret, pom);
return ret;
}
void Pridaj()
{ char ch;
int len,i;
if(Pocet < MAX_POLOZIEK){
Polozka = (ZAKAZNIK **)realloc(Polozka, (Pocet+1)*8);
Polozka[Pocet] = (ZAKAZNIK *)malloc(STRUCT_SIZE);
printf("\nMeno: ");
Polozka[Pocet]->Meno = ReadStr();
printf("\nPriezvisko: ");
Polozka[Pocet]->Priezvisko = ReadStr();
printf("\nID Cislo: ");
Polozka[Pocet]->ID = ReadStr();
printf("\nAdresa: ");
Polozka[Pocet]->Adresa = ReadStr();
printf("\nTelefon: ");
Polozka[Pocet]->Tel = ReadStr();
printf("Rok posledneho odberu: ");
Polozka[Pocet]->Rok = ReadStr();
printf("\nNazov Tovaru: ");
Polozka[Pocet]->Tovar = ReadStr();
printf("\nCena: ");
scanf("%d", &Polozka[Pocet]->Cena);
Pocet++;
}
}
void Odober(int Index)
{ int i;
if(Index < Pocet){
free(Polozka[Index]->Meno);
free(Polozka[Index]->Priezvisko);
free(Polozka[Index]->Adresa);
free(Polozka[Index]->ID);
free(Polozka[Index]->Tel);
free(Polozka[Index]->Rok);
free(Polozka[Index]->Tovar);
free(Polozka[Index]);
for(i=Index;i<Pocet-1;i++) Polozka[i] = Polozka[i+1];
Pocet--;
Polozka = (ZAKAZNIK **)realloc(Polozka, Pocet*8);
}
}
void Uloz(const char *Nazov)
{ FILE *fp;
int i;
if((fp = fopen(Nazov,"w+")) != NULL){
fprintf(fp,"%d\n", Pocet);
for(i=0;i<Pocet;i++){
fprintf(fp,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%d\n", Polozka[i]->Meno, Polozka[i]->Priezvisko, Polozka[i]->Adresa,
Polozka[i]->ID, Polozka[i]->Tel,
Polozka[i]->Rok, Polozka[i]->Tovar,
Polozka[i]->Cena);
}
fclose(fp);
}
}
void Nacitaj(const char *Nazov)
{ FILE *fp;
char *pom;
int i;
if((fp = fopen(Nazov,"r")) != NULL){
Pocet = 0;
fscanf(fp,"%d\n", &Pocet);
Polozka = (ZAKAZNIK **)realloc(Polozka, Pocet*8);
for(i=0;i<Pocet;i++){
Polozka[i] = (ZAKAZNIK *)malloc(STRUCT_SIZE);
Polozka[i]->Meno = fgetstr(fp);
Polozka[i]->Priezvisko = fgetstr(fp);
Polozka[i]->ID = fgetstr(fp);
Polozka[i]->Adresa = fgetstr(fp);
Polozka[i]->Tel = fgetstr(fp);
Polozka[i]->Rok = fgetstr(fp);
Polozka[i]->Tovar = fgetstr(fp);
fscanf(fp,"%d\n", &Polozka[i]->Cena);
}
fclose(fp);
}
}
// podla = 1 (Priezv) 2 = (Cena)
void Tried(int podla)
{ int i,j,vymen=0;
ZAKAZNIK *Pom;
for(i=0;i<Pocet-1;i++){
for(j=0;j<Pocet-1;j++){
if(podla == 1){
if(strcmp(Polozka[j]->Priezvisko, Polozka[j+1]->Priezvisko) > 0) vymen = 1; else vymen = 0;
}else if(podla == 2){
if(Polozka[j]->Cena > Polozka[j+1]->Cena ) vymen = 1; else vymen = 0;
}
if(vymen){
Pom = Polozka[j];
Polozka[j] = Polozka[j+1];
Polozka[j+1] = Pom;
}
}
}
}
void Vypis(void)
{ int i;
for(i=0;i<Pocet;i++){
printf("--------------------------%3d -----------------------------", i+1);
printf("\nMeno zakaznika: %s %s", Polozka[i]->Meno, Polozka[i]->Priezvisko);
printf("\nIdentifikacne cislo: %s", Polozka[i]->ID);
printf("\nAdresa zakaznika: %s", Polozka[i]->Adresa);
printf("\nTelefon zakaznika: %s", Polozka[i]->Tel);
printf("\nRok posledneho odberu: %s", Polozka[i]->Rok);
printf("\nNazov tovaru: %s", Polozka[i]->Tovar);
printf("\nCena tovaru: %d\n", Polozka[i]->Cena);
if((i+1)%3 == 0){
printf("\n");
getchar();
}
}
printf("-----------------------------------------------------------\n");
printf("\n");
getchar();
}
int main(int argc, char *argv[])
{ char Volba, fname[500];
int idx;
while((Volba = Menu()) != '8'){
switch(Volba){
case '1': Pridaj();
break;
case '2': printf("\nZadaj index zakaznika: ");
scanf("%d", &idx);
Odober(idx-1);
break;
case '3': Tried(2);
break;
case '4': Tried(1);
break;
case '5': Vypis();
break;
case '6': printf("\nZadaj nazov suboru do ktoreho sa ma ulozt obsah zoznamu: ");
scanf("%s", &fname);
Uloz(fname);
break;
case '7': printf("\nZadaj nazov suboru z ktoreho sa ma nacitat obsah zoznamu: ");
scanf("%s", &fname);
Nacitaj(fname);
break;
}
}
UvolniPamat();
printf("\n");
return EXIT_SUCCESS;
}