Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужны комменты 
:(
    Опции темы
Nyanpire
Дата 16.4.2014, 22:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 16.4.2014

Репутация: нет
Всего: нет



есть код, не хватает только комментариев, хочется разобраться хорошенько (желательно как чайнику))
FUNC.C
#include "func.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int Add(SPISOK *spisok, RECEPT recept)
 {
    ELEMENT *tmp=(ELEMENT *)malloc(sizeof(ELEMENT));
    if (!tmp)
    return 1;
    if (!spisok->head)
    spisok->head=tmp;
    else 
     {    
      if(!spisok->curr)
        spisok->curr=spisok->head;
            while (spisok->curr->next)
           spisok->curr=spisok->curr->next;
                 spisok->curr->next=tmp;
     }
    tmp->recept=recept;
    tmp->next=NULL;
    spisok->curr=tmp;
    return 0;
 }

void Delete (SPISOK *spisok,int n)
 {    
    spisok->curr=spisok->head;
    for(int i=0;i<n-1;i++)
  spisok->curr=spisok->curr->next;
    ELEMENT *tmp;
    if (n==0)
    {
     tmp=spisok->head; spisok->head=spisok->head->next;
    }
    else 
   if (spisok->curr->next->next)
     {
      tmp=spisok->curr->next;
      spisok->curr->next=spisok->curr->next->next;
     }
    else
    {
     tmp=spisok->curr->next;
     spisok->curr->next=NULL;
    }
  free(tmp);
 }

void DeleteSp(SPISOK *spisok)
 {
    while (spisok->head)
    {
       spisok->curr=spisok->head;
       spisok->head=spisok->head->next;
       free(spisok->curr);
    }
    spisok->head=spisok->curr=NULL;
 }

int Save (SPISOK *spisok,char *filename)
 {
    FILE *f = fopen(filename,"wb");
    if (!f)
    return 1;
    spisok->curr=spisok->head;
    while (spisok->curr)
    {
         if (fwrite(&spisok->curr->recept,sizeof(RECEPT),1,f)<1)
      {
       fclose(f);
       return 1;
      }
        spisok->curr=spisok->curr->next;
    }
    fclose(f);
    return 0;
 }

int SaveTxt (SPISOK *spisok,char *filename)
 {
    FILE *f = fopen(filename,"w");
    if (!f)
   return 1;
    spisok->curr=spisok->head;
    while (spisok->curr)
   {
        if (fprintf(f,"%31s %10u %9u %20s %31s",
        spisok->curr->recept.Nomber,
        spisok->curr->recept.Name,spisok->curr->recept.Time,
        spisok->curr->recept.Genre,spisok->curr->recept.Act)<1)
      {
       fclose(f);
       return 1;
      }
        spisok->curr=spisok->curr->next;}
    fclose(f);
    return 0;
 }

int Load (SPISOK *spisok,char *filename)
 {
    DeleteSp(spisok);
    FILE *f = fopen(filename,"rb");
    if (!f)
   return 1;
    RECEPT tmp;
    while (fread(&tmp,sizeof(RECEPT),1,f)==1)
   {
    if(Add(spisok,tmp))
     {
      fclose(f);
      return 2;
     }
   }
    fclose(f);
    return 0;
 }

int Poisk (SPISOK *spisok,char *s,int n)
 {
    while (spisok->curr) 
   {
      if ((spisok->curr->recept.Name==atoi(s))
                || ((spisok->curr->recept.Time==atoi(s))) 
                || !strncmp(spisok->curr->recept.Nomber,s,strlen(s))
        || !strncmp(spisok->curr->recept.Genre,s,strlen(s)) 
                || !strncmp(spisok->curr->recept.Act,s,strlen(s)))
        {
       spisok->curr=spisok->curr->next;
       n++;
       return n;
      }
      n++;
    spisok->curr=spisok->curr->next;
   } return -1;
 }

int CmpInc(char *a, char *b)
 {
    if (strcmp(a,b)>0)
    return 1;
    return 0;
 }

int CmpDec(char *a, char *b)
 {
    if (strcmp(a,b)<0)
    return 1;
    return 0;
 }

int CmpIncU(unsigned a, unsigned b)
 {
    if (a>b)
    return 1;
    return 0;
 }

int CmpDecU(unsigned a,unsigned b)
 {
    if (a<b)
    return 1;
    return 0;
 }

void Sort(SPISOK *spisok, int x1, int x2)
 {
    if(!spisok->head)
    return;
    int (*cmp)(char*,char*);
    int (*cmpU)(unsigned,unsigned);
    if (x2==0)
    {
     cmp=CmpInc;
     cmpU=CmpIncU;
    }
  else 
    {
     cmp=CmpDec;
     cmpU=CmpDecU;
    };
  int Flag1 = 1;
    int Flag2 = 0;  
    while(Flag1)
     {   
     Flag1 = 0;       
      spisok->curr = spisok->head;    
      while(spisok->curr->next)
        {
           switch(x1)
           {
               case 1: {Flag2=cmp(spisok->curr->recept.Nomber,
                      spisok->curr->next->recept.Nomber);
break;}
               case 2: {Flag2=cmpU(spisok->curr->recept.Name,
                      spisok->curr->next->recept.Name);
break;}    
              case 3: {Flag2=cmpU(spisok->curr->recept.Time,
                     spisok->curr->next->recept.Time);
break;}
             case 4: {Flag2=cmp(spisok->curr->recept.Genre,
                    spisok->curr->next->recept.Genre);
break;}
                case 5: {Flag2=cmp(spisok->curr->recept.Act,
                      spisok->curr->next->recept.Act);
break;}
           }    
         if(Flag2)
           {
            Exc(spisok);
            Flag1 = 1;
           }
           else
           spisok->curr = spisok->curr->next;
        }
     }
    spisok->curr = spisok->head;
 }

void Exc(SPISOK *spisok)
 {
    RECEPT tmp;
    memcpy(&tmp,&spisok->curr->recept,sizeof(RECEPT));
    memcpy(&spisok->curr->recept, 
&spisok->curr->next->recept,sizeof(RECEPT));
    memcpy(&spisok->curr->next->recept, &tmp, sizeof(RECEPT));
 }


Это сообщение отредактировал(а) Nyanpire - 16.4.2014, 22:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.1067 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.