Практический пример
Рассмотрим пример структуры, содержащей сведения о сотрудниках предприятия: табельный номер, фамилия, имя, отчество, возраст, пол, домашний адрес.
public struct PData
{
public long TabNom;
public string Surname;
public string Firstname;
public string Lastname;
public byte Age;
public string Pol;
public string Adress;
}
static PData InputData()
{
PData s;
Console.WriteLine("Введите поля новой записи:");
Console.Write("Табельный номер:");
s.TabNom = Convert.ToUInt32(Console.ReadLine());
Console.Write("Фамилия:\t");
s.Surname = Console.ReadLine();
Console.Write("Имя:\t\t");
s.Firstname = Console.ReadLine();
Console.Write("Отчество:\t");
s.Lastname = Console.ReadLine();
Console.Write("Возраст (лет):\t");
s.Age = Convert.ToByte(Console.ReadLine());
Console.Write("Пол (М/Ж):\t");
do
s.Pol = Console.ReadLine();
while ((s.Pol!=”М”)&&( s.Pol!=”Ж”))
Console.Write("Адрес:\t\t");
s.Adress = Console.ReadLine();
Console.WriteLine();
return s;
}
void Main()
{
int n = 35;
PData [] d = new PData[n];
for(int i=0;i<n;i++)
d[i] = InputData();
}
Рассмотрим пример организации цикла, в теле которого осуществляется ввод новой записи и сохранение ее в файл. Признаком прекращения дальнейшего ввода служит нажатие клавиши «минус». Блок-схема метода Main() показана на рис. 5.
Рисунок 5. Блок-схема метода обработки структуры данных
Команда для чтения юникода нажатой клавиши и его явное преобразование в ASCII-код (аргумент true метода ReadKey подавляет вывод на консоль символа нажатой клавиши, возвращаемого свойством KeyChar этого метода):
byte n = Convert.ToByte(Console.ReadKey(true).KeyChar);
ASCII-коды некоторых функциональных клавиш:
TAB 9
ENTER 13
ESC 27
SPASE 32
Задание
1. Составить программу на языке C# для обработки данных с помощью статических структур. В программе предусмотреть:
создание структурного типа PData для хранения заданного набора данных (см. табл. 11) и объявление структурной переменной типа PData;
создание файла данных с расширением .txt; имя которого следует предварительно запросить с клавиатуры;
создание пользовательской функции static PData InputData() для инициализации структурной переменной данными, введенными с клавиатуры (перед вводом очищать консоль);
создание пользовательской функции static void SaveData(PData s, StreamWriter fs) для добавления записи s в файл, представленный потоком fs;
NB: Запись должна выводиться в одну строку в виде значений полей (без подписей), разделенных пробелами или символами табуляции.
организацию цикла для выполнения заданного запроса действий пользователя (см. табл. 11), а также ввода новой записи (вызов функции InputData) и сохранения ее в файл (вызов функции SaveData);
вывод сообщения о полном имени файла с данными и о количестве сохраненных в него записей;
на всех этапах обработки обеспечить контроль исключительных ситуаций при работе с файлами.
2. Разработать модульный тест для ручного тестирования функции SaveData с сохранением результатов проверки корректности работы функции в файл test.log. Код теста оформить в виде пользовательской функции UnitTest(PData s, string source_file_name). В теле функции UnitTest сохранять только 1 (одну) переданную запись PData s, затем считывать последнюю строку из файла данных и сравнивать с PData s. Результаты сравнения выводить в файл test.log.
3. Разработать блок-схемы алгоритмов метода Main, функций InputData и SaveData.
4. В отчете представить: листинг программы, листинг метода тестирования, блок-схемы алгоритмов, распечатку полученного файла данных, выводы по работе.
Таблица 11. Варианты индивидуальных заданий
№ вар. | Набор данных | Запрос действий пользователя |
Каждая запись по штатному расписанию предприятия содержит следующие данные: номер цеха, фамилию и инициалы, профессию, разряд, стаж работы. | Для ввода следующей записи нажмите + | |
Сводки о выполнении плана содержат шифр продукции, наименование продукции, единицы измерения, план, фактическое выполнение. | Чтобы завершить ввод сводок, нажмите Escape | |
Экзаменационная сводная ведомость содержит номер зачетной книжки, фамилию и инициалы, оценку по четырем дисциплинам. | Для ввода следующей ведомости нажмите пробел | |
Записи о работающих с почасовой формой оплаты: номер цеха, табельный номер, фамилию и инициалы, размер ставки за час, количество отработанных часов. | Для добавления следующей записи нажмите Enter | |
Сведения о пациентах больницы: фамилия, имя, отчество, год рождения, пол, дата поступления, диагноз, номер палаты, дата выписки. | Чтобы прекратить ввод, нажмите пробел, иначе – любая клавиша | |
Сведения о сотрудниках вуза: фамилия, имя, отчество, факультет, кафедра, ученая степень, ученое звание, занимаемая должность, год рождения, пол, домашний адрес. | Чтобы добавить данные о новом сотруднике, введите 1 | |
Сведения о квартиросъемщиках: фамилия, имя, отчество, полный адрес, площадь квартиры (полная и полезная), количество комнат, количество проживающих в квартире человек. | Для завершения ввода данных о квартиросъемщиках введите 0 | |
Сведения об автомобилях включают следующие данные: страна изготовитель, марка, мощность, год выпуска, первоначальная цена. | Если хотите добавить сведения об автомобиле, то нажмите Enter | |
Сведения о книгах: наименование книги, автор, год издания, количество страниц, издательство, цена. | Чтобы ввести данные об очередной книге, нажмите пробел | |
Сведения о товарах, поступивших на склад, включающие: шифр, наименование товара, наименование поставщика, единицы измерения, стоимость одной единицы без НДС, количество. | Чтобы завершить приходование товаров, нажмите Escape | |
Обмен валют: ФИО клиента, валюты обмена, обменный курс, суммы обмена, табельный номер кассира | Чтобы добавить данные о новой операции, введите «A» | |
Сведения о приеме врача: ФИО врача, ФИО пациента, возраст пациента, жалоба, диагноз (код МКБ) | Для завершения ввода данных о приемах введите E | |
Сведения о ездках грузовиков: дата, модель грузовика, госномер, ФИО водителя, номер рейса, время выезда с базы, время возврата на базу, расход топлива | Если хотите добавить сведения о новой ездке, то нажмите Enter | |
Журнал регистрации проживающих в гостинице: ФИО клиента, паспортные данные, номер и класс номера вселения, дата заезда, дата выезда, ранний заезд, поздний выезд, сумма оплаты | Чтобы ввести данные об очередном клиенте, нажмите клавишу «Звездочка» | |
Сведения о меню столовой: название блюда, время приготовления, вес, цена, калорийность, признаки: вегетарианское, безлактозное, детское | Чтобы завершить ввод меню, нажмите клавишу End |
Дата добавления: 2021-12-14; просмотров: 399;