|
|
|
Nyanpire |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
Правила форума "C++: Базы данных" | |
|
Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах. Благодарим за понимание. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Базы данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |