Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка1.docx
Скачиваний:
2
Добавлен:
31.08.2019
Размер:
463.32 Кб
Скачать

2.2 Состав и структура файлов данных

В данной программе используются три файла формата .txt для хранения данных: Criminalists.txt, Archive.txt, Groups.txt. Файл Criminalists.txt используется для хранения информации о «действующих» преступниках. На каждого преступника тут приходится 10 строк. В первой строке – фамилия, во второй – прозвище, в третьей – группировка, в четвертой – цвет глаз, в пятой – особые приметы, в шестой – рост, в седьмой – дата рождения, в восьмой – страна, гражданином которой является преступник; в девятой – последнее дело, в десятой – основная преступная профессия, в одиннадцатой фамилия следующего преступника соответственно и т.д.

В файле Archive.txt хранится информация о «Завязавших» преступниках. Структура этого файла идентична структуре файла Criminalists.txt.

В файле Groups.txt хранится информация о преступных группировках. Каждой группировке отведено две строчки: название и род деятельности.

3 Инструкция пользователя

Для работы с данным приложением скопируйте папку с решением в директиву, далее в папке \Interpol\bin\Debug запустите приложение Interpol.exe. На экране высветится основное окно программы.

В таблице в главном окне (рис. 1.1) отображаются все зарегистрированные преступники. Чтобы добавить туда данные о новом преступнике, необходимо кликнуть по меню «Изменить» ( Рис 1.2) . В выпадающем меню выбрать пункт «Добавить данные…». Возле названия пунктов меню прописаны комбинации клавиш для быстрого доступа к данному конкретному пункту. То есть для доступа к любой части меню достаточно нажать определенные клавиши на клавиатуре вместо того, чтобы кликать по названиям мышкой. В случае пункта меню «Добавить данные…» это клавиши Ctrl+F1.

После нажатия соответствующих кнопок или выбора меню добавления на экране появится окно добавления данных (рис. 1.4). Помните, что пока данное окно открыто вернутся в главное окно невозможно. Чтобы зарегистрировать нового преступника заполните все (важно: абсолютно все) поля так, как это показано в примере на рисунке 1.4. Обратите внимание, что данные в пунктах «ФИО», « Прозвище», «Особые приметы», «Последнее дело» и «Основная профессия» не проверяются приложением, в то время как «Цвет глаз», «Группировка», «Рост», «Дата Рождения» и «Гражданство» заполняются при помощи выпадающих списков и никак иначе. Дата рождения преступника задано в формате ДД.ММ.РРРР, то есть из первого списка следует выбрать день рождения, из второго – месяц, из третьего – год. Внимательно следите за правильностью задания даты – приложение несовершенно и не проверяет реалистичность выбранного вами дня рождения ( т.е. вполне возможно, что приложение не обратит внимание на 31 апреля или 30 февраля). После окончания ввода данных нажмите кнопку «Save» для сохранения преступника в базе. Если же Вы передумали, нажмите кнопку «Cancel» для выхода из окна регистрации.

Для редактирования информации об уже зарегистрированном преступнике выделите его в таблице и в меню «Изменить» выберите пункт «Изменить данные» или нажмите комбинацию клавиш Ctrl+F2. Появится уже знакомое Вам окно регистрации нового преступника, но с одним отличием: все поля в нем уже заполнены. Изменяем данные так же, как и при регистрации нового преступника, далее действуем точно так же.

Чтобы удалить преступника выделяем его в таблице, далее заходим в меню «Изменить» и выбираем там пункт «Удалить данные» или же нажимаем кнопку Del. Заметим, что удаление преступника из базы приемлемо только в случае его смерти, в противном случае следует перенести его в архив. О том, как это делается, будет говориться позднее. Если Вы уверены в необходимости удаления данных, подтвердите это, нажав кнопку «Да» в появившемся диалоговом окне. Тогда вся информация о преступнике будет полностью удалена из вашего компьютера.

Если преступник «завязал», то есть перестал заниматься преступной деятельностью, данные о нем следует перенести в архив. Для этого в меню «Архив» (рис 1.3) выберите пункт «Перенести в архив» или нажмите Ctrl+F4. В появившемся диалоговом окне подтвердите необходимость перенесения данных для удачного завершения операции. После этого информация о преступнике удалится из основной базы данных, а значит – и из главного окна, и добавится в базу архива.

