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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Диаграмма из консольного приложения 
:(
    Опции темы
messulete
Дата 16.12.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
Нужно построить круговую диаграмму по данным хранящимся, в файле, 
т.е, БД хранящаяся в файле.
Оболочка, visual studio 2005, на си++ программирую но с графикой никогда не встречался, просьба подсказать какие методы или средства работы, сам нашел пока что GDI+, но не уверен, что это то, что нужно...
Заранее спасибо.
PM MAIL   Вверх
DigitSphinx
Дата 16.12.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

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



для этого простой GDI тоже подойдет, но в голову ничего не приходит кроме того как комбинировать регионы (эллипс и треугольник) с параметром “AND” 
почитай про 
CRgn 
и его методы:
Код

CombineRgn
CreateEllipticRgn
CreatePolygonRgn


Добавлено через 1 минуту и 57 секунд
есть бесплатные графические библиотеки, которые я думаю сделают все за тебя, 
но сам не пользуюсь так что подсказать не смогу.


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
zkv
Дата 16.12.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



messulete, что-то непонятно про тип приложения, ты в консоли рисовать хочешь? Псевдографикой что-ли?
Если нет, то какого типа приложение тебе нужно, WinAPI, MFC, или вообще Windows Forms?
PM MAIL   Вверх
messulete
Дата 16.12.2007, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(zkv @ 16.12.2007,  17:54)
messulete, что-то непонятно про тип приложения, ты в консоли рисовать хочешь? Псевдографикой что-ли?
Если нет, то какого типа приложение тебе нужно, WinAPI, MFC, или вообще Windows Forms?

просто есть обычная база данных написанная в консоли, сохраняет данные в файл, а вот как по этим данным рисовать круговую диаграмму не знаю, такое можно реализовать?
или вот это можно перести в WinApi?

Код

#include "stdafx.h"        
#include <iostream>
#include <fstream>
#include <string>


using namespace std;
//---------Объявление глобальных переменных--------//
int i = 0;
int u = 30;
//---------Класс "Футбольный клуб"---------------------------//
struct fc  
{
    char surname[14];    // фамилия футболиста
    char position[10];  // занимаемая позиция
    int     salary;        // зарплата
    int  gols;            // количество голов
    int  games;            // количество игр
};
//--------------Используемые функции----------------//
bool accept();
void displayData(fc *ed,int h,int x,int c,int v);
int  readData(fc *ed);
int  enterData(fc *ed);
int  delData();
void searchData(fc *ed,int count);
//--------------Главная функция---------------------//
int _tmain(int argc, _TCHAR* argv[])
{
    
    fc *ed=new fc[u];
    char c(0);
    for(;;) {
        do 
        {
            cout << "1. Enter data\n";
            cout << "2. Display data and Total statistics\n";
            cout << "3. Delete data\n";
            cout << "4. Search data\n";
            cout << "5. Exit\n";
            cout << "\nEnter a choice: ";
                cin >> c;
        } while(c<'1' || c>'5');
        switch(c)
        {
            case '1':
            enterData(ed);
            break;
            case '2':
            {
                int h = readData(ed);
                int kolGol(0),averageSalary(0),r(0),kolGames(0);
                for(int p=0;p<h;p++) {  kolGol+=ed[p].gols;   }
                for(int p=0;p<h;p++) {    averageSalary+=ed[p].salary;
                                        r++;                  }
                averageSalary=averageSalary/r;
                for(int p=0;p<h;p++) {    kolGames+=ed[p].games;}
                displayData(ed,h,averageSalary,kolGol,kolGames);
            }
            break;
            case '3':
                delData();
            break;
            case '4':
            {
                int h = readData(ed);
                searchData(ed,h);
            }
            case '5':
                exit(0);
        }

    }
    delete ed;
    return 0;
}
//--------------Добавление данных-------------------//
int enterData(fc *ed)
{
    bool f;
    ofstream fout("Football_Club",ios::out | ios::binary | ios::app);
        if(!fout) {
        cout << "Cannot open file.\n";
        return 1;
        }
    cout << "Enter surname futboler: ";
        cin >> ed[i].surname;
    cout << "Enter position: ";
        cin >> ed[i].position;
    cout << "Enter salary: ";
        cin >> ed[i].salary;
    cout << "Enter gols: ";
        cin >> ed[i].gols;
    cout << "Enter games: ";
        cin >> ed[i].games;
    cout << "Save('y'-yes,'n'-no)? :";
        f = accept();
    if (f==true)    fout.write((char *) &ed[i], sizeof(struct fc));

    fout.close();

    cout<<"Add record('y'-yes,'n'-no)? :";
        f = accept();

    if (f==true)    return enterData(ed);
    return 0;    
}

//--------------Вопрос-ответ------------------------//
bool accept() 
{
    char answer = 0;
    cin >> answer;
    if (answer=='y')return true;
    else return false;
}
//--------------Функция чтения данных из файла------//
int readData(fc *ed)
{
    ifstream fin("Football_Club", ios::in | ios::binary);//открытие файла для чтения
    if(!fin)//проверка на ошибку открытия
    {
        cout << "Cannot open file.\n";
        return 1;
    }

    int j = 0;
    while(!fin.eof())//чтение структуры из файла, пока не достигнет конца файла
    {
        fin.read((char *) &ed[j], sizeof(struct fc));
        j++;
    }
    j--;
    int y=j;
    fin.close();//закрытие файла
    return y;//функция возвращает аргумент y(общее количество игрков)
}
//--------------Вывод данных на экран---------------//
void displayData(fc *ed,int h,int x,int c,int v)
{
    //Вывод заголовков
    cout<<char(201); //рисование :)
    for (int i=0;i<=8;i++)    cout << char(205);
        cout << char(209);
    for (int i=0;i<=9;i++)    cout << char(205);
        cout << char(209);
    for (int i=0;i<=7;i++)    cout << char(205);    
        cout << char(209);
    for (int i=0;i<=5;i++)    cout << char(205);
        cout << char(209);
    for (int i=0;i<=6;i++)    cout << char(205);
        cout << char(187)<<endl;
    cout << char(186)<<" Surname "<<char(179)<<" Position "<<char(179)<<" Salary "
         << char(179)<<" Gols " << char(179)<< " Games " << char(186)<<endl;
    cout << char(199);
    for (int i=0;i<=8;i++)    cout << char(196);
        cout << char(197);
    for (int i=0;i<=9;i++)    cout << char(196);
        cout << char(197);
    for (int i=0;i<=7;i++)    cout << char(196);
        cout << char(197);
    for (int i=0;i<=5;i++)    cout << char(196);
        cout << char(197);
    for (int i=0;i<=6;i++)    cout << char(196);
        cout << char(182)<<endl;
    //Вывод данных
    for (int j=0;j<h;j++)
    {
        cout << char(186);    
        cout.setf(ios::left);// установка флага выравнивание по левому краю
        if ((h-1)==j) //Достигнута ли последняя запись
        {
            cout.width(9);cout<<ed[j].surname<<char(179);//cout.width-ширина поля
            cout.width(10);cout<<ed[j].position<<char(179);
            cout.width(8);cout<<ed[j].salary<<char(179);
            cout.width(6);cout<<ed[j].gols<<char(179);
            cout.width(7);cout<<ed[j].games<<char(186)<<endl;
                cout<<char(200);
            for (int i=0;i<=8;i++)    cout << char(205);
                cout<<char(207);
            for (int i=0;i<=9;i++)    cout << char(205);
                cout<<char(207);
            for (int i=0;i<=7;i++)    cout << char(205);
                cout<<char(207);
            for (int i=0;i<=5;i++)    cout << char(205);
                cout<<char(207);
            for (int i=0;i<=6;i++)    cout << char(205);
                cout<<char(188)<<endl;
        break;//выход из цикла
        }
    cout.width(9);cout<<ed[j].surname<<char(179);
    cout.width(10);cout<<ed[j].position<<char(179);
    cout.width(8);cout<<ed[j].salary<<char(179);
    cout.width(6);cout<<ed[j].gols<<char(179);
    cout.width(7);cout<<ed[j].games<<char(186)<<endl;
        cout << char(199);
    for (int i=0;i<=8;i++)    cout << char(196);
        cout<<char(197);
    for (int i=0;i<=9;i++)    cout << char(196);
        cout<<char(197);
    for (int i=0;i<=7;i++)    cout << char(196);
        cout<<char(197);
    for (int i=0;i<=5;i++)    cout << char(196);
        cout<<char(197);
    for (int i=0;i<=6;i++)    cout << char(196);
        cout<<char(182)<<endl;
    }
    for (int i=0;i<=45;i++)    cout<<char(205);
        cout << endl;
    cout.width(22); cout<< "  Total ";//вывод общих данных по базе
    cout.width(9);  cout<< x;
    cout.width(7);  cout<< c;
        cout<< v <<endl;
    for (int i=0;i<=45;i++)    cout<<char(205);
        cout << endl;
}
//--------------удаление данных из файла------------//
int delData()
{
    ofstream fout("Football_Club", ios::binary);//открытие файла со стиранием всего что в нем есть
        if(!fout){
        cout << "Cannot open file.\n";
        return 1;
        }
    return 0;
}
//--------------Поиск по заданному критерию---------//
void searchData(fc *ed,int count)
{
    int f=0;
    int choice;
    cout<<"find: surname-1   position-2   salary-3   gols-4   games-5 "<<endl;
    cout<<"Enter choice : ";
    cin >> choice;
    switch (choice)//функция выборки
    {
        case 1:
            char name[14];
            cout<<"Enter surname :";
                cin>>name;
            for(i=0; i<count; i++)
            {
                if(strcmp(ed[i].surname,name)==0)//сравнение
                {
                cout<<"Find!!!\n"<<"Surname\t"<<"Position\t"<<"saledy\t"<<"gols\t"<<"games\n"
                <<ed[i].surname<<"\t"<<ed[i].position<<"\t\t"<<ed[i].salary<<"\t"
                <<ed[i].gols<<"\t"<<ed[i].games<<endl<<endl;
                f++;
                }    
            };
    break;    
        case 2:
            char prod[10];
            cout<<"Enter position :";
                cin>>prod;
            for(i=0; i<count; i++)
            {
                if(strcmp(ed[i].position,prod)==0)
                {
                cout<<"Find!!\n"<<"Surname\t"<<"position\t"<<"saledy\t"<<"gols\t"<<"games\n"
                <<ed[i].surname<<"\t"<<ed[i].position<<"\t\t"<<ed[i].salary<<"\t"
                <<ed[i].gols<<"\t"<<ed[i].games<<endl<<endl;
                f++;
                }
            };
    break;
        case 3:
            int salary;
            cout<<"Enter salary :";
                cin>>salary;
            for(i=0; i<count; i++)
            {
                if(ed[i].salary==salary)
                {
                cout<<"Find!!\n"<<"Surame\t"<<"position\t"<<"salary\t"<<"gols\t"
                    <<"games\n"<<ed[i].surname<<"\t"<<ed[i].position<<"\t\t"
                    <<ed[i].salary<<"\t"<<ed[i].gols<<"\t"<<ed[i].games<<endl<<endl;
                f++;
            }
            };
    break;
        case 4:
            int gols;
            cout<<"Enter gols :";
                cin>>gols;
            for(i=0; i<count; i++)
            {
                if(ed[i].gols==gols)
                {
                    cout<<"Find!!\n"<<"Surname\t"<<"position\t"<<"salary\t"<<"gols\t"
                        <<"games\n"<<ed[i].surname<<"\t"<<ed[i].position<<"\t\t"
                        <<ed[i].salary<<"\t"<<ed[i].gols<<"\t"<<ed[i].games<<endl<<endl;
                    f++;
                }
            };
    break;
        case 5:
            int games;
            cout<<"Enter games in :";
                cin>>games;
            for(i=0; i<count; i++)
            {
                if(ed[i].games==games)    
                {
                cout<<"Find!!\n"<<"Surame\t"<<"position\t"<<"saledy\t"<<"gols\t"<<"games\n"
                    <<ed[i].surname<<"\t"<<ed[i].position<<"\t\t"
                    <<ed[i].salary<<"\t"<<ed[i].gols<<"\t"<<ed[i].games<<endl<<endl;
                f++;
                }
            };
    default:;
    break;
    }
    if (0==f) cout << "Not found"<<endl;    
}





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



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



messulete, думаю для начала тебе нужно спросить у препода, чем тебе можно пользоваться. В консоли круговую диаграмму не нарисуешь smile 
PM MAIL   Вверх
messulete
Дата 16.12.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



можно пользоваться всеми средствами visual studio...

PM MAIL   Вверх
zkv
Дата 16.12.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(messulete @  16.12.2007,  18:39 Найти цитируемый пост)
можно пользоваться всеми средствами visual studio...

хорошо. 
А в написании приложений какого типа из вышеперечисленных у тебя больше опыта?
PM MAIL   Вверх
messulete
Дата 16.12.2007, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



в консоли пока что работал.
мне узнать только с помощью чего это можно реализовать, некоторые методы, а дальше и погуглить можно...


PM MAIL   Вверх
zkv
Дата 16.12.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



messulete, ок.
Пусть будет MFC.
Вот пример попроще, вот посложнее

После конвертирования проектов в 2005 по паре ошибок вылезет, если сам не справишься с исправлением - спрашивай.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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