webForumDet fria alternativet

Problem med pascal programmet..HJÄLP

4 svar · 425 visningar · startad av Paula

PaulaMedlem sedan apr. 20042 inlägg
#1

Jag har fixa att det går att ladda textfilen samt att spara poster till filen.

Uppgift 1: Betygsregister

Beskrivning: Programmet ska presentera en meny där man kan ladda, spara, söka och ändra i betygslistor.

Uppgift: Skapa ett menydrivet program där man kan ladda, spara, söka och ändra i betygslistor. Betygslistorna ligger lagrade som kommaseparerade textfiler. Textfilen kan innehålla som mest 500 poster. Överst i filen finns en rad med rubriker. Varje post är en rad som t.ex. består av: namn,betyg1,betyg2,betyg3
Alla poster i en fil innehåller lika många betyg per person. Dock kan en fil innehålla betygen för 3 ämnen och en annan betygen för 10 ämnen.
(Min 1ämne, max 20 ämnen).

Följande sökfunktioner ska finnas:

Alla elever med ett visst betyg i ett visst ämne ska kunna sökas ut.
Alla elever med IG i något ämne ska kunna sökas ut och det ska synas vilket ämne eleven hade IG i.
Alla elever vars namn innehåller en angiven söksträng, samt samtliga deras betyg.
Elever ska kunna läggas till.
Ett körexempel visar alla funktioner. Se nedan

Välkommen till Betygsprogrammet!
1. Ladda in ett register
2. Spara nuvarande register
3. Sökningar
4. Ändra betyg
5. Lägg till elev
6. Avsluta

val> 1

filnamn>> komvux2001.txt

Filen laddad, 2 ämnen, 4 elever.

1. Ladda in ett register
2. Spara nuvarande register
3. Sökningar
4. Ändra betyg
5. Lägg till elev
6. Avsluta

val> 3

Sökningsalternativ

1. Sök ut elever med visst betyg i valfritt ämne.
2. Sök ut elever med IG i någon kurs
3. Sök ut elever och deras betyg efter del i namnet
4. Återgå till huvudmeny

val>> 1

Följande ämnen finns:

1. svenska a
2. svenska b

val>>> 2

betyg>>> vg

Följande personer har vg i svenska b:

Adam Virstad
Anders Alfredsson

Sökningsalternativ

1. Sök ut elever med visst betyg i valfritt ämne.
2. Sök ut elever med IG i någon kurs
3. Sök ut elever och deras betyg efter del i namnet
4. Återgå till huvudmeny

val>> 2

Följande elever har IG i någon kurs:

Nils Karlsson har IG i svenska a, svenska b
Oskar Ek har IG i svenska a

Sökningsalternativ

1. Sök ut elever med visst betyg i valfritt ämne.
2. Sök ut elever med IG i någon kurs
3. Sök ut elever och deras betyg efter del i namnet
4. Återgå till huvudmeny

val>> 3

Ange del i namnet>>> sson

                            svenska a        svenska b 

Nils Karlsson ig ig
Anders Alfredsson vg vg

Sökningsalternativ

1. Sök ut elever med visst betyg i valfritt ämne.
2. Sök ut elever med IG i någon kurs
3. Sök ut elever och deras betyg efter del i namnet
4. Återgå till huvudmeny

val>> 4

1. Ladda in ett register
2. Spara nuvarande register
3. Sökningar
4. Ändra betyg
5. Lägg till elev
6. Avsluta

val> 4

Ange del i namnet: son

Välj en:
1 - Nils Karlsson
2 - Anders Alfredsson

val>> 2

Vilket betyg ska ändras för: Anders Alfredsson ?

1 - svenska a
2 - svenska b

val>> 1

Anders Alfredsson har VG i svenska a.

Nytt betyg>> MVG

1. Ladda in ett register
2. Spara nuvarande register
3. Sökningar
4. Ändra betyg
5. Lägg till elev
6. Avsluta

