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 + -
显示快捷键?