Программа, предназначенная для работы с базой данных "Игроки КХЛ 2012-2013"
Разработка программы "Игроки КХЛ 2012-2013" на языке С++ с использованием классов списков структур для обработки данных. Описание глобальных переменных, разработанных функций. Главное меню программы. Чтение данных из файла, их просмотр и сохранение.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.03.2016 |
Размер файла | 2,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Аннотация
Данная курсовая работа посвящена разработке и реализации программы на языке С++ с использованием классов списков структур для обработки данных.
В курсовой работе представлена программа, предназначенная для работы с базой данных "Игроки КХЛ 2012-2013".
Данный программный продукт включает в себя функции создания файла, просмотра данных, редактирование записей файла, дополнения файла новыми записями, удаление записей из файла, поиска записи файла по одному и двум поисковым признакам, а так же сортировка записей по заданному полю.
Содержание
- Введение
- 1. Описание глобальных переменных, разработанных функций
- 1.1 Описание глобальных переменных
- 1.2 Описание разработанных подпрограмм
- 2. Тестирование программы
- 2.1 Главное меню программы, состоящее из 15 пунктов
- 2.2 Чтение данных из файла
- 2.3 Просмотр данных
- 2.4 Сохранение данных в файл
- 2.5 Поиск по названию клуба
- 2.6 Поиск по позиции и количеству забитых шайб
- 2.7 Редактирование записей
- 2.7.1 Редактирование
- 2.7.2 Добавление
- 2.7.3 Удаление
- 2.8 Сортировка по ФИО
- 2.9 Сортировка по количеству забитых шайб
- 2.10 Сортировка по дате рождеения
- Код программы:
- Заключение
- Список литературы
Введение
Цель работы: освоение функций работы со структурным типом данных и файлами
Постановка задачи: спроектировать необходимые классы и разработать программу на языке С++ для обработки данных. Обработка должна включать следующие функции:
1. Создание новой базы данных (с возможностью задания имени файла).
2. Просмотр (вывод на экран) существующей базы данных.
3. Добавление новой записи в базу данных.
4. Удаление записи из базы данных.
5. Редактирование записи в базе данных.
6. Сортировка записей по числовому полю.
7. Сортировка записей по строковому полю.
8. Структурная сортировка записей.
9. Сохранение результатов обработки (запись в файл)
10. Поиск в базе данных (по одному и двум поисковым признакам) с выводом на экран найденных записей или сообщения о неуспешном поиске.
Вариант №10 "Игроки КХЛ 2012-2013"
ФИО |
Дата рождения |
Клуб |
Позиция |
Забитые шайбы |
1. Описание глобальных переменных, разработанных функций
1.1 Описание глобальных переменных
struct fio { char fam [L], im [L], ot [L]; }; |
Структура ФИО Фамилия Имя Отчество |
|
struct data { int d, m, g; }; |
Структура дата рождения День Месяц Год |
|
struct igrok { fio f; dr; char club [L]; char poz [L]; |
Структура записи ФИО Дата рождения Клуб Позиция игрока |
|
struct node1 { igrok d; node1 *next; }; |
Структура списка клубов Структура игрок Ссылка на следующий узел |
|
class list |
Класс |
1.2 Описание разработанных подпрограмм
Методы класса list |
||
void clear1 () |
Очистка списка клубов |
|
node1 *findNode (int j) |
Поиск искомой записи из базы данных |
|
list (): beg1 (NULL) {} |
Список инициализаций |
|
list (list &z) |
Конструктор копирования |
|
~list () {clear (); } |
Деструктор |
|
void inputFileList () |
Ввод сведений из файла |
|
void outputList () |
Вывод сведений |
|
void outputFileList () |
Вывод сведений в файл |
|
void sortFioList () |
Сортировка записей по ФИО игроков |
|
void sortClubList () |
Сортировка записей по названию клуба |
|
void addList () |
Добавление новой записи в базу данных |
|
void deleteList () |
Удаление записи из базы данных |
|
void sortShList () |
Сортировка записей по количеству забитых шайб |
|
void redaсtList () |
Редактирование записи в базе данных |
|
void inputBinFileList () |
Ввод сведений из бинарного файла |
|
void outputBinFileList () |
Вывод базы данных в бинарный файл |
|
void searchClub () |
Поиск записи по одному и по двум критериям |
|
void sortData () |
Сортировка по дате рождения |
|
Void sortPoz () |
Cортировка по позиции игрока |
2. Тестирование программы
2.1 Главное меню программы, состоящее из 15 пунктов
2.2 Чтение данных из файла
программа переменная файл база
2.3 Просмотр данных
2.4 Сохранение данных в файл
2.5 Поиск по названию клуба
2.6 Поиск по позиции и количеству забитых шайб
2.7 Редактирование записей
2.7.1 Редактирование
2.7.2 Добавление
2.7.3 Удаление
2.8 Сортировка по ФИО
2.9 Сортировка по дате рождеения
Код программы:
#include "stdafx. h" // Используется для построения файла предкомпилированного заголовка с
// именем Win32. pch и файла предкомпилированных типов с именем // StdAfx. obj
#include "iostream" // Реализует основы ввода и вывода языка C++
#include "conio. h" // Реализует функции используемые операционой системой при вызове
// процедур работы с консолью
#include "fstream" // Реализует инструменты для файлового ввода и вывода.
#include "string" // Реализует стандартные строковые классы и шаблоны
#include "stdlib. h" // Реализует функции, занимающиеся выделением памяти, контроль
// процесса выполнения программы, преобразования типов и другие
#include "iomanip" // Реализует инструменты для работы с форматированием вывода
using namespace std;
const int L=25;
bool flag=0, flagPerech=0;
char gFileName [30];
struct fio // структура фамилия, имя и отчество
{
char fam [L], im [L], ot [L];
};
struct data // структура день, месяц, год рождения
{
int d,m,g;
};
struct igrok // структура записи
{
fio f; // фио
data dr; // дата рождения
char club [L]; // клуб
char poz [L]; // позиция
int sh; // количество шайб
};
struct node1 // структура списка клубов
{
igrok d; // структура игрока
node1 *next; // ссылка на следующий элемент
};
class list
{
private:
node1 *pbeg1;
void clear1 (); // очистка списка клубов
node1 *findNode (int j); // поиск записи
public:
list (): pbeg1 (NULL) {} // список инициализации
list (list &z); // конструктор копирования
~list () {clear1 (); } // деструктор
void inputFileList (); // чтение данных из файла
void outputList (); // вывод списка записей
void outputFileList (); // запись списка в файл
void addList (); // добавление записи
void deleteList (); // удаление записи
void sortShList (); // сортировка по количеству забитых шайб
void sortClubList (); // сортировка по клубу
void sortFIOList (); // структурная сортировка по ФИО
void inputBinFileList (); // ввод списка из бинарный файл
void outputBinFileList (); // Вывод списка в бинарный файл
void searchClub (); // поиск записи по одному и по двум критериям
void RedactList (); // редактирование записи
void InputList (); // создание новой базы данных
void sortData (); // структурная сортировка по дате
void sortPoz (); // сортировка по позиции игрока
};
int sravnFIO (fio d1, fio d2); // функция для сравнения ФИО
int sravnData (data d1, data d2); // функция сравнения даты рождения
void main () // основная функция
{
setlocale (LC_ALL,"Russian");
int j;
list a,b;
while (1)
{ system ("cls");
cout<<"\n МЕНЮ \n\n";
cout<<" 1 - чтение данных из файла\n";
cout<<" 2 - чтение данных из бинарного файла\n";
cout<<" 3 - просмотр данных\n";
cout<<" 4 - сохранение данных в файл\n";
cout<<" 5 - сохранение данных в бинарный файл\n";
cout<<" 6 - добавление клуба в список\n";
cout<<" 7 - удаление клуба из списка\n";
cout<<" 8 - редактирование клуба в списке\n";
cout<<" 9 - сортировка списка по забитым шайбам\n";
cout<<" 10 - сортировка списка по названию клуба\n";
cout<<" 11 - сортировка списка по дате рождения\n";
cout<<" 12 - сортировка списка по ФИО\n";
cout<<" 13 - сортировка по позиции игрока\n";
cout<<" 14 - поиска записи\n";
cout<<" 15 - создание новой базы данных\n";
cout<<"\n 0 - выход\n";
cout<<"\nВыберите пункт меню: "; cin>>j;
cout<<endl;
switch (j) // выполнение функции по выбору
{
case 1: a. inputFileList (); break;
case 2: a. inputBinFileList (); break;
case 3: a. outputList (); break;
case 4: a. outputFileList (); break;
case 5: a. outputBinFileList (); break;
case 6: a. addList (); break;
case 7: a. deleteList (); break;
case 8: a. RedactList (); break;
case 9: a. sortShList (); break;
case 10: a. sortClubList (); break;
case 11: a. sortData (); break;
case 12: a. sortFIOList (); break;
case 13: a. sortPoz (); break;
case 14: a. searchClub (); break;
case 15: a. InputList (); break;
case 0: cout<<"Конец работы\n"; getch (); return; // выход из бесконечного цикла
default: cout<<"Ошибка ввода, повторите попытку"; getch (); // ошибка ввода
}
}
}
void list:: inputFileList () // чтение данных из файла
{ // pbeg1 - ссылка на список игроков
ifstream fin;
char file [L];
node1 *p,*pend (NULL);
cout<<"Введите имя входного файла: "; cin>>file;
fin. open (file); // открытие исходного файла для считывания
if (fin. fail ()) // ошибка при открытии
{
cout<<file<<" - не открыт. Для продолжения нажмите любую клавишу\n";
getch ();
return;
}
clear1 (); // вызов функции очистки исходного списка
while (1)
{
p=new node1;
if (p==NULL)
{cout<<"Недостаточно памяти. Для продолжения нажмите любую клавишу\n";
getch ();
fin. close ();
return;
}
fin>>p->d. f. fam>>p->d. f. im>>p->d. f. ot>>p->d. dr. d>>p->d. dr. m>>p->d. dr. g>>p->d. club>>p->d. poz>>p->d. sh;
if (fin. fail ()) break;
p->next=NULL;
if (pend! =NULL) pend->next=p;
else pbeg1=p;
pend=p;
}
fin. close (); // закрытие файла
delete p; // очиска переменной, возврат памяти компьютеру
cout<<"\nФайл введен. Для продолжения нажмите любую клавишу\n";
flag=1;
strcpy (gFileName, file);
getch ();
}
void list:: clear1 () // очистка списка
{ // pbeg1 - возвращающаяся ссылка на список
node1 *p;
while (pbeg1! =NULL) // цикл очистки списка
{
p=pbeg1;
pbeg1=pbeg1->next;
delete p; // возврат памяти компьютеру
}
}
void list:: outputList () // вывод списка записей
{ // pbeg1 - возвращающаяся ссылка на список
int i;
node1 *p; // внутренняя переменная
cout<<"Сведенья о игроках: \n\n";
cout<<"____________________________________________________\n";
cout<<"|№ | ФИО |Дата рожд | Клуб | Позиция |Шайбы|\n";
cout<<"|--|-----------------------------------|----------|---------|----------|-----|\n";
for (i=1, p=pbeg1; p! =NULL; i++, p=p->next) // вывод списка в таблицу
cout<<"|"<<setw (2) <<i<<"|"<<setw (10) <<p->d. f. fam<<" "<<setw (9) <<p->d. f. im<<" "<<setw (14) <<p->d. f. ot<<"|"<<setfill ('0') <<setw (2) <<p->d. dr. d<<". "<<setw (2) <<p->d. dr. m<<". "<<setw (2) <<p->d. dr. g<<"|"<<setfill (' ') <<setw (9) <<p->d. club<<"|"<<setw (10) <<p->d. poz<<"| "<<setw (3) <<p->d. sh<<" |"<<endl;
cout<<"|__|_____________|__________|_________|__________|_____|\n";
cout<<"\nДля продолжения нажмите любую клавишу\n";
delete p; // возврат памяти компьютеру
getch ();
}
void list:: outputFileList () // запись списка студентов в файл
{ // pbeg1 - возвращающаяся ссылка на список
ofstream fout;
char file [L];
node1 *p;
int i;
cout<<"Введите имя выходного файла: "; cin>>file; // считывание имени файла
fout. open (file); // открытие файла
if (fout. fail ()) // ошибка при открытие
{
cout<<file<<" - не создан. Для продолжения нажмите любую клавишу\n";
getch ();
return;
}
fout<<"____________________________________________________\n";
fout<<"|№ | ФИО |Дата рожд | Клуб | Позиция |Шайбы|\n";
fout<<"|--|-----------------------------------|----------|---------|----------|-----|\n";
for (i=1, p=pbeg1; p! =NULL; i++, p=p->next) // вывод списка студентов в таблицу
fout<<"|"<<setw (2) <<i<<"|"<<setw (10) <<p->d. f. fam<<" "<<setw (9) <<p->d. f. im<<" "<<setw (14) <<p->d. f. ot<<"|"<<setfill ('0') <<setw (2) <<p->d. dr. d<<". "<<setw (2) <<p->d. dr. m<<". "<<setw (2) <<p->d. dr. g<<"|"<<setfill (' ') <<setw (9) <<p->d. club<<"|"<<setw (10) <<p->d. poz<<"| "<<setw (3) <<p->d. sh<<" |"<<endl;
fout<<"|__|____________|__________|_________|__________|_____|\n";
cout<<"\nДанные сохранены в файл. Для продолжения нажмите любую клавишу\n";
fout. close (); // закрытие файла
delete p; // возврат памяти компьютеру
getch ();
}
void list:: addList () // добавление записи
{ // pbeg1 - возвращающаяся ссылка на список
node1 *p;
int nn,d1,m1,g1;
p=new node1;
if (p==NULL) // если не создана новая переменная
{cout<<"Недостаточно памяти. Для продолжения нажмите любую клавишу\n";
getch ();
return;
}
do{
cout<<"Введите данные: \n"; // считывание данных о новом игроке
cout<<"Фамилия: "; cin>>p->d. f. fam;
cout<<"Имя: "; cin>>p->d. f. im;
cout<<"Отчество: "; cin>>p->d. f. ot;
cout<<"Дата рождения: \n"<<"День: "; cin>>d1;
if ( (d1<0) || (d1>31))
{cout<<"\nВведенный день не существует! Повторите ввод (от 1 до 31) \n\n";
cout<<"День: "; cin>>d1; }
else p->d. dr. d=d1;
cout<<"Месяц: "; cin>>m1;
if ( (m1<0) || (m1>12))
{cout<<"\nВведенный месяц не существует! Повторите ввод (от 1 до 12) \n\n";
cout<<"Месяц: "; cin>>m1; }
else p->d. dr. m=m1;
cout<<"Год: "; cin>>g1;
if ( (g1<1950) || (g1>2000))
{cout<<"\nВведенная год не существует! Повторите ввод (от 1950 до 2000) \n\n";
cout<<"Год: "; cin>>g1; }
else
p->d. dr. g=g1;
cout<<"Клуб: "; cin>>p->d. club;
cout<<"Позиция: "; cin>>p->d. poz;
cout<<"Забитые шайбы: "; cin>>p->d. sh;
p->next=pbeg1; // добавление записи
pbeg1=p;
cout<<"\nБаза данных создана. \nЖелаете добавить еще одну запись? (1 - да, 0 - нет): \n";
cin>>nn;
}while (nn==1);
getch ();
}
void list:: deleteList () // удаление записи
{ // pbeg1 - возвращающаяся ссылка на список
node1 *p, *p0;
int j, i;
if (pbeg1==NULL) // при пустом списке
{
cout<<"Список пуст. Для продолжения нажмите любую клавишу. \n";
getch ();
return;
}
outputList (); // вывод списка на экран
cout<<"\nВведите номер удаляемой строки: ";
cin>>i; // номер удаляемой строки
cout<<endl;
if (i<1)
{
cout<<"Такой строки нет. Для продолжения нажмите любую клавишу. \n";
getch ();
return;
}
p0=findNode (i);
if (p0==NULL)
{
cout<<"Такой строки нет. Для продолжения нажмите любую клавишу. \n";
getch ();
return;
}
cout<<"___________________________________________________\n";
cout<<"|№ | ФИО |Дата рожд | Клуб | Позиция |Шайбы|\n";
cout<<"|--|-----------------------------------|----------|---------|----------|-----|\n";
cout<<"|"<<setw (2) <<i<<"|"<<setw (10) <<p0->d. f. fam<<" "<<setw (9) <<p0->d. f. im<<" "<<setw (14) <<p0->d. f. ot<<"|"<<setfill ('0') <<setw (2) <<p0->d. dr. d<<". "<<setw (2) <<p0->d. dr. m<<". "<<setw (2) <<p0->d. dr. g<<"|"<<setfill (' ') <<setw (9) <<p0->d. club<<"|"<<setw (10) <<p0->d. poz<<"| "<<setw (3) <<p0->d. sh<<" |"<<endl;
cout<<"|__|_____________|__________|_________|__________|_____|\n";
if (p0==pbeg1) // удаление выбранной записи
{
pbeg1=pbeg1->next; // удаление записи
delete p0; // возврат памяти компьютеру
}
else
{
for (p=pbeg1; p->next! =p0; p=p->next)
continue;
p->next=p0->next; // удаление записи
}
cout<<"Запись удалена. Для продолжения нажмите любую клавишу\n";
getch ();
}
node1* list:: findNode (int j) // поиск совпадающей строки
{ // pbeg1 - возвращающаяся ссылка на искомого игрока, j - номер искомой строки
int i;
node1 *p;
p=pbeg1;
i=1;
while (p! =NULL) // поиск заданной строки
{
if (i==j) return p;
p=p->next;
i++;
}
return NULL;
}
void list:: sortShList () // сортировка по забитым шайбам
{ // pbeg - возвращающаяся ссылка на список
node1 *p0,*p1,*p2;
int fl;
if (pbeg1==NULL||pbeg1->next==NULL) // если список не содержит элементов или содержит один элемент
{
cout<<"Элементы отсортированы! Для продолжения нажмите любую клавишу\n";
getch ();
return;
}
do{fl=0;
p1=pbeg1;
p2=pbeg1->next;
if (p1->d. sh<p2->d. sh) // сортировка 1 и 2 элементов
{
fl=1; p1->next=p2->next;
p2->next=p1;
pbeg1=p2;
}
for (p0=pbeg1; p0->next->next! =NULL; p0=p0->next) // сортировка списка в цикле
{p1=p0->next;
p2=p0->next->next;
if (p1->d. sh<p2->d. sh) // проверка элементов
{
fl=1; p1->next=p2->next; p2->next=p1; p0->next=p2; }} // рокировка элементов
}while (fl==1);
cout<<"Элементы отсортированы! Для продолжения нажмите любую клавишу\n";
getch ();
}
void list:: sortClubList () // сортировка по клубам
{ // pbeg - возвращающаяся ссылка на список
node1 *p0,*p1,*p2;
int fl;
if (pbeg1==NULL||pbeg1->next==NULL)
{
cout<<"Элементы отсортированы! Для продолжения нажмите любую клавишу\n";
getch ();
return;
}
do{fl=0;
p1=pbeg1;
p2=pbeg1->next;
if (strcmp (p1->d. club,p2->d. club) >0) // сортировка 1 и 2 элементов
{fl=1; p1->next=p2->next;
p2->next=p1;
pbeg1=p2;
}
for (p0=pbeg1; p0->next->next! =NULL; p0=p0->next) // сортировка списка в цикле
{p1=p0->next;
p2=p0->next->next;
if (strcmp (p1->d. club,p2->d. club) >0) // проверка элементов
{fl=1; p1->next=p2->next; p2->next=p1; p0->next=p2; }} // рокировка элементов
}while (fl==1);
cout<<"Элементы отсортированы! Для продолжения нажмите любую клавишу\n";
getch ();
}
void list:: sortPoz () // сортировка по позиции игрока
{ // pbeg - возвращающаяся ссылка на список
node1 *p0,*p1,*p2;
int fl;
if (pbeg1==NULL||pbeg1->next==NULL)
{
cout<<"Элементы отсортированы! Для продолжения нажмите любую клавишу\n";
getch ();
return;
}
do{fl=0;
p1=pbeg1;
p2=pbeg1->next;
if (strcmp (p1->d. poz,p2->d. poz) >0) // сортировка 1 и 2 элементов по позиции игрока
{fl=1; p1->next=p2->next;
p2->next=p1;
pbeg1=p2;
}
for (p0=pbeg1; p0->next->next! =NULL; p0=p0->next) // сортировка списка по позиции игрока в цикле
{p1=p0->next;
p2=p0->next->next;
if (strcmp (p1->d. poz,p2->d. poz) >0) // проверка элементов
{fl=1; p1->next=p2->next; p2->next=p1; p0->next=p2; }} // рокировка элементов
}while (fl==1);
cout<<"Элементы отсортированы! Для продолжения нажмите любую клавишу\n";
getch ();
}
void list:: sortFIOList () // сортировка по ФИО (структурная)
{ // pbeg - возвращающаяся ссылка на список студентов
node1 *p0,*p1,*p2;
int fl;
if (pbeg1==NULL||pbeg1->next==NULL)
{
cout<<"Элементы отсортированы! Для продолжения нажмите любую клавишу\n";
getch ();
return; }
do{fl=0;
p1=pbeg1;
p2=pbeg1->next;
if (sravnFIO (p1->d. f,p2->d. f) >0) // сортировка 1 и 2 элементов по фио
{
fl=1;
p1->next=p2->next;
p2->next=p1;
pbeg1=p2;
}
for (p0=pbeg1; p0->next->next! =NULL; p0=p0->next) // сортировка списка по ФИО в цикле
{
p1=p0->next;
p2=p0->next->next;
if (sravnFIO (p1->d. f,p2->d. f) >0) // проверка элементов
{
fl=1; p1->next=p2->next; p2->next=p1; p0->next=p2; }} // рокировка элементов
}while (fl==1);
cout<<"Элементы отсортированы! \nДля продолжения нажмите любую клавишу\n";
getch ();
}
int sravnFIO (fio f1, fio f2) // Функция сравнения по Ф.И. О.
{
if (strcmp (f1. fam,f2. fam) >0) return 1; // сравнение фамилии
if (strcmp (f1. fam,f2. fam) <0) return - 1;
if (strcmp (f1. im,f2. im) >0) return 1; // сравнение имени
if (strcmp (f1. im,f2. im) >0) return - 1;
if (strcmp (f1. ot,f2. ot) >0) return 1; // сравнение отчества
if (strcmp (f1. ot,f2. ot) >0) return - 1;
return 0;
}
int sravnData (data dr1, data dr2) // Функция сравнения по дате рождения.
{
if (dr1. g>dr2. g) return 1; // сравнение дня
if (dr1. g<dr2. g) return - 1;
if (dr1. m>dr2. m) return 1; // сравнение месяца
if (dr1. m<dr2. m) return - 1;
if (dr1. d>dr2. d) return 1; // сравнение отчества
if (dr1. d<dr2. d) return - 1;
return 0;
}
void list:: inputBinFileList () // Ввод списка из бинарного файла
{ // pbeg1 - адрес списка студентов
ifstream fin;
char file [L];
node1* p,*pend (NULL);
igrok t;
cout<<"Имя входного бинарного файла: "; cin>>file; // ввод адреса бинарного файла
fin. open (file, ios:: binary); // открытие бинарного файла
if (fin. fail ()) // если файл не открыт
{
cout<<file<<" - не открывается! \n";
getch (); return;
}
clear1 ();
while (1) // бесконечный цикл считывания
{
p=new node1; // Создается узел
if (p==NULL) // если узел не создан
{
cout<<" Нет памяти. \n";
getch (); fin. close (); return;
}
fin. read ( (char*) &t,sizeof (igrok)); // считывание из бинарного файла
if (fin. fail ()) break; // выход из цикла при ошибке
p->d=t; // запись в список
p->next=NULL;
if (pend! =NULL) pend->next=p;
else pbeg1=p;
pend=p;
}
cout<<"Файл введён! \n"; getch ();
fin. close ();
delete p; // возврат памяти компьютеру
}
void list:: outputBinFileList () // Вывод списка из бинарного файла
{ // pbeg1 - адрес списка студентов
ofstream fout;
char file [L]; // строковая переменная
node1 *p;
igrok t;
cout<<"Имя выходного Бинарного Файла: "; cin>>file; // адрес бинарного файла
fout. open (file, ios:: binary);
if (fout. fail ()) // ошибка открытия файла
{
cout<<file<<" - не открывается! \n";
getch (); return;
}
for (p=pbeg1; p! =NULL; p=p->next) // вывод в файл в цикле
{
t=p->d;
fout. write ( (char*) &t,sizeof (igrok));
}
fout. close (); // закрытие бинарного файла
cout<<"Сведения сохранены! \n";
getch ();
}
list:: list (list &z)
{node1 *pz1,*p1,*pend1 (NULL);
if (z. pbeg1==NULL) pbeg1=NULL;
else{for (pz1=pbeg1; pz1! =NULL; pz1=pz1->next)
{p1=new node1;
if (p1==NULL) {cout<<"Нет памяти! \n";
getch (); exit (1);
}
p1->d=pz1->d;
p1->next=NULL;
if (pend1! =NULL) pend1->next=p1;
else pbeg1=p1;
pend1=p1;
}
}
}
void list:: searchClub () // поиск игрока по клубу
{
int i,fl,nn;
node1 *p;
char club [L];
int b;
int y;
char g [L];
cout<<"Поиск записи: \n"<<endl;
cout<<"1-Искать по клубу; \n2-Искать по позиции и кол-ву забитых шайб; \n"<<endl;
cout<<"Выберете: ";
cin>>y;
if (y==1)
{cout<<"\nВведите название клуба: ";
cin>>club;
fl=0;
nn=0;
p=pbeg1;
while (p! =NULL) // поиск заданной строки
{
if (strcmp (club,p->d. club) ==0)
{
fl=1;
nn++;
}
p=p->next;
}
if (fl==0)
{
cout<<"Записей, удовлетворяющих условию поиска, не найдено. \nДля продолжения нажмите любую клавишу\n";
_getch ();
_getch ();
}
else
{
cout<<"Найдено записей: "<<nn<<"\n\n";
cout<<"___________________________________________________\n";
cout<<"|№ | ФИО |Дата рожд | Клуб | Позиция |Шайбы|\n";
cout<<"|--|-----------------------------------|----------|---------|----------|-----|\n";
for (i=1, p=pbeg1; p! =NULL; i++, p=p->next)
if (strcmp (club,p->d. club) ==0)
{
cout<<"|"<<setw (2) <<i<<"|"<<setw (10) <<p->d. f. fam<<" "<<setw (9) <<p->d. f. im<<" "<<setw (14) <<p->d. f. ot<<"|"<<setfill ('0') <<setw (2) <<p->d. dr. d<<". "<<setw (2) <<p->d. dr. m<<". "<<setw (2) <<p->d. dr. g<<"|"<<setfill (' ') <<setw (9) <<p->d. club<<"|"<<setw (10) <<p->d. poz<<"| "<<setw (3) <<p->d. sh<<" |"<<endl;
cout<<"|__|_____________|__________|_________|__________|_____|\n";
}
cout<<"Для продолжения нажмите любую клавишу\n";
getch ();
}
}
else
{cout<<"\nВведите позицию игрока: ";
cin>>g;
cout<<"\nВведите количество забитых шайб: ";
cin>>b;
fl=0;
nn=0;
p=pbeg1;
while (p! =NULL) // поиск заданной строки
{
if ( (strcmp (g,p->d. poz) ==0) && (b==p->d. sh))
{
fl=1;
nn++;
}
p=p->next;
}
if (fl==0)
{
cout<<"Записей, удовлетворяющих условию поиска, не найдено. \nДля продолжения нажмите любую клавишу\n";
_getch ();
_getch ();
}
else
{
cout<<"Найдено записей: "<<nn<<"\n\n";
cout<<"____________________________________________________\n";
cout<<"|№ | ФИО |Дата рожд | Клуб | Позиция |Шайбы|\n";
cout<<"|--|-----------------------------------|----------|---------|----------|-----|\n";
for (i=1, p=pbeg1; p! =NULL; i++, p=p->next)
if ( (strcmp (g,p->d. poz) ==0) && (b==p->d. sh))
{
cout<<"|"<<setw (2) <<i<<"|"<<setw (10) <<p->d. f. fam<<" "<<setw (9) <<p->d. f. im<<" "<<setw (14) <<p->d. f. ot<<"|"<<setfill ('0') <<setw (2) <<p->d. dr. d<<". "<<setw (2) <<p->d. dr. m<<". "<<setw (2) <<p->d. dr. g<<"|"<<setfill (' ') <<setw (9) <<p->d. club<<"|"<<setw (10) <<p->d. poz<<"| "<<setw (3) <<p->d. sh<<" |"<<endl;
cout<<"|__|_____________|__________|_________|__________|_____|\n";
}
cout<<"Для продолжения нажмите любую клавишу\n";
getch ();
}
}
}
void list:: RedactList () // удаление записи
{ // pbeg1 - возвращающаяся ссылка на список
node1 *p, *p0;
int nn,j, i;
if (pbeg1==NULL) // при пустом списке
{
cout<<"Список пуст. Для продолжения нажмите любую клавишу. \n";
getch ();
return;
}
cout<<"___________________________________________________\n";
cout<<"|№ | ФИО |Дата рожд | Клуб | Позиция |Шайбы|\n";
cout<<"|--|-----------------------------------|----------|---------|----------|-----|\n";
for (i=1, p=pbeg1; p! =NULL; i++, p=p->next) // вывод списка студентов в таблицу
cout<<"|"<<setw (2) <<i<<"|"<<setw (10) <<p->d. f. fam<<" "<<setw (9) <<p->d. f. im<<" "<<setw (14) <<p->d. f. ot<<"|"<<setfill ('0') <<setw (2) <<p->d. dr. d<<". "<<setw (2) <<p->d. dr. m<<". "<<setw (2) <<p->d. dr. g<<"|"<<setfill (' ') <<setw (9) <<p->d. club<<"|"<<setw (10) <<p->d. poz<<"| "<<setw (3) <<p->d. sh<<" |"<<endl;
cout<<"|__|_____________|__________|_________|__________|_____|\n";
cout<<"\nВведите номер редактируемой строки строки: ";
cin>>i; // номер удаляемой строки
cout<<endl;
if (i<1)
{
cout<<"Такой строки нет. Для продолжения нажмите любую клавишу. \n";
getch ();
return;
}
p0=findNode (i);
if (p0==NULL)
{
cout<<"Такой строки нет. Для продолжения нажмите любую клавишу. \n";
getch ();
return;
}
cout<<"_________________________________________________\n";
cout<<"|№ | ФИО |Дата рожд | Клуб | Позиция |Шайбы|\n";
cout<<"|--|-----------------------------------|----------|---------|----------|-----|\n";
cout<<"|"<<setw (2) <<i<<"|"<<setw (10) <<p0->d. f. fam<<" "<<setw (9) <<p0->d. f. im<<" "<<setw (14) <<p0->d. f. ot<<"|"<<setfill ('0') <<setw (2) <<p0->d. dr. d<<". "<<setw (2) <<p0->d. dr. m<<". "<<setw (2) <<p0->d. dr. g<<"|"<<setfill (' ') <<setw (9) <<p0->d. club<<"|"<<setw (10) <<p0->d. poz<<"| "<<setw (3) <<p0->d. sh<<" |"<<endl;
cout<<"|__|_____________|__________|_________|__________|_____|\n";
if (p0==pbeg1) // удаление выбранной записи
{
do
{
cout<<"\n\nВыберите, какой параметр изменить: \n1 - Фимилию\n2 - Имя\n3 - Отчество\n4 - День рождения\n5 - Месяц рождения\n6 - Год рождения\n7 - Клуб\n8 - Позицию\n9 - Забитые шайбы\n\nВыберите: ";
cin>>nn;
cout<<endl;
if (nn == 1)
{
cout<<"Введите новую фамилию: ";
cin>>p0->d. f. fam;
};
if (nn == 2)
{
cout<<"Введите новое имя: ";
cin>>p0->d. f. im;
};
if (nn == 3)
{
cout<<"Введите новое отчество: ";
cin>>p0->d. f. ot;
};
if (nn == 4)
{
cout<<"Введите новый день рождения (от 1 до 31): ";
cin>>p0->d. dr. d;
};
if (nn == 5)
{
cout<<"Введите новый месяц рождения (от 1 до 12): ";
cin>>p0->d. dr. m;
};
if (nn == 6)
{
cout<<"Введите новый год рождения (от 1950 до 2000): ";
cin>>p0->d. dr. g;
};
if (nn == 7)
{
cout<<"Введите новый клуб: ";
cin>>p0->d. club;
};
if (nn == 8)
{
cout<<"Введите новую позицию: ";
cin>>p0->d. poz;
};
if (nn == 9)
{
cout<<"Введите новое кол-во забитых шайб: ";
cin>>p0->d. sh;
};
cout<<"____________________________________________________\n";
cout<<"|№ | ФИО |Дата рожд | Клуб | Позиция |Шайбы|\n";
cout<<"|--|-----------------------------------|----------|---------|----------|-----|\n";
cout<<"|"<<setw (2) <<i<<"|"<<setw (10) <<p0->d. f. fam<<" "<<setw (9) <<p0->d. f. im<<" "<<setw (14) <<p0->d. f. ot<<"|"<<setfill ('0') <<setw (2) <<p0->d. dr. d<<". "<<setw (2) <<p0->d. dr. m<<". "<<setw (2) <<p0->d. dr. g<<"|"<<setfill (' ') <<setw (9) <<p0->d. club<<"|"<<setw (10) <<p0->d. poz<<"| "<<setw (3) <<p0->d. sh<<" |"<<endl;
cout<<"|__|_____________|__________|_________|__________|_____|\n";
cout<<"Изменения вступили в силу. \nЖелаете еще что-нибудь изменить в данной записи (1 - да, 0 - нет): ";
cin>>nn;
}
while (nn==1);
}
else
{
for (p=pbeg1; p->next! =p0; p=p->next)
continue;
cout<<"____________________________________________________\n";
cout<<"|№ | ФИО |Дата рожд | Клуб | Позиция |Шайбы|\n";
cout<<"|--|-----------------------------------|----------|---------|----------|-----|\n";
cout<<"|"<<setw (2) <<i<<"|"<<setw (10) <<p0->d. f. fam<<" "<<setw (9) <<p0->d. f. im<<" "<<setw (14) <<p0->d. f. ot<<"|"<<setfill ('0') <<setw (2) <<p0->d. dr. d<<". "<<setw (2) <<p0->d. dr. m<<". "<<setw (2) <<p0->d. dr. g<<"|"<<setfill (' ') <<setw (9) <<p0->d. club<<"|"<<setw (10) <<p0->d. poz<<"| "<<setw (3) <<p0->d. sh<<" |"<<endl;
cout<<"|__|_____________|__________|_________|__________|_____|\n";
do
{
cout<<"\n\nВыберите, какой параметр изменить: \n1 - ФИО\n2 - Дата рождения\n3 - Клуб\n4 - Позиция\n5 - Шайбы\n\nВыберите: ";
cin>>nn;
cout<<endl;
if (nn == 1)
{
cout<<"Введите новую фамилию: ";
cin>>p->d. f. fam;
};
if (nn == 2)
{
cout<<"Введите новое имя: ";
cin>>p->d. f. im;
};
if (nn == 3)
{
cout<<"Введите новое отчество: ";
cin>>p->d. f. ot;
};
if (nn == 4)
{
cout<<"Введите новый день рождения: ";
cin>>p->d. dr. d;
};
if (nn == 5)
{
cout<<"Введите новый месяц рождения: ";
cin>>p->d. dr. m;
};
if (nn == 6)
{
cout<<"Введите новый год рождения: ";
cin>>p->d. dr. g;
};
if (nn == 7)
{
cout<<"Введите новый клуб: ";
cin>>p->d. club;
};
if (nn == 8)
{
cout<<"Введите новую позицию: ";
cin>>p->d. poz;
};
if (nn == 9)
{
cout<<"Введите новое кол-во забитых шайб: ";
cin>>p->d. sh;
};
cout<<"Изменения вступили в силу. \nЖелаете еще что-нибудь изменить в данной записи (1 - да, 0 - нет): ";
cin>>nn;
}
while (nn==1);
}
cout<<"Запись изменена. Для продолжения нажмите любую клавишу\n";
getch ();
}
void list:: InputList () // создание базы данных
{ // pbeg1 - возвращающаяся ссылка на список
node1 *p;
int nn,g1,m1,d1;
p=new node1;
if (p==NULL) // если не создана новая переменная
{cout<<"Недостаточно памяти. Для продолжения нажмите любую клавишу\n";
getch ();
return;
}
do{
cout<<"Введите данные: \n"; // считывание данных о новом игроке
cout<<"Фамилия: "; cin>>p->d. f. fam;
cout<<"Имя: "; cin>>p->d. f. im;
cout<<"Отчество: "; cin>>p->d. f. ot;
cout<<"Дата рождения: \n"<<"День: "; cin>>d1;
if ( (d1<0) || (d1>31))
{cout<<"\nВведенный день не существует! Повторите ввод (от 1 до 31) \n\n";
cout<<"День: "; cin>>d1; }
else p->d. dr. d=d1;
cout<<"Месяц: "; cin>>m1;
if ( (m1<0) || (m1>12))
{cout<<"\nВведенный месяц не существует! Повторите ввод (от 1 до 12) \n\n";
cout<<"Месяц: "; cin>>m1; }
else p->d. dr. m=m1;
cout<<"Год: "; cin>>g1;
if ( (g1<1950) || (g1>2000))
{cout<<"\nВведенная год не существует! Повторите ввод (от 1950 до 2000) \n\n";
cout<<"Год: "; cin>>g1; }
else
p->d. dr. g=g1;
cout<<"Клуб: "; cin>>p->d. club;
cout<<"Позиция: "; cin>>p->d. poz;
cout<<"Забитые шайбы: "; cin>>p->d. sh;
p->next=pbeg1; // добавление записи
pbeg1=p;
cout<<"\nБаза данных создана. \nЖелаете добавить еще одну запись? (1 - да, 0 - нет): \n";
cin>>nn;
}while (nn==1);
getch ();
}
void list:: sortData () // сортировка по дате рождения (структурная)
{ // pbeg - возвращающаяся ссылка на список
node1 *p0,*p1,*p2;
int fl;
if (pbeg1==NULL||pbeg1->next==NULL)
{
cout<<"Элементы отсортированы! Для продолжения нажмите любую клавишу\n";
getch ();
return; }
do{fl=0;
p1=pbeg1;
p2=pbeg1->next;
if (sravnData (p1->d. dr,p2->d. dr) >0) // сортировка 1 и 2 элементов по дате рождения
{
fl=1;
p1->next=p2->next;
p2->next=p1;
pbeg1=p2;
}
for (p0=pbeg1; p0->next->next! =NULL; p0=p0->next) // сортировка списка по дате рождения в цикле
{
p1=p0->next;
p2=p0->next->next;
if (sravnData (p1->d. dr,p2->d. dr) >0) // проверка элементов
{
fl=1; p1->next=p2->next; p2->next=p1; p0->next=p2; }} // рокировка элементов
}while (fl==1);
cout<<"Элементы отсортированы! \nДля продолжения нажмите любую клавишу\n";
getch ();
}
Заключение
В данной работе была разработана программа, которая полностью соответствует поставленным требованиям.
Было произведено тестирование программы, которое показало успешное выполнение всех функций, необходимых для базы данных.
Разработанная программа позволит повысить эффективность обработки данных и сократить время на поиск необходимых записей.
Список литературы
1. Б. Страуструп. Язык программирования С++, 3-е изд пер. с англ. - М.: "Бином", СПб.: "Невский диалект", 1999. - 991 с., ил.
2. Т.А. Павловская. Ю.А. Щупак С/C++. Программирование на языке высокого уровня. - СПб.: Питер, 2007. - 461 с.: ил.
3. Прата. Объектно-ориентированное программирование в C++.2 изд. - ЭКСМО, 2007. - 336 с.: ил.
4. Т.А. Павловская, Ю.А. Щупак. С/C++. Структурное программирование: Практикум. - СПб.: Питер, 2007. - 239 с.: ил.
5. Стефенс Д.Р. C++. Сборник рецептов. - КУДИЦ-ПРЕСС, 2007. - 624 с.
7. Стивен Прата. Язык программирования C++ (C++11). Лекции и упражнения = C++ Primer Plus, 6th Edition (Developer's Library). - 6-е изд. - М.: Вильямс, 2012. - 1248 с.
8. Айвор Хортон. Visual C++ 2010: полный курс = Ivor Horton's Beginning Visual C++ 2010. - М.: Диалектика, 2010. - С.1216.
9. Герберт Шилдт. Полный справочник по C++ = C++: The Complete Reference. - 4-е изд. - М.: Вильямс, 2011. - С.800
10. Вячеслав Понамарев. Программирование на C++/C# в Visual Studio.net 2003 БХВ-Петербург. 2004
11. В.Г. Давыдов. Технологии программирования C++. 2005. СПб.: "Невский диалект"
12. Объектно-ориентированное программирование на С++. // Айра Пол // California, 1997г.
Размещено на Allbest.ru
Подобные документы
Структура записей входного массива. Описание основных типов данных. Алгоритм программы: присвоение начальных значений переменных, чтение списка из файла, вывод данных на экран, выполнение обработки данных, сохранение списка в файл. Листинг программы.
курсовая работа [325,2 K], добавлен 28.12.2012Разработка программных продуктов на языке программирования Borland Delphi. Применяемые таблицы и связи между ними. Пользовательский интерфейс работы с базой данных. Алгоритм работы программы "Футбольные команды и игроки". Защита от ввода неверных данных.
курсовая работа [788,1 K], добавлен 22.06.2011Изучение условий поставленной задачи и используемых данных для разработки программы хранения информации о рейсах поезда. Описание разработанных функций, листинга, блок-схем алгоритмов и дерева функции. Рассмотрение сценария диалога данной программы.
курсовая работа [532,7 K], добавлен 20.07.2014Особенности проектирования программы на языке С++ для обработки данных из таблиц базы данных. Основные функции программы, создание концептуальной модели базы данных и диаграммы классов, разработка интерфейса пользователя и запросов к базе данных.
курсовая работа [2,1 M], добавлен 08.06.2012Разработка прикладной программы, организующей работу с базой данных флагов мира, осуществляющей просмотр и редактирование базы данных, поиск по категориям, сортировку данных с использованием базы данных Paradox 7. Системные требования к программе.
курсовая работа [200,4 K], добавлен 02.03.2009Определение необходимых модулей программы, структуры файла базы данных. Описание разработки программы, отладка и тестирование. Разработка приложения Organizer.exe, меню и руководство пользователя. Алгоритм обработки событий главного меню (расписания).
курсовая работа [901,8 K], добавлен 11.02.2014Разработка программы на языке Turbo Pascal, обеспечивающей работу пользователя в диалоговом режиме с возможностью выбора функций с помощью одноуровневого меню вертикального типа. Блок-схема и листинг программы, описание руководства пользователя.
курсовая работа [1,5 M], добавлен 17.03.2014Написание программы, исходя из конкретных данных. Создание двунаправленного линейного списка. Main - главная программа, содержащая меню. Занесение данных в память списка. Результирующий файл. Значения всех числовых данных из диапазона целого типа данных.
курсовая работа [2,3 M], добавлен 22.12.2010Программа для работы с однотабличной ненормализованной базой данных. Цель программы: обеспечение инструментарием для работы с базой данных различных школьных соревнований. Работа с базой данных на физическом и логическом уровнях. Элементы языка.
курсовая работа [114,3 K], добавлен 02.03.2009Реализация линейных списков в языке программирования C++. Основные операции при работе с ними. Разработка интерфейса и алгоритмов. Описание работы программы на псевдокоде. Составление программного кода. Тестирование, отладка и результат работы программы.
курсовая работа [1,1 M], добавлен 07.01.2014