Gå til innhold

C#: Array, list eller database for spørsmål og svar-app


Anbefalte innlegg

Hei,

trenger litt bistand for å komme videre med et Windows-program.

 

Jeg lager et spørreskjema med 600 spørsmål. Antall spørsmålsledd er konstant (altså trenger ikke å legge til/endre spørsmålene). Hvert spørsmål har fire svaralternativer. Spørsmålene skal vises en og en og svaret til hvert spm. angis vha. fire radiobuttons. Når alle spørsmålene er besvart, skal resultat regnes ut i flere ulike kategorier.

 

Jeg trenger altså å hente frem ett og ett spørsmål fra "et sted" og brukerens svar må også lagres "et sted". Brukerens svar/resultat må kunne lagres i fil el. database for å kunne hentes frem igjen senere.

 

Jeg er usikker på om spørsmålene og svarene (samt brukerID) bør lagres i arrays, lists<T> eller database (sql compact edition?). Råd tas imot med stor takk!

 

Jeg er forresten nybegynner i programmering. Har bestemt meg for å lære C# (fremfor Python, som jeg også vurderte) og har nå tenkt ut dette programmet for å lære gjennom et spesifikt prosjekt etter å ha lest noen C# bøker og gjort en del syntaksøvelser.

Lenke til kommentar
Videoannonse
Annonse

Det virker som om kravet ditt er at dataene skal persisteres - altså lagres for bruk også etter at programmet er stengt ned. Da trenger du som du sier en database eller lagring til en eller annen fil. array, List<T> etc er ikke et alternativ til dette; array og list er datastrukturer som holder på dataene dine i minne mens programmet kjører. Du vil altså sansynligvis ha behov for begge deler - å holde på dataene i minne samt persistere dem mellom kjøringene.

 

Siden du er nybegynner ville jeg anbefale å bruke dette programmet til å lære deg å jobbe med rene tekstfiler. Du kan f.eks. lagre svarene til en fil på formatet:

 

SPØRSMÅLSNUMMER:SVARALTERNATIV

 

Eksempel:

 

1:A

2:C

3:B

4:A

...osv

 

Og så kan du holde på dataene i minne i f.eks et array av type char med lengde 600. Du kan da lese inn denne filen og parse den for å opprette arrayet.

 

Det finnes selvsagt tusen fremgangsmåter for hva du skal lage, så det er bare å velge én av dem og se hvordan det går. Det verste som kan skje er at du lærer at noen av dem ikke var så bra :)

 

OPPDATERING: Spørsmålene ville jeg kanskje også lagret som en enkel tekstfil, hvor et nytt spørsmål starter på hver skjette linje (de fem linjene mellom er de fire alternativene + en bokstav som sier hvilket alternativ som er riktig.

 

Eller så kan du lagre dem som XML eller JSON. Da kan du benytte ferdiglaget funksjonalitet for å parse og lagre. Men jeg anbefaler altså å begynne helt på basic med rene tekstfler.

Endret av torbjørn marø
  • Liker 1
Lenke til kommentar

Takk for utfyllende og godt svar! Dette vil få meg videre en stund :).

 

Da går jeg for å lese fra og skrive til tekstfil (eller XML, - får tenke litt på det). Med en slik løsning vil vel database bli overflødig? Persisteringen "mellom kjøringene" vil bli tatt hånd om av tekstfilen/XML...?

Lenke til kommentar

Du kan lagre det i en datastruktur i programmet ditt som en array eller list.

 

Det som er vesentlig her er at hvis du velger å lagre det i en lagringsløsning, altså en database eller flatfil, så kan du velge hvilke data som skal leses inn i minnet når det skal brukes. Dersom du tenker å initialisere hele datastrukturen din ved oppstart har det i dette tilfellet lite å si hvordan du lagrer dataene, da alt ligger i minnet uansett.

 

Det avgjørende er minnebruken til programmet, er den akseptabel for deg med alle dataene lastet i datastrukturen, så gå for det. Er den ikke det må du begynne å se på lagringsløsninger.

 

Flatfil på SSD er helt greit, men gjerne formatert med XML eller lignende.

Endret av process
Lenke til kommentar

Process, vet ikke om jeg forsto svaret helt... Hva mener du med at det har lite å si hvordan jeg lagrer dataene?

 

Hvis jeg ikke velger "en lagringsløsning" (database el. flatfil), så mister jeg vel muligheten til å hente resultatet til Bruker NN inn i programmet igjen ved en senere anledning?

Lenke til kommentar

Hei Quantum, takk for innspill. Har forsøkt å Google hvordan å lese ut ett og ett spørsmål fra database til label, men finner få løsninger. Jeg har lagd databasetabell (SQL Server Compact Ed. 4) og muliggjort bruk av LINQ to SQL-CE i Visual Studio Express. Om du også har innspill til kode til forslaget ditt, setter jeg pris på det...

Lenke til kommentar
  • 4 uker senere...

Anbefaler virkelig å ta en tit på EntityFramework som enkelt tar seg av skjema til objekt mapping (ORM). EntityFramework lar seg veldig enkelt installere med NuGet og er da klart til bruk :)

 

Da kan du behandle spørsmålene enkelt som klasse objekter som igjen gjør koden mer oversiktlig og mye enklere å vedlikeholde etter min mening. (EntityFramework tar seg av lagring av data i "ønskelig" database, uten at du trenger å lage skjema selv)

Endret av j0achim
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...