.NET 4.x Нужно написать программу В текстовом файле написан список дат (праздники) с полным названием - C#
Формулировка задачи:
В текстовом файле написан список дат (праздники) с полным названием. Формат такой:
01.01 Новый год
23.02 День защитника отечества
08.03 Международный женский день
Программа должна считывать данные из этого файла и показывать, какой праздник будет следующим
(относительно текущей даты), выводить дату и название праздника.
Решение задачи: «.NET 4.x Нужно написать программу В текстовом файле написан список дат (праздники) с полным названием»
textual
Листинг программы
public partial class Form1 : Form
{
List<Events> eventList = new List<Events>();
public Form1()
{
InitializeComponent();
dateTimePicker1.Value = new DateTime(2007, 1, 1);
}
private void button1_Click(object sender, EventArgs e)
{
DateTime end = new DateTime(2013,12,10);
for (DateTime i = new DateTime(2007,1,1); i < end; i = i.AddDays(1))
{
if (!(i.DayOfWeek.ToString() == "Saturday" || i.DayOfWeek.ToString() == "Sunday"))
{
MessageBox.Show(i.Date.ToString()+". "+ i.DayOfWeek.ToString());
}
}
}
#region dateTimePicker
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
monthCalendar1.SelectionStart = dateTimePicker1.Value;
monthCalendar2.SelectionStart = monthCalendar1.SelectionStart.AddMonths(1);
monthCalendar3.SelectionStart = monthCalendar2.SelectionStart.AddMonths(1);
monthCalendar4.SelectionStart = monthCalendar3.SelectionStart.AddMonths(1);
}
private void button3_Click(object sender, EventArgs e)
{
dateTimePicker1.Value = dateTimePicker1.Value.AddMonths(4);
}
private void button2_Click(object sender, EventArgs e)
{
dateTimePicker1.Value = dateTimePicker1.Value.AddMonths(-4);
}
#endregion
#region open&read&parse file
void readfile(string _filePath)
{
if (File.Exists(_filePath))
{
string line;
StreamReader file = null;
try
{
file = new StreamReader(_filePath, Encoding.GetEncoding(1251));
while (((line = file.ReadLine()) != null))
{
if (line != "")
{//Уберите комментарии и получите праздники только в будние дни
//if (!(DateTime.Parse(line.Split('|')[0]).DayOfWeek.ToString() == "Saturday" || DateTime.Parse(line.Split('|')[0]).DayOfWeek.ToString() == "Sunday" ))
eventList.Add(new Events(DateTime.Parse(line.Split('|')[0]), line.Split('|')[1]));
}
}
//print events
var items = from Events in eventList
orderby Events.time
select Events;
//clear list and fill the listbox
listBox1.Items.Clear();
groupBox2.Text = "List of events. Total events: "+items.Count();
foreach (var item in items)
{
listBox1.Items.Add(item.time.ToShortDateString() +" "+item.description);
}
}
finally
{
if (file != null)
file.Close();
}
}
}
private void openEventsFileToolStripMenuItem_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "Text|*.txt|All|*.*";
openFileDialog1.Title = "Please select an .txt file.";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
readfile(openFileDialog1.FileName);
}
}
#endregion
private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{
getNearestEvents(e.Start);
try
{
var ev = (from Events in eventList
where Events.time == e.Start
select Events).First();
label1.Text = ev.time.ToShortDateString();
richTextBox1.Text = ev.description;
}
catch (InvalidOperationException ex)
{
richTextBox1.Text = null;
label1.Text = "";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void getNearestEvents(DateTime dt)
{
try
{
var nearestEvents = from Events in eventList
where Events.time > dt
orderby Events.time
select Events;
listBox2.Items.Clear();
label2.Text = dt.ToShortDateString();
foreach (var item in nearestEvents)
{
listBox2.Items.Add(item.time.ToShortDateString() + " " + item.description);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void listBox2_DoubleClick(object sender, EventArgs e)
{
richTextBox1.Text = (sender as ListBox).Text.ToString();
}
}