Результат работы программы
КУРСОВАЯ РАБОТА
НА ТЕМУ: ________________________________________
________________________________________
________________________________________
Выполнил студент__ курса, группы____________________________
Фамилия, имя, отчество
Принял ______________________________________________
Должность, звание Фамилия, имя, отчество
« _____ » ____________ г. ____________________________
Подпись
Новочеркасск 2015г.
СОДЕРЖАНИЕ
Введение. 3
1 Цель работы.. 4
2 Постановка задачи. 4
3 Выбор среды разработки. 5
4 Метод решения задачи. 7
5 Блок-схема. 10
6 Результат работы программы.. 26
Заключение. 28
Список используемой литературы.. 29
Приложение 1. Листинг программы.. 30
Введение
C++ - универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей C++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, C++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы. Ключевым понятием C++ является класс. Класс - это тип, определяемый пользователем. Классы обеспечивают скрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций.
C++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из C++ программ можно использовать C библиотеки, и с C++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C.
Цель работы
Целью курсовой работы является закрепление и углубление знаний, полученных при изучении дисциплины «Основы алгоритмизации и программирования», развитие навыков при выборе представления исходных данных, использовании объектно-ориентированного программирования на языке С++, тестировании и отладки программы, оформлении документации на программную разработку.
Постановка задачи
Необходимо разработать приложение «игру в города». Игра ведется против компьютера. При этом в компьютере должен иметься файл с информацией о городах. В процессе игры должна быть возможность в любой момент завершить игру. При игре выбранные города не должны повторяться.
Выбор среды разработки
Среда разработки программного обеспечения (ПО) — совокупность программных средств, используемая программистами для разработки программного обеспечения. Простая среда разработки включает в себя редактор текста, компилятор и/или интерпретатор, средства автоматизации сборки и отладчик. Когда эти компоненты собраны в единый программный комплекс, говорят об интегрированной среде разработки (Integrated development environment- IDE). Такая среда представлена одной программой, не выходя из которой можно производить весь цикл разработки. В состав комплекса кроме перечисленных выше компонент могут входить средства управления проектами, система управления версиями, разнообразные инструменты для упрощения разработки интерфейса пользователя, стандартные заготовки («мастера»), упрощающие разработку стандартных задач, и др. Современные среды разработки, поддерживающие объектно-ориентированную разработку ПО, также включают браузер классов, инспектор объектов и диаграмму иерархии классов. Хотя существуют среды разработки, предназначенные для нескольких языков — такие как Eclipse или Microsoft Visual Studio, обычно среда разработки предназначается для одного определённого языка программирования.
Если IDE включает в себя возможность визуального редактирования интерфейса программы, она называется средой визуальной разработки.
Иногда достаточно использовать только одну интегрированную среду разработки, но для больших проектов в среду разработки включаются разнородные продукты разных фирм, разных версий. Пример такого набора: файловый менеджер, набор вспомогательных утилит и пакетных файлов, С++Builder – как IDE, PLSQL Developer – для работы с СУБД Oracle, Cristal Reports – для создания отчетов, StarTeam – для ведения версий и поддержки коллективной работы.
Для выполнения данного проекта была выбрана среда разработки Microsoft Visual Studio 2013.
Microsoft Visual Studio — линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Windows, Windows Mobile, Windows CE, .NET Framework, Xbox, Windows Phone .NET Compact Framework и Silverlight.
Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как, например, Subversion и Visual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов процесса разработки программного обеспечения (например, клиент Team Explorer для работы с Team Foundation Server).
Блок-схема
В данной работе используется класс городов Cities. Его полями являются строка с названием города и поле логического типа с информацией о том, был ли использован данный город в игре. Методами класса являются set и get методы для доступа к полям класса и их изменения.
Результат работы программы
После открытия запускающего файла на экране появляется консоль с подсказкой для пользователя. Игроку следует ввести с клавиатуры название города и нажать Enter.
Если игрок ввел слово «Сдаюсь», то игра заканчивается.
Если игрок ввел правильное название города, то компьютер из списка оставшихся городов выведет на экран название города, которое имеет ту же первую букву, что и последняя буква предыдущего города. Этого же правила должен придерживаться и игрок, иначе на экран будет выводиться сообщение, требующее от игрока корректного ввода названия города.
Заключение
Результатом проделанной работы стало приложение – «игра в города». Ее помощью можно приятно провести время, выучить новые названия городов, подтянуть свои знания в географии. Для разработки этого приложения использовалась среда разработки Visual Studio 2013. Были закреплены теоретические знания дисциплины «Основы алгоритмизации и программирования». Были изучены такие принципы объектно-ориентированного программирования, как абстракция, инкапсуляция. Создавая это приложение, я также изучил основы работы с файлами.
Список используемой литературы
1. Антони Синтес. Освой самостоятельно объектно-ориентированное программирование за 21 день . Издательство Вильямс. - 2002г. - 672с.
2. Майо Д. Самоучитель Microsoft Visual Studio 2010 = Microsoft Visual Studio 2010: A Beginner's Guide (A Beginners Guide). — C.: «БХВ-Петербург», 2010. — С. 464. — ISBN 978-5-9775-0609-0.
3. Стенли Б. Липпман. C++ для начинающих: Пер. с англ. 2тт. - Москва: Унитех; Рязань: Гэлион, 1992, 304-345сс.
4. Ирэ Пол. Объектно-ориентированное программирование с использованием C++: Пер. с англ. - Киев: НИИПФ ДиаСофт Лтд, 1995. 480с.
5. У. Сэвитч. C++ в примерах: Пер. с англ. - Москва: ЭКОМ, 1997. 736с.
Приложение 1. Листинг программы
Файл Cities.h
#include "stdafx.h"
#include <string> // Библиотека для работы со строками
#include <iostream> // Библиотека ввода/вывода
#include <fstream> // Библиотека для работы с файлом (ввод/вывод)
using namespace std;
class Cities
{
public:
Cities();
~Cities();
void setCity(string _city);
void setSelected(bool _selected);
string getCity();
bool getSelected();
private:
string city;
bool selected;
};
Файл Cities.cpp
#include "stdafx.h"
#include "Cities.h"
Cities::Cities()
{
city = "";
selected = false;
}
Cities::~Cities()
{
}
void Cities::setCity(string _city)
{
city = _city;
}
void Cities::setSelected(bool _selected)
{
selected = _selected;
};
string Cities::getCity()
{
return city;
};
bool Cities::getSelected()
{
return selected;
};
Файл CACities.cpp
// CACities.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <windows.h> // Для перевода в русский.
#include <locale.h> // Для русского языка
#include <string> // Библиотека для работы со строками
#include "Cities.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "rus"); // корректное отображение Кириллицы
system("chcp 1251");
const string fileName = "Cities.txt";
ifstream fin(fileName);
string s, inputStr, inputChar, findStr, str;
int countCities = 0, j = 0;
char c;
string nameCity, lastCharNameCity; //s - обрабатываемая строка, nameCity - название города
int numCity = 0; //номер найденной записи в списке городов
bool findWord, noMatches = true, endGame = false; //Показывает найдено ли слово в списке городов, показывает обнаружены ли совпадения
if (!fin)
{
cout << "Невозможно открыть файл" << endl;
}
else
{
//Подсчёт количества строк в файле
while (!fin.eof())
{
getline(fin, s);
countCities++;
}
//Переход в начало файла
fin.clear();
fin.seekg(0, ios_base::beg);
Cities *cities = new Cities[countCities];
while (!fin.eof())
{
getline(fin, s); //Считываем строку
cities[j].setCity(s);
j++;
}
cout << "Добро пожаловать в игру Города! \n";
cout << "Правила игры: \n";
cout << "Первый ход достаётся вам, вы можете назвать любой город \n";
cout << "и если он ответит всем требованиям, будет отображено его \n";
cout << "название. Если вы захотите сдаться напишите слово: Сдаюсь \n";
cout << "Приятной игры! \n";
cout << "Ваш ход: \n";
cin >> inputStr;
if (inputStr == "Сдаюсь")
{
return 0;
}
do {
//Проверить есть ли введённое слово в списке городов
for (j = 0; j < countCities; j++)
{
s = cities[j].getCity();
nameCity = s.substr(0, s.find('(') - 1);
if (inputStr == nameCity && !cities[numCity].getSelected())
{
findWord = true;
numCity = j;
noMatches = false;
break;
}
else
findWord = false;
}
//Если город не найден в файле
if (!findWord)
{
cout << "Нет данных или город уже был назван, повторите попытку: \n";
cin >> inputStr;
if (inputStr == "Сдаюсь")
{
cout << "Вы проиграли \n";
system("pause");
return 0;
}
}
} while (noMatches);
//Вывод найденного города
cout << cities[numCity].getCity();
cities[numCity].setSelected(true);
//Нахождение последней буквы в слове
s = nameCity;
lastCharNameCity = s[s.length() - 1];
if (lastCharNameCity == "ь")
lastCharNameCity = s[s.length() - 2];
do {
noMatches = true;
//Нахождение слова на последнюю букву города названного пользователем
do {
for (j = 0; j < countCities; j++)
{
s = cities[j].getCity();
nameCity = s.substr(0, 1);
nameCity = tolower(nameCity[0]);
if (lastCharNameCity == nameCity && !cities[j].getSelected())
{
findWord = true;
numCity = j;
noMatches = false;
break;
}
else
findWord = false;
}
if (!findWord)
{
cout << "Поздравляем! Вы выйграли.\n";
system("pause");
return 0;
}
else
{
cout << "\n" << cities[numCity].getCity() << "\n";
cities[numCity].setSelected(true);
}
} while (noMatches);
cout << "Ваш ход: \n";
s = cities[numCity].getCity();
s = s.substr(0, s.find('(') - 1);
lastCharNameCity = s[s.length() - 1];
if (lastCharNameCity == "ь")
lastCharNameCity = s[s.length() - 2];
cout << "Назовите город на букву: " << lastCharNameCity << "\n";
cin >> inputStr;
if (inputStr == "Сдаюсь")
{
cout << "Вы проиграли \n";
system("pause");
return 0;
}
s = nameCity;
noMatches = true;
//Анализ слова введенного пользователем
do {
for (j = 0; j < countCities; j++)
{
s = cities[j].getCity();
inputChar = s.substr(0, 1);
inputChar = tolower(s[0]);
s = s.substr(0, s.find('(') - 1);
if (lastCharNameCity == inputChar && inputStr == s && !cities[j].getSelected())
{
findWord = true;
numCity = j;
noMatches = false;
break;
}
else
findWord = false;
}
if (!findWord)
{
cout << "Нет данных или город уже был назван, повторите попытку: \n";
cout << "Назовите город на букву: " << lastCharNameCity << "\n";
cin >> inputStr;
if (inputStr == "Сдаюсь")
{
cout << "Вы проиграли \n";
system("pause");
return 0;
}
}
else
{
cout << cities[numCity].getCity();
cities[numCity].setSelected(true);
s = cities[numCity].getCity();
s = s.substr(0, s.find('(') - 1);
lastCharNameCity = s[s.length() - 1];
if (lastCharNameCity == "ь")
lastCharNameCity = s[s.length() - 2];
}
} while (noMatches);
} while (!endGame);
}
system("pause");
return 0;
}