.NET 3.x Разработать программу, которая позволяла бы создавать файл из заданных структур - C#
Формулировка задачи:
Создать пользовательский тип данных – структура, имя и поля которой
заданы в таблице. Разработать программу, которая позволяла бы создавать файл из таких
структур, добавлять в созданный файл новые данные и делать какую – либо выборку из
этого файла (какие данные выбирать из файла определяет сам студент).
Структура:
Структура
Ведомость зарплаты за текущий месяц
1. ФИО
2. Номер отдела
3. Табельный номер
4. Количество рабочих часов
5. Размер зарплаты
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
struct salary
{
public string name;
public int department;
public int number;
public int hours;
public double salary_amount;
};
namespace LabRab12
{
class LabRab12
{
static void Main(string[] args)
{
// вводим имя файла
Console.Write("Введите имя файла (включая расширение): ");
string fname = Console.ReadLine();
// создаем байтовый поток
FileStream file;
// ищем файл с именем fname
try
{
file = new FileStream(fname, FileMode.Open, FileAccess.Read);
}
catch(Exception exc)
{
// выводим сообщение об ошибке, если файл найти не удалось
Console.WriteLine(exc.Message);
Console.WriteLine("Создаем новый файл.");
// создаем файл с именем fname
file = new FileStream(fname, FileMode.Create);
}
Console.WriteLine("Выберите действие.");
Console.Write("1 - добавить данные; 2 - выборка из файла; 3 - показать весь файл; 0 - выход: ");
// выбор действия
int ans = Convert.ToInt32(Console.ReadLine());
do
{
switch (ans)
{
case 0:
return;
case 1:
// вводим данные в поля структуры
salary data = new salary();
Console.Write("ФИО: ");
data.name = Console.ReadLine();
Console.Write("Номер отдела: ");
data.department = Convert.ToInt32(Console.ReadLine());
Console.Write("Табельный номер: ");
data.number = Convert.ToInt32(Console.ReadLine());
Console.Write("Кол-во рабочих часов: ");
data.hours = Convert.ToInt32(Console.ReadLine());
Console.Write("Размер зарплаты: ");
data.salary_amount = Convert.ToDouble(Console.ReadLine());
// передаем в качестве аргумента символьному потоку вывода
// байтовый поток file для преобразования символов в байты
StreamWriter filestr = new StreamWriter(file);
// записываем данные в файл fname
filestr.WriteLine(data.name);
filestr.WriteLine(data.department);
filestr.WriteLine(data.number);
filestr.WriteLine(data.hours);
filestr.WriteLine(data.salary_amount);
filestr.Close();
break;
case 2:
Console.WriteLine("По каким данным делать выборку?");
Console.WriteLine("1 - ФИО; 2 - номер отдела; 3 - табельный номер;");
Console.Write("4 - кол-во рабочих часов; 5 - размер зарплаты: ");
int _ans = Convert.ToInt32(Console.ReadLine());
switch (_ans)
{
case 1:
// запрос на ввод ФИО
Console.Write("Введите ФИО полностью (например Иванов Иван Иванович): ");
string tmp_string1 = Console.ReadLine();
// передаем символьному потоку ввода
// в качестве аргумента байтовый поток
StreamReader filestr_in1 = new StreamReader(file);
salary tmp_data1 = new salary();
while (!filestr_in1.EndOfStream)
{
tmp_data1.name = filestr_in1.ReadLine();
tmp_data1.department = Convert.ToInt32(filestr_in1.ReadLine());
tmp_data1.number = Convert.ToInt32(filestr_in1.ReadLine());
tmp_data1.hours = Convert.ToInt32(filestr_in1.ReadLine());
tmp_data1.salary_amount = Convert.ToDouble(filestr_in1.ReadLine());
if (tmp_data1.name == tmp_string1)
{
Console.WriteLine(tmp_data1.name);
Console.WriteLine(tmp_data1.department);
Console.WriteLine(tmp_data1.number);
Console.WriteLine(tmp_data1.hours);
Console.WriteLine(tmp_data1.salary_amount);
}
}
filestr_in1.Close();
break;
case 2:
// запрос на ввод номера отдела
Console.Write("Введите номер отдела: ");
int department = Convert.ToInt32(Console.ReadLine());
// передаем символьному потоку ввода
// в качестве аргумента байтовый поток
StreamReader filestr_in2 = new StreamReader(file);
salary tmp_data2 = new salary();
while (!filestr_in2.EndOfStream)
{
tmp_data2.name = filestr_in2.ReadLine();
tmp_data2.department = Convert.ToInt32(filestr_in2.ReadLine());
tmp_data2.number = Convert.ToInt32(filestr_in2.ReadLine());
tmp_data2.hours = Convert.ToInt32(filestr_in2.ReadLine());
tmp_data2.salary_amount = Convert.ToDouble(filestr_in2.ReadLine());
if (tmp_data2.department == department)
{
Console.WriteLine(tmp_data2.name);
Console.WriteLine(tmp_data2.department);
Console.WriteLine(tmp_data2.number);
Console.WriteLine(tmp_data2.hours);
Console.WriteLine(tmp_data2.salary_amount);
}
}
filestr_in2.Close();
break;
case 3:
// запрос на ввод табельного номера
Console.Write("Введите табельный номер: ");
int number = Convert.ToInt32(Console.ReadLine());
// передаем символьному потоку ввода
// в качестве аргумента байтовый поток
salary tmp_data3 = new salary();
StreamReader filestr_in3 = new StreamReader(file);
while (!filestr_in3.EndOfStream)
{
tmp_data3.name = filestr_in3.ReadLine();
tmp_data3.department = Convert.ToInt32(filestr_in3.ReadLine());
tmp_data3.number = Convert.ToInt32(filestr_in3.ReadLine());
tmp_data3.hours = Convert.ToInt32(filestr_in3.ReadLine());
tmp_data3.salary_amount = Convert.ToDouble(filestr_in3.ReadLine());
if (tmp_data3.number == number)
{
Console.WriteLine(tmp_data3.name);
Console.WriteLine(tmp_data3.department);
Console.WriteLine(tmp_data3.number);
Console.WriteLine(tmp_data3.hours);
Console.WriteLine(tmp_data3.salary_amount);
}
}
filestr_in3.Close();
break;
case 4:
// запрос на ввод кол-ва рабочих часов
Console.Write("Введите кол-во рабочих часов: ");
int hours = Convert.ToInt32(Console.ReadLine());
// передаем символьному потоку ввода
// в качестве аргумента байтовый поток
salary tmp_data4 = new salary();
StreamReader filestr_in4 = new StreamReader(file);
while (!filestr_in4.EndOfStream)
{
tmp_data4.name = filestr_in4.ReadLine();
tmp_data4.department = Convert.ToInt32(filestr_in4.ReadLine());
tmp_data4.number = Convert.ToInt32(filestr_in4.ReadLine());
tmp_data4.hours = Convert.ToInt32(filestr_in4.ReadLine());
tmp_data4.salary_amount = Convert.ToDouble(filestr_in4.ReadLine());
if (tmp_data4.hours == hours)
{
Console.WriteLine(tmp_data4.name);
Console.WriteLine(tmp_data4.department);
Console.WriteLine(tmp_data4.number);
Console.WriteLine(tmp_data4.hours);
Console.WriteLine(tmp_data4.salary_amount);
}
}
filestr_in4.Close();
break;
case 5:
// запрос на ввод зарплаты
Console.Write("Введите зарплату: ");
int _salary = Convert.ToInt32(Console.ReadLine());
// передаем символьному потоку ввода
// в качестве аргумента байтовый поток
salary tmp_data5 = new salary();
StreamReader filestr_in5 = new StreamReader(file);
while (!filestr_in5.EndOfStream)
{
tmp_data5.name = filestr_in5.ReadLine();
tmp_data5.department = Convert.ToInt32(filestr_in5.ReadLine());
tmp_data5.number = Convert.ToInt32(filestr_in5.ReadLine());
tmp_data5.hours = Convert.ToInt32(filestr_in5.ReadLine());
tmp_data5.salary_amount = Convert.ToDouble(filestr_in5.ReadLine());
if (tmp_data5.salary_amount == _salary)
{
Console.WriteLine(tmp_data5.name);
Console.WriteLine(tmp_data5.department);
Console.WriteLine(tmp_data5.number);
Console.WriteLine(tmp_data5.hours);
Console.WriteLine(tmp_data5.salary_amount);
}
}
filestr_in5.Close();
break;
default:
Console.WriteLine("Неверный ввод.");
break;
}
break;
case 3:
// передаем символьному потоку ввода
// в качестве аргумента байтовый поток
StreamReader filestr_in = new StreamReader(file);
string line;
while (!filestr_in.EndOfStream)
{
// выводим строки, пока не достигнем конца файла
// filestr_in.EndOfStream возвращает true, если
// достигнут конец файла
line = filestr_in.ReadLine();
Console.WriteLine(line);
}
filestr_in.Close();
break;
default:
// при вводе неверного значения выводим сообщение об ошибке
Console.WriteLine("Неверный ввод.");
break;
}
Console.Write("1 - добавить данные; 2 - выборка из файла; 3 - показать весь файл; 0 - выход: ");
ans = Convert.ToInt32(Console.ReadLine());
} while (ans != 0);
file.Close();
}
}
}file = new FileStream(fname, FileMode.Append, FileAccess.Write);
Решение задачи: «.NET 3.x Разработать программу, которая позволяла бы создавать файл из заданных структур»
textual
Листинг программы
int i = 0;
while (++i < 3)
{
var fl = new FileStream(@"D:\tst.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
StreamReader filestr_in = new StreamReader(fl);
string line;
while (!filestr_in.EndOfStream)
{
// выводим строки, пока не достигнем конца файла
// filestr_in.EndOfStream возвращает true, если
// достигнут конец файла
line = filestr_in.ReadLine();
Console.WriteLine(line);
}
filestr_in.Close();
fl.Close();
}