Форум программистов, компьютерный форум CyberForum.ru

Определить структурированный тип, набор функций (в виде меню) для работы с массивом структур - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ зависает программа http://www.cyberforum.ru/cpp-beginners/thread223294.html
требуется всего лишь нарисовать график функции, но программа рисует только оси системы координат, после чего зависает, из-за чего такое может быть? //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <math.h> #include <Math.hpp>
C++ удаление пробелов между словами и буквами доброго времени суток, не могли бы вы мне помочь в создании программы которая удаляет удвоенные согласные в любом предложении, но чтоб удаляла а не заменяла на пробелк примеру чтоб было слово "удвоенное" вот так "удвоеая" а не "удвое ая", вот пример программы которую я показал учителю он утверждает что эта программа не удаляет а просто не видит эти символы: #include <iostream> #include... http://www.cyberforum.ru/cpp-beginners/thread223278.html
C++ Работа с текстовым массивом
Помогите с одной темой: в текстовом массиве на С необходимо произвести замену исходного слова на другое столько раз сколько раз сколько исходное слово встречается в первой строке данного текста
C++ Выбрать идущие подряд тройки цифр, упорядоченных по возрастанию. ( Не используя массивы )
Здравствуйте ! Помогите решить задание : Выбрать идущие подряд тройки цифр, упорядоченных по возрастанию. (Разрешаются только библиотеки iostream или stdio.h и не используя при этом массивы !!!) Спасибо.
C++ Бинарное дерево http://www.cyberforum.ru/cpp-beginners/thread223267.html
Здравствуйте.Прошу помощи.Никак не могу разобраться в задании.Нужно сделать бинарное дерево и с помощью дерева привести выражение к бесскобочной логике: (a*b+c)/(a-(d+a)).Что это значит?
C++ Only строки* Помогите пожалуйста с написанием программ через библиотеку <stdio.h> 1.Ввести строку и слово. Определить и вывести, сколько раз встречаются в строке буквы, перечисленные в слове. 2.Ввести строку и два слова. Вывести строку, в которой все вхождения первого слова заменены на второе слово. подробнее

Показать сообщение отдельно
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
10.01.2011, 19:30  [ТС]     Определить структурированный тип, набор функций (в виде меню) для работы с массивом структур
book.cpp
Код
#include "stdafx.h"
#include<windows.h>
#include "BOOK.h"
#include <string.h>
#include <iostream>
 
#define RED FOREGROUND_RED|FOREGROUND_INTENSITY
#define GREEN FOREGROUND_GREEN|FOREGROUND_INTENSITY
using namespace std;
 
void PrintBook(BOOK* book)
{
        printf("\tАвтор: %s.\n\tНазвание: %s.\n\tКатегория: %s.\n\tпроисхождение: %G.\n\tналичие книги в данный момент: %d.\n", 
                book->author,book->title, book->category,book->origin,book->presence);
}
 
void InitBook(BOOK* book)
{
        const char* category[]={"специальная литература","хобби","домашнее хозяйство","беллетристика"};
        printf("Введите автора: ");
        scanf("%31s", book->author);
        fflush(stdin);
        printf("Введите название: ");
        scanf("%31s", book->title);
        fflush(stdin);
        printf("Введите категорию: \nспециальная литература(1),\nхобби(2),\nдомашнее хозяйство(3),\nбеллетристика(4)\n");
        int n;
        scanf("%d",&n);
        if(n>0&&n<5)
                strcpy(book->category,category[n-1]);
        else
        {
                printf("Вы ввели неверное значение. Категория не выбрана\n");
                strcpy(book->category,category[3]);
        }
        fflush(stdin);
        printf("Введите происхождение: ");
		printf("Происхождение: \nпокупка(1),\nкража(2),\nподарок(3)\n");
		float origin;
        scanf("%G", &origin);
        book->origin=origin;
        fflush(stdin);



        printf("Наличие книги: ");
		printf("Наличие: Есть в данный момент(1),Нет в данный момент(2)\n");
		float presence;
        scanf("%d", &presence);

        if(presence<0&&presence>2)
        {
                printf("Вы сделали неправильный выбор. Продолжение не возможно!\n");
                
        }
        book->presence=presence;
        fflush(stdin);





 
}
 
void menu(int&enter)
{
        HANDLE hConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);//для изменения цвета
        SetConsoleTextAttribute(hConsoleHandle, GREEN);
        cout<<"\nВыберите действие:\n"
                <<"(1)Распечатать содержимое картотеки.\n"
                <<"(2)Добавить книгу в картотеку.\n"
                <<"(3)Удалить книгу (книги) из картотеки.\n"
                <<"(4)Записать текущее содержимое картотеки в файл.\n"
                <<"(5)Считать из файла содержимое в картотеку.\n"
                <<"(6)Упорядочить книги в картотеке.\n"
                <<"(0)Выход из программы."
                <<endl;
        cin>>enter;
        SetConsoleTextAttribute(hConsoleHandle, RED);
        if(enter<0||enter>6)
                cout<<"Вы ввели неправильное значение."<<endl;
        cin.sync();             //для того,чтобы цикл
        cin.clear();    //не бегал по кругу при ошибочном вводе
        
}
 