Чтобы просмотреть архив, в меню «Архив» выберете пункт «Открыть архив». Откроется окно архива ( рис 1.5), в котором Вы можете удалить данные ( для этого выделите в таблице преступника и нажмите кнопку «Удалить» в меню «Изменить»), обновить окно архива ( в меню выбрать пункт «Обновить»), а так же вернуть преступника в основную базу, если он вновь занялся криминальной деятельностью ( в пункте меню «Изменить» выберите «Извлечь»). Чтобы завершить работу с архивом выберите пункт «Сохранить» в меню (если Вы хотите сохранить изменения) , после чего нажмите «Выход».

Для работы с преступными группировками в меню «Изменить» главного окна выберите пункт « Преступные группировки». На экране появится окно изменения данных о группировках (рис. 1.7). В нем в списке справа находятся все зарегистрированные преступные группировки, в списке слева – преступники, состоящие в выбранной группировке. По умолчанию в списке групп есть пункт «none», он указывает на то, что человек является одиночкой. Для добавления новой преступной организации внесите ее название и род деятельности в соответствующие поля сверху окна, а затем нажмите кнопку “Save”. После этого зарегистрированная Вами группировка появится в соответствующем списке. При выборе группировки возле списка высветится род ее деятельности. Чтобы удалить группировку, выберите ее в списке, а потом нажмите кнопку «Удалить преступную группировку». После удаления у всех действующих преступников, до этого состоящих в этой группировке, в поле «Группировка» появится надпись «none». После завершения работы в этом окне нажмите кнопку «Cancel», если не хотите сохранять изменения, и кнопку «Save», а затем «Cancel», если хотите.

Если у Вас возникнут какие-то вопросы по работе приложения, в меню «About» выберите пункт «Справка», а если Вы хотите узнать информацию о данном приложении - пункт «Info».

ВЫВОДЫ

Данный курсовой проект является аналогом программы, использующейся в спец.службах для работы с данными о преступниках. В нем реализованы разнообразные методы, такие как добавление данных, их изменение, удаление, перенос данных из одной базы в другую, синхронизация работы нескольких баз. В ходе курсовой работы были изучены некоторые аспекты объектно-ориентированного программирования, создания оконных приложений на языке C# и разработки приложений в среде .NET . При оформлении курсовой работы были получены навыки оформления программной документации, а также большой практический опыт работы в Visual Studio 2010, Microsoft Word, Paint. Однако работа велась не с базами данных как таковыми (такими как MySQL), в качестве них выступали текстовые файлы, что наталкивает на мысль о дальнейшем совершенствовании и доработке программы.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Шилдт Г. Язык программирования С# 4.0. Специальное издание.-М., СПб.:”Издательство БИНОМ” – „Невский Диалект”, 2001г.-1099 с.

  2. Эндрю Троелсен. C# и платформа .NET. Библиотека программиста. – СПб.: Питер, 2005. – 796 с.

  3. Бондарев В.М., Объектно-ориентированное программирование. Учебное пособие. – Харьков: СМИТ, 2004г. – 294 с.

ПРИЛОЖЕНИЕ А

Исходный код программы

  1. Класс Archive-методы для работы с архивом

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Cartoteka

{

public class Archive

{

CrimeList crimpast;

public CrimeList Crimpast { get { return crimpast; } }

public Archive()

{

crimpast = ReadWrite.LoadArchive();

}

public void Save()

{

ReadWrite.SaveArchive(Crimpast);

}

public void Delete(Criminal crime)

{

Crimpast.Remove(crime);

}

public void SaveCr(Criminal cr)

{

Crimpast.Add(cr);

}

}

}

  1. Класс CrGroup – преступные группировки

using System;

namespace Cartoteka

{

public class CrGroup

{

string title;

string descr;

public string Title

{ get { return title; } set { title = value; } }

public string Descr

{ get { return descr; } set { descr = value; } }

public CrGroup() { }

public CrGroup(string title,string descr)

{

this.title = title;

this.descr = descr;

}

}

}

  1. Класс CrimeList – реализует список преступников

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Cartoteka

{

public class CrimeList : List<Criminal>

{

}

}

  1. Класс Criminal – используется для задания преступника и всех его характеристик

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Cartoteka

