Автор работы: Пользователь скрыл имя, 18 Марта 2013 в 16:38, курсовая работа
Цель работы – создание собственного проекта с открытым исходным кодом на портале CodePlex.
Объектом исследования данной работы является язык программирования C#, системы управления версиями, а также порта codeplex.com.
В ходе работы проводились:
создание проекта на C# с дальнейшей публикацией на CodePlex;
изучение аспектов системы управления версиями CodePlex.
Блокировка файла или группы файлов (для хранения признака блокировки нужен общедоступный и постоянно находящийся в онлайне центральный сервер). Это вынуждает применять специальные административные меры, если приходится работать с бинарными файлами, непригодными для автоматического слияния.
Слежение за определённым файлом или группой файлов (изменения файлов происходят на разных серверах, слияния и выделения ветвей происходят локально, об изменениях становится известно только при синхронизации, причём не всем разработчикам, а только тем, кто в данной синхронизации участвует).
Единая сквозная нумерация версий
системы и/или файлов, в которой
номер версии монотонно возрастает
(такая нумерация также
Периодическая синхронизация нескольких компьютеров под управлением одного разработчика (рабочего компьютера, домашнего компьютера, ноутбука и так далее). Использование распределённой системы избавляет от необходимости выделять один из компьютеров в качестве сервера, а синхронизация выполняется по необходимости, обычно при «пересадке» разработчика с одного устройства на другое.
Совместная работа над проектом небольшой территориально распределённой группы разработчиков без выделения общих ресурсов. Как и в предыдущем случае, реализуется схема работы без главного сервера, а актуальность репозиториев поддерживается периодическими синхронизациями по схеме «каждый с каждым».
Крупный распределённый проект, участники которого могут долгое время работать каждый над своей частью, при этом не имеют постоянного подключения к сети. Такой проект может использовать централизованный сервер, с которым синхронизируются копии всех его участников. Возможны и более сложные варианты — например, с созданием групп для работы по отдельным направлениям внутри более крупного проекта. При этом могут быть выделены отдельные «групповые» серверы для синхронизации работы групп, тогда процесс окончательного слияния изменения становится древовидным: сначала отдельные разработчики синхронизируют изменения на групповых серверах, затем обновлённые репозитории групп синхронизируются с главным сервером. Возможна работа и без «групповых» серверов, тогда разработчики одной группы синхронизируют изменения между собой, после чего любой из них (например, руководитель группы) передаёт изменения на центральный сервер.
В традиционной «офисной» разработке проектов, когда группа разработчиков относительно невелика и целиком находится на одной территории, в пределах единой локальной компьютерной сети, с постоянно доступными серверами, централизованная система может оказаться лучшим выбором из-за своей более жёсткой структуры и наличия функциональности, отсутствующей в распределённых системах (например, уже упомянутой блокировки). Возможность фиксировать изменения без их слияния в центральную ветвь в таких условиях легко реализуется путём выделения незавершённых работ в отдельные ветви разработки.
3 Руководство по созданию собственного проекта с открытым исходным кодом на портале CodePlex
Одним из самых удобных способов
создания проекта на CodePlex осуществляется
через использования программного продукта
Mercurial он же Hg —кроссплатформенная распределё
Наряду с традиционными
Утилита hg обладает компактным интерфейсом, и Mercurial считается более простой в освоении системой.
Ниже будут приведена
Шаг 1. Установка Mercurial (TortoiseHg). Данный
программный продукт можно скачать с официального
сайта разработчика http://tortoisehg.bitbucket.
Либо скачать данный программный
продукт с сайта, предоставляемого системой
CodePlex http://tortoisehg.codeplex.
Шаг 2. Создайте новый проект CodePlex.В мастере по созданию проекта вы увидите следующее (см. рисунок 1). Выберите Mercurial.
Рисунок 1 – Выбор источника контроля
Шаг 3. Клонирование репозитории.
Теперь необходимо создать клон репозитория. Этот
шаг обязателен, в противном случае продолжение
будет невозможно. Во-первых, создайте
новую папку на вашем локальном компьютере,
куда вы хотите загрузить клон репозитория.
Затем с помощью TortoiseHg
Рисунок 2 – Контекстное меню, пункт Clone
TortoiseHg будет предлагать выбор исходного пути. Для продолжения операции клонирования нам нужно получить URL из CodePlex (см. рисунок 3).
Рисунок 3 – Онлайн-меню Mercurial на портале CodePlex, указание URL для клонирования
Данный URL вставляем в диалоговое окно TortoiseHg в путь источника, как показано на рисунке 4.
Рисунок 4 – Диалоговое окно TortoiseHg, путь источника
Нажимаем на кнопку клонировать. После
того, как операция клонирования будет
завершена, диалог закроется,
и вы увидите зеленую
галочку, которая указывает синхронизацию Mercur
Рисунок 5 – Папка проекта на рабочем столе
Шаг 4. Добавление файлов в папку. Теперь вы можете просто добавить файлы проекта в эту папку. После добавления файлов в папку щёлкаем правой кнопкой мыши по данной папке для вызова контекста Windows Explorer меню, выбираем HG Commit. Команда HG Commit совершит передачу проекта в локальное хранилище TortoiseHg (см. рисунок 6).
Рисунок 6 – Контекстное меню, пункт Hg Commit
В диалоговом окне HG Commit, нужно прокомментировать, описать фиксацию (опять же это только для локального репозитория). Убедитесь в том, чтобы все файлы проекта прошли фиксацию, как показано на рисунке 7.
Рисунок 7 – Меню программы TortoiseHg, кнопка фиксации
Шаг 5. Проталкивание кода на CodePlex (см. рисунок 8).
Рисунок 8 – Меню программы TortoiseHg, кнопка проталкивания исходящих изменений на выбранный URL
Нажимаем на кнопку протолкнуть исходящие изменения на выбранный URL, вводим логин и пароль, который был использован при регистрации на CodePlex.
Теперь можно пройти на сайт и увидеть в личном кабинете созданный проект.
Заключение
В результате проделанной работы была написана программа на C#, которая строит график по заданным точкам, проекции к точкам (узлам) графика, а также делает прогнозы: неточный прогноз (график регрессии), прогноз методом аппроксимации. Данный проект создавался под системой управления проектами CodePlex, который является хостингом для проектов с открытым исходным кодом от Microsoft.
Было выявлено, что CodePlex позволяет совместно вести развитие программного обеспечения с открытым исходным кодом. В его состав входят wiki-страницы, контроль версий, основанный на Team Foundation Server, но доступный также через Subversion, форум, поддержка RSS.
В итоге можно сказать, что системы управления версиями облегчают работы с изменяющейся информацией. А также становится удобно хранить проекты с той гарантией, что они не будут потеряны с течением времени, то есть система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое.
Список использованных источников
(обязательное)
Министерство образования и науки Российской Федерации
ФГБОУ ВПО «Омский государственный технический университет»
Кафедра «Прикладная математика и фундаментальная информатика»
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
1. Введение
Программное изделие: Программа строит график по заданным точкам, проекции к точкам (узлам) графика, а также делает прогнозы: неточный прогноз (график регрессии), прогноз методом аппроксимации.
2. Функциональные требования
Данная программа будет
Данная программа будет иметь 3 способа определения летальной дозы ЛД100:
Данный проект должен быть создан под управлением системы контроля, то есть под системой управления версиями CodePlex.
3. Программная совместимость.
Гарантируется совместимость на уровне исходного кода со следующими операционными системами:
- Windows 7.
Заказчик (куратор) ______________________________
(подпись, дата)
Исполнитель: студент гр. ИТ-319 ______________________________ Д.В. Ковалев
(подпись, дата)
(обязательное)
1 |
using System; |
2 |
using System.Collections.Generic; |
3 |
using System.ComponentModel; |
4 |
using System.Data; |
5 |
using System.Drawing; |
6 |
using System.Drawing.Imaging; |
7 |
using System.Linq; |
8 |
using System.Text; |
9 |
using System.Windows.Forms; |
10 |
|
11 |
namespace ZedGraph |
12 |
{ |
13 |
public partial class MainForm : Form |
14 |
{ |
15 |
private GraphPane myPane = new GraphPane(); |
16 |
private int listCount; |
17 |
private PointPairList list1 = new PointPairList(); |
18 |
public MainForm() |
19 |
{ |
20 |
InitializeComponent(); |
21 |
zedGraphControl1. |
22 |
} |
23 |
void zedGraphControl1_ |
24 |
{ |
25 |
// Переименуем (переведем на русский язык) некоторые пункты контекстного меню |
26 |
menuStrip.Items[0].Text = "Копировать"; |
27 |
menuStrip.Items[1].Text = "Сохранить как картинку…"; |
28 |
menuStrip.Items[2].Text = "Параметры страницы…"; |
29 |
menuStrip.Items[3].Text = "Печать…"; |
30 |
menuStrip.Items[4].Text = "Показывать значения в точках…"; |
31 |
menuStrip.Items[7].Text = "Установить масштаб по умолчанию…"; |
32 |
// Некоторые пункты удалим |
33 |
menuStrip.Items.RemoveAt(5); |
34 |
menuStrip.Items.RemoveAt(5); |
35 |
} |
36 |
private void GraphCreate_Click(object sender, EventArgs e) |
37 |
{ |
38 |
CreateGraph(zedGraphControl1,n |
39 |
SetSize(); // и устанавливаем его положение и размер |
40 |
zedGraphControl1.Refresh(); |
41 |
} |
42 |
private void Form1_Resize(object sender, EventArgs e) |
43 |
{ |
44 |
SetSize(); |
45 |
} |
46 |
private void SetSize() |
47 |
{ |
48 |
zedGraphControl1.Location = new Point(15, 15); // задаем положение графика |
49 |
zedGraphControl1.Size = new Size(ClientRectangle.Width - 375, ClientRectangle.Height - 75); // размеры графика |
50 |
} |
51 |
private void CreateGraph(ZedGraphControl zgc, PointF mousePoint) |
52 |
{ |
53 |
GraphPane myPane = zgc.GraphPane; |
54 |
myPane.CurveList.Clear(); |
55 |
list1.Clear(); |
56 |
// Задаем название графика и сторон |
57 |
myPane.Title.Text = "График"; |
58 |
myPane.XAxis.Title.Text = "Доза"; |
59 |
myPane.YAxis.Title.Text = "Число погибших животных"; |
60 |
// ------------------------------ |
61 |
// строим график |
62 |
double x, y; |
63 |
List<LineItem> curves = new List<LineItem>(); |
64 |
foreach (DataGridViewRow row in dataGridView1.Rows) |
65 |
{ |
66 |
x = Convert.ToDouble(row.Cells[0]. |
67 |
y = Convert.ToDouble(row.Cells[1]. |
68 |
list1.Add(x, y); |
69 |
} |
70 |
curves.Add(new LineItem("График", list1, Color.Red, SymbolType.Diamond)); |
71 |
foreach (DataGridViewRow row in dataGridView1.Rows) |
72 |
{ |
73 |
var cell = row.Cells[2] as DataGridViewCheckBoxCell; |
74 |
if (Convert.ToBoolean(cell.Value) == true) |
75 |
{ |
76 |
PointPairList listx = new PointPairList(); |
77 |
x = Convert.ToDouble(row.Cells[0]. |
78 |
y = Convert.ToDouble(row.Cells[1]. |
79 |
listx.Add(0,y); |
80 |
listx.Add(x, y); |
81 |
listx.Add(x, 0); |
82 |
curves.Add(new LineItem("", listx, Color.Blue, SymbolType.Diamond)); |
83 |
} |
84 |
} |
85 |
PointPairList listProections = new PointPairList(); |
86 |
// Пересчитываем пиксели в координаты на графике |
87 |
// У ZedGraph есть несколько перегруженных методов ReverseTransform. |
88 |
listProections.Add(0, mousePoint.Y); |
89 |
listProections.Add(mousePoint. |
90 |
listProections.Add(mousePoint. |
91 |
curves.Add(new LineItem("График проекции", listProections, Color.Blue, SymbolType.Diamond)); |
92 |
// Выводим результат |
93 |
listCount = list1.Count; |
94 |
PointPairList list2 = new PointPairList(); |
95 |
list2.Add(list1[listCount - 1].X, list1[listCount - 1].Y); |
96 |
if (radioButton1.Checked && listCount>=2) |
97 |
{ |
98 |
x = (-(list1[listCount - 1].X - list1[listCount - 2].X) * Convert.ToInt32( |
99 |
(list1[listCount - 2].X * list1[listCount - 1].Y - list1[listCount - 1].X * list1[listCount - 2].Y)) / |
100 |
(list1[listCount - 2].Y - list1[listCount - 1].Y); |
101 |
list2.Add(x, Convert.ToInt32( |
102 |
curves.Add(new LineItem("График линейной аппроксимации", list2, Color.DarkGreen, SymbolType.Diamond, 2)); |
103 |
} |
104 |
if (radioButton2.Checked ) |
105 |
{ |
106 |
CreateGraphregress( zgc, mousePoint); |
107 |
} |
108 |
bool isGraphLabelVisible = true; |
109 |
int i = 0; |
110 |
foreach (LineItem u in curves) |
111 |
{ |
112 |
u.Label.IsVisible = isGraphLabelVisible; |
113 |
myPane.CurveList.Add(u); |
114 |
i++; |
115 |
} |
116 |
double bdl; |
117 |
bdl = list1[listCount - 2].X; |
118 |
listCount = list1.Count; |
119 |
SafeLine.Text = "0 -" + list1[0].X+" мг"; |
120 |
BitDeadyLine.Text = list1[0].X + "-" + bdl+ " мг"; |
121 |
DedyLine.Text = bdl+ "-" + list1[listCount-1].X + " мг"; |
122 |
zgc.AxisChange(); |
123 |
} |
124 |
private void xyAxis(ZedGraphControl zgc) |
125 |
{ |
126 |
myPane = zgc.GraphPane; |
127 |
myPane.XAxis.MajorGrid. |
128 |
myPane.XAxis.MajorGrid.DashOn = 10; |
129 |
myPane.XAxis.MajorGrid.DashOff = 5; |
130 |
myPane.YAxis.MajorGrid. |
131 |
myPane.YAxis.MajorGrid.DashOn = 10; |
132 |
myPane.YAxis.MajorGrid.DashOff = 5; |
133 |
myPane.YAxis.MinorGrid. |
134 |
myPane.YAxis.MinorGrid.DashOn = 1; |
135 |
myPane.YAxis.MinorGrid.DashOff = 2; |
136 |
myPane.XAxis.MinorGrid. |
137 |
myPane.XAxis.MinorGrid.DashOn = 1; |
138 |
myPane.XAxis.MinorGrid.DashOff = 2; |
139 |
} |
140 |
private void numericUpDown1_ValueChanged(ob |
141 |
{ |
142 |
GraphCreate.Enabled = false; |
143 |
int colCount = Convert.ToInt32( |
144 |
dataGridView1.RowCount = colCount; |
145 |
DataGridViewRow row = dataGridView1.Rows[colCount - 1]; |
146 |
row.Cells[0].Value = 0.0; |
147 |
row.Cells[1].Value = 0.0; |
148 |
if (numericUpDown1.Value != 1) |
149 |
{ |
150 |
GraphCreate.Enabled = true; |
151 |
} |
152 |
} |
153 |
private void Form1_Load(object sender, EventArgs e) |
154 |
{ |
155 |
GraphCreate.Enabled = false; |
156 |
numericUpDown1_ValueChanged(nu |
157 |
xyAxis(zedGraphControl1); |
158 |
} |
159 |
private void dataGridView1_CellValidating(o |
160 |
{ |
161 |
int newInteger; |
162 |
if(dataGridView1.CurrentCell. |
163 |
{ |
164 |
if (int.TryParse(e. |
165 |
{ |
166 |
e.Cancel = true; |
167 |
MessageBox.Show("Неверные данные, количество животных не должно превышать их максимального значения"); |
168 |
} |
169 |
} |
170 |
dataGridView1.Rows[e.RowIndex] |
171 |
double newDouble; |
172 |
if (dataGridView1.Columns[e. |
173 |
{ |
174 |
return; |
175 |
} |
176 |
if (dataGridView1.Rows[e. |
177 |
if (!double.TryParse(e. |
178 |
out newDouble) || newDouble < 0) |
179 |
{ |
180 |
e.Cancel = true; |
181 |
MessageBox.Show("the value must be a non-negative integer"); |
182 |
} |
183 |
} |
184 |
private void сохранитьКартинкуКакToolStripM |
185 |
{ |
186 |
zedGraphControl1.SaveAsBitmap( |
187 |
} |
188 |
private void выходToolStripMenuItem_Click(o |
189 |
{ |
190 |
Application.Exit(); |
191 |
} |
192 |
private void копироватьРисунокToolStripMenu |
193 |
{ |
194 |
bool isShowmessage = false; |
195 |
zedGraphControl1.Copy( |
196 |
} |
197 |
private void параметрыСтраницыToolStripMenu |
198 |
{ |
199 |
zedGraphControl1.DoPageSetup() |
200 |
} |
201 |
private void установитьМасштабПоУмолчаниюTo |
202 |
{ |
203 |
zedGraphControl1.ZoomOutAll( |
204 |
} |
205 |
private void печатьToolStripMenuItem_Click( |
206 |
{ |
207 |
zedGraphControl1.DoPrint(); |
208 |
} |
209 |
private void оПрограммеToolStripMenuItem_ |
210 |
{ |
211 |
aboutForm AboutForm = new aboutForm(); |
212 |
AboutForm.ShowDialog(); |
213 |
} |
214 |
private bool zedGraphControl1_ |
215 |
{ |
216 |
// Сюда будут записаны координаты в системе координат графика |
217 |
if (myPane.CurveList.Count > 0 || (myPane.CurveList.Count
== 2 && myPane.CurveList[0].Points[0]. |
218 |
{ |
219 |
double x, y; |
220 |
DataGridViewRow row = null; |
221 |
zedGraphControl1.GraphPane. |
222 |
|
223 |
CreateGraph(zedGraphControl1,n |
224 |
string text = string.Format("Доза препарата: {0} мг/кг; Число погибших животных: {1}", Math.Round(x,3) , (int)y); |
225 |
coardlabel.Text = text; |
226 |
zedGraphControl1.Invalidate(); |
227 |
} |
228 |
return true; |
229 |
} |
230 |
private void CreateGraphregress(ZedGraphCon |
231 |
{ |
232 |
double YS, XS, St, Sb, b0, b1; |
233 |
double x, y; |
234 |
GraphPane myPane = zgc.GraphPane; |
235 |
List<LineItem> curves = new List<LineItem>(); |
236 |
PointPairList regress = new PointPairList(); |
237 |
regress.Clear(); |
238 |
list1.Clear(); |
239 |
// myPane.CurveList.Clear(); |
240 |
// Задаем название графика и сторон |
241 |
myPane.Title.Text = "График"; |
242 |
myPane.XAxis.Title.Text = "Доза"; |
243 |
myPane.YAxis.Title.Text = "Число погибших животных"; |
244 |
// ------------------------------ |
245 |
// строим график |
246 |
foreach (DataGridViewRow row in dataGridView1.Rows) |
247 |
{ |
248 |
x = Convert.ToDouble(row.Cells[0]. |
249 |
y = Convert.ToDouble(row.Cells[1]. |
250 |
list1.Add(x, y); |
251 |
} |
252 |
listCount = list1.Count; |
253 |
double[] YR = new double[listCount]; |
254 |
YS = 0; |
255 |
XS = 0; |
256 |
for (int i = 0; i < listCount; i++) |
257 |
{ |
258 |
YS += list1[i].Y; |
259 |
XS += list1[i].X; |
260 |
} |
261 |
YS = YS / listCount; |
262 |
XS = XS / listCount; |
263 |
St = 0; |
264 |
Sb = 0; |
265 |
for (int i = 0; i < listCount; i++) |
266 |
{ |
267 |
St += (list1[i].X - XS) * (list1[i].Y - YS); |
268 |
Sb += (list1[i].X - XS) * (list1[i].X - XS); |
269 |
} |
270 |
b1 = St / Sb; |
271 |
b0 = YS - b1 * XS; |
272 |
for (int i = 0; i < listCount; i++) |
273 |
{ |
274 |
YR[i] = b0 + b1 * list1[i].X; |
275 |
} |
276 |
for (int i = 0; i < listCount; i++) |
277 |
{ |
278 |
regress.Add(list1[i].X, YR[i]); |
279 |
} |
280 |
curves.Add(new LineItem("График регрессии", regress, Color.DarkMagenta, SymbolType.Diamond,2)); |
281 |
bool isGraphLabelVisible = true; |
282 |
int t = 0; |
283 |
foreach (LineItem u in curves) |
284 |
{ |
285 |
u.Label.IsVisible = isGraphLabelVisible; |
286 |
myPane.CurveList.Add(u); |
287 |
t++; |
288 |
} |
289 |
zgc.AxisChange(); |
290 |
} |
291 |
private void button1_Click(object sender, EventArgs e) |
292 |
{ |
293 |
CreateGraphregress( |
294 |
SetSize(); // и устанавливаем его положение и размер |
295 |
zedGraphControl1.Refresh(); |
296 |
} |
297 |
} |
298 |
} |
1 Программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое.
2 Извлечение документа из хранилища и создание рабочей копии.
3 Синхронизация рабочей копии до некоторого заданного состояния хранилища. Чаще всего это действие означает обновление рабочей копии до самого свежего состояния хранилища. Однако при необходимости можно синхронизировать рабочую копию и к более старому состоянию, чем текущее.
4 Создание новой версии, фиксация изменений. Распространение изменений, сделанных в рабочей копии, на хранилище документов. При этом в хранилище создаётся новая версия изменённых документов.
5 Откладывание изменений. Предоставляемая некоторыми системами возможность создать набор изменений (changeset) и сохранить его на сервере без фиксации (commit’а). Отложенный набор изменений доступен на чтение другим участникам проекта, но до специальной команды не входит в основную ветвь. Поддержка откладывания изменений даёт возможность пользователям сохранять незавершённые работы на сервере, не создавая для этого отдельных ветвей.
6 Ветвь — направление разработки, независимое от других. Ветвь представляет собой копию части (как правило, одного каталога) хранилища, в которую можно вносить свои изменения, не влияющие на другие ветви. Документы в разных ветвях имеют одинаковую историю до точки ветвления и разные — после неё.
7 Слияние — объединение независимых изменений в единую версию документа. Осуществляется, когда два человека изменили один и тот же файл или при переносе изменений из одной ветки в другую.
Информация о работе Создание собственного проекта с открытым исходным кодом на портале CodePlex