/**
* @brief 操作系统课程设计_磁盘调度算法
* @details 要求:
* 设计主界面以灵活选择某算法,且以下算法都要实现
* 1、先来先服务算法(FCFS)
* 2、最短寻道时间优先算法(SSTF)
* 3、扫描算法(SCAN)
* 4、循环扫描算法(CSCAN)
* 并求出每种算法的平均寻道长度。
* @author 3115005124_张逸扬
* @date 2018年1月7日18:35:28
*/
#include "mainwindow.h"
#include <QGridLayout>
#include <QLayout>
#include <QGroupBox>
#include <QRadioButton>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QTableWidget>
#include <QMessageBox>
#include <QHeaderView>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(tr("3115005124_张逸扬_操作系统课程设计_磁盘调度算法")); //设置标题
createDiskPage();
setCentralWidget(diskPage);
}
MainWindow::~MainWindow(){
}
//页面布局 实现
void MainWindow::createDiskPage(){
diskPage = new QWidget;
//tableGroupBox初始化及布局
tableGroupBox = new QGroupBox(tr("表格"));
diskTable = new QTableWidget(9, 2);
QLayout *tableLayout = new QVBoxLayout;
tableLayout->addWidget(diskTable);
tableGroupBox->setLayout(tableLayout);
QStringList tableLabels;
tableLabels << "被访问的\n下一个磁道号" << "移动距离\n(磁道数)";
diskTable->setHorizontalHeaderLabels(tableLabels);
diskTable->verticalHeader()->hide(); //隐藏垂直标题
diskTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
diskTable->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//algorithmGroupBox初始化及布局
algorithmGroupBox = new QGroupBox(tr("算法"));
FCFSrbutton = new QRadioButton(tr("先来先服务算法(FCFS)")); //先来先服务算法
SSTFrbutton = new QRadioButton(tr("最短寻道时间优先算法(SSTF)")); //最短寻道时间优先算法
SCANrbutton = new QRadioButton(tr("扫描算法(SCAN)")); //扫描算法
CSCANrbutton = new QRadioButton(tr("循环扫描算法(CSCAN)")); //循环扫描算法
connect(FCFSrbutton, SIGNAL(clicked(bool)), this, SLOT(setorder_off()));
connect(SSTFrbutton, SIGNAL(clicked(bool)), this, SLOT(setorder_off()));
connect(SCANrbutton, SIGNAL(clicked(bool)), this, SLOT(setorder_on()));
connect(CSCANrbutton, SIGNAL(clicked(bool)), this, SLOT(setorder_on()));
orderGroupBox = new QGroupBox(tr("请选择磁头移动方向"));
increaserbutton = new QRadioButton(tr("向磁道号增加方向访问"));
decreaserbutton = new QRadioButton(tr("向磁道号减少方向访问"));
increaserbutton->setChecked(true);
QVBoxLayout *orderLayout = new QVBoxLayout;
orderLayout->addWidget(increaserbutton);
orderLayout->addWidget(decreaserbutton);
orderGroupBox->setLayout(orderLayout);
orderGroupBox->setEnabled(false);
QVBoxLayout *suanfaLayout = new QVBoxLayout;
suanfaLayout->addWidget(FCFSrbutton);
suanfaLayout->addWidget(SSTFrbutton);
suanfaLayout->addWidget(SCANrbutton);
suanfaLayout->addWidget(CSCANrbutton);
suanfaLayout->addWidget(orderGroupBox);
algorithmGroupBox->setLayout(suanfaLayout);
//operationGroupBox初始化及布局
operationGroupBox = new QGroupBox(tr("操作"));
disknumLabel = new QLabel(tr("当前磁道号:"));
numberEdit = new QLineEdit; //当前磁道号
runButton = new QPushButton(tr("运行")); //运行按钮
runButton->setEnabled(false);
connect(runButton, SIGNAL(clicked(bool)), this, SLOT(Runclick()));
InitButton = new QPushButton(tr("初始化"));; //初始化按钮
connect(InitButton, SIGNAL(clicked(bool)), this, SLOT(Initclick()));
QGridLayout *caozuoLayout = new QGridLayout;
caozuoLayout->setColumnStretch(0, 1);
caozuoLayout->setColumnStretch(1, 1);
caozuoLayout->addWidget(disknumLabel, 0, 0);
caozuoLayout->addWidget(numberEdit, 0, 1);
caozuoLayout->addWidget(runButton, 1, 0);
caozuoLayout->addWidget(InitButton, 1, 1);
operationGroupBox->setLayout(caozuoLayout);
//resultGroupBox初始化及布局
resultGroupBox = new QGroupBox(tr("结果"));
moveLabel = new QLabel(tr("移动磁道数:")); //移动磁道数
move_averageLabel = new QLabel(tr("平均寻道长度:")); //平均寻道长度
QVBoxLayout *resultLayout = new QVBoxLayout;
resultLayout->addWidget(moveLabel);
resultLayout->addWidget(move_averageLabel);
resultGroupBox->setLayout(resultLayout);
//页面布局
QGridLayout *pageLayout = new QGridLayout;
pageLayout->setMargin(0);
pageLayout->setRowStretch(0, 2);
pageLayout->setRowStretch(1, 1);
pageLayout->setRowStretch(2, 1);
pageLayout->addWidget(tableGroupBox, 0, 0, 3, 1);
pageLayout->addWidget(algorithmGroupBox, 0, 1, 1, 1);
pageLayout->addWidget(operationGroupBox, 1, 1, 1, 1);
pageLayout->addWidget(resultGroupBox, 2, 1, 1, 1);
diskPage->setLayout(pageLayout);
}
//初始化 按钮响应
void MainWindow::Initclick(){
InitButton->setEnabled(false);
runButton->setEnabled(true);
moveLabel->setText(tr("移动磁道数:"));
move_averageLabel->setText(tr("平均寻道长度:"));
disk.clear();
//预输入数据1
diskTable->clearContents();
diskTable->setItem(0, 0, new QTableWidgetItem(QString::number(55)));
diskTable->setItem(1, 0, new QTableWidgetItem(QString::number(58)));
diskTable->setItem(2, 0, new QTableWidgetItem(QString::number(39)));
diskTable->setItem(3, 0, new QTableWidgetItem(QString::number(18)));
diskTable->setItem(4, 0, new QTableWidgetItem(QString::number(90)));
diskTable->setItem(5, 0, new QTableWidgetItem(QString::number(160)));
diskTable->setItem(6, 0, new QTableWidgetItem(QString::number(150)));
diskTable->setItem(7, 0, new QTableWidgetItem(QString::number(38)));
diskTable->setItem(8, 0, new QTableWidgetItem(QString::number(184)));
numberEdit->setText(QString::number(100));
//预输入数据2
// diskTable->clearContents();
// diskTable->setItem(0, 0, new QTableWidgetItem(QString::number(86)));
// diskTable->setItem(1, 0, new QTableWidgetItem(QString::number(147)));
// diskTable->setItem(2, 0, new QTableWidgetItem(QString::number(91)));
// diskTable->setItem(3, 0, new QTableWidgetItem(QString::number(177)));
// diskTable->setItem(4, 0, new QTableWidgetItem(QString::number(94)));
// diskTable->setItem(5, 0, new QTableWidgetItem(QString::number(150)));
// diskTable->setItem(6, 0, new QTableWidgetItem(QString::number(102)));
// diskTable->setItem(7, 0, new QTableWidgetItem(QString::number(175)));
// diskTable->setItem(8, 0, new QTableWidgetItem(QString::number(130)));
// numberEdit->setText(QString::number(143));
}
//运行按钮响应
void MainWindow::Runclick(){
if(FCFSrbutton->isChecked()){
//取界面信息
runButton->setEnabled(false);
getdiskTable();
Now_number = numberEdit->text().toInt(); //获取当前磁头位置
//调用算法
FCFS();
//界面显示结果
setResult();
setdiskTable();
InitButton->setEnabled(true);
}else if(SSTFrbutton->isChecked()){
//取界面信息
runButton->setEnabled(false);
getdiskTable();
Now_number = numberEdit->text().toInt(); //获取当前磁头位置
//调用算法
SSTF();
//界面显示结果
setResult();
setdiskTable();
InitButton->setEnabled(true);
}else if(SCANrbutton->isChecked()){
//取界面信息
runButton->setEnabled(false);
getdiskTable();
Now_number = numberEdit->text().toInt(); //获取当前磁头位置
//调用算�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
操作系统课程设计,磁盘调度算法QT版本(若解决你的问题麻烦给个五星评论).zip 操作系统课程设计,磁盘调度算法QT版本(若解决你的问题麻烦给个五星评论).zip操作系统课程设计,磁盘调度算法QT版本(若解决你的问题麻烦给个五星评论).zip操作系统课程设计,磁盘调度算法QT版本(若解决你的问题麻烦给个五星评论).zip操作系统课程设计,磁盘调度算法QT版本(若解决你的问题麻烦给个五星评论).zip
资源推荐
资源详情
资源评论
收起资源包目录
操作系统课程设计,磁盘调度算法,QT版本.zip (26个子文件)
OS_Des_Qt-master
mainwindow.h 2KB
OS_Des.pro.user 43KB
mainwindow.cpp 18KB
readme
os-des-qt-20.png 83KB
os-des-qt-03.png 80KB
os-des-qt-11.png 81KB
os-des-qt-12.png 81KB
os-des-qt-16.png 80KB
os-des-qt-17.png 81KB
os-des-qt-07.png 82KB
os-des-qt-08.png 82KB
os-des-qt-13.png 82KB
os-des-qt-10.png 79KB
os-des-qt-19.png 83KB
os-des-qt-06.png 83KB
os-des-qt-14.png 83KB
os-des-qt-01.png 150KB
os-des-qt-05.png 82KB
os-des-qt-02.png 21KB
os-des-qt-18.png 82KB
os-des-qt-15.png 82KB
os-des-qt-04.png 81KB
os-des-qt-09.png 80KB
main.cpp 195B
OS_Des.pro.user.7856242 42KB
OS_Des.pro 984B
共 26 条
- 1
资源评论
王二空间
- 粉丝: 6524
- 资源: 2011
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于javaweb的网上拍卖系统,采用Spring + SpringMvc+Mysql + Hibernate+ JSP技术
- polygon-mumbai
- Chrome代理 switchyOmega
- GVC-全球价值链参与地位指数,基于ICIO表,(Wang等 2017a)计算方法
- 易语言ADS指纹浏览器管理工具
- 易语言奇易模块5.3.6
- cad定制家具平面图工具-(FG)门板覆盖柜体
- asp.net 原生js代码及HTML实现多文件分片上传功能(自定义上传文件大小、文件上传类型)
- whl@pip install pyaudio ERROR: Failed building wheel for pyaudio
- Constantsfd密钥和权限集合.kt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功