⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pk06.c

📁 dos下的排课软件。 学校使用可以自动排课程表。
💻 C
📖 第 1 页 / 共 4 页
字号:
  #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 + -