winoprat.c

来自「图书借阅管理程序v1.2」· C语言 代码 · 共 143 行

C
143
字号
/****本文件中的函数是针对图书管理界的***/
#include<conio.h>
#include<string.h>
#include<stdio.h>
/*全局变量*/

extern int mainwinheight=19;/*主显示窗口的高度*/
extern int mainwinwidth=78; /*主显示窗口的宽度*/
extern int mainwinx=1,mainwiny=1;/*主窗口光标绝对位置,最大为allbooknode*/
extern int mainwintopy=1;   /*主窗口当前顶端坐标*/
extern int mainwintopx=1;   /*主窗口当前最左端坐标*/
extern int allbooknode=0;/*用Length()求出的图书线性表的长度*/
extern char* curpath="Cursor Path Name"; /*保存当前程序所在路径*/


/**上翻页键**/
void keypgup(struct dnode* bookhead);
/**下翻页键**/
void keypgdown(struct dnode* bookhead);
/**对上箭头光标进行控制**/
void keyup(struct dnode* bookhead);
/**对下箭头光标进行控制**/
void keydown(struct dnode* bookhead);
/****对光标的左右键进行控制*******/
void keyright(void);
void keyleft(void);
/***本函数用于在程序主窗口中显示一行文本***/
void ShowMainWinLine(int x,int y,int line,struct dnode* bookhead);
/**用于显示一屏幕文本**/
void ShowMainWinaScreen(struct dnode* bookhead,int startline);


/**********************上翻页键************************************/
void keypgup(struct dnode* bookhead)
{
 if(mainwintopy==1) return;     /*如果这已经是第一页,就不用翻页了*/
 mainwintopy-=(mainwinheight-1);
 if(mainwintopy<=1) mainwintopy=mainwiny=1;
 else mainwiny-=(mainwinheight-1);
 ShowMainWinaScreen(bookhead,mainwintopy);
}

/***********************下翻页键**********************************/
void keypgdown(struct dnode* bookhead)
{
 if(mainwintopy+(mainwinheight-1)>=allbooknode) return; /*如果这是最后一页,就不用翻页了*/
 mainwintopy+=(mainwinheight-1);
 if(mainwintopy+(mainwinheight-1)>=allbooknode)
      {mainwintopy=allbooknode-(mainwinheight-1);
       mainwiny=allbooknode;
      }
 else mainwiny+=(mainwinheight-1);
 ShowMainWinaScreen(bookhead,mainwintopy);
}


/*****************本函数用于在程序主窗口中显示一行文本*********************/
void ShowMainWinLine(int x,int y,int line,struct dnode* head)
{
 if((line<1)||(line>allbooknode)) return;
 gotoxy(x,y);
 if(head->book.borrow_out[0]=='Y') textcolor(LIGHTGREEN);
  else textcolor(YELLOW);
 if(head==NULL) return;
 cprintf("%-4d %7.1f",head->book.booknum,head->book.bookprice);
 cprintf("%3c  %3c  %s",head->book.haveCD[0],head->book.borrow_out[0],head->book.bookname);
}


/*******************用于显示一屏幕文字*************************************/
void ShowMainWinaScreen(struct dnode* head,int startline)
{
 int oldx=wherex(),oldy=wherey();
 int height;
 int line=1,curline=1;
 struct dnode* curnode;

 light_mouse(OFF);
 clrscr();
 if(allbooknode>=mainwinheight-1)   /*如果显示信息<窗口高度*/
         height=mainwinheight-1;
 clrscr();
 curnode=FindNode(startline,head);
/*do
   {
     ShowMainWinLine(1,curline++,startline++,head);
   } while((line++)<=height);
*/
for(line=1;line<=height+1;line++)
        {
         ShowMainWinLine(1,curline++,startline++,curnode);
         curnode=curnode->next;
        }
 gotoxy(oldx,oldy); /*还原光标*/
 light_mouse(ON);
}

/*******************对上箭头光标进行控制**********************************/
void keyup(struct dnode* head)
{
 struct dnode* curnode;
 if(--mainwiny>=mainwintopy) return;
 else
    {if(--mainwintopy<1) {mainwintopy=mainwiny=1;
                          return;
                         }
    }
 curnode=FindNode(mainwintopy,head);
 scroll(2,5,79,23,1,BLUE);/*下滚屏*/
 ShowMainWinLine(1,1,1,curnode);
}

/*******************对下箭头光标进行控制**********************************/
void keydown(struct dnode* head)
{
 struct dnode* curnode;
 if(++mainwiny>allbooknode)
    {mainwiny=allbooknode;
     return;
    }
 if(mainwiny<=mainwintopy+mainwinheight-1) return;
 else
    mainwintopy++;
 curnode=FindNode(mainwintopy+mainwinheight-1,head);
 scroll(2,5,79,23,0,BLUE);/*上滚屏*/
 ShowMainWinLine(1,mainwinheight,1,curnode);
}

/****对光标的左右键进行控制*******/
void keyright(void)
{
 mainwinx++;
 if(mainwinx>78) mainwinx=78;
 gotoxy(mainwinx-mainwintopx+1,mainwiny-mainwintopy+1);
}

void keyleft(void)
{
 mainwinx--;
 if(mainwinx<1) mainwinx=1;
 gotoxy(mainwinx-mainwintopx+1,mainwiny-mainwintopy+1);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?