Kursusarbejde 2 Grundlæggende Programmering



Relaterede dokumenter
Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, klasse dm032-1a

Kursusarbejde 4 Grundlæggende Programmering

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Programmering i C. Lektion november 2008

Programmering i C. Lektion september 2009

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

Lige siden den elektroniske computers opfindelse i slutningen af 1940, har det været muligt at få en computer til at beregne ting.

Hvilket sprog er hurtigst

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

Programmering i C. Lektion september 2009

Programmering i C. Lektion oktober 2008

Eksempel: et ordresystem note 5 Lagdeling s. 1

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Skriftlig eksamen i Datalogi

// Definition af porte og funktioner

DANMARKS TEKNISKE UNIVERSITET

DM507 Algoritmer og datastrukturer

Scripting. Opslag til (Vol. D. Dahlerup. Bemærk. Anvendte bøger: "Sams. og proteiner.

1B fil database. //globale variabler DateTime tid; // erklærer en variabel af typen datetime DateTime dag; // erklærer en variabel af typen datetime

Programmering i C. Lektion december 2008

Obligatorisk opgave i objektorienteret analyse og design

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...

Sammenlign og byt. Et eksempel på dokumentering af et program

Start på Arduino og programmering

Programmering for begyndere Lektion 2. Opsamling mm

Kapitel 3 Betinget logik i C#

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

Introduktion til funktioner, moduler og scopes i Python

PUT og INPUT funktionerne

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

Løsning af møntproblemet

Objektorienteret Programmering

DM507 Algoritmer og datastrukturer

Specifikation Abstrakt OO OS-API Rev Specifikation. Abstrakt, objektorienteret operativsystem-api

Nyheder til version

Generisk programmering - opgave 2 - Doxygen

Noter til C# Programmering Iteration

Udvikling af DOTNET applikationer til MicroStation i C#

Kursus navn: Indledende programmering Kursus nr

Abstrakte datatyper C#-version

Spil Master Mind. Indledning.

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

Lær Python - Dag 4, modul 2 Objektorienteret programmering

I3PRG3+I3DTM3+I3ISY1-3. semester

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Eksempel: Skat i år 2000

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

Postregistrering Eksamensprojekt i Programmering C Lavet af: Frantz Furrer Svendborg Erhvervsskole HTX Vejleder: Claus Borre

Undtagelseshåndtering i C#

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato:

Løsningsforslag til Camp Let. Case Beskrivelse: Camp Let

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Byggebasen Javascript

Rekursion C#-version

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Sproget Rascal (v. 2)

DM502. Peter Schneider-Kamp

DM507 Algoritmer og datastrukturer

Kalkulation. Avance 39,34 % 136,48 Tages ligeledes fra evt. tilknyttet varekalkulation

" #" $ " "!% &'% ' ( ) * " & #

Exceptions i Delphi. Try except

Cops and Robbers. Forskerspirer Naturvidenskab. Niels Brock. Forfatter: Mathias Theodor Jul Overby

Kursus 02199: Programmering. Kontrol af programudførelsen. afsnit if (indkomst > ) topskat = (indkomst ) * 0.

SYSTEM BASICS, FILE I/O, EXCEPTION HANDLING, STL

Videregående Programmering for Diplom-E Noter

FIK-koder på fakturaer

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

C++ Programmering V

Tree klassen fra sidste forelæsning

Programmering C RTG

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Tredjepart webservices

Register-databasen med.net

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere

Vejledning til kommunerne om kontrol af elever indskrevet på en fri grundskole 5. september 2016

WINDOWS FORMS EVENTS INTERAGEREN MED FIL SYSTEMET. Grundlæggende programmering Lektion 9

Hvis du synes at det ligner græsk så fortvivl ikke, inden artiklen er omme vil du synes at det er logik for begyndere.

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

Boost Concept Check Library

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

Anvendelse af metoder - Programmering

Forelæsning Uge 2 Mandag

Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge:

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

TTS-Link Brugermanual

Klasse 1.4 Michael Jokil

Dvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Singleton pattern i C#

OZ5BIR SWR/POWERMETER

Indlæsning fra bank Faktura passer med indbetalt dage

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Transkript:

Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc................................................... 3 1.3. soehoej.cc................................................. 4 1.4. Om koden.................................................. 7 2. Datafiler 7 2.1. takster.dat................................................. 7 2.2. bestillinger.dat............................................. 7 3. Afprøvning 7

KURSUSARBEJDE 2, ARNE JØRGENSEN 2/8 1. Kode 1.1. hotel.h 5 #ifndef HOTEL_H #define HOTEL_H #include <iostream> using namespace std; enum Vaerelse ENKELT, DOBBELT, LUKSUS; class Takster 10 public: double enkeltvaerelse, dobbeltvaerelse, luksusvaerelse, enkelt_stat, dobbelt_stat; int rabat_pct, rabat_dage, udsigt_pct, moms; Takster(); 15 // Post: taksterne er læst ind fra filen takster.dat ; class Hotelophold 20 private: bool statsaftale, soeudsigt; int antal_overnatninger, antal_vaerelser; Vaerelse vaerelse; 25 30 public: Hotelophold(); // Post: nyt obkjekt er konstrueret og attributterne tildelt en række standardværdier double pris(); // Post: returnerer prisen på et ophold ud fra de oplysninger om opholdet der er sat 35 double pris_med_moms(); // Post: returnerer prisen for opholdet med moms lagt til void SetStatsaftale(bool statsaftale_ = true); 40 // Post: hvis parametren er true er opholdet på statsaftale void SetVaerelsestype(Vaerelse vaerelse_); 45 // Post: opholdet foretages på statsaftale 50 void SetSoeudsigt(bool soeudsigt_ = true); // Post: hvis parametren er true er opholdet med søudsigt void SetAntalOvernatninger(int overnatninger); // Pre: overnatninger bør være større end nul // Post: antallet af overnatninger er sat for opholdet 55 void SetAntalVaerelser(int vaerelser); // Pre: vaerelser bør være større end nul // Post: antallet af værelser er sat for opholdet friend ostream& operator << (ostream& str, Hotelophold& ophold); 60 // Pre: hvis str er en fil er filen åbnet // Post: skriver oplysninger om opholdet på output strømmen, kommasepareret ; ostream& operator << (ostream& str, Vaerelse vaerelse); 65 // Pre: hvis str er en fil er filen åbnet // Post: skriver en læsevenlig betegnelse for vaerelse på output strømmen #endif // HOTEL_H

KURSUSARBEJDE 2, ARNE JØRGENSEN 3/8 1.2. hotel.cc #include "hotel.h" #include <fstream> double Hotelophold::pris() 5 Takster takster; double pris = 0.0; if (statsaftale) 10 switch (vaerelse) case ENKELT: pris = takster.enkelt_stat; 15 case DOBBELT: pris = takster.dobbelt_stat; case LUKSUS: 20 exit(1); // Luksus dobbeltværelse med bad må ikke forekomme med statsaftale ; else 25 switch (vaerelse) case ENKELT: pris = takster.enkeltvaerelse; 30 case DOBBELT: pris = takster.dobbeltvaerelse; case LUKSUS: 35 pris = takster.luksusvaerelse; ; ; 40 pris = antal_overnatninger; pris = antal_vaerelser; // træk rabat fra hvis det er et langt ophold if (antal_overnatninger > takster.rabat_dage) 45 pris = 1.00 (takster.rabat_pct/100.0); 50 55 // læg tillæg til hvis opholdet er med søudsigt (ej statsaftale) if (!statsaftale && soeudsigt) pris = 1.00+(takster.udsigt_pct/100.0); // rund af til nærmeste hele øre og returnér pris = (floor((pris 100)+0.5)/100.0); return pris; double Hotelophold::pris_med_moms() Takster takster; 60 //returnér med moms lagt til return pris() (1.00+(takster.moms/100.0)); void Hotelophold::SetStatsaftale(bool statsaftale_) 65 statsaftale = statsaftale_; void Hotelophold::SetVaerelsestype(Vaerelse vaerelse_) 70

KURSUSARBEJDE 2, ARNE JØRGENSEN 4/8 vaerelse = vaerelse_; void Hotelophold::SetSoeudsigt(bool soeudsigt_) 75 soeudsigt = soeudsigt_; void Hotelophold::SetAntalOvernatninger(int overnatninger) 80 antal_overnatninger = overnatninger; void Hotelophold::SetAntalVaerelser(int vaerelser) 85 antal_vaerelser = vaerelser; Hotelophold::Hotelophold() 90 SetStatsaftale(false); SetVaerelsestype(ENKELT); SetSoeudsigt(false); SetAntalOvernatninger(1); 95 100 Takster::Takster() ifstream takstfil("takster.dat"); if (takstfil.fail()) exit(1); // kunne ikke indlæse taksterne fra filen takstfil >> enkeltvaerelse >> dobbeltvaerelse >> luksusvaerelse >> enkelt_stat >> dobbelt_stat >> rabat_pct >> udsigt_pct 105 >> rabat_dage >> moms; ostream& operator << (ostream& str, Vaerelse vaerelse) 110 switch(vaerelse) case ENKELT: str << "Enkeltværelse med bad"; 115 case DOBBELT: str << "Dobbeltværelse med bad"; case LUKSUS: str << "Luksus dobbeltværelse med bad"; 120 ; return str; 125 ostream& operator << (ostream& str, Hotelophold& ophold) str.setf(ios::fixed); str.precision(2); str << ophold.vaerelse << ", " << ophold.antal_vaerelser << ", " << ophold.antal_overnatninger << ", " 130 << ophold.statsaftale << ", " << ophold.soeudsigt << ", " << ophold.pris_med_moms(); return str; 1.3. soehoej.cc #include <iostream> #include <fstream> #include "hotel.h" 5 void forespoergsel(); // Post: kontrolstruktur til at lave en forespørgsel af et ophold

KURSUSARBEJDE 2, ARNE JØRGENSEN 5/8 void registrering(); 10 // Post: kontrolstruktur til at lave en registrering af et ophold void indtast_oplysninger(hotelophold& ophold); // Pre: ophold er et konstrueret objekt hvor oplysninger om opholdet ønskes indlæst i 15 // Post: ophold indeholder alle (og korrekte) oplysninger om opholdet 20 char input_ja_nej(); // Pre: der er stillet et ja/nej spørgsmål på cout og svaret ønskes indlæst // Post: returnerer et j eller n for hhv. et jan og et nej svar int main() using namespace std; 25 int valg; do cout << "1: Kundeforespørgsel\n"; 30 cout << "2: Registrering\n"; cout << "9: Afslut\n"; cout << "Indtast dit valg; 1, 2 eller 9: "; cin >> valg; 35 switch (valg) case 1: forespoergsel(); 40 case 2: registrering(); ; 45 while (valg!= 9); return 0; 50 void forespoergsel() using namespace std; 55 Hotelophold ophold; indtast_oplysninger(ophold); cout.setf(ios::fixed); cout.precision(2); cout << "Pris i alt excl. moms: " << ophold.pris() << endl; 60 cout << "Pris i alt incl. moms: " << ophold.pris_med_moms() << endl; void registrering() 65 using namespace std; Hotelophold ophold; int kundenummer, dato; 70 cout << "Indtast kundenummer: "; cin >> kundenummer; cout << "Indtast dato for ophold (aaaammdd): "; cin >> dato; indtast_oplysninger(ophold); 75 cout.setf(ios::fixed); cout.precision(2); cout << "Pris i alt excl. moms: " << ophold.pris() << endl; cout << "Pris i alt incl. moms: " << ophold.pris_med_moms() << endl; 80 ofstream bestillinger("bestillinger.dat", ios::app); if (bestillinger.fail())

KURSUSARBEJDE 2, ARNE JØRGENSEN 6/8 cout << "Kunne ikke skrive til bestillingsfilen. Ikke registreret!\n"; else 85 bestillinger << kundenummer << ", " << dato << ", " << ophold << endl; 90 void indtast_oplysninger(hotelophold& ophold) using namespace std; 95 char statsaftale, soeudsigt; int vaerelse, antal_vaerelser, antal_overnatninger; // statsaftale cout << "Statsaftale? [j/n] "; 100 statsaftale = input_ja_nej(); if (statsaftale == 'j') ophold.setstatsaftale(); else 105 ophold.setstatsaftale(false); // værelsestype cout << "1: " << ENKELT<< endl; cout << "2: " << DOBBELT<< endl; 110 if (statsaftale!= 'j') cout << "5: " << LUKSUS<< endl; cout << "\nindtast værelsestype: "; cin >> vaerelse; while (vaerelse!= 1 && vaerelse!= 2 && (vaerelse!= 5 statsaftale == 'j')) 115 cout << "Ikke et gyldigt svar, prøv igen: "; cin >> vaerelse; 120 switch (vaerelse) case 1: ophold.setvaerelsestype(enkelt); 125 case 2: ophold.setvaerelsestype(dobbelt); case 5: ophold.setvaerelsestype(luksus); 130 // søudsigt if (statsaftale!= 'j') 135 cout << "Udsigt over søen? [j/n] "; soeudsigt = input_ja_nej(); if (soeudsigt == 'j') 140 ophold.setsoeudsigt(); else ophold.setsoeudsigt(false); ; 145 // antal overnatninger cout << "Antal overnatninger? "; cin >> antal_overnatninger; while (antal_overnatninger < 1) 150 cout << "Mindst en overnatning: "; cin >> antal_overnatninger; ophold.setantalovernatninger(antal_overnatninger);

KURSUSARBEJDE 2, ARNE JØRGENSEN 7/8 155 //antal værelser cout << "Antal værelser? "; cin >> antal_vaerelser; while (antal_vaerelser < 1) 160 cout << "Mindst et værelse: "; cin >> antal_vaerelser; 165 ophold.setantalvaerelser(antal_vaerelser); char input_ja_nej() 170 using namespace std; char input; cin >> input; while (tolower(input)!= 'j' && tolower(input)!= 'n') 175 cout << "Svar venligst 'j' eller 'n' "; cin >> input; return tolower(input); 180 1.4. Om koden Klassen Hotelophold er forsøgt holdt forholdsvis simpel med kun de nødvendige sæt-funktioner, samt naturligvis beregning(er). I hotel.h defineres endvidere en enum med navne for de tre værelsestyper så man koden bliver lettere læselig. Taksterne indlæses i et særskilt objekt (via konstruktoren). Takstklassen er af pladshensyn holdt mere simpel end jeg egentlig bryder mig om. I min oprindelige implementation var attributterne private og med tilhørende hent-funktioner. Men da det fylder en del i rapporten og der i øvrigt ingen kompleksitet er i klassen har jeg skåret hent-funktionerne væk og gjort attributterne public. Kønt er det ikke. Output-operatoren, <<, er overloadet så den kan udskrive pæne, læsevenlige navne for de tre værelsestyper hvis den kaldes med værelsestype (som defineret i enum en) som anden paramater. Operatoren er endvidere overloadet så det udskriver et helt opholdsobjekt kommasepareret til brug i registreringen (brugt i linje 87 i soehoej.cc). Klasserne er bevist holdt helt fri for læsninger fra cin og skrivninger til cout. Dette er i stedet lagt i frie funtioner og main-løkken. 2. Datafiler 2.1. takster.dat Takstfilen er udvidet med et ekstra felt i forhold til opgaveformuleringen. Sidste felt indeholder momssatsen. 698.00 998.00 1298.00 598.00 798.00 5 8 5 25 2.2. bestillinger.dat 12345, 20040807, Luksus dobbeltværelse med bad, 8, 6, 0, 1, 79904.88 10000, 20031030, Enkeltværelse med bad, 1, 1, 1, 0, 747.50 10001, 20031030, Dobbeltværelse med bad, 1, 5, 0, 0, 6237.50 10002, 20031030, Dobbeltværelse med bad, 1, 6, 0, 0, 7110.75 10003, 20031030, Dobbeltværelse med bad, 1, 7, 0, 0, 8295.88 10004, 20031030, Enkeltværelse med bad, 3, 5, 1, 0, 11212.50 3. Afprøvning Programmet er afprøvet med en række testdata. I figur 1 til 2 på den følgende side ses skærmbilleder fra et par af afprøvningerne (for sammenlignelighedens skyld de data der blev anvendt i opgaveformuleringen).

KURSUSARBEJDE 2, ARNE JØRGENSEN 8/8 Figur 1: En forespørgsel på et ophold med statsaftale (testdata fra opgaveformuleringen). Figur 2: En registrering af et ophold med søudsigt (testdata fra opgaveformuleringen) Resultatet af et par flere yderligere afprøvninger fremgår af bestillinger.dat, se afsnit 2.2 på foregående side. Programmets beregninger, konstrolstrukturer, etc., er endvidere under udviklingen afprøvet ved hjælp af diverse driver-programmer. Disse er ikke vedlagt.