C语言课表排课系统.docx
《C语言课表排课系统.docx》由会员分享,可在线阅读,更多相关《C语言课表排课系统.docx(59页珍藏版)》请在冰豆网上搜索。
![C语言课表排课系统.docx](https://file1.bdocx.com/fileroot1/2023-1/11/2eb08a85-8b1e-4a0d-8929-e02e2523fc6d/2eb08a85-8b1e-4a0d-8929-e02e2523fc6d1.gif)
C语言课表排课系统
C语言-课表排课系统
基本操作:
输入并创建链表(单向和双向)〃参见:
infcreato;装载〃算法与存储一致
存储//图形模式下,进行文件读写操作后有无故的异常显示
查询//算法参见pdemandO;cdemand();wddemand();插入//算法参见insert();
删除〃算法参见deleteO;
排序//算法:
选择排序。
具体见psort();csort();打印输出//算法参
见:
pkey():
table();
功能模块概要说明:
1•输入函数:
9数字外加空格键为char*uscanf(int,int,int)〃图形模式下输入函数,大小写26个字母0-有效输入,可以使用BACKSPACEo
2(开始界面,退出界面和主界面:
voidstarting()//开始界面
voidend()//结束界面
char*index()〃主选择界面函数,返回选择信息(字符串);
3(数据输入、创建链表模块
char*tinkey(char*,int,int)//输入切换处理
char*recourse(char*,int,int)//课程输入
intwdetect(structperson*,char*)//课程输入检测,检测课表一星期同一天同一时间段内课程安排是否重复,如果重复给出修改提示信息
char*infuse(char*,char*,int)//课表输入
structcourse*ccreat(char*)//创建课程单向链表
structperson*pcreat(char*)//创建个人课表节点
char*infcreat(char**,structperson**,structperson**,char*)
〃创建课表双向链表
4(课表输出
char*print(char*)〃课表输出背景界面
char*pkey()〃课表输出按纽界面及处理
inttable(int,int,structperson*)//在指定区域一表格形式输出一个人的课表intforebox(structperson*)//初略显示下三个人的课表提示
5(文件存储和装载
char*save(char*,structperson*)//保存为磁盘文件,在图形模式下进行文件读写操作之后,程序出现莫名其妙的异常显示情形
6(课表查询:
structperson*pdemand(structperson*,char*)//按人名字查询其课表安排。
structperson*wddemand(structperson*,int)//按星期儿查询课程安排情况。
structperson*cdemand(structperson♦,char*)//按课程查询老师或学生课程安排情况。
char^demand(structperson*)//查询切换,并显示查询结果,按名字查询一次只能一个。
按星期儿和课程查询可以查询到多个,如查询到多个接果,按任意键可依次输出。
7(排序。
structcourse*csort(structcourse*)//按课程编号排丿了;课表节点中课程链表structperson*psort(structperson*)//按人学号或老师编号排序课表链表charsort(structperson*)//排序切换,并提示排序结果
8(插入。
char*insert(char*,structperson**‘structperson**)
//擦入课表节点
9(删除。
char*delete(structperson**,char*)//按人名删除其课表节点
操作说明:
1(Infuse:
选定这个键后按Enter进入学生输入菜单,你可以输入学生的学号,姓名,学生在一学期内的所学课程的课程名,课程号,学时,以及在一周内上课的地址。
如果当输入某课程上课地址有重复时,系统自动发出报警信息,并提示出错的地方,以便修改,当选定couse时,表明此学生所学的该课程的信息输入完成再输入另外所学课程的信息,如上所写照样输入,
当选定finish时,并按回车键后,表明此学生在这一学期内所学的课程信息输入完成。
如要继续输入学生的信息如前所述。
当选定back时,并按下回车键后,返回TIMETABLE主菜单,选择主菜单里的功能对所输入的信息进行处理。
当选定exit时,并按下回车键后,返回程序。
结束程序。
2(SAVE/LOAD选定此并按回车。
此键作用对所输入的信息进行格式输出/载入。
输入你要保存信息的文件名,文件格式系统自动生成。
利用键盘上的方向键和TAB键进行控制。
3(DEMAND:
按ENTER键开始输入,按反向键进行查询切换。
当按星期儿和课程查询时候,如遇到查询到多个结果,按任意键可依次输出直到完。
4(INSERT:
按EVTER键开始输入,按反向键进行查询切换。
输入同叮FURE项。
5.DELETE:
按EVTER键显示输入框开始输入。
其他同上。
6(SORT:
当提示框中SORT变为红色时候,表示被选中,按ENTER键开始插入,
如成功给岀提示信息。
7(PRINT:
依次输出链表,如果输出链表为空则不进仍输出页面。
NEXT为下一
个,PRO为上一个。
下面FORENOTICE框显示后三个节点。
8(EXIT:
退出系统。
效果同按ESC。
六:
源程序清单:
(见附件)
七:
测试结果:
1:
在图形模式下,关于文件的读写操作影响整个程序的显示。
2:
关于指针数组的初始化,有时候出现莫名其妙的没有初始化的现象。
改成逐个赋值处理,现象消息。
3:
关于返回字符串指针的函数所返回的指针输出,出现叠加的现象。
4:
图形模式下函数的不稳定和相互制约的现象。
如:
sprintf()与strcpy();。
。
。
。
。
。
〃源程序代码
/*
功能:
排课系统
作者:
周志明
日期:
28/8/2004
1
•|••|••1••|••|••|••|••|••|••|••1••|••|••|••|••|••|••|••1••|••|••|••|••|••|••|••1••|••|••|••|••|••|••|••1••|••|••|••|••|••|••|••1••|••|••|••|••|••|••|••1••|••|••|••|••|••|••|••1••|••|••|••|••|••4•
/*课表排课系统*/
•"••»••"••»••»••"••"••»••"••»••"••»••»••"••"••»••"••»••"••»••»••"••"••»••"••»••"••»••»••"••"••»••"••»••"••»••»••"••"••»••"••»••"••»••»••"••"••»••"••»••"••»••»••"••"••»••"••»••"••»••»••"••"••»••"•
/*头文件*/
#include〈stdio.h>
#include〈string・h>#include〈conio.h>
#include/*宏定义水/
itdefineNULL0
itdefineOK1
#defineERRORT
#defineESC0x011b#defineTAB0x0f09SdefineENTEROxlcOd#define
UP0x4800ttdefineDOWN0x5000#defineLEFT0x4b00ttdefineRIGHT0x4d00
^defineBACKSPACE0x0e08^defineSPACE0x3920
/*结构体类型定义*/
structweekday{
intwday;
charaddr[5][10]:
structweekday*next;
};
structcourse{
charcnumber[10];
charenamel10一;
charperiod[10];
structweekday*whead:
structcourse*next:
};
structperson{
charpnumber[10]:
charpnameElO.;
intpflag[7J[5]:
structcourse*chead;
structperson*pro;
structperson*next;
};
/*****************************inputfunction
•I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I•
char*uscanf(sx,sy,max)/*图形模式下输入函数*/intsx,sy,max:
{
intbsx=sx,bsy=sy,n;
intkey,keylow;
char*p,*ch;
ch=p=(char*)malloc(sizeof(char)*100);
n=0;
do{
setcolor(RED);
line(sx,sy+15,sx+8,sy+15);
key=bioskey(0);
keylow=key&Oxff;
if(key=BACKSPACE&&sx>bsx){/*退格纠错处理*/
if(nl^max)sx-二8;p--;
setfillstyle(1,7):
setcolor(7);
if(n==max)bar(sx,sy+3,sx+8,sy+16);
elsebar(sx,sy+3,sx+16,sy+16);
n一二1;
}
elseif(keylow>=48&&keylow<=57:
:
keylow>=65&&keylow<=90IIkeylow>=97&&keylow<=122||key二二SPACE)/*输入字符控制*/if(nsprintf(p,keylow);
setfillstyle(1,7):
setcolor(7);
bar(sx,sy+3,sx+8,sy+16);
setcolor(RED);
moveto(sx,sy+5);outtext(p);
n+二1;
sx+=8;
if(n==max)sx-二8;
}
}while(key!
=ENTER&&key!
二TAB);二'\0';
setfillstyle(1,8);setcolor(8);bar(bsx-1,bsy+1,bsx+68,bsy+17);setcolor(7);
outtextxy(bsx,bsy+5,ch);
return(ch);
}/*uscanf*/
«*■rI
fvawvawviwvowvbwvawvTWviwvawviwvbwvawvTWviwvawviwvbwvawvTWviwvawviwviwviwvTw■•■I|IIg1|■IviwvawviwvbwvawvTWviwvawviwvbwvawvTWviwvawviwvbwvawvTWviwvawviw
*******/voidSETGRAPH(){/*图形模式初始化*/
intdriver,mode;
detectgraph(&d:
rivei\&mode);
initgraph(&drivei\&mode,"”);
}
voidstarting(){/*开始界面*/
inti,times;
charch二'a;
charp[]=CW',‘\0','e','\0',T','\0','c','\0',
7,,\O;nf,W,W!
','\0'};
setbkcolor
(1);
setfillstyle(6,4);
floodfill(12,12,GREEN);
settextstyle(0,0,3);setcolor(14);
outtextxy(50,210,''ProgramDesignPractise7');
outtextxy(200,250,''Starting・・・");
setcolor(8);setlinestyle(1,0,THICK_WIDTH);
ellipse(320,240,0,360,318,239);
setfillstyle(1,8);delay(50000);
for(i=0;i<=360;i+=6){
delay(100);
sector(320,240,0,i,30&229);
}
setfillstyle(1,1);setcolor
(2);
for(i=100;i<=350;i+=5){
delay(500);
bar3d(100,100,540,i,15,1);
}
settextstyle(0,0,4);setcolor(6);
outtextxy(150,130,"TIME-TABLE");
settextstyle(0,0,1);setcolor(12);
outtextxy(200,180,,ztime-tablepracticever1.0“);
outtextxy(400,300,"DESIGNER:
zzm");
times^O;
do{
settextstyle(0,0,3);
for(i=0;i<8;i++){
delay(3000);
setcolor(2+i+times%8);
outtextxy(220+i*25,220,&p[2*i]);
}
settextstyle(0,0,1);
outtextxy(300,260,"〈Enter〉");
times++;
if(times>2)ch=getch();
}while(ch!
=0xd);
}/*starting*/
voidend(){/*退出界面*/
inti,times;
charp[]=Cr/\O,/H,,,\O,/A,,,\O\,N\,\(T,
,K;\0;-;\0;Y;\0;0;\0;U;\0,};cleardevice();
setbkcolor(0);
setfillstyle(1,8);setcolor
(1);
for(i=0;i<640;i+=5){
delay(100);
bar3d(0,100,i,350,0,1);
}
settextstyle(0,0,5);setcolor(YELLOW);
outtextxy(250,200,"END”);
setfillstyle(1,1);
for(i=100;i<540;i+=4){
delay(200);
bar3d(100,100,i,350,0,1):
}
settextstyle(0,0,2);setcolor(6);
outtextxy(250,150,"TIME-TABLE");
settextstyle(0,0,1);setcolor(12);
outtextxy(220,180,"time-tablepracticever1.0“);
outtextxy(280,300,"DESIGNER:
ZhouZhiming");times^O;
settextstyle(0,0,6);
do{
for(i=0;i<9;i++){
delay(3000);
setcolor(2+i+times%9);
outtextxy(125+i*45,220,&p[2*i]);
}
times++;
}while(times<2);
setfillstyle(1,0):
setcolor(0);
for(i=0;i<640;i+=5){
delay(500);
bar3d(0,100,639,100+i,0,1);
bar3d(0,350-i,639,350,0,1);
}
closegraph();
ex辻(0);
}/*END*/
voidbox(sx,sy,ex,ey,depth,size,linecolor,fillcolor,fontcolor,p)intsx,sy,ex,ey,linecolor,fillcolor;char*p;
{settextstyle(0,0,size):
setfillstyle(1,fillcolor);setcolor(linecolor);
bar3d(sx,sy,ex,ey,depth,1);
setcolor(fontcolor);
outtextxy(sx+5,(sy+ey)/2-5,p);}/*box*/
char*index(){/水主选择页面*/
intkey,sx,sy,ex,ey,xincre,yincre;
char**p;
char
*sp□二{"Infuse","Load","Save","Demand","Insert","Delete","Sort","Print","Exit"};
char*temp;
setcolor
(1);
setfillstyle(6,8);
for(i=0;i<=180;i+=5){
delay(10);
sector(320,240,0,i,500,242);
sector(320,240,180,180+i,320,242);
}
setfillstyle(l,8);
for(i=0;i<=90;i+=5){
delay(10);
sector(210,240,0,i,150,200);
sector(210,240,90,90+i,150,200);
sector(210,240,180,180+i,100,200);
sector(210,240,270,270+i,200,200);
sector(430,240,0,i,150,200);
sector(430,240,90,90+i,150,200);
sector(430,240,180,180+i,200,200);
sector(430,240,270,270+i,200,200);
}
setfillstyle(1,1);
for(i=10;i<=70;i+=5){
delay(500);
bar3d(190,20,450,i,5,1);
}
settextstyle(0,0,3):
setcolor(6);
outtextxy(200,30,"TIME-TABLE");
settextstyle(0,0,1);setcolor(12);
outtextxy(193,60,"CouseScheduleSuperviseSystem");
setfillstyle(1,1):
setcolor
(1):
for(i=100;i<=380;i+=10){
delay(100);
bar3d(120,100,300,i,15,1);
bar3d(340,100,520,i,15,1);
}
settextstyle(0,0,2);setcolor(6);
outtextxy(150,120,"STUDENT'S");
outtextxy(370,120,"TEACHER'S”);
for(i=0;i<9;i++){
box(180,158+i*20,240,176+i*20,5,1,2,2,LIGHTGREEN,sp[i]);box(400,158+i*20,460,176+i*20,5,1,2,2,LIGHTGREEN,sp[i]);}
sx=180;sy=158;ex=240;ey=176;xincre=O;yincre=O;
P=sp;
do{
box(sx+xincre,sy+yincre,ex+xincre,ey+yincre,5,1,RED,RED,YELLOW,*p);key=bioskey(0);
switch(key){
caseLEFT:
if(xincre){
box(sx+xincre,sy+yincre,ex+xincre,ey+yincre,5,1,CYAN,CYAN,LIGHTGREEN
*p);
xincre-二220;}
break;
caseRIGHT:
if(!
xincre){
box(sx+xincre,sy+yincre,ex+xincre,ey+yincre,5,1,CYAN,CYAN,LIGHTGREEN
*p);
xincre+=220;}
break;
caseUP:
if(yincre){
box(sx+xincre,sy+yincre,ex+xincre,ey+yincre,5,1,CYAN,CYAN,LIGHTGREEN
*p):
p__;
yincre-二20;}
break;
caseDOWN:
辻(yincre<160){
box(sx+xincre,sy+yin