天天看點

99年畢業設計獲優的程式-圖書管理程式

這是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();

}

//----------------------------------------------------------------------//

這是關于滑鼠部分的源碼:

//------------------------------------------------------------------------//

//                    鼠     标    類     庫                              //

 typedef struct mouse_xzrd

 {

  int x,y;

  int far *image;

 }M_XZRD;

extern int Mpp0[]={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,

     0x0380,0x0380,0x07c0,0x0fe0,

     0x1ff0,0x3ff8,0x7ffc,0x0380,

     0x0380,0x07c0,0x0ee0,0x0000

extern int Mpp4[]={0xffff,0xf00f,0xc003,0x8001,

     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,

     0x0c00,0x1200,0x1200,0x1200,

     0x13fe,0x1249,0x1249,0x1249,

     0x7249,0x9001,0x9001,0x9001,

     0x8001,0x8001,0x4002,0x3ffc

extern int Mpp6[]={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,

     0x0100,0x0280,0x0440,0x0820,

     0x1010,0x3c78,0x0440,0x0440,

     0x0440,0x0440,0x3c78,0x1010,

     0x0820,0x0440,0x0280,0x0100

extern int Mpp8[]={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); // 設定滑鼠的靈敏度

   int  getx(void){message();return x;} //獲得滑鼠x值

   int  gety(void){message();return y;} //獲得滑鼠y值

   int  getlbx(void){mousekeymessage();return lbx;} //獲得滑鼠左鍵按下的x值

   int  getlby(void){mousekeymessage();return lby;} //獲得滑鼠左鍵按下的y值

   int  getlex(void){mousekeymessage();return lex;} //獲得滑鼠左鍵松開的x值

   int  getley(void){mousekeymessage();return ley;} //獲得滑鼠左鍵松開的y值

   int  getrbx(void){mousekeymessage();return rbx;} //獲得滑鼠右鍵按下的x值

   int  getrby(void){mousekeymessage();return rby;} //獲得滑鼠右鍵按下的y值

   int  getrex(void){mousekeymessage();return rex;} //獲得滑鼠右鍵松開的x值

   int  getrey(void){mousekeymessage();return rey;} //獲得滑鼠右鍵松開的y值

   //獲得滑鼠左鍵按下的次數

   int  getleftnum(void){mousekeymessage();return leftnum;}

   //獲得滑鼠右鍵按下的次數

   int  getrightnum(void){mousekeymessage();return rightnum;}

   int  getkey(void){message();return key;} //獲得滑鼠key值

   //顯示滑鼠座标

   void showxy(void){gotoxy(1,1);cout<<"x="<<x<<" y="<<y<<" key="<<key<<endl;}

   int yesno(int,int,int,int);//判斷滑鼠是否在指定範圍

   void run(void far interrupt(far *p)(),int nn);// 使用者滑鼠程式的運作

   void close(void);  //消除使用者滑鼠程式的運作

 };

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

void MOUSE::show_message(void)

  cout<<"Mouse num:"<<num<<endl;

  cout<<"Mouse form:"<<form<<endl;

  cout<<"Mouse showsection:"<<bx<<","<<by<<","<<ex<<","<<ey<<endl;

 }

void MOUSE::init(void)

  union REGS r;

  flag=0;

  if(getvect(0x33)!=0L)

   {  r.x.ax=0;

      int86(0x33,&r,&r);

      if(r.x.ax==0){cout<<"NOT INSTALLED MOUSE !";exit(0);}

      if(r.x.ax!=0){

  flag=1;num=r.x.bx;

  shape();

       if(!chart)

  {

    r.h.ah=0x0f;

    int86(0x10,&r,&r);

    if(r.h.al==0||r.h.al==1)winxsize=16;

    chart=1;

      }}

    }

void MOUSE::shape()

  if(flag)

   { _ES=FP_SEG(form->image);

     _DX=FP_OFF(form->image);

     _CX=form->y;

     _BX=form->x;

     _AX=0x09;

     geninterrupt(0x33);

     rx=form->x;

     ry=form->y;

void MOUSE::setshape(int n)

  switch (n)

   case 0:form=&Mouse0;break;

   case 1:form=&Mouse1;break;

   case 2:form=&Mouse2;break;

   case 3:form=&Mouse3;break;

   case 4:form=&Mouse4;break;

   case 5:form=&Mouse5;break;

   case 6:form=&Mouse6;break;

   case 7:form=&Mouse7;break;

   case 8:form=&Mouse8;break;

   default:break;

  }

inline void MOUSE::show(void)

    r.x.ax=1;

    int86(0x33,&r,&r);

    FLAG=1;

inline void MOUSE::hide(void)

  if((FLAG)&&(flag))

    r.x.ax=2;

    FLAG=0;

void MOUSE::setbeginxy(int X,int Y)

   r.x.ax=4;

   r.x.cx=X;

   r.x.dx=Y;

  int86(0x33,&r,&r);

  x=X;y=Y;

inline void MOUSE::message(void)

 union REGS r;

   r.x.ax=3;

   int86(0x33,&r,&r);

   key=r.x.bx;

   KEYKEY=key;

   x=r.x.cx;

   y=r.x.dx;

 }}

void MOUSE::mousekeymessage(void)

  {//-----按下-----

   //左鍵

   r.x.ax=5;

   r.x.bx=0;

   key=KEYKEY=r.x.ax;

   leftnum=r.x.bx;

   lbx=r.x.cx;

   lby=r.x.dx;

   //右鍵

   r.x.bx=1;

   rightnum=r.x.bx;

   rbx=r.x.cx;

   rby=r.x.dx;

   //-----松開-----

   r.x.ax=6;

   lex=r.x.cx;

   ley=r.x.dx;

   rex=r.x.cx;

   rey=r.x.dx;

void MOUSE::show_mousekeymessage(void)

  gotoxy(10,6);

  cout<<"Left ("<<lbx<<","<<lby<<")-("<<lex<<","<<ley<<")/n";

  gotoxy(10,7);

  cout<<"Right ("<<rbx<<","<<rby<<")-("<<rex<<","<<rey<<")/n";

void MOUSE::setmax(int x1,int x2)

   if(!FLAG)

    {

     x1=(x1*winxsize)-winxsize;

     x2=(x2*winxsize)-winxsize;

   r.x.ax=7;

   r.x.cx=x1;

   r.x.dx=x2;

void MOUSE::setmay(int y1,int y2)

     y1=(y1*winysize)-winysize;

     y2=(y2*winysize)-winysize;

   r.x.ax=8;

   r.x.cx=y1;

   r.x.dx=y2;

void MOUSE::setmaxy(int x1,int y1,int x2,int y2)

 if(flag)

  r.x.ax=16;

  r.x.cx=x1;

  r.x.dx=y1;

  r.x.si=x2;

  r.x.di=y2;

 else hide();

inline int MOUSE::mousekey()

   if(kbhit())return KEY();

    message();

    if(key==1)  return(1001);

    if(key==2)  return(1002);

    if(key==3)  return(1003);

    return(-1);

void MOUSE::mousev()

    _BX=20;

    _CX=20;

    _AX=0x1a;

   geninterrupt(0x33);

int MOUSE::yesno(int bx,int by,int ex,int ey)

{ int t;

  if(bx>ex){t=bx;bx=ex;ex=t;}

  if(by>ey){t=by;by=ey;ey=t;}

  message();

  if(x>bx&&x<ex&&y>by&&y<ey)return 1;

   else return 0;

void  MOUSE::run(void far interrupt(*p)(),int nn)

    _ES=FP_SEG(p);

    _DX=FP_OFF(p);

    _CX=nn;

    _AX=0x14;

  geninterrupt(0x33);

void MOUSE::close(void)

    _ES=0;

    _DX=0;

    _CX=0;

好了,先放這些吧。現在想想如果用DOS做簡單的圖形界面的嵌入式系統,也許這個也有點用(我剛到公司,做的第一個程式就是用這個改進的(DOS下的物料計量系統))

繼續閱讀