Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [ANSI C] Поиск в списках, Не получается совсем ( 
V
    Опции темы
jahguru
Дата 24.5.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Надо лабу сдавать а у меня не получается (( 
Почти все написал, но 2 вещи не могу.... Прога делает базешку, ФИО, группа, оценки по 5 предметам.
Не смог следующее:
* определение фамилий студентов, имеющих задолженность хотя бы по одному предмету;
* определение  процента студентов, сдавших все экзамены на 4 и 5.
если кто поможет, блин большое спасибо будет!! вот код 
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct databs {
    char fname[30];   // familia
   char name[30];   // imya
   char pname[30]; //Otchestvo
   char gid[10];  //Gruppa
   char les1[6],les2[6],les3[6],les4[6],les5[6];  //ocenki
   struct databs *next;
   struct databs *prior;
   };
struct databs *start;
struct databs *last;
struct databs *find(char *);
void enter(void), search(void), save(void),search_2(void);
void load(void), list(void);
void mldelete(struct databs **, struct databs **);
void dls_store(struct databs *i, struct databs **start, struct databs **last);
void inputs(char *, char *, int), display(struct databs *);
int menu_select(void);

int main(void)
{
    start=last=NULL;
   for(;;)
      {
    switch(menu_select())
       {
       case 1: enter();
          break;
         case 2: mldelete(&start, &last);
          break;
         case 3: list();
          break;
         case 4: search();
          break;
         case 5: save();
          break;
         case 6: load();
          break;
         case 7: exit(0);
         }
     }
     return 0;
}

int menu_select(void)
{
    char s[80];
   int c;
   c=0;
   printf("\n\n Lab_2.3 all-in-one. Final Release!\n\n Take one: \n");
   printf("1. Enter DATA\n");
   printf("2. Delete DATA\n");
   printf("3. Print DATA via console\n");
   printf("4. Try to search\n");
   printf("5. Backup it!\n");
   printf("6. Restore data\n");
   printf("7. Exit\n");
   do {
    printf("\n Type here >>: ");
      gets(s);
      c=atoi(s);
      }
   while(c<0 || c>7);
   return c;
}

void enter(void)
{
struct databs *info;

for(;;)
{
    info=(struct databs *)malloc(sizeof(struct databs));
   if(!info)
   {
    printf("\n Not enough memory");
      return;
   }

   inputs("Family Name: ", info->fname, 30);
   if(!info->fname[0]) break;
   inputs("Name: ", info->name, 30);
   inputs("Otchestvo )): ", info->pname, 30);
   inputs("Group ID: ", info->gid, 10);
   inputs("Lesson 1 Rate: ", info->les1, 6);
   inputs("Lesson 2 Rate: ", info->les2, 6);
   inputs("Lesson 3 Rate: ", info->les3, 6);
   inputs("Lesson 4 Rate: ", info->les4, 6);
   inputs("Lesson 5 Rate: ", info->les5, 6);

   dls_store(info, &start, &last);
   }
}

void inputs(char *prompt, char *s, int count)
{
    char p[255];

   do {
    printf(prompt);
      fgets(p, 254, stdin);
      if(strlen(p)>count) printf("\ Too much chars\n");
      }
   while(strlen(p)>count);
   p[strlen(p)-1]=0;
   strcpy(s, p);
}
void dls_store(struct databs *i, struct databs **start, struct databs **last)
{
    struct databs *old, *p;
   if(*last==NULL)
   {
    i->next=NULL;
      i->prior=NULL;
      *last=i;
      *start=i;
      return;
   }
   p=*start;

   old=NULL;
   while(p) {
    if(strcmp(p->name, i->name)<0)
      {
       old=p;
         p=p->next;
      }
      else
    {
       if(p->prior)
         {
         p->prior->next=i;
         i->next=p;
         i->prior=p->prior;
         p->prior=i;
         return;
       }
      i->next=p;
      i->prior=NULL;
      p->prior=i;
      *start=i;
      return;
      }
   }
   old->next=i;
   i->next=NULL;
   i->prior=old;
   *last=i;
}

void mldelete(struct databs **start, struct databs **last)
{
    struct databs *info;
   char s[80];
   inputs("Type Family Name for Delete owner DATA: ", s, 30);
   info=find(s);
   if(info) {
    if(*start==info) {
       *start=info->next;
         if(*start) (*start)->prior=NULL;
         else *last=NULL;
      }
      else {
       info->prior->next=info->next;
       if(info!=*last)
           info->next->prior=info->prior;
         else
          *last=info->prior;
      }
      free(info);
   }
}

struct databs *find( char *fname)
{
    struct databs *info;
   info=start;
   while(info) {
    if(!strcmp(fname, info->fname)) return info;
      info=info->next;
   }
   printf("Can't find DATA for this Family Name\n");
   return NULL;
}
void list(void)
{
    struct databs *info;

   info=start;
   while(info) {
    display(info);
      info=info->next;
   }
   printf("\n\n");
}
void display(struct databs *info)
{
    printf("%s\n", info->fname);
   printf("%s\n", info->name);
   printf("%s\n", info->pname);
   printf("%s\n", info->gid);
   printf("%s\n", info->les1);
   printf("%s\n", info->les2);
   printf("%s\n", info->les3);
   printf("%s\n", info->les4);
   printf("%s\n", info->les5);
   printf("\n\n");
}
void search(void)
{
    char fname[40];
   struct databs *info;
   printf("Type Family Name:> ");
   gets(fname);
   info=find(fname);
   if(!info) printf("Result: 0. Try later\n");
   else display(info);
}
void save(void)
{
    struct databs *info;
   FILE *fp;
   fp=fopen("data.dat","wb");
   if(!fp) {
    printf("Unable to open file.\n");
      exit(1);
   }
   printf("\nSaving file...\n");
   info=start;
   while(info) {
    fwrite(info, sizeof(struct databs), 1, fp);
    info=info->next;
   }
   fclose(fp);
}
void load()
{
    struct databs *info;
   FILE *fp;

   fp=fopen("data.dat","rb");
   if(!fp) {
    printf("Unable to open file.\n");
      exit(1);
   }
   while(start) {
    info=start->next;
    free(info);
    start=info;
   }

   start=last=NULL;

   printf("\nLoad from file............ done\n");
   while(!feof(fp)) {
    info=(struct databs *) malloc(sizeof(struct databs));
      if(!info) {
       printf("No Such Free Memory");
         return;
      }
      if(1 != fread(info, sizeof(struct databs), 1, fp)) break;
      dls_store(info, &start, &last);
   }
   fclose(fp);
}

PM MAIL WWW ICQ   Вверх
jahguru
Дата 18.6.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ладно, раз никто не смог помочь дописал сам, и успешно сдал в УПИ, студентам 2 курса в помощь на следующий год
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct databs {
    char fname[30];   // familia
    char name[30];   // imya
    char pname[30]; //Otchestvo
    char gid[10];  //Gruppa
    int les1,les2,les3,les4,les5;  //ocenki
    struct databs *next;
    struct databs *prior;
};
struct databs *start;
struct databs *last;
struct databs *find(char *);
int i;

void enter(void), search(void), save(void),search_2(void);
void load(void), list(void);
void mldelete(struct databs **, struct databs **);
void dls_store(struct databs *i, struct databs **start, struct databs **last);
void inputs(char *, char *, int), display(struct databs *);
int menu_select(void);
int main(void) {
    start=last=NULL;
    for(i = 1; i >0; i ++){
        switch(menu_select())
        {
        case 1: enter();
            break;
        case 2: mldelete(&start, &last);
            break;
        case 3: list();
            break;
        case 4: search();
            break;
        case 5: save();
            break;
        case 6: load();
            break;
        case 7: hvost();
            break;
        case 8: botanrate();
            break;
        case 9: exit(0);
        }
    }
    return 0;
}
int menu_select(void){
    char s[80];
    int c;
    printf("\n\n Lab_2.3 all-in-one. Final Release!\n\n Take one: \n");
    printf("1. Enter DATA\n");
    printf("2. Delete DATA\n");
    printf("3. Print DATA via console\n");
    printf("4. Try to search\n");
    printf("5. Backup it!\n");
    printf("6. Restore data\n");
    printf("7. Losers \n");
    printf("8. Percent of GOOD\n");
    printf("9. Exit\n");
do {
    printf("\n Type here >>: ");
    gets(s);
    c=atoi(s);
    }
while(c<0 || c>9);
return c;
}
void enter(void){
    struct databs *info;
    char c_tmp[5];
    for(i = 1; i >0; i ++){
        info=(struct databs *)malloc(sizeof(struct databs));
        if(!info) {
            printf("\n Not enough memory");
            return;
        }
        inputs("Family Name: ", info->fname, 30);
        if(!info->fname[0]) break;
        inputs("Name: ", info->name, 30);
            //m
        inputs("Otchestvo )): ", info->pname, 30);
            //a
        inputs("Group ID: ", info->gid, 10);
        inputs("Lesson 1 Rate: ", c_tmp, 5);
        info->les1 = atoi(c_tmp);
            //d
        inputs("Lesson 2 Rate: ", c_tmp, 5);
        info->les2 = atoi(c_tmp);
        inputs("Lesson 3 Rate: ", c_tmp, 5);
        info->les3 = atoi(c_tmp);
            //e
        inputs("Lesson 4 Rate: ", c_tmp, 5);
        info->les4 = atoi(c_tmp);
        inputs("Lesson 5 Rate: ", c_tmp, 5);
        info->les5 = atoi(c_tmp);
        dls_store(info, &start, &last); //by
    }
}
void inputs(char *prompt, char *s, int count)
{
    char p[255];
    do {
        printf(prompt);
        fgets(p, 254, stdin); //Penkov
        if(strlen(p)>count) printf("\ Too much chars\n");
    }while(strlen(p)>count);
    p[strlen(p)-1]=0;
    strcpy(s, p); //Anton
}
void dls_store(struct databs *i, struct databs **start, struct databs **last)
{
    struct databs *old, *p;
    if(*last==NULL){
        i->next=NULL;
        i->prior=NULL;
        *last=i;
        *start=i;
        return;
    }
    p=*start;
    old=NULL;
    while(p) {
        if(strcmp(p->name, i->name)<0)    {
            old=p;
            p=p->next;
        }else{
            if(p->prior){
                p->prior->next=i;
                i->next=p;
                i->prior=p->prior;
                p->prior=i;
                return;
            }
            i->next=p;
            i->prior=NULL;
            p->prior=i;
            *start=i;
            return;
        }
    }
    old->next=i;
    i->next=NULL;
    i->prior=old;
    *last=i;
}
void mldelete(struct databs **start, struct databs **last)
{
    struct databs *info;
char s[80];
inputs("Type Family Name for Delete owner DATA: ", s, 30);
info=find(s);
if(info) {
    if(*start==info) {
    *start=info->next;
        if(*start) (*start)->prior=NULL;
        else *last=NULL;
    }
    else {
    info->prior->next=info->next;
    if(info!=*last)
        info->next->prior=info->prior;
        else
        *last=info->prior;
    }
    free(info);
}
}
struct databs *find( char *fname)
{
    struct databs *info;
info=start;
while(info) {
    if(!strcmp(fname, info->fname)) return info;
    info=info->next;
}
printf("Can't find DATA for this Family Name\n");
return NULL;
}
void list(void)
{
    struct databs *info;
    char str[100];
    info=start;
    while(info) {
        printf(info->fname);    printf("\n");
        printf(info->name);    printf("\n");
        printf(info->pname);    printf("\n");
        printf(info->gid);        printf("\n");
        
        itoa(info->les1, str, 10);
        printf(str);            printf("\n");
        itoa(info->les2, str, 10);
        printf(str);            printf("\n");
        itoa(info->les3, str, 10);
        printf(str);            printf("\n");
        itoa(info->les4, str, 10);
        printf(str);            printf("\n");
        itoa(info->les5, str, 10);
        printf(str);            printf("\n");

        //display(info); //SP945 (25013uk)
        info=info->next;
    }
    printf("\n\n");
}
int hvost(void){
    struct databs *info;
    info=start;
    while(info) {
        //display(info);
        if( (info->les1 < 3) || (info->les2 < 3) ||(info->les3 < 3) ||(info->les4 < 3) ||(info->les5 < 3)){
            printf(info->fname);
        }
        info=info->next;
    }
    printf("\n\n");
    return true;
}
int botanrate(void){
    struct databs *info;
    int totalcount;
    int botancount;
    char str[20];
    totalcount=0;
    botancount=0;
    info=start;
    while(info) {
        if((info->les1 > 3) && (info->les2 > 3) && (info->les3 > 3) && (info->les4 > 3) && (info->les5 > 3)){
            botancount ++;
        }
        totalcount ++;
        info=info->next;
    }
    
    itoa(botancount, str, 10);
    printf( str );
    printf( "good \n" );
    itoa(totalcount, str, 10);
    printf( str );
    printf( "total \n" );
    ultoa( botancount * 100 / totalcount, str, 10);
    printf( str );
    printf( "% \n\n" );
    return atoi(str);
}
void display(struct databs *info){
    printf("%s\n", info->fname);
printf("%s\n", info->name);
printf("%s\n", info->pname);
printf("%s\n", info->gid);
printf("%s\n", info->les1);
printf("%s\n", info->les2);
printf("%s\n", info->les3);
printf("%s\n", info->les4);
printf("%s\n", info->les5);
printf("\n\n");
}
void search(void)
{
    char fname[40];
struct databs *info;
printf("Type Family Name:> ");
gets(fname);
info=find(fname);
if(!info) printf("Result: 0. Try later\n");
else printf(info->fname);
}
void save(void)
{
    struct databs *info;
FILE *fp;
fp=fopen("data.dat","wb");
if(!fp) {
    printf("Unable to open file.\n");
    exit(1);
}
printf("\nSaving file...\n");
info=start;
while(info) {
    fwrite(info, sizeof(struct databs), 1, fp);
    info=info->next;
}
fclose(fp);
}
void load()
{
    struct databs *info;
FILE *fp;
fp=fopen("data.dat","rb");
if(!fp) {
    printf("Unable to open file.\n");
    exit(1);
}
while(start) {
    info=start->next;
    free(info);
    start=info;
}
start=last=NULL;
printf("\nLoad from file............ done\n");
while(!feof(fp)) {
    info=(struct databs *) malloc(sizeof(struct databs));
    if(!info) {
    printf("No Such Free Memory");
        return;
    }
    if(1 != fread(info, sizeof(struct databs), 1, fp)) break;
    dls_store(info, &start, &last);
}
fclose(fp);
}

PM MAIL WWW ICQ   Вверх
Rockie
Дата 21.6.2007, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Цитата(jahguru @  24.5.2007,  13:48 Найти цитируемый пост)
Прога делает базешку

jahguru, а что это? По аналогии она наверное еще ест растишку smile 

Цитата(jahguru @  24.5.2007,  13:48 Найти цитируемый пост)
если кто поможет, блин большое спасибо будет!!

Спа-си-бо блин!!!

Такое? smile




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
jahguru
Дата 22.6.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Rockie @ 21.6.2007,  23:04)
Цитата(jahguru @  24.5.2007,  13:48 Найти цитируемый пост)
Прога делает базешку

jahguru, а что это? По аналогии она наверное еще ест растишку smile 

Цитата(jahguru @  24.5.2007,  13:48 Найти цитируемый пост)
если кто поможет, блин большое спасибо будет!!

Спа-си-бо блин!!!

Такое? smile

угу
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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