📄 4-9.c
字号:
#include"graphics.h"
#include"stdio.h"
#define CR 13
#define ESC 27
#define upkey 72
#define downkey 80
#define leftkey 75
#define rightkey 77
union inkey
{
int c;
char ch[2];
}sc; /*用于读键操作*/
int c_x,c_y; /*选项条的坐标*/
/*------------在指定位置输出一个字符串---------------------------------------------*/
print(int x,int y,char str[])
{
setcolor(YELLOW);
settextstyle(0,0,1);
outtextxy(x,y,str);
}
/*------------以下为四个用于清除界面的函数---------------------------------------------*/
clearbar1()
{
setfillstyle(1,0);
bar(0,0,149,getmaxy());
}
clearbar2()
{
setfillstyle(1,0);
bar(151,26,getmaxx()-1,getmaxy()-1);
}
clearbar3()
{
setfillstyle(1,0);
bar(21,71,79,89);
}
clearbar4()
{
setcolor(RED);
rectangle(20,70,80,90);
}
/*---------------初始背景的绘制------------------------------------------*/
bkground()
{
setfillstyle(1,0);
clearbar1();
bar(201,5,249,24);
setcolor(YELLOW);
rectangle(150,5,getmaxx(),getmaxy());
rectangle(200,5,250,25);
rectangle(150,5,getmaxx(),25);
print(203,12,"FILE");
}
/*--------------菜单背景-------------------*/
filebk()
{
setfillstyle(1,BLUE);
bar(200,5,250,105);
}
/*---------------菜单的绘制------------------------------------------*/
file()
{
setcolor(YELLOW);
rectangle(200,5,250,105);
line(200,25,250,25);
line(200,45,250,45);
line(200,65,250,65);
line(200,85,250,85);
print(203,12,"FILE");
print(203,32,"CREATE");
print(203,52,"DELETE");
print(202,72,"INSERT");
print(203,92,"EXIT");
}
/*----------------选项条的绘制:函数返回选项条当前位置----------*/
int choic1(int c_x,int c_y,int c)
{
setfillstyle(1,c);
bar(c_x+2,c_y-17,c_x+47,c_y-2);
return(c_y);
}
/*----------------创建链表--------------------------------------*/
void create()
{
}
/*----------------删除结点--------------------------------------*/
void delete()
{
}
/*----------------插入结点--------------------------------------*/
void Insert()
{
}
/*----------------主函数----------------------------------------*/
main()
{
char c;
int flag;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"c:\tc\tc");
l1:
clearviewport();
bkground();
while(1)
{
if(kbhit()) /*如果用户按键*/
{
c=getch();
if(c==ESC) /*如果为ESC键,则退出程序*/
break;
else
if(c==6) /*如果为"CTRL+F"组合键,则弹出菜单*/
{
filebk();
c_y=choic1(200,45,RED); /*首先将选项条标记在第一个选项的位置*/
file(); /*然后绘制菜单*/
l2: do
{
sc.c=bioskey(0); /*等待用户按键*/
if(sc.ch[0]==ESC) /*如果为ESC键,则回到初始界面的状态*/
goto l1;
else
switch(sc.ch[1]) /*否则分别进行按键处理*/
{
case upkey: /*当按up键时*/
if(c_y==45)/*如果当前选项条已在最顶项,则不做处理*/
break;
else /*否则,将选项条的坐标y值减20,并重新画选项条和菜单*/
{
c_y-=20;
filebk();
choic1(200,c_y,RED);
file();
}
break;
case downkey: /*当按down键时,处理情况与上类似*/
if(c_y==105)
break;
else
{
c_y+=20;
filebk();
choic1(200,c_y,RED);
file();
}
break;
}
}while(sc.ch[0]!=CR); /*若按回车键,则退出do-while循环*/
switch(c_y) /*根据当前选项条的位置来分别调用不同操作函数*/
{
case 45: /*若选择了"CREATE"选项*/
setfillstyle(1,0); /*清除演示框*/
bar(200,26,250,105);
setfillstyle(1,1);
bar(201,6,249,24);
print(203,12,"CREAT");
/*在原先"FILE"菜单的位置显示"CREAT"字符串"*/
create(); /*调用创建链表函数*/
flag=1; /*置标志为1,表示已创建了一个链表*/
break;
case 65: /*若选择了"DELETE"选项*/
if(flag) /*如果链表已创建,则调用删除结点的操作函数*/
{
setfillstyle(1,0);
bar(200,26,250,105);
setfillstyle(1,1);
bar(201,6,249,24);
print(203,12,"DELETE");
delete();
}
else
goto l2; /*否则重新等待用户按键,以重新选择链表操作*/
break;
case 85: /*若选择了"INSERT"选项*/
if(flag) /*如果链表已创建,则调用插入结点的操作函数*/
{
setfillstyle(1,0);
bar(200,26,250,105);
setfillstyle(1,1);
bar(201,6,249,24);
print(203,12,"INSERT");
Insert();
}
else goto l2; /*否则重新等待用户按键,以重新选择链表操作*/
break;
case 105: /*若选择了"EXIT"选项*/
goto EXIT; /*跳出循环,退出程序*/
default:
break;
} /*-----------------switch(c_y)-----------------*/
} /*---------if(c==6)--------------------*/
} /*--------------if(kbhit())---------------*/
} /*-------------while(1)-----------------*/
EXIT:;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -