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", &regNr);
	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
Personal tools