Моделирование работы библиотеки на С#

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    165,93 Кб
  • Опубликовано:
    2014-02-11
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Моделирование работы библиотеки на С#

1. Техническое задание

Решается задача разработки программы моделирующей работу библиотеки. По условию программа должна содержать информацию о книгах и абонентах. Должна присутствовать возможность принять нового абонента или книги, удаление из библиотеки или редактирование информации о нем, а также должна быть функция поиска по базе книг и граждан, записанных в библиотеку. Осуществлять запись литературы на данного человека и сдача их в определенную дату. База касса должна быть сделана в Access и связана с программой на С#. Программа может быть написана на Visual С#.

Для начала определимся со средой разработки данного программного обеспечения. При работе пользователя с программой очень важную роль играет графический интерфейс и эргономика. Тем более, с программами такого рода работают операторы, обладающие пользовательскими знаниями персонального компьютера. Поэтому важным при разработке программы будет интуитивно понятный и эргономичный интерфейс. Также следует учесть, что работа будет вестись с базой данных Access. Важно определиться с элементами управления, которые обеспечат наглядное представление информации из базы данных, а также позволят с лёгкостью редактировать записи и удалять их. Данная программа не рассчитана на сетевой режим. Она будет корректно работать под операционной системой Windows c версией Framework v2.0.

2. Описание программы

2.1 Описание формы

2.1.1 Главное меню

На рисунке 1 изображена форма главного меню, в котором осуществляется выбор необходимой функции: поиск книги, поиск абонента, добавление или удаление книги, добавление или удаление абонента, запись книги на дом и сдача ее.

Рисунок 1 - Form 1 - Меню.

2.1.2 Поиск книги

Здесь осуществляет непосредственный поиск книги в данной библиотеке. Вводимые параметры: наименование, автор, издательство, год издания. Программа обнаруживает данную книгу и выводит ее в таблицу. Удобство заключается в том, что можно смотреть как по отдельным графам, так и вводить данные все вместе, чтобы осуществить более точный поиск.

Рисунок 2 - Form 2 - Поиск книги

2.1.3 Поиск абонента

В следующей форме, представленной на рисунке 3, показан поиск абонента. Библиотекарю необходимо ввести такие параметры как: фамилия, имя, отчество, дата рождения, город, улица, дом, квартира, данные паспорта, чтобы посмотреть записан ли данный гражданин в библиотеку. Если такой человек существует, то необходимо возвратиться в меню, для записи книги на дом. В обратном случае, можно добавить абонента.

Рисунок 3 - Form 3 - Поиск абонента

2.1.4 Добавление или удаление книги из библиотеки

В случае потери или книга в неудовлетворительном виде, ее можно списать или попросту удалить из базы данных. При привозе или заказе в библиотеку новых книг их так же можно добавить в список.

Рисунок 4 - Form 4 - Добавление или удаление книги из библиотеки.

2.1.5 Добавление или удаление абонента из библиотеки

В случае смены места жительства, или каких либо других причин возможно удаление абонента из библиотеки, а также изменение фамилии, номера паспорта и других параметров.

Рисунок 5 - Form 5 - Добавление или удаление абонента из библиотеки

2.1.6 Запись и сдача книг

В данном окне можно записать одну или несколько книг на определенный срок, предварительно найдя абонента и книгу, если ее количество экземпляров есть в данный момент в библиотеке.

Рисунок 6 - Form 6 - Запись и сдача книг

2.1.7 Должники

В данное окно заносятся граждане, кто не успел принести литературу вовремя. Окно с должниками вынесено отдельно для удобства библиотекаря, чтобы он смог позвонить и оповестить абонентов о задолженности.

Рисунок 7 - Form 7 - Должники

2.2 Общий алгоритм

При запуске данной программы открывается главное меню Form1_Load, при выполнении функций radioButton1, radioButton2, radioButton3, radioButton4, radioButton5, происходит выбор соответствующей формы. При помощи кнопок Button1_Click происходит переход на форму и Button2_Click реализуется выход из программы.

В Form2_Load подключается таблица с книгами. В Button1_Click выполняется переход в главное меню. В Button2_Click записывается в базу данных новая книга через значения textbox. В Button3_Click выполняется удаление строки базы данных.