val> 5

Namn>> Anna Andersson
Betyg i svenska a>> g
Betyg i svenska b>> mvg

Anna Andersson inlagd i registret.

1. Ladda in ett register
2. Spara nuvarande register
3. Sökningar
4. Ändra betyg
5. Lägg till elev
6. Avsluta

val> 2

ange filnamn>> komvux2001.txt

Filen sparad, 2 ämnen, 5 elever.

1. Ladda in ett register
2. Spara nuvarande register
3. Sökningar
4. Ändra betyg
5. Lägg till elev
6. Avsluta

val> 6

spangoMedlem sedan juni 20008 205 inlägg
#2

Det var ett... långt... inlägg. Vad är det som är problemet? Att bara skriva uppgiftstexten räcker inte.

PaulaMedlem sedan apr. 20042 inlägg
#3

Jo, så här är det. I textfilen, Betygsregister.txt innehåller följande rader:

Namn,Matematik,Svenska,Engelska,Hemkunskap
Kenneth Eklund,g,g,g,g
Paula Eklund,vg,g,g,g

Jag vill läsa i från filen och spara data i en record, elevPost :

str255 = string[255];
elevPost = record
namn : str255;
kurs1 : str255;
kurs2 : str255;
kurs3 : str255;
kurs4 : str255;
end;

elevInmat = array[1..500] of elevPost; {arrayen kan innehålla 1 till 500 elever, varje element är en typ av elevPost}

Problemet är att jag vill läsa av textfilen och spara data i elevPost record. T ex. andra raden från textfilen:
Kenneth Eklund,g,g,g,g
Kenneth Eklund skall sparas i elevPost.namn
första g i elevPost.kurs1 osv. (komma tecknen skall inte sparas)
Proceduren nedan fick jag till att elevPost.namn består av hela andra raden dvs. Kenneth Eklund,g,g,g,g och det vill jag inte. Hur gör man för att dela data i olika delar och sparas ner i resp. record egenskap ?

{Proceduren läser in den sparade filen för ev. skrivning/läsning }
procedure LasInfil(var el : elevInmat;
var a : integer);
var
f : text;
filnamn : string[50];
rad : string[255];
tecken : char;

begin
tecken := ',';
write('filnamn >> ');
readln(filnamn);
assign(f,filnamn);
reset(f);
a := -1;
while not Eof(f) do {medan det är inte slut på filen}
if not Eoln(f) then
begin
inc(a); {öka räknaren med 1}
readln(f, rad); {läser av filen}
el[a].namn := rad;
writeln(el[a].namn);
end;
writeln('nästa rad ',rad);
close(f);
end; { LasInfil }

ViktorMedlem sedan aug. 20021 752 inlägg
#4

Tråd flyttad från "Programmering - Övrigt".

/Viktor

HardrockerMedlem sedan nov. 2003310 inlägg
#5

Tyvärr så hinner jag bara skriva ett kort inlägg. Kan skriva ett utförligare i morgon om det skulle behövas.

Du måste själv splitta raden genom loopa igenom strängen rad och leta efter kommatecken. När du har hittat det första kommatecknet så stoppar du in det som står framför det i Elevpost.namn osv.

Ett kort exempel

var
i, LastI, Raknare: integer
rad: string
begin
LastI =1;
Raknar=1;
for i:=1 to Length(rad) do
if (rad[i] = ',') then
begin
if Raknare = 1 then
ElevPost.Namn := Copy(rad,LastI +1, LastI - 1)
else if Raknare =2 then
ElevPost.Kurs1 := Copy(rad,LastI +1, LastI - 1)
osv.
LastI := I;
Inc(Raknare);
end;
end;

Jag har inte testat koden så det är säkert nån bugg i den.

Om jag hade skrivit koden i Delphi så hade jag läst in varje rad i en TStringlist och splittat den vid inläsningen med hjälp av CommaText.

/Ante S

129 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)