
ТП_Лаб1_Алексеев
.docxФГОБУ ВПО «Санкт-Петербургский государственный университет телекоммуникации им. проф. М.А. Бонч-Бруевича»
Кафедра программной инженерии и цифровой вычислительной техники
ОТЧЁТ
по лабораторной работе №1 на тему: «Обработка данных в виде массива структур средствами
языка С++»
по дисциплине «Технологии программирования»
Выполнил студент группы ИКТ-306
Алексеев Р. Д.
Принял: преподаватель каф. ПИиВТ
Воронцова Ирина Олеговна
_____________________
-
Цель работы:
Научиться конструировать пользовательские типы данных — структуры, создавать массивы структур в динамической памяти, осуществлять ввод/вывод из файла.
-
Задание:
Написать программу, представляющую собой простейшую систему для управленияданными. Исходные данные для программы хранятся в текстовом файле в виде строк. Для создания файла с исходными данными следует использовать простейший текстовый редактор или редактор инструментальной среды разработки. Количество строк, требования к содержимому строки, способ обработки определяются вариантом задания. В соответствии со своим вариантом следует сконструировать структуру и на ее основе создать массив в динамической памяти.
-
Действия, выполняемые программой:
1. Чтение данных из файла в динамический массив.
2. Просмотр данных, хранящихся в массиве.
3. Корректировка данных заданной строки.
4. Вычисления.
5. Сохранение данных в новом файле (имя файла вводится с клавиатуры).
Алгоритм работы программы должен предусматривать однократное чтение данных с проверкой, многократное редактирование, просмотр записей, вычисления. Работа программы завершается после сохранения данных в новом файле.
-
Исходные данные:
2 вариант
Количество строк: 3. Столбцы: Номер школы, Название школы, Специализация, Количество учащихся. Вычислить общее количество учащихся.
-
Исходный код:
#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";
}