- •Пояснительная записка к курсовой работе
- •Содержание
- •Введение.
- •Постановка задачи
- •Метод решения задачи и ее формализация.
- •2) Метод нисходящего проектирования
- •3) Интерфейс типа «Меню»
- •Выбор языка программирования.
- •Разработка состава и структуры исходных данных и результатов.
- •Разработка алгоритма решения задачи.
- •Разработка программы.
- •Отладка и тестирование программы.
- •Тестовый набор.
- •Список литературы.
- •Приложение б. Исходный текст программы.
Тестовый набор.
Заключение.
В ходе курсового проектирования были закреплены навыки разработки программ на языке С++.
При выполнении курсового проекта были использованы все основные этапы программирования задач, а именно:
Проанализированы необходимые данные и результаты
Выбран метод решения поставленной задачи
Составлена блок-схема алгоритма
Написана, отлажена и проверена на работоспособность программа на языке С++.
Результаты проверки показали, что разработанная программа правильно осуществляет обработку информации и обеспечивает интуитивно понятный интерфейс работы с программой пользователю.
Список литературы.
В. В. Подбельский. Язык СИ++. - М.: Финансы и статистика, 2003.
Б. И. Березин, С. Б. Березин. Начальный курс С и С++. – М.: Диалог-МИФИ, 1998.
Стэнли Б. Липпман. C++ для начинающих: Пер. с англ. 2тт. - Москва: Унитех; Рязань: Гэлион, 1992.
Бруно Бабэ. Просто и ясно о Borland C++: Пер. с англ. - Москва: БИНОМ, 1994.
В.А. Скляров. Язык C++ и объектно-ориентированное программирование: Справочное издание. - Минск: Высшая школа, 1997.
Т. Фейсон. Объектно-ориентированное программирование на Borland C++ 4.5: Пер. с англ. - Киев: Диалектика, 1996.
Приложение б. Исходный текст программы.
##pragma once //Загрузка заголовков один раз
#ifndef _WIN32_WINNT //Определение минимальной версии Windows для работы программы
#define _WIN32_WINNT 0x0600
#endif
#include "targetver.h" // Заголовки
#include <stdio.h> //Заголовок для вывода данных на экран
#include <tchar.h> //
#include "stdafx.h" //
#include "conio.h" //
#include "windows.h" //Интерфейс Windows
#include <locale>
#define OUTPUT_FILE "./OUTPUT.TXT" //
#define STRUCT_FILE "./STRUCT.DAT"
void Input(); //Прототипы функции
void Output();
void Add();
void Del();
void StructSave();
void StructLoad();
struct info //Структура
{
int id; // определение перменных
char key1[100]; // тип Char содержит букву
char key2[100]; // Тип Char содержит массив букв
char key3[100];
};
struct node
{
info har;
node *next; //указатель на переменную next
};
node *first, *last, *list, *addM; //определение переменных
int n; //Определение переменной
void Input() // Функция Input()
{
char key;
// UI
system("cls"); // очищение экрана
printf ("** ВВОД ДАННЫХ: ** \n"); //вывод строки на экран
// Check
if (first!=NULL) {
printf("\nОшибка! Данные уже введены.");
getch();
return;
}
// Allocate
n = 1;
first = new node;
(*first).har.id = n;
// UI
printf ("\nВведите название: ");
scanf ("%s", (*first).har.key1);
printf ("\nВведие тип диска (CD/DVD): ");
scanf ("%s", (*first).har.key2);
printf ("\nВведите обьем диска: ");
scanf ("%s", (*first).har.key3);
// Merge
first->next = NULL;
last = first;
while (true) {
printf ("\nПродолжить? (Нажмите Y) ");
scanf("%s", &key);
if (key!='y' && key!='Y')
return;
// UI
system("cls");
printf ("** ВВОД ДАННЫХ: ** \n");
// Allocate
n++; //Инкрименция
list = new node;
(*list).har.id = n;
// UI
printf ("\nВведите название: ");
scanf ("%s", (*list).har.key1);
printf ("\nВведие тип диска (CD/DVD): ");
scanf ("%s", (*list).har.key2);
printf ("\nВведите обьем диска: ");
scanf ("%s", (*list).har.key3);
// Merge
list->next = NULL;
last->next = list;
last = list;
}
}
void Output() //функция вывода
{
// File init
FILE *fil;
fil = fopen(OUTPUT_FILE, "w");
fseek(fil, 0, SEEK_SET);
// UI
system("cls");
printf("+----------------------------------+\n");
printf("| # | Название | Тип | Обьем диска |\n");
printf("+----------------------------------+\n");
fprintf(fil, "+----------------------------------+\n");
fprintf(fil, "| # | Название | Тип | Обьем диска |\n");
fprintf(fil, "+----------------------------------+\n");
list = first;
while (list) {
printf("| %d | %s | %s | %s \n", (*list).har.id, (*list).har.key1, (*list).har.key2, (*list).har.key3);
fprintf(fil, "| %d | %s | %s | %s \n", (*list).har.id, (*list).har.key1, (*list).har.key2, (*list).har.key3); //вывод на экран переменных
// Merge
list = list->next;
}
printf("+---------------------------------+\n");
fprintf(fil, "+-----------------------------------+\n");
// File close
fclose(fil);
getch();
}
void Add()
{
int cur3;
// UI
system("cls");
printf ("** ДОБАВИТЬ ЗАПИСЬ: ** \n");
printf("\nВведите номер записи, после которого нужно добавить данные: ");
scanf("%d", &cur3);
// Jmp
last = first;
for (int j=0; j<cur3-1; j++)
last = last->next;
// Allocate
n++;
list = new node;
(*list).har.id=n;
// UI
printf ("\nВведите название: ");
scanf ("%s", (*list).har.key1);
printf ("\nВведие тип диска (CD/DVD): ");
scanf ("%s", (*list).har.key2);
printf ("\nВведите обьем диска: ");
scanf ("%s", (*list).har.key3);
list->next=last->next;
last->next=list;
printf ("Хорошо!\n");
getch();
}
void Del()
{
list = first;
while(list->next) {
last = list;
list = list->next;
}
last->next = NULL;
delete list;
printf("\nПоследняя запись удалена.");
getch();
}
void StructSave()//функция сохранения структур
{
FILE *fil;
fil = fopen(STRUCT_FILE, "w+b");
fseek(fil, 0, SEEK_END);
list = first;
while (list) {
fwrite(list, sizeof(info), 1, fil);
list = list->next;
}
fclose(fil);
}
void StructLoad()//Функция загрузки структуры
{
FILE *fil;
info h;
int res;
fil = fopen (STRUCT_FILE, "r+b"); // попытка открыть файл со структурой
if (!fil) {
printf("\nОшибка! Файл со структурой не существует! Загрузка невозможна.");
getch();
return;
}
fseek (fil, 0, SEEK_SET);
res = fread (&h, sizeof(info), 1, fil);
if (res == 1) {
first = new node;
(*first).har = h;
first ->next = NULL;
last = first;
}
do {
res = fread (&h, sizeof(info), 1, fil);
if (res == 1){
list = new node;
(*list).har = h;
list->next = NULL;
last->next = list;
last=list;
}
}
while (res == 1);
fclose(fil);
getch();
}
void main()
{
char globalKey;
// для корректного отображения кириллицы
SetConsoleCP(866);
SetConsoleOutputCP(866);
setlocale(LC_ALL, "russian_russia.1251");
while (true) {
// UI
system("cls");
printf("+----------------------------+\n");
printf("+- - - - ГЛАВНОЕ МЕНЮ - - - -+\n");
printf("+----------------------------+\n");
printf("+ Компакт-диски +\n");
printf("+----------------------------+\n");
printf("| 1. Ввод ------------------|\n");
printf("| 2. Вывод -----------------|\n");
printf("| 3. Загрузка структуры ----|\n");
printf("| 4. Сохранение структуры --|\n");
printf("| 5. Добавить запись -------|\n");
printf("| 6. Удалить запись --------|\n");
printf("+----------------------------+\n");
printf("| ESC. Выход ----------------|\n");
printf("+----------------------------+\n");
// Menu switch
globalKey = getch();
switch (globalKey)
{
case '1':
Input();
break;
case '2':
Output();
break;
case '3':
StructLoad();
break;
case '4':
StructSave();
break;
case '5':
Add();
break;
case '6':
Del();
break;
case 27:
exit(0);
}
}