📄 pk06.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#include <dos.h>
#include <ctype.h>
#include <math.h>
#include <bios.h>
#include <conio.h>
#define yucl 100
#define yutc 255
#define yuke 20
#define yubk 18
#define bbl 7
#define bbr 6
int ddt,paidings,xsum;
float pdl,minpdl=95;
int clno[yucl];
int tcpx[yutc];
int tc4,bx4,clnumber=0,kenumber=0,tcnumber=0,ke0;
char bx,kx,jie,r;
char yer[yucl],zhoujie[yuke][3],youxian[yuke][2];
char kemu[yuke][5],kejian[yuke][3],kedai[yuke];
char name[yutc][7],banke[yutc][yubk][3];
char tcbk[yutc][bbl][bbr],tcbb[yutc][bbl][bbr],clb[yucl][bbl][bbr],clbt[yucl][bbl][bbr];
char kong=0xff, suiji[8][7];
char temp[20],x,y,chakesum[yuke],yushu[yutc][4];
char kxtmp1,tcno;
char gukej[yuke][3],gukemu[yuke][5],gukejian[yuke][3],guij[yuke][2];
char guyer[yuke],gukejt[yuke],gukexu[yuke];
int z02,guken=0,gukeh,i,j,k,ta,tt,conline,tiaoshi=0,xchbiao=0;
char itmp,kxtmp,kx1,kx2,r1,r2,jie1,jie2;
int i1,i2,x1=1,yy1=1,x2,y2,z2,x3,y3,z3;
int qtc1b=0,qtc2b=0;
int lieshu1=25,hangshu1=16;
int hangshu2=16;
long int ii,size1;
unsigned codead,codeae,codecon,hgad;
char *buf1,*buf2,*buf3,*p1,*p2,*p3,*phgshou;
char codeb,cr=0x0a,ch,ch1,ch2,chkey;
char ripin,kezhouj,shuang;
union change
{ char c[2];
unsigned a;
} un;
void xiandingpk(int *);
char anykey();
void boutfl();
void boutfl();
void chake();
void chake1(char);
void cls();
void disclb();
void distcb();
void disclbs1(int);
void distcbs1(int);
void end1();
char hexpc(char,char);
void keyexit();
void listct();
void list();
void lisyushu();
void outfl();
void pk(int kbpx[yutc]);
void prtcb();
void pkgn();
void pkoutfl();
void pkflin();
void page1();
void qingtishi();
void readfl();
int readcl();
int readint();
void readke();
void readstr();
int spaiding();
int spkno();
int schb1();
int spk3(char jie);
int spk1(int,char,char);
void sdel();
void scopy();
void sxch();
void spast();
void sfill();
int stkno(int,int);
void chuxian3();
void sound1();
void sound2();
void sound3();
void sound4();
void sound6();
void sound42();
void tiao();
void tk();
int zisdigit(char);
int zstrcmp(char *,char *);
int zstrncmp(char *,char *,int);
int zstrcpy(char *,char *);
int zstrncpy(char *,char *,int);
/*******************************************/
/*************** main() begin ********/
/*******************************************/
void main()
{
int i,j,k1;
size1=204800L;
buf1=(char*)malloc(size1);
printf("\nsize1=%d buffer 1 address:%ld=%x\n",size1,buf1,buf1);
if(buf1==NULL)
{printf("\n错误:基本内存不够!!!\n");
ch=anykey();
free(buf1);
exit(1);
}
for(i=0;i<yuke;i++)
guyer[i]=kong;
page1();
mainbeg:
readfl();
/****** 读 pkjs.txt至数组 ****/
p1=buf1;
clnumber=0;
k=0;
ta=0;
do
{
printf("\n班次:\n"); /*****xxxxxxxxxxxxxxx*/
readstr();
if(zstrcmp(temp,"班次:\0")!=0)
{printf("\n ???pkjs.txt格式不对,----'班次:'");
ch1=getch();
exit(0);
}
for(i=0;i<yucl;i++)
{k1=readint();
if(k1==0)break;
clno[k]=k1;
k++;
printf("%d ",k1); /****xxxxxxxxxxx*/
clnumber++;
}
printf("\n年级:\n"); /*****xxxxxxxxxxxxxxx*/
readstr();
if(zstrcmp(temp,"年级:\0")!=0)
{printf("\n ???pkjs.txt格式不对,----'年级:'");
ch1=getch();
exit(0);
}
for(i=0;i<clnumber;i++)
{k1=readint();
if(k1==9)break;
if(k1==0)break;
yer[ta]=k1;
printf("%d ",yer[ta]); /****xxxxxxxxxxx*/
ta++;
}
}
while(k1!=9);
printf("\n科目:\n"); /*****xxxxxxxxxxxxxxx*/
readstr();
if(zstrcmp(temp,"科目\0")!=0)
{printf("\n ???pkjs.txt格式不对,----'科目:'");
ch1=getch();
exit(0);
}
do
{
ch=*p1;
p1++;
}
while(ch!=cr);
kenumber=0;
for(i=0;i<yuke;i++)
{readstr();
if(zstrcmp(temp,"end\0")==0)break;
zstrncpy(kemu[i],temp,5);
/* printf("%s ",temp); ****xxxxxxxxxxx*/
readstr();
zstrncpy(kejian[i],temp,3);
do
{ch=*p1;
p1++;
}
while(ch==' ');
kedai[i]=ch;
zhoujie[i][0]=readint();
zhoujie[i][1]=readint();
zhoujie[i][2]=readint();
k=readint();
k1=(int)(k/10);
youxian[i][0]=k1;
youxian[i][1]=k-k1*10;
kenumber++;
}
ke0=kenumber;
printf("教师任课表:\n"); /*****xxxxxxxxxxxxxxx*/
tcnumber=0;
readstr();
if(zstrcmp(temp,"教师任课表:\0")!=0)
{printf("\n ???pkjs.txt格式不对,----'教师任课表:'");
ch1=getch();
exit(0);
}
for(i=0;i<yutc;i++)
{k=readint();
/* printf("\ni=%d k=%d\n",i,k);*/
if(k==0)
break;
if(k==-1)break;
readstr();
zstrncpy(name[i],temp,7); /* name */
for(k=0;k<yubk;k++)
{
k1=readcl();
/* printf("\nclass=%d",k1); **** class xxxxxxxxxxx*/
if(k1==-1)
{banke[i][k][0]=kong;
banke[i][k][1]=kong;
break;}
for(j=0;j<clnumber;j++)
{if(k1==clno[j])
{banke[i][k][0]=j;break;}
}
readke(); /* ke */
/* printf(" ke=%s \n",temp);*/
for(j=0;j<kenumber;j++)
{
if(zstrncmp(kejian[j],temp,2)==0)
{banke[i][k][1]=j;
break;}
}
} /* end k **/
tcnumber++;
} /* end i ***/
/*** 课程设置查错... ***/
printf("\n课程设置查错... ");
printf("\nke chen she zhi cha cuo... ");
for(i=0;i<clnumber;i++)
{ for(j=0;j<kenumber;j++)
chakesum[j]=0;
for(j=0;j<tcnumber;j++)
{for(k=0;k<yuke;k++)
{bx=banke[j][k][0];
if(bx==kong)break; /* yi tc cha wan */
if(bx!=i)continue;
kx=banke[j][k][1];
x=yer[bx]-1;
x=zhoujie[kx][x];
chakesum[kx]=chakesum[kx]+x;
} /* end for k */
} /* end for j */
x=yer[i]-1;
for(j=0;j<kenumber;j++)
{if(chakesum[j]>zhoujie[j][x])
{printf("\n警告:有两个以上教师上 %d班的 %s课。",clno[i],kemu[j]);
if(anykey()=='x')break;
}
if(chakesum[j]==0 && zhoujie[j][x]!=0 && kedai[j]!='y')
{printf("\n警告:没有教师上 %d班的 %s课。",clno[i],kemu[j]);
printf("\nban xu hao i=%d ke xu hao j=%d",i,j);
if(anykey()=='x')break;
}
}
} /* end for i */
guken=0;
for(k=0;k<kenumber;k++)
{if(kedai[k]!='y')continue;
zstrncpy(gukemu[j],kemu[i],5);
zstrncpy(gukejian[j],kemu[i],3);
gukexu[guken]=k;
guken++;
}
pkgn();
}
/*************** main() end ********/
/*********************************************/
/****** 读 pkjs.txt至内存(*buf1) ****/
void readfl()
{
char ch1;
char fsconame[]="pkjs.txt\0";
FILE *fpscore;
do
{
if((fpscore=fopen(fsconame,"r"))==NULL)
{printf("\n %s 打不开!!!\n",fsconame);
printf("\n x键退出本程序,回到 WINWOWS 98,其它键输入源文件路径和文件名).");
ch1=getch();
if(ch1=='x')
{
free(buf1);
exit(0);
}
}
else
break;
}
while(ch!='x');
printf("\n");
p1=buf1;
ch1=getc(fpscore);
ii=0;
while(!feof(fpscore))
{
*p1=ch1;
p1++;
ii++;
ch1=getc(fpscore);
}
*p1=ch1;
p1++;
*p1=0;
fclose(fpscore);
printf("\n源文件长度:%d(byte)\n",ii);
}
/********** char anykey() *******/
char anykey()
{char ch;
printf("\n按任意键继续...(x--exit)\n");
ch=getch();
return ch;
} /**** end anykey ******/
/************** void outfl() ********/
void outfl()
{
unsigned int i;
char fsconame[30];
FILE *fpscore;
printf("\n 请输入文件路径和文件名:");
scanf("%s",fsconame);
if((fpscore=fopen(fsconame,"wb"))==NULL)
{printf("\n %s 打不开!!!\n",fsconame);
getch();
return;}
p3=buf3;
for(i=0;i<codecon;i++)
{
ch=*p3;
p3++;
putc(ch,fpscore);
}
fclose(fpscore);
printf("\n ok!\n");
printf("文件长度:%d(byte)\n",codecon);
}
void keyexit()
{
printf("按任意键,(x键退出本程序,回到 WINWOWS 98).");
if(getch()=='x')
{printf("\n\n\n");
free(buf1);
exit(0);
}
}
void listct()
{printf("\n班级总数:%d",clnumber);
printf("\n教师总数:%d",tcnumber);
printf("\n本程序最多可排%d班,%d个教师.",yucl,yutc);
if(anykey()=='x')return;
for(i=0;i<clnumber;i++)
{printf("\n%d 班的任课教师的情况:\n",clno[i]);
for(j=0;j<tcnumber;j++)
{for(k=0;k<yuke;k++)
{
bx=banke[j][k][0];
if(bx==kong)break; /* yi tc cha wan */
if(bx!=i)continue;
printf("%s ",name[j]);
kx=banke[j][k][1];
printf("%s ",kemu[kx]);
x=yer[bx]-1;
x=zhoujie[kx][x];
printf(" 每周 %d 节\n",x);
} /*end for k */
} /* end for j */
if(anykey()=='x')return;
} /* end for i */
} /*** end listct */
void pkgn()
{int kbpx[yutc],tcsheban[yutc];
int x,y;
char bksum,jg;
/*** 统计涉及班,科数 ******/
for(i=0;i<tcnumber;i++)
{bksum=0;
for(k=0;k<yuke;k++)
{
bx=banke[i][k][0];
if(bx==kong)break; /* yi tc cha wan */
bksum++;
} /*end for k */
tcsheban[i]=bksum;
kbpx[i]=i;
} /* end for i */
/**** 按涉及班,科数排序 *****/
for(i=0;i<tcnumber;i++)
{for(j=i+1;j<tcnumber;j++)
{if(tcsheban[i]<tcsheban[j])
{x=tcsheban[i];
tcsheban[i]=tcsheban[j];
tcsheban[j]=x;
y=kbpx[i];
kbpx[i]=kbpx[j];
kbpx[j]=y;}
} /* end for j */
} /* end for i */
printf("\npai xu jie guo:\n");
for(i=0;i<tcnumber;i++)
{printf("%d ",kbpx[i]);
if(i/10*10==i)printf("\n");}
xiandingpk(kbpx);
/******* 排课 调整 pppppppppppp*******/
/**** 排课,调整,输出 功能选择:****/
do
{
cls();
printf("\n");
printf(" 1,自动排课.\n");
printf(" 2,联系作者.she minpdl\n");
printf(" 4,显示各班课表.\n");
printf(" 5,显示教师课表.\n");
printf(" 6,显示没有排完的科.\n");
printf(" 7,调课.\n");
printf(" 8,师及班表输出到文件,以便打印.\n");
printf(" 9,保存排课文件,以后调课.\n");
printf(" a,读取排课文件.\n");
printf(" s,显示pkjs.txt赋到数组内的值.\n");
printf(" d,显示各班的任课教师的情况.\n");
printf(" q,退出本程序,回到 WINDOWS 98.\n");
for(i=0;i<30;i++)printf("=");
printf("\n");
printf("请选择:");
scanf("%s",temp);
jg=temp[0];
if(jg=='1')
{xiandingpk(kbpx);
tk();}
else if(jg=='2')
{clrscr();
x=4;
j=4;
gotoxy(x,j);
printf("有什么问题或要求,");
gotoxy(x,j+2);
printf("请联系作者:");
gotoxy(x,j+4);
printf("云南华坪朱锡全.");
gotoxy(x,j+6);
printf("电话,暂时没有.");
gotoxy(x,j+8);
printf("交个朋友真好玩.\n");
printf("input minpdl float");
scanf("%f",&minpdl);
do
;
while(getch()!='y');
}
else if(jg=='4')
disclb();
else if(jg=='5')
distcb();
else if(jg=='6')
lisyushu();
else if(jg=='7')
tk();
else if(jg=='8')
boutfl();
else if(jg=='9')
pkoutfl();
else if(jg=='a')
pkflin();
else if(jg=='s')
list();
else if(jg=='d')
listct();
else if(jg=='q')
{ free(buf1);
exit(0);}
}/* end do */
while(jg!='q');
} /**** end sub pkgn() */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -