1、 程序与算法综合设计 课程设计指导书 合肥工业大学 计算机与信息学院 2012年6月 课程设计报告 设计题目: 打印机任务队列 学生姓名: 孙久成 专 业: 电信科 班 级: 2班 学 号: 20112845 指导教师: 完成日期: 2012-6-26
2、 合肥工业大学计算机与信息学院 (一) 需求和规格说明 打印机的打印队列中,每一个打印任务都有一个优先级,为1~9的一个整数(9的优先级最高,1的优先级最低),打印按如下方法进行. (1)取出打印队列中队首的打印任务J; (2)如果打印队列中存在优先级高于J的打印任务,则将J移动到打印队列的队尾;否则,打印J. 现在的问题是,要确定你要打印的文件何时打印完毕。给定当前打印队列(一个优先级队列)和你的打印任务在当前打印队列中的位置,确定你的打印任务完成时需要多长时间。为了简化问题,假定没有新的打印任务加入到打印队列中;并且,假定完成任何一个打印任务均需要1min时间,
3、向打印队列中加入一个打印任务或从打印队列中移除一个打印任务不需要时间。 例如,当前打印队列为“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 monthlyP
4、ay 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(
5、int); vitual void displayStatus(); 属性和方法定义 类名 成员类别 类型 成员名 描述 employee 属性 char * name 雇员姓名 int individualEmpNo 个人编号 int grade 级别 float accumPay 月薪总额 int employeeNo 本公司雇员编号目前最大值 方法 void pay() 计算月薪函数(为纯虚函数) void promote(int) 升级函数 void DisplayStatus() 显示人员信息(为纯虚函数)
6、 类名 成员类别 类型 成员名 描述 technician 属性 float hourlyRate 每小时酬金 int workHours 当月工作时数 方法 void pay() accumPay=hourlyRate*workHours void DisplayStatus() 显示技术人员信息 manager 属性 float monthlyPay 固定月薪数 方法 void pay() AccumPay=monthlyPay void DisplayStatus() 显示经理信息 salesman 属性 float
7、 CommRate 按销售额提取酬金百分比 float sales 当月销售额 方法 void pay() accumPay=sales*CommRate void DisplayStatus() 显示推销员信息 salesmanager 属性 方法 void pay() accumPay=monthlyPay+CommRate*sales void DisplayStatus() 显示销售经理信息 (三) 用户手册 程序运行时,首先提示输入打印队列任务J。 然后直接输入打印任务即可完成任务。 (四) 调试
8、及测试
附录
源程序
#include
9、p(); 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
10、 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); }
11、
void main()
{
queue Q;
int J,temp;
for(int i=0;i<=10;i++)
{
cout<<"请输入打印任务J"<






