Exercise 1
Fra Wikipedia, den frie encyklopedi.
| Innholdsfortegnelse |
Introduksjon til C-programering
Lag en struktur for å lagre informasjon om biler (merke, modell, produksjonsår, farge og registreringsnummer). Lag funksjoner for å lagre biler i en database, funksjonalitet for å finne dem igjen og en tekstmeny som lar deg velge mellom funksjonene.
Felter som skal registreres
| felt | datatype |
|---|---|
| bilmerke | tekststreng med en lengde på maksimalt 15 tegn |
| modell | tekststreng med en lengde på maksimalt 15 tegn |
| prod. år | heltall i intervallet 1900-2005 |
| farge | tekststreng med en lengde på maksimalt 10 tegn |
| reg.nr | heltall på maksimalt 8 siffer (ingen bokstaver) |
Krav til funksjonalitet
| krav | beskrivelse |
|---|---|
| legge til | det skal være mulig å legge til opptil 10 biler i databasen |
| vise | det skal være mulig å finne/vise en bil, basert på dens reg.nr. |
| slette | det skal være mulig å slette hele innholdet i databasen |
| meny | all funksjonalitet skal være enkelt tilgjengelig vha. et pent menysystem |
Hint
Les notated om strukturer, samt første halvdel av notatet om lister og tekststrenger for å lære hvordan man lager en datastruktur tilpasset feltene som skal registreres. Dere vil få bruk for printf og scanf i stdio.h for å lese in og skrive ut tekst.
bil1.c
#include <stdio.h>
#include <stdlib.h>
/* definitions */
#define MAX_ANTALL 15
typedef struct {
char merke[MAX_ANTALL];
char modell[MAX_ANTALL];
int prod_aar;
char farge[MAX_ANTALL];
int reg_nr;
} bil;
enum muligeValg{
NY_BIL,
FINN_BIL,
SLETT_ALT,
EXIT
};
/* declaration of routines */
void nyBil();
void finnBil();
void tegnMeny();
void velgFunksjon(int fun_no);
void slettAlt();
void stikkAv();
/* declaration of variables */
bil bilDB[MAX_ANTALL];
int lengde = 0; // keep the number of recods in tabel.
/* routines */
void finnBil () {
int regNr;
printf("Skriv inn registreringsnummeret til bilen du vil finne:\n");
printf("Maksimalt 8 siffer\n");
scanf("%d", ®Nr);
int i=0, funnet=0;
for(i=0; i<lengde; i++ ) {
if(bilDB[i].reg_nr==regNr) {
printf("Merke: %s\n", bilDB[i].merke);
printf("Type: %s\n", bilDB[i].modell);
printf("Produksjonsaar: %i\n", bilDB[i].prod_aar);
printf("Farge: %s\n", bilDB[i].farge);
printf("Registereringsnummer: %i\n", bilDB[i].reg_nr);
funnet=1;
break;
}
}
if (funnet != 1) {
printf("Fant ingen biler med registreringsnummer %d \n", regNr);
}
}
/* reads data into a row in table, and increases lengde */
void nyBil() {
if (lengde==MAX_ANTALL-1) {
printf("Du har for mange biler!\n");
} else {
printf("Skriv inn bilmerke, maksimum 15 bokstaver:\n");
scanf("%s", bilDB[lengde].merke);
printf("Skriv inn modell, maksimum 15 bokstaver:\n");
scanf("%s", bilDB[lengde].modell);
printf("Skriv inn året bilen er produsert, fire siffer:\n");
scanf("%d", &(bilDB[lengde].prod_aar));
printf("Bilens farge, maksimum 15 bokstaver:\n");
scanf("%s", bilDB[lengde].farge);
printf("Registreringsnummer, maksimum 8 siffer:\n");
scanf("%i", &(bilDB[lengde].reg_nr));
lengde++;
}
}
/* choose action. Look at the enum declaration muligeValg above */
void velgFunksjon(int valg) {
switch(valg){
case NY_BIL:
nyBil();
break;
case FINN_BIL:
finnBil();
break;
case SLETT_ALT:
slettAlt();
break;
case EXIT:
stikkAv();
break;
default:
printf("Ikke et gyldig valg. Prøv igjen!\n");
}
tegnMeny();
}
/* menu */
void tegnMeny() {
int valg;
printf("*****************************\n");
printf(" Valgets kvaler...\n\n");
printf(" [0] Legg til bil. \n");
printf(" [1] Finn bil.\n");
printf(" [2] Slett alle biler i database!\n");
printf(" [3] Slutt programmet\n\n");
printf("*****************************\n");
printf(" Det er %d biler registrert i database\n",lengde);
printf("*****************************\n");
scanf("%i",&valg);
velgFunksjon(valg);
}
/* exit program with success. uses stdlib definition EXIT_SUCCESS*/
void stikkAv() {
printf("Talast!\n");
exit(EXIT_SUCCESS);
}
/* remove access to data in table */
void slettAlt() {
int valg;
printf("Sikker? Alt vil slettes ...\n");
printf("[0] Ja!\n");
printf("[1] Nei!\n");
scanf("%i", &valg);
if (valg==0) {
printf("Database er slettet\n");
lengde=0; // no elements in table, look at nyBil's use of lengde
} else {
printf("Ingen sletting utført\n");
}
tegnMeny();
}
/* main program */
int main() {
tegnMeny();
exit(EXIT_SUCCESS); // only sugar. Exit is done in stikkAv
}
Makefile
# # my makefile for bil1 compute: bil1.o gcc -o bil1 bil1.o -Wall bil1.o: bil1.c gcc -o bil1.o -c bil1.c -Wall clean: rm *.o
