Разработка программы для имитации работы «Забавный магазин» с использованием односвязных списков

Страницы работы

Содержание работы

МИНИСТЕРСТВО ТРАНСПОРТА РОССИЙСКОЙ ФЕДЕРАЦИИ  (МИНТРАНС РОССИИ)

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА  (РОСЖЕЛДОР)

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ                      ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ПУТЕЙ СООБЩЕНИЯ (СГУПС)

Кафедра “Информационные технологии транспорта

ЛАБОРАТОРНАЯ РАБОТА  №3_в

По дисциплине “Информатика и программирование”

Тема: «Забавный магазин» с использованием односвязных списков»

Выполнил

Проверил

________________

подпись

Студент гр. ПИ-111

Денисова Е.И.

________________

подпись

Канд. техн. наук доцент Е.В. Редьков

________________

дата

________________

дата

Новосибирск - 2008 г.

Разработать программу для имитации работы “забавного магазина”, обеспечив выполнение следующих операций:

1   Открытие магазина (очередь и стек - пусты)

2   Ввод имени покупателя с клавиатуры (имя добавляется в очередь)

3   Ввод названия товара с клавиатуры (товар добавляется в стек)

4   Продажа товара покупателю (товар извлекается из стека, а покупатель – из очереди), пара данных товар - покупатель выводятся на экран.

5   Закрытие на перерыв (данные стека и очереди сохраняются в файлах)

6   Открытие магазина после перерыва (стек и очередь восстановить из файлов)

6   Проверка наличия товара в стеке (поиск по названию)

7   Проверка наличия покупателя в очереди (поиск по имени)

8   Завершение работы программы.

Рекомендации:

Для хранения данных в стеке и очереди используйте односвязные списки.

Программа:

Program s1;

uses crt;

type

    s3=string[7];

    f=file of s3;

    pz=^z;

    z=record zs:s3;

    next:pz;end;

var top_s:pz;top_o:pz;nm:integer;name:s3;tempf:pz;f_s,f_o:f;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

{~~~~dobavit element v stek~~~~~}

Procedure adf_s1(var top:pz;name:s3);

var temp:pz;

begin temp:=top;

      new(top);top^.next:=temp;top^.zs:=name

end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

{~~~~dobavit element v ochered~~~~~~~}

Procedure adl_s1(var top:pz;name:s3);

var temp:pz;

begin

     if top=nil then

     begin new(top);top^.next:=nil;top^.zs:=name

     end

     else begin temp:=top;while temp^.next<>nil do temp:=temp^.next;

                          new(temp^.next);

                          temp^.next^.zs:=name;temp^.next^.next:=nil;

          end;

     end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

{~~~~~~~~~~vivod na ikran~~~~~~~~~~}

Procedure s1_scr(top:pz);

var temp:pz;

begin write;

      if top<>nil then

      begin temp:=top;

           while temp<>nil do

           begin writeln(temp^.zs:4);temp:=temp^.next;

           end;

      end;

end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

{~~~~~~~~~ydalenie elementa iz steka~~~~~~~~~~~~}

Procedure del_first(var top:pz;var name:s3);

          var temp:pz;

          begin if top<>nil then

                begin name:=top^.zs;write('tovar     = ',name);readln;

                      temp:=top^.next;{sohranim adres 2-go elem}

                      dispose(top);{osvobodim pamit ot 1-go elem}

                      top:=temp;{2-i elem nazivaem pervim}

                end;

          end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

{~~~~~~~~~ydalenie elementa iz ocheredi~~~~~~~~~~}

Procedure del_last(var top:pz;var name:s3);

var temp:pz;temp1:pz;

begin if top<>nil then begin

                            temp:=top;temp1:=nil;

                            while temp^.next<>nil do begin

                          temp1:=temp;

                          temp:=temp^.next; end;

                          name:=temp^.zs;

                          write('name=',name);readln;

                          if temp1=nil then  top:=nil

                          else  temp1^.next:=nil;

                          dispose(temp);

                      end;

end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

{~~~~~~~~~~~~zapis v fail~~~~~~~~~~~}

Procedure s1_fil(name:string;top:pz;var f:f);

var temp:pz;

begin assign(F,name);rewrite(F);

      if top<>nil then

      begin temp:=top;

            while temp<>nil do

            begin write(F,temp^.zs);temp:=temp^.next;

            end;

      end;close(F);

end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

{~~~~~~~~prochitait iz faila~~~~~~~~}

Procedure fil_s1(name:string;var top:pz;var f:f);

var buf:s3;

begin assign(F,name);reset(F);

      while not EOF(F) do

      begin read(F,buf);adl_s1(top,buf);

      end;close(F);

end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

{~~~~~~~~~~~~~~~poisk elementa~~~~~~~~~~~~~~~~~~}

Procedure find_s1(top:pz;var tempf:pz);

          var namef:s3;w:byte;

          begin write('Find name=');readln(namef);w:=1;

                tempf:=top;

                while(tempf<>nil{konec spiska}) and

                (tempf^.zs<>namef{elem naiden}) do

                begin

                tempf:=tempf^.next; w:=w+1;{perexod k sled elem}end;

                if tempf=nil{konec spiska} then writeln(namef+' not found')

                                             else writeln(tempf^.zs+' is found','_elemen nomer-',w);

                                                 write('press any key');readln;

          end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

{~~~~~~~~~~osnovnaya programa~~~~~~~~~~~~~~~~~~}

begin top_s:=nil;top_o:=nil;tempf:=nil;

repeat window(1,1,80,25);clrscr;

       window(1,1,20,25);writeln;writeln ('=TOVAR=    ');s1_scr(top_s);

       window(61,1,80,25);writeln;writeln('=POKUPATEl=');s1_scr(top_o);

       window(26,1,60,15);

       writeln;

       writeln('************CRAZY-SHOP************');

       writeln('|1-dobavit tovar                 |');

       writeln('|2-dobavit pokupatel             |');

       writeln('|3-sale                          |');

       writeln('|4-poisk tovar                   |');

       writeln('|5-poisk pokupatel               |');

       writeln('|6-save                          |');

       writeln('|7-read                          |');

       writeln('|8-exit                          |');

       writeln('**********************************');

       writeln;

       writeln('vvedi 1-8');

      readln(nm);

      case nm of

           1:begin write('tovar=');readln(name);adf_s1(top_s,name);end;

           2:begin write('pokupatel=');readln(name);adl_s1(top_o,name);end;

           3:begin del_first(top_s,name);del_last(top_o,name);end;

           4:find_s1(top_s,tempf);

           5:find_s1(top_o,tempf);

            6:begin s1_fil('f:/tovar.txt',top_s,f_s);s1_fil('f:/pokup.txt',top_o,f_o);end;

            7:begin fil_s1('f:/tovar.txt',top_s,f_s);fil_s1('f:/pokup.txt',top_o,f_o);end;

      end;

      until nm=8;

end.

Работа:

Похожие материалы

Информация о работе