Hjælp med program
// Database program...// Jeg keder mig og vil lige se om jeg kan lave sådan et program...
#include <stdlib.h> // system cmd
#include <string.h> // strcmp cmd
//#include <fileio.h>
#include <stdio.h> // printf, scanf....
struct kort
{
int kort_nummer;
char *navn;
char *tlf_nummer;
char *adresse1;
char *adresse2;
char *adresse3;
struct kort *next; // Brugen af Pointere på denne måde kaldes en linked list....
struct kort *prev;
};
struct database
{
int antal_kort;
char *database_navn;
struct kort *first; // Peger på det første kort i databasen...
char *filnavn;
};
void VisMenu(void);
char *Intro[7] =
{
{" Velkommen til UJSoft Database Program"},
{"\n"},
{" Dette program er udviklet som et tutor projekt..."},
{" Det vil sige at jeg udviklede dette program for at "},
{" teste mine egne færdigheder som programmør, og for "},
{" at hjælpe andre der har problemer med programmering.\n"},
{"\n\n"}
};
char *Menu[9] =
{
{" UJSoft Database Program"},
{"\n"},
{" Skriv en af følgende kommandoer : \n\n"},
{" kigkort : Kig databasen i igennem..."},
{" sletkort : Slet et kort fra databasen "},
{" nytkort : Indsæt nyt kort i databasen"},
{" findkort : Find et kort i databasen"},
{" printkort : Print et kort fra databasen ud"},
{" slut : Afslutter Programmet...\n\n"}
};
char *NytKortMenu[9] =
{
{" Indsæt nyt kort i databasen"},
{"\n"},
{" Skriv venligst følgende, og tryk [ENTER] efter hver oplysning : \n\n"},
{" Navn"},
{" Adresse Vej + Nr"},
{" Adresse By + PostNr"},
{" Adresse Evt. ( hvis intet så bare tryk enter )"},
{" TelefonNummer "},
{"\n\n\n"}
};
struct database *databasen;
static char *KommandoPrompt = ":> ";
void NyDatabase(void)
{
databasen = new struct database;
databasen->first = NULL;
databasen->database_navn = "Familien";
databasen->filnavn = "familien.dat";
}
void CLS(void)
{
system("cls");
}
struct kort *NextKortIDatabasen(struct kort *kort)
{
if (!kort)
return NULL;
if (kort->next)
return kort->next;
else
return NULL;
}
struct kort *SidsteKortIDatabasen(void)
{
struct kort *temp, *temp2;
int i;
if (!databasen->first)
return NULL;
temp = databasen->first; // Vi starter med den første...
for (i=0;i<256;i++) // dette loop kører for evigt, indtil det bliver stoppet manuelt..
{
temp2 = NextKortIDatabasen(temp);
if (temp2)
temp = temp2;
else
break;
if (i > 200)
i = 1; // dette er hvad der looper det indtil det bliver stoppet manuelt....
}
return temp; // der er ikke flere, temp er det sidste....
}
void PrintKortData(struct kort *kortet)
{
printf("%s\n", kortet->navn);
printf("%s\n", kortet->adresse1);
printf("%s\n", kortet->adresse2);
printf("%s\n", kortet->adresse3);
printf("%s\n", kortet->tlf_nummer);
}
void KigIDatabasen(void)
{
struct kort *temp, *temp2;
CLS();
if (!SidsteKortIDatabasen())
{
printf("Der er ingen kort i datasen !\n");
system("pause");
CLS();
VisMenu();
}
else
{
temp = databasen->first;
PrintKortData(temp);
while (NextKortIDatabasen(temp))
{
temp2 = NextKortIDatabasen(temp);
if (temp2)
{
temp = temp2;
PrintKortData(temp);
}
system("pause");
}
}
}
void ModtagNytKortData(void)
{
char navn[64];
char adresse1[64];
char adresse2[64];
char adresse3[64];
char tlfnummer[16]; // Behøver ikke nær så mange cifre,,,
struct kort *nytkort;
scanf("%64s\n%64s\n%64s\n%64s\n%16s", navn,adresse1,adresse2,adresse3,tlfnummer);
nytkort = new struct kort;
nytkort->navn = navn;
nytkort->adresse1 = adresse1;
nytkort->adresse2 = adresse2;
nytkort->adresse3 = adresse3;
nytkort->tlf_nummer = tlfnummer;
nytkort->next = NULL;
if (!SidsteKortIDatabasen()) // Hvis der intet sidste kort er, så er dette det første....
{
nytkort->prev = NULL;
databasen->first = nytkort;
}
else
nytkort->prev = SidsteKortIDatabasen();
if (nytkort->prev)
nytkort->prev->next = nytkort; // Fik du den.....
CLS();
printf("%s\n", nytkort->navn);
printf("%s\n", nytkort->adresse1);
printf("%s\n", nytkort->adresse2);
printf("%s\n", nytkort->adresse3);
printf("%s\n", nytkort->tlf_nummer);
system("pause");
}
void VisNytKortMenu(void)
{
int i;
// struct kort *sidstekort;
// char b[64];
// char j;
CLS();
for (i=0;i<8;i++)
{
printf("%s\n",NytKortMenu[i]);
}
printf("%s", KommandoPrompt);
ModtagNytKortData();
VisMenu();
// sidstekort = SidsteKortIDatabasen();
}
void ModtagKommando(void)
{
char kommando[10];
// char *parameter[35];
scanf("%10s", kommando);//, parameter);
if (stricmp(kommando, "slut") == 0)
{
printf("\nProgrammet Afsluttes\n");
exit(0);
}
else if (stricmp(kommando, "nytkort") == 0)
{
VisNytKortMenu();
}
else if (stricmp(kommando, "kigkort") == 0)
{
KigIDatabasen();
}
else
{
printf("\nUkendt Kommando\n");
VisMenu();
}
}
void VisMenu(void)
{
int i;
NyDatabase();
// char b[64];
// char j[10];
CLS();
for (i=0;i<8;i++)
{
printf("%s\n",Menu[i]);
}
printf("%s", KommandoPrompt);
ModtagKommando();
}
void VisIntro(void)
{
int i;
//char j;
for (i=0;i<7;i++)
{
printf("%s\n",Intro[i]);
}
system("pause");
system("cls");
}
int main(void)
{
VisIntro();
VisMenu();
exit(0);
return 0;
}
Dette program er langt fra færdigt endnu selvfølgelig, men det jeg ikke kan forstå er, hvorfor virker kigkort kommandoen ikke ? Prøv at compile så kan i se hvad jeg mener, det siger at der ingen kort er i databasen.....
En anden ting, hvordan kan jeg aflæse et tastetryk fra tastaturet, uden at brugeren skal trykke enter bagefter......
