695_Poletajkin_A.N._Uchebno-metodicheskoe_posobie_Realizatsija_zhiznennogo_ch.1_
.pdf}
//Специальные операции с записями
//Заменяет указанную запсиь последней, остальные отбрасывает.
public PData ChangeCurrentToLastAndCut(int n)
{
lock (this)
{
ListNode currFirst = firstNode; ListNode currLast = lastNode; for (int i = 1; i < n; i++)
currFirst = currFirst.Next;
PData RemuveItem = currFirst.Data; if (firstNode != lastNode)
do
{
currLast = currFirst;
while (currLast.Next != lastNode) currLast = currLast.Next;
currLast.Data = lastNode.Data; ; currLast.Next = null;
lastNode = currLast;
} while (currLast != currFirst); return RemuveItem;
}
}
//Специальные операции с записями
//Заменяет указанную запись следующей по списку
ивовзращает
//удаленные данные.
public PData Left1(int n)
{
ListNode current = firstNode; for (int i = 1; i < n; i++) current = current.Next;
if (current.Next == null)
{
PData d = RemuveFromBack(); return d;
}
else
{
91
PData d = current.Data; current.Data = current.Next.Data; if (current.Next.Next == null)
{
current.Next = null; lastNode = current;
}
return d;
}
}
//Проверка спаска на пустоту public bool IsEmpty()
{
lock (this)
{
return firstNode == null;
}
}
//Модификация записи списка
public PData EditRow(PData newItem, int posItem)
{
ListNode current = firstNode; for (int i = 1; i < posItem; i++)
current = current.Next; PData d = current.Data; current.Data = newItem; return d;
}
public void ClearList()
{
firstNode = lastNode = null;
}
// Вывод ФИО пенсионеров
virtual public int PrintPension()
{
ListNode current = firstNode; Console.WriteLine("\nСписок сотрудников
пенсионного возраста:"); int n = 0; do
{
92
// Для мужчин
if ((current.Data.Pol.ToUpper() == "М") && (current.Data.Age >= 60))
{
Console.WriteLine("{0} {1} {2}", current.Data.Surname, current.Data.Firstname, current.Data.Lastname);
n++;
}
// Для женщин
if ((current.Data.Pol.ToUpper() == "Ж") && (current.Data.Age >= 55))
{
Console.WriteLine("{0} {1} {2}", current.Data.Surname, current.Data.Firstname, current.Data.Lastname);
n++;
}
current = current.Next;
} while (current != lastNode); return n;
}
// Вывод содержимого списка на консоль virtual public int Print(string s, bool pak)
{
lock (this)
{
if (IsEmpty())
{
Console.WriteLine("Пустой " + name); return 0;
}
Console.WriteLine(s + " " + name + ": "); ListNode current = firstNode;
int n = 0;
while (current != null)
{
Console.Write(" {0} {1} {2} {3} {4} {5} {6}\n", current.Data.TabNom, current.Data.Surname, current.Data.Firstname,
93
current.Data.Lastname, current.Data.Age, current.Data.Pol, current.Data.Adress);
current = current.Next; n++;
}
if (pak)
{
Console.WriteLine("\n"); Console.ReadKey();
}
return n;
}
}
// Вывод содержимого списка в файл virtual public bool Printf(string s)
{
if (IsEmpty())
{
Console.Write(" Список " + name + " пустой,
действие отменяется."); return false;
}
// FileInfo f = new FileInfo(@"D:\data" + s +
".txt");
StreamWriter fs = new StreamWriter(@"D:\data" + s + ".txt");
fs.WriteLine(name);
ListNode current = firstNode; while (current != null)
{
fs.Write("{0} {1} {2} {3} {4} {5} {6}" + Convert.ToChar(13), current.Data.TabNom, current.Data.Surname, current.Data.Firstname, current.Data.Lastname, current.Data.Age, current.Data.Pol, current.Data.Adress); current = current.Next;
}
fs.WriteLine();
fs.Close(); return true;
}
94
} // Конец класса List
//Определение класса EmptyListException public class EmptyListException :
ApplicationException
{
public EmptyListException(string name) : base("Список" + name + "пуст!")
{ }
}
} // Конец пространства имен LinkedListLibrary
Архив с полным текстом файла Program.cs:
List_Test.rar
Исполняемый файл приложения (двойной клик):
95
96
Учебное издание
Алексей Николаевич Полетайкин
Учебно-методическое пособие по выполнению
лабораторных работ по дисциплине «Программная инженерия»
Часть I. Реализация жизненного цикла программного обеспечения
Учебно-методическое пособие
Редактор И. В. Нечта
Подписано в печать 09.11.2016,
формат бумаги 60x84/16, отпечатано на ризографе, шрифт 10, п. л. 6,1, заказ № 150, тираж 25 экз.
Редакционно-издательский отдел СибГУТИ 630102, г. Новосибирск, ул. Кирова, 86, офис 105 тел. (383) 269-83-56
97