
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), в качестве них выступали текстовые файлы, что наталкивает на мысль о дальнейшем совершенствовании и доработке программы.
В перспективе данное приложение следует доработать: заменить текстовые файлы на базу данных; добавить функции сортировки данных; расширить количество характеристик у каждого преступника; добавить более детальную проверку данных на этапе регистрации (проверять правильность введения даты, например); упростить поиск (по дате рождения и по росту: сделать возможным поиск преступников выше или ниже, старше или младше конкретного значения); улучшить внешний вид приложения при изменении размеров и тд.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
Шилдт Г. Язык программирования С# 4.0. Специальное издание.-М., СПб.:”Издательство БИНОМ” – „Невский Диалект”, 2001г.-1099 с.
Эндрю Троелсен. C# и платформа .NET. Библиотека программиста. – СПб.: Питер, 2005. – 796 с.
Бондарев В.М., Объектно-ориентированное программирование. Учебное пособие. – Харьков: СМИТ, 2004г. – 294 с.
ПРИЛОЖЕНИЕ А
Исходный код программы
Класс 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);
}
}
}
Класс 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;
}
}
}
Класс CrimeList – реализует список преступников
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Cartoteka
{
public class CrimeList : List<Criminal>
{
}
}
Класс 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;
}
}
}
Класс 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;
}
}
}
Класс 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();
}
}
}
Класс 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);
}
}
}
}
Класс 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();
}
}
}
Форма добавления преступника 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;
}
}
Форма архива 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;
}
}
}
Форма преступных группировок 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;
}
}
}
Форма справки 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;
}
}
}
Форма основного окна программы 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();
}
}
}