{

public partial class Criminal

{

string FIO;

string nick;

string group;

string eyecolor;

string signs;

string incr;

string birth;

string country;

string lastcrime;

string prof;

public string Fio { get { return FIO; } set { FIO = value; } }

public string Nick { get { return nick; } set { nick = value; } }

public string Group { get { return group; } set { group = value; } }

public string Eyecolor { get { return eyecolor; } set { eyecolor = value; } }

public string Signs { get { return signs; } set { signs = value; } }

public string Incr { get { return incr; } set { incr = value; } }

public string Birth { get { return birth; } set { birth = value; } }

public string Country { get { return country; } set { country = value; } }

public string LastCrime { get { return lastcrime; } set { lastcrime = value; } }

public string Prof { get { return prof; } set { prof = value; } }

public Criminal() { }

public Criminal(string FIO, string nick, string group, string eyecolor, string signs, string incr, string birth, string country, string lastcrime, string prof)

{

this.FIO = FIO;

this.nick = nick;

this.group = group;

this.eyecolor = eyecolor;

this.signs = signs;

this.incr = incr;

this.birth = birth;

this.country = country;

this.lastcrime = lastcrime;

this.prof = prof;

}

}

}

  1. Класс GroupList – реализует список группировок

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Cartoteka

{

public class GroupsList: List<CrGroup>

{

public string[] GetTitles() {

string[] s = new string[Count + 1];

s[0] = "none";

int i = 1;

foreach (CrGroup p in this) {

s[i++] = p.Title;

}

return s;

}

public bool ValidateTitle(string name) {

if (name == null || name.Trim() == "")

return false;

int count = 0;

foreach (CrGroup p in this) {

if (p.Title == name) {

count++;

}

}

return count < 2;

}

}

}

  1. Класс Interpol – основной класс программы

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Cartoteka

{

public class Interpol

{

CrimeList criminals;

GroupsList groups;

bool IsChanged;

public CrimeList Criminals { get { return criminals; } }

public GroupsList Groups { get { return groups; } set { groups = value; } }

public bool isChanged { get { return IsChanged; } }

public Interpol()

{

criminals = ReadWrite.LoadCrimeList();

groups = ReadWrite.LoadGroupList();

}

public void SaveCrimes()

{

ReadWrite.SaveCrimeList(Criminals);

IsChanged = false;

}

public void SaveGroups()

{

ReadWrite.SaveGroupsList(Groups);

}

public void DeleteCrime(Criminal crime)

{

Criminals.Remove(crime);

IsChanged = true;

}

public void ChangeCrime(Criminal crime)

{

IsChanged = true;

}

public void AddCrime(Criminal crime)

{

Criminals.Add(crime);

IsChanged = false;

}

public CrimeList Seach(Seacher seacher)

{

CrimeList findings = new CrimeList();

foreach (Criminal crimes in Criminals)

{

if (crimes.Fio.ToLower().Contains(seacher.Fio)

&& crimes.Nick.ToLower().Contains(seacher.Nick) && crimes.Eyecolor.ToLower().Contains(seacher.Eyecolor)

&& crimes.Signs.ToLower().Contains(seacher.Signs) && crimes.Incr.ToLower().Contains(seacher.Incr)

&& crimes.Birth.ToLower().Contains(seacher.Birth) && crimes.Country.ToLower().Contains(seacher.Country)

&& crimes.LastCrime.ToLower().Contains(seacher.LastCrime) && crimes.Prof.ToLower().Contains(seacher.Prof))

findings.Add(crimes);

}

return findings;

}

public void Obnov()

{

groups = ReadWrite.LoadGroupList();

}

}

}

  1. Класс ReadWrite – реализует считывание информации из файлов и сохранение ее в файлы

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace Cartoteka

