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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Удаление записи, сортировка, поиск 
:(
    Опции темы
rustick
Дата 17.12.2009, 23:59 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброй ночи. Делаю курсовую работу. 

Задание:

Описать структуру с именем train, содержащую следующие понятия:

- название пункта назначения
- номер поезда
- время отправления

Написать программу, выполняющую следующие действия:

1. Создание нового файла.
2. Добавление записи типа train в файл.
3. Удаление указанной записи.
4. Корректировка указанной записи.
5. Просмотр файла.
6. Сортировка по номерам поездов.
7. Вывод на экран информации о поезде, номер которого введен с клавиатуры; если таких поездов нет, выдать на дисплей соответствующее сообщение.

4 пункта практически реализовал (1,2,4,5). Прошу помочь найти ошибки в программе, а также помочь в решении остальных пунктов.

Временно вместо функций, которые я не смог написать (3,6,7) - стоит вывод на экран.

Код

#include <stdio.h>
void sozdanie();
void dobavlenie();
void udalenie();
void korrektirovka();
void prosmotr();
void sortirovka();
void vivod();
void vihod();

void main(void)
    {
     char ch,v;
     do {
     printf("1. Sozdanie \n");
     printf("2. Dobavlenie \n");
     printf("3. Udalenie \n");
     printf("4. Korrektirovka \n");
     printf("5. Prosmotr \n");
     printf("6. Sortirovka \n");
     printf("7. Vivod \n");
     printf("8. Vihod \n");

     printf("Vvedite nomer komandi: \n");

     ch=getchar();
     v=getchar();

     switch (ch)
        {
         case '1': sozdanie();break;
         case '2': dobavlenie();break;
         case '3': udalenie();break;
         case '4': korrektirovka();break;
         case '5': prosmotr();break;
         case '6': sortirovka();break;
         case '7': vivod();break;
         }
     } while ((ch)='1' && ch<='7');
}
void sozdanie()
{
    struct poezd
    {
       char punkt[15];
       int nomer;
       int chas;
       int minuta;
    }train;
    FILE*f;
    int i;
    f=fopen ("test","w");
    if(ferror(f)) perror("oshibca");
    else{for(i=0;i<3;i++){
    printf("\n nazvanie punkta naznachenya:");
    scanf("%s", train.punkt);
    printf("\n nomer poezda:");
    scanf("%d",&train.nomer);
    printf("\n vremya otpravlenya");
    scanf("%d:%d",&train.chas, &train.minuta);
        fwrite(&train,sizeof (struct poezd),1,f);
    }
    fclose(f);
    }
}
void dobavlenie()
{
    struct poezd
    {
    char punkt[15];
    int nomer;
    int chas;
    int minuta;
    }train;
    int b, i;
    FILE* fp;
    fp=fopen("test","a");
    if(ferror(fp)) perror("oshibca");
    else{for(i=0;i<3;i++){
    printf("\n nazvanie punkta naznachenya:");
    scanf("%s", train.punkt);
    printf("\n nomer poezda:");
    scanf("%d",&train.nomer);
    printf("\n vremya otpravlenya");
    scanf("%d:%d",&train.chas, &train.minuta);
        fwrite(&train,sizeof (struct poezd),1,fp);
    }
    fclose(fp);
    }
}

void udalenie()
{
printf ("Udalenie faila \n");
}
void korrektirovka()
{

    struct poezd
    {
       char punkt[15];
       int nomer;
       int chas;
       int minuta;
    }train;
FILE* f;
int b,k,n;
if((f=fopen("test","r+"))==NULL);
printf("oshibca");
else
{
k=fseek(f,0,SEEK_END);
b=ftell(f);sizeof(train);
printf("Vvedite nomer zapisi");
scanf("%d",&n);
if(n>b)
printf("Takoi zapisi net");
else{
fseek(f,(n-k)* sizeof(train),0);
fread(&train,sizeof(train),1,f);
puts("Vvedite novoe nazvanie punkta naznachenya");
scanf("%s",&train.punkt);
puts("Vvedite novii nomer poezda");
scanf("%d",&train.nomer);
puts("\n vvedite novoe vremya otpravlenya");
scanf("%d:%d",&train.chas, &train.minuta);
fseek(f,(n-1)* sizeof(&train),0);
fwrite(&train,sizeof(train),1,f);
fclose(f);
}
void prosmotr()
{
  struct poezd
  {
      char punkt[15];
      int nomer;
      int chas;
      int minuta;
  }train;
FILE* f;
int cc;
if((f=fopen("test","r"))!=NULL)
{
while(1)
{
cc=fread(&train,sizeof(struct poezd),1,f);
if(cc!=1) break;
printf("\n Nazvanie %s nomer %d chas %d minuta %d 1:%ch 2:%d 3:%d 4:%d");
}
void sortirovka()
{
printf ("Sortirovka faila \n");
}
void vivod()
{
printf ("Vivod faila \n");
}
void vihod()
{
printf ("Vihod \n");
}


PM MAIL   Вверх
rustick
Дата 20.12.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Реализовал 6 пунктов из 7-ми.

Прошу помочь
1. Исправить ошибки в программе 
2. Выполнить пункт 7.
Цитата

7. Вывод на экран информации о поезде, номер которого введен с клавиатуры; если таких поездов нет, выдать на дисплей соответствующее сообщение.

Код

#include <stdio.h>
void sozdanie();
void dobavlenie();
void udalenie();
void korrektirovka();
void prosmotr();
void sortirovka();
void vivod();
void vihod();

void main(void)
    {
     char ch,v;
     do {
     printf("1. Sozdanie \n");
     printf("2. Dobavlenie \n");
     printf("3. Udalenie \n");
     printf("4. Korrektirovka \n");
     printf("5. Prosmotr \n");
     printf("6. Sortirovka \n");
     printf("7. Vivod \n");
     printf("8. Vihod \n");

     printf("Vvedite nomer komandi: \n");

     ch=getchar();
     v=getchar();

     switch (ch)
        {
         case '1': sozdanie();break;
         case '2': dobavlenie();break;
         case '3': udalenie();break;
         case '4': korrektirovka();break;
         case '5': prosmotr();break;
         case '6': sortirovka();break;
         case '7': vivod();break;
         }
     } while ((ch)='1' && ch<='7');
}
void sozdanie()
{
    struct poezd
    {
       char punkt[15];
       int nomer;
       int chas;
       int minuta;
    }train;
    FILE*f;
    int i;
    f=fopen ("test","w");
    if(ferror(f)) perror("oshibca");
    else{for(i=0;i<3;i++){
    printf("\n nazvanie punkta naznachenya:");
    scanf("%s", train.punkt);
    printf("\n nomer poezda:");
    scanf("%d",&train.nomer);
    printf("\n vremya otpravlenya");
    scanf("%d:%d",&train.chas, &train.minuta);
        fwrite(&train,sizeof (struct poezd),1,f);
    }
    fclose(f);
    }
}
void dobavlenie()
{
    struct poezd
    {
    char punkt[15];
    int nomer;
    int chas;
    int minuta;
    }train;
    int b, i;
    FILE* fp;
    fp=fopen("test","a");
    if(ferror(fp)) perror("oshibca");
    else{for(i=0;i<3;i++){
    printf("\n nazvanie punkta naznachenya:");
    scanf("%s", train.punkt);
    printf("\n nomer poezda:");
    scanf("%d",&train.nomer);
    printf("\n vremya otpravlenya");
    scanf("%d:%d",&train.chas, &train.minuta);
        fwrite(&train,sizeof (struct poezd),1,fp);
    }
    fclose(fp);
    }
}

void udalenie()
void ydal(){struct poezd
        {char punkt[15];
         int nomer;
         int chas;
         int minuta;
         }train;
int c, h, g,r;
clrscr();
     if((f=fopen("test","a+b"))!=NULL)
       {s=fopen("new","a+b");
    printf("Vvedite nomer:");
    scanf("%d",&h);
    while(1){
        c=fread(&train, sizeof(train),1,f);
        if(c!=1) break;
        if(train.nomer!=h)
            fwrite(&train,sizeof(train),1,s);
            else fread(&train,sizeof(train),1,s);
        }
void korrektirovka()
{

    struct poezd
    {
       char punkt[15];
       int nomer;
       int chas;
       int minuta;
    }train;
FILE* f;
int b,k,n;
if((f=fopen("test","r+"))==NULL);
printf("oshibca");
else
{
k=fseek(f,0,SEEK_END);
b=ftell(f);sizeof(train);
printf("Vvedite nomer zapisi");
scanf("%d",&n);
if(n>b)
printf("Takoi zapisi net");
else{
fseek(f,(n-k)* sizeof(train),0);
fread(&train,sizeof(train),1,f);
puts("Vvedite novoe nazvanie punkta naznachenya");
scanf("%s",&train.punkt);
puts("Vvedite novii nomer poezda");
scanf("%d",&train.nomer);
puts("\n vvedite novoe vremya otpravlenya");
scanf("%d:%d",&train.chas, &train.minuta);
fseek(f,(n-1)* sizeof(&train),0);
fwrite(&train,sizeof(train),1,f);
fclose(f);
}
void prosmotr()
{
  struct poezd
  {
      char punkt[15];
      int nomer;
      int chas;
      int minuta;
  }train;
FILE* f;
int cc;
if((f=fopen("test","r"))!=NULL)
{
while(1)
{
cc=fread(&train,sizeof(struct poezd),1,f);
if(cc!=1) break;
printf("\n Nazvanie %s nomer %d chas %d minuta %d 1:%ch 2:%d 3:%d 4:%d");
}
void sortirovka(struct poezd items[], int count)
{
  qs_struct(items,0, count-1);
}
void qs_struct(struct poezd items[], int left, int right)
{
  register int i,j;
  char *x;
  struct poezd temp;

i=left; j=right;
x=items[(left+right)/2].nomer;

do  {
  while((strcmp(items[i].nomer,x) < 0) && (i < right)) i++;
  while((strcmp(items[j].nomer,x) > 0) && (i > left)) j--;
  if(i<= j) {
     temp = items[i];
     items[i] = items[j];
     items[j] = temp;
     i++; j--;
    }
  } while (i <= j);
  if (left < j) qs_struct(items, left, j);
  if (i < right) qs_struct(items, i, right);
}

void vivod()
{
printf ("Vivod faila \n");
}
void vihod()
{
printf ("Vihod \n");
}


PM MAIL   Вверх
LokiAsgard
Дата 21.12.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Лень писать - скидываю свой старый проект (задание точно такое же). Вытянешь сам оттуда функции

Присоединённый файл ( Кол-во скачиваний: 21 )
Присоединённый файл  SuburbanTrains.rar 62,71 Kb
PM MAIL   Вверх
rustick
Дата 21.12.2009, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(LokiAsgard @ 21.12.2009,  13:22)
Лень писать - скидываю свой старый проект (задание точно такое же). Вытянешь сам оттуда функции

Спасибо smile

Там все так сложно, кто поможет вытянуть?
Файл чистый.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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