ПРИЛОЖЕНИЕ
(обязательное)
#include "stdafx.h"
#include <sqlite3.h>
#include <string>
#include <iomanip>
#include <stdlib.h>
#include <ctime>
#include <iostream>
#include <conio.h>
#include <math.h>
#include <windows.h>
using namespace std;
const char* SQL = "CREATE TABLE IF NOT EXISTS[players] ([id] INT(3) NOT NULL ON CONFLICT ROLLBACK, [Player name] TEXT(30), [Date of birth] DATE(10), [Number of matches] INT(5), [Number of goals] INT(5), [Number of assists] INT(5), [Number of yellow cards] INT(5), [Number of red cards] INT(5)); CREATE TABLE IF NOT EXISTS[users]([id] INT(3) NOT NULL ON CONFLICT ROLLBACK, [User name] TEXT(16), [User password] TEXT(16), [User access] INT(2)); ";
const char* SQL_Select_Table_Players = "SELECT * FROM players";
const char* SQL_Select_Table_Users = "SELECT * FROM users";
const char* SQL_Add_Table_Players = "INSERT INTO players([id],[Player name],[Date of birth],[Number of matches],[Number of goals],[Number of assists],[Number of yellow cards],[Number of red cards]) values('";
const char* SQL_Add_Table_Users = "INSERT INTO users([id],[User name],[User password],[User access]) values('";
const char* SQL_Delete_Table_Players = "DELETE FROM players WHERE id = '";
const char* SQL_Delete_Table_Users = "DELETE FROM users WHERE id = '";
const char* SQL_Find_PN_Table_Players = "SELECT * FROM players WHERE [Player name] = '";
const char* SQL_Find_NoM_Table_Players = "SELECT * FROM players WHERE [Number of matches] = '";
const char* SQL_Find_RC_Table_Players = "SELECT * FROM players WHERE [Number of red cards] = '";
const char* SQL_Sort_PN_Table_Players = "SELECT * FROM players ORDER BY [Player name]";
const char* SQL_Sort_DoB_Table_Players = "SELECT * FROM players ORDER BY [Date of birth]";
const char* SQL_Sort_NoG_Table_Players = "SELECT * FROM players ORDER BY [Number of goals]";
const char* SQL_User_Choice = "SELECT * FROM users WHERE [User access] = '1'";
const char* SQL_Admin_Choice = "SELECT * FROM users WHERE [User access] = '0'";
const char* SQL_Select_BestPlayers = "SELECT * FROM players ORDER BY [Number of goals] + [Number of assists] DESC";
const char* SQL_Select_BadPlayers = "SELECT * FROM players WHERE [Number of red cards] <> '0'";
sqlite3 *db = 0;
char *err = 0;
void connectDB();
void showTablePlayers();
void showTableUsers();
void addTablePlayers();
void addTableUsers();
void deleteTablePlayers();
void deleteTableUsers();
void findTablePlayers();
void sortTablePlayers();
void showBestPlayers();
void showBadPlayers();
void authorization();
void outputTablePlayers(char *s);
void outputTableUsers(char *s);
int customMenu();
|
int adminMenu();
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
authorization();
}
voidoutputTablePlayers(char *s) //получениеданныхизтаблицыбазыданныхиоформлениевтабличномвиденаконсоле
{
char **a = NULL;
int rows = 0, colls = 0, i;
if (sqlite3_get_table(db, s, &a, &rows, &colls, &err))
{
fprintf(stderr, "Ошибка SQL: %s\n", err);
sqlite3_free(err);
}
cout << "____________________________________________________________________________________________________________" << endl;
cout << "|" << " id"
<< "|" << setw(30) << " Ф.И.О. игрока"
<< "|" << " Дата рождения"
<< "|" << " Количество"
<< "|" << setw(8) << " Число"
<< "|" << " Количество"
<< "|" << " Количество"
<< "|" << " Количество" << "|";
cout << endl;
cout << "|" << setw(4)
<< "|" << setw(31)
<< "|" << setw(15)
<< "|" << setw(11) << " сыгранных"
<< "|" << setw(8) << " забитых"
<< "|" << setw(11) << " голевых"
<< "|" << setw(11) << " желтых"
<< "|" << setw(11) << " красных" << "|";
cout << endl;
cout << "|" << setw(4)
<< "|" << setw(31)
<< "|" << setw(15)
<< "|" << setw(11) << " матчей"
<< "|" << setw(8) << " мячей"
<< "|" << setw(11) << " передач"
<< "|" << setw(11) << " карточек"
<< "|" << setw(11) << " карточек" << "|";
cout << endl;
for (i = 1; i < rows + 1; i++)
{
cout << "____________________________________________________________________________________________________________" << endl;
cout << "|" << setw(3) << a[(i * colls) + 0];
cout << "|" << setw(30) << a[(i * colls) + 1];
cout << "|" << setw(14) << a[(i * colls) + 2];
|
cout << "|" << setw(11) << a[(i * colls) + 3];
cout << "|" << setw(8) << a[(i * colls) + 4];
cout << "|" << setw(11) << a[(i * colls) + 5];
cout << "|" << setw(11) << a[(i * colls) + 6];
cout << "|" << setw(11) << a[(i * colls) + 7] << "|";
cout << endl;
}
cout << "____________________________________________________________________________________________________________" << endl;
}
void outputTableUsers(char *s)//получение данных из таблицы базы данных и оформление в табличном виде на консоле
{
char **a = NULL;
int rows = 0, colls = 0, i;
if (sqlite3_get_table(db, s, &a, &rows, &colls, &err))
{
fprintf(stderr, "Ошибка SQL: %s\n", err);
sqlite3_free(err);
}
cout << "____________________________________________________________" << endl;
cout << "|" << setw(3) << " id" << "|" << setw(17) << " Имяпользователя" << "|" << setw(15) << " Пароль" << "|" << setw(20) << " Правапользователя" << "|";
cout << endl;
for (i = 1; i < rows + 1; i++)
{
cout << "____________________________________________________________" << endl;
cout << "|" << setw(3) << a[(i * colls) + 0];
cout << "|" << setw(17) << a[(i * colls) + 1];
cout << "|" << setw(15) << a[(i * colls) + 2];
cout << "|" << setw(20) << a[(i * colls) + 3] << "|";
cout << endl;
}
cout << "____________________________________________________________" << endl;
}
void connectDB() //открытиебазыданных
{
// открываемсоединение
if (sqlite3_open("football.db3", &db))
fprintf(stderr, "Ошибкаоткрытия/созданияБД: %s\n", sqlite3_errmsg(db));
// выполняем SQL
else if (sqlite3_exec(db, SQL, 0, 0, &err))
{
fprintf(stderr, "Ошибка SQL: %s\n", err);
sqlite3_free(err);
}
}
void showTablePlayers() //выводтаблицы
{
char s[100] = "";
strcat(s, SQL_Select_Table_Players);
outputTablePlayers(s);
}
void showTableUsers() //выводтаблицы
{
char s[100] = "";
|
strcat(s, SQL_Select_Table_Users);
outputTableUsers(s);
}
void showBestPlayers()
{
char s[100] = "";
strcat(s, SQL_Select_BestPlayers);
outputTablePlayers(s);
}
void showBadPlayers()
{
char s[100] = "";
strcat(s, SQL_Select_BadPlayers);
outputTablePlayers(s);
}
int customMenu() // Менюпользователя
{
int i;
i = 0;
while (true)
{
while (true)
{
connectDB();
cout << "\n Меню:\n" << endl;
cout << "1. Отобразить таблицу футболистов" << endl;
cout << "2. Добавить запись в таблицу футболистов" << endl;
cout << "3. Удалить запись из таблицы футболистов" << endl;
cout << "4. Найти запись из таблицы футболистов" << endl;
cout << "5. Сортировка записей футболистов" << endl;
cout << "6. Вывод лучших футболистов" << endl;
cout << "7. Вывод футболистов имеющих красную карточку" << endl;
cout << "\n0. Выход\n" << endl;
std::cin >> i; // Ввод выбранного пункта меню
if (!std::cin)
{
std::cout << "\nНекорректный ввод данных" << endl;
cin.clear();
while (cin.get()!= '\n');
_getch(); // Ожидание нажатия любой клавиши
system("cls"); // Очисткаэкрана
}
else break;
}
switch (i)
{
case 1: showTablePlayers(); break;
case 2: addTablePlayers(); break;
case 3: deleteTablePlayers(); break;
case 4: findTablePlayers(); break;
case 5: sortTablePlayers(); break;
case 6: showBestPlayers(); break;
case 7: showBadPlayers(); break;
case 0: exit(1);
default: puts("Выберитеверныйпунктменю");
}
puts("Нажмите любую клавишу");
_getch(); // Ожидание нажатия любой клавиши
system("cls"); // Очисткаэкрана
sqlite3_close(db);
}
}
int adminMenu() // Менюадминистратора
{
int i;
i = 0;
while (true)
{
while (true)
{
connectDB();
cout << "\n Меню:\n" << endl;
cout << "1. Отобразить таблицу футболистов" << endl;
cout << "2. Отобразить таблицу пользователей" << endl;
cout << "3. Добавить запись в таблицу футболистов" << endl;
cout << "4. Добавить запись в таблицу пользователей" << endl;
cout << "5. Удалить запись из таблицы футболистов" << endl;
cout << "6. Удалить запись из таблицы пользователей" << endl;
cout << "7. Найти запись из таблицы футболистов" << endl;
cout << "8. Сортировка записей футболистов" << endl;
cout << "9. Вывод лучших футболистов" << endl;
cout << "10. Вывод футболистов имеющих красную карточку" << endl;
cout << "\n0. Выход\n" << endl;
std::cin >> i; // Ввод выбранного пункта меню
if (!std::cin)
{
std::cout << "\nНекорректный ввод данных" << endl;
cin.clear();
while (cin.get()!= '\n');
_getch(); // Ожидание нажатия любой клавиши
system("cls"); // Очисткаэкрана
}
else break;
}
switch (i)
{
case 1: showTablePlayers(); break;
case 2: showTableUsers(); break;
case 3: addTablePlayers(); break;
case 4: addTableUsers(); break;
case 5: deleteTablePlayers(); break;
case 6: deleteTableUsers(); break;
case 7: findTablePlayers(); break;
case 8: sortTablePlayers(); break;
case 9: showBestPlayers(); break;
case 10: showBadPlayers(); break;
case 0: exit(1);
default: puts("Выберите верный пункт меню ");
}
puts("Нажмите любую клавишу");
_getch(); // Ожидание нажатия любой клавиши
system("cls"); // Очисткаэкрана
sqlite3_close(db);
}
}
void addTablePlayers() //внесение записей в таблицу
{
char s[250] = "";
char id[100];
char Name[100];
char Date[100];
char Matches[100];
char Goals[100];
char Assists[100];
char YCards[100];
char RCards[100];
cout << "Введите id: ";
cin.ignore();
cin.getline(id, 100);
cout << "ВведитеФИОигрока: ";
cin.getline(Name, 100);
cout << "Введите дату рождаения ребенка формата 2001-01-01: ";
cin.getline(Date, 100);
cout << "Введите количество сыгранных матчей: ";
cin.getline(Matches, 100);
cout << "Введите число забитых мячей: ";
cin.getline(Goals, 100);
cout << "Введите количество голевых передач: ";
cin.getline(Assists, 100);
cout << "Введите количество желтых карточек: ";
cin.getline(YCards, 100);
cout << "Введите количество красных карточек: ";
cin.getline(RCards, 100);
cout << endl;
strcat(s, SQL_Add_Table_Players);
strcat(s, id);
strcat(s, "','");
strcat(s, Name);
strcat(s, "','");
strcat(s, Date);
strcat(s, "','");
strcat(s, Matches);
strcat(s, "','");
strcat(s, Goals);
strcat(s, "','");
strcat(s, Assists);
strcat(s, "','");
strcat(s, YCards);
strcat(s, "','");
strcat(s, RCards);
strcat(s, "');");
if (sqlite3_exec(db, s, 0, 0, &err))
{
fprintf(stderr, "Ошибка SQL: %s\n", err);
sqlite3_free(err);
}
}
void addTableUsers() //добавлениезаписейвтаблицубазыданных
{
char s[100] = "";
char id[100];
char Name[100];
char Password[100];
char Access[100];
cout << "Введите id пользователя: ";
cin.ignore();
cin.getline(id, 100);
cout << "Введите имя пользователя: ";
cin.getline(Name, 100);
cout << "Введитепароль: ";
cin.getline(Password, 100);
cout << "Введите права пользователя: права администратора - 0, права пользователя - 1: " << endl;
cout << "Администратор - 0: " << endl;
cout << "Пользователь - 1: " << endl;
cin.getline(Access, 100);
cout << endl;
strcat(s, SQL_Add_Table_Users);
strcat(s, id);
strcat(s, "','");
strcat(s, Name);
strcat(s, "','");
strcat(s, Password);
strcat(s, "','");
strcat(s, Access);
strcat(s, "');");
if (sqlite3_exec(db, s, 0, 0, &err))
{
fprintf(stderr, "Ошибка SQL: %s\n", err);
sqlite3_free(err);
}
}
void deleteTablePlayers() //удалениезаписейизтаблицы
{
char s[100] = "";
char id[100];
cout << "Введите id записи, которую нужно удалить ";
cin >> id;
strcat(s, SQL_Delete_Table_Players);
strcat(s, id);
strcat(s, "';");
if (sqlite3_exec(db, s, 0, 0, &err))
{
fprintf(stderr, "Ошибка SQL: %s\n", err);
sqlite3_free(err);
}
}
void deleteTableUsers() //удалениезаписейизтаблицы
{
char s[100] = "";
char id[100];
cout << "Введите id записи, которую нужно удалить ";
cin >> id;
strcat(s, SQL_Delete_Table_Users);
strcat(s, id);
strcat(s, "';");
if (sqlite3_exec(db, s, 0, 0, &err))
{
fprintf(stderr, "Ошибка SQL: %s\n", err);
sqlite3_free(err);
}
}
void findTablePlayers() //поискзаписейвтаблице
{
char s[250] = "";
char Name[100];
char Matches[100];
char RCards[100];
int type;
char **a = NULL;
int rows = 0, colls = 0;
while (true)
{
cout << "Введите тип поиска: " << endl;
cout << "1 - ФИО игрока: " << endl;
cout << "2 - Количество сыгранных матчей: " << endl;
cout << "3 - Количество красных карточек: " << endl;
std::cin >> type;
if (type == 1 || type == 2 || type == 3)
{
if (type == 1)
{
cout << "Введите искомое ФИО игрока: ";
cin.ignore();
cin.getline(Name, 100);
strcat(s, SQL_Find_PN_Table_Players);
strcat(s, Name);
strcat(s, "';");
}
if (type == 2)
{
cout << "Введите искомое количество сыгранных матчей: ";
cin.ignore();
cin.getline(Matches, 100);
strcat(s, SQL_Find_NoM_Table_Players);
strcat(s, Matches);
strcat(s, "';");
}
if (type == 3)
{
cout << "Введите искомое количество красных карточек: ";
cin.ignore();
cin.getline(RCards, 100);
strcat(s, SQL_Find_RC_Table_Players);
strcat(s, RCards);
strcat(s, "';");
}
if (sqlite3_get_table(db, s, &a, &rows, &colls, &err))
{
fprintf(stderr, "Ошибка SQL: %s\n", err);
sqlite3_free(err);
}
if (rows < 1)
{
cout << "Запись не найдена\n ";
}
else
{
outputTablePlayers(s);
}
}
if ((!std::cin) || (type < 1) || (type > 3))
{
cout << "\nНеверный тип поиска" << endl;
cin.clear();
while (cin.get()!= '\n');
}
else break;
}
}
void sortTablePlayers() //сортировказаписейвтаблице
{
char s[200] = "";
int type;
while (true)
{
cout << "Введите тип сортировки: " << endl;
cout << "1 - ФИО игрока: " << endl;
cout << "2 - Дата рождения игрока: " << endl;
cout << "3 - Число забитых мячей: " << endl;
std::cin >> type;
if (type == 1 || type == 2 || type == 3)
{
if (type == 1)
{
strcat(s, SQL_Sort_PN_Table_Players);
}
if (type == 2)
{
strcat(s, SQL_Sort_DoB_Table_Players);
}
if (type == 3)
{
strcat(s, SQL_Sort_NoG_Table_Players);
}
outputTablePlayers(s);
}
if ((!std::cin) || (type < 1) || (type > 3))
{
cout << "\nНеверный тип сортировки" << endl;
cin.clear();
while (cin.get()!= '\n');
}
else break;
}
}
void authorization() //авторизация
{
char **a = NULL;
int rows = 0, colls = 0, i, check = 1;
char Name[100];
char Password[100];
do
{
connectDB();
cout << "\nВведите имя пользователя: \n";
cin >> Name;
cout << "Введитепароль: \n";
cin >> Password;
if (sqlite3_get_table(db, SQL_User_Choice, &a, &rows, &colls, &err))
{
fprintf(stderr, "Ошибка SQL: %s\n", err);
sqlite3_free(err);
}
for (i = 1; i < rows + 1; i++)
{
if (strcmp(Name, a[(i * colls) + 1]) == 0)
{
if (strcmp(Password, a[(i * colls) + 2]) == 0)
{
system("cls");
customMenu();
check = 0;
}
}
}
if (sqlite3_get_table(db, SQL_Admin_Choice, &a, &rows, &colls, &err))
{
fprintf(stderr, "Ошибка SQL: %s\n", err);
sqlite3_free(err);
}
for (i = 1; i < rows + 1; i++)
{
if (strcmp(Name, a[(i * colls) + 1]) == 0)
{
if (strcmp(Password, a[(i * colls) + 2]) == 0)
{
system("cls");
adminMenu();
check = 0;
}
}
}
if (check == 1)
{
cout << "Неверное имя пользователя или пароль\n";
puts("Нажмите любую клавишу");
_getch();
system("cls");
}
} while (check == 1);
}