{

static class ReadWrite

{

const string CrimeFile = @".\Data\Criminalists.txt";

const string GroupsFile = @".\Data\Groups.txt";

const string ArchiveFile = @".\Data\Archive.txt";

public static CrimeList LoadCrimeList()

{

CrimeList crimes = new CrimeList();

try

{

using (TextReader reader = new StreamReader(CrimeFile, Encoding.Default))

{

int n = int.Parse(reader.ReadLine());

for (int i = 0; i < n; ++i)

{

string FIO = reader.ReadLine();

string Nick = reader.ReadLine();

string group = reader.ReadLine();

string eyecolor=reader.ReadLine();

string signs=reader.ReadLine();

string incr = reader.ReadLine();

string birth=reader.ReadLine();

string country=reader.ReadLine();

string lastCrime=reader.ReadLine();

string prof=reader.ReadLine();

crimes.Add(new Criminal(FIO, Nick,group,eyecolor, signs,incr, birth, country, lastCrime, prof));

}

}

}

catch (Exception exept)

{

throw new ApplicationException("File " + CrimeFile + " could not be read.", exept);

}

return crimes;

}

public static void SaveCrimeList(CrimeList crimes)

{

try

{

using (TextWriter writer = new StreamWriter(CrimeFile, false, Encoding.Default))

{

writer.WriteLine(crimes.Count);

foreach (Criminal criminals in crimes)

{

writer.WriteLine ( criminals.Fio);

writer.WriteLine ( criminals.Nick);

writer.WriteLine ( criminals.Group);

writer.WriteLine ( criminals.Eyecolor);

writer.WriteLine ( criminals.Signs);

writer.WriteLine ( criminals.Incr);

writer.WriteLine ( criminals.Birth);

writer.WriteLine ( criminals.Country);

writer.WriteLine ( criminals.LastCrime);

writer.WriteLine ( criminals.Prof);

}

}

}

catch (Exception exept)

{

throw new ApplicationException("File " + CrimeFile + " could not be wrote.", exept);

}

}

public static GroupsList LoadGroupList()

{

GroupsList groups = new GroupsList();

try

{

using (TextReader reader = new StreamReader(GroupsFile, Encoding.Default))

{

int K = int.Parse(reader.ReadLine());

CrimeList parts=new CrimeList();

for (int i = 0; i < K; ++i)

{

string title = reader.ReadLine();

string descr = reader.ReadLine();

groups.Add(new CrGroup (title, descr));

}

}

}

catch (Exception exept)

{

throw new ApplicationException("File " + GroupsFile + " could not be read.", exept);

}

return groups;

}

public static void SaveGroupsList(GroupsList groups)

{

try

{

using (TextWriter writer = new StreamWriter(GroupsFile, false, Encoding.Default))

{

writer.WriteLine(groups.Count);

foreach (CrGroup group in groups)

{

writer.WriteLine(group.Title);

writer.WriteLine(group.Descr);

}

}

}

catch (Exception exept)

{

throw new ApplicationException("File " + GroupsFile + " could not be wrote.", exept);

}

}

public static CrimeList LoadArchive()

{

CrimeList archPart = new CrimeList();

try

{

using (TextReader reader = new StreamReader(ArchiveFile, Encoding.Default))

{

int n = int.Parse(reader.ReadLine());

for (int i = 0; i < n; ++i)

{

string FIO = reader.ReadLine();

string Nick = reader.ReadLine();

string group = reader.ReadLine();

string eyecolor = reader.ReadLine();

string signs = reader.ReadLine();

string incr = reader.ReadLine();

string birth = reader.ReadLine();

string country = reader.ReadLine();

string lastCrime = reader.ReadLine();

string prof = reader.ReadLine();

archPart.Add(new Criminal(FIO, Nick, group, eyecolor, signs, incr, birth, country, lastCrime, prof));

}

}

}

catch { }

return archPart;

}

public static void SaveArchive(CrimeList archPart)

{

try

{

using (TextWriter writer = new StreamWriter(ArchiveFile, false, Encoding.Default))

{

writer.WriteLine(archPart.Count);

foreach (Criminal criminals in archPart)

{

writer.WriteLine(criminals.Fio);

writer.WriteLine(criminals.Nick);

writer.WriteLine(criminals.Group);

writer.WriteLine(criminals.Eyecolor);

writer.WriteLine(criminals.Signs);

writer.WriteLine(criminals.Incr);

writer.WriteLine(criminals.Birth);

writer.WriteLine(criminals.Country);

writer.WriteLine(criminals.LastCrime);

writer.WriteLine(criminals.Prof);

}

}

}

catch (Exception exept)

{

throw new ApplicationException("File " + ArchiveFile + " could not be wrote.", exept);

}

}

}

}

  1. Класс Seacher – реализует поиск по основной базе

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Cartoteka

