Программа "Общежитие"

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 26.08.2012
Размер файла 664,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

1. ВНЕШНЕЕ ОПИСАНИЕ

2. ПРОЕКТИРОВАНИЕ

3. ОПИСАНИЕ ПРОГРАММЫ

4. АТТЕСТАЦИЯ ПРОГРАММНОГО СРЕДСТВА

ЗАКЛЮЧЕНИЕ

СПИСОК ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЕ

Введение

В пояснительной записке рассматривается описание программы «Общежитие».

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

Пользователь может создавать, изменять и удалять записи в базе данных. Со стороны пользователя программа проста в использовании и имеет простой и интуитивно - понятный интерфейс.

В качестве основного инструмента разработки применяется MicrosoftVisualStudio 2010 и платформа .NET. Язык программирования C#.

1 ВНЕШНЕЕ ОПИСАНИЕ

1.1 Определение требований к программному средству

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

Программа должна сохранять базу данных на жесткий диск с использованием стандартов представления информации.

1.2 Спецификация качества программного обеспечения

Функциональность: программа должна являться полностью завершенным программным продуктом, не требующим каких-либо дополнительных специальных компонентов.

Надёжность: программа должна быть автономной.

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

1.3 Функциональная спецификация

Минимальные технические характеристики компьютера, на котором гарантируется стабильная работа программы:

- компьютер/процессор: компьютер с процессором класса Pentium 4;

- память: 512МБОЗУ;

- монитор: монитор с разрешением 640x480 точек или более;

- операционная система: операционная система WindowsXP, необходимо наличие Microsoft .NET FrameworkRuntime v4.0;

- наличие свободного дискового пространства на жёстком диске, которое определяется объёмомбазы данных.

Внешние функции:

-добавление студентов в базу данных;

-изменение данных о студенте;

-удаление студентов;

-перемещение студентов по комнатам;

-очистка комнаты;

-поиск в базе данных по различным критериям;

-добавление комнат;

-редактирование комнат;

- просмотр студентов по комнатам;

- программа должна выполнять все функции за конечное количество времени;

Критические случаи:

- отсутствие свободного места на жёстком диске при сохранении базы данных журнала. Любая операция с файловой системой должна быть отменена;

-завершение работы Windows. В этом случае программа должна завершить свою работу.

2 ПРОЕКТИРОВАНИЕ

2.1 Проектирование архитектуры приложения

Данное программное средство можно разбить на подсистемы, взаимодействующие друг с другом.

Рисунок 1 - Структура программы

Подсистема интерфейса реализует пользовательский интерфейс программы. Отображение базы данных реализовано в табличном виде с колонками №, Мест, Свободно и жильцы с возможностью сортировки данных и поиска по заданному критерию.

Подсистема работы с базой предоставляет доступ к управлению базой:

- создание, удаление, изменение записей базы данных;

- предоставление данных для других подсистем

Подсистема поиска реализует поиск непосредственно в базе данных по заданному значению.

Подсистема экспорта реализует методы сохранения данных из базы в распространенные форматы визуального представления данных.

2.2 Проектирование структуры данных

Структура базы данных общежития

База данных представляет собой две таблицы, в которых хранятся записи по студентам и комнатам.Такая структура базы данных была как наиболее полно описывающая предметную область и ввиду её оптимальности и удобства с точки зрения реализации программного продукта.

Описание полей.

Таблица 1- Информация о студенте

Поле

Тип поля

Описание поля

Name

строка

имя

Surname

строка

фамилия

Patrname

строка

отчество

Age

неотрицательное целое число

возраст

Phone

строка

номер телефона

Cource

неотрицательное целое число

курс

Group

строка

группа

Room

неотрицательное целое число

индекс комнаты

Таблица 2 - Информация о комнатах

Поле

Тип поля

Описание поля

Max

неотрицательное целое число

число мест

Students

List<int>

список проживающих студентов

Таблицы связаны отношением один ко многим по полям Students из таблицы 2 и Room из таблицы 1 соответственно.

База данных для общежития хранится в едином файле .xaml в каталоге программы. Файл имеет структуру стандарта XAML.

Схема файла базы данных с информацией о студентах:

<Studentsxmlns="clr-namespace:Dormitory;assembly=Dormitory"><StudentName="Имя" Surname="Фамилия" Patrname="Отчество" Age="Возраст" Phone="Телефон" Course="Курс" Group="Группа" Room="Номер комнаты" /></Students>

Пример записей файла базы данныхс информацией о студентах:

