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

Автор работы: Пользователь скрыл имя, 14 Февраля 2013 в 21:48, дипломная работа

Описание

Метою дослідження є перевірка навичок програмування на QT, отримання розробленої системи автоматичного мережевого розподілення навчального матеріалу у комп’ютерному класі з урахуванням IP-адрес комп’ютерів й інструкції з її використання та закріплення знань, отриманих в процесі теоретичної діяльності.
Задачі дослідження наступні:
Робота над програмним продуктом та реалізацією програмного забезпечення;
Застосування знань про мережну роботу засобами QT;
Застосування знань про маніпулювання файловою системою й роботою з нею засобами QT;
Отримання нового досвіду з проектування на платформі QT;

Содержание

ВСТУП 6
РОЗДІЛ 1. АНАЛІЗ ДЖЕРЕЛ СТОСОВНО МЕТОДІВ РОЗРОБКИ 9
Вибір середи програмування 9
Технологія клієнт – сервер: взаємодія клієнта з сервером 11
Робота з мережею засобами QT 13
Використання TCP за допомогою класів QTcpSocket та QTcpServer 14
Робота з файловою системою засобами QT 16
Клас QFileSystemModel 17
Клас QDir. Перегляд вмісту директорії за допомогою QDir 17
Клас QFile 19
Клас QFileInfo 20
Робота з потоками засобами QT 21
Клас QThread 22
Класи QRunnable та QThreadPool 24
Клас QtConcurrent 24
РОЗДІЛ 2. ОСНОВНІ ПРОБЛЕМИ РОЗРОБКИ ТА ЇХ РІШЕННЯ 26
Мета розробки 26
Основні задачі та проблеми 26
Крос-платформність 27
Робота з мережею: захист від збоїв 28
Власний протокол взаємодії клієнта з сервером 29
Маніпулювання файловою системою 30
Алгоритм роботи програми 32
Алгоритм роботи сервера 32
Алгоритм роботи клієнта 34
Алгоритм роботи графічного клієнта 35
РОЗДІЛ 3.РЕАЛІЗАЦІЯ СИСТЕМИ АВТОМАТИЧНОГО МЕРЕЖЕВОГО РОЗПОДІЛЕННЯ НАВЧАЛЬНОГО МАТЕРІАЛУ У КОМПЬЮТЕРНОМУ КЛАСІ 36
Програмна реалізація сервера 38
Програмна реалізація клієнта 40
Програмна реалізація графічного клієнта 42
Інструкція з використання програми 44
РОЗДІЛ 4. ОХОРОНА ПРАЦІ 48
Основні поняття охорони праці 48
Загальні положення 50
Вимоги до виробничого персоналу 51
Вимоги безпеки під час роботи 53
Вимоги безпеки в аварійних ситуаціях 54
Інструкція із заходів пожежної безпеки є службових кабінетах і лабораторіях 55
Загальні положення 55
Співробітники зобов'язані 55
Забороняється 55
Дії при пожежі 55
Обов'язки особи, відповідального за протипожежний стан приміщення 56
Відповідальність особи, відповідального за протипожежний стан приміщенні 56
ВИСНОВКИ 57
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 59

Работа состоит из  1 файл

Циганкова К.Р.docx

— 1.46 Мб (Скачать документ)

             //qint64 bytes = buffer->write(client->readAll()); // Read all the received bytes

             //in >> buffer;  // go back as many bytes as we just wrote so that it can be read

             QImage image;   

      // Construct a new QImage

             //image.loadFromData(buffer->buffer()); // Load the image from the receive buffer

             in >> image;

             if (image.isNull())  

      // Check if the image was indeed received

                 qDebug("The image is null. Something failed.");

             //mainWindow->label->setPixmap(QPixmap::fromImage(image)); 

             //QListWidgetItem *item1=new QListWidgetItem(QPixmap::fromImage(image),name);             //mainWindow->fileList->insertItem(0,item1);

         }

}

void ModelServer::disconnected()

{  QTcpSocket *client = (QTcpSocket*)sender();

    qDebug() << "Client disconnected:" << client->peerAddress().toString();

    clients.remove(clients.indexOf(client));

}

 

Лістинг MainWindow

#include "ModelClient.h"

#include <ModelFileSystem.h>

#include "MainWindow.h"

//#include "ModelClient.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)

{  // When using Designer, you should always call setupUi(this)

    // in your constructor. This creates and lays out all the widgets

    // on the MainWindow that you setup in Designer.

    setupUi(this);

    modelFileSystem = new ModelFileSystem(this,"/");

    modelClient = new ModelClient(this);

    modelClient->initiateAvalibleClientsList();

    modelClient->initiateDrivesList("localhost",1);

    modelClient->initiateDrivesList("localhost",2);

    this->updateExplorerView();

}

void MainWindow::updateExplorerView()

{   this->explorerView_1->setRowCount(0);

    QVector<ModelFileSystemItem*> fileList = modelFileSystem->getCurrentItems();

    int rowCount = modelFileSystem->getCurrentItems().size();

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

    {this->explorerView_1->insertRow(0);

        QTableWidgetItem *item = new QTableWidgetItem(QIcon(QPixmap::fromImage(fileList[i]->getIcon())),fileList[i]->getCaption(),0);

        item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

        this->explorerView_1->setItem(0, 0, item);

        item = new QTableWidgetItem(fileList[i]->getSize());

        item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

        this->explorerView_1->setItem(0, 1, item);

    }

    this->pathEdit1->setText(modelFileSystem->getCurrentPath());

    if(modelFileSystem->isBackAvalible())

       this->backButton1->setEnabled(true);

    else

       this->backButton1->setEnabled(false);

    if(modelFileSystem->isForwardAvalible())

       this->forwardButton1->setEnabled(true);

    else

       this->forwardButton1->setEnabled(false);

}

void MainWindow::on_explorerView_1_doubleClicked(QModelIndex index)

{  modelClient->initiateGoTo(this->clientBox1->itemText(this->clientBox1->currentIndex()),this->explorerView_1->item(index.row(),0)->text(),1);

}

void MainWindow::on_explorerView_2_doubleClicked(QModelIndex index)

{  modelClient->initiateGoTo(this->clientBox2->itemText(this->clientBox2->currentIndex()),this->explorerView_2->item(index.row(),0)->text(),2);

}

void MainWindow::on_backButton1_clicked(bool checked)

 

    modelClient->initiateGoBack(this->clientBox1->itemText(this->clientBox1->currentIndex()),1);

}

void MainWindow::on_backButton2_clicked(bool checked)

{

    modelClient->initiateGoBack(this->clientBox2->itemText(this->clientBox2->currentIndex()),2);

}

void MainWindow::on_forwardButton1_clicked(bool checked)

{

    modelClient->initiateGoForward(this->clientBox1->itemText(this->clientBox1->currentIndex()),1);}

void MainWindow::on_forwardButton2_clicked(bool checked)

{

    modelClient->initiateGoForward(this->clientBox2->itemText(this->clientBox2->currentIndex()),2);

}

void MainWindow::on_homeButton1_clicked(bool checked)

{

    modelClient->initiateGoHome(this->clientBox1->itemText(this->clientBox1->currentIndex()),1);

}

void MainWindow::on_homeButton2_clicked(bool checked)

{

    modelClient->initiateGoHome(this->clientBox2->itemText(this->clientBox2->currentIndex()),2);

}

void MainWindow::on_driveBox_1_currentIndexChanged(QString str)

{    //this->updateExplorerView();

}

void MainWindow::on_actionUpdate_avalible_clients_triggered()

{}

void MainWindow::on_clientBox1_currentIndexChanged(QString str)

{    modelClient->initiateDrivesList(str,1);

}

void MainWindow::on_clientBox2_currentIndexChanged(QString str)

{    modelClient->initiateDrivesList(str,2);

}

void MainWindow::on_driveBox_1_currentIndexChanged(int index)

{    modelClient->initiateChangeDrive(this->clientBox1->currentText(),this->driveBox_1->itemText(index),1);

}

 

void MainWindow::on_driveBox_2_currentIndexChanged(int index)

{

    modelClient->initiateChangeDrive(this->clientBox2->currentText(),this->driveBox_2->itemText(index),2);

}

void MainWindow::updateClientsList(QStringList l)

{

    this->clientBox1->clear();

    this->clientBox1->insertItems(0,l);

    this->clientBox2->clear();

    this->clientBox2->insertItems(0,l);

}

void MainWindow::on_copyButton_clicked(bool checked)

{

    w.show();

   /* modelClient->initiateCopy(this->clientBox1->currentText(),pathEdit1->text()+this->explorerView_1->item(this->explorerView_1->currentIndex().row(),0)->text(),this->clientBox2->currentText(),pathEdit2->text()+this->explorerView_1->item(this->explorerView_1->currentIndex().row(),0)->text()); 

{

    qDebug()<<"Source "<< pathEdit1->text()+this->explorerView_1->item(this->explorerView_1->currentIndex().row(),0)->text();

        qDebug()<<"Dest "<< pathEdit2->text()+this->explorerView_1->item(this->explorerView_1->currentIndex().row(),0)->text();

        */

}

void MainWindow::on_actionSettings_triggered()

{

    settingsForm.show();

}

void MainWindow::on_actionCopy_to_selected_clients_triggered()

{

    selectDialog.show();

 

Лістинг ModelClient

#include "ModelClient.h"

#include "MainWindow.h"

ModelClient::ModelClient(QMainWindow* wnd, QObject *parent): QObject(parent)

    socket = new QTcpSocket(this);

    modelFileSystem = new ModelFileSystem(this,"C:/");

    avalibleClientsList.push_back("localhost");

    m_nNextBlockSize=0;

    connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));

    connect(socket, SIGNAL(connected()), this, SLOT(connected()));

    socket->connectToHost("178.158.89.32", 4200);

    QByteArray block;

    QDataStream out(&block, QIODevice::WriteOnly);

    out.setVersion(QDataStream::Qt_4_2);

    out << quint64(0);

    out << (quint8)7;

    out << QString("777");

    out.device()->seek(0);

    out << quint64(block.size() - sizeof(quint64));

    socket->write(block);

    mainWindow=wnd;

}

void ModelClient::readyRead()

{

    QDataStream in(socket);

    in.setVersion(QDataStream::Qt_4_2);

    quint8 command;

    QStringList driveList;

    QByteArray block;

    QImage image;

    QString caption;

    QString size;

    QString path;

    QString ip;

    QString drive;

    QDataStream out(&block, QIODevice::WriteOnly);

    out.setVersion(QDataStream::Qt_4_2);

    quint8 count;

    quint8 rowCount;

   // QString line = QString::fromUtf8(socket->readLine()).trimmed();

    //qDebug()<<"gggggggggggggggggggggg " << line;

    for (;;)

    {

        m_nNextBlockSize=0;

            //if (!m_nNextBlockSize)

        {

                if (socket->bytesAvailable() < sizeof(quint64)) {

                    break; 

                }

                in >> m_nNextBlockSize;

            }

            if (socket->bytesAvailable() < m_nNextBlockSize) {

                break;

            }

            qDebug()<<"ba " << socket->bytesAvailable();

            qDebug()<<"b " << m_nNextBlockSize;

            in >> command;

            qDebug() << "Received command " << command;

    switch(command)

    {

        case 11:

            in >> count;

            qDebug() << "Received count "<<count;

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

            {

                in >> ip ;

in >> caption;

                qDebug() << "Received count "<<ip<<caption;

                bool found=false;

                for(int i=0;i<avalibleClientsList.size();i++)

                    if(QString(avalibleClientsList[i]).compare(caption+" - "+ip)==0)

                        found=true;

                if(!found)

                {

                   if(ip.compare("server")==0)

                      avalibleClientsList.push_back(ip);

                   else

                      avalibleClientsList.push_back(caption+" - "+ip);

                   clients.push_back(new ModelClientItem(ip,caption));

                }

                qDebug() << "Received ip " << caption+" - "+ip;

            }

            static_cast<MainWindow *>(mainWindow)->updateClientsList(avalibleClientsList);

        break;

        case 12:

            driveList;

            in >> count;

            qDebug() << "Received count "<<count;

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

            {

                in >>  drive ;

                driveList.push_back(drive);

                qDebug() << "Received drive " << drive;

            }

            if(requestModel==1)

            {

                static_cast<MainWindow *>(mainWindow)->driveBox_1->clear();

                static_cast<MainWindow *>(mainWindow)->driveBox_1->insertItems(0,driveList);

            }

            else

            {

                static_cast<MainWindow *>(mainWindow)->driveBox_2->clear();

                static_cast<MainWindow *>(mainWindow)->driveBox_2->insertItems(0,driveList);

            }

        break;

        case 13:

            in >> ip ; 

            initiateFileItemsList(ip, requestModel);

            qDebug() << "llllllllll "<<ip;

        break;

        case 14:

            in >> ip;

            in >> count;

            if(requestModel==1)

            {

                //static_cast<MainWindow *>(mainWindow)->explorerView_1->clear();

                static_cast<MainWindow *>(mainWindow)->explorerView_1->setRowCount(0);

            }

            else

            {

                //static_cast<MainWindow *>(mainWindow)->explorerView_2->clear();

                static_cast<MainWindow *>(mainWindow)->explorerView_2->setRowCount(0);

            }

            qDebug() << "Received count 141414141414141414"<<count;

          // block.clear();

            in >> path;

            if(requestModel==1)

                static_cast<MainWindow *>(mainWindow)->pathEdit1->setText(path);

            else

                static_cast<MainWindow *>(mainWindow)->pathEdit2->setText(path);

            quint8 a1,a2;

            in >> a1;

            in >> a2;

           if(requestModel==1)

            {

                if(a1==1)

                   static_cast<MainWindow *>(mainWindow)->backButton1->setEnabled(true);

                else

                   static_cast<MainWindow *>(mainWindow)->backButton1->setEnabled(false);

                if(a2==1)

                   static_cast<MainWindow *>(mainWindow)->forwardButton1->setEnabled(true);

                else

                   static_cast<MainWindow *>(mainWindow)->forwardButton1->setEnabled(false);

            }

            else

            {

                if(a1==1)

                   static_cast<MainWindow *>(mainWindow)->backButton2->setEnabled(true);

                else

                   static_cast<MainWindow *>(mainWindow)->backButton2->setEnabled(false);

                if(a2==1)

                   static_cast<MainWindow *>(mainWindow)->forwardButton2->setEnabled(true);

                else

                   static_cast<MainWindow *>(mainWindow)->forwardButton2->setEnabled(false);

            }

            block.clear();

            out << quint64(0); 

            out << (quint8)15;

            out << ip;

            out << quint8(count);

            out <<  quint8(0);

            out.device()->seek(0);

            out << quint64(block.size() - sizeof(quint64));

            socket->write(block);

        break;

        case 15:

                qDebug("Message 15");

                in >> ip;

                in >> rowCount;

                in >> count;

                count=count+1;

                block.clear();

                out << quint64(0);

                out << (quint8)15;

                out << ip;

                out << quint8(rowCount);

                out <<  quint8(count);

                out.device()->seek(0);

                out << quint64(block.size() - sizeof(quint64));

                socket->write(block);

                    in >>image;

                            //>> image;

                    if (image.isNull())        // Check if the image was indeed received

                        qDebug("The image is null. Something failed.");

                    in >> caption ;

                    in >> size;

                    if(requestModel==1)

                    {

                        static_cast<MainWindow *>(mainWindow)->explorerView_1->insertRow(0);

                        QTableWidgetItem *item = new QTableWidgetItem(QIcon(QPixmap::fromImage(image)),caption,0);

                        item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

                        static_cast<MainWindow *>(mainWindow)->explorerView_1->setItem(0, 0, item);

                        item = new QTableWidgetItem(size);

                        item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

                        static_cast<MainWindow *>(mainWindow)->explorerView_1->setItem(0, 1, item);

                    }

                    else

                    {

                        static_cast<MainWindow *>(mainWindow)->explorerView_2->insertRow(0);

                        QTableWidgetItem *item = new QTableWidgetItem(QIcon(QPixmap::fromImage(image)),caption,0);

                        item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

                        static_cast<MainWindow *>(mainWindow)->explorerView_2->setItem(0, 0, item);

                        item = new QTableWidgetItem(size);

                        item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

                        static_cast<MainWindow *>(mainWindow)->explorerView_2->setItem(0, 1, item);

                    }

               // in >>image;

                //in >> caption ; 

                //in >> size;

/*                static_cast<MainWindow *>(mainWindow)->explorerView_1->insertRow(0);

                QTableWidgetItem *item = new QTableWidgetItem(QIcon(QPixmap::fromImage(image)),caption,0);

                item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

                static_cast<MainWindow *>(mainWindow)->explorerView_1->setItem(0, 0, item);

                item = new QTableWidgetItem(size);

                item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

                static_cast<MainWindow *>(mainWindow)->explorerView_1->setItem(0, 1, item);

*/              //  block.clear();

        break;

        /*

    static_cast<MainWindow *>(mainWindow)->explorerView_1->setRowCount(0);

    QVector<ModelFileSystemItem*> fileList = modelFileSystem->getCurrentItems();

    int rowCount = modelFileSystem->getCurrentItems().size();

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

    {

        static_cast<MainWindow *>(mainWindow)->explorerView_1->insertRow(0);

Информация о работе Розробка системи автоматизованого мережевого розподілення навчального матеріалу