{

public class Seacher

{

string FIO;

string nick;

string eyecolor;

string signs;

string incr;

string birth;

string country;

string lastcrime;

string prof;

public string Fio { get { return FIO; } } // получаем возможность считывать инф.по всем

public string Nick { get { return nick; } } // признакам преступника, но не редактировать ее

public string Eyecolor { get { return eyecolor; } }

public string Signs { get { return signs; } }

public string Incr { get { return incr; } }

public string Birth { get { return birth; } }

public string Country { get { return country; } }

public string LastCrime { get { return lastcrime; } }

public string Prof { get { return prof; } }

public Seacher(string a, string b, string d, string e, string f, string g, string h, string i, string j)

{

FIO = a.ToLower().Trim();

nick = b.ToLower().Trim();

eyecolor = d.ToLower().Trim();

signs = e.ToLower().Trim();

incr = f.ToLower().Trim();

birth = g.ToLower().Trim();

country = h.ToLower().Trim();

lastcrime = i.ToLower().Trim();

prof = j.ToLower().Trim();

}

}

}

  1. Форма добавления преступника AddPersonForm

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Cartoteka

{

public partial class AddPersonForm : Form

{

Interpol inter;

Criminal crim;

public AddPersonForm()

{

InitializeComponent();

}

public AddPersonForm(Interpol interpol)

: this()

{

inter = interpol;

inter.Obnov();

GroupBox1.Items.Clear();

GroupBox1.Items.AddRange(inter.Groups.GetTitles());

}

public void NewDialog()

{

SaveBut.Click += new EventHandler(Save_New);

ShowDialog();

}

public void EditCr(Criminal crime)

{

crim = crime;

FIOBox1.Text = crim.Fio;

NickBox.Text = crim.Nick;

GroupBox1.Text = crim.Group;

EyeBox.Text = crim.Eyecolor;

IncrBox.Text = crim.Incr;

SetBox.Text = crim.Signs;

string [] mas = new string [3];

mas = crim.Birth.Split('.');

DayBox.Text = mas[0];

MonthBox.Text = mas[1];

YearBox.Text = mas[2];

ConBox.Text = crim.Country;

LastPrBox.Text = crim.LastCrime;

ProfBox.Text = crim.Prof;

SaveBut.Click += new EventHandler(Save_Click_Edit);

ShowDialog();

Close();

}

private void Save_Click_Edit(object sender, EventArgs e)

{

if (Validation())

{

crim.Fio = FIOBox1.Text;

crim.Nick = NickBox.Text;

crim.Group = GroupBox1.Text;

crim.Eyecolor = EyeBox.Text;

crim.Incr = IncrBox.Text;

crim.Signs = SetBox.Text;

string Date = DayBox.Text + "." + MonthBox.Text + "." + YearBox.Text;

crim.Birth = Date;

crim.Country = ConBox.Text;

crim.LastCrime = LastPrBox.Text;

crim.Prof = ProfBox.Text;

inter.ChangeCrime(crim);

Close();

}

else MessageBox.Show("Не все поля заполнены. Пожалуйста, заполните все поля и повторите попытку");

}

private void button2_Click(object sender, EventArgs e)

{

Close();

}

private void Save_New(object sender, EventArgs e)

{

if (Validation())

{

string Date = DayBox.Text + "." + MonthBox.Text + "." + YearBox.Text;

inter.AddCrime(new Criminal(FIOBox1.Text, NickBox.Text, GroupBox1.Text,

EyeBox.Text, SetBox.Text, IncrBox.Text, Date, ConBox.Text, LastPrBox.Text,

ProfBox.Text));

Close();

}

else MessageBox.Show("Не все поля заполнены коректно. Пожалуйста, заполните все поля и повторите попытку");

}

private bool Validation()

{

string no="";

if (FIOBox1.Text.Trim() != no && NickBox.Text.Trim() != no && GroupBox1.Text.Trim() != no && EyeBox.Text.Trim() != no && SetBox.Text.Trim() != no &&

IncrBox.Text.Trim() != no && DayBox.Text != no && MonthBox.Text != no && YearBox.Text != no && ConBox.Text.Trim() != no &&

LastPrBox.Text.Trim() != no && ProfBox.Text.Trim() != no)

return true;

else return false;

}

}

  1. Форма архива ArchiveForm

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Cartoteka.Forms

{

public partial class ArchiveForm : Form

{

Archive arch;

Interpol inter;

public ArchiveForm()

{

InitializeComponent();

LoadArch();

}

public ArchiveForm(Interpol interpol): this()

{

inter = interpol;

}

public ArchiveForm(Archive archive)

: this()

{

arch = archive;

}

public void LoadArch()

{

arch = new Archive();

ListSource.DataSource = arch.Crimpast;

Obnov();

}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)

{

Close();

}

private void deleteToolStripMenuItem_Click(object sender, EventArgs e)

{

if (ArchiveGrid.SelectedRows.Count ==1)

{

Criminal crime = ArchiveGrid.SelectedRows[0].DataBoundItem as Criminal;

DelPr(crime);

}

}

private void DelPr(Criminal crime)

{

arch.Delete(crime);

Obnov();

}

private void returnToolStripMenuItem_Click(object sender, EventArgs e)

{

if (ArchiveGrid.SelectedRows.Count == 1)

{

Criminal crime = ArchiveGrid.SelectedRows[0].DataBoundItem as Criminal;

inter.AddCrime(crime);

DelPr(crime);

Obnov();

}

}

public void ToArch(Criminal cr)

{

arch.SaveCr(cr);

arch.Save();

Obnov();

}

private void saveToolStripMenuItem_Click(object sender, EventArgs e)

{

arch.Save();

}

private void обновитьToolStripMenuItem_Click(object sender, EventArgs e)

{

Obnov();

MessageBox.Show("Архив обновлен успешно");

}

private void Obnov()

{

ArchiveGrid.DataSource = null;

ArchiveGrid.DataSource = ListSource;

}

}

}

  1. Форма преступных группировок GroupForm

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Cartoteka.Forms

