Вход

Разработка модели межпотокового взаимодействия на примере ведения банковских счетов (занесение вкладов и начисление процентов на вклады двумя группами потоков)(программирование)

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 73030
Дата создания 2014
Страниц 9
Мы сможем обработать ваш заказ (!) 27 декабря в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
2 980руб.
КУПИТЬ

Содержание

СОДЕРЖАНИЕ
Введение 5
1. Алгоритм решения задачи моделирования межпотокового взаимодействия на примере ведения банковских счетов. 6
1.1. Модель данных. 6
1.2. Алгоритм межпотокового взаимодействия. 6
1.3. Выбор языка программирования. 6
2. Руководство пользователя. 6
Заключение 7
Список используемой литературы 8
Приложение 1 Исходные тексты программы 9

Фрагмент работы для ознакомления

Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using System.Threading;namespace bank{///<summary>/// Interaction logic for MainWindow.xaml///</summary>publicpartialclassMainWindow : Window {Model model = newModel();public MainWindow() { InitializeComponent(); }privatevoid Window_Loaded(object sender, RoutedEventArgs e) {// Инициализациямодели model.Log = new System.Collections.ObjectModel.ObservableCollection<string>(); model.Deposits = new System.Collections.ObjectModel.ObservableCollection<ClientDeposit>();// добавлениедепозитов model.Deposits.Add(newClientDeposit("ИвановСергей")); model.Deposits.Add(newClientDeposit("СидоровИван")); model.Deposits.Add(newClientDeposit("ПетровАлексей"));this.DataContext = model; }privatevoid Window_Closing(object sender, System.ComponentModel.CancelEventArgs e){// при закрытии окна - остановить потоки stopThreads();}privatevoid start_Click(object sender, RoutedEventArgs e) {// запускпотоков model.IsStarted = true; model.ThreadStopped.Reset(); model.ThreadStop.Reset();Thread incomingsThread = newThread(newParameterizedThreadStart(IncomingsThread.Process)); incomingsThread.Start(model);Thread percentThread = newThread(newParameterizedThreadStart(PercentThread.Process)); percentThread.Start(model); }privatevoid stop_Click(object sender, RoutedEventArgs e) {// остановкапотоков stopThreads(); }void stopThreads(){// включение события остановки потоков model.ThreadStop.Set();// ожидание остановки model.ThreadStopped.WaitOne(); } }}ФайлMainWindow.xaml<Window x:Class="bank.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:bank" Title="Банковскиевклады" Height="350" Width="525" WindowState="Maximized" Loaded="Window_Loaded" Closing="Window_Closing"><Window.Resources><local:NegativeBoolConverter x:Key="nc"></local:NegativeBoolConverter></Window.Resources><Grid><Grid.RowDefinitions><RowDefinition Height="32"></RowDefinition><RowDefinition Height="*"></RowDefinition><RowDefinition Height="*"></RowDefinition></Grid.RowDefinitions><StackPanel VerticalAlignment="Center" Orientation="Horizontal" Margin="3"><Button x:Name="start" Width="100" Click="start_Click" IsEnabled="{Binding IsStarted,Converter={StaticResource nc}}">Старт</Button><Button Margin="3,0,0,0" x:Name="stop" Width="100" Click="stop_Click" IsEnabled="{Binding IsStarted}">Стоп</Button></StackPanel><GroupBox Header="Модель" Padding="5" Margin="3" Grid.Row="1"><DockPanel><StackPanel Orientation="Horizontal" Margin="3" DockPanel.Dock="Top"><TextBlock>Месяц:</TextBlock><TextBlock Margin="5,0,0,0" Text="{Binding Month}" FontWeight="Bold"></TextBlock></StackPanel><ListBox Background="LightGray" ItemsSource="{Binding Deposits}"><ListBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal"><TextBlock FontWeight="Bold" Text="{Binding Name}" Width="200"></TextBlock><TextBlock Text="Вклады:" Width="100"></TextBlock><TextBlock Text="{Binding Incomings,StringFormat=F2}" Width="100"></TextBlock><TextBlock Text="Проценты:" Width="100"></TextBlock><TextBlock Text="{Binding Percents,StringFormat=F2}" Width="100"></TextBlock><TextBlock Text="Депозит:" Width="100"></TextBlock><TextBlock Text="{Binding Deposit,StringFormat=F2}" Width="100"></TextBlock></StackPanel></DataTemplate></ListBox.ItemTemplate></ListBox></DockPanel></GroupBox><GroupBox Header="Отчет" Grid.Row="2"><ListBox ItemsSource="{Binding Log}"></ListBox></GroupBox></Grid></Window>ФайлModel.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ComponentModel;using System.Collections.ObjectModel;using System.Threading;namespace bank{///<summary>/// Основная модель данных///</summary>publicclassModel : INotifyPropertyChanged {privatebool isStarted;///<summary>/// Работают ли потоки///</summary>publicbool IsStarted {get {return isStarted; }set {if (value != isStarted) { isStarted = value; OnPropertyChanged("IsStarted"); } } }privateint month;///<summary>///Счетчикдней///</summary>publicint Month {get {return month; }set {if (value != month) { month = value; OnPropertyChanged("Month"); } } }///<summary>/// Клиенты с депозитами (формируется программно)///</summary>publicObservableCollection<ClientDeposit> Deposits {get;set; }///<summary>///Строкиотчета///</summary>publicObservableCollection<string> Log {get;set; }///<summary>/// Синхронизация остановки потока///</summary>publicManualResetEvent ThreadStop = newManualResetEvent(false);publicManualResetEvent ThreadStopped = newManualResetEvent(true);///<summary>/// Событие наступления нового месяца///</summary>publicAutoResetEvent NewMonthEvent = newAutoResetEvent(false);///<summary>/// Объект - критическая секция для синхронизации доступа к депозиту///</summary>publicobject DepositSync = newobject();///<summary>/// Событие изменения свойства модели///</summary>publiceventPropertyChangedEventHandler PropertyChanged;protectedvoid OnPropertyChanged(string propertyName) {if (PropertyChanged != null) PropertyChanged(this, newPropertyChangedEventArgs(propertyName));} }}ФайлNegativeBoolConverter.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Data;namespace bank{///<summary>/// Инвертирование флага - Конвертер для кнопок запуска///</summary>publicclassNegativeBoolConverter : IValueConverter {publicobject Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {return !((bool)value); }publicobject ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {return !((bool)value); } }}ФайлPercentThread.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace bank{publicstaticclassPercentThread {///<summary>/// Поток для зачисления процентов///</summary>///<param name="_model">Модельданных</param>publicstaticvoid Process(object _model) {Model model = _model asModel; model.Month = 0;// ОчисткаотчетаApp.Current.Dispatcher.Invoke((Action)(() => { model.Log.Clear(); }));while (!model.ThreadStop.WaitOne(500)){// Наступление нового месяцаif (model.Month == 36) break;else { model.Month++;// синхронизация депозитаlock (model.DepositSync){foreach (var deposit in model.Deposits){// начисление по одному проценту к депозиту на каждый депозитdecimal percent = deposit.Deposit * 0.01M; deposit.Percents += percent; deposit.Deposit += percent;// записьсобытиявотчетApp.Current.Dispatcher.Invoke((Action)(() => {string s = string.Format("Месяц {0}. Депозит {1}. Начисленыпроценты {2}", model.Month, deposit.Name, percent); model.Log.Insert(0, s); })); } }// синхронизацияпотокавкладов model.NewMonthEvent.Set();} }// сигнализация об окончании работы model.ThreadStopped.Set(); model.IsStarted = false; } }}

Список литературы

Список используемой литературы
1. Рихтер Дж. Windows для профессионалов / Пер. с англ. – 4-е изд. – СПб: Питер; М.: Издательско-торговый дом “Русская редакция”, 2003. – 752 с.
2. Прайс Д., Гандэрлой М. Visual C#.NET. Полное руководство.: Пер. с англ. – К.: ВЕК+, СПб.: КОРОНА принт, К.: НТИ, М.: Энтроп, 2004. – 960 с.
3. Мэтью Мак-Дональд WPF: Windows Presentation Foundation в .NET 4.5 с примерами на C# 5.0 для профессионалов, 4-е издание = Pro WPF 4.5 in C# 2012: Windows Presentation Foundation in .NET 4.5, 4th edition. — М.: «Вильямс», 2013. — 1024 с. — ISBN 978-5-8459-1854-3
4. Андерсон, Крис Основы Windows Presentation Foundation. — СПб.: БХВ-Петербург, 2008. — 432 с. — ISBN 978-5-9775-0265-8
5. Мэтью Мак-Дональд WPF: Windows Presentation Foundation в .NET 4.0 с примерами на C# 2010 для профессионалов = Pro WPF in C# 2010: Windows Presentation Foundation with .NET 4.0. — М.: «Вильямс», 2011. — С. 1024. — ISBN 978-5-8459-1657-0
6. Daniel M. Solis Illustrated WPF. — United States of America: Apress, 2009. — 508 с. — ISBN 978-1-4302-1910-1
Очень похожие работы
Найти ещё больше
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00457
© Рефератбанк, 2002 - 2024