В Form3_Load подключается таблица с абонентами. В Button1_Click выполняется переход в главное меню. В Button2_Click записывается в базу данных новый абонент через значения textbox. В Button3_Click выполняется удаление строки базы данных.

В Form4_Load подключается таблица с книгами. В Button1_Click выполняется переход в главное меню. В Button3_Click, Button4_Click, Button5_Click, Button6_Click, проверяет на совпадение значения textbox1, textbox2, textbox3, textbox4 соответственно и данных ячейки, при этом программа выделяет соответствующую ячейку. В Button2_Click проверяет на совпадение значения textbox1, textbox2, textbox3, textbox4 одновременно и выделяет соответствующую ячейку в базе данных.

В Form5_Load подключается таблица с абонентами. В Button1_Click выполняется переход в главное меню. В Button3_Click проверяет на совпадение значения Pass_TextChanged по номеру и серии паспортаи и выделяет соответствующую ячейку в базе данных. В Button2_Click проверяет на совпадение значения textbox1, textbox2, textbox3, textbox4, textbox5, textbox6, textbox7, DateOfBirth_ValueChanged одновременно и выделяет соответствующую ячейку в базе данных.

В Form6_Load подключается таблица с абонентами и книгами. В Button1_Click выполняется переход в главное меню. В Button7_Click проверяет на совпадение значения Pass_TextChanged по номеру и серии паспортаи выделяет соответствующую ячейку в базе данных. В Button8_Click проверяет на совпадение значения textbox5, textbox6, textbox7, textbox8, textbox9, textbox10, textbox11, DateOfBirth_ValueChanged одновременно и выделяет соответствующую ячейку в базе данных. В Button3_Click, Button4_Click, Button5_Click, Button6_Click, проверяет на совпадение значения textbox1, textbox2, textbox3, textbox4 соответственно и данных ячейки, при этом программа выделяет соответствующую ячейку.

В Button2_Click проверяет на совпадение значения textbox1, textbox2, textbox3, textbox4 одновременно и выделяет соответствующую ячейку в базе данных. В Button9_Click происходит запись книги на абонента через дату. В RetDate_ValueChanged выбирается определенная дата сдачи и заносится в таблицу базы данных. Уменьшает на единицу количество книг. В Button10_Click происходит удаление строки в базе данных о наличии книг на руках, увеличивается количество книг на единицу в библиотеке.

В Form7_Load можно посмотреть список должников, которые просрочили сдачу книг. Благодаря Button1_Click можно вернуться назад.

3. Исходный код

3.1 Form 1 - Главное меню

System;System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Text;System. Windows. Forms;WindowsApplication1

{partial class Form1: Form

{Form1 ()

{();

}void radioButton1_CheckedChanged (object sender, EventArgs e)

{

}void radioButton2_CheckedChanged (object sender, EventArgs e)

{

}void button1_Click (object sender, EventArgs e)

{(radioButton3. Checked == true)

{Hide();a =new Form2 ();. ShowDialog();. Close();

}(radioButton4. Checked == true)

{Hide();a =new Form3 ();. ShowDialog();. Close();

}(radioButton1. Checked == true)

{();a = new Form4 ();. ShowDialog();. Close();

}(radioButton2. Checked == true)

{();a = new Form5 ();. ShowDialog();. Close();

}(radioButton5. Checked == true)

{();a = new Form6 ();. ShowDialog();. Close();

}

}void button2_Click (object sender, EventArgs e)

{. Exit();

}void Form1_Load (object sender, EventArgs e)

{

}

}


3.2 Form 2 - Поиск книги

System;System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Text;System. Windows. Forms;System. Text. RegularExpressions;WindowsApplication1

{partial class Form4: Form

{Form4 ()

{();

}void dataGridView1_CellContentClick (object sender, DataGridViewCellEventArgs e)

{

}void Form4_Load (object sender, EventArgs e)

{

// TODO: This line of code loads data into the 'libDataSet1. Книги' table. You can move, or remove it, as needed..книгиTableAdapter. Fill (this.libDataSet1. Книги);

}void button1_Click (object sender, EventArgs e)

{();a = new Form1 ();. ShowDialog();. Close();

}void button2_Click (object sender, EventArgs e)

{filter = «»;(textBox1. Text!= «»)= «Наименование = '» + textBox1. Text + «'»;(textBox2. Text!= «»)

{(filter!= «»)+= «AND»;+= «Автор = '» + textBox2. Text + «'»;

}(textBox3. Text!= «»)

{(filter!= «»)+= «AND»;+= «Издательство = '» + textBox3. Text + «'»;

}(textBox4. Text!= «»)

{(Regex. IsMatch (textBox4. Text, «^\\d+$»))

{(filter!= «»)+= «AND»;+= «Год = '» + textBox4. Text + «'»;

}

}

книгиBindingSource. Filter = filter;

}void button3_Click (object sender, EventArgs e)

{filter = «»;(textBox1. Text!= «»)= «Наименование = '» + textBox1. Text + «'»;

книгиBindingSource. Filter = filter;

}void button4_Click (object sender, EventArgs e)

{filter = «»;(textBox2. Text!= «»)= «Автор = '» + textBox2. Text + «'»;

книгиBindingSource. Filter = filter;

}void button5_Click (object sender, EventArgs e)

{filter = «»;(textBox3. Text!= «»)= «Издательство = '» + textBox3. Text + «'»;

книгиBindingSource. Filter = filter;

}void button6_Click (object sender, EventArgs e)

{filter = «»;(textBox4. Text!= «»)(Regex. IsMatch (textBox4. Text, «^\\d+$»))+= «Год = '» + textBox4. Text + «'»;

книгиBindingSource. Filter = filter;

}

}

}

3.3 Form 3 - Поиск абонента

System;System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Text;System. Windows. Forms;System. Text. RegularExpressions;WindowsApplication1

{partial class Form5: Form

{Form5 ()

{();

}void Form5_Load (object sender, EventArgs e)

{

// TODO: This line of code loads data into the 'libDataSet1. Абоненты' table. You can move, or remove it, as needed..абонентыTableAdapter. Fill (this.libDataSet1. Абоненты);

}void button1_Click (object sender, EventArgs e)

{();a = new Form1 ();. ShowDialog();. Close();

}void label9_Click (object sender, EventArgs e)

{

}void button2_Click (object sender, EventArgs e)

{filter = «»;(textBox3. Text!= «»)= «Фамилия = '» + textBox3. Text + «'»;(textBox1. Text!= «»)

{(filter!= «»)+= «AND»;+= «Имя = '» + textBox1. Text + «'»;

}(textBox2. Text!= «»)

{(filter!= «»)+= «AND»;+= «Отчество = '» + textBox2. Text + «'»;

}(filter!= «»)+= «AND»;+= «[Дата рождения] = '» + DateOfBirth. Value. Date. ToString() + «'»;(textBox5. Text!= «»)

{(filter!= «»)+= «AND»;+= «Город = '» + textBox5. Text + «'»;

}(textBox6. Text!= «»)

{(filter!= «»)+= «AND»;+= «Улица = '» + textBox6. Text + «'»;

}(textBox7. Text!= «»)

{(Regex. IsMatch (textBox7. Text, «^\\d+$»))

{(filter!= «»)+= «AND»;+= «Дом = '» + textBox7. Text + «'»;

}

}

(textBox4. Text!= «»)

{(Regex. IsMatch (textBox4. Text, «^\\d+$»))

{(filter!= «»)+= «AND»;+= «Квартира = '» + textBox4. Text + «'»;

}

}

(Pass. Text!= «»)

{(filter!= «»)+= «AND»;+= «Паспорт = '» + Pass. Text + «'»;

}

}

абонентыBindingSource. Filter = filter;

}void button3_Click (object sender, EventArgs e)

{filter = «»;(Pass. Text!= «» && Regex. IsMatch (Pass. Text, «^\\d+$»))+= «Паспорт = '» + Pass. Text + «'»;

абонентыBindingSource. Filter = filter;

}

}

}

.4 Form 4 - Добавление или удаление книги

using System;System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Text;System. Windows. Forms;WindowsApplication1

{partial class Form2: Form

{Form2 ()

{();

}void textBox1_TextChanged (object sender, EventArgs e)

{

}void Form2_Load (object sender, EventArgs e)

{

// TODO: This line of code loads data into the 'libDataSet1. Книги' table. You can move, or remove it, as needed..книгиTableAdapter. Fill (this.libDataSet1. Книги);. Tables [«Книги»].PrimaryKey = new DataColumn[] {libDataSet1. Tables [«Книги»].Columns[0]};

}void label6_Click (object sender, EventArgs e)

{

}void button1_Click (object sender, EventArgs e)

{

книгиTableAdapter. Update(libDataSet1);();a = new Form1 ();. ShowDialog();. Close();

}void button2_Click (object sender, EventArgs e)

{(textBox1. Text!= «» && textBox2. Text!= «» && textBox3. Text!= «» && libDataSet1. Tables [«Книги»].Rows. Find (textBox1. Text) == null). Tables [«Книги»].Rows. Add (textBox1. Text, textBox2. Text, textBox3. Text, Year. Value, 0, BooksCountAll. Value);

}void button3_Click (object sender, EventArgs e)

{(dataGridView1. CurrentRow!= null)

{((int) dataGridView1. CurrentRow. Cells[4].Value == 0). Rows. RemoveAt (dataGridView1. CurrentRow. Index);. Show («Вы не можете удалить книгу, пока хотя бы один экземляр находится на руках у абонентов.»);

}

}void dataGridView1_CellContentClick (object sender, DataGridViewCellEventArgs e)

{

}void textBox4_TextChanged (object sender, EventArgs e)

{

}void dataSet1BindingSource_CurrentChanged (object sender, EventArgs e)

{

}

}

}

.5 Form 5 - Добавление или удаление абонента

using System;System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Text;System. Windows. Forms;System. Text. RegularExpressions;WindowsApplication1

{partial class Form3: Form

{Form3 ()

{();

}void Form3_Load (object sender, EventArgs e)

{

// TODO: This line of code loads data into the 'libDataSet1. Абоненты' table. You can move, or remove it, as needed..абонентыTableAdapter. Fill (this.libDataSet1. Абоненты);. Tables [«Абоненты»].PrimaryKey = new DataColumn[] {libDataSet1. Tables [«Абоненты»].Columns[8]};

}void label2_Click (object sender, EventArgs e)

{

}void button1_Click (object sender, EventArgs e)

{

абонентыTableAdapter. Update(libDataSet1);();a = new Form1 ();. ShowDialog();. Close();

}void button3_Click (object sender, EventArgs e)

{(dataGridView1. CurrentRow!= null)

{((int) dataGridView1. CurrentRow. Cells[9].Value == 0). Rows. RemoveAt (dataGridView1. CurrentRow. Index);. Show («Вы не можете удалить абонента, пока у него на руках находится хотя бы одна книга.»);

}

}void button2_Click (object sender, EventArgs e)

{(textBox1. Text!= «» && textBox2. Text!= «» && textBox3. Text!= «» && textBox5. Text!= «» &&. Text!= «» && Regex. IsMatch (Pass. Text, «^\\d+$») && libDataSet1. Tables [«Абоненты»].Rows. Find (Pass. Text) == null). Tables [«Абоненты»].Rows. Add (textBox3. Text, textBox1. Text, textBox2. Text, DateOfBirth. Value. Date. ToString(), textBox5. Text, textBox6. Text, HouseNum. Value, ApartNum. Value, Pass. Text, 0);

}void dateTimePicker1_ValueChanged (object sender, EventArgs e)

{

}void numericUpDown1_ValueChanged (object sender, EventArgs e)

{

}

}

}

3.6 Form 6 - Запись и сдача книг

System;System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Text;System. Windows. Forms;System. Text. RegularExpressions;WindowsApplication1

