C高手来帮忙呀,无意勿扰!

dreamboy329 2003-12-30 08:57:28
老师给派了个题,不知从何做起:
一个公司的职员可分为经理 部门 职工.公司的服务支持由一个共同的秘书处承担,每一个职员都可以提出请求,只要填一张包括职员的职位,任务ID号及任务并加入到一个优先级队列中.优先级的队列定义为:
struct JobRequest{//作业请求记录
staff staffPerson;//职员的职位
int jobID;//作业标识
int jobTime;//作业持续时间}
输入文件中存放有一批被加入到优先队列的作业,每个作业请求都以记录的形式存放在:"job.dat"文件中.记录中记载着职员的职位,作业标识号和工作时间.所有记录在读入后都加入一个名为"jobpool"的优先级队列中,然后,按其所具有的优先级逐个退出队列,并打印出来.程序最后打印为每一类人的总服务时间.

给点思路或方法都很感激!
谢谢!


...全文
31 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
begar 2004-01-12
  • 打赏
  • 举报
回复
优先队列
dreamboy329 2004-01-09
  • 打赏
  • 举报
回复
高手们,我无论输入那一类人的职位,最后输出时间都显示在第三类下面
唉!

还有就是如何加入优先级队列之类的呀

救命呀
头疼死了
dreamboy329 2004-01-09
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#define N 1000
#define MT manager.jobTime
#define DT department.jobTime
#define ST staff.jobTime
#define S em[i].staffperson
#define MS manager.staffperson
#define DS department.staffperson
#define SS staff.staffperson
struct JobRequest
{
char staffperson[20];
int jobID;
int jobTime;
}manager,department,staff,em[N];
struct time t1,t2,t3;
int i,gdriver, gmode,diftime,T;
char s[30];

/********************create file**********************/
void newe()
{
FILE *fp;
if((fp=fopen("job.dat","wb"))==NULL)
{printf("can not open the file job.dat!");
return;
}
for(i=0;i<N;i++)
{ if(fwrite(&em[i],sizeof(struct JobRequest),1,fp)!=1)
printf("work error!");
else
{ gdriver=DETECT;
initgraph(&gdriver, &gmode, "");
setcolor(RED);
line(1, 20, 800, 20); /*画一条直线*/

printf("\n\n\ninput staffPerson:");
scanf("%s" ,&em[i].staffperson);
printf("\nInput jobID:");
scanf("%d" ,&em[i].jobID);
gettime(&t1);
printf("\nfollowing table will sure your information!\n");
printf("\n place \t jobID \t starttime\n");
printf(" %4s\t%d\t %02d:%02d:%02d\n\n",em[i].staffperson,em[i].jobID,t1.ti_hour,t1.ti_min,t1.ti_sec);
fwrite(&em,sizeof(struct JobRequest),1,fp);
printf("if you want end service,please press 'e'!\n" );
if(getch()!=101)
{ dtime();
}
else
{dtime();
return;} /* finish use */
}
}
}

/***********************ji suan shi jian*************************/
int dtime()
{
int k,l,p;
diftime=0;
gettime(&t2);
printf("**********************************");
k=t2.ti_hour-t1.ti_hour;
l=t2.ti_min-t1.ti_min;
p=t2.ti_sec-t1.ti_sec;
diftime=k*3600+l*60+p;
if(S=="manager")
{
MT+=diftime;
}
if(S=="department")
{
DT+=diftime;
}
else
{
ST+=diftime;
}
T=MT+DT+ST;
em[i].jobTime=T;
}
/***********************tong ji shi jian*************************/
void tongji()
{
gettime(&t3);
printf("\nit is %02d:%02d:%02d now!\n",t3.ti_hour,t3.ti_min,t3.ti_sec);
printf("%s,the system has serviced %ds for you!\n",S,T);
printf("\nthe follow is time table of every type staff!\n");
printf(" manager\tdepartment\tstaff\n %d\t %d\t %d\t",MT,DT,ST);
printf("\nThe total time is %d s!",T);
}

main()
{
jiemian();
newe();
dtime();
tongji();
getch();
}
liushuaiboy 2003-12-31
  • 打赏
  • 举报
回复
up
ryyy 2003-12-31
  • 打赏
  • 举报
回复
唔,题目说得好清楚了,题目就是思路
gaoxianfeng 2003-12-31
  • 打赏
  • 举报
回复
自耕自种
grooving 2003-12-31
  • 打赏
  • 举报
回复
低手来报到。
ZhangYv 2003-12-31
  • 打赏
  • 举报
回复
因为各位都无意打扰你
dreamboy329 2003-12-31
  • 打赏
  • 举报
回复
无人问津呀!
高手们咋都这么冷漠!
唉!
feilaifenghf 2003-12-31
  • 打赏
  • 举报
回复
有了优先级,用链表方法可实现按优先级输出列表,打印时间也很简单,由staff staffPerson判断同一级别,再把同一级别所化的时间加以来就可。
datablader 2003-12-31
  • 打赏
  • 举报
回复
作业题不要找人帮忙为好。
bm1408 2003-12-31
  • 打赏
  • 举报
回复
哈哈!
又是这样的问题!
强烈建议你看一下操作系统书,有进程优先级调度算法一样的!
只不过加上一个读文件的功能模块!

如果实在不行的话,我可以把进程优先级调度算法给你!
bing_huo 2003-12-31
  • 打赏
  • 举报
回复
自己写啦 这个也拿出来问 小心被竹子给你转走
dreamboy329 2003-12-31
  • 打赏
  • 举报
回复
谢谢楼上!
nobush 2003-12-31
  • 打赏
  • 举报
回复
整个就是一个先进先出的队列,队列元素为结构体,定义为JobRequest ;长度自定。然后准备三个变量累计三种人的总时间。 完了?!
dreamboy329 2003-12-31
  • 打赏
  • 举报
回复
郁闷
dreamboy329 2003-12-30
  • 打赏
  • 举报
回复
兄弟姐妹们,帮帮我吧!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