Проектирование программы об автомобилях (Лабораторная работа № 5), страница 2

          name FIO; };

struct table { info data[50];

           int n; };

void output(table T,int i,FILE *out)

  {  int j; name *k; machine *p;

     fprintf(out,"\n %d FIO: ",i+1);

     for(k=T.data[i].FIO.next; k->next!=NULL ;k=k->next)

     fprintf(out,"%c",k->sim);

     fprintf(out," : ");

     p=T.data[i].mach.next;

     do

   { fprintf(out,"\n Nomer: ");

     for(j=0;j!=6;j++) fprintf(out,"%c",p->nomer[j]);

     fprintf(out," Marka: ");

     k=p->marka;

     do

       { k=k->next;

         fprintf(out,"%c",k->sim);

       }

     while(k->next!=NULL);

     if(p->next!=NULL) j=1; else j=0;

     p=p->next;

   }

     while (j);

  }

void moving(table & T,int i,int j)

  {  machine *p,*k; int l,q=1; name *v;

     T.data[i].FIO=T.data[j].FIO;

     p=T.data[j].mach.next;

     k=T.data[i].mach.next;

     do

   { k->next=new machine;

     for(l=0;l!=6;l++) k->nomer[l]=p->nomer[l];

     k->marka=p->marka;

     if(p->next!=NULL) { p=p->next; k=k->next; } else q=0;

   }

     while (q);

     k->next=NULL;

  }

void mach(table & T,int i)

  {  machine *p; int l=0;

     for(p=T.data[i].mach.next;p->next!=NULL;p=p->next);

Определение структур

Функция вывод таблицы в файл

Вывод ФИО

Цикл перебора машин

Вывод номера

Вывод марки

Функция перестановки 2 элементов таблицы

Изменение указателя на ФИО изменяемого элемента на указатель на ФИО переносимого элемента.

Цикл по созданию у изменяемого элемента машин и присваивание указателей на марку и номер машины переносимого элемента.

Проверка, что машины у переносимого элемента закончились.

Функция добавления машины из элемента (T.n+1) в конец списка машин у переданного элемента

    p->next=new machine;

     p=p->next;

     p->next=NULL;

     p->marka=T.data[T.n+1].mach.next->marka;

     for(l=0;l!=6;l++) p->nomer[l]=T.data[T.n+1].mach.next->nomer[l];

     for(p=T.data[i].mach.next;p->next!=NULL;p=p->next) l++;

  }

void main()

  { table T; FILE *in,*out; int i,j,id,kol,per,vtr,l; char g; machine *p; name *k,*buf;

    T.n=-1;

    if((in=fopen("D:\AUTO.txt","r"))==NULL)

    {perror("Error"); exit(0);}

    if((out=fopen("D:\AUTO2.txt","w"))==NULL)

    {perror("Error"); exit(0);}

    do

     { T.n=T.n+1;

       if (T.n==49) {perror("Underline"); exit(0);}

       T.data[T.n+1].mach.next=new machine;

       p=T.data[T.n+1].mach.next;

       p->next=NULL;

       for(i=0;i!=6;i++) fscanf(in,"%c",&p->nomer[i]);

       fscanf(in,"%c",g);

       k=p->marka;

       k->next=new name;

       fscanf(in,"%c",&g);

       while (g!=',')

         { k->next=new name;

                   k=k->next;

                   k->sim=g;

                   fscanf(in,"%c",&g);

                 }

       k->next=NULL;

       T.data[T.n+1].FIO.next=new name;

       k=T.data[T.n+1].FIO.next;

       fscanf(in,"%c",&g);

       while (g!='\n' && !feof(in))

         { k->sim=g;

            k->next=new name;

       k=k->next;

                   if (!feof(in)) fscanf(in,"%c",&g);

         }

       k->next=NULL;

        buf=T.data[T.n+1].FIO.next;

       k=T.data[T.n-1].FIO.next;

       id=0;

        l=0;

       i=T.n-1;

        while(i>-1 && !id && !l)

         { if(k->sim>buf->sim)

                  { i--;

                    k=T.data[i].FIO.next;

                    buf=T.data[T.n+1].FIO.next;

                  }

                if(k->sim==buf->sim)

                  { if(k->next->next==NULL && buf->next->next==NULL) id=1;

                k=k->next;

                    buf=buf->next;

                              }

                if(k->sim<buf->sim) l=1;

      }

    if (!id) { i++;

                   per=T.n; vtr=T.n-1;

                       for(kol=T.n-i; kol!=0 ; kol--)

                                 { moving(T,per,vtr);

                       per--; vtr--;

                                 }

                       moving(T,i,T.n+1);

             }

        else { mach(T,i);

                   T.n=T.n-1;

                 }

        }

      while(!feof(in));

      fclose(in);

      for (i=0;i!=T.n+1;i++) output(T,i,out);

      fclose(out);

  }


   4. Набор тестов

Файл “AUTO.txt”

Результат

Предназначение теста

1

2

3

4

5. Результат работы программы

Программа решает поставленную перед ней задачу, что можно увидеть на примерах тестов.