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


Автор: AndreyKS 30.5.2007, 23:44
Решал задачку:
Хранится информация про работников (имя, отдел, год, стаж, должностть, зарплата). Предусмотреть:
 добавление сотрудники
 получить список работников пенсионного возраста с указаниеем стажа
 получить среднюю зарплату работников

Использовал текстовый файл, что не удобно. Как из С++ использовать mysql? Запросы писать умею, сервер настроен, права есть.
Любой пример (подключение, передачу запроса, куда помещается результат)

На всякий случай вставлю код с текстовым файлом:

Код

#include <iostream>
#include <fstream>
#include <iomanip>
#define YEAR 2007
using namespace std;
struct Record{
    string Name;
    string Departament;
    int BirthYear;
    int Standing;
    string Place;
    int Salary;
};

class Table{
    Record myRecord;
    public:
        Table(char filename[]);
        void AddRecord(char filename[]);
        void GetRecords(char filename[]);
        void GetPensRecords(char filename[]);
        float Average(char filename[], string Departament, int field);
        //float averageSalary(char filename[], string Departament);
};
Table::Table(char filename[]){
    char c;
    string str;
    while(c!='x'){
        cout<<"Выберите действие: \n"
                <<"1) Ввести новую запись\n"
                <<"2) Выдать список работников пенсионного возраста у указанием стажа работы\n"
                <<"3) Получить средний стаж работников заданного отдела\n"
                <<"4) Получить среднюю зарплату работников заданного отдела\n"
                <<"5) Получить все записи\n"
                <<"x) Выход\n";
        cin>>c;
        switch(c){
            case '1': AddRecord(filename); break;
            case '2': GetPensRecords(filename); break;
            case '3':
                cout<<"Введите название отдела:  ";
                cin>>str;
                cout<<Average(filename, str, 4)<<endl;
                break;
            case '4':
                cout<<"Введите название отдела:  ";
                cin>>str;
                cout<<Average(filename, str, 6)<<endl;
                break;
            case '5': GetRecords(filename); break;
            case 'x':break;
            default: cout<<"Неправильный выбор. Повторите\n";
        }
    }

}
void Table::AddRecord(char filename[]){
    ofstream file(filename,ios::app);
    if(!file){ cerr << "\nError\n"; exit(1);}
    cout<<"Введите данные:\n";
    cout<<"Имя           "; cin>>myRecord.Name;            file<<myRecord.Name<<" ";
    cout<<"Отдел         "; cin>>myRecord.Departament;    file<<myRecord.Departament<<" ";
    cout<<"Год рождения  "; cin>>myRecord.BirthYear;    file<<myRecord.BirthYear<<" ";
    cout<<"Стаж          "; cin>>myRecord.Standing;        file<<myRecord.Standing<<" ";
    cout<<"Должность     "; cin>>myRecord.Place;        file<<myRecord.Place<<" ";
    cout<<"Зарплата      "; cin>>myRecord.Salary;        file<<myRecord.Salary<<endl;
    file.close();
}
void Table::GetRecords(char filename[]){
    ifstream file(filename);
    if(!file){ cerr << "\nError\n"; exit(1);}
    cout.setf(ios::left);
    while(file>>myRecord.Name>>myRecord.Departament>>myRecord.BirthYear>>myRecord.Standing>>myRecord.Place>>myRecord.Salary){
        //cout.width(20);
        cout<<setw(10)<<myRecord.Name
            <<setw(10)<<myRecord.Departament
            <<setw(7)<<myRecord.BirthYear
            <<setw(5)<<myRecord.Standing
            <<setw(10)<<myRecord.Place
            <<setw(6)<<myRecord.Salary<<endl;
    }
    file.close();
}
void Table::GetPensRecords(char filename[]){
    ifstream file(filename);
    if(!file){ cerr << "\nError\n"; exit(1);}
    cout.setf(ios::left);
    while(file>>myRecord.Name>>myRecord.Departament>>myRecord.BirthYear>>myRecord.Standing>>myRecord.Place>>myRecord.Salary)
        if((YEAR-myRecord.BirthYear)>=60)
            cout<<setw(10)<<myRecord.Name<<setw(5)<<myRecord.Standing<<endl;
    file.close();
}
float Table::Average(char filename[], string departament, int field){
    ifstream file(filename);
    if(!file){ cerr << "\nError\n"; exit(1);}
    int count=0, sum=0;
    while(file>>myRecord.Name>>myRecord.Departament>>myRecord.BirthYear>>myRecord.Standing>>myRecord.Place>>myRecord.Salary)    
        if (departament==myRecord.Departament){
            count++;
            switch(field){
                case 4: sum+=myRecord.Standing; break;
                case 6: sum+=myRecord.Salary; break;
            }
        }
    file.close();
    return (float)sum/count;
}

int main(int argc, char *argv[]){
    if(argc != 2){
        cerr << "Передайте аргумент - имя файла\n";
        return 1;
    }
    Table myTable(argv[1]);
}


Из чистого С++ (без борланда...)

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