Листинг кода с комментариями




ПРИЛОЖЕНИЕ

(обязательное)

#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);

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-29 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: