Кафедра Информационных систем и программной инженерии
Федеральное государственное бюджетное образовательное учреждение
Высшего профессионального образования
«Владимирский государственный университет
имени Александра Григорьевича и Николая Григорьевича Столетовых»
(ВлГУ)
Кафедра Информационных систем и программной инженерии
Лабораторная работа №6
«Расширенные возможности языка программирования С#. Делегаты»
по дисциплине
«Технологии программирования»
Выполнил:
Студентка гр. ИСТ-114
Хомякова Т.Г.
Принял:
Вершинин В.В.
Владимир 2015
Цель работы: познакомиться с возможностями языка программирования С# для организации вызова метода с использованием делегатов.
1. Код программы.
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace Port1
{
public class Gruz
{
string whatis;
public string Whatis
{
get { return whatis; }
set { value = whatis; }
}
string country;
public string Country
{
get { return country; }
set { value = country; }
}
public Gruz(string w, string b)
{
whatis = w;
country = b;
}
}
interface Sudno
{
string Name { get; set; }
int Massa_gr { get; set; }
string Letsgo();
string Info();
}
class Nal : Sudno
{
int massa_gr;
public int Massa_gr
{
get { return massa_gr; }
set { massa_gr = value; }
}
string name;
public string Name
{
get { return name; }
set { name = value; }
}
public string Letsgo()
{
string s = "Наливное судно " + Name + " отправилось в путь!";
return s;
}
public string Info()
{
string s = Name + " " + Convert.ToString(Massa_gr);
return s;
}
}
class Suxogruz : Sudno
{
int massa_gr;
public int Massa_gr
{
get { return massa_gr; }
set { massa_gr = value; }
}
string name;
public string Name
{
get { return name; }
set { name = value; }
}
public string Letsgo()
{
string s = "Сухогруз " + Name + " отправилось в путь!";
return s;
}
public string Info()
{
string s = Name + " " + Convert.ToString(Massa_gr);
return s;
}
}
public abstract class Employee
{
string fio;
public string Fio
{
get { return fio; }
set { fio = value; }
}
int wage;
public int Wage
{
get { return wage; }
set { wage = value; }
}
int experience;
public int Experience
{
get { return experience; }
set { experience = value; }
}
public abstract string LetsTravel();
public string Dossier()
{
string s = Fio + " зарплата: " + Wage + " стаж работы " + Experience;
return s;
}
}
public class Sailors : Employee
{
public override string LetsTravel()
{
string s = "Отдать швартовы!";
return s;
}
}
public class Coptain : Employee
{
public override string LetsTravel()
{
string s = "В радио звучит весёлая песенка (Капитан, капитан, улыбнитесь...).Капитан " + Fio + " закуривает трубку.";
return s;
}
}
class Actions
{
static public string Premia(string p)
{
Random Pr = new Random();
p = p + "За отличные успехи награждаем Вас денюжкой " + Convert.ToString(Pr.Next(1000, 15000)) + Environment.NewLine;
return p;
}
static public string Otpusk(string d)
{
Random data = new Random();
d = d + "Начальство предлагает Вам отправиться в отпуск на срок " + Convert.ToString(data.Next(1, 15) + " дней!") + Environment.NewLine;
return d;
}
static public string Magic(ref string s)
{
Random x = new Random();
int p = x.Next(1,4);
string f = "C:\\Users\\Татьяна\\Documents\\Visual Studio 2015\\Projects\\Port1\\" + Convert.ToString(p)+".txt";
FileStream sr = new FileStream(f, FileMode.Open);
StreamReader Reader = new StreamReader(sr);
s= s+Environment.NewLine+Reader.ReadToEnd();
Reader.Close();
return s;
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Text;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Port1
{
public partial class Form1 : Form
{
public int l = 0;
public int kol=0;
public int k=0;
public int j = 0;
int terprnie = 0;
List<Sudno> Ship1 = new List<Sudno>();
List<Sailors> Sail = new List<Sailors>();
List<Coptain> Cop = new List<Coptain>();
List<Gruz> Gr = new List<Gruz>();
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
for (int i = 0; i < Cop.Count; i++)
{
textBox3.Text = textBox3.Text + Cop[i].Dossier() + Environment.NewLine;
textBox3.Text = textBox3.Text + Sail[i].Dossier()+ Environment.NewLine+ DateTime.Now.ToLongTimeString()+ Environment.NewLine;
}
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < Ship1.Count; i++)
{
textBox3.Text = textBox3.Text + Ship1[i].Info() + Environment.NewLine + DateTime.Now.ToLongTimeString() + Environment.NewLine;
}
}
private void button3_Click(object sender, EventArgs e)
{
textBox3.Text = "";
}
private void button4_Click(object sender, EventArgs e)
{
if ((textBox1.Text == "") || (textBox2.Text == "") )
{ MessageBox.Show("Введите корректные данные!"); }
else
{
if (k >= kol) { MessageBox.Show("Всего в наличии " + kol + " судна, все судна отчалили"); }
else
{
Gr[k] = new Gruz( textBox1.Text, textBox2.Text);
textBox3.Text = textBox3.Text + Ship1[k].Letsgo();
textBox3.Text = textBox3.Text + Sail[k].LetsTravel();
textBox3.Text = textBox3.Text + Cop[k].LetsTravel() + DateTime.Now.ToLongTimeString() + Environment.NewLine;
k++;
}
}
}
private void button5_Click(object sender, EventArgs e)
{
for (int i = 0; i < Gr.Count; i++)
{
if (Gr[i].Whatis != " ")
{ textBox3.Text = textBox3.Text + Ship1[i].Name+ " c " + Gr[i].Whatis + " на борту отправился в " + Gr[i].Country; }
else
{ textBox3.Text = textBox3.Text + " Корабль " + Ship1[i].Name + " находится в порту"+ Environment.NewLine; }
textBox3.Text=textBox3.Text+ DateTime.Now.ToLongTimeString() + Environment.NewLine;
}
}
private void textBox4_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(Char.IsDigit(e.KeyChar)))
{
e.Handled = true;
}
}
private void Form1_Load(object sender, EventArgs e)
{
StreamReader sr = File.OpenText("C:\\Users\\Татьяна\\Documents\\Visual Studio 2015\\Projects\\Port1\\Baza.txt"); //создали поток
while (true)
{
string str = sr.ReadLine();
if (str == null) { break; }
else
{
if (str[1] == 'N')
{
Nal ob1 = new Nal();
str = str.Substring(3);
ob1.Name = str.Substring(0, str.IndexOf(" "));
str = str.Substring(str.IndexOf(" ") + 1);
ob1.Massa_gr = Int32.Parse(str.Substring(0, str.IndexOf(" ")));
str = str.Substring((Convert.ToString(ob1.Massa_gr)).Length + 2);
Ship1.Add(ob1);
}
else
{
Suxogruz ob1 = new Suxogruz();
str = str.Substring(3);
ob1.Name = str.Substring(0, str.IndexOf(" "));
str = str.Substring(str.IndexOf(" ") + 1);
ob1.Massa_gr = Int32.Parse(str.Substring(0, str.IndexOf(" ")));
str = str.Substring((Convert.ToString(ob1.Massa_gr)).Length + 2);
Ship1.Add(ob1);
}
Coptain ob3 = new Coptain();
Sailors ob4 = new Sailors();
for (j = 1; j < 2; j++)
{
ob3.Fio = str.Substring(0, str.IndexOf("#"));
str = str.Substring(str.IndexOf("#") + 1);
ob3.Wage = Int32.Parse(str.Substring(0, str.IndexOf("#")));
str = str.Substring(str.IndexOf("#") + 1);
ob3.Experience = Int32.Parse(str.Substring(0, str.IndexOf("#")));
Cop.Add(ob3);
str = str.Substring(str.IndexOf("#") + 1);
ob4.Fio = str.Substring(0, str.IndexOf("#"));
str = str.Substring(str.IndexOf("#") + 1);
ob4.Wage = Int32.Parse(str.Substring(0, str.IndexOf("#")));
str = str.Substring(str.IndexOf("#") + 1);
ob4.Experience = Int32.Parse(str.Substring(0, str.IndexOf("#")));
Sail.Add(ob4);
kol++;
Gruz ob5 = new Gruz(" ", " ");
Gr.Add(ob5);
}
}
}
sr.Close();
}
bool f=true;
delegate string del (string s);
private void button6_Click(object sender, EventArgs e)
{
string s = " ";
del d;
del haljava1 = Actions.Otpusk;
del haljava2 = Actions.Premia;
del haljava3 = Actions.Magic;
d = haljava2;
d += haljava1;
d += haljava3;
Random r =new Random();
terprnie = r.Next(0, 10);
if ((terprnie < 8) && f)
{
textBox3.Text = textBox3.Text + d(s);
}
else
{
textBox3.Text = textBox3.Text + Environment.NewLine+"Терпение начальства лопнуло! Идите работать!" + Environment.NewLine;
f = false;
}
}
private void button7_Click(object sender, EventArgs e)
{
string s = "";
textBox3.Text=textBox3.Text+ Actions.Magic(s);
}
}
}
2.
Вывод: я ознакомилась с возможностями делегатов в С# и научилась применять их групповой вызов на практике.