void ExitProg(records& r,bool &flag)
{
        flag=0;         //нет элементов
        delete [] r.pBook;
        r.pBook=0;
        r.size=0;
}
 
void PrintRecord(records& r,bool& flag)
{
        if(!flag)       //если массив пуст
                cout<<"Нет книг в картотеке."<<endl;
        else
        {
                for(int i=0;i<r.size;i++)
                {
                        cout<<i+1<<"ая книга:"<<endl;
                        PrintBook(&r.pBook[i]);
                }
        }
}
 
void AddBook(records& r,bool& flag)
{
        if(!flag)       //если это первое добавление
        {
                InitBook(r.pBook);
                flag=1; //первое добавление уже было
        }
        else    //если книги уже есть
        {
                BOOK * tmp=new BOOK[r.size+1];  //выделили нужное кол-во памяти
                memcpy(tmp,r.pBook,r.size*sizeof(BOOK));        //переписали содержимое
                delete[] r.pBook;       //очистили уже ненужную память
                r.pBook=tmp;    //перенаправили указатель
                tmp=0;
                InitBook(&r.pBook[r.size]); //отправили адрес созданного кусочка на инициализацию 
                r.size++;       //увеличили кол-во книг
        }
}
 
void ReadFile(records& r,bool& flag)
{
        FILE *f = fopen("record.txt", "r");
        if(f)
        {
                int size=0;
                fscanf(f,"size=%d ", &size);
                records tmp = {new BOOK[size],size};
                for (int i=0;i<size;i++) 
                        {
                                fscanf(f,"Автор: %s Название: %s Категория: %s Происхождение: %G Наличие: %d\n"
                                        ,tmp.pBook[i].author
                                        ,tmp.pBook[i].title
                                        ,tmp.pBook[i].category
                                        ,tmp.pBook[i].origin
                                        ,tmp.pBook[i].presence);
                        }
                delete[] r.pBook;
                r=tmp;
                if(size)flag=1;
        }
        else
                cout<<"Невозможно открыть файл."<<endl;
        fclose(f);
}
 
void WriteFile(records& r,bool& flag)
{
        if(!flag)       //если не было первого добавления
                cout<<"Нет книг в картотеке."<<endl;
        else
        {
                FILE *f = fopen("record.txt","w");
                if(f)
                {                       
                        fprintf(f,"size=%d\n",r.size);
                        for (int i=0;i<r.size;i++) 
                        {
                                BOOK* book = &r.pBook[i];
                                fprintf(f,
                                        "Автор: %s Название: %s Категория: %s Происхождение: %G Наличие: %d\n",
                                        book->author,book->title, book->category,book->origin,book->presence
                                        );
                        }
                        cout<<"Картотека успешно переписана в файл record.txt"<<endl;
                }
                else 
                        cout<<"Невозможно открыть файл"<<endl;
                fclose(f);
        }
}
 
void DelBook(records& r,bool& flag)
{
        if(!flag)       //если нет книг
                cout<<"Нет книг в картотеке."<<endl;
        else            //если книги есть
        {
                if(r.size==1&&flag==1) //если в картотеке только 1 книга
                {
                        flag=0;
                        cout<<"1ая книга успешно удалена."<<endl;
                }
                else    //если книг больше 1
                {
                        int  enter=0;
                        while(enter<1||enter>r.size+1)  //пока не введено правильного номера
                        {
                                cout<<"Введите номер книги , которую хотите удалить"<<endl;
                                cin>>enter;
                                if(enter<1||enter>r.size+1)     //если введен неправильный номер
                                {
                                        cout<<"Вы ввели неправильное значение."<<endl;
                                        cin.sync();             //для того,чтобы цикл
                                        cin.clear();    //не бегал по кругу при ошибочном вводе
                                }
                                else  
                                {
                                        BOOK * tmp=new BOOK[r.size-1];  //выделили нужное кол-во памяти
                                        for(int i=0,j=0;j<r.size-1;i++,j++)     //переписали содержимое
                                        {
                                                if(i+1==enter)i++;
                                                tmp[j]=r.pBook[i];
                                        }
                                        delete[] r.pBook;       //очистили уже ненужную память
                                        r.pBook=tmp;    //перенаправили указатель
                                        tmp=0;
                                        cout<<enter<<"ая книга успешно удалена."<<endl;
                                        --r.size;
                                }
                        }
                }
        }
}
 
