Здравствуйте! Нужно написать программу работающую с содержанием e-shop заказа. Чтобы программа выполняла все операции работы с динамическими списками(инициализия, удаление выбранного элемента, добавление элемента и т.п.)Вот содержание списка:
,Также чтоб считывала/сохраняла данные из файла
Data.txt. Вот преподователь написал эту функцию:
Pascal |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| procedure TOrderList.LoadFromFile(File_IN_path:string);
var
File_line:string;
File_IN:text;
x:integer;
c:char;
comma_cnt:integer;
this_str_cnt: integer;
ThisOrderData:TOrderData;
This_Data:TStringLong;
Attr_cnt:integer;
Separator:char;
Separator_pos:integer;
ValErr:integer;
Real_out:real;
Int_Out:integer;
begin
Assign(File_IN, File_IN_path);
ReSet(File_IN);
comma_cnt := 0;
while not SeekEof(File_IN) do begin
ReadLn(File_IN,File_line);
Attr_cnt := 0;
Separator := '|';
repeat
Attr_cnt := Attr_cnt + 1;
Separator_pos:=Pos(Separator,File_line);
if Separator_pos = 0 then Separator_pos := length(File_line)+1;
This_Data := copy(File_line,1,Separator_pos-1);
File_line := copy(File_line,Separator_pos+1,length(File_line));
case Attr_cnt of
1: ThisOrderData.Customer := This_Data;
2: ThisOrderData.Email := This_Data;
3: ThisOrderData.Address := This_Data;
4: ThisOrderData.Product := This_Data;
5: begin
val(This_Data,Real_Out,ValErr);
ThisOrderData.Item_Price := Real_Out;
end;
6: begin
val(This_Data,Int_Out,ValErr);
ThisOrderData.Items := Int_Out;
end;
7: begin
if This_Data = 'CreditCard' then ThisOrderData.PaymentType := CreditCard
else if This_Data = 'CashOnDelivery' then ThisOrderData.PaymentType := CashOnDelivery
else if This_Data = 'BankTransfer' then ThisOrderData.PaymentType := BankTransfer;
end;
8: begin
if This_Data <> '' then begin
if This_Data = 'VISA' then ThisOrderData.CreditCardType := VISA
else if This_Data = 'VISAELECTRON' then ThisOrderData.CreditCardType := VISAELECTRON
else if This_Data = 'MAESTRO' then ThisOrderData.CreditCardType := MAESTRO;
end;
end;
9: if This_Data <> '' then ThisOrderData.CreditCardNo := This_Data;
10: if This_Data <> '' then ThisOrderData.Account_No := This_Data;
end;
until Attr_cnt = 10;
self.AddToStart(ThisOrderData);
end;
Close(File_IN);
end; |
|
Вот я попробовал написать эту программу исходя из его процедуры:
Pascal |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
| program ZachetPRAK1;
type
TCustomer=string; {данные о покупателях, продукте и т.д.}
TEmail=string;
TAdress=string;
TProduct=string;
TPaymentType=(CreditCard, CashOnDelivery, BankTransfer);
TCreditCardType=(Visa, VisaElectron, Maestro);
TCreditCardNo=string;
TAccount_No=string;
TStringLong=string;
TItemPrice=real;
TItems=integer;
TOrderData=record
Customer:TCustomer;
Email:TEmail;
Address:TAdress;
Product:TProduct;
PaymentType:TPaymentType;
CreditCardType:TCreditCardType;
CreditCardNo:TCreditCardNo;
Account_No:TAccount_No;
Item_Price:TItemPrice;
Items:TItems;
end;
PPerson = ^TPerson; {работа со связными списками}
TPerson = record
Data: TOrderData;
Next: PPerson;
end;
TList = record {также помощь связным спискам}
head, stop: PPerson;{head-первый элемент, stop-последний}
counter: integer;
end;
TOrderList=object {вот тут объект для работы со всеми процедурами которые нужны, пока я только написал инициализацию и добавление в начало}
procedure Initializace(L:TList);
procedure LoadFromFile(File_IN_path:string);
procedure AddToStart(var l: TList; data: TOrderData);
end;
var
l:Tlist;
MyList:TList;
MyData:TOrderData;
MyPointer:PPerson;
procedure TOrderList.Initialize(var l: TList);
var p:PPerson;
begin
New(p);
with l do begin
head:=p;
head^.next:=nil;
stop:=head;
counter:=0;
end;
end;
procedure TOrderList.AddToStart(var l: TList; data: TOrderData);
var p:PPerson;
begin
New(p);
with l do begin
p^.data := data;
p^.next := head;
head := p;
counter := counter + 1;
end;
end;
procedure TOrderList.LoadFromFile(File_IN_path:string);
var
File_line:string;
File_IN:text;
x:integer;
c:char;
comma_cnt:integer;
this_str_cnt: integer;
ThisOrderData:TOrderData;
This_Data:TStringLong;
Attr_cnt:integer;
Separator:char;
Separator_pos:integer;
ValErr:integer;
Real_out:real;
Int_Out:integer;
begin
Assign(File_IN, File_IN_path);
ReSet(File_IN);
comma_cnt := 0;
while not SeekEof(File_IN) do begin
ReadLn(File_IN,File_line);
Attr_cnt := 0;
Separator := '|';
repeat
Attr_cnt := Attr_cnt + 1;
Separator_pos:=Pos(Separator,File_line);
if Separator_pos = 0 then Separator_pos := length(File_line)+1;
This_Data := copy(File_line,1,Separator_pos-1);
File_line := copy(File_line,Separator_pos+1,length(File_line));
case Attr_cnt of
1: ThisOrderData.Customer := This_Data;
2: ThisOrderData.Email := This_Data;
3: ThisOrderData.Address := This_Data;
4: ThisOrderData.Product := This_Data;
5: begin
val(This_Data,Real_Out,ValErr);
ThisOrderData.Item_Price := Real_Out;
end;
6: begin
val(This_Data,Int_Out,ValErr);
ThisOrderData.Items := Int_Out;
end;
7: begin
if This_Data = 'CreditCard' then ThisOrderData.PaymentType := CreditCard
else if This_Data = 'CashOnDelivery' then ThisOrderData.PaymentType := CashOnDelivery
else if This_Data = 'BankTransfer' then ThisOrderData.PaymentType := BankTransfer;
end;
8: begin
if This_Data <> '' then begin
if This_Data = 'VISA' then ThisOrderData.CreditCardType := VISA
else if This_Data = 'VISAELECTRON' then ThisOrderData.CreditCardType := VISAELECTRON
else if This_Data = 'MAESTRO' then ThisOrderData.CreditCardType := MAESTRO;
end;
end;
9: if This_Data <> '' then ThisOrderData.CreditCardNo := This_Data;
10: if This_Data <> '' then ThisOrderData.Account_No := This_Data;
end;
until Attr_cnt = 10;
self.AddToStart(l,ThisOrderData);
end;
Close(File_IN);
end;
var orders:^TOrderList; {вот здесь я не уверен, не знаю как правильно сделать чтоб вызывались хотя бы те две процедуры}
begin
new(orders);
orders.LoadFromFile('Data.txt');
end. |
|
Я не уверен в правильности описания типов и можно ли так делать, кто может сказать как правильно вызвать эти процедуры и где у меня возможные ошибки? я уже запарился, скоро посидею, помогите плз, если правильно поможете то закину вам на веб мани 500 р.
честное слово, врать не зачем, просто уже не знаю как написать эту программу.