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

📄 4-9.c

📁 《C程序员成长攻略》-黎陡-源代码-4282 中国水利水电出版社 程序员成长之路丛书
💻 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 + -