📄 card.c
字号:
#include <csagb.h>
#include <rb_stdio.h>
#include <graph.h>
#include <Qgraph.h>
#include <rb_string.h>
#include <string.h>
#include <rb_math.h>
#include <rb_mem.h>
#define bgcolor RGB(24,15,13)
#define hicolor RGB(3,7,15)
#define lcnt 7
extern u32 _file_loc;
extern void card_set(char *M,u8 act);
typedef struct
{
char name[10];
s16 byear;
u8 bmon;
u8 bday;
char tel[16];
char qq[12];
char mail[26];
char adr[32];
char other[52];
} card;//名片结构体
void item_pro(char *item,int len)
{
int i=0;
while (item[i]!='\0' && item[i]!='#' && i<len) i++;
if (i>=len) i--;
item[i]='\0';
}
void get_card(card *crd,u32 loc)
{
int i;
char *temp=(char *)crd;
for (i=0;i<sizeof(card);i++) temp[i]=*(char *)(loc+i);
item_pro(crd->name,10);
item_pro(crd->tel,16);
item_pro(crd->qq,12);
item_pro(crd->mail,26);
item_pro(crd->adr,32);
item_pro(crd->other,52);
}
int open_card(u32 loc)
{
card head;
get_card(&head,loc);
head.name[3]='\0';
str_up(head.name);
if (strcmp(head.name,"CDR")!=0) return 0;
return head.byear;
}
void list_card(card *crd,int id,int type)
{
char *txt=crd->tel;
if (txt[0]=='\0') txt=crd->qq;
Q_box(31,28+16*id,209,41+16*id,(type?hicolor:bgcolor));
cwrite(34,30+16*id,0,crd->name);
cwrite(105,30+16*id,0,txt);
cwrite(33,29+16*id,RGB(30,30,30),crd->name);
cwrite(104,29+16*id,RGB(30,30,30),txt);
}
void card_to_text(card *crd,char *txt)
{
char temp[10];
txt[0]='\0';
if (crd->byear>1920)
{
str_cat(txt,"生日:");
num_to_str(crd->byear,temp);
str_cat(txt,temp);
str_cat(txt,"年");
num_to_str(crd->bmon,temp);
str_cat(txt,temp);
str_cat(txt,"月");
num_to_str(crd->bday,temp);
str_cat(txt,temp);
str_cat(txt,"日\n");
}
if (crd->tel[0]!='\0')
{
str_cat(txt,"电话:");
str_cat(txt,crd->tel);
str_cat(txt,"\n");
}
if (crd->qq[0]!='\0')
{
str_cat(txt,"QQ:");
str_cat(txt,crd->qq);
str_cat(txt,"\n");
}
if (crd->mail[0]!='\0')
{
str_cat(txt,"邮箱:");
str_cat(txt,crd->mail);
str_cat(txt,"\n");
}
if (crd->adr[0]!='\0')
{
str_cat(txt,"住址:");
str_cat(txt,crd->adr);
str_cat(txt,"\n");
}
if (crd->other[0]!='\0')
{
str_cat(txt,"备注:");
str_cat(txt,crd->other);
}
}
void show_card_mes(card *crd)
{
char txt[sizeof(card)+100];
char tit[100]="查看";
u16 *sav=(u16 *)new_malloc(54600);
save_scr(sav,49,4,231,151);
str_cat(tit,crd->name);
str_cat(tit,"的资料:");
Q_box(49,4,231,151,bgcolor);
r_box(50,5,230,150,RGB(30,30,30),0);
Q_box(51,6,229,20,hicolor);
cwrite(52,8,RGB(30,30,30),tit);
r_line(51,21,230,21,RGB(30,30,30),1);
card_to_text(crd,txt);
box_text(53,24,230,151,0,txt);
box_text(52,23,229,151,RGB(30,30,30),txt);
wait_key();
load_scr(sav,49,4,231,151);
new_free(sav);
}
void set_to_be_card()
{
card_set((char *)&_file_loc,1);
}
void card_main()
{
s16 cnt=0;
int i,j;
char path[80];
u32 loc=0;
u32 size;
int done=2;
int sel=0,old=0;
int bas=0;
int flag=1;
card cards[255];
card_set((char *)&loc,2);
cnt=open_card(loc);
if (cnt==0 || loc==0)
{
arlt("系统提示:","找不到名片薄或者名片薄没有记录!");
return;
}
for (i=0;i<cnt;i++) get_card(&cards[i],loc+(i+1)*sizeof(card));
Q_box(29,9,211,141,bgcolor);
r_box(30,10,210,140,RGB(30,30,30),0);
Q_box(31,11,209,25,hicolor);
cwrite(32,13,RGB(30,30,30),"通讯录");
while (1)
{
if (flag) {CS_ReadKey();flag=0;} else readkey();
if (CS_IsKeyDown(KEY_B)) return;
else if(CS_IsKeyDown(KEY_A)) show_card_mes(&cards[bas+sel]);
else if(CS_IsKeyDown(KEY_UP))
{
if (sel) {sel--;done=1;}
else if(bas) {bas--;done=2;}
}
else if(CS_IsKeyDown(KEY_DOWN))
{
if (sel+bas+1<cnt)
{
if (sel+1<lcnt) {sel++;done=1;}
else {bas++;done=2;}
}
}
else if(CS_IsKeyDown(KEY_R) || CS_IsKeyDown(KEY_RIGHT))
{
if (sel+bas+1+lcnt<cnt)
{
bas+=lcnt;
done=2;
}
else if(sel+bas+1<cnt)
{
bas=cnt-1;
sel=0;
done=2;
}
}
else if(CS_IsKeyDown(KEY_L) || CS_IsKeyDown(KEY_LEFT))
{
if (bas>=lcnt) {bas-=lcnt;done=2;}
else if(sel) {done=(bas?2:1);bas=0;sel=0;}
}
if (done==1)
{
done=0;
if (old!=sel) list_card(&cards[bas+old],old,0);
list_card(&cards[bas+sel],sel,1);
old=sel;
}
else if (done==2)
{
done=0;
for (i=0;i<lcnt;i++)
{
if (bas+i>=cnt) break;
list_card(&cards[bas+i],i,0);
}
for (j=i;j<lcnt;j++) Q_box(31,28+16*j,209,41+16*j,bgcolor);
list_card(&cards[bas+sel],sel,1);
old=sel;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -