ТооП / Тооп(5)
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«КАЗАНСКИЙ (ПРИВОЛЖСКИЙ) ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
НАБЕРЕЖНОЧЕЛНИНСКИЙ ИНСТИТУТ (ФИЛИАЛ)
КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ
ЛАБОРАТОРНАЯ РАБОТА №5
«Сохранение текущего состояние объектов в файлах»
По дисциплине
«Объектно-ориентированное программирование»
Выполнил:
Студент группы 2161121
Золотых С.В.
Проверил:
Илюхин А.Н.
Набережные Челны
2017
-
Цель работы
Получение навыков в разработке программ с использованием файлов, сохранения информации в них и работы с ними.
-
Постановка задачи
Создать объекты класса <имя класса> (класс и его поля задаются в соответствии с выбранным вариантом в лабораторной работе 1), причем объекты класса должны хранить данные о предметной области, связанные со свойствами предмета задания по варианту. Сохранить данные объекты в файле. Причем сохранить необходимо как отдельные объекты, так объект контейнерного типа, полученный в лабораторной работе 4. Считать сохраненные данные из файла и вывести их на экран.
№ варианта |
Имя класса |
Поле 1 |
Поле 2 |
Поле 3 |
3 |
Процессор |
Фирма производитель |
Количество ядер |
Тактовая частота |
-
Текст программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace ТООП_4_
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
class Processor_2//класс для частоты
{
public int n;
public double[] b;
public Processor_2(int n)
{
this.n = n;
b = new double[this.n];
}
public double this[int n]
{
get { return b[this.n-1]; }
set { b[this.n-1] = value; }
}
}
class Processor_3//класс для Фирмы
{
public string[] a;
public int n;
public Processor_3(int n)
{
this.n = n;
a= new string[this.n];
}
public string this[int n]
{
get { return a[this.n-1]; }
set { a[this.n - 1] = value; }
}
}
class Processor_4//класс для ядер
{
public int[] a;
public int n;
public Processor_4(int n)
{
this.n = n;
a = new int[this.n];
}
public int this[int n]
{
get { return a[this.n-1]; }
set { a[this.n-1] = value; }
}
}
private void button1_Click(object sender, EventArgs e)
{
int n = Convert.ToInt32(textBox4.Text);
Processor_3 A = new Processor_3(n);
for (int i = 0; i < A.n-1; i++) {
A[i] = textBox1.Text.Split(',')[i];
dataGridView1.Rows.Add(A[i]);
}
textBox1.Clear();//очищаем текстбокс
}
private void button2_Click(object sender, EventArgs e)
{
int n = Convert.ToInt32(textBox4.Text);
Processor_4 F = new Processor_4(n);
for (int i = 0; i < F.n-1; i++)
{
F[i] = Convert.ToInt32(textBox2.Text.Split(',')[i]);
dataGridView1.Rows[i].Cells[1].Value = F[i];
}
textBox2 .Clear();//очищаем текстбокс
}
private void button3_Click(object sender, EventArgs e)
{
int n = Convert.ToInt32(textBox4.Text);
Processor_2 B = new Processor_2(n);
for (int i = 0; i < B.n-1; i++)
{
B[i] = Convert.ToDouble(textBox3.Text.Split(';')[i]);
dataGridView1.Rows[i].Cells[2].Value = B[i]+" GHz";
}
textBox3.Clear();//очищаем текстбокс
textBox4.Clear();
}
private void button4_Click_1(object sender, EventArgs e)
{
Application.Exit();
}
private void button5_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Clear();
}
private void button6_Click(object sender, EventArgs e) //открытие файла для считывания из него информации
{
Stream myStream = null;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
StreamReader myread = new StreamReader(mystr);
string[] str;
int num = 0;
try
{
string[] str1 = myread.ReadToEnd().Split('\n');
num = str1.Count();
dataGridView1.RowCount = num;
for (int i = 0; i < num; i++)
{
str = str1[i].Split(' ');
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
try
{
dataGridView1.Rows[i].Cells[j].Value = str[j];
}
catch { }
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
myread.Close();
}
myStream.Close();
}
}
}
private void button7_Click(object sender, EventArgs e) //сохранение данных в файл
{
Stream myStream;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
StreamWriter myWrite = new StreamWriter(mystream);
try
{
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
myWrite.Write(dataGridView1.Rows[i].Cells[j].Value.ToString() + ' ');
}
myWrite.WriteLine();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
myWrite.Close();
}
myStream.Close();
}
}
}
}
}
-
Результат выполнения программы
Исходный файл с данными:
Открытие файла и перенос данных в таблицу:
Сохранение данных в файл:
Перезаписанный файл:
-
Блок-схема
-
Вывод
В связи с поставленной задачей был создан класс для заполнения таблицы на основе 4 лабораторной работы. Были реализованы кнопки сохранения данных в файл и открытия их из файла. Для этого были использованы потоки StreamReader и StreamWriter, а также диалоговые окна OpenFileDialog и SaveFileDialog для самого поиска файла, его открытия и сохранения данных. Помимо этого, были сгенерированы исключения для возможного нахождения пустого файла или его отсутствия. Чтение файла и перенос его данных был произведён с помощью метода ReadToEnd, а его запись с помощью методов Write и WriteLine.
Эта лабораторная работа помогла освоить начальную работу с текстовыми файлами.