void SortBook(records& r,bool& flag)
{
        if(!flag)
                cout<<"Нет книг в картотеке."<<endl;
        else if(r.size==1)
                cout<<"В картотеке только 1 книга!"<<endl;
        else
        {
                cout<<"По какому полю отортировать книги?"<<endl;
                cout<<"(1)По автору.\n(2)По названию.\n(3)По происхождению.\n(4)По наличию."<<endl;
                int enter=0;
                while(enter<1||enter>4)
                {
                        cin>>enter;
                        if(enter<1||enter>4)
                        {
                                cout<<"Вы ввели неправильное значение.\nПовторите ввод."<<endl;
                                cin.sync();
                                cin.clear();
                        }
                }
                switch(enter)
                {
                case 1:
                        Sort(r,SwapBook,CmpAuthor);break;
                case 2:
                        Sort(r,SwapBook,CmpTitle);break;
                case 3:
                        Sort(r,SwapBook,CmpPresence);break;
                case 4:
                        Sort(r,SwapBook,CmpOrigin);break;
                }
        }
}
 
void Sort(records& r, void (*Swap)(BOOK*, BOOK*), int (*Compare)(BOOK*, BOOK*))
{
        for(int i=0; i<r.size; i++)
                for(int j=r.size-1; j>=i; j--)
                {
                        BOOK* pCurrent = &r.pBook[i];
                        BOOK* pPrevious =&r.pBook[j];
                        if((*Compare)( pPrevious, pCurrent ) > 0)//требуется переставить
                                (*Swap)( pPrevious, pCurrent );
                }
}
 
void SwapBook(BOOK* b1, BOOK* b2)
{
        BOOK tmp=*b1;
        *b1=*b2;
        *b2=tmp;
}
 


 
int CmpAuthor(BOOK* b1, BOOK* b2)
{
        return strcmp(b1->author,b2->author);
}

 


 int CmpPresence(BOOK* b1, BOOK* b2)
{
        int nResult;
        float tmp1=b1->presence;
        float tmp2=b2->presence;
        (tmp1-tmp2<0)?nResult=-1:(tmp1-tmp2>0)?nResult=1:nResult=0;
        return nResult;
 }


int CmpOrigin(BOOK* b1, BOOK* b2)
{
        int nResult;
        float tmp1=b1->origin;
        float tmp2=b2->origin;
        (tmp1-tmp2<0)?nResult=-1:(tmp1-tmp2>0)?nResult=1:nResult=0;
        return nResult;


}
 
int CmpTitle(BOOK* b1, BOOK* b2)
{
        return strcmp(b1->title,b2->title);
}


book.h
Код
#pragma once
#define SIZE 32
 
struct BOOK
{
        char author[SIZE];
        char title[SIZE];
        char category[SIZE];
		float presence;
        float origin;
        
};
 
struct records
{
        BOOK* pBook;            //указатель на массив книг
        int size;       //количество книг
};
 
void PrintBook(BOOK* book);
void InitBook(BOOK* book);
void menu(int& enter);
void ExitProg(records& r,bool& flag);
void PrintRecord(records& r,bool& flag);
void ReadFile(records& r,bool& flag);
void WriteFile(records& r,bool& flag);
void DelBook(records& r,bool& flag);
void AddBook(records& r,bool& flag);
 
void SortBook(records& r,bool& flag);
void Sort(records& r, void (*Swap)(BOOK*,BOOK*), int (*Compare)(BOOK*, BOOK*));
void SwapBook(BOOK* b1, BOOK* b2);
int CmpOrigin(BOOK* b1, BOOK* b2);
int CmpPresence(BOOK* b1, BOOK* b2);
int CmpAuthor(BOOK* b1, BOOK* b2);
int CmpTitle(BOOK* b1, BOOK* b2);

main.cpp
Код
#include "stdafx.h"

#include <cstdio>
#include <iostream>
 
#include "BOOK.h"
 
#define   stop __asm nop        
 
 
using namespace std;
 
void main()
{
        setlocale( LC_ALL,"Russian" );
 
        int enter=-1;
        bool flagExit=true;
        bool flagFirst=false;//нет элементов
        cout<<"Добро пожаловать в картотеку."<<endl;
        records rec={new BOOK[1],1};
        do
        {
                menu(enter);
                switch(enter)
                {
                case 0:
                        ExitProg(rec,flagExit);break;
                case 1:
                        PrintRecord(rec,flagFirst);break;
                case 6:
                        SortBook(rec,flagFirst);break;
                case 5:
                        ReadFile(rec,flagFirst);break;
                case 4:
                        WriteFile(rec,flagFirst);break;
                case 3:
                        DelBook(rec,flagFirst);break;
                case 2:
                        AddBook(rec,flagFirst);break;
                }
                if(enter)enter=-1;
        } while(flagExit);
}
// TODO. Установите ссылки на любые требующиеся дополнительные заголовки в файле STDAFX.H
// , а не в данном файле

это последний который работал у меня но выдавал 11 предупреждений.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru