
lab7.OSN
.docx
Файл mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
namespace Ui { class MainWindow; }
class MainWindow : public QMainWindow { Q_OBJECT
public: explicit MainWindow(QWidget *parent = 0); ~MainWindow();
private slots: void on_startButton_clicked(); void on_infoButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
Файл mainwindow.cpp:
#include "mainwindow.h"
#include "abstract_paging.h"
#include "clock_paging.h"
#include "fifo_paging.h"
#include "lfu_paging.h"
#include "lru_paging.h"
#include "reverselru_paging.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <memory>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; }
void MainWindow::on_startButton_clicked() {
ui->statusBar->showMessage(""); std::unique_ptr<AbstractPaging> paging; if (ui->clockButton->isChecked()) { paging = std::unique_ptr<AbstractPaging>(
new ClockPaging(ui->frameCountSpin->value()));
} else if (ui->fifoButton->isChecked()) { paging = std::unique_ptr<AbstractPaging>(
new FifoPaging(ui->frameCountSpin->value()));
} else if (ui->lfuButton->isChecked()) { paging = std::unique_ptr<AbstractPaging>( new LfuPaging(ui->frameCountSpin->value()));
} else if (ui->lruButton->isChecked()) { paging = std::unique_ptr<AbstractPaging>( new LruPaging(ui->frameCountSpin->value()));
} else {
paging = std::unique_ptr<AbstractPaging>(
new ReverseLruPaging(ui->frameCountSpin->value()));
}
QStringList stringList = ui->referLine->text().split(QRegExp("[.,;\\s]
+"));
ui->resultWidget->clear(); for (QString string : stringList) {
bool isOk = true;
int page = string.toInt(&isOk);
if (isOk == false) {
QMessageBox::critical(this, "Ошибка",
"Ошибка при чтении ссылочной строки"); ui->resultWidget->clear();
return;
}
int pageFaultCountBefore = paging->getPageFaultCount(); paging->refer(page);
int pageFaultCountAfter = paging->getPageFaultCount();
QString resultLine = QString::number(page) + ": "; const std::list<int> list = paging->getList(); for (auto page : list) {
resultLine += QString::number(page) + ", ";
}
resultLine.chop(2);
if (pageFaultCountBefore != pageFaultCountAfter) {
resultLine += " [отказ страницы]";
}
ui->resultWidget->addItem(resultLine);
};
ui->statusBar->showMessage("Число отказов страниц: " +
QString::number(paging->getPageFaultCount()));
}
void MainWindow::on_infoButton_clicked() {
QMessageBox::information(this, "Информация",
"Программа для моделирования стратегий замещения"
"страниц в оперативной памяти.\nАвтор: Коваленко"
"Леонид (ИКПИ-85).\n");
}
Файл main.cpp:
#include "mainwindow.h" #include <QApplication>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MainWindow w;
w.show(); return a.exec();
}
Файл mainwindow.ui:
<?xml version="1.0" encoding="UTF-8"?><ui
version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property
name="geometry"><rect><x>0</x><y>0</y><width>390</width><height>370</ height></rect></property><property name="sizePolicy"><sizepolicy
hsizetype="Expanding"
vsizetype="Expanding"><horstretch>0</horstretch><verstretch>0</verstretch></
sizepolicy></property><property
name="minimumSize"><size><width>390</width><height>370</height></size></
property><property
name="maximumSize"><size><width>390</width><height>370</height></size></
property><property
name="windowTitle"><string>Моделирование</string></property><widget class="QWidget" name="centralWidget"><widget class="QListWidget" name="resultWidget"><property
name="geometry"><rect><x>10</x><y>125</y><width>370</width><height>220</ height></rect></property><property
name="editTriggers"><set>QAbstractItemView::NoEditTriggers</set></ property><property
name="defaultDropAction"><enum>Qt::IgnoreAction</enum></property></ widget><widget class="QLineEdit" name="referLine"><property name="geometry"><rect><x>200</x><y>10</y><width>180</width><height>27</ height></rect></property><property name="text"><string>1 2 3 1 2 3 1 2 3 4 5</string></property></widget><widget class="QLabel" name="label"><property name="geometry"><rect><x>10</x><y>13</y><width>180</width><height>20</ height></rect></property><property name="text"><string>Ссылочная строка:</string></property><property
name="alignment"><set>Qt::AlignCenter</set></property></widget><widget class="QRadioButton" name="fifoButton"><property
name="geometry"><rect><x>10</x><y>70</y><width>70</width><height>25</ height></rect></property><property
name="text"><string>FIFO</string></property><property name="checked"><bool>true</bool></property></widget><widget class="QRadioButton" name="reverseLRUButton"><property
name="geometry"><rect><x>80</x><y>70</y><width>121</width><height>25</
height></rect></property><property
name="text"><string>ReverseLRU</string></property></widget><widget class="QPushButton" name="startButton"><property
name="geometry"><rect><x>200</x><y>70</y><width>180</width><height>25</
height></rect></property><property
name="text"><string>Начать</string></property></widget><widget class="QLabel"
name="label_2"><property
name="geometry"><rect><x>10</x><y>43</y><width>180</width><height>20</ height></rect></property><property name="text"><string>Число страниц:</string></property><property
name="alignment"><set>Qt::AlignCenter</set></property></widget><widget class="QSpinBox" name="frameCountSpin"><property
name="geometry"><rect><x>200</x><y>40</y><width>180</width><height>27</ height></rect></property><property
name="alignment"><set>Qt::AlignCenter</set></property><property name="minimum"><number>1</number></property><property name="maximum"><number>1000</number></property><property name="singleStep"><number>1</number></property><property name="value"><number>3</number></property></widget><widget class="QRadioButton" name="clockButton"><property
name="geometry"><rect><x>10</x><y>95</y><width>70</width><height>25</ height></rect></property><property
name="text"><string>Clock</string></property><property name="checked"><bool>false</bool></property></widget><widget
class="QRadioButton" name="lfuButton"><property
name="geometry"><rect><x>140</x><y>95</y><width>60</width><height>25</
height></rect></property><property
name="text"><string>LFU</string></property></widget><widget
class="QRadioButton" name="lruButton"><property
name="geometry"><rect><x>80</x><y>95</y><width>60</width><height>25</
height></rect></property><property
name="text"><string>LRU</string></property></widget><widget
class="QPushButton" name="infoButton"><property
name="geometry"><rect><x>200</x><y>95</y><width>180</width><height>25</
height></rect></property><property
name="text"><string>Информация</string></property></widget></widget><widget class="QStatusBar" name="statusBar"/></widget><layoutdefault spacing="6" margin="11"/><resources/><connections/></ui>
Вывод
В результате выполнения лабораторной работы:
научились писать программу, моделирующую стратегии замещения страниц в оперативной памяти;
закрепили свои навыки разработки в Qt.