⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phone.c

📁 电话本查询系统 可按姓名 笔画等方式查询管理电话本
💻 C
📖 第 1 页 / 共 2 页
字号:
/*------------------------------宏定义-------------------------------------*/

#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<dos.h>

/*-----------------------------函数声明--------------------------------------*/
void Showms(int);           /*显示个数和页数*/
void SHOW(int,int );     /*显示记录*/
void Init();      /*初始化图形模式*/
void Drawwin(int,int,int,int,int);   /*画图*/
void Load();      /*初始化数据*/
void Paswrd();      /*输入密码*/
void Kernel();      /*核心算法*/
void Draw();      /*画图*/
void Win(int x,int y,int l,int w);   /*画3D*/
void HELP();      /*帮助函数*/
void EDIT();      /*编辑函数*/
void DELETE();      /*删除函数*/
int ADD();      /*添加函数*/
void SORT();      /*排序函数*/
void SEARCH();      /*搜索函数*/
void Loadfile();     /*初始化文件*/
void Savesm() ;      /*记录总数*/
void Quick( );      /*冒泡排序*/
int PAGEUP(int page,int);    /*翻页函数*/
int PAGEDM(int page,int );


#define Move printf("\n\n\n\n\n\n\n\n\n")  /*换行*/
#define ON 1      /*定义开关*/
#define OFF 0
/*-------------------------------定义热键----------------------------------*/
#define ESC 27
#define F2 60
#define A 97
#define S 115
#define O 111
#define H 104
#define E 101
#define D 100
#define Pageup 73
#define Pagedm  81
#define ALL 100      /*文件个数*/


char *red[]={"      A","D","E","S","o","H"};                    /*热键显示*/
char *f[]={"      Add","Delete","Edit","Search","Sort","Help"};   /*显示菜单*/
char *Hel[]={"ESC:             QUIT",                             /*Help内容*/
    "A  :              ADD",
    "D  :           DELETE",
    "E  :             EDIT",
    "S  :           SEARCH",
    "O  :             SORT",
    "H  :             HELP",
    "PAGEDOWN:            ",
    "PAGEUP:              ",
    "Fuction sort:        ",
    "     ESC:     restore"   };
typedef struct Telms                                       /*建立数组*/
{
 char name[15];
 char telnum[15];
 char Email[20];
 char workpl[30];

}Message;

int sum[1],pg=1;                                               /*文件个数*/
void *buffer,*buff;                                            /*记录画面指针*/

 


Message msg[ALL],msgtem[ALL];   /*msg为记录文件数组,msgtem为暂时记录排序数组*/

/*-------------------------------主函数---------------------------------*/
main()
{
 Paswrd();                                                   /*读入并检验密码*/
 Init();                                                     /*初始文件和界面*/
 Kernel();                                                   /*核心*/

}

/*-----------------------------初始化图形模式-----------------------------------*/
void Init()
{
 int driver=DETECT,mode,code;
 int i;

 registerbgidriver(EGAVGA_driver);                           /*初始化图形模式*/

 initgraph(&driver,&mode,"");

 code=graphresult();
 if(code!=grOk)
 {
  printf("\nGraphics System Error:%s\n",grapherrormsg(code));
  getch();
  exit(0);
 }

 Drawwin(100,100,439,250,ON);           /*画图*/
 Drawwin(120,120,399,210,OFF);
 Drawwin(350,150,150,150,ON);

 setcolor(DARKGRAY);
 settextstyle(0,0,8);
 outtextxy(145,179,"TBS");

 setcolor(RED);
 outtextxy(140,173,"TBS");

 setcolor(LIGHTBLUE);
 settextstyle(0,0,2);
 outtextxy(145,310,"Telephone Book System");
 setcolor(RED);
 settextstyle(0,0,1);
 outtextxy(260,245,"Version 1.0");
 setcolor(BLUE);
 settextstyle(0,0,1);
 outtextxy(360,175,"Foshan University");
 outtextxy(380,190,"03 Computer 2");
 outtextxy(387,205,"2003314241");
 outtextxy(380,220,"Liang Weijian");
 Load();                  /*初始化数据*/
 while(!kbhit());                                         /*按键退出*/
 closegraph();                /*关闭图形模式*/
}


/*-----------------------------3D界面------------------------------------------------*/
void Drawwin(int x,int y,int l,int w,int sta)
{

 setfillstyle(1,LIGHTGRAY);
 bar(x+1,y+1,x+l-1,y+w-1);


 setcolor((sta==ON)?WHITE:DARKGRAY);
 moveto(x,y+w);
 lineto(x,y);
 lineto(x+l,y);

 setcolor((sta==OFF)?WHITE:DARKGRAY);
 moveto(x,y+w);
 lineto(x+l,y+w);
 lineto(x+l,y);

}

/*-------------------------------文件读入-----------------------------------------*/
void Load()
{

 int i,tem=0;
 FILE* fp;

 setcolor(RED);
 outtextxy(365,265,"Load......");
 setfillstyle(1,GREEN);
 bar(351,280,498,290);

 if((fp=fopen("sum.dat","rb"))==NULL)    /*打开sum[0]文件,无,建立*/
 {
  fp=fopen("sum.dat","wb");
  sum[0]=0;
  fwrite(&sum,sizeof(sum[0]),1,fp);
  fp=fopen("sum.dat","rb");
 }
 fread(&sum[0],sizeof(sum),1,fp);
 fclose(fp);

 if((fp=fopen("TBS.dat","rb"))==NULL)    /*打开TBS文件,无,建立*/
 {
  fp=fopen("TBS.dat","wb");
  fp=fopen("TBS.dat","rb");
 }

 for(i=0;i<147;i++)
 {
  setfillstyle(1,LIGHTGREEN);
  bar(351,280,351+i,290);
  delay(1000+tem*100);
  if(tem<sum[0])
  {
   fread(&msg[tem],sizeof(msg),1,fp);  /*初始化数据*/
   tem++;
  }
  }
 fclose(fp);
 setfillstyle(1,LIGHTGRAY);
 bar(351,260,498,290);
 settextstyle(0,0,1);

 setcolor(RED);
 outtextxy(375,260,"Press any key!");
 while(!kbhit());

}
/*--------------------------------输入密码---------------------------------*/
void Paswrd()
{
 char *passwrd,*Right="handy";
 char temp[9];
 int i=0;

 Move;                    /*换行*/

 printf("                     Thank you for using this system!\n\n");
 passwrd=getpass("                      Input a password (Not show):");
 strcpy(temp,passwrd);

 while(1)
 {
  Move;

  if(strcmp(temp,Right)!=0)
  {
   i++;
   clrscr();
   Move;
   passwrd=getpass("                         Worry!Input again:");
   strcpy(temp,passwrd);
  }
  else
  {
   clrscr();
   break;
  }
  clrscr();
  if(i==3)
  {
   Move;
   printf("                    Sorry!You have enter three times password!\n");
   printf("                         Press any key!");
   getch();
   exit(0);
  }


 }

}

/*-------------------------------核心算法----------------------------------*/
void Kernel()
{

 char Key;                  /*记录按键*/
 int page=1,i;
 FILE *fp;
 Draw();                   /*画图*/
 buffer=(void *)malloc(2*80*23);
 gettext(1,1,80,23,buffer);             /*记录画面*/
 buff=(void *)malloc(2*80*2);
 gettext(1,23,80,23,buff);
 if(sum[0]%19==0&&sum[0]!=0)            /*计算总页数*/
  pg=sum[0]/19;                /*刚好满页*/
 else
  pg=sum[0]/19+1;               /*不够一页,当一页*/

 SHOW(page,ON);                 /*显示信息,ON为msg,OFF为排序用的*/
 while(1)                   /*进入循环*/
 {
  SHOW(page,ON);
  Showms(page);


  while(!kbhit());                 /*获取按键*/
  Key=getch();

  switch(Key)
  {
   case A:page=ADD();break;
   case D:DELETE();break;
   case S:SEARCH();break;
   case O:SORT();break;
   case E:EDIT();break;
   case H:HELP();break;
   case Pageup:page=PAGEUP(page,ON);break;
   case Pagedm:page=PAGEDM(page,ON);break;
   case ESC:
    fp=fopen("TBS.dat","wb");
    for(i=0;i<sum[0];i++)
     fwrite(&msg[i],sizeof(Message),1,fp);
    fclose(fp);
    free(buffer);
    free(buff);
    clrscr();
    exit(0);
    break;
  }

  }


}

/*----------------------------文本模式下的画面----------------------------*/
void Draw()
{
 int x,y,i,l;
 textmode(C80);
   textbackground(BLACK);
 window(1,1,80,23);
 textbackground(WHITE);
 window(1,24,80,24);
 clrscr();


 for(i=0;i<6;i++)
 {
  x=wherex();
  y=wherey();

  textcolor(BLACK);
  cprintf("%s",f[i]);
  l=strlen(f[i]);
  gotoxy(x,y);
  textcolor(RED);
  if(i==4)
  {
   gotoxy(x+1,y);
   cprintf("%s",red[i]);
  }
  else
   cprintf("%s",red[i]);
  x=x+l+8;
  gotoxy(x,y);
 }
 textbackground(BLACK);
 window(1,1,80,23);
 Win(1,1,78,21);

 textcolor(YELLOW);
 gotoxy(7,2);
 cprintf("Name");
 gotoxy(22,2);
 cprintf("Telphone");
 gotoxy(43,2);
 cprintf("QQ");
 gotoxy(60,2);
 cprintf("Workplace");
 textcolor(WHITE);


}
/*---------------------------文本模式下的作图-------------------------------*/
void Win(int x,int y,int l,int w)
{
 int i,j;
 gotoxy(x,y);
 putch(213);
 for(j=0;j<2;j++)
 {
  for(i=0;i<15;i++)       putch(205);
  putch(209);
 }
 for(i=0;i<20;i++) putch(205);
 putch(209);
 for(i=0;i<25;i++) putch(205);
 putch(184);

 for(i=0;i<20;i++)
 {
  gotoxy(x,y+1+i);
  putch(179);
  gotoxy(17,y+1+i);
  putch(179);
  gotoxy(33,y+1+i);
  putch(179);
  gotoxy(54,y+1+i);
  putch(179);
  gotoxy(x+l+1,y+1+i);
  putch(179);
 }

 gotoxy(x,y+w);
 putch(192);
 for(j=0;j<2;j++)
 {
  for(i=0;i<15;i++)       putch(196);
  putch(193);
 }
 for(i=0;i<20;i++) putch(196);
 putch(193);
 for(i=0;i<25;i++) putch(196);
   putch(217);
 textcolor(WHITE);
}

/*--------------------------------显示帮助信息-----------------------------*/
void HELP()
{
 void *buf;
 int i;

 buf=(void *)malloc(2*80*24);
 gettext(1,1,80,23,buf);
 puttext(1,1,80,23,buffer);

 textcolor(YELLOW);
 textbackground(BLUE);
 for(i=0;i<11;i++)
 {
  gotoxy(27,7+i);
  cprintf("%s",Hel[i]);
 }

⌨️ 快捷键说明

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