<Students xmlns="clr-namespace:Dormitory;assembly=Dormitory"><Student Name="Василий" Surname="Пупкин" Patrname="Васильевич" Age="18" Phone="2324543" Course="1" Group="2" Room="0" /><Student Name="Пётр" Surname="Петров" Patrname="Петрович" Age="18" Phone="2132457" Course="1" Group="2" Room="0" /><Student Name="Кирилла" Surname="Троекуров" Patrname="Петрович" Age="18" Phone="2366231" Course="1" Group="3" Room="1" /><Student Name="Владимир" Surname="Малинов" Patrname="Фёдорович" Age="18" Phone="2341222" Course="1" Group="3" Room="1" /><Student Name="Фёдор" Surname="Фёдоров" Patrname="Фёдорович" Age="20" Phone="2143144" Course="2" Group="4" Room="2" /></Students>

Схема файла базы данных с информацией о комнатах:

<RsTSxmlns="clr-namespace:Dormitory;assembly=Dormitory"><RTSMax="Числомест" Students="Проживающие студенты" /></RsTS>

Пример записей файла базы данныхс информацией о комнатах:

<RsTSxmlns="clr-namespace:Dormitory;assembly=Dormitory"><RTS Max="8" Students="0;1;" /><RTS Max="4" Students="2;3;" /><RTS Max="4" Students="4;" /><RTS Max="4" Students="" /><RTS Max="4" Students="" /><RTS Max="4" Students="" /><RTS Max="4" Students="" /><RTS Max="4" Students="" /><RTS Max="4" Students="" /><RTS Max="4" Students="" /></RsTS>

Загрузка и сохранение файла производятся стандартными средствами библиотеки .NET

2.3 Проектирование пользовательского интерфейса

Главное окно содержит основные элементы интерфейса и даёт доступ ко всем внешним функциям программы.

Рисунок 2- Главное окно программы

Главное окно содержит следующие элементы управления:

- главное меню программы;

- панель поиска;

- таблицу общежития с данными;

Окно добавления студента содержит поля для ввода данных о нём и даёт возможность добавления студентов в базу данных.

Рисунок 3- Окно добавления записи

Окно просмотра комнат даёт возможность просмотреть и изменить комнату и студентов, проживающих в ней.

Рисунок 3- Окно просмотра комнаты

3 ОПИСАНИЕ ПРОГРАММЫ

3.1 Спецификация классов и типы данных

Таблица 3 - Спецификация классов и типы данных

Тип данных

Назначение

класс Student

представляет собой набор сведений остуденте

класс Students

представляет собой набор данных для хранения информации о студентах

класс Room

представляет собой набор сведений о комнате

класс Rooms

представляет собой набор данных для хранения информации о комнатах

класс MainWindow

производный класс от класса Window .NET, определяет главное окно приложения

класс StudentWindow

производный класс от класса Window .NET, определяет окно добавления или редактирования студента

класс RoomWindow

производный класс от класса Window .NET, определяет окно просмотра или редактирования комнаты

3.2 Введенные основные переменные и их назначение

Таблица 4 - Основные переменные и их назначения

Переменная

Тип

Назначение

rooms

Rooms

таблица данных по комнатам

students

Students

таблица данных по студентам

3.3 Основные функции и их блок схемы

Функции класса MainWindow.

- MainWindow() - создание экземпляра класса MainWindow;

- wndMain_Loaded(object sender, RoutedEventArgs e) - загрузканастроекпрограммыибазданных;

- wndMain_Closing(object sender, System.ComponentModel.CancelEventArgs e) - сохранениенастроекпрограммыибазданных;

- RefreshDataGrid(stringfilter) - обновлениезаписей, выводимых на экран с возможностью применения фильтра;

- ViewRoom_Click (objectsender, RoutedEventArgse) -вызов окна просмотра комнаты и сохранение изменений, если нужно;

- AddStudent_Click (objectsender, RoutedEventArgse) - добавлениестудентавбазуданных;

Рисунок 4 - АлгоритмViewRoom_Click

3.4 Алгоритм взаимодействия

После старта программы создается экземпляр класса MainWindow основного окна. Классы окон редактирования и добавления записей создаются и вызываются из основного окна.

Также в экземпляре класса основного окна создаются экземпляры классов,

StudentsиRoomsдляобеспеченияработы программы.

4. АТТЕСТАЦИЯ ПРОГРАММНОГО СРЕДСТВА

4.1 Руководство по инсталляции программного средства

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

4.2 Руководство использования программного средства

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

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

Для добавления студента в главном меню выберете пункт «Общежитие», в появившемся меню выберете «Добавить студента», или нажажмите кнопку «Добавить» в окне просмотра комнаты.

Для просмотра или изменения комнаты установите курсор на требуемую запись и сделайте двойной щелчок или в меню «Общежитие» выберете пункт «Просмотр и изменение комнаты

Поля «Имя», «Фамилия», «Отчество» и «Комната» обязательны к заполнению.

Для очистки комнаты установите курсор на требуемую запись и нажмите Del или в меню «Общежитие» выберете пункт «Очистить комнату».

База данных сохраняется автоматически при выходе из программы.

4.3 Методика испытаний

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

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

Для выявления дефектов в программе/подтверждения ее корректной работоспособности необходимо провести следующие тесты:

- добавление новой записи в базу и проверка ее правильного добавления в таблице интерфейса пользователя;

- изменение записи в базе и проверка ее правильного изменения в таблице интерфейса пользователя;

- удаление записи в базе и проверка ее правильного удаления в таблице интерфейса пользователя;

- изменение записи в базе и проверка ее правильного изменения в таблице интерфейса пользователя;

- проверка правильности сохранения базы на диск в файл и ее загрузка при старте программы;

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

4.4 Результаты тестирования

Ниже представлены результаты выполнения некоторых тестов программы.

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

- файл базы данных повреждён

Рисунок 5 - Файл БД повреждён

2. Проверка загрузки базы при старте программы, добавление новой записи в базу и проверка ее правильного добавления в таблице интерфейса пользователя

Рисунок 6 - Первоначальная загрузка базы при старте программы

Рисунок 7 - Новая запись добавлена

3. Проверка удаления записи в базе и проверка ее правильного удаления в таблице интерфейса пользователя:

Рисунок 8 - Запись удалена

Запись удалена, тест пройден.

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

ЗАКЛЮЧЕНИЕ

программный учет данные пользовательский

В рамках курсовой работы была разработана программа Общежитие. В процессе проектирования использовались методологии модульного и объектно-ориентированного программирования.

Для разработки данной программы, необходимо правильно спроектировать внутреннюю архитектуру программы и реализацию необходимых классов с использованием современных методик объектно-ориентированного подхода к проектированию. При разработке данного программного средства применялся язык программирования С# и библиотека .NET, как один из наиболее современных инструментов.

ПРИЛОЖЕНИЕА

MainWindow

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows;

usingSystem.Windows.Controls;

usingSystem.Windows.Data;

usingSystem.Windows.Documents;

usingSystem.Windows.Input;

usingSystem.Windows.Media;

usingSystem.Windows.Media.Imaging;

usingSystem.Windows.Navigation;

usingSystem.Windows.Shapes;

using System.IO;

namespace Dormitory

{

/// <summary>

/// Interaction logic for MainWindow.xaml

/// </summary>

public partial class MainWindow : Window

{

public Rooms rooms = new Rooms();

public Students students = new Students();

private Settings settings = new Settings();

publicMainWindow()

{

InitializeComponent();

}

private void RefreshDataGrid(string filter)

{

varitemsource = dataGrid.ItemsSource as DGRItems;

itemsource.Clear();

for (int i = 0; i <rooms.Count; i++)

{

string stud = "";

for (int j = 0; j < rooms[i].Students.Count; j++)

{

stud += students[rooms[i].Students[j]].Surname+" "+students[rooms[i].Students[j]].Name+" "+students[rooms[i].Students[j]].Patrname;

if (j < rooms[i].Students.Count-1) stud+= ", ";

else stud += " ";

}

if (stud == "") stud = "<НЕТ>";

if (filter == "") itemsource.Add(new DGRoom((i + 1).ToString(), rooms[i].Max.ToString(), (rooms[i].Max - rooms[i].Students.Count).ToString(), stud, i));

else

{

string full = (i + 1).ToString() + " " + rooms[i].Max.ToString() + " " + (rooms[i].Max - rooms[i].Students.Count).ToString() + " " + stud;

if (full.ToUpper().IndexOf(filter.ToUpper()) > -1) itemsource.Add(new DGRoom((i + 1).ToString(), rooms[i].Max.ToString(), (rooms[i].Max - rooms[i].Students.Count).ToString(), stud, i));

}

}

}

public string ExtractFileDir(string FileName)

{

string res = "";

int index = -1;

for (int i = FileName.Length - 1; i >= 0; i--)

{

if (FileName[i] == '\\')

{

index = i;

break;

}

}

if (index == -1) return res;

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

{

res += FileName[i].ToString();

}

return res;

}

private void AddRoom_Click(object sender, RoutedEventArgs e)

{

//Добавитькомнаты

AddRoomsWindowwAddRooms = new AddRoomsWindow(this);

wAddRooms.ShowDialog();

if (wAddRooms.DialogResult == true)

{

for (int i = 0; i <wAddRooms.Number; i++) rooms.Add(new Room(wAddRooms.Max));

}

RefreshDataGrid(textFind.Text);

}

private void textFind_TextChanged(object sender, TextChangedEventArgs e)

{

RefreshDataGrid(textFind.Text);

}

private void AddStudent_Click(object sender, RoutedEventArgs e)

{

varwAddStud = new StudentWindow(this, rooms, -1);

wAddStud.ShowDialog();

if (wAddStud.DialogResult == true)

{

students.Add(new Student(wAddStud.student.Name, wAddStud.student.Surname, wAddStud.student.Patrname, wAddStud.student.Age, wAddStud.student.Phone, wAddStud.student.Course, wAddStud.student.Group, wAddStud.student.Room));

rooms[wAddStud.student.Room].Students.Add(students.Count - 1);

}

RefreshDataGrid(textFind.Text);

}

private void ViewRoom_Click(object sender, RoutedEventArgs e)

{

if (dataGrid.SelectedIndex< 0) return;

varwViewRoom = new RoomWindow(this, rooms, students, (dataGrid.SelectedItem as DGRoom).ID);

wViewRoom.ShowDialog();

if (wViewRoom.DialogResult == true)

{

students.Clear();

rooms.Clear();

foreach (Student s in wViewRoom.students) students.Add(s);

foreach (Room r in wViewRoom.rooms) rooms.Add(r);

RefreshDataGrid(textFind.Text);

}

}

private void Window_Loaded(object sender, RoutedEventArgs e)

{

FileStreamfs;

string path = ExtractFileDir(Application.ResourceAssembly.Location) + "Data\\";

if (!Directory.Exists(path)) Directory.CreateDirectory(path);

boolnodata = false;

if (File.Exists(path + "Settings.xaml"))

{

try

{

fs = new FileStream(path + "Settings.xaml", FileMode.Open, FileAccess.Read);

settings = System.Windows.Markup.XamlReader.Load(fs) as Settings;

this.Top = settings.t;

this.Left = settings.l;

this.Height = settings.h;

this.Width = settings.w;

dataGrid.Columns[0].Width = settings.w0;

dataGrid.Columns[1].Width = settings.w1;

dataGrid.Columns[2].Width = settings.w2;

dataGrid.Columns[3].Width = settings.w3;

fs.Close();

}

catch

{

MessageBox.Show("Не удалось загрузить настройки приложения." + Environment.NewLine + "Будут применены настройки по умолчанию", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

}

}

if (File.Exists(path + "Rooms.xaml"))

{

try

{

RsTSrs = new RsTS();

fs = new FileStream(path + "Rooms.xaml", FileMode.Open, FileAccess.Read);

rs = System.Windows.Markup.XamlReader.Load(fs) as RsTS;

fs.Close();

foreach (RTS r in rs)

{

rooms.Add(new Room(r.Max));

string temp = "";

for (int i = 0; i <r.Students.Length; i++)

{

if (r.Students[i] == ';')

{

rooms[rooms.Count - 1].Students.Add(Convert.ToInt32(temp));

temp = "";

}

else temp += r.Students[i].ToString();

}

}

}

catch

{

MessageBox.Show("Неудалосьзагрузитьбазуданныхкомнат.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

nodata = true;

}

}

elsenodata = true;

if (File.Exists(path + "Students.xaml"))

{

try

{

fs = new FileStream(path + "Students.xaml", FileMode.Open, FileAccess.Read);

students = System.Windows.Markup.XamlReader.Load(fs) as Students;

fs.Close();

}

catch

{

MessageBox.Show("Неудалосьзагрузитьбазуданныхстудентов.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

nodata = true;

}

}

elsenodata = true;

if (nodata)

{

rooms.Clear();

students.Clear();

}

RefreshDataGrid(textFind.Text);

}

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{

FileStreamfs;

RsTSrs = new RsTS();

settings.t = this.Top;

settings.l = this.Left;

settings.h = this.Height;

settings.w = this.Width;

settings.w0 = dataGrid.Columns[0].Width;

settings.w1 = dataGrid.Columns[1].Width;

settings.w2 = dataGrid.Columns[2].Width;

settings.w3 = dataGrid.Columns[3].Width;

string path = ExtractFileDir(Application.ResourceAssembly.Location) + "Data\\";

if (!Directory.Exists(path)) Directory.CreateDirectory(path);

if (System.IO.File.Exists(path + "Settings.xaml")) System.IO.File.Delete(path + "Settings.xaml");

fs = new FileStream(path + "Settings.xaml", FileMode.CreateNew, FileAccess.Write);

System.Windows.Markup.XamlWriter.Save(settings, fs);

fs.Close();

rs.Clear();

foreach (Room r in rooms)

{

stringst = "";

foreach (int i in r.Students) st += i.ToString() + ";";

rs.Add(new RTS(r.Max, st));

}

if (System.IO.File.Exists(path + "Rooms.xaml")) System.IO.File.Delete(path + "Rooms.xaml");

fs = new FileStream(path + "Rooms.xaml", FileMode.CreateNew, FileAccess.Write);

System.Windows.Markup.XamlWriter.Save(rs, fs);

fs.Close();

if (System.IO.File.Exists(path + "Students.xaml")) System.IO.File.Delete(path + "Students.xaml");

fs = new FileStream(path + "Students.xaml", FileMode.CreateNew, FileAccess.Write);

System.Windows.Markup.XamlWriter.Save(students, fs);

fs.Close();

}

private void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)

{

ViewRoom_Click(null, null);

}

private void ClearRoom_Click(object sender, RoutedEventArgs e)

{

if (dataGrid.SelectedIndex< 0) return;

if (MessageBox.Show("Выдействительнохотитеудалитьвсехстудентовизкомнаты №" + (dataGrid.SelectedItem as DGRoom).Number + "?", "", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)

{

intselind = (dataGrid.SelectedItem as DGRoom).ID;

for (int j = 0; j < rooms[selind].Students.Count; j++)

{

students.RemoveAt(rooms[selind].Students[j]);

for (int i = rooms[selind].Students[j]; i <students.Count; i++)

{

rooms[students[i].Room].Students.Remove(i + 1);

rooms[students[i].Room].Students.Add(i);

}

}

rooms[selind].Students.Clear();

RefreshDataGrid(textFind.Text);

}

}

private void dataGrid_PreviewKeyUp(object sender, KeyEventArgs e)

{

if (e.Key == Key.Delete) ClearRoom_Click(null, null);

}

private void Exit_Click(object sender, RoutedEventArgs e)

{

this.Close();

}

private void About_Click(object sender, RoutedEventArgs e)

{

varwAbout = new AboutWindow(this);

wAbout.ShowDialog();

}

}

public class Student

{

public Student(string name, string surname, string patrname, int age, string phone, intcource, string group, int room)

{

Name = name;

Surname = surname;

Patrname = patrname;

Age = age;

Phone = phone;

Course = cource;

Group = group;

Room = room;

}

public Student()

{

}

public string Name { get; set; }

public string Surname { get; set; }

public string Patrname { get; set; }

publicint Age { get; set; }

public string Phone { get; set; }

publicint Course { get; set; }

public string Group { get; set; }

publicint Room { get; set; }

}

public class Students : System.Collections.ObjectModel.ObservableCollection<Student>

{

}

public class Room

{

public Room(int max)

{

Max = max;

Students = new List<int>();

}

public Room()

{

}

publicint Max { get; set; }

public List<int> Students { get; set; }

}

public class Rooms : System.Collections.ObjectModel.ObservableCollection<Room>

{

}

public class RTS

{

public RTS()

{

}

public RTS(int max, string sts)

{

Max = max;

Students = sts;

}

publicint Max { get; set; }

public string Students { get; set; }

}

public class RsTS : System.Collections.ObjectModel.ObservableCollection<RTS>

{

}

public class DGRoom

{

publicDGRoom(string N, string M, string F, string S, int id)

{

Number = N;

Max = M;

Free = F;

Students = S;

ID = id;

}

publicDGRoom()

{

}

public string Number { get; set; }

public string Max { get; set; }

public string Free { get; set; }

public string Students { get; set; }

publicint ID { get; set; }

}

public class DGRItems : System.Collections.ObjectModel.ObservableCollection<DGRoom>

{

}

public class DGStudent

{

publicDGStudent()

{

}

publicDGStudent(string Full_name, string Student_information, int id)

{

FullName = Full_name;

StudentInfo = Student_information;

ID = id;

}

public string FullName { get; set; }

public string StudentInfo { get; set; }

publicint ID { get; set; }

}

public class DGSItems : System.Collections.ObjectModel.ObservableCollection<DGStudent>

{

}

public class Settings

{

public Settings()

{

}

public double t { get; set; }

public double l { get; set; }

public double h { get; set; }

public double w { get; set; }

publicDataGridLength w0 { get; set; }

publicDataGridLength w1 { get; set; }

publicDataGridLength w2 { get; set; }

publicDataGridLength w3 { get; set; }

}

}

StudentWindow

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows;

usingSystem.Windows.Controls;

usingSystem.Windows.Data;

usingSystem.Windows.Documents;

usingSystem.Windows.Input;

usingSystem.Windows.Media;

usingSystem.Windows.Media.Imaging;

usingSystem.Windows.Shapes;

namespace Dormitory

{

/// <summary>

/// Interaction logic for StudentWindow.xaml

/// </summary>

public partial class StudentWindow : Window

{

Rooms rs = new Rooms();

booldialogresut = false;

publicStudentWindow(Window owner, Student Stud, Rooms rooms)

{

//Режимредактирования

InitializeComponent();

this.Owner = owner;

this.Icon = owner.Icon;

student = new Student(Stud.Name, Stud.Surname, Stud.Patrname, Stud.Age, Stud.Phone, Stud.Course, Stud.Group, Stud.Room);

this.Title = "Редактирование записи";

buttonOK.Content = "Сохранить";

foreach (Room r in rooms) rs.Add(r);

textName.Text = student.Name;

textSurname.Text = student.Surname;

textPatrname.Text = student.Patrname;

if (student.Course == -1) textCourse.Text = "";

elsetextCourse.Text = student.Course.ToString();

textGroup.Text = student.Group;

if (student.Age == -1) textAge.Text = "";

elsetextAge.Text = student.Age.ToString();

textPhone.Text = student.Phone;

textRoom.Text = (student.Room + 1).ToString();

}

publicStudentWindow(Window owner, Rooms rooms, intdefroom)

{

//Режимдобавленияновойзаписи

InitializeComponent();

this.Owner = owner;

this.Icon = owner.Icon;

student = new Student();

this.Title = "Добавитьстудента в базуданных";

buttonOK.Content = "Добавить";

if (defroom != -1) textRoom.Text = (defroom + 1).ToString();

foreach (Room r in rooms) rs.Add(r);

}

public Student student { get; set; }

private void buttonOK_Click(object sender, RoutedEventArgs e)

{

if (textName.Text == "")

{

MessageBox.Show("Введитеимястудента.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

student.Name = textName.Text;

if (textSurname.Text == "")

{

MessageBox.Show("Введитефамилиюстудента.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

student.Surname = textSurname.Text;

if (textPatrname.Text == "")

{

MessageBox.Show("Введитеотчествостудента.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

student.Patrname = textPatrname.Text;

if (textCourse.Text != "")

{

try { student.Course = int.Parse(textCourse.Text); }

catch

{

MessageBox.Show("Значение в поле \"Курс\" должнобытьцелымположительнымчислом.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

if (student.Course< 1)

{

MessageBox.Show("Значение в поле \"Курс\" должнобытьбольшеилиравноединице.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

}

else

{

student.Course = -1;

}

student.Group = textGroup.Text;

if (textAge.Text != "")

{

try { student.Age = int.Parse(textAge.Text); }

catch

{

MessageBox.Show("Значение в поле \"Возраст\" должнобытьцелымнеотрицательнымчислом.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

if (student.Age< 0)

{

MessageBox.Show("Значение в поле \"Возраст\" должнобытьбольшеилиравнонулю.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

}

else

{

student.Age = -1;

}

student.Phone = textPhone.Text;

if (textRoom.Text == "")

{

MessageBox.Show("Введитеномеркомнаты, в которуюзаселяетсястудент.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

try { student.Room = int.Parse(textRoom.Text); }

catch

{

MessageBox.Show("Номеркомнатыдолженбытьцелымположительнымчислом.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

if (student.Room< 1)

{

MessageBox.Show("Значение в поле \"Возраст\" должнобытьбольшеилиравноединице.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

student.Room -= 1;

if (rs[student.Room].Max == rs[student.Room].Students.Count)

{

MessageBox.Show("В комнате №" + (student.Room + 1).ToString() + " нетмест, выберетедругую.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);

return;

}

dialogresut = true;

this.Close();

}

private void buttonCancel_Click(object sender, RoutedEventArgs e)

{

dialogresut = false;

this.Close();

}

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{

this.DialogResult = dialogresut;

}

}

}

RoomWindow

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows;

usingSystem.Windows.Controls;

usingSystem.Windows.Data;

usingSystem.Windows.Documents;

usingSystem.Windows.Input;

usingSystem.Windows.Media;

usingSystem.Windows.Media.Imaging;

usingSystem.Windows.Shapes;

namespace Dormitory

{

/// <summary>

/// Interaction logic for RoomWindow.xaml

/// </summary>

public partial class RoomWindow : Window

{

public Students students { get; set; }

public Rooms rooms { get; set; }

introomindex = -1;

booldialogresult = false;

private void RefreshDataGrid()

{

varitemsource = dataGrid.ItemsSource as DGSItems;

itemsource.Clear();

for (int i = 0; i < rooms[roomindex].Students.Count; i++)

{

string info = "";

if (students[rooms[roomindex].Students[i]].Course != -1) info += " Курс " + students[rooms[roomindex].Students[i]].Course.ToString() + ".";

if (students[rooms[roomindex].Students[i]].Group != "") info += " Группа " + students[rooms[roomindex].Students[i]].Group + ".";

if (students[rooms[roomindex].Students[i]].Age != -1) info += " Возраст " + students[rooms[roomindex].Students[i]].Age.ToString() + ".";

if (students[rooms[roomindex].Students[i]].Phone != "") info += " Телефон " + students[rooms[roomindex].Students[i]].Phone + ".";

if (info == "") info = "<НЕТ>";

itemsource.Add(new DGStudent(students[rooms[roomindex].Students[i]].Surname + " " + students[rooms[roomindex].Students[i]].Name + " " + students[rooms[roomindex].Students[i]].Patrname, info, i));

labelFree.Content = ", изнихсвободно: " + (rooms[roomindex].Max - dataGrid.Items.Count).ToString();

}

}

publicRoomWindow(Window owner, Rooms rs, Students ss, introom_index)

{

InitializeComponent();

this.Owner = owner;

this.Icon = owner.Icon;

students = new Students();

rooms = new Rooms();

foreach (Student s in ss) students.Add(s);

foreach (Room r in rs) rooms.Add(r);

roomindex = room_index;

labelRoomN.Content = "Комната №" + (roomindex + 1).ToString();

textMax.Text = rooms[roomindex].Max.ToString();

labelFree.Content = ", изнихсвободно: " + (rooms[roomindex].Max - rooms[roomindex].Students.Count).ToString();

RefreshDataGrid();

}

private void buttonAddStudent_Click(object sender, RoutedEventArgs e)

{

if (rooms[roomindex].Max == dataGrid.Items.Count)

{

if (MessageBox.Show("В этойкомнатебольшенетмест, добавить?", "", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)

{

textMax.Text = (rooms[roomindex].Max + 1).ToString();

buttonApply_Click(null, null);

}

}

varwAddStud = new StudentWindow(this, rooms, roomindex);

wAddStud.ShowDialog();

if (wAddStud.DialogResult == true)

{

students.Add(new Student(wAddStud.student.Name, wAddStud.student.Surname, wAddStud.student.Patrname, wAddStud.student.Age, wAddStud.student.Phone, wAddStud.student.Course, wAddStud.student.Group, wAddStud.student.Room));

rooms[wAddStud.student.Room].Students.Add(students.Count - 1);

}

RefreshDataGrid();

}

private void buttonRemoveStudent_Click(object sender, RoutedEventArgs e)

{

if (dataGrid.SelectedIndex< 0) return;

if (MessageBox.Show("Выдействительнохотитеудалитьвыбранногостудента?", "", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)

{

intselind = (dataGrid.SelectedItem as DGStudent).ID;

intstudind = rooms[roomindex].Students[selind];

rooms[students[studind].Room].Students.RemoveAt(selind);

students.RemoveAt(studind);

for (int i = studind; i <students.Count; i++)

{

rooms[students[i].Room].Students.Remove(i + 1);

rooms[students[i].Room].Students.Add(i);

}

RefreshDataGrid();

}

}

private void buttonSave_Click(object sender, RoutedEventArgs e)

{

dialogresult = true;

this.Close();

}

private void buttonClose_Click(object sender, RoutedEventArgs e)

{

dialogresult = false;

this.Close();

}

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{

this.DialogResult = dialogresult;

}

private void buttonEditStudent_Click(object sender, RoutedEventArgs e)

{

if (dataGrid.SelectedIndex< 0) return;

intselind = (dataGrid.SelectedItem as DGStudent).ID;

intstudind = rooms[roomindex].Students[selind];

varwEditStud = new StudentWindow(this, students[studind], rooms);

wEditStud.ShowDialog();

if (wEditStud.DialogResult == true)

{

if (students[studind].Room != wEditStud.student.Room)

{

rooms[students[studind].Room].Students.RemoveAt(selind);

students[studind] = new Student(wEditStud.student.Name, wEditStud.student.Surname, wEditStud.student.Patrname, wEditStud.student.Age, wEditStud.student.Phone, wEditStud.student.Course, wEditStud.student.Group, wEditStud.student.Room);

rooms[students[studind].Room].Students.Add(studind);

}

else students[studind] = new Student(wEditStud.student.Name, wEditStud.student.Surname, wEditStud.student.Patrname, wEditStud.student.Age, wEditStud.student.Phone, wEditStud.student.Course, wEditStud.student.Group, wEditStud.student.Room);

}

RefreshDataGrid();

}

private void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)

{

buttonEditStudent_Click(null, null);

}

private void buttonApply_Click(object sender, RoutedEventArgs e)

{

if (textMax.Text == "")

{

textMax.Text = dataGrid.Items.Count.ToString();

rooms[roomindex].Max = dataGrid.Items.Count;

}

else

{

try

{

int c = int.Parse(textMax.Text);

if (c <dataGrid.Items.Count)

{

textMax.Text = dataGrid.Items.Count.ToString();

rooms[roomindex].Max = dataGrid.Items.Count;

}

else rooms[roomindex].Max = c;

}

catch

{

textMax.Text = rooms[roomindex].Max.ToString();

}

}

labelFree.Content = ", изнихсвободно: " + (rooms[roomindex].Max - dataGrid.Items.Count).ToString();

}

private void dataGrid_PreviewKeyUp(object sender, KeyEventArgs e)

{

if (e.Key == Key.Delete) buttonRemoveStudent_Click(null, null);

}

}

}

Размещено на Allbest.ru


Подобные документы

  • Требования к программному средству. Спецификация качества программного обеспечения. Требования к эргономике и технической эстетики. Стадии и этапы разработки, порядок контроля и приемки. Проектирование архитектуры приложения, руководство пользователя.

    курсовая работа [381,6 K], добавлен 20.06.2012

  • Формирование входных и выходных данных, SQL–скрипт генерации таблиц базы данных. Создание интерфейса программного приложения и проектирование форм базы данных. Требования к аппаратно–программному обеспечению. Инструкции по установке и эксплуатации.

    курсовая работа [1,6 M], добавлен 08.02.2013

  • Этапы разработки технического задания. Спецификация программного обеспечения при структурном подходе. Дерево диаграмм, базовые понятия сетевой модели данных. Разработка пользовательского интерфейса. Разработка сценария диалога на основе экранных форм.

    курсовая работа [2,0 M], добавлен 24.06.2012

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

    дипломная работа [2,4 M], добавлен 12.01.2011

  • Эксплуатация анализатора качества электроэнергии Satec PM175. Создание документов "Видение" и "Спецификация требований" для системы сбора данных с анализатора. Проектирование серверного и клиентского приложения в среде программного обеспечения LabVIEW.

    курсовая работа [830,6 K], добавлен 25.09.2013

  • Проектирование структуры и архитектуры программного продукта. Реализация программы конвертера файлов баз данных. Описание пользовательского интерфейса. Выбор порядка конвертации dbf файлов. Создание и исполнение шаблонов. Расчет себестоимости продукта.

    дипломная работа [2,2 M], добавлен 21.06.2013

  • Область применения и требования создаваемого Web-приложения. Требования к техническому и программному обеспечению. Разработка структуры Web-приложения и выбор средств программной реализации. Программная реализация Web-приложения. Структура базы данных.

    дипломная работа [1,4 M], добавлен 03.06.2014

  • Разработка базы данных с применением выбранной модели представления знаний и системы пользовательского интерфейса. Определение системы логического вывода. Спецификация составных частей программы. Обзор основных используемых приёмов и методов обработки.

    курсовая работа [765,6 K], добавлен 12.05.2013

  • Основание для разработки автоматизированной информационной системы "Будущий абитуриент". Технические требования к программному изделию. Порядок контроля и приемки продукта. Рассмотрение исходной базы данных. Описание интерфейса программного обеспечения.

    дипломная работа [3,3 M], добавлен 08.02.2013

  • Требования к функциональности сайта, информационному и программному обеспечению. Концептуальная модель данных. Затраты на разработку программного изделия. Описание пользовательского интерфейса главной страницы и разделов. Создание контрольного примера.

    отчет по практике [1,2 M], добавлен 03.06.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.