{partial class Form6: Form

{Form6 ()

}void button1_Click (object sender, EventArgs e)

{

взятые_книгиTableAdapter. Update(libDataSet1);

абонентыTableAdapter. Update(libDataSet1);

книгиTableAdapter. Update(libDataSet1);();a = new Form1 ();. ShowDialog();. Close();

}void label6_Click (object sender, EventArgs e)

{

}void Form6_Load (object sender, EventArgs e)

{

// TODO: This line of code loads data into the 'libDataSet1. Взятые_книги' table. You can move, or remove it, as needed..взятые_книгиTableAdapter. Fill (this.libDataSet1. Взятые_книги);.абонентыTableAdapter. Fill (this.libDataSet1. Абоненты);.книгиTableAdapter. Fill (this.libDataSet1. Книги);. Tables [«Взятые_книги»].PrimaryKey = new DataColumn[] {libDataSet1. Tables [«Взятые_книги»].Columns[0], libDataSet1. Tables [«Взятые_книги»].Columns[1]};

}void button8_Click (object sender, EventArgs e)

{filter = «»;(textBox9. Text!= «»)= «Фамилия = '» + textBox9. Text + «'»;(textBox11. Text!= «»)

{(filter!= «»)+= «AND»;+= «Имя = '» + textBox11. Text + «'»;

}(textBox10. Text!= «»)

{(filter!= «»)+= «AND»;+= «Отчество = '» + textBox10. Text + «'»;

}(filter!= «»)+= «AND»;+= «[Дата рождения] = '» + DateOfBirth. Value. Date. ToString() + «'»;(textBox8. Text!= «»)

{(filter!= «»)+= «AND»;+= «Город = '» + textBox8. Text + «'»;

}(textBox6. Text!= «»)

{(filter!= «»)+= «AND»;+= «Улица = '» + textBox6. Text + «'»;

}(textBox7. Text!= «»)

{(Regex. IsMatch (textBox7. Text, «^\\d+$»))

{(filter!= «»)+= «AND»;+= «Дом = '» + textBox7. Text + «'»;

}

}(textBox5. Text!= «»)

{(Regex. IsMatch (textBox5. Text, «^\\d+$»))

{(filter!= «»)+= «AND»;+= «Квартира = '» + textBox5. Text + «'»;

}

}(Pass. Text!= «»)

{(Regex. IsMatch (Pass. Text, «^\\d+$»))

{(filter!= «»)+= «AND»;+= «Паспорт = '» + Pass. Text + «'»;

}

}

абонентыBindingSource. Filter = filter;

}void button7_Click (object sender, EventArgs e)

{filter = «»;(Pass. Text!= «» && Regex. IsMatch (Pass. Text, «^\\d+$»))+= «Паспорт = '» + Pass. Text + «'»;

абонентыBindingSource. Filter = filter;

}void button2_Click (object sender, EventArgs e)

{filter = «»;(textBox1. Text!= «»)= «Наименование = '» + textBox1. Text + «'»;(textBox2. Text!= «»)

{(filter!= «»)+= «AND»;+= «Автор = '» + textBox2. Text + «'»;

}(textBox3. Text!= «»)

{(filter!= «»)+= «AND»;+= «Издательство = '» + textBox3. Text + «'»;

}(textBox4. Text!= «»)

{(Regex. IsMatch (textBox4. Text, «^\\d+$»))

{(filter!= «»)+= «AND»;+= «Год = '» + textBox4. Text + «'»;

}

}

книгиBindingSource. Filter = filter;

}void button3_Click (object sender, EventArgs e)

{filter = «»;(textBox1. Text!= «»)= «Наименование = '» + textBox1. Text + «'»;

книгиBindingSource. Filter = filter;

}void button4_Click (object sender, EventArgs e)

{filter = «»;(textBox2. Text!= «»)= «Автор = '» + textBox2. Text + «'»;

книгиBindingSource. Filter = filter;

}void button5_Click (object sender, EventArgs e)

{filter = «»;(textBox3. Text!= «»)= «Издательство = '» + textBox3. Text + «'»;

книгиBindingSource. Filter = filter;

}void button6_Click (object sender, EventArgs e)

{filter = «»;(textBox4. Text!= «»)(Regex. IsMatch (textBox4. Text, «^\\d+$»))+= «Год = '» + textBox4. Text + «'»;

книгиBindingSource. Filter = filter;

}void button9_Click (object sender, EventArgs e)

{[] myarray = new object[2] {dataGridView2. CurrentRow. Cells[8].Value. ToString(), dataGridView1. CurrentRow. Cells[0].Value. ToString()};(dataGridView2. CurrentRow!= null && dataGridView1. CurrentRow!= null && libDataSet1. Tables [«Взятые_книги»].Rows. Find(myarray) == null)

{book_row = (DataRowView) dataGridView1. CurrentRow. DataBoundItem;((int) book_row. Row[4] < (int) book_row. Row[5])

{. Tables [«Взятые_книги»].Rows. Add (dataGridView2. CurrentRow. Cells[8].Value. ToString(), dataGridView1. CurrentRow. Cells[0].Value. ToString(), RetDate. Value. Date. ToString());ab_row = (DataRowView) dataGridView2. CurrentRow. DataBoundItem;_row. Row[9] = (int) ab_row. Row[9] + 1;_row. Row[4] = (int) book_row. Row[4] + 1;

}

}

}void dataGridView2_CursorChanged (object sender, EventArgs e)

{

}void dataGridView2_SelectionChanged (object sender, EventArgs e)

{filter = «»;(dataGridView2. CurrentRow!= null)+= «Паспорт = '» + dataGridView2. CurrentRow. Cells[8].Value. ToString() + «'»;

взятыекнигиBindingSource. Filter = filter;

{

}void button10_Click (object sender, EventArgs e)

{(dataGridView3. CurrentRow!= null && dataGridView2. CurrentRow!= null && dataGridView1. CurrentRow!= null)

{ab_row = (DataRowView) dataGridView2. CurrentRow. DataBoundItem;_row. Row[9] = (int) ab_row. Row[9] - 1;ind = книгиBindingSource. Find («Наименование», dataGridView3. CurrentRow. Cells[0].Value. ToString());bo_row = (DataRowView) книгиBindingSource. List[ind];_row. Row[4] = (int) bo_row. Row[4] - 1;. Rows. RemoveAt (dataGridView3. CurrentRow. Index);

}

}void label5_Click (object sender, EventArgs e)

{

}void button11_Click (object sender, EventArgs e)

{();a = new Form7 ();. ShowDialog();. Close();

}

}

}

3.7 Form 7 - Должники

System;System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Text;System. Windows. Forms;WindowsApplication1

{partial class Form7: Form

{Form7 ()

{();

}void Form7_Load (object sender, EventArgs e)

{

// TODO: This line of code loads data into the 'libDataSet1. Абоненты' table. You can move, or remove it, as needed..абонентыTableAdapter. Fill (this.libDataSet1. Абоненты);

абонентыBindingSource. Filter = «[Кол-во книг] > 0»;

}void button1_Click (object sender, EventArgs e)

{();a = new Form6 ();. ShowDialog();. Close();

}

}

}

Заключение

программа библиотека поиск книга

В ходе проделанной работы была реализована программа, моделирующая работу библиотеки. Программа довольно проста в использовании и благодаря ей можно с легкостью проводить библиотекарские мероприятия, такие как: запись абонента в базу данных библиотеки, изменение информации о нем по его требованиям, запись в базу данных поступившей вновь в библиотеку книг, изменение информации о книге, запись книги на абонента, просмотр списка должников библиотеки. Разработанная программа может быть успешно внедрена в действующие библиотеки Вологодской области, что позволит существенно сократить рабочее время библиотекаря.

Список источников

1. Павловская, Т.А. C#. Программирование на языке высокого уровня. Учебник для вузов/ Т.А. Павловская. - СПб.: Питер, 2009. - 432 с., ил.

. Дарахвелидзе, П.Г. Программирование в Delphi 7/ П.Г. Дарахвелидзе, Е.П. Марков. - СПб.: БХВ-Петербург, 2003. - 784 с., ил.

. Троелсен, Эндрю Язык программирования C# 2005 и платформа.NET 2.0/ Эндрю Троелсен. - 3-е изд.: пер. с англ. М. «И.Д. Вильямс», 2007. - 1168 с., ил.

. Постолит, А.В. Visual Studio.NET: разработка приложений баз данных/ А.В. Постолит. - СПб.: БХВ-Петербург, 2003. - 544 с., ил.

. Верма, Р.Д. Справочник по функциям Win32 API/ Р.Д. Верма. - 2-е изд. - М.: Горячая линия-Телеком, 2005. - 551 с., ил.

Похожие работы на - Моделирование работы библиотеки на С#

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!