资源描述
程序与算法综合设计
课程设计指导书
合肥工业大学
计算机与信息学院
2012年6月
课程设计报告
设计题目:
打印机任务队列
学生姓名:
孙久成
专 业:
电信科
班 级:
2班
学 号:
20112845
指导教师:
完成日期:
2012-6-26
合肥工业大学计算机与信息学院
(一) 需求和规格说明
打印机的打印队列中,每一个打印任务都有一个优先级,为1~9的一个整数(9的优先级最高,1的优先级最低),打印按如下方法进行.
(1)取出打印队列中队首的打印任务J;
(2)如果打印队列中存在优先级高于J的打印任务,则将J移动到打印队列的队尾;否则,打印J.
现在的问题是,要确定你要打印的文件何时打印完毕。给定当前打印队列(一个优先级队列)和你的打印任务在当前打印队列中的位置,确定你的打印任务完成时需要多长时间。为了简化问题,假定没有新的打印任务加入到打印队列中;并且,假定完成任何一个打印任务均需要1min时间,向打印队列中加入一个打印任务或从打印队列中移除一个打印任务不需要时间。
例如,当前打印队列为“1 1 9 1 1 1”且你的打印任务在队首时,需要5min.
(二) 设计
系统类图salesmanager
virtual void pay();
vitual void displayStatus();
salesman
float CommRate;
float sales;
virtual void pay();
vitual void displayStatus();
manager
float monthlyPay
virtual void pay();
vitual void displayStatus();
technician
float hourlyRate
int workHours
virtual void pay();
vitual void displayStatus();
Queue
char *name
int individualEmpNo;
int grade;
float accumPay;
static int employeeNo;
virtual void pay();
void promote(int);
vitual void displayStatus();
属性和方法定义
类名
成员类别
类型
成员名
描述
employee
属性
char *
name
雇员姓名
int
individualEmpNo
个人编号
int
grade
级别
float
accumPay
月薪总额
int
employeeNo
本公司雇员编号目前最大值
方法
void
pay()
计算月薪函数(为纯虚函数)
void
promote(int)
升级函数
void
DisplayStatus()
显示人员信息(为纯虚函数)
类名
成员类别
类型
成员名
描述
technician
属性
float
hourlyRate
每小时酬金
int
workHours
当月工作时数
方法
void
pay()
accumPay=hourlyRate*workHours
void
DisplayStatus()
显示技术人员信息
manager
属性
float
monthlyPay
固定月薪数
方法
void
pay()
AccumPay=monthlyPay
void
DisplayStatus()
显示经理信息
salesman
属性
float
CommRate
按销售额提取酬金百分比
float
sales
当月销售额
方法
void
pay()
accumPay=sales*CommRate
void
DisplayStatus()
显示推销员信息
salesmanager
属性
方法
void
pay()
accumPay=monthlyPay+CommRate*sales
void
DisplayStatus()
显示销售经理信息
(三) 用户手册
程序运行时,首先提示输入打印队列任务J。
然后直接输入打印任务即可完成任务。
(四) 调试及测试
附录
源程序
#include<iostream.h>
typedef int DATA_TYPE;
const int maxlen=100;
enum error_code
{
success=0,underflow,overflow
};
class queue
{
public:
queue();
bool empty()const;
error_code get_front(DATA_TYPE &x)const;
error_code append(const DATA_TYPE X);
error_code pop();
bool full()const;
public:
int rear,front;
DATA_TYPE data[maxlen];
};
queue::queue()
{
rear=0;
front=0;
}
bool queue::empty()const
{
return (rear==front);
}
error_code queue::get_front(DATA_TYPE &x)const
{
if(empty())
return underflow;
else
{
x=data[front%maxlen];
return success;
}
}
error_code queue::append(const DATA_TYPE X)
{
if(full())
return overflow;
else
{
data[rear%maxlen]=X;
rear++;
}
}
error_code queue::pop()
{
if(empty())
return underflow;
else
{
front++;
return success;
}
}
bool queue::full()const
{
return (rear==maxlen-1);
}
void main()
{
queue Q;
int J,temp;
for(int i=0;i<=10;i++)
{
cout<<"请输入打印任务J"<<endl;
cin>>J;
Q.append(J);
}
cout<<"原来的队列为"<<endl;
while(Q.empty()!=true)
{
Q.get_front(J);
cout<<J<<" ";
Q.pop();
}
cout<<endl;
cout<<"队头元素为"<<Q.data[0];
for(int j=0;j<=100;j++)
{
if(Q.data[j]<Q.data[j+1])
{
temp=Q.data[j];
Q.data[j]=Q.data[j+1];
Q.data[j+1]=temp;
}
}
cout<<endl;
cout<<"取出打印队列中队首的打印任务J为"<<Q.data[0];
cout<<endl;
}
测试数据:
测试结果:
展开阅读全文