/*
灯下野狐
09.5.13 at: JUST
mail: dengxiayehu@yeah.net
*/
#include "stdio.h"
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <stdarg.h>/*可变参数头文件*/
#include "my_mouse.h"/*鼠标头文件*/
#include <graphics.h>
#include <string.h>
#include <math.h>
#include <time.h>
#define PATH_USERPASS "F:\\userpass.txt" /*登录文件,在F盘*/
#define PATH_BOOK "F:\\bookdata.txt" /*存放书本信息的文件*/
#define PATH_MEMBER "F:\\member.txt" /*存放会员信息的文件*/
#define PATH_RECORD "F:\\record.txt" /*存放使用记录的文件*/
/*定义键值*/
#define Key_UP 0x4800
#define Key_DOWN 0x5000
#define Key_LEFT 0x4b00
#define Key_RIGHT 0x4d00
#define Key_Esc 0x011b
#define Key_ENTER 0x1c0d
#define Draw_Horizen_Line(x, y, r, attr) Draw_Line(x, y, r, attr, 0)/*宏定义,文本下画直线*/
#define Draw_Vertal_Line(x, y, r, attr) Draw_Line(x, y, r, attr, 1)/*文本下化竖线*/
#define Search_By_BookID() Search_Book_By_Which(0)/*以下都是一些宏*/
#define Search_By_BookName() Search_Book_By_Which(1)
#define Modify_By_BookID() Modify_Book_By_Which(0)
#define Modify_By_BookName() Modify_Book_By_Which(1)
#define Delete_By_BookID() Delete_Book_By_Which(0)
#define Delete_By_BookName() Delete_Book_By_Which(1)
#define Delete_Book_All() Delete_Book_By_Which(2)
#define Search_By_MemberNum() Search_Member_By_Which(0)
#define Search_By_MemberName() Search_Member_By_Which(1)
#define Modify_By_MemberNum() Modify_Member_By_Which(0)
#define Modify_By_MemberName() Modify_Member_By_Which(1)
#define Delete_By_MemberNum() Delete_Member_By_Which(0)
#define Delete_By_MemberName() Delete_Member_By_Which(1)
#define Delete_All() Delete_Member_By_Which(2)
char far *textmode_add = MK_FP(0xb800, 0x0000);/*文本模式首地址*/
char save[3][50*17*2], save_tips[27*3*2];/*定义这些是为后面保存屏幕时所用*/
char cc[4000];
char usname[20];/*使用的用户名*/
int first_come_in;/*标记量,第一次进入程序*/
int x, y;
int cursor_flag;/*以下是一些标记量*/
int tips_flag;
int tips_show;
int note_board;
int do_book_menu; /*book菜单标记*/
int do_member_menu;/*member菜单标记*/
int do_note_menu; /*note菜单标记*/
/*建议大家运行下看看,一目了然了*/
struct date d;
struct time ti;
/*书本结构体*/
typedef struct book_struct
{
char bookID[20];
char bookname[20];
char author[20];
char field[20];
char price[6];
char publish_date[30];
int num; /*库存量*/
char description[60];/*存放对书本的简单介绍信息*/
struct book_struct *next;
} Book;
/*会员结构体*/
typedef struct Member_struct
{
char membernum[20]; /*会员标号*/
char membername[20];/*会员名*/
char sex[6]; /*性别*/
int age; /*年龄*/
char phone[15]; /*电话*/
char E_mail[25];
char address[30];
char book_borrowed[6][20];/*这里定义最多只能借 6 本书*/
struct Member_struct *next;
}Member;
void Init_Mouse(); /*初始化鼠标*/
void Gotoxy(int x, int y); /*定位光标*/
void Draw_Frame(int l, int u, int r, int d, int attr, int border);/*画方框函数*/
void Draw_3D_Window(int l, int u, int r, int d, int tbcolor); /*画有3D效果的窗口*/
void Fill_Rectangle(int l, int u, int r, int d, char ch, int attr);/*用特定的字符填充矩形域*/
void Draw_Line(int l, int u, int r,int attr, int tempflag); /*画线,tempflag为1时画横线,为2时画竖线*/
void Output_Textxy(int x, int y, int attr, char *str, ...); /*在屏幕任意位置输出特定格式的字符串*/
void Put_Char(int x, int y, char ch, int attr); /*在(x, y)位置输出特定字符*/
void Show_Cursor();/*显示光标,(实际上通过设置dos中断,鼠标是直接可以显示的)*/
void Init_Notes();/*初始化一些信息*/
void Main_Menu();/*主要的菜单,支持鼠标的*/
void Begin_Print();/*很简单的开始界面(实际上只输出一句话,呵呵)*/
void Come_In(); /*登录窗口*/
void Show_Time(int x, int y);/*在指定位置显示时间*/
void Show_Tips(char *str);/*在鼠标移动到特定区域时,显示提示信息*/
void Show_No_Tips();/*关闭提示信息的显示*/
void Book_Menu();/*书本菜单*/
int Ask(char *str);/*将询问过程设置成函数*/
void Ok(char *str1, char *str2);/*输出特定信息的函数*/
void Init_Books_Background();/*初始化“增加书本”菜单的背景*/
void Init_Books(int flag);/*flag为1时先清空库存在增加,为2时是添加*/
void Input_String(int x, int y, char *str, int flag);/*为简化程序,设计的输入函数,flag为0时不能为空,为1时则可以*/
void Delete_Booklist(Book *h);/*以下有些函数一看名字就知道的,就不赘述了*/
void Save_Booklist_To_File(Book *h, int flag);/*0为清空, 1才为添加*/
void Print_All_Books();
Book *Read_Bookfile_To_List();
Book *Check_Book(Book *h, char *str, int flag);/*flag为0时以bookID查找,为1以bookname查找*/
void Search_Book_Menu();/*查找书的菜单*/
void Search_Book_By_Which(int flag);/*具体以什么关键字查找*/ /*参数较多,可以显示有滚动效果的信息*/
int Show_Information(int l, int u, int r, int d, int attr, int bcolor, int frame_color, char **str, int n);
void Note_Board(int l, int u, int r, int d, int attr, int frame_color, char **str, int n);/*滚动的信息框*/
void Up_Roll(int l, int u, int r, int d, int n);/*在以(l, u), (r, d)为左上和右下角的矩形域内所有字符上滚n行*/
void Down_Roll(int l, int u, int r, int d, int n);/*下滚n行*/
void Modify_Book_Menu();/*修改书本信息界面*/
void Modify_Book_By_Which(int flag);/*flag为0以bookID查找到在修改,为1时以bookname查找到后在修改*/
void Delete_Book_Menu();
void Delete_Book_By_Which(int flag);
void Init_Borrow_Book_Background();/*初始化借书背景*/
void Borrow_Book_Menu();
void Member_Menu();
int Whether_Check_In();/*(中间有个会员登录检测)*/
void Init_Members_Background();
void Init_Members(int flag);/*以下有些和上面的类似*/
void Delete_Memberlist(Member *h);
void Save_Memberlist_To_File(Member *h, int flag);
Member *Read_Memberfile_To_List();
Member *Check_Member(Member *h, char *str, int flag);
void Print_All_Members();
void Search_Member_Menu();
void Search_Member_By_Which(int flag);
void Modify_Member_Menu();
void Modify_Member_By_Which(int flag);
void Delete_Member_Menu();
void Delete_Member_By_Which(int flag);
void Return_Book_Menu();
void Note_Menu();
void Help();
void Version();/*显示版本*/
void Show_Record();/*显示记录*/
void Save_Info_To_Record(int flag, char *str, ...);/*将str字符串的信息存入文件*/
void End_Print();/*结束界面*/
void WARN(void);/*警告声音*/
void SOUND(int frequency,int time);
void MYDELAY(long t);/*延迟函数*/
void main()
{
Begin_Print();
Come_In();
while (1) Main_Menu();
}
/*10号中断定位光标*/
void Gotoxy(int x, int y)
{
union REGS regs;
regs.h.ah = 2;
regs.h.bh = 0;
regs.h.dh = y-1;
regs.h.dl = x-1;
int86(0x10, ®s, ®s);
}
/*直接输出到屏幕的画框函数,border为1时单框,为2时双框,attr为边框属性*/
void Draw_Frame(int l, int u, int r, int d, int attr, int border)
{
char far *p, far *save_p;
int box_car[2][6] = {{218, 196, 191, 179, 192, 217},
{0xc9, 0xcd, 0xbb, 0xba, 0xc8, 0xbc}};
int i;
border--; /*将border修正为合法值*/
if (border <0) border = 0;
else if (border > 1) border = 1;
save_p = p = textmode_add;
p = save_p+(u-1)*160+(l-1)*2;/*在左上角输出"┌"或"╔"*/
*p++ = box_car[border][0];
*p++ = attr;
for (i=l+1; i<r; i++)/*输出 "─" 或 "═"*/
{
*p++ = box_car[border][1];
*p++ = attr;
}
*p++ = box_car[border][2];/*右上角输出相应图形*/
*p = attr;
p = save_p+(d-1)*160+(l-1)*2;/*左下角输出图形(具体的大家只要拿扩充ASCII一看便知)*/
*p++ = box_car[border][4];
*p++ = attr;
for (i=l+1; i<r; i++)
{
*p++ = box_car[border][1];
*p++ = attr;
}
*p++ = box_car[border][5];
*p = attr;
p = save_p+u*160+(l-1)*2;
save_p += (u*160+(r-1)*2);
for (i=u+1; i<d; i++)/*画两根竖线*/
{
*p++ = box_car[border][3];
*p++ = attr;
*save_p++ = box_car[border][3];
*save_p++ = attr;
p += 158;
save_p += 158;
}
}
/
评论1
最新资源