打印机队列
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
设计题目:打印机任务队列
学生姓名:
专业:计算机科学与技术
班级:
学号:
指导教师:
完成日期:
合肥工业大学
计算机与信息学院
一. 需求和规格说明
题目:打印机任务队列
要求:打印机的打印队列中,每一个打印任务都有一个优先级,为1~9的一个整数(9的优先级最高,1的优先级最低),打印按如下方法进行.
(1)取出打印队列中队首的打印任务J;
(2)如果打印队列中存在优先级高于J的打印任务,则将J移动到打印队列的队尾;否则,打印J.
现在的问题是,要确定你要打印的文件何时打印完毕。给定当前打印队列(一个优先级队列)和你的打印任务在当前打印队列中的位置,确定你的打印任务完成时需要多长时间。为了简化问题,假定没有新的打印任务加入到打印队列中;并且,假定完成任何一个打印任务均需要1min时间,向打印队列中加入一个打印任务或从打印队列中移除一个打印任务不需要时间。
例如,当前打印队列为“1 1 9 1 1 1”且你的打印任务在队首时,需要5min.
二. 设计
1.设计思想:
根据要求,可采用队列结构存储打印队列,因此,设计出一个打印队列类printqueue
来存储数据并实现相关操作。为了读入打印队列,需设计一个函数createqueue();
为了判断打印队列中的优先级,需设计一个函数priority();为了记录打印任务在
打印队列中所在位置,可定义一个标识符flag来标记位置;为了算出打印所费时间,
可定义一个变量time.
确定何时打印结束:当执行打印时要打印任务在打印队列的队头即flag=1时打印结
束。
类图:
printqueue()
int count;
int front;
int rear;
int data[ ];
int flag;
int time;
error_code createqueue( int x);
bool empty() const;
bool full() const;
error_code get_front(int &x) const;
error_code append(const int x);
error_code serve();
bool priority();
error_code print(const int x);
2.设计表示:
属性和方法定义:
类名成
员
类
别
类型成员名描述
printqueue 属
性
int count 当前打印队列中的打印任务数
private
int front 打印队列的队头指针private
int rear 打印队列的队尾指针private
int data[] 存储打印队列的数组private
int flag 标识符,标记要打印的任务在打印
队列中的位置public int time 打印完成所需时间public
方
法
printqueue() 构造函数public
error_code createqueue() 输入并构造打印队列public
bool empty() 判断打印队列是否为空public
bool full() 判断打印队列是否已满public
error_code get_front() 取打印队列的队头元素public
error_code append() 出队public
error_code serve() 入队public
bool priority() 判断队头打印任务是否优先级最高
public
error_code print() 打印函数public
三. 用户手册
1,使用时先输入打印队列,注意打印队列为优先级队列,优先级为1~9,输入-1作为打印队列的输入结束符,且打印队列长度不能超过98。
2,输入打印任务在打印队列中的位置,用数字表示,位置不能超出打印队列长度。
之后计算机便可自行执行打印任务并计算时间。
四. 调试及测试
此次设计的程序基本实现了题目中的要求。
程序运行的时空效率分析:
空间消耗:需要空间存储打印队列,front,rear,count,flag,time及其他中间变量的值,空间消耗较少。
时间性能:若队列长度为n,则最多需要移动元素n!次,最多需要打印n次。时间性能较佳。
测试数据集;
打印队列打印任务所在位
置
运行结果
正确输入 1 1 9 1 1 1 -1 1 所用时间为5min 打印任务位
置错误
1 2 3 4 5 -1 6 所用时间为0min 打印队列输 1 1 2 2 4 10 9 2 -- 输入错误
入错误 1 -1
打印队列输
入错误
c a b e 1 2 3 -1 -- 输入错误
打印队列超长1 2 3 4 5 6 7 8
9 ….(共99个数)
-- 所用时间为0min
打印队列为空-1 --
--
运行实例截图;
改进设想:为了简化问题,本实验中假定没有新的打印任务加入到打印队列中,向打印队列中加入一个打印任务或从打印队列中移除一个打印任务不需要时间。可以设计在打印过程中有新任务加入,且移动元素需要时间情况下的程序。
经验和体会:通过本课程设计,我掌握队列的基本方法和基本原理,运用语言编程及调试的能力得到提升,学会了用数据结构解决简单的实际问题,对日后的进一步学习大有益处。
附录
源程序清单:
#include
# include
using namespace std;
enum error_code{success,overflow,underflow,errorinput};
class printqueue{ //队列类
public:
printqueue(); //构造函数
error_code createqueue( int x);
bool empty()const; //判断队列是否为空
bool full()const; //判断队列是否满
error_code get_front(int &x)const; //取队头元素
error_code append(const int x); //x入队
error_code serve(); //队尾元素出队
bool priority(); //判断队头打印任务是否优先级最高
error_code print(const int x); //打印函数
int flag; //指示打印任务在打印队列中的位置
int time; //完成打印任务所需时间
//假定完成任何一个打印任务均需要1min时间
//向打印队列中加入一个打印任务或从打印队列中移除一个打印任务不需要时间private:
int count; //队列中元素个数
int front; //队头指针
int rear; //队尾指针