//多给点财富吧
#include<stdio.h>
#include<stdlib.h>
typedef struct tagHuJiXinXi
{
char shfzhh[64]//身份z号
char xm[16]//姓名
char xb[8]//性别
int nl//年龄
char xl[64]//学历
char zhzh[64]//住址
char dh[32]//电话
}HuJiXinXi,*PtHuJiXinXi
void readfromfile()
void writetofile()
void tuichu()
void add()
void outputone()
void outputall()
void sortbyage()
void myrealloc()
void findbyagerange()
void del()
void alter()
void find()
void showmenu()
void processmenu(int m)
PtHuJiXinXi pt
int count=0,capacity=16
int main()
{
int m
pt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi))
readfromfile()
while(1)
{
showmenu()
scanf("%d",&m)
processmenu(m)
}
system("PAUSE")
return EXIT_SUCCESS
}
void processmenu(int m)
{
switch(m)
{
case 0:
tuichu()
break
case 1:
add()
break
case 2:
del()
break
case 3:
alter()
break
case 4:
outputall()
break
case 5:
sortbyage()
break
case 6:
findbyagerange()
break
case 7:
writetofile()
break
case 8:
find()
break
default:
printf("不可识别的命令。\n")
}
}
//实现存储空间的自动扩充
void myrealloc()
{
if(count+1>=capacity)
{
int i
capacity*=2
PtHuJiXinXi temppt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi))
for(i=0i<counti++)
{
temppt[i]=pt[i]
}
free(pt)
pt=temppt
}
}
void readfromfile()
{
char f[128]
FILE *inf
HuJiXinXi hjxx
printf("请输入包含户籍信息的文件的文件名,如果还没有文件,请输入omit(文件中每行一条户籍信息,")
printf("格式:身份z号 姓名 性别 年龄 学历 住址 电话)...\n")
gets(f)
if(!strcmp(f,"omit"))
{
return
}
inf=fopen(f,"r")
if(NULL!=inf)
{
do
{
fscanf(inf,"%s %s %s %d %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,&hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh)
myrealloc()
pt[count++]=hjxx
}while(!feof(inf))
fclose(inf)
printf("信息已成功加载。\n")
}
else
{
printf("文件名无效或文件无数据。\n")
}
}
void writetofile()
{
char f[128]={'\0'}
FILE *outf
int i
printf("请输入保存户籍信息的文件的文件名:\n")
scanf("%s",f)
outf=fopen(f,"w")
if(NULL!=outf)
{
for(i=0i<counti++)
{
fprintf(outf,"%s %s %s %d %s %s %s",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh)
if(count-1!=i)
{
fprintf(outf,"%s","\n")
}
}
fclose(outf)
printf("文件保存成功。\n")
}
else
{
printf("文件名无效。\n")
}
}
void showmenu()
{
char menu[]="菜单:\n0、退出\n1、添加一条信息\n2、删除一条信息\n3、批量修改\n4、浏览全部信息\n5、按年龄排序 \n6、按年龄区间查询\n7、保存到文件\n8、随意查询\n请选择一个菜单:"
puts(menu)
}
void tuichu()
{
if(NULL==pt)
{
free(pt)
}
exit(0)
}
//判断身份z号是否重复
int isshfzhhchf(char s[64])
{
int i,r=0
for(i=0i<counti++)
{
if(!strcmp(pt[i].shfzhh,s))
{
r=1
break
}
}
return r
}
void add()
{
myrealloc()
printf("添加一条户籍信息。\n")
printf("请输入身份z号 姓名 性别 年龄 学历 住址 电话:\n")
scanf("%s %s %s %d %s %s %s",pt[count].shfzhh,pt[count].xm,pt[count].xb,&pt[count].nl,
pt[count].xl,pt[count].zhzh,pt[count].dh)
if(!isshfzhhchf(pt[count].shfzhh))
{
count++
printf("添加成功。\n")
}
else
{
printf("身份z号重复,添加失败。\n")
}
}
//输出下标为n的一条户籍信息
void outputone(int n)
{
if(n>=0 &&n<count)
{
printf("第%d条户籍信息:\n",n+1)
printf("%s %s %s %d %s %s %s。\n",pt[n].shfzhh,pt[n].xm,pt[n].xb,pt[n].nl,pt[n].xl,pt[n].zhzh,pt[n].dh)
}
else
{
printf("没有第%d条户籍信息存在。\n",n+1)
}
}
void outputall()
{
if(0==count)
{
printf("系统已空。\n")
}
else
{
int i
for(i=0i<counti++)
{
outputone(i)
}
}
}
void sortbyage()
{
int i,j,px
HuJiXinXi hjxx
printf("子菜单:\n1、升序\n2、降序\n请选择:")
scanf("%d",&px)
if(1==px || 2==px)
{
for(i=0i<count-1i++)
{
for(j=0j<count-i-1j++)
{
if(1==px)
{
if(pt[j].nl>pt[j+1].nl)
{
hjxx=pt[j+1]
pt[j+1]=pt[j]
pt[j]=hjxx
}
}
else
{
if(pt[j].nl<pt[j+1].nl)
{
hjxx=pt[j+1]
pt[j+1]=pt[j]
pt[j]=hjxx
}
}
}
}
printf("排序完成。\n")
}
else
{
printf("无法处理的子菜单命令。\n")
}
}
void findbyagerange()
{
int i,min,max,c=0
printf("请输入要查找的户籍信息的最小年龄和最大年龄:")
scanf("%d %d",&min,&max)
printf("查询结果如下:\n")
for(i=0i<counti++)
{
if(pt[i].nl>=min &&pt[i].nl<=max)
{
outputone(i)
printf("符合你的要求。\n")
c++
}
}
if(0==c)
{
printf("没有符合你的要求的户籍信息。\n")
}
}
//删除一条户籍信息
void del()
{
int i,n
HuJiXinXi hjxx
printf("请输入要删除的是第几条户籍信息:")
scanf("%d",&n)
if(n-1>=0 &&n-1<count)
{
hjxx=pt[n-1]
for(i=ni<counti++)
{
pt[i-1]=pt[i]
}
printf("删除成功。\n第%d条户籍信息:\n",n)
printf("%s %s %s %d %s %s %s。",hjxx.shfzhh,hjxx.xm,hjxx.xb,hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh)
printf(",已删除。\n")
count--
}
else
{
printf("删除失败。\n不存在第%d条户籍信息。\n",n)
}
}
//根据hjxx的值修改下标为n的户籍信息
//对于pt[n]的对应字段,如果在hjxx中是用*表示的,则不修改
void change(HuJiXinXi hjxx,int n)
{
//返回非0值,意味着hjxx.shfzhh(身份z号)不等于*,即需要修改pt[n].shfzhh字段,以下都类似
if(strcmp(hjxx.shfzhh,"*"))
{
strcpy(pt[n].shfzhh,hjxx.shfzhh)
}
if(strcmp(hjxx.xm,"*"))
{
strcpy(pt[n].xm,hjxx.xm)
}
if(strcmp(hjxx.xb,"*"))
{
strcpy(pt[n].xb,hjxx.xb)
}
//不等于-1表示需要修改pt[n].nl(年龄)
if(-1!=hjxx.nl)
{
pt[n].nl=hjxx.nl
}
if(strcmp(hjxx.xl,"*"))
{
strcpy(pt[n].xl,hjxx.xl)
}
if(strcmp(hjxx.zhzh,"*"))
{
strcpy(pt[n].zhzh,hjxx.zhzh)
}
if(strcmp(hjxx.dh,"*"))
{
strcpy(pt[n].dh,hjxx.dh)
}
}
//对户籍信息进行批量修改
void alter()
{
int n
HuJiXinXi hjxx
char nl[16]
while(1)
{
printf("请输入要修改第几条户籍信息(-1退出循环):")
scanf("%d",&n)
if(-1==n)
{
break
}
else if(n-1>=0 &&n-1<count)
{
printf("修改...\n")
outputone(n-1)
printf("请输入将此户籍信息修改后的新的姓名 性别 年龄 学历 住址 电话(保持原值的用*代替):\n")
scanf("%s %s %s %s %s %s",hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh)
//因为只有nl(年龄)是int型,故对nl作特殊处理,-1表示修改时年龄保持原值不变(不修改)
hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1)
strcpy(hjxx.shfzhh,"*")
change(hjxx,n-1)
printf("修改完成。\n")
}
else
{
printf("无法修改,不存在第%d条户籍信息。\n",n)
}
}
}
//用于判断pt[n]是否匹配hjxx的模式
int ismatch(HuJiXinXi hjxx,int n)
{
int r=1
if(strcmp(hjxx.shfzhh,"*") &&strcmp(hjxx.shfzhh,pt[n].shfzhh))
{
r=0
}
if(r &&strcmp(hjxx.xm,"*") &&strcmp(hjxx.xm,pt[n].xm))
{
r=0
}
if(r &&strcmp(hjxx.xb,"*") &&strcmp(hjxx.xb,pt[n].xb))
{
r=0
}
if(r &&-1!=hjxx.nl &&hjxx.nl!=pt[n].nl)
{
r=0
}
if(r &&strcmp(hjxx.xl,"*") &&strcmp(hjxx.xl,pt[n].xl))
{
r=0
}
if(r &&strcmp(hjxx.zhzh,"*") &&strcmp(hjxx.zhzh,pt[n].zhzh))
{
r=0
}
if(r &&strcmp(hjxx.dh,"*") &&strcmp(hjxx.dh,pt[n].dh))
{
r=0
}
return r
}
//按模式查询户籍信息
void find()
{
int i,c=0
char nl[16]
HuJiXinXi hjxx
printf("请输入要查询的户籍信息的身份z号 姓名 性别 年龄 学历 住址 电话(只需提供关键信息以用于查询,不提供的信息请用*代替):\n")
scanf("%s %s %s %s %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh)
//因为只有nl(年龄)是int型,故对nl作特殊处理,-1表示查询时不需比较年龄
hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1)
for(i=0i<counti++)
{
if(ismatch(hjxx,i))
{
printf("找到第%d条满足你的模式要求的户籍信息如下:\n",c+1)
printf("%s %s %s %d %s %s %s。\n",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh)
c++
}
}
if(!c)
{
printf("系统中没有满足你的模式要求的户籍信息。\n")
}
}
#include <stdio.h>#include <windows.h>
#include <stdlib.h>
typedef struct JOB
{
int hour//用于存储输入的时
int min//用于存储输入的分
int ID//记录此作业的号
int requesttime//存储作业所估计运行时间
int runtime//作业周转时间
int cometime//作业进入时间
int finishtime//作业结束时间
int starttime//作业开始时间
float runtime2//带权周转时间
int prior//响应比
}JOB
float counttime1=0//用于存储总的周转时间
float counttime2=0//用于存储总的带权周转时间
int nowtime
int flat=0
int sign=0
void insert(JOB [],JOB)
void FCFS()
void SJF()
void HRN()
void getprior(JOB a,int b)
int getmin(int i)
int gethour(int i)
int trans(int i,int j)
#define N 100
JOB job[N]
JOB wait[N]//用于SJF中存储等待的作业的时间
JOB job2[N]//由于在SJF中不好控制输出时按照作业序号的顺序输出,用一个数组存储
int co=0
int jobnum
void main()
{
int i
printf("输入作业数:\n")
scanf("%d",&i)
jobnum=i
FILE *fp
fp = fopen("in.txt","rb")
if(fp == NULL)
{
printf("Can't open in.txt")
exit(0)
}
for(int j=0j<ij++)
{
fscanf(fp,"%d:%d %d",&job[j].hour,&job[j].min,&job[j].requesttime)
job[j].ID=j+1
job[j].cometime=job[j].hour*60 + job[j].min
printf("%d\n",job[j].requesttime)
}
printf("\n ================================")
printf("\n | 1:FCFS 2:SJF|")
printf("\n | 3:HRN |")
printf("\n ================================")
printf("\nPlease select a number from (1,2,3):")
scanf("%d",&i)
switch(i)
{
case 1: FCFS()break
case 2: SJF()break
case 3: HRN()break
}
}
void FCFS()
{
printf("\n\n根据先来先服务算法:\n")
int k
for(int i=0i<jobnum-1i++)//将作业数组按照进入时间先后排序。
{
k=i
for(int j=i+1j<jobnumj++)
{
if(job[j].cometime<job[k].cometime) k=j
}
if(k!=i)
{
JOB a
a=job[k]
job[k]=job[i]
job[i]=a
}
}
for(int i=0i<jobnumi++)
{
if(i==0)//如果是第一个任务
{
job[i].starttime=job[i].cometime
job[i].finishtime=job[i].starttime+job[i].requesttime
job[i].runtime=job[i].finishtime-job[i].cometime
job[i].runtime2=(float)job[i].runtime/(float)job[i].requesttime
counttime1+=job[i].runtime
counttime2+=job[i].runtime2
}
else
{
job[i].starttime=(job[i-1].finishtime>job[i].cometime ? job[i-1].finishtime : job[i].cometime)
job[i].finishtime=job[i].starttime+job[i].requesttime
job[i].runtime=job[i].finishtime-job[i].cometime
job[i].runtime2=(float)job[i].runtime/(float)job[i].requesttime
counttime1+=job[i].runtime
counttime2+=job[i].runtime2
}
}
printf("作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n")
FILE *fp
fp = fopen("FCFS.txt","w")
if(fp==NULL)
{
printf("Can't create file : SJF.txt\n")
exit(0)
}
fprintf(fp,"作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n")
for(int i=0i<jobnum-1i++)//将作业数组按照作业的ID排序
{
k=i
for(int j=i+1j<jobnumj++)
if(job[j].ID<job[k].ID)
k=j
if(k!=i)
{
JOB a
a=job[k]
job[k]=job[i]
job[i]=a
}
}
for(int i=0i<jobnumi++)
{
int a,b,c,d
a=gethour(job[i].starttime)
b=getmin(job[i].starttime)
c=gethour(job[i].finishtime)
d=getmin(job[i].finishtime)
printf("JOB%d ",job[i].ID)
fprintf(fp,"JOB%d ",job[i].ID)
if(job[i].min==0)
{
printf("%d:%d0 ",job[i].hour,job[i].min)
fprintf(fp,"%d:%d0 ",job[i].hour,job[i].min)
}
else
{
printf("%d:%d ",job[i].hour,job[i].min)
fprintf(fp,"%d:%d ",job[i].hour,job[i].min)
}
printf("%11d ",job[i].requesttime)
fprintf(fp,"%11d ",job[i].requesttime)
if(b==0)
{
printf("%d:%d0 ",a,b)
fprintf(fp,"%d:%d0 ",a,b)
}
else
{
printf("%d:%d ",a,b)
fprintf(fp,"%d:%d ",a,b)
}
if(d==0){
printf("%d:%d0 ",c,d)
fprintf(fp,"%d:%d0 ",c,d)
}
else{
printf("%d:%d ",c,d)
fprintf(fp,"%d:%d ",c,d)
}
printf("%11d%11f\n",job[i].runtime,job[i].runtime2)
fprintf(fp,"%13d%13f\n",job[i].runtime,job[i].runtime2)
}
printf("【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum)
fprintf(fp,"【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum)
system("pause")
}
int trans(int i,int j)
{
return i*60 + j
}
int gethour(int i)
{
return i/60
}
int getmin(int i)
{
return i%60
}
void SJF()
{
printf("\n\n根据短作业优先算法:\n")
int k
for(int i=0i<jobnum-1i++)//将作业数组按照进入时间先后排序。
{
k=i
for(int j=i+1j<jobnumj++)
{
if(job[j].cometime<job[k].cometime) k=j
}
if(k!=i)
{
JOB a
a=job[k]
job[k]=job[i]
job[i]=a
}
}
int numbers=jobnum
int realnum=jobnum
for(int i=0i<numbersi++)
{
if(i==0)//假如是第一个,则直接进入cpu进行作业
{
job[i].starttime=job[i].cometime
job[i].finishtime=job[i].starttime+job[i].requesttime
job[i].runtime=job[i].finishtime-job[i].cometime
job[i].runtime2=(float)job[i].runtime/(float)job[i].requesttime
nowtime=job[i].finishtime
counttime1+=job[i].runtime
counttime2+=job[i].runtime2
job2[co++]=job[i]
for(int u=0u<jobnum-1u++)//把第一个从job序列的移除
job[u]=job[u+1]
jobnum--
int j=0
while(job[j].cometime<=nowtime&&j<jobnum)//从剩余的job序列中获取正在等待的job,放进wait序列中
{
wait[flat++]=job[j++]
}
int i=0
if(j!=0)//j!=0则表明已经从job序列中转移了job到wait序列中
{
while(j<jobnum)//将已经转移的job从job序列中移除
{
job[i]=job[j]
i++
j++
}
jobnum=i
}
if(flat>1)//如果wait序列中不止一个等待作业
{
int r
for(int x=0x<flat-1x++)//将等待数组按照估计运行时间先后排序。
{
r=x
for(int y=x+1y<flaty++)
{
if(wait[y].requesttime<wait[r].requesttime)
r=y
}
if(r!=x)
{
JOB a
a=wait[r]
wait[r]=wait[x]
wait[x]=a
}
}
}
}
else
{
if(flat==0)//如果wait序列中没有,即没有等待的序列,则将job序列中的第一个作业放入cpu进行运行
{
job[0].starttime=job[0].cometime
job[0].finishtime=job[0].starttime+job[0].requesttime
job[0].runtime=job[0].finishtime-job[0].cometime
job[0].runtime2=(float)job[0].runtime/(float)job[0].requesttime
nowtime=job[0].finishtime
counttime1+=job[0].runtime
counttime2+=job[0].runtime2
job2[co++]=job[0]
for(int u=0u<jobnum-1u++)//将放入运行的作业从job序列中移除
job[u]=job[u+1]
jobnum--
int j=0
while(job[j].cometime<=nowtime&&j<jobnum)//从剩余的job序列中获取正在等待的job,放进wait序列中
{
wait[flat++]=job[j++]
}
int i=0
if(j!=0)//j!=0则表明已经从job序列中转移了job到wait序列中
{
while(j<jobnum)
{
job[i]=job[j]
i++
j++
}
jobnum=j
}
int r
if(flat>1)//如果wait序列中不止一个等待作业
{
for(int x=0x<flat-1x++)//将等待数组按照估计运行时间先后排序。
{
r=x
for(int y=x+1y<flaty++)
{
if(wait[y].requesttime<wait[r].requesttime) r=y
}
if(r!=x)
{
JOB a
a=wait[r]
wait[r]=wait[x]
wait[x]=a
}
}
}
}
else//否则如果wait序列中有等待作业,则调用wait序列的第一个作业
{
wait[0].starttime=nowtime
wait[0].finishtime=nowtime+wait[0].requesttime
wait[0].runtime=wait[0].finishtime-wait[0].cometime
wait[0].runtime2=(float)(wait[0].runtime)/(float)(wait[0].requesttime)
nowtime=wait[0].finishtime
counttime1+=wait[0].runtime
counttime2+=wait[0].runtime2
job2[co++]=wait[0]
for(int i=0i<flati++)//将wait序列的第一个作业从wait中移除
wait[i]=wait[i+1]
flat--
int j=0
while(job[j].cometime<=nowtime&&j<jobnum)//从剩余的job序列中获取正在等待的job,放进wait序列中
{
wait[flat++]=job[j++]
}
int i=0
if(j!=0)//j!=0则表明已经从job序列中转移了job到wait序列中
{
if(j==1&&jobnum==1)//job序列中最后一个作业已经转移到wait中,则将jobnum自减一到0
jobnum--
else
{
while(j<jobnum)//否则将已转移的作业从job中移除
{
job[i]=job[j]
i++
j++
}
jobnum=j
}
}
int r
if(flat>1)//如果wait里的等待序列多余一个,则进行重新排序
{
for(int x=0x<flat-1x++)//将等待数组按照估计运行时间先后排序。
{
r=x
for(int y=x+1y<flaty++)
{
if(wait[y].requesttime<wait[r].requesttime)
r=y
}
if(r!=x)
{
JOB a
a=wait[r]
wait[r]=wait[x]
wait[x]=a
}
}
}
}
}
}
printf("作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n")
FILE *fp
fp = fopen("SJF.txt","w")
if(fp==NULL)
{
printf("Can't create file : SJF.txt\n")
exit(0)
}
fprintf(fp,"作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n")
for(int i=0i<realnum-1i++)//将作业数组按照作业的ID排序
{
k=i
for(int j=i+1j<realnumj++)
if(job2[j].ID<job2[k].ID)
k=j
if(k!=i)
{
JOB a
a=job2[k]
job2[k]=job2[i]
job2[i]=a
}
}
for(int i=0i<realnumi++)
{
int a,b,c,d
a=gethour(job2[i].starttime)
b=getmin(job2[i].starttime)
c=gethour(job2[i].finishtime)
d=getmin(job2[i].finishtime)
printf("JOB%d ",job2[i].ID)
fprintf(fp,"JOB%d ",job2[i].ID)
if(job2[i].min==0)
{
printf("%d:%d0 ",job2[i].hour,job2[i].min)
fprintf(fp,"%d:%d0 ",job2[i].hour,job2[i].min)
}
else
{
printf("%d:%d ",job2[i].hour,job2[i].min)
fprintf(fp,"%d:%d ",job2[i].hour,job2[i].min)
}
printf("%11d ",job2[i].requesttime)
fprintf(fp,"%11d ",job2[i].requesttime)
if(b==0)
{
printf("%d:%d0 ",a,b)
fprintf(fp,"%d:%d0 ",a,b)
}
else
{
printf("%d:%d ",a,b)
fprintf(fp,"%d:%d ",a,b)
}
if(d==0){
printf("%d:%d0 ",c,d)
fprintf(fp,"%d:%d0 ",c,d)
}
else{
printf("%d:%d ",c,d)
fprintf(fp,"%d:%d ",c,d)
}
printf("%11d%11f\n",job2[i].runtime,job2[i].runtime2)
fprintf(fp,"%13d%13f\n",job2[i].runtime,job2[i].runtime2)
}
printf("【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/realnum,counttime2/realnum)
fprintf(fp,"【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/realnum,counttime2/realnum)
system("pause")
}
void HRN()
{
co=0
printf("\n\n根据最高响应比优先算法:\n")
int k
for(int i=0i<jobnum-1i++)//将作业数组按照进入时间先后排序。
{
k=i
for(int j=i+1j<jobnumj++)
{
if(job[j].cometime<job[k].cometime) k=j
}
if(k!=i)
{
JOB a
a=job[k]
job[k]=job[i]
job[i]=a
}
}
nowtime=job[0].cometime
for(int i=0i<jobnumi++)
{
int j=i
int xx=i
while(j++<jobnum)//依次求得未完成的作业的优先级
job[j].prior=1+(float)(nowtime-job[j].cometime)/job[j].requesttime
int k
for(int i=xxi<jobnum-1i++)//将作业数组按照响应比由高到低排序。
{
k=i
for(int j=i+1j<jobnumj++)
{
if(job[j].prior>job[k].prior) k=j
}
if(k!=i)
{
JOB a
a=job[k]
job[k]=job[i]
job[i]=a
}
}
if(job[i].prior>=1)//有等待的则让等待的开始时间等于现在时间
job[i].starttime=nowtime
else
job[i].starttime=job[i].cometime//没有等待的作业的话就让下一次第一个进入的工作的时间当作其开始时间并且赋给当前时间
job[i].finishtime=job[i].starttime+job[i].requesttime
job[i].runtime=job[i].finishtime-job[i].cometime
job[i].runtime2=(float)job[i].runtime/job[i].requesttime
nowtime=job[i].finishtime
counttime1+=job[i].runtime
counttime2+=job[i].runtime2
job2[co++]=job[i]
}
printf("作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n")
FILE *fp
fp = fopen("HRN.txt","w")
if(fp==NULL)
{
printf("Can't create file : SJF.txt\n")
exit(0)
}
fprintf(fp,"作业 进入时间 估计运行时间 开始时间 结束时间 周转时间 带权周转时间\n")
for(int i=0i<jobnum-1i++)//将作业数组按照作业的ID排序
{
k=i
for(int j=i+1j<jobnumj++)
if(job2[j].ID<job2[k].ID)
k=j
if(k!=i)
{
JOB a
a=job2[k]
job2[k]=job2[i]
job2[i]=a
}
}
for(int i=0i<jobnumi++)
{
int a,b,c,d
a=gethour(job2[i].starttime)
b=getmin(job2[i].starttime)
c=gethour(job2[i].finishtime)
d=getmin(job2[i].finishtime)
printf("JOB%d ",job2[i].ID)
fprintf(fp,"JOB%d ",job2[i].ID)
if(job2[i].min==0)
{
printf("%d:%d0 ",job2[i].hour,job2[i].min)
fprintf(fp,"%d:%d0 ",job2[i].hour,job2[i].min)
}
else
{
printf("%d:%d ",job2[i].hour,job2[i].min)
fprintf(fp,"%d:%d ",job2[i].hour,job2[i].min)
}
printf("%11d ",job2[i].requesttime)
fprintf(fp,"%11d ",job2[i].requesttime)
if(b==0)
{
printf("%d:%d0 ",a,b)
fprintf(fp,"%d:%d0 ",a,b)
}
else
{
printf("%d:%d ",a,b)
fprintf(fp,"%d:%d ",a,b)
}
if(d==0){
printf("%d:%d0 ",c,d)
fprintf(fp,"%d:%d0 ",c,d)
}
else{
printf("%d:%d ",c,d)
fprintf(fp,"%d:%d ",c,d)
}
printf("%11d%11f\n",job2[i].runtime,job2[i].runtime2)
fprintf(fp,"%13d%13f\n",job2[i].runtime,job2[i].runtime2)
}
printf("【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum)
fprintf(fp,"【平均周转周期为:%f】\n【平均带权周转时间:%f】",(float)counttime1/jobnum,counttime2/jobnum)
system("pause")
}
作业调度
import java.awt.*import java.awt.event.*
import javax.swing.*
class mypanel extends Panel implements MouseListener
{
int chess[][] = new int[11][11]
boolean Is_Black_True
mypanel()
{
Is_Black_True = true
for(int i = 0i <11i++)
{
for(int j = 0j <11j++)
{
chess[i][j] = 0
}
}
addMouseListener(this)
setBackground(Color.BLUE)
setBounds(0, 0, 360, 360)
setVisible(true)
}
public void mousePressed(MouseEvent e)
{
int x = e.getX()
int y = e.getY()
if(x <25 || x >330 + 25 ||y <25 || y >330+25)
{
return
}
if(chess[x/30-1][y/30-1] != 0)
{
return
}
if(Is_Black_True == true)
{
chess[x/30-1][y/30-1] = 1
Is_Black_True = false
repaint()
Justisewiner()
return
}
if(Is_Black_True == false)
{
chess[x/30-1][y/30-1] = 2
Is_Black_True = true
repaint()
Justisewiner()
return
}
}
void Drawline(Graphics g)
{
for(int i = 30i <= 330i += 30)
{
for(int j = 30j <= 330j+= 30)
{
g.setColor(Color.WHITE)
g.drawLine(i, j, i, 330)
}
}
for(int j = 30j <= 330j += 30)
{
g.setColor(Color.WHITE)
g.drawLine(30, j, 330, j)
}
}
void Drawchess(Graphics g)
{
for(int i = 0i <11i++)
{
for(int j = 0j <11j++)
{
if(chess[i][j] == 1)
{
g.setColor(Color.BLACK)
g.fillOval((i + 1) * 30 - 8, (j + 1) * 30 - 8, 16, 16)
}
if(chess[i][j] == 2)
{
g.setColor(Color.WHITE)
g.fillOval((i + 1) * 30 - 8, (j + 1) * 30 - 8, 16, 16)
}
}
}
}
void Justisewiner()
{
int black_count = 0
int white_count = 0
int i = 0
for(i = 0i <11i++)//横向判断
{
for(int j = 0j <11j++)
{
if(chess[i][j] == 1)
{
black_count++
if(black_count == 5)
{
JOptionPane.showMessageDialog(this, "黑棋胜利")
Clear_Chess()
return
}
}
else
{
black_count = 0
}
if(chess[i][j] == 2)
{
white_count++
if(white_count == 5)
{
JOptionPane.showMessageDialog(this, "白棋胜利")
Clear_Chess()
return
}
}
else
{
white_count = 0
}
}
}
for(i = 0i <11i++)//竖向判断
{
for(int j = 0j <11j++)
{
if(chess[j][i] == 1)
{
black_count++
if(black_count == 5)
{
JOptionPane.showMessageDialog(this, "黑棋胜利")
Clear_Chess()
return
}
}
else
{
black_count = 0
}
if(chess[j][i] == 2)
{
white_count++
if(white_count == 5)
{
JOptionPane.showMessageDialog(this, "白棋胜利")
Clear_Chess()
return
}
}
else
{
white_count = 0
}
}
}
for(i = 0i <7i++)//左向右斜判断
{
for(int j = 0j <7j++)
{
for(int k = 0k <5k++)
{
if(chess[i + k][j + k] == 1)
{
black_count++
if(black_count == 5)
{
JOptionPane.showMessageDialog(this, "黑棋胜利")
Clear_Chess()
return
}
}
else
{
black_count = 0
}
if(chess[i + k][j + k] == 2)
{
white_count++
if(white_count == 5)
{
JOptionPane.showMessageDialog(this, "白棋胜利")
Clear_Chess()
return
}
}
else
{
white_count = 0
}
}
}
}
for(i = 4i <11i++)//右向左斜判断
{
for(int j = 6j >= 0j--)
{
for(int k = 0k <5k++)
{
if(chess[i - k][j + k] == 1)
{
black_count++
if(black_count == 5)
{
JOptionPane.showMessageDialog(this, "黑棋胜利")
Clear_Chess()
return
}
}
else
{
black_count = 0
}
if(chess[i - k][j + k] == 2)
{
white_count++
if(white_count == 5)
{
JOptionPane.showMessageDialog(this, "白棋胜利")
Clear_Chess()
return
}
}
else
{
white_count = 0
}
}
}
}
}
void Clear_Chess()
{
for(int i=0i<11i++)
{
for(int j=0j<11j++)
{
chess[i][j]=0
}
}
repaint()
}
public void paint(Graphics g)
{
Drawline(g)
Drawchess(g)
}
public void mouseExited(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
}
class myframe extends Frame implements WindowListener
{
mypanel panel
myframe()
{
setLayout(null)
panel = new mypanel()
add(panel)
panel.setBounds(0,23, 360, 360)
setTitle("单人版五子棋")
setBounds(200, 200, 360, 383)
setVisible(true)
addWindowListener(this)
}
public void windowClosing(WindowEvent e)
{
System.exit(0)
}
public void windowDeactivated(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowOpened(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
}
public class mywindow
{
public static void main(String argc [])
{
myframe f = new myframe()
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)