{

public partial class GroupForm : Form

{

GroupsList GrL;

CrGroup gr;

Interpol inter;

string[] mas;

List<string> mas1;

public GroupForm(Interpol interpol)

{

inter = interpol;

InitializeComponent();

LoadGr();

}

public void LoadGr()

{

GrL= ReadWrite.LoadGroupList();

mas = GrL.GetTitles();

groupSource.DataSource = mas;

PartsBox.DataSource = mas1;

}

private void button2_Click(object sender, EventArgs e)

{

Close();

}

public void Loading(String titl)

{

Activity.Text = gr.Descr;

}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

{

List<string> mas1 = new List<string>();

string titl = listBox1.SelectedItem as string;

if (titl == "none")

Activity.Text = "";

else if (listBox1.SelectedItem!=null)

{

foreach (CrGroup g in GrL)

if (titl == g.Title)

{

gr = g;

Loading(titl);

break;

}

}

if (listBox1.SelectedItem as string != null)

{

var result = inter.Criminals.Where

(s => s.Group.Contains(listBox1.SelectedItem as string)).Select(a => a);

foreach (var g in result)

mas1.Add(g.Fio);

PartsBox.DataSource = null;

PartsBox.DataSource = mas1;

}

}

private void button1_Click(object sender, EventArgs e)

{

AddGr();

Obnov();

}

private void AddGr()

{

if (Validation())

{

CrGroup gr = new CrGroup(textBox1.Text, textBox2.Text);

GrL.Add(gr);

textBox1.Clear();

textBox2.Clear();

MessageBox.Show("Группировка успешно добавлена");

}

else MessageBox.Show("Не все поля заполнены. Пожалуйста, заполните все поля и повторите попытку");

}

private void SaveButton_Click(object sender, EventArgs e)

{

ReadWrite.SaveGroupsList(GrL);

MessageBox.Show("Список группировок успешно сохранен");

}

private bool Validation()

{

string no = "";

if (textBox1.Text.Trim() != no && textBox2.Text.Trim() != no)

return true;

return false;

}

private void button3_Click(object sender, EventArgs e)

{

string u=listBox1.SelectedItem as string;

foreach ( CrGroup g in GrL)

if (g.Title == u)

{

GrL.Remove(g);

break;

}

Obnov();

foreach (Criminal cr in inter.Criminals)

if (cr.Group == u)

cr.Group = "none";

Obnov();

}

public void Obnov()

{

mas = GrL.GetTitles();

listBox1.DataSource = null;

listBox1.DataSource = mas;

}

}

}

  1. Форма справки Helper

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Diagnostics;

using System.IO;

namespace Cartoteka.Forms

{

public partial class Helper : Form

{

public Helper()

{

InitializeComponent();

StreamReader str = new StreamReader("D:\\Help.html");

webBrowser2.DocumentStream = str.BaseStream;

}

}

}

  1. Форма основного окна программы MainForm

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Diagnostics;

namespace Cartoteka

{

public partial class MainForm : Form

{

Interpol interpol;

Archive archive;

Forms.ArchiveForm t;

Forms.GroupForm grfr;

Forms.Helper h;

public MainForm()

{

InitializeComponent();

LoadInter();

}

private void LoadInter()

{

try

{

interpol = new Interpol();

grfr = new Forms.GroupForm(interpol);

source.DataSource = interpol.Criminals;

}

catch (ApplicationException ex)

{

MessageBox.Show("Cannot load the program from hard disk. \n(" + ex.Message + ")");

Close();

}

}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)

{

if (MessageBox.Show("Сохранить изменения перед выходом?", "Внимание",

MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

{

interpol.SaveCrimes();

interpol.SaveGroups();

Close();

}

}

private void infoToolStripMenuItem_Click(object sender, EventArgs e)

{

Form AboutBox1=new AboutBox1 ();

AboutBox1.ShowDialog();

}

private void showArchiveToolStripMenuItem_Click(object sender, EventArgs e)

{

t = new Forms.ArchiveForm(interpol);

t.ShowDialog();

Obnov();

}

private void criminalGroupsToolStripMenuItem_Click(object sender, EventArgs e)

{

grfr.ShowDialog();

}

private void addNewToolStripMenuItem_Click_1(object sender, EventArgs e)

{

new AddPersonForm(interpol).NewDialog();

Obnov();

}

private void deleteToolStripMenuItem_Click(object sender, EventArgs e)

{

if (Grid.SelectedRows.Count == 1)

{

if (MessageBox.Show(" В случае удаления все данные

будут безвозвратно утеряны. Удалить преступника?", "Warning",

MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

{

Criminal crim = Grid.SelectedRows[0].DataBoundItem as Criminal;

Del(crim);

}

}

}

private void Del(Criminal crim)

{

interpol.DeleteCrime(crim);

Obnov();

}

private void changeToolStripMenuItem_Click(object sender, EventArgs e)

{

if (Grid.SelectedRows.Count == 1)

{

Criminal b = Grid.SelectedRows[0].DataBoundItem as Criminal;

new AddPersonForm(interpol).EditCr(b);

}

}

private void addToArchiveToolStripMenuItem1_Click(object sender, EventArgs e)

{

if (MessageBox.Show("Перенести все данные о преступнике в архив?", "Внимание",

MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

{

if (Grid.SelectedRows.Count >= 1)

{

Criminal crim = Grid.SelectedRows[0].DataBoundItem as Criminal;

archive = new Archive();

ToArh(crim);

}

}

}

private void ToArh(Criminal crim)

{

Criminal cr = crim;

Forms.ArchiveForm t = new Forms.ArchiveForm(interpol);

t.ToArch(cr);

interpol.DeleteCrime(crim);

Obnov();

}

private void обновитьToolStripMenuItem_Click(object sender, EventArgs e)

{

Obnov();

MessageBox.Show(" Таблица данных обновлена");

}

public void Obnov()

{

Grid.DataSource = null;

Grid.DataSource = source;

}

private void saveToolStripMenuItem_Click(object sender, EventArgs e)

{

interpol.SaveCrimes();

interpol.SaveGroups();

}

private void Seach_Click(object sender, EventArgs e)

{

Search();

}

private void Search()

{

Seacher filter = new Seacher(TextB.Text, textBox2.Text, EyeBox.Text, textBox3.Text,

IncrBox1.Text, textBox5.Text, ConBox.Text, textBox7.Text, textBox8.Text);

source.DataSource = interpol.Seach(filter);

}

private void helpToolStripMenuItem_Click(object sender, EventArgs e)

{

Forms.Helper h = new Forms.Helper();

h.ShowDialog();

}

}

}