
下拉菜单与图书管理系统 下拉菜单与图书源程序SCEC 程序源码: =include《stdio.h> #include Cbios.h> define UPPER (72+256) 年define1PFTT5+256) define RIGHT (77+256) #define DOMN (80+256) #define ENTER 13 #define ESC 27 sinclude struct mode 【char same[loJ]: int price: char pub[15]: 1: struct pode *head-NIL: int Hj=20,M=0,Sm[5],SbNun[5】=5.6,2,4,6:/体子菜单的个数*/ int SbWid[5]-{10,10.10,10.10l: int Sb)[5)-5.15,25.35,45): int Key-0: char buf[1000]:/用于绿存屏幕的存储区/ char◆edithelp··ove Cursor:Left,ight,lp,Dowm,PgUp,.Pdn| Alt+e-Copy,Alt+y-Cut Alt+p-Paste": char *mainhelp =Fl-Save F2-Open F3-Search F4-Replace F5-Undo F6-Redo ESC-kenu”: char *Main[5]=["File","Edit","Search","Option'."book]: char *Sub[5][6]-(
下拉菜单与图书管理系统 下拉菜单与图书源程序 SCME.C 程序源码: #include #include #define UPPER (72+256) #define LEFT (75+256) #define RIGHT (77+256) #define DOWN (80+256) #define ENTER 13 #define ESC 27 #include struct node { char name[10]; int price; char pub[15]; }; struct node *head=NULL; int Hj=20,Mm=0,Smm[5],SbNum[5]={5,6,2,4,6};/*子菜单的个数*/ int SbWid[5]={10,10,10,10,10}; int SbX[5]={5,15,25,35,45}; int Key=0; char buf[1000]; /*用于保存屏幕的存储区*/ char *edithelp = " Move Cursor: Left,Right,Up,Down,PgUp,PgDn | Alt+c-Copy,Alt+y-Cut Alt+p-Paste"; char *mainhelp = " F1-Save F2-Open F3-Search F4-Replace F5-Undo F6-Redo ESC-Menu"; char *Main[5]={"File","Edit","Search","Option","book"}; char *Sub[5][6]={

{"Now,"0pen,"Save°,"Save as",Exit, Cut ""Copy","Paste","Del","Select All","Edit"). "Find ""Replace"]. {"Undo","Redo',Comfig°."elp】. 【add,"1ist","search°,“del",save,"1oad : void main() Im1 tScreen0:/体初始化屏幕*/ inke陶0:/体是示主菜单*/ SubVenu0;/e显示子来单*/ Sc1ct聊(0:体根据用户按键,处理相事务*/ 0加it0:体恢复屏幕/ J void disp_menu_item(int x,int y,int fcolor,int bcolor,char *string) I textbackground(beolor): textcolor(fcolor): 0t0xyLy): c闻ts(strin:/体显示字符串*/ ainVenu (void) int i; window(0,1,80.25): textattr(0x3e): for(i=0:i<5:i) { otoxy (SbX[i].I》: cputs(Main[i]):
{ "New","Open","Save","Save as","Exit"}, { "Cut ","Copy","Paste","Del","Select All","Edit"}, { "Find ","Replace"}, { "Undo ","Redo","Config","Help"}, { "add","list","search","del","save","load"} }; void main( ) { InitScreen(); /*初始化屏幕*/ WMainMenu(); /*显示主菜单*/ WSubMenu(); /*显示子菜单*/ SelectMenu(); /*根据用户按键,处理相事务*/ Quit(); /*恢复屏幕*/ } void disp_menu_item(int x,int y,int fcolor,int bcolor,char *string) { textbackground(bcolor); textcolor(fcolor); gotoxy(x,y); cputs(string); /*显示字符串*/ } WMainMenu(void) { int i; window(1,1,80,25); textattr(0x3e); for(i=0;i<5;i++) { gotoxy(SbX[i],1); cputs(Main[i]); }

cotoxy (SbX[W],1): textattr(0x4e):/体同时设置前景和青景顾色*/ cp四ts(in]):/以上3句是设置默认选择File菜单/ WSublenu (void) I int i: cettext (SbX[Mm]-2,2.SxW]+Sbid0h]+l,Sum]+4+l,bu):/体促存和恢复屏 幕区域*/ Vind (SbX[Me]-2.2+1.SbX[Vn]*Shwid[M].SbNiom[Mm]+3+1.1.3.15) textattr(0x3f): clrscr0: for (i=0:i<SbNum[Mm]i++) { 0t0xy2,1+i): cputs(Sub(Mn][i]) 1 textattr(Oxle): gotoxy (2.Samn[Ma]+1) c四ts(S动[W[SamM]):/以上3句是设置默认达择File菜单下的0pen*/ 1 Quit(void) I textbackground(0): textcolor (7) vindow1.1,80.25): clrscr0; int SubFunGo(
gotoxy(SbX[Mm],1); textattr(0x4e); /*同时设置前景和背景颜色*/ cputs(Main[Mm]); /*以上 3 句是设置默认选择 File 菜单*/ } WSubMenu(void) { int i; gettext(SbX[Mm]-2,2,SbX[Mm]+SbWid[Mm]+1,SbNum[Mm]+4+1,buf); /*保存和恢复屏 幕区域*/ Wind(SbX[Mm]-2,2+1,SbX[Mm]+SbWid[Mm],SbNum[Mm]+3+1,1,3,15); textattr(0x3f); clrscr(); for(i=0;i<SbNum[Mm];i++) { gotoxy(2,1+i); cputs(Sub[Mm][i]); } textattr(0x1e); gotoxy(2,Smm[Mm]+1); cputs(Sub[Mm][Smm[Mm]]); /*以上 3 句是设置默认选择 File 菜单下的 Open*/ } Quit(void) { textbackground(0); textcolor(7); window(1,1,80,25); clrscr(); } int SubFunGo() {

svitch (Ma) case 0:/*file:new open save,save as,exit*/ svitch (Smm[0]) I case 0:printf("Enter New File"):break: case 1:printf("Enter Open File"):break: case 2:printf("Enter Save Function");break; case 3:printf("Enter Save as Funetion"):break: case 4:exit (0):/return 0: Jbreak: case 1:break:/*Edit:cut,copy,paste,Del,Select all,edit * case 2:break:/*Search:Find,Replace*/ case 3:break:/+Option:"Undo ""Redo","Config","Help"/ case 4: switch (San[4]) case 0:head=add (head):window(3.3.40,20):clrscr():SlectMainMenu():break: case 1:print (head)window(3,3,40,20):clrser():SleetMainMenuO break: case 2:search (head):window(3,3.40,20):clrscr(:SlectMainMenu()break: case 3:head=del(head):windo(3.3.40.20):clrscr():SlectMainMenu (break: case 4:save(head):break: case 5:head=load():break: default:break: Jbreak: return 1: InitScreen(void)
switch(Mm) { case 0: /*file: new , open ,save ,save as,exit*/ switch(Smm[0]) { case 0: printf("Enter New File");break; case 1: printf("Enter Open File");break; case 2: printf("Enter Save Function");break; case 3: printf("Enter Save as Function");break; case 4: exit(0);// return 0; }break; case 1: break; /*Edit: cut,copy,paste,Del,Select all,edit */ case 2: break; /*Search: Find,Replace*/ case 3: break; /*Option: "Undo ","Redo","Config","Help"*/ case 4: switch(Smm[4]) { case 0: head=add(head);window(3,3,40,20);clrscr();SlectMainMenu();break; case 1: print(head);window(3,3,40,20);clrscr();SlectMainMenu();break; case 2: search(head);window(3,3,40,20);clrscr();SlectMainMenu();break; case 3: head=del(head);window(3,3,40,20);clrscr();SlectMainMenu();break; case 4: save(head);break; case 5: head=load();break; default: break; }break; } return 1; } InitScreen(void) {

window(1,1,80,25): textattr(0x17): elrser0: window(1,1,80.1》: textattr(0x3e): elrser0: window(1.24.80,240: textattr(Ox74): elrser0: cputs (edithelp): vindow(1.25.80.25): textattr(OxBa): elrser0: ind(1.2,80,23,2,1,15): vindow1.25.80,25): textattr(Oxbe): cputs(mainhelp): 1 /体面框架*/ Wind(int xl,int yl,int x2,int y2,int FrmTp,int BC1,int TCI) I int i; int c[2][6]=110xda.Oxe4,0xbf,0xh3.0xc0,0xd9), [Oxc9.0xed,Oxbb.Oxba.OxcB.Oxbc)): textcolor(TCl):/设置在显示前口中的字体颜色 texthackground (BC1): window(x1,y1,x2,y2): clrser0: if(FrmTp)
window(1,1,80,25); textattr(0x17); clrscr(); window(1,1,80,1); textattr(0x3e); clrscr(); window(1,24,80,24); textattr(0x74); clrscr(); cputs(edithelp); window(1,25,80,25); textattr(0x6a); clrscr(); Wind(1,2,80,23,2,1,15); window(1,25,80,25); textattr(0x6e); cputs(mainhelp); } /*画框架*/ Wind(int x1,int y1,int x2,int y2,int FrmTp,int BCl,int TCl) { int i; int c[2][6]={{0xda,0xc4,0xbf,0xb3,0xc0,0xd9}, {0xc9,0xcd,0xbb,0xba,0xc8,0xbc}}; textcolor(TCl); //设置在显示窗口中的字体颜色 textbackground(BCl); window(x1,y1,x2,y2); clrscr(); if(FrmTp) {

window(1,1,80,25: cotoxy (xl,y1): putch(c[FraTp-1][0]): for(i"xl+1:i<x2:i+t) putch(c(FrmTp-1][1]): putch(c[FrmTp-1][2]): far(i=y1+1:i<y2:i+)[ gotoxy (xl,i) p陶tch(c[FraTp-l][3]): xotoxy (2.) 陶tch(e[FruTp-1】[3]): ot0xy红,y2): putch (e[FrmTp-1][4]): for (i=xl+1:i<x2:i++) putch(c[FruTp-1][1]): putch(c[FrmTp-1][5]): 1 window(xl+l.yl+l,x2-1,y2-1); int GetKey(void) { union unsigned int x: unsigned char y[2]: lkeyl: hile(bioskey(1》=O: keyl,x=电ioskey(0): return (keyl.y[o]==0?(keyl.y[1]+256):keyl.y[o])
window(1,1,80,25); gotoxy(x1,y1); putch(c[FrmTp-1][0]); for(i=x1+1;i<x2;i++) putch(c[FrmTp-1][1]); putch(c[FrmTp-1][2]); for(i=y1+1;i<y2;i++){ gotoxy(x1,i); putch(c[FrmTp-1][3]); gotoxy(x2,i); putch(c[FrmTp-1][3]); } gotoxy(x1,y2); putch(c[FrmTp-1][4]); for(i=x1+1;i<x2;i++) putch(c[FrmTp-1][1]); putch(c[FrmTp-1][5]); } window(x1+1,y1+1,x2-1,y2-1); } int GetKey(void) { union { unsigned int x; unsigned char y[2]; }key1; while(bioskey(1) == 0); key1.x=bioskey(0); return (key1.y[0]==0? (key1.y[1]+256): key1.y[0]); }

SelectMenu(vofd) while(Key I=ESC) { Key Getkey(: if (Key=LEFT Key=RIGHT)SlectMainMenuO: if (Key=-UPPER Key=-DOAN)SlectSubMenu() if (Key=-ENTER)SubFunGo() 1 return: S1 ectSubMenu(roid)/e子菜单项的选择+/ disp_n_1t0m2,1+Smm,15,3SM[Sam[]):/体光条族复/ if (Key=UPPER Smm】=Smh]=0 SbNum]-1:sm[]-1:/x实现子菜单项的循环*/ if(Key--D0WX Som[Mm]Srm[M]==SbNun[Vn]-1?0:Samn[Vn]+1: disp_memu_item2,1+5mWm].14,1,5ubWm][sm[Wm]》;/e设置光条*/ 1 SlectMainMenu(void) window(1,1,80,25: disp_c_iten(SbX[m],l,l4,3,始in0m]):/恢复主菜单光条+/ ttext (SbX[M]-2,2,sx[W]+hid0h]+1,sNum0]+4.af):/*族复屏幕/ if(Key=LEFT h·如0?4:恤1;/◆实现主菜单的循环*/ if (Key=RIGHIT) 恤=a=4?0:+1:
SelectMenu(void) { while(Key != ESC) { Key = GetKey(); if(Key==LEFT || Key==RIGHT)SlectMainMenu(); if(Key==UPPER|| Key==DOWN)SlectSubMenu(); if(Key==ENTER) SubFunGo(); } return; } SlectSubMenu(void) /*子菜单项的选择*/ { disp_menu_item(2,1+Smm[Mm],15,3,Sub[Mm][Smm[Mm]]);/* 光条恢复*/ if(Key==UPPER ) Smm[Mm] = Smm[Mm]==0?SbNum[Mm]-1:Smm[Mm]-1; /*实现子菜单项的循环*/ if(Key==DOWN ) Smm[Mm] = Smm[Mm]==SbNum[Mm]-1?0:Smm[Mm]+1; disp_menu_item(2,1+Smm[Mm],14,1,Sub[Mm][Smm[Mm]]); /*设置光条*/ } SlectMainMenu(void) { window(1,1,80,25); disp_menu_item(SbX[Mm],1,14,3,Main[Mm]);/*恢复主菜单光条*/ puttext(SbX[Mm]-2,2,SbX[Mm]+SbWid[Mm]+1,SbNum[Mm]+4,buf); /*恢复屏幕*/ if(Key==LEFT ) Mm = Mm==0?4:Mm-1; /*实现主菜单的循环*/ if(Key==RIGHT) Mm = Mm==4?0:Mm+1;

disp_e_1te审ShX[],1,14,4,an0):/体设置光条*/ Sublenu0;/e显示下拉式装单*/
disp_menu_item(SbX[Mm],1,14,4,Main[Mm]);/*设置光条*/ WSubMenu(); /*显示下拉式菜单*/ }