Приложение 1. Текст программы Server




Курсовая работа

 

По дисциплине «Операционные системы»

 

 

 

Митрофанов Н.С. студент гр. 4308

Оценка _______ Принял ________

Дата _________

 

Казань, 2013

 

Оглавление

Задание……………………………………………………………………………3

Раздел 1. Описание базы данных, с которой работает система…………….3

Раздел 2. Агент Server. Описание программы Server ……………………........6

Раздел 3. Агент Client. Описание программы Client …………………….……8

Приложение 1. Текст программы Server…………………………..…………..13

Приложение 2. Текст программы Client……………..………………………...18

Список использованной литературы………………………………………….42

Задание.

Разработка сервиса,который сообщает по запросу клиента сеансы в указанный кинотеатр.

 

Раздел 1.

Описание базы данных, с которой работает система.

Все клиенты работают с базой данных – основным хранилищем информации. Расскажем о ней подробнее.

В используемой базе данных имеется несколько таблиц.

 

 

Таблица Cinema

,,,

В таблице Cinema хранятся названия кинотеатров, даты показов, время, название фильма,зал.

Раздел 2. Агент (клиент) сервера.

.

Раздел 3. Агент (клиент) клиента.

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

 

Приложение 1. Текст программы Server

using System;

using System.Net;

using System.Net.Sockets;

using System.Drawing;

using System.Windows.Forms;

using System.Collections;

using System.Threading;

using System.Data.Odbc;

using System.IO;

 

namespace Server

{

class Program:Form

{

public ArrayList alClients;

Thread thread;

public NetworkStream stream;

TcpListener server = null;

Int32 port = 8880;

TcpClient client;

String IP = "", Port = "";

TextBox tbIP, tbPort;

bool TrueIP = true, TruePort = true, connect = true;

Button btnConnect, btnDisConnect;

public String data;

Button btnSearch, btnAdd;

TextBox SearchTextBox,tbDate, tbTime, tbCinema, tbPlace, tbKinoteatr;

ListView CinemaListView;

byte[] message = new Byte[32000];

IPAddress localAddr;

Program()

{

this.FormBorderStyle = FormBorderStyle.FixedDialog;

 

ReadIpFromFile();

 

tbIP = new TextBox();

tbIP.Width = 150;

tbIP.Location = new Point(50, 70);

tbIP.Text = IP;

this.Controls.Add(tbIP);

 

tbPort = new TextBox();

tbPort.Width = 150;

tbPort.Location = new Point(50, 125);

tbPort.Text = Port;

this.Controls.Add(tbPort);

 

tbCinema=new TextBox();

tbCinema.Width=200;

tbCinema.Location=new Point(40,370);

this.Controls.Add(tbCinema);

 

tbDate = new TextBox();

tbDate.Width = 200;

tbDate.Location = new Point(40, 320);

this.Controls.Add(tbDate);

 

tbTime = new TextBox();

tbTime.Width = 200;

tbTime.Location = new Point(290, 320);

this.Controls.Add(tbTime);

 

tbPlace = new TextBox();

tbPlace.Width = 200;

tbPlace.Location = new Point(290, 370);

this.Controls.Add(tbPlace);

 

tbKinoteatr = new TextBox();

tbKinoteatr.Width = 200;

tbKinoteatr.Location = new Point(170, 270);

this.Controls.Add(tbKinoteatr);

 

btnConnect = new Button();

btnConnect.Text = "Создать сервер";

btnConnect.Width = 140;

btnConnect.Location = new Point(55, 165);

btnConnect.Click += new EventHandler(btnConnectClick);

this.Controls.Add(btnConnect);

 

btnAdd = new Button();

btnAdd.Text = "Добавить сеанс";

btnAdd.Width = 140;

btnAdd.Location = new Point(190, 400);

btnAdd.Click += new EventHandler(btnAddClick);

this.Controls.Add(btnAdd);

 

alClients = new ArrayList();

this.Size = new System.Drawing.Size(260, 265);

this.Text = "Сервер";

 

btnDisConnect = new Button();

btnDisConnect.Text = "Удалить сервер";

btnDisConnect.Width = 140;

btnDisConnect.Location = new Point(190, 440);

btnDisConnect.Click += new EventHandler(btnDisConnectClick);

 

this.Controls.Add(btnDisConnect);

btnDisConnect.Visible = false;

 

SearchTextBox = new TextBox();

SearchTextBox.Text = "Поиск...";

SearchTextBox.Size = new Size(250, 50);

SearchTextBox.Location = new Point(150, 20);

Controls.Add(SearchTextBox);

SearchTextBox.Visible = false;

 

btnSearch = new Button();

btnSearch.Text = "Поиск";

btnSearch.Size = new Size(60, 30);

btnSearch.Location = new Point(240, 50);

btnSearch.Click += new EventHandler(btnSearchClick);

Controls.Add(btnSearch);

btnSearch.Visible = false;

 

CinemaListView = new ListView();

CinemaListView.Location = new Point(20, 100);

CinemaListView.Columns.Add("Дата", 150, HorizontalAlignment.Left);

CinemaListView.Columns.Add("Время", 150, HorizontalAlignment.Left);

CinemaListView.Columns.Add("Фильм", 150, HorizontalAlignment.Left);

CinemaListView.Columns.Add("Зал", 150, HorizontalAlignment.Left);

CinemaListView.View = View.Details;

CinemaListView.Size = new Size(500, 150);

CinemaListView.Columns[0].Width = 124;

CinemaListView.Columns[1].Width = 124;

CinemaListView.Columns[2].Width = 124;

CinemaListView.Columns[3].Width = 124;

CinemaListView.GridLines = true;

CinemaListView.FullRowSelect = true;

Controls.Add(CinemaListView);

CinemaListView.Visible = false;

CinemaListView.Click += new EventHandler(delCinema);

 

/*try

{

string direct = AppDomain.CurrentDomain.BaseDirectory;

OdbcConnection myConn;

string st = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" + direct + "Cinema";

myConn = new OdbcConnection(st);

string myCr = "CREATE TABLE Cinema(kino CHAR(20), dates CHAR(20), times CHAR(20), cinema CHAR(20), place CHAR(20))";

OdbcCommand myComm = new OdbcCommand(myCr, myConn);

myConn.Open();

OdbcDataReader myReaderCr = myComm.ExecuteReader();

myConn.Close();

}

catch (Exception)

{

}*/

}

 

public void btnAddClick(object sender, EventArgs arg)

{

OdbcConnection myConn;

string direct = AppDomain.CurrentDomain.BaseDirectory, directory = "";

string st = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=С:\\Cinema";

myConn = new OdbcConnection(st);

string mySelectQueryIns = "INSERT INTO Cinema VALUES('" + tbKinoteatr.Text + "','" + tbDate.Text + "','" + tbTime.Text + "','" + tbCinema.Text + "','" + tbPlace.Text + "')";

OdbcCommand myCommandIns = new OdbcCommand(mySelectQueryIns, myConn);

myConn.Open();

OdbcDataReader myReaderIns = myCommandIns.ExecuteReader();

myConn.Close();

}

 

public void btnSearchClick(object sender, EventArgs arg)

{

CinemaListView.Items.Clear();

 

string s = "";

OdbcConnection myConn;

string direct = AppDomain.CurrentDomain.BaseDirectory, directory = "";

string st = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" + direct + "Cinema";

myConn = new OdbcConnection(st);

string mySelectQuery = "SELECT dates,times,cinema,place FROM Cinema WHERE kino='" + SearchTextBox.Text + "'";//";

OdbcCommand myCommand = new OdbcCommand(mySelectQuery, myConn);

myConn.Open();

OdbcDataReader myReader = myCommand.ExecuteReader();

try

{

while (myReader.Read())

{

ListViewItem lvitem = new ListViewItem();

ListViewItem.ListViewSubItem lv2 = new ListViewItem.ListViewSubItem();

ListViewItem.ListViewSubItem lv3 = new ListViewItem.ListViewSubItem();

ListViewItem.ListViewSubItem lv4 = new ListViewItem.ListViewSubItem();

lvitem.Text = myReader.GetString(0);

lv2.Text = myReader.GetString(1);

lv3.Text = myReader.GetString(2);

lv4.Text = myReader.GetString(3);

lvitem.SubItems.Add(lv2);

lvitem.SubItems.Add(lv3);

lvitem.SubItems.Add(lv4);

CinemaListView.Items.Add(lvitem);

}

}

finally

{

myReader.Close();

myConn.Close();

}

}

 

public void ReadIpFromFile()

{

int counter = 0;

string line;

IP = ""; Port = "";

int k = 0;

int kS;

 

System.IO.StreamReader file = new System.IO.StreamReader(@AppDomain.CurrentDomain.BaseDirectory + "ip.txt");

while ((line = file.ReadLine())!= null)

{

System.Console.WriteLine(line);

kS = line.Length;

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

{

if (line[i] == ' ') k++;

else

{

if (k == 0) Port = Port + line[i];

else IP = IP + line[i];

}

 

}

counter++;

}

file.Close();

}

 

public void btnConnectClick(object sender, EventArgs arg)

{

if (DataOfIPChecking(tbIP.Text) && DataOfPortChecking(tbPort.Text))

{

Invalidate();

if (CreateServer())

{

btnConnect.Visible = false;

tbPort.Visible = false;

tbIP.Visible = false;

SearchTextBox.Visible = true;

btnSearch.Visible = true;

CinemaListView.Visible = true;

btnDisConnect.Visible = true;

WriteIpAtFile(tbPort.Text, tbIP.Text);

this.Width = 540;

this.Height = 530;

thread = new Thread(new ThreadStart(Connect));

thread.Start();

Invalidate();

}

}

else

{

DataOfPortChecking(tbPort.Text);

Invalidate();

}

}

 

public void btnDisConnectClick(object sender, EventArgs arg)

{

this.Size = new System.Drawing.Size(260, 265);

btnDisConnect.Visible = false;

if (server!= null)

server.Stop();

if (alClients.Count!= 0)

{

int k = alClients.Count;

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

((Clients)alClients[i]).Closing();

}

btnConnect.Visible = true;

tbPort.Visible = true;

tbIP.Visible = true;

SearchTextBox.Visible = false;

btnSearch.Visible = false;

CinemaListView.Visible = false;

Invalidate();

}

 

public bool DataOfIPChecking(String Ip)

{

TrueIP = true;

int kIP = Ip.Length;

int f = 0;

int k = 0;

if ((6 < kIP) && (kIP < 16))

{

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

{

if ((0 <= f) && (f < 4))

{

switch (Ip[i])

{

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

{

if ((0 <= k) && (k < 3)) k++;

else

{

TrueIP = false;

}

} break;

case '.':

{

if ((0 < k) && (k < 4) && (0 <= f) && (f < 3))

{ f++; k = 0; }

else

{

TrueIP = false;

}

 

} break;

default:

{

TrueIP = false;

} break;

}

}

else

{

TrueIP = false;

}

}

}

else TrueIP = false;

if (Ip[kIP - 1] == '.' || f < 3)

TrueIP = false;

return TrueIP;

}

 

public bool DataOfPortChecking(String PORT)

{

TruePort = true;

int kPort = PORT.Length;

if ((3 < kPort) && (kPort < 6))

{

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

{

if ((PORT[i] < '0') || (PORT[i] > '9'))

{

TruePort = false;

}

}

}

else

{

TruePort = false;

}

return TruePort;

}

 

public bool CreateServer()

{

try

{

localAddr = IPAddress.Parse(tbIP.Text);

port = Int32.Parse(tbPort.Text);

server = new TcpListener(localAddr, port);

server.Start();

connect = true;

return true;

}

catch (Exception)

{

connect = false;

return false;

}

}

 

public void WriteIpAtFile(string PORT, string Ip)

{

StreamWriter sw = new StreamWriter(@AppDomain.CurrentDomain.BaseDirectory + "ip.txt");

sw.WriteLine(PORT + " " + Ip);

sw.Close();

}

 

public void Connect()

{

try

{

while (true)

{

try

{

client = server.AcceptTcpClient();

stream = client.GetStream();

//int i = stream.Read(message, 0, message.Length);

//data = System.Text.Encoding.Unicode.GetString(message, 0, i);

//message = System.Text.Encoding.Unicode.GetBytes(data);

//stream.Write(message, 0, message.Length);

//if (data[0] == '0')

{

Clients st = new Clients(client, stream,this);

alClients.Add(st);

}

Invalidate();

}

catch (Exception)

{

}

}

}

catch (Exception e)

{

}

}

 

public void delCinema(object sender, EventArgs arg)

{

/*string student = StudentsListView.SelectedItems[0].Text;

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

{

if (StudentsListView.Items[i].Text == student)

{

StudentsListView.Items.RemoveAt(i);

 

Invalidate();

break;

}

}

string direct = AppDomain.CurrentDomain.BaseDirectory;

String st = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + direct + "Cinema";

OdbcConnection myConn = new OdbcConnection(st);

string mySelectQuery = "DELETE FROM Cinema WHERE (kino='" + + "')";

OdbcCommand myCommand = new OdbcCommand(mySelectQuery, myConn);

myConn.Open();

OdbcDataReader myReader = myCommand.ExecuteReader();

myConn.Close();*/

}

 

protected override void OnPaint(PaintEventArgs arg)

{

if (CinemaListView.Visible)

{

//arg.Graphics.DrawString("Подключено клиентов: " + (alClients.Count), Font, new SolidBrush(Color.Black), 10, 20);

arg.Graphics.DrawString("Кинотеатр", Font, new SolidBrush(Color.Black), 240, 253);

arg.Graphics.DrawString("Дата", Font, new SolidBrush(Color.Black), 125, 303);

arg.Graphics.DrawString("Время", Font, new SolidBrush(Color.Black), 370, 303);

arg.Graphics.DrawString("Фильм", Font, new SolidBrush(Color.Black), 120, 353);

arg.Graphics.DrawString("Зал", Font, new SolidBrush(Color.Black), 377, 353);

}

if (tbIP.Visible)

{

arg.Graphics.DrawString("IP", Font, new SolidBrush(Color.Black), 111, 50);

arg.Graphics.DrawString("Port", Font, new SolidBrush(Color.Black), 107, 105);

arg.Graphics.DrawString("Сервер", new Font("Verdana", 11), new SolidBrush(Color.Black), 87, 15);

}

if (!connect)

arg.Graphics.DrawString("Ошибка при создании", Font, new SolidBrush(Color.Red), 63, 148);

if (!TrueIP)

arg.Graphics.DrawString("Ip введен неправильно", Font, new SolidBrush(Color.Red), 50, 90);

if (!TruePort)

arg.Graphics.DrawString("Port введен неправильно", Font, new SolidBrush(Color.Red), 50, 145);

 

arg.Graphics.DrawString("© Mitrofanov 2013", Font, new SolidBrush(Color.Black), ClientSize.Width / 2 - 55, ClientSize.Height - 20);

}

 

protected override void OnClosed(EventArgs arg)

{

if (server!= null)

server.Stop();

if (alClients.Count!= 0)

{

int k = alClients.Count;

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

((Clients)alClients[i]).Closing();

}

if(thread!=null)

this.thread.Abort();

}

 

static void Main()

{

Application.Run(new Program());

}

}

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: