Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ТП_Лаб1_Алексеев

.docx
Скачиваний:
92
Добавлен:
15.03.2015
Размер:
19.6 Кб
Скачать

ФГОБУ ВПО «Санкт-Петербургский государственный университет телекоммуникации им. проф. М.А. Бонч-Бруевича»

Кафедра программной инженерии и цифровой вычислительной техники

ОТЧЁТ

по лабораторной работе №1 на тему: «Обработка данных в виде массива структур средствами

языка С++»

по дисциплине «Технологии программирования»

Выполнил студент группы ИКТ-306

Алексеев Р. Д.

Принял: преподаватель каф. ПИиВТ

Воронцова Ирина Олеговна

_____________________

        1. Цель работы:

Научиться конструировать пользовательские типы данных — структуры, создавать массивы структур в динамической памяти, осуществлять ввод/вывод из файла.

        1. Задание:

Написать программу, представляющую собой простейшую систему для управленияданными. Исходные данные для программы хранятся в текстовом файле в виде строк. Для создания файла с исходными данными следует использовать простейший текстовый редактор или редактор инструментальной среды разработки. Количество строк, требования к содержимому строки, способ обработки определяются вариантом задания. В соответствии со своим вариантом следует сконструировать структуру и на ее основе создать массив в динамической памяти.

        1. Действия, выполняемые программой:

1. Чтение данных из файла в динамический массив.

2. Просмотр данных, хранящихся в массиве.

3. Корректировка данных заданной строки.

4. Вычисления.

5. Сохранение данных в новом файле (имя файла вводится с клавиатуры).

Алгоритм работы программы должен предусматривать однократное чтение данных с проверкой, многократное редактирование, просмотр записей, вычисления. Работа программы завершается после сохранения данных в новом файле.

        1. Исходные данные:

2 вариант

Количество строк: 3. Столбцы: Номер школы, Название школы, Специализация, Количество учащихся. Вычислить общее количество учащихся.

        1. Исходный код:

#include <iostream>

#include <fstream>

#include <windows.h>

#include <conio.h>

using namespace std;

int menuchoice;

struct School //опишем структурку Школа

{

int no; //номер

char name[16]; //название

char spec[16]; //специализация

int ppl; //кол-во учеников

};

int auto_input(struct School* S, int n);

void output_struct(struct School* S, int n);

void menu(); //ну хоть что-то без аргументов...

void pplcnt(struct School* S, int n);

void manage(struct School* S, int n);

void saveandexit(struct School* S, int n);

int main()

{

setlocale(LC_CTYPE,"Russian"); //включим поддержку русского

struct School* S;

S = new School[3];

cout << "Загрузка данных ... ";

struct School rd[3];

if (auto_input(rd, 3) == 0)

{

getch();

return(0);

}

cout << "завершена!" << endl; //автозагрузка из файла

do

{

menuchoice=0; //ну мало ли что

menu();

switch (menuchoice)

{

case 1: system("cls"); cout<<endl; output_struct(rd, 3); break; //просто вывод на экран

case 2: system("cls"); cout<<endl; manage(rd, 3); break; //построчное редактирование

case 3: system("cls"); cout<<endl; pplcnt(rd, 3); break; //полсчёт учащихся

case 9: system("cls"); cout<<endl; saveandexit(rd, 3); //сохранение

case 0: return(0); //просто выход

}

}

while (menuchoice != 9 or menuchoice != 0); //без этого было бы GOTO

delete[] S;

S=NULL;

}

void menu()

{

cout<<"\nВыбери действие:"<<endl;

cout<<"\n1:Вывести базу данных школ"<<endl;

cout<<"2:Редактировать базу данных школ"<<endl;

cout<<"3:Посчитать общее количество учеников"<<endl;

cout<<"\n9:Сохранить и выйти"<<endl;

cout<<"0:Выйти"<<endl;

cout<<"\nВаш выбор: ";

cin>>menuchoice;

}

int auto_input(struct School* S, int n)

{

ifstream base;

base.open("Schools.txt");

if (base)

{

int i;

for(i=0; i<n; i++)

{

base >> S[i].no;

base >> S[i].name;

base >> S[i].spec;

base >> S[i].ppl;

}

base.close();

}

else

{

cout << "\nФайл 'Schools.txt' не найден!\nНажмите любую клавишу для завершения\n";

return(0);

}

}

void output_struct(struct School* S, int n)

{

int i;

for(i=0; i<n; i++)

{

printf("%d %s %s %d \n", (S+i)->no, (S+i)->name, (S+i)->spec, (S+i)->ppl);

}

}

void manage(struct School* S, int n)

{

int line;

output_struct(S, n);

cout<<"\nВведите номер строки для редактирования (1-3): ";

cin>>line;

cout<<"\nВведите новые номер школы, название,\nспециальность и число обучающихся: "<<endl;

scanf("%d", &S[line-1].no);

scanf("%s", S[line-1].name);

scanf("%s", S[line-1].spec);

scanf("%d", &S[line-1].ppl);

system("cls");

cout<<endl;

output_struct(S, n);

}

void pplcnt(struct School* S, int n)

{

cout << "На данный момент во всех школах обучаются ";

cout << S[0].ppl + S[1].ppl +S[2].ppl << " человек." << endl;

}

void saveandexit(struct School* S, int n)

{

string temp;

int i;

cout << "Введите имя для сохраняемого файла:\n\n";

cin >> temp;

temp = temp +".txt";

ofstream save;

save.open(temp.c_str());

for(i=0; i<n; i++)

{

save << S[i].no << " ";

save << S[i].name << " ";

save << S[i].spec << " ";

save << S[i].ppl << endl;

}

save.close();

cout << "\nСохранение завершено! ("<<temp<<")\n";

}