Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2010, 19:00   #1
kniazik
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 10
По умолчанию [CИ++] Остановился в пол шаге от конца программы

Кто может направить на правильный путь

Была задача

Разработать программу «Книг по году издания», которая должна содержать структуру из трех полей (название, год, цена) и четыре функции пользователя:
– функция ввода информации;
– функция вывода информации на экран;
– сортировка;
– запись в файл.
Обязательное условие – это наличие меню, что позволит пользователю самому выбирать те действия, которые он хочет совершить над данными.

Я написал программу

Код:
#include <iostream>
using namespace std;


int const N = 4;
struct Book
{
    char name[20];  // название книги
    int date;  // год
    float price;  // цена
};
void writeData(Book* A)
{
    for(int i = 0; i < N; i++)
    {
        cout << "Введите информацию о книге №" << i+1 << ":" << endl;
        cout << "Название: ";
        cin >> A[i].name;
        cout << "Год издания: ";
        cin >> A[i].date;
        cout << "Цена: ";
        cin >> A[i].price;
    }
}
void displayData(Book* A)
{
    cout << "Книга:" << "\t\tГод:" << "\t\tСтоимость: " << endl;
    for(int i = 0; i < N; i++)
    {
        cout << i+1 << ") ";
        cout << A[i].name  << "\t\t" << A[i].date  << "\t\t" << A[i].price << endl;
    }
}
int main ()
{
    setlocale(LC_ALL,"");
    Book A[N];
    bool t = false;
    char ch;
    do 
    {
        cout << " 1. Ввод информации." << endl;
        cout << " 2. Вывод информации." << endl;
        cout << " 3  сортировка по году" << endl;
        cout << " 4  запись в файл" << endl;
        cout << " 5. Выход." << endl;
        do
        {
            ch = getchar();
        }while( (ch < '1') || (ch > '5')  );
        switch (ch)
        {
            case '1':
                t = true;
                writeData(A);break;
            case '2':
                if(t)
                    displayData(A);
                else
                    cout << "Информация не была введена!" << endl;
                break;
          case '3':
                cout << "function 3";break;
            case '4':
                cout << "function 4";break;
            case '5':
                return 0;
        }
        
        cout << "\nПродолжить работу с программой?(y/n)";
        do
        {
            ch = getchar();
        }while((ch != 'y') && (ch != 'Y') && (ch != 'n' ) && (ch != 'N') );
    }while ((ch != 'n' ) && (ch != 'N'));
    return 0;
}
Скажите, как дальше реализовать сортировку по году, например цене, (тут не важно) , Но как сохранить в файл?

Очень нужна помощь
kniazik вне форума Ответить с цитированием
Старый 24.01.2010, 20:00   #2
Александр Елис
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 70
По умолчанию

Можно сделать примерно так: создать массив стуктур, найти структуру с наибольшей ценой(к примеру)... Таким образом отсортировать массив. Чтобы вывести информацию в файл создаешь ссылку на него:
Код:
FILE* f = "путь к нему";
Используешь функцию fopen, записываешь информацию, закрываешь(fclose(f)). Кстати к тебе придерутся: во-первых, если ввести не 1 символ, а слово в меню, то прога заглючит. Во-вторых, енплохо было бы использовать динамическое рапределение памяти.
Александр Елис вне форума Ответить с цитированием
Старый 24.01.2010, 20:59   #3
kniazik
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 10
Печаль

1. С сортировкой я вроде как разобрался
2. Программа работает и со строками


А как использовать динамическую память?
И не совсем понятно, как записать в файл, может кто либо напишет программку для понятия? Какие файлы можно использовать для записи, например вывода информации?
kniazik вне форума Ответить с цитированием
Старый 26.01.2010, 00:02   #4
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
int main()
{
        char *str = new char[255]; // динамически выделяем память
        FILE *f;

        strcpy(str, "Hello"); // копируем строку "Hello" в str

        f = fopen("C:\\temp.txt","w"); // открываем файл для записи

        fwrite(str, strlen(str), 1, f); // записуем строку

        fclose(f); // закрываем файл

        delete []str; // очищаем память

        return 0;
}
profi вне форума Ответить с цитированием
Старый 27.01.2010, 21:35   #5
kniazik
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 10
По умолчанию

большое спасибо,

но это для отдельно взятой строки, а кто может привести пример для целого файла(несколько данных), например для моего случая ?
kniazik вне форума Ответить с цитированием
Старый 27.01.2010, 22:40   #6
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

используй цикл!
Cpluser вне форума Ответить с цитированием
Старый 28.01.2010, 10:33   #7
kniazik
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 10
По умолчанию

ни как не получается (

Цикл делаю, а записывается только последний элемент
kniazik вне форума Ответить с цитированием
Старый 28.01.2010, 13:12   #8
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
#include <iostream>
#include <string>

using namespace std;

struct Book
{
    char name[20];
    float date, price;
};


int main()
{
	Book *obj = new Book[3];
        FILE *f;

	strcpy(obj[0].name, "Book1");
        obj[0].date = 10.10;
        obj[0].price = 4.50;

        strcpy(obj[1].name, "Book2");
        obj[1].date = 20.20;
        obj[1].price = 5.50;

        strcpy(obj[2].name, "Book3");
        obj[2].date = 30.30;
        obj[2].price = 6.50;

        f = fopen("C:\\temp.txt", "w");

        for (int i = 0; i < 3; i++)
			fwrite(&obj[i], sizeof(obj[i]), 1, f);

        fclose(f);
        delete []obj;

	obj = new Book[3];
        f = fopen("C:\\temp.txt", "r");

        for (int i = 0; i < 3; i++)
                {
                        fread(&obj[i], sizeof(obj[i]), 1, f);
                        cout << "name: " << obj[i].name << ", date: " << obj[i].date << ", price: " << obj[i].price << "\n";
                }

        fclose(f);
        delete []obj;

        cin.get();

	return 0;
}
profi вне форума Ответить с цитированием
Старый 28.01.2010, 13:53   #9
kniazik
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 10
По умолчанию

"Я знаю, что ничего не знаю" Сократ
"А многие не знают даже этого " - добавил он через минуту

Спасибо буду пробовать
kniazik вне форума Ответить с цитированием
Старый 28.01.2010, 15:25   #10
kniazik
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 10
По умолчанию

сКАЖИТЕ, что делает

эта строка

fwrite(&obj[i], sizeof(obj[i]), 1, f);
kniazik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа готова – пол дела, Главное защита от копирования!.. Игорь22 Общие вопросы Delphi 15 03.02.2015 14:47
Пол искусственного интеллекта?! CodeExpert Свободное общение 44 20.11.2009 12:45
Остановился в развитии, направьте в какую сторону идти дальше! iukash Свободное общение 43 02.09.2009 19:16
при запуске Internet Explorer внизу на пол-экрана выскакивает панель irenaspb Безопасность, Шифрование 3 09.11.2008 20:48
окно переместилось на главную страницу и теперь закрывает пол окна не убирается ВАСЕЛИСА Безопасность, Шифрование 3 27.09.2008 23:43