HI, can somebody help with this? This is my source code but i was trying to overwrite it, from C to C++. but no way, I'm not good at this.
Language doesn't matter. it's slovak. I just need help with syntax.
Thanks.
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#define POC 50
typedef struct zoznam { // deklarovanie, ze ide o zretazeny zoznam + deklarovanie jednotlivych pointerov a funkcii.
char *meno;
char *priezvisko;
char *rodcislo;
int pocetakcii;
struct zoznam *p_dalsi;
} ZOZNAM;
static ZOZNAM *p, *p_prvy, *p_akt, *p_pom;
ZOZNAM *alokTest();
char *alokString();
FILE *nacitajSubor();
int zapisSubor(FILE *fr);
int vytvorPrazdny();
int zrusZoznam();
int zisti();
int pridaj();
int vymaz();
int zorad();
int vypis();
#include <string.h>
#define N 50
ZOZNAM *alokTest() //funkcia alokujuca pamat velkosti struktury ZOZNAMu
{
ZOZNAM *p_pom;
p_pom = (ZOZNAM *) malloc(sizeof(ZOZNAM));
if (p_pom == NULL) {
printf("Malo pamate.");
exit(1);
}
return p_pom;
}
char *alokString() //funkcia alokujuca pamat pre retazce v strukture ZOZNAMu
{
char *string;
string = (char *) malloc(sizeof(char)*50);
if (string == NULL) {
printf("Malo pamate.");
exit(1);
}
return string;
}
int check()
{
if (p_prvy == NULL) {
printf("Zoznam nebol vytvoreny, musite vybrat moznost a/g.\n");
printf("\nPokracujte stlacenim klavesy ENTER.\n");
getchar();
return 0;
}
return 1;
}
int vytvorPrazdny() /*Funkcia pre vytvorenie noveho akcionara.
Najprv vseobecna alokacia pre jednotlive
premenne. Potom alokacia pre rozne premene
na jednom mieste v poli.*/
{
p = alokTest();
p_prvy = alokTest();
p_akt = alokTest();
p_pom = alokTest();
p_prvy->meno = alokString();
p_prvy->meno[0] = '\0';
p_prvy->priezvisko = alokString();
p_prvy->priezvisko[0] = '\0';
p_prvy->rodcislo = alokString();
p_prvy->rodcislo[0] = '\0';
p_prvy->pocetakcii = 0;
p_prvy->p_dalsi = NULL;
p_akt = p_prvy;
return 1;
}
FILE *nacitajSubor() /* Funkcia pre nacitanie zoznamu zo suboru.
najprv sa nacita prvy prvok v zozname a potom
ostatne prvky*/
{
FILE *fr;
char *pomocny;
pomocny = alokString();
vytvorPrazdny();
if ((fr = fopen("akcie.txt", "r")) == NULL) {
printf ("Subor sa nepodarilo otvorit.");
return NULL;
}
if ((fscanf(fr, "%s", p_prvy->meno)) != EOF) {
fscanf(fr, "%s", p_prvy->priezvisko);
fscanf(fr, "%s", p_prvy->rodcislo);
fscanf(fr, "%d", &p_prvy->pocetakcii);
}
while ((fscanf(fr, "%s", pomocny)) != EOF) {
p_akt->p_dalsi = alokTest();
p_akt->p_dalsi->meno = alokString();
p_akt->p_dalsi->priezvisko = alokString();
p_akt->p_dalsi->rodcislo = alokString();
p_akt->p_dalsi->p_dalsi = NULL;
p_akt = p_akt->p_dalsi;
strcpy (p_akt->meno, pomocny);
fscanf(fr, "%s", p_akt->priezvisko);
fscanf(fr, "%s", p_akt->rodcislo);
fscanf(fr, "%d", &p_akt->pocetakcii);
}
if (fclose(fr) == EOF) {
printf ("Subor sa nepodarilo uzavriet.");
return NULL;
}
zorad();
printf ("Zoznam bol uspesne vytvoreny\n");
printf ("\nPokracujte stlacenim klavesy ENTER\n");
getchar();
return fr;
}
int zapisSubor(FILE *fr) /*Zapis udajov z pamate do suboru.*/
{
FILE *fw;
if (check() == 0) /*Tato funkcia kontroluje ci je zoznam vytvoreny
aby sa nam neprepisali uz vytvorene hodnoty*/
return 0;
if (fr == NULL) {
printf ("Subor nebol nacitany\n");
return 0;
}
p_akt = p_prvy;
if ((fw = fopen("akcie.txt", "w")) == NULL) {
printf ("Subor sa nepodarilo otvorit.");
return 0;
}
while (p_akt->p_dalsi != NULL) {
fprintf (fw, "%s %s %s %d\n", p_akt->meno, p_akt->priezvisko, p_akt->rodcislo, p_akt->pocetakcii);
p_akt = p_akt->p_dalsi;
}
fprintf (fw, "%s %s %s %d\n", p_akt->meno, p_akt->priezvisko, p_akt->rodcislo, p_akt->pocetakcii);
if (fclose(fw) == EOF) {
printf ("Subor sa nepodarilo uzavriet.");
return 0;
}
printf ("Zoznam bol uspesne ulozeny do suboru\n");
printf ("\nPokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
int zrusZoznam() /*funkcia na zrusenie zoznamu.*/
{
if (check() == 0)
return 0;
p_akt = p_prvy;
while (p_prvy->p_dalsi != NULL) { /*Cyklus funguje tak ze, prvy prvok zmaze a na
jeho mieste sa presunie prvok ktory bol pred nim
takto sa to opakuje az kym nezostane prvy prvok jediny*/
p_pom = p_prvy->p_dalsi;
free((void *) p_prvy);
p_prvy = p_pom;
}
free((void *) p_prvy); /*tymto sa zmaze posledny prvok.*/
p_prvy = NULL;
printf ("Zoznam bol uspesne zruseny\n");
printf ("\nPokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
int pridaj() /*funkcia na pridanie noveho akcionara*/
{
if (check() == 0)
return 0;
if (p_prvy->meno[0] == '\0') { /*pridanie pre prveho akcionara*/
printf("Meno: ");
scanf("%s", p_prvy->meno);
printf("Priezvisko: ");
scanf("%s", p_prvy->priezvisko);
printf("Rodne Cislo: ");
scanf("%s", p_prvy->rodcislo);
printf("Pocet akcii: ");
scanf("%d", &p_prvy->pocetakcii);
getchar();
zorad();
printf("Novy akcionar bol uspesne priradeny do zoznamu.\n");
printf("\nPokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
p_akt = p_prvy;
while (p_akt->p_dalsi != NULL) /*cyklus na pridanie ostatnych co nasleduju po prvom*/
p_akt = p_akt->p_dalsi;
p_akt->p_dalsi = alokTest();
p_akt->p_dalsi->meno = alokString();
p_akt->p_dalsi->priezvisko = alokString();
p_akt->p_dalsi->rodcislo = alokString();
p_akt->p_dalsi->p_dalsi = NULL;
printf("Meno: ");
scanf("%s", p_akt->p_dalsi->meno);
printf("Priezvisko: ");
scanf("%s", p_akt->p_dalsi->priezvisko);
printf("Rodne Cislo: ");
scanf("%s", p_akt->p_dalsi->rodcislo);
printf("Pocet akcii: ");
scanf("%d", &p_akt->p_dalsi->pocetakcii);
getchar();
zorad();
printf("Novy akcionar bol uspesne priradeny do zoznamu.\n");
printf("\nPokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
int zisti() /*funkcia pre zistenie ci je osoba akcionarom firmy alebo nie*/
{
char *meno_a;
char *priezvisko_a;
if (check() == 0)
return 0;
meno_a = alokString();
priezvisko_a = alokString();
printf ("Zadaj meno osoby:");
scanf ("%s", meno_a);
printf ("Zadaj priezvisko osoby:");
scanf ("%s", priezvisko_a);
getchar();
p_akt = p_prvy;
while (p_akt->p_dalsi != NULL) { /*cyklus je rozdeleny do dvoch podmienok
ked je ziadana osoba prvy prvok v zozname
a druha pre druhe prvky. Zistovanie je spravene
cez porovnavanie retazcov.*/
if ((strcmp(p_akt->meno, meno_a) == 0) && (strcmp(p_akt->priezvisko, priezvisko_a) == 0)) {
printf ("Tato osoba je akcionarom firmy a vlastni %d akcii\n", p_akt->pocetakcii);
printf("Pokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
p_akt = p_akt->p_dalsi;
}
if ((strcmp(p_akt->meno, meno_a) == 0) && (strcmp(p_akt->priezvisko, priezvisko_a) == 0)) {
printf ("Tato osoba je akcionarom firmy a vlastni %d akcii\n", p_akt->pocetakcii);
printf("Pokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
printf ("Tato osoba nie je akcionarom firmy\n");
printf("Pokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
int vymaz() /*funkcia na zmazanie akcionara pre prvy prvok a pre ostatne.*/
{
char *meno_a;
char *priezvisko_a;
if (check() == 0)
return 0;
p_akt = p_prvy;
meno_a = alokString();
priezvisko_a = alokString();
printf ("Zadaj meno osoby\n");
scanf ("%s", meno_a);
printf ("Zadaj priezvisko osoby\n");
scanf ("%s", priezvisko_a);
getchar();
if ((strcmp(p_prvy->meno, meno_a) == 0) && (strcmp(p_prvy->priezvisko, priezvisko_a) == 0)) {
p_pom = p_prvy->p_dalsi;
free((void *) p_prvy);
p_prvy = p_pom;
printf("Akcionar uspesne vymazany\n");
printf("\nPokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
while (p_akt->p_dalsi != NULL) {
if ((strcmp(p_akt->p_dalsi->meno, meno_a) == 0) && (strcmp(p_akt->p_dalsi->priezvisko, priezvisko_a) == 0)) {
p_pom = p_akt->p_dalsi->p_dalsi;
free((void *) p_akt->p_dalsi);
p_akt->p_dalsi = p_pom;
printf("Akcionar uspesne vymazany\n");
printf("\nPokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
p_akt = p_akt->p_dalsi;
}
printf("Neznamy akcionar\n");
printf("\nPokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
int zorad() /*zoradenie akcionarom podla abecedy*/
{
int i = 0, j = 0, n = 0;
ZOZNAM *p_pom2;
p_pom2 = alokTest();
p_akt = p_prvy;
while (p_akt->p_dalsi != NULL) {
p_akt = p_akt->p_dalsi;
n++;
}
for (i = 0; i <= n-1; i++) {
p_akt = p_prvy;
if (strcmp(p_prvy->priezvisko,p_prvy->p_dalsi->priezvisko) > 0) {
p_pom = p_prvy->p_dalsi;
p_prvy->p_dalsi = p_prvy->p_dalsi->p_dalsi;
p_prvy = p_pom;
p_prvy->p_dalsi = p_akt;
}
p_akt = p_prvy;
for (j = i; j <= n-2; j++) {
if (strcmp(p_akt->p_dalsi->priezvisko,p_akt->p_dalsi->p_dalsi->priezvisko) > 0) {
p_pom = p_akt->p_dalsi->p_dalsi;
p_akt->p_dalsi->p_dalsi = p_akt->p_dalsi->p_dalsi->p_dalsi;
p_pom2 = p_akt->p_dalsi;
p_akt->p_dalsi = p_pom;
p_pom->p_dalsi = p_pom2;
}
p_akt = p_akt->p_dalsi;
}
}
return 1;
}
int vypis() /*vypis zoznamu*/
{
int count = 1;
if (check() == 0)
return 0;
p_akt = p_prvy;
printf ("%3s | %10s | %10s | %10s | %5s\n", "#", "Meno", "Priezvisko", "Rod. cislo", "Akcii");
printf ("-----------------------------------------------------\n");
printf ("%3d | %10s | %10s | %10s | %5d\n", count++, p_akt->meno, p_akt->priezvisko, p_akt->rodcislo, p_akt->pocetakcii);
while (p_akt->p_dalsi != NULL) {
p_akt = p_akt->p_dalsi;
printf ("%3d | %10s | %10s | %10s | %5d\n", count++, p_akt->meno, p_akt->priezvisko, p_akt->rodcislo, p_akt->pocetakcii);
}
printf("\nPokracujte stlacenim klavesy ENTER\n");
getchar();
return 1;
}
void main()
{
FILE *fr;
char volba;
while (volba != 'x') { //cyklus pre vyberanie moznosti zo zoznamu.
system("cls");
printf ("a) Vytvor prazdny zoznam\n");
printf ("b) Vloz akcionara do zoznamu\n");
printf ("c) Zisti, ci je osoba akcionarom\n");
printf ("d) Zrus akcionara\n");
printf ("e) Zrus zoznam\n");
printf ("f) Zapis zoznam do textoveho suboru\n");
printf ("g) Nacitaj zoznam z textoveho suboru\n");
printf ("h) Vypisat zoznam\n");
printf ("x) KONIEC\n");
scanf("%c", &volba);
getchar();
switch(volba) {
case 'a': vytvorPrazdny();
printf ("Zoznam uspesne vytvoreny\n");
printf ("\nPokracujte stlacenim klavesy ENTER");
getchar();
break;
case 'b': pridaj();
break;
case 'c': zisti();
break;
case 'd': vymaz();
break;
case 'e': zrusZoznam();
break;
case 'f': zapisSubor(fr);
break;
case 'g': fr = nacitajSubor();
break;
case 'h': vypis();
break;
case 'z': zorad();
break;
}
}
printf ("Pokracujte stlacenim klavesy ENTER\n\n");
}