这是99年做毕业设计时,用BC3.2做的图书管理程序(当年毕业设计获优,还不错),DOS平台,通过DOS33号中断可以支持鼠标操作,图形界面(仿Window95),不过对菜单部分由于当时技术有限,仅能支持鼠标操作,不支持快捷键。小图标都是自己一点一点画出来的(当然不是BMP位图,那时候还没有这个概念),现在看看这些程序感觉很亲切,所以把它拿出来见见太阳:)
这是闪现屏幕
这是主界面(以上图片用数码相机照的,DOS下的程序,忘记怎么截图了)
这是主程序代码:
//-------------------------------------------------------------------//
// 图 书 管 理 主 程 序 //
//-------------------------------------------------------------------//
#include "head.hpp"
#include "list.hpp"
//--------------------
#define CLS w.edit(6,56,632,420)
WIN w("图书管理","book.tu");
char far *escr[1]={{"图书管理系列..."}};
PROM far *p1='\0',*p2='\0';
struct date da;
int ROLE=0;
RUNFUN fun[5]=`NULL`,fun0[8]=`NULL`;
//-----查询------------
#include "find.cpp"
//-----编目-----------
#include "index.cpp"
//-----借书------------
#include "borrow.cpp"
//-----还书------------
#include "return.cpp"
//-----帮助------------
void Help(void)
{
w.endscr("帮助...");
HELPWIN h("帮助","sdfds","help.dat");
w.endscr("图书管理系列...");
}
//------日期-----------
#include "date.cpp"
//-----角色-----------
//#include "role.cpp"
//---设置密码---------
#include "setcode.cpp"
//---详细信息---------
#include "allmess.cpp"
//************主程序*************//
void main(void)
{
system("cover"); //封面
screen(5); //设置图形模式,且底色为黑色
compcode();
//-----------------
getdate(&da); //取系统日期
mouse.init();
mouse.show();
setfillstyle(1,5);bar(0,0,640,480); //清屏
//--------------------------------
char far *Book[5]={"查询","编目","借书","还书","帮助"};
w.setoffon();w.unsave();w.form();
MENU menu(5,1,Book,6,30); //定义一下拉菜单
menu.setmode(1);menu.init();
//------------------------------
setcolor(5);line(6,52,630,52);
setcolor(15);line(6,53,630,53);
//------------------------------
int tt[]={title,borrowmessage,bookmessage,zhantie,edit,del,
borrow,retu,code,riqi};
char far *ms[]={"查看书库目录","查看借书信息","查看某书的详细信息",
"库记录追加","库记录修改","库记录删除","借书",
"还书","设置密码","日期/时间"};
K_E_Y kk(10,120,59,tt,ms);
if(ROLE==0)kk.setflag("34567");
else kk.setflag("");
kk.setmode("368");
kk.init();
//save("tubit?.dat",120,59,420,85);
if(ROLE==0)load("tubit1.dat"); else load("tubit0.dat");
w.wind(6,59,105,79);
if(ROLE==0)hz.hz(15,61,"普通用户",5);
else hz.hz(15,61,"超级用户",5);
w.key(Jv,85,59,0);
//-------------------------------
w.edit(6,86,632,420);
char *escr[1]={{"图书管理系列..."}};
w.endscr(0,escr);
BAR(613,90,631,402);BAR(10,401,630,419);
setfillstyle(1,7);bar(610,401,631,419);
w.key(Ja,612,86,0); w.key(Jv,612,382,0);
w.key(Jd,7,400,0); w.key(Jb,593,400,0);
w.winu(612,106,631,300);w.winu(27,400,450,419);
printf("\16[sa%d,%d,%d,%d,%s$]",0,0,639,451,"tumain.pcx");
fun[0]=Find; //查询
fun[1]=Index; //编目
fun[2]=Borrow; //借书
fun[3]=Return; //还书
fun[4]=Help; //帮助
//-------------------
fun0[0]=readall; //查看书库目录
fun0[1]=messageall; //查看借书信息
fun0[2]=allmess; //查看某书的详细信息
fun0[3]=append; //库记录追加
fun0[4]=eedit; //库记录修改
fun0[5]=delnum; //库记录删除
fun0[6]=subBorrow; //借书
fun0[7]=Return; //还书
fun0[8]=setcode; //设置密码
fun0[9]=daTe; //日期/时间
//--------------------
menu.RUN(kk,fun,fun0,&w); //菜单运行
//--------------------------------
closegraph();
mouse.init();
}
//----------------------------------------------------------------------//
这是关于鼠标部分的源码:
//------------------------------------------------------------------------//
// 鼠 标 类 库 //
//------------------------------------------------------------------------//
typedef struct mouse_xzrd
{
int x,y;
int far *image;
}M_XZRD;
extern int Mpp0[]={0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0x8002,0x4004,0x2008,0x1010,
0x0820,0x0440,0x0280,0x0000,
0x0280,0x0440,0x0820,0x1010,
0x2008,0x4004,0x8002,0x0000
};
extern int Mpp1[]={0x3fff,0x1fff,0x0fff,0x07ff,
0x03ff,0x01ff,0x00ff,0x007f,
0x003f,0x001f,0x01ff,0x10ff,
0x30ff,0x787f,0xf87f,0xfc7f,
0x0000,0x4000,0x6000,0x7000,
0x7800,0x7c00,0x7e00,0x7f00,
0x7f80,0x7e00,0x7c00,0x4600,
0x0600,0x0300,0x0300,0x0180
};
extern int Mpp2[]={0xfc7f,0xfc7f,0xfc7f,0xfc7f,
0xfc7f,0xfc7f,0x0001,0x0001,
0x0001,0xfc7f,0xfc7f,0xfc7f,
0xfc7f,0xfc7f,0xfc7f,0xffff,
0x0000,0x0100,0x0100,0x0100,
0x0100,0x0100,0x0100,0x7ffc,
0x0100,0x0100,0x0100,0x0100,
0x0100,0x0100,0x0000,0x0000
};
extern int Mpp3[]={0xfeff,0xfc7f,0xfc7f,0xfc7f,
0xf83f,0xf83f,0xf01f,0xe00f,
0xc007,0x8003,0x0001,0x0001,
0xf83f,0xf01f,0xe00f,0xe10f,
0x0000,0x0100,0x0100,0x0100,
0x0380,0x0380,0x07c0,0x0fe0,
0x1ff0,0x3ff8,0x7ffc,0x0380,
0x0380,0x07c0,0x0ee0,0x0000
};
extern int Mpp4[]={0xffff,0xf00f,0xc003,0x8001,
0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,
0x8001,0xc003,0xf00f,0xffff,
0x0000,0x0000,0x0ff0,0x381c,
0x6ff6,0x5c3a,0x57ea,0x566a,
0x566a,0x57ea,0x5c3a,0x6ff6,
0x381c,0x0ff0,0x0000,0x0000
};
extern int Mpp5[]={0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0x0c00,0x1200,0x1200,0x1200,
0x13fe,0x1249,0x1249,0x1249,
0x7249,0x9001,0x9001,0x9001,
0x8001,0x8001,0x4002,0x3ffc
};
extern int Mpp6[]={0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0x0000,0x0000,0x0420,0x0c30,
0x1428,0x27e4,0x4002,0x8001,
0x4002,0x27e4,0x1428,0x0c30,
0x0420,0x0000,0x0000,0x0000
};
extern int Mpp7[]={0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0x0100,0x0280,0x0440,0x0820,
0x1010,0x3c78,0x0440,0x0440,
0x0440,0x0440,0x3c78,0x1010,
0x0820,0x0440,0x0280,0x0100
};
extern int Mpp8[]={0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0xffff,0xffff,0xffff,0xffff,
0x0000,0x0002,0x0006,0x000e,
0x001e,0x003e,0x007e,0x00fe,
0x01fe,0x007e,0x003e,0x0062,
0x0060,0x00c0,0x00c0,0x0180
};
extern M_XZRD Mouse0={7,7,Mpp0}; //X形
extern M_XZRD Mouse1={0,0,Mpp1}; //右键头形
extern M_XZRD Mouse2={7,7,Mpp2}; //十字形
extern M_XZRD Mouse3={7,0,Mpp3}; //飞机形
extern M_XZRD Mouse4={7,7,Mpp4}; //圆形
extern M_XZRD Mouse5={5,0,Mpp5}; //手形
extern M_XZRD Mouse6={7,7,Mpp6}; //<->形
extern M_XZRD Mouse7={7,7,Mpp7}; //VA形
extern M_XZRD Mouse8={15,1,Mpp8}; //左键头形
class MOUSE
{
private:
int flag; //鼠标安装与否
int FLAG; //鼠标显隐与否
int num; //鼠标键的个数
int x,y; //座标
int right,left; //鼠标左右健按下与否
M_XZRD far *form; //鼠标形状
int bx,by,ex,ey; //鼠标的显隐区
int chart; //图形状态打开与否
int chartsize; //图形下鼠标的大小
int winxsize,winysize; //文本下鼠标的大小
int key; //鼠标键位
int rx,ry; //鼠标形状热点
int rbx,rby,lbx,lby; //鼠标键最后按下的座标
int rex,rey,lex,ley; //鼠标键最后松开的座标
int leftnum,rightnum;
int KEY()
{ union REGS r; r.h.ah=0x00;
int86(0x16,&r,&r);return(r.h.ah);}
public:
int KEYKEY;
MOUSE(void){chart=0;chartsize=16;winxsize=8;winysize=8;
form=&Mouse1;bx=0;by=0;ex=640;ey=480;KEYKEY=0;
rbx=0;rby=0;lbx=0;lby=0;
rex=0;rey=0;lex=0;ley=0;leftnum=0;rightnum=0;
init();shape();show();}
void show_message(void); //显示鼠标信息
void init(void); //鼠标初始化
void shape(void); //定义鼠标的形状
void setshape(int); //设置鼠标的形状
void show(void); //显示鼠标
void hide(void); //消隐鼠标
void setbeginxy(int,int);//设置鼠标初始位置
void message(void); //获得鼠标信息
void mousekeymessage(void); //获得鼠标按下松开信息
void show_mousekeymessage(void); //显示鼠标按下松开信息
void setmax(int,int); //设置鼠标显示X范围
void setmay(int,int); //设置鼠标显示Y范围
void setmaxy(int,int,int,int); //设置鼠标显示范围
int mousekey(void); //判断是鼠标还是键盘信息
void mousev(void); // 设置鼠标的灵敏度
本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/323488,如需转载请自行联系原作者