Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > структуры


Автор: max123 14.3.2008, 20:42
задача:Написать программу для ввода и хранения информации по 10 книгам с помощью структуры, содержащей три поля: автор, название, год издания.
В составленную программу добавить возможность поиска книги по автору.
В программу пункта 1 добавить возможность удаления книги (книг) с указанным годом издания.
 

Код

#include "stdafx.h"

#include <stdio.h>

int main(void)
{

struct book {
    char title[10];    
    char author[10];    
    int year;        
};

struct book lib;


printf("Aaaaeoa iaeiaiiaaiea eieae: ");
scanf("%s",lib.title);
printf("Aaaaeoa aaoi?a eieae: ");
scanf("%s",lib.author);
printf("Aaaaeoa aia ecaaiey eieae: ");
scanf("%d",&lib.year);



    return 0;
}



подскажите плиз как дальше делать?а то я вобще не шарю...


M
JackYF
Пользуемся кнопкой "Код". И не забываем проверять содержимое скопипастенного на наличие кракозябр :)

Автор: bsa 14.3.2008, 21:28
Сначала нужно создать массив из этих структур на десять элементов.
Затем нужно решить, как определять есть книга в массиве или нет. самый простой способ - ввести переменную, которая будет определять сколько книг в массиве.
Когда книга добавляется, то ты ее вводишь в следующее место за последней книгой и увеличиваешь счетчик книг.
Когда книга удаляется, то последняя книга массива копируется на место удаленной (если, конечно, удалена была не последняя книга), а счетчик количества книг уменьшается на 1.
Для поиска осуществляешь последовательный перебор массива.

Автор: max123 15.3.2008, 00:17
если есть,выложите чтонибудь подобное...

Автор: Christoph 15.3.2008, 00:46
хм....идею не понял...можно кодом? smile  smile 

Автор: bsa 15.3.2008, 01:46
Примерно так:
Код
#include <stdio.h>
#include <string.h>

#define BOOKS_MAX 10

struct Book_struct
{
     char author[20];
     char title[20];
     unsigned year;
};
typedef struct Book_struct Book;

void inputBook(Book *book)
{
    printf("Input book author: ");
    scanf("%20s", book->author);
    printf("Input book title: ");
    scanf("%20s", book->title);
    printf("Input year: ");
    scanf("%u", &book->year);
}

int showMenu(void)
{
     int result = -1;
     do {
        printf("\n1. Input book\n");
        printf("2. Print books\n");
        printf("3. Find book by author\n");
        printf("4. Delete book by year\n");
        printf("\n0. Quit\n\n");
        printf("Make your selection: ");
        scanf("%d", &result);
     }while((result >= 0) && (result < 5))
     return result;
}

void printBook(const Book *book)
{
    printf("Title: %s\n", book->title);
    printf("Author: %s\n", book->author);
    printf("Year: %u\n\n", book->year);
}

void findBooksByAuthor(const Book *books, unsigned count)
{
     char author[20];
     printf("Input author's name: ");
     scanf("%20s", author);
     while(count) {
         if ( strcmp(books->author, author) == 0)
                 printBook(books);
         ++books;
         --count;
     }
}

unsigned deleteBooksByYear(Book *books, unsigned count)
{
     unsigned year;
     unsigned i;
     printf("Input year: ");
     scanf("%u", &year);
     for(i = 0; i < count; ++i) {
         if ( books[i].year == year) {
              if (i + 1 < count)
                   memmove(books + i, books + count - 1, sizeof(*book));
              --count;
              if (--i == 0)
                  break;
         }
     }
     return count;
}

int main()
{
    Book books[BOOKS_MAX];
    unsigned books_count = 0;
    unsigned i;
    while(1) {
         switch( showMenu() ) {
             case 0:
                 return 0; /* выход из программы */
             case 1:
                 if (books_count < BOOKS_MAX) {
                      inputBook(books + books_count);
                      ++books_count;
                 } else
                     printf("Already entered maximum number of books\n");
                 break;
             case 2:
                 for(i = 0; i < books_count; ++i)
                     printBook(book + i);
                 break;
             case 3:
                 findBooksByAthor(books, books_count);
                 break;
             case 4:
                 books_count = deleteBooksByYear(books, books_count);
                 break;
         }
    }
    return 0;
}

Автор: max123 15.3.2008, 09:32
bsa большое пасиба smile 

Автор: max123 15.3.2008, 10:19
тока тёта он не работает...или я чёто не то делаю?

Автор: bsa 15.3.2008, 11:09
max123, думаю, ты должен отладить ее - я ее даже не компилировал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)