程序设计实训

#include<bits/stdc++.h>
#include "conio.h"  //如果用工程,把此处.c改成.h 
#include <stdio.h>
#define EnterKey      0x0d
#define UpCursor      38
#define LeftCursor    37
#define RightCursor   39
#define DownCursor    40
#define AltXKey       18
#define EscKey        27
#define SelectAttr    0x20        //选中的属性
#define NoSelectAttr  0x70       //未选中的属性
#define SystemBorder  0x17       //未选中的属性
#define BorderColor   0x30       //未选中的属性
#define MainMenuLine  1          //主菜单显示的开始行
#define MainMenuCount 8          //主菜单项的数目
#define MaxWindowWidth 80        //屏幕宽度
typedef signed short int ShortInt;
#define ll long long
using namespace std;
void asolve(); 
void ShowALineOfBox(ll x1,ll y1,ll width,string str,ll col1,ll col2);
void push1(KeyValueStru key);
void push2(KeyValueStru key);
void move();
void showbox(ll x1,ll y1,ll x2,ll y2,string str,ll col1,ll col2);
void coverzhumenu1(ll op,bool flag);//1代表覆盖原值,0代表覆盖当前值 
void ShowMenu(ll Layer,ll num,ll alex);//层数,第几个位置 ,如果是要打印二级子菜单,是在第alex层打开的二级子菜单,否则alex不用
void cover_kuai(ll op);
void cover_small_kuai(ll num/*第几个,用于确定横坐标*/,ll op/*第几层,用于确定高*/,bool flag);

void ShowALineOfBox(ll x1,ll y1,ll width,string str,ll col1,ll col2)
{//写行 
    gotoxy(x1,y1);
    textattr(col1);cout<<str[0];
    textattr(col2);for(int i=1;i<width;++i) cout<<str[1];
    textattr(col1);cout<<str[2]<<endl;
}
const int d1=25,d2=80;
enum KEY{
    ENTER=13,ESC=27,LEFT=37,UP=38,RIGHT=39,DOWN=40
};
int posx=1;
int posy=1;
KeyValueStru key;
void push1(KeyValueStru key)//上下移动
{
    ll k=(key.VKey==0x28?1:-1);
    posy=(posy+k+d1)%d1;gotoxy(posx,posy);
    return;
}
void push2(KeyValueStru key)//左右
{
    ll k=(key.VKey==0x27?1:-1);
    posx=(posx-k+d2)%d2;
    gotoxy(posx,posy);
    return;
}
void move(){//移动光标 
    while(key.VKey!=0x1b){        
        key=kbhit();
        push1(key);
        push2(key);
    }
}
void showbox(ll x1,ll y1,ll x2,ll y2,string str,ll col1,ll col2)
{//写块 
    ll width=abs(x2-x1+1);//宽度
    string ss="";ss+=str[0];ss+=str[1];ss+=str[2];

    ShowALineOfBox(x1,y1,width,ss,col1,col1);
    
    ss="";ss+=str[3];ss+=str[4];ss+=str[5];
    
    ll num=abs(y1-y2);//长度
    for(int i=1;i<num;++i)
    ShowALineOfBox(x1,y1+i,width,ss,col1,col2);
    
    ss="";ss+=str[6];ss+=str[7];ss+=str[8];

    ShowALineOfBox(x1,y2,width,ss,col1,col1);
}
typedef struct MenuItemStru{
  ShortInt SubMenuItemCount;          //子菜单的数目
  ShortInt SubMenuItemWidth;          //子菜单的宽度
  MenuItemStru * SubMenuItemAddr;     //子菜单数据结构地址
  ShortInt MenuItemStrWidth;          //主菜单项字符串长度
  char *   MenuItemStrAddr;           //主菜单项的字符串地址
};
typedef struct MenuSelectStru{
 ShortInt MenuIndex,MenuItemTotal;     //选择菜单中的哪项
 MenuItemStru * pMenu;                 //对应主菜单/子菜单的数据结构地址
 PCHAR_INFO AddrOfSaveText;            //备份下拉菜单区域的空间
 bool  PullDownMenu;                   //下拉菜单有否显示
 ShortInt left,top,right,bottom;//备份上一次的位置数据,方便返回处理 
};
//char * S_S_Box  ="谀砍渤滥";
char * S_S_Box  ="谀砍 忱馁";
char * T_S_Box  ="履鲁 忱馁";
char * B_S_Box  ="谀砍 忱馁";

//     File子菜单字符串
char * LoadStr    = "Load     F3";
char * PickStr    = "Pick Alt-F3";
char * NewStr     = "New";
char * SaveStr    = "Save     F2";
char * WriteStr   = "Write to";
char * DirStr     = "Diretory";
char * ChangeStr  = "Change Dir";
char * OsStr      = "Os Shell";
char * QuitStr    = "Quit  Alx-X";
//     Run 子菜单字符串
char * RunSubStr  = "Run           Ctrl-F9";
char * ProgStr    = "Program reset Ctrl-F2";
char * GotoStr    = "Go To cursor       F4";
char * TraceStr   = "Trace into         F7";
char * StepStr    = "Step over          F8";
char * UserStr    = "User Screen    Alt-F5";
//    Compile子菜单字符串
char * CompileStr = "Compile to OBJ";
char * MakeStr    = "Make EXE file";
char * LinkStr    = "Link EXE file";
char * BuildStr   = "Build all";
char * PrimaryStr = "Primary C file";
char * GetInfoStr = "Get info";
//    project子菜单字符串
char * ProjectStr = "Project name";
char * BreakStr   = "Break make on";
char * AutoStr    = "Auto dependencies";
char * ClearStr   = "Clear project";
char * RemoveStr  = "Remove messages";
//    Options子菜单字符串
char * CompilerStr = "Compiler";
char * LinkerStr   = "Linker";
char * EnvironStr  = "Environment";
char * DirectStr   = "Directories";
char * ArgumentStr = "Arguments";
//    comiler parameter子菜单字符串
char * ModelStr   = "Model";
char * DefinesStr = "Defines";
char * CodeStr    = "Code generation";
char * OptimStr   = "Optimization";
char * SourceStr  = "Source";
char * ErrorsStr  = "Errors";
char * NamesStr   = "Names";
//    Link子菜单字符串
char * MapStr     = "Map file";
char * InitialStr = "Initialize segments";
char * DefaultStr = "Default library";
char * WarnStr    = "Warn duplicate symbols";
char * StackStr   = "Stack warning";
char * CaseStr    = "Case-sensitive link";
//   Environment子菜单字符串
char * MessageStr ="Message Tracking";
char * KeepStr    ="Keep messages";
char * ConfigStr  ="Config auto save";
char * EditAutoStr="Edit auto save";
char * BackupStr  ="Backup files";
char * TabSizeStr ="Tab Size";
char * ZoomedStr  ="Zoomed windows";
char * ScreenStr  ="Screen size";
//   Directory子菜单字符串
char * IncludeStr ="Include directories";
char * LibraryStr ="Library directories";
char * OutputStr  ="Output directories";
char * TurboCStr  ="Turbo C directory";
char * PickFStr   ="Pick file name";
char * CurrentPStr="Current pick file";
//   Argument子菜单字符串
char * SaveOptStr="Save options";
char * RetriStr  ="Retrieve options";
//   Debug子菜单字符串
char * EvaluteStr="Evalute    Ctrl-F4";
char * CallStkStr="Call stack Ctrl-F3";
char * FindFunStr="Find function";
char * RefreshStr="Refresh display";
char * DisplayStr="Display swapping";
char * SourceDStr="Source debugging";
//   Break/Watch子菜单字符串
char * AddWatStr ="Add watch Ctrl-F7";
char * DeleteStr ="Delete watch";
char * EditWatStr="Edit watch" ;
char * RemAllStr ="Remove all watches";
char * ToggleStr ="Toggle breakpoint Ctrl-F8";
char * ClrAllStr ="Clear all breakpoints";
char * ViewStr   ="View next breakpoint";
//
//     File子菜单结构             //
//
MenuItemStru FileSubM[9] ={{0,0,0,PickStr-LoadStr-1,LoadStr},
                {0,0,0,NewStr-PickStr-1,PickStr},
                {0,0,0,SaveStr-NewStr-1,NewStr},
                {0,0,0,WriteStr-SaveStr-1,SaveStr},
                {0,0,0,DirStr-WriteStr-1,WriteStr},
                {0,0,0,ChangeStr-DirStr-1,DirStr},
                {0,0,0,OsStr-ChangeStr-1,ChangeStr},
                {0,0,0,QuitStr-OsStr-1,OsStr},
                {0,0,0,RunSubStr-QuitStr-1,QuitStr}};

//
//     Run 子菜单结构              //
//
MenuItemStru RunSubM[6] ={{0,0,0,ProgStr-RunSubStr-1,RunSubStr},
           {0,0,0,GotoStr-ProgStr-1,ProgStr},
           {0,0,0,TraceStr-GotoStr-1,GotoStr},
           {0,0,0,StepStr-TraceStr-1,TraceStr},
           {0,0,0,UserStr-StepStr-1,StepStr},
           {0,0,0,CompileStr-UserStr-1,UserStr}};

//
//    Compile子菜单数据结构定义     //
//
MenuItemStru CompSubM[6]={{0,0,0,MakeStr-CompileStr-1,CompileStr},
           {0,0,0,LinkStr-MakeStr-1,MakeStr},
           {0,0,0,BuildStr-LinkStr-1,LinkStr},
           {0,0,0,PrimaryStr-BuildStr-1,BuildStr},
           {0,0,0,GetInfoStr-PrimaryStr-1,PrimaryStr},
           {0,0,0,ProjectStr-GetInfoStr-1,GetInfoStr}};

//
//    project子菜单数据结构定义     //
//
MenuItemStru ProjSubM[5]={{0,0,0,BreakStr-ProjectStr-1,ProjectStr},
           {0,0,0,AutoStr-BreakStr-1,BreakStr},
           {0,0,0,ClearStr-AutoStr-1,AutoStr},
           {0,0,0,RemoveStr-ClearStr-1,ClearStr},
           {0,0,0,CompilerStr-RemoveStr-1,RemoveStr}};

///
// Options子菜单数据结构定义                                         //
//该菜单项包含:comiler parameter                                    //
//              Link                                                 //
//              Environment                                          //
//              Directory                                            //
//              Argument                                             //
///
//    comiler parameter子菜单数据结构定义     //
MenuItemStru CompPSubM[7]={{0,0,0,DefinesStr-ModelStr-1,ModelStr},
           {0,0,0,CodeStr-DefinesStr-1,DefinesStr},
           {0,0,0,OptimStr-CodeStr-1,CodeStr},
           {0,0,0,SourceStr-OptimStr-1,OptimStr},
           {0,0,0,ErrorsStr-SourceStr-1,SourceStr},
           {0,0,0,NamesStr-ErrorsStr-1,ErrorsStr},
           {0,0,0,MapStr-NamesStr-1,NamesStr}};

//    Link子菜单数据结构定义     //
MenuItemStru LinkerSubM[6]  ={{0,0,0,InitialStr-MapStr-1,MapStr},
           {0,0,0,DefaultStr-InitialStr-1,InitialStr},
           {0,0,0,WarnStr-DefaultStr-1,DefaultStr},
           {0,0,0,StackStr-WarnStr-1,WarnStr},
           {0,0,0,CaseStr-StackStr-1,StackStr},
           {0,0,0,MessageStr-CaseStr-1,CaseStr}};

//   Environment子菜单数据结构定义  //
MenuItemStru EnvironSubM[8]  ={{0,0,0,KeepStr-MessageStr-1,MessageStr},
            {0,0,0,ConfigStr-KeepStr-1,KeepStr},
            {0,0,0,EditAutoStr-ConfigStr-1,ConfigStr},
            {0,0,0,BackupStr-EditAutoStr-1,EditAutoStr},
            {0,0,0,TabSizeStr-BackupStr-1,BackupStr},
            {0,0,0,ZoomedStr-TabSizeStr-1,TabSizeStr},
            {0,0,0,ScreenStr-ZoomedStr-1,ZoomedStr},
            {0,0,0,ScreenStr-ScreenStr-1,ScreenStr}};

//   Directory子菜单数据结构定义   //
MenuItemStru DirectSubM[6]  ={{0,0,0,LibraryStr-IncludeStr-1,IncludeStr},
            {0,0,0,OutputStr-LibraryStr-1,LibraryStr},
            {0,0,0,TurboCStr-OutputStr-1,OutputStr},
            {0,0,0,PickFStr-TurboCStr-1,TurboCStr},
            {0,0,0,CurrentPStr-PickFStr-1,PickFStr},
            {0,0,0,SaveOptStr-CurrentPStr-1,CurrentPStr}};

//   Argument  子菜单数据结构定义   //
MenuItemStru ArgumentSubM[2] ={{0,0,0,RetriStr-SaveOptStr-1,SaveOptStr},
             {0,0,0,EvaluteStr-RetriStr-1,RetriStr}};

//
//    Option子菜单数据结构定义      //
//
MenuItemStru OptSubM[5]={{7,OptimStr-CodeStr-1,CompPSubM,LinkerStr-CompilerStr-1,CompilerStr},
           {5,StackStr-WarnStr-1,LinkerSubM,EnvironStr-LinkerStr-1,LinkerStr},
           {5,EditAutoStr-ConfigStr-1,EnvironSubM,DirectStr-EnvironStr-1,EnvironStr},
           {5,OutputStr-LibraryStr-1,DirectSubM,ArgumentStr-DirectStr-1,DirectStr},
           {2,EvaluteStr-RetriStr-1,ArgumentSubM,ModelStr-ArgumentStr-1,ArgumentStr}};

//
//   Debug  子菜单数据结构定义     //
//
MenuItemStru DebSubM[6]={{0,0,0,CallStkStr-EvaluteStr-1,EvaluteStr},
           {0,0,0,FindFunStr-CallStkStr-1,CallStkStr},
           {0,0,0,RefreshStr-FindFunStr-1,FindFunStr},
           {0,0,0,DisplayStr-RefreshStr-1,RefreshStr},
           {0,0,0,SourceDStr-DisplayStr-1,DisplayStr},
           {0,0,0,AddWatStr-SourceDStr-1,SourceDStr}};

//
//   Break/Watch子菜单数据结构定义  //
//
MenuItemStru WatSubM[7] ={{0,0,0,DeleteStr-AddWatStr-1,AddWatStr},
           {0,0,0,EditWatStr-DeleteStr-1,DeleteStr},
           {0,0,0,RemAllStr-EditWatStr-1,EditWatStr},
           {0,0,0,ToggleStr-RemAllStr-1,RemAllStr},
           {0,0,0,ClrAllStr-ToggleStr-1,ToggleStr},
           {0,0,0,ViewStr-ClrAllStr-1,ClrAllStr},
           {0,0,0,20,ViewStr}};//

//
//         主菜单数据结构定义       //
//
char * FileStr="File";
char * EditStr="Edit";
char * RunStr ="Run";
char * CompStr="Compile";
char * ProjStr="Project";
char * OptStr ="Options";
char * DebStr ="Debug";
char * WatStr ="Break/Watch";
string mas[13]={"File","Edit","Run","Compile","Project","Options","Debug","Break/Watch"};
char * MyMenu[MainMenuCount]={FileStr,EditStr,RunStr,CompStr,ProjStr,OptStr,DebStr,WatStr};
MenuItemStru MainMenu[MainMenuCount]={{0x09,NewStr-PickStr-1,FileSubM,EditStr-FileStr-1,FileStr}, 
                                      {0x0 ,00, 0,RunStr-EditStr-1,EditStr},
                                      {0x06,GotoStr-ProgStr-1,RunSubM ,CompStr-RunStr-1,RunStr},
                                      {0x06,GetInfoStr-PrimaryStr-1,CompSubM,ProjStr-CompStr-1,CompStr},
                                      {0x05,ClearStr-AutoStr-1,ProjSubM,OptStr-ProjStr-1,ProjStr},
                                      {0x07,ClrAllStr-ToggleStr-1,WatSubM,11,WatStr},
                                      {0x06,FindFunStr-CallStkStr-1,DebSubM ,WatStr-DebStr-1,DebStr},
                                      {0x05,ArgumentStr-DirectStr-1,OptSubM ,DebStr-OptStr-1,OptStr},
                                  };

MenuItemStru RootMenu={8,0,MainMenu,4,"Root"};//增加的根结点 
int MainMenuItemCol[MainMenuCount]={0x03,0x0b,0x13,0x19,0x25,0x30,0x3f,0x48};         //主菜单待显示的列位置
//选择历史缓冲区
CHAR_INFO ThirdSave[1000],SecondSave[1000],FirstSave[1000];
MenuSelectStru His[]={{0,8,MainMenu,0,false,0,0,0,0},
               {0,9, FileSubM,FirstSave,false,2,2,14,12},
               {0,0,0,SecondSave,false,0,0,0,0},
               {0,6,RunSubM,ThirdSave,false,19,2,39,9}};
int Layer=1;  //当前菜单操作的层 
ShortInt SelectLayer=0;
KeyValueStru CurrentKey;
MenuItemStru *mianmanu[]={FileSubM,RunSubM,CompSubM,ProjSubM,OptSubM,DebSubM,WatSubM};
void ShowMenu(ll Layer,ll num,ll alex)//层数,第几个位置 ,如果是要打印二级子菜单,是在第alex层打开的二级子菜单,否则alex不用 
{
    int i,CurColor=SelectAttr;
    ll dangqiantop=His[Layer].top;
    if(!Layer){
        for(int i=0;i<8;++i){
            gotoxy(MainMenuItemCol[i],1);
             textattr(CurColor);CurColor=NoSelectAttr;
            printf("%s",His[Layer].pMenu[i].MenuItemStrAddr);
        }
        return;
    }
    if(Layer==1){
         showbox(MainMenuItemCol[num]-1,2/*左上角高度*/,MainMenuItemCol[num]+MainMenu[num].SubMenuItemWidth-1,2+MainMenu[num].SubMenuItemCount+1,"---| |---",0x18,0x77);dangqiantop++;
        for (i=0;i<MainMenu[num].SubMenuItemCount;i++){
         gotoxy(MainMenuItemCol[num],dangqiantop++);textattr(CurColor);CurColor=NoSelectAttr;
        printf("%s",MainMenu[num].SubMenuItemAddr[i].MenuItemStrAddr);
        }
        return; 
    }
    if(Layer==2){ll pretop=4+alex;//高度 
        showbox(MainMenuItemCol[num]-1,pretop,MainMenuItemCol[num]-1+MainMenu[num].SubMenuItemAddr[alex].SubMenuItemWidth,pretop+MainMenu[num].SubMenuItemAddr[alex].SubMenuItemCount+1,"---| |---",0x18,0x77);
        pretop++;
        for(i=0;i<MainMenu[num].SubMenuItemAddr[alex].SubMenuItemCount;++i){
            gotoxy(MainMenuItemCol[num],pretop++);
            textattr(CurColor);CurColor=NoSelectAttr;
            printf("%s",MainMenu[num].SubMenuItemAddr[alex].SubMenuItemAddr[i].MenuItemStrAddr);
        }
    }
}
void coverzhumenu1(ll op,bool flag)//1代表覆盖原值,0代表覆盖当前值 
{
    ll kj=0x25;if(flag) kj=NoSelectAttr;
    showbox(MainMenuItemCol[op],1,MainMenuItemCol[op]+MainMenu[op].MenuItemStrWidth,1,"         ",kj,kj);
    gotoxy(MainMenuItemCol[op],1);
    printf("%s",His[0].pMenu[op].MenuItemStrAddr);
}
void cover_kuai(ll op){//一级小菜单的撤销 
    showbox(MainMenuItemCol[op]-1,3/*左上角高度*/,MainMenuItemCol[op]+MainMenu[op].SubMenuItemWidth-1,2+MainMenu[op].SubMenuItemCount+1,"         ",0x35,0x35);
    return;
} 
void cover_small_kuai(ll Layer,ll op/*第几层,用于确定高*/,bool flag)
{//一级小菜单的移动颜色变化 
    ll kj=0x25;if(flag) kj=NoSelectAttr;
    showbox(MainMenuItemCol[Layer],3+op,MainMenuItemCol[Layer]+MainMenu[Layer].SubMenuItemWidth-2,3+op,"         ",kj,kj);
    gotoxy(MainMenuItemCol[Layer],3+op);
    printf("%s",MainMenu[Layer].SubMenuItemAddr[op].MenuItemStrAddr);
}
void cover_second(ll Layer/*确定是哪一个一级子菜单对应的二级子菜单*/,ll op/*一级子菜单中的哪一项*/,ll alex/*一级子菜单打印的二级子菜单的哪一项*/,bool flag){//二级小菜单的移动颜色变化 
    ll kj=0x25;if(flag) kj=NoSelectAttr;
    showbox(MainMenuItemCol[Layer],5+op+alex,MainMenuItemCol[Layer]+MainMenu[Layer].SubMenuItemAddr[op].SubMenuItemWidth-2,5+op+alex,"         ",kj,kj);
    gotoxy(MainMenuItemCol[Layer],5+op+alex);
    printf("%s",MainMenu[Layer].SubMenuItemAddr[op].SubMenuItemAddr[alex].MenuItemStrAddr);
 } 
void cover_second_kuai(ll Layer,ll alex){
    showbox(MainMenuItemCol[Layer]-1,4+alex,MainMenuItemCol[Layer]-1+MainMenu[Layer].SubMenuItemAddr[alex].SubMenuItemWidth,4+alex+MainMenu[Layer].SubMenuItemAddr[alex].SubMenuItemCount+1,"         ",0x35,0x35);
    return;
}
ll op=0,opp=0,dir1=0,dir2=0,ds1=0,ds2=0,cengshu,canshu;
void change_key_left_right(KeyValueStru key)//一级左右 
{
    ll k=(key.VKey==RIGHT?1:-1);
    op=opp;opp=(opp+k+8)%8;
    coverzhumenu1(op,1);
    coverzhumenu1(opp,0);
    return;
}
void change_key_updown(KeyValueStru key)//一级上下 
{
    ll k=(key.VKey==DOWN?1:-1);
    dir2=dir1;
    dir1=(dir1+k+cengshu)%cengshu;//现在位置的更新 
    cover_small_kuai(opp,dir2,1);cover_small_kuai(opp,dir1,0);
}
void change_small_key_updown(KeyValueStru key)//二级上下 
{
    ll k=(key.VKey==DOWN?1:-1);
    ds2=ds1;
    ds1=(ds1+k+canshu)%canshu;
    cover_second(opp,dir1,ds2,1);cover_second(opp,dir1,ds1,0);
}
void key_sec()
{
    cover_second_kuai(opp,dir1);
    ShowMenu(1,7,0);
    cover_small_kuai(opp,0,1);cover_small_kuai(opp,dir1,0);
}
void key_enter()
{
    ShowMenu(2,opp,dir1);
    ds1=0,ds2=0;//(二级小菜单的位置) 
    canshu=MainMenu[opp].SubMenuItemAddr[dir1].SubMenuItemCount;
    bool flag=0;
    //gettext(MainMenuItemCol[7]-1,2/*左上角高度*/,MainMenuItemCol[7]+MainMenu[7].SubMenuItemWidth-1,2+MainMenu[7].SubMenuItemCount+1,His[7].AddrOfSaveText);
    while(1){
        key=kbhit();
        if(key.VKey==ESC){key_sec();break;}
        if(key.VKey==ENTER){gotoxy(1,25);textattr(RED);printf("illgel!!!");continue;}
           else if(key.VKey==UP||key.VKey==DOWN){change_small_key_updown(key);continue;}
    }
    //puttext(MainMenuItemCol[7]-1,2/*左上角高度*/,MainMenuItemCol[7]+MainMenu[7].SubMenuItemWidth-1,2+MainMenu[7].SubMenuItemCount+1,His[7].AddrOfSaveText);
}
void change_gaoji_leftright(KeyValueStru key)
{ll kk=(key.VKey==RIGHT?1:-1);
    cover_kuai(opp);
    op=opp;opp=(opp+kk+8)%8;
    ShowMenu(1,opp,0);
    coverzhumenu1(op,1);coverzhumenu1(opp,0);
    dir1=0,dir2=0;cengshu=MainMenu[opp].SubMenuItemCount;
}
void asolve()
{ShowMenu(0,0,0);
    while(1){
        key=kbhit();
        if(key.VKey==ENTER)
        {   if(opp==1) continue;
            ShowMenu(1,opp,0);dir1=0,dir2=0;//当前和上一次;(一级小菜单的位置) 
            cengshu=MainMenu[opp].SubMenuItemCount;
            while(1){
                key=kbhit();
                if(key.VKey==ENTER){
                    if(opp!=7){gotoxy(1,25);textattr(RED);printf("illgel!!!");continue;}
                    key_enter();
                    continue;
                }
                if(key.VKey==ESC){cover_kuai(opp);break;}
                if(key.VKey==UP||key.VKey==DOWN){change_key_updown(key);continue;}
                if(key.VKey==LEFT||key.VKey==RIGHT)    change_gaoji_leftright(key);    
            }
        }
        if(key.VKey==LEFT||key.VKey==RIGHT){change_key_left_right(key);continue;}
        //if(key.VKey==ESC) {gotoxy(100,25);exit(0);} 
    }
}
int main()
{
    showbox(1,1,100,1,"         ",0x95,0x35);showbox(1,2,100,25,"---| |---",0x18,0x39);
    asolve();
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP(Java Server Pages)程序设计实训项目,是一种使用Java编程语言编写的Web应用程序。下面是一个示例项目: 项目名称:在线图书商城 项目需求: 1. 用户注册、登录、退出功能。 2. 书籍分类浏览、搜索功能。 3. 书籍详情页展示,包括作者、出版社、价格、库存等信息。 4. 加入购物车、结算、订单查询功能。 5. 管理员登录、退出功能。 6. 后台管理功能,包括书籍信息的添加、修改、删除等操作。 项目实现: 1. 用户注册、登录、退出功能:使用JSP和Servlet实现用户注册、登录和退出功能。用户信息存储在数据库中。 2. 书籍分类浏览、搜索功能:使用JSP和Servlet实现书籍分类浏览和搜索功能。书籍信息存储在数据库中。 3. 书籍详情页展示:使用JSP和Servlet实现书籍详情页展示功能。 4. 加入购物车、结算、订单查询功能:使用JSP和Servlet实现加入购物车、结算和订单查询功能。购物车信息、订单信息存储在数据库中。 5. 管理员登录、退出功能:使用JSP和Servlet实现管理员登录和退出功能。管理员信息存储在数据库中。 6. 后台管理功能:使用JSP和Servlet实现后台管理功能,包括书籍信息的添加、修改、删除等操作。书籍信息存储在数据库中。 项目技术栈: 1. 后端技术:Java、Servlet、JSP、JDBC、MySQL等。 2. 前端技术:HTML、CSS、JavaScript、jQuery等。 项目实现过程: 1. 设计数据库表结构,包括用户信息表、书籍信息表、购物车信息表、订单信息表和管理员信息表。 2. 使用Eclipse IDE创建Web项目,并配置Tomcat服务器。 3. 编写JSP页面,包括用户注册、登录页面、书籍分类浏览页面、书籍详情页、购物车页面、订单查询页面、管理员登录页面、后台管理页面等。 4. 编写Servlet程序,处理用户注册、登录、退出、书籍分类浏览、搜索、书籍详情展示、加入购物车、结算、订单查询、管理员登录、退出、书籍信息的添加、修改、删除等操作。 5. 编写JDBC程序,连接数据库,进行数据的增删改查操作。 6. 进行测试、调试,确保项目的功能正常。 7. 部署到Tomcat服务器上,进行上线运行。 总结: 本项目以在线图书商城为例,介绍了JSP程序设计实训项目的实现过程和技术栈。通过该项目的实际操作,可以更好地掌握JSP和Servlet的使用,加深对Web应用程序开发的理解,提高编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值