📄 cmain.c
字号:
}
}
}
/*排序函数*/
void mysort(void)
{
char choice[2];
WORKERTYPE *temp;
int i,j,p;
mylist(workersum,pworker);
do
{
setcolor(LIGHTBLUE);
outtextxy(310,300,"Press ESC to EXIT...");
hz(30,13,15,1,LIGHTGREEN,
"请选择:0 1 2 3 4 ");
do
{
setcolor(RED);
rectangle(268,28,278,39);
setfillstyle(SOLID_FILL,BK_COLOR);
bar(269,29,277,38);
ginput(270,30,1,0,BK_COLOR,WHITE,choice);
}while(*choice>'4'||*choice<'0');
*choice-='0';
for (i=0;i<workersum-1;i++)
{/*选择排序*/
p=i;
for (j=i;j<workersum;j++)
if(p_way[*choice](pworker[p],pworker[j])>0)
p=j;
if (p!=i)
{
temp=pworker[i];
pworker[i]=pworker[p];
pworker[p]=temp;
}
}
setcolor(RED);
mylist(workersum,pworker);
outtextxy(310,300,"Press ESC to EXIT...");
}while(KB_ESC!=keyreg());
setcolor(BK_COLOR);
}
/*查找函数*/
void myfind(void)
{
do
{
int i,counter=0;
WORKERTYPE *found[MAX_WORKERS]={'\0'};
char choice[2];
char temp[30],yn;
WORKERTYPE tempwork;
setfillstyle(SOLID_FILL,BK_COLOR);
bar(74,50,500,320);
setcolor(LIGHTBLUE);
outtextxy(310,300,"Press ESC to EXIT...");
hz(30,13,15,1,LIGHTGREEN,
"请选择:0 1 2 3 4 ");
hz(75,30,15,1,YELLOW,
"职工号 姓名 性别 年龄 月薪 ");
do
{
setcolor(RED);
rectangle(268,28,278,39);
setfillstyle(SOLID_FILL,BK_COLOR);
bar(269,29,277,38);
ginput(270,30,1,0,BK_COLOR,WHITE,choice);
}while(*choice>'4'||*choice<'0');
*choice-='0';
setfillstyle(SOLID_FILL,YELLOW);
bar(BAR_LEFT,BAR_TOP,BAR_RIGHT,BAR_BOTTOM);
setcolor(RED);
switch (*choice)
{
case 0:
do
{
hz(HINT_LEFT,HINT_TOP,15,1,RED," 请输入职工号(最长6位):");
rectangle(INPUT_MID-6*4-2,INPUT_TOP-2,INPUT_MID+6*4+1,INPUT_TOP+9);
ginput(INPUT_MID-6*4,INPUT_TOP,6,0,YELLOW,TEXT_COLOR,temp);
bar(BAR_LEFT,BAR_TOP,BAR_RIGHT,BAR_BOTTOM);
}while(!strlen(temp));
tempwork.num=atol(temp);
break;
case 1:
do
{
hz(HINT_LEFT,HINT_TOP,15,1,RED," 请输入职工姓名:");
rectangle(INPUT_MID-19*4-2,INPUT_TOP-2,INPUT_MID+19*4+1,INPUT_TOP+9);
ginput(INPUT_MID-19*4,INPUT_TOP,19,1,YELLOW,TEXT_COLOR,temp);
bar(BAR_LEFT,BAR_TOP,BAR_RIGHT,BAR_BOTTOM);
}while(!strlen(temp));
strcpy(tempwork.name,temp);
break;
case 2:
do
{
hz(HINT_LEFT,HINT_TOP,15,1,RED," 请输入职工性别(m/f):");
rectangle(INPUT_MID-4-2,INPUT_TOP-2,INPUT_MID+4+1,INPUT_TOP+9);
ginput(INPUT_MID-4,INPUT_TOP,1,1,YELLOW,TEXT_COLOR,temp);
bar(BAR_LEFT,BAR_TOP,BAR_RIGHT,BAR_BOTTOM);
}while(*temp!='m'&&*temp!='M'&&*temp!='f'&&*temp!='F');
tempwork.sex=toupper(*temp);
break;
case 3:
do
{
hz(HINT_LEFT,HINT_TOP,15,1,RED," 请输入职工年龄:");
rectangle(INPUT_MID-2*4-2,INPUT_TOP-2,INPUT_MID+2*4+1,INPUT_TOP+9);
ginput(INPUT_MID-2*4,INPUT_TOP,2,0,YELLOW,TEXT_COLOR,temp);
bar(BAR_LEFT,BAR_TOP,BAR_RIGHT,BAR_BOTTOM);
}while(atoi(temp)>55||atoi(temp)<18);
tempwork.age=atoi(temp);
break;
case 4:
do
{
hz(HINT_LEFT,HINT_TOP,15,1,RED," 请输入职工月薪:");
rectangle(INPUT_MID-5*4-2,INPUT_TOP-2,INPUT_MID+5*4+1,INPUT_TOP+9);
ginput(INPUT_MID-5*4,INPUT_TOP,5,0,YELLOW,TEXT_COLOR,temp);
bar(BAR_LEFT,BAR_TOP,BAR_RIGHT,BAR_BOTTOM);
}while(atol(temp)<200);
tempwork.salary=atol(temp);
}
for (i=0;i<workersum;i++)
{
if(p_way[*choice](pworker[i],&tempwork)==0)
{
found[counter]=pworker[i];
counter++;
}
}
setcolor(RED);
mylist(counter,found);
outtextxy(310,300,"Press ESC to EXIT...");
}while(KB_ESC!=keyreg());
setcolor(BK_COLOR);
}
/*删除函数*/
void mydel(void)
{
char temp[7];
int i,j;
WORKERTYPE tempwork;
setfillstyle(SOLID_FILL,YELLOW);
bar(BAR_LEFT,BAR_TOP,BAR_RIGHT,BAR_BOTTOM);
setcolor(RED);
do
{
hz(HINT_LEFT,HINT_TOP,15,1,RED," 请输入职工号(最长6位):");
rectangle(INPUT_MID-6*4-2,INPUT_TOP-2,INPUT_MID+6*4+1,INPUT_TOP+9);
ginput(INPUT_MID-6*4,INPUT_TOP,6,0,YELLOW,TEXT_COLOR,temp);
bar(BAR_LEFT,BAR_TOP,BAR_RIGHT,BAR_BOTTOM);
}while(!strlen(temp));
tempwork.num=atol(temp);/*得到职工号*/
for (i=0;i<workersum;i++)
if(p_way[0](pworker[i],&tempwork)==0)
break;
if(i==workersum)
{
/*没找到*/
hz(180,HINT_TOP+20,15,1,RED," 没找到该职工!");
keyreg();
return;
}
/*找到了,释放资源*/
free((void*)pworker[i]);
/*依次前移*/
for (;i<workersum-1;i++)
{
pworker[i]=pworker[i+1];
}
/*最末一个指针置零*/
pworker[--workersum]=NULL;
savedflag=0;
hz(180,HINT_TOP+20,15,1,RED, " 删除成功!");
setcolor(BK_COLOR);
keyreg();
}
/*图表函数*/
void mychart(void)
{
int i,old,part[8]={0};
char temp[10]={0},itemhint[8][6]={"18-19","20-24","25-29","30-34",
"35-39","40-44","45-49","50-55"};
float cur=0,next;
hz(225,15,15,1,YELLOW,"职工年龄分布图");
for (i=0;i<workersum;i++)
{
old=pworker[i]->age;
if (old<20)
part[0]++;
else if (old<25)
part[1]++;
else if (old<30)
part[2]++;
else if (old<35)
part[3]++;
else if (old<40)
part[4]++;
else if (old<45)
part[5]++;
else if (old<50)
part[6]++;
else
part[7]++;
}
for(i=0;i<8;i++)
{
next=cur+part[i];
setcolor(BK_COLOR);
setfillstyle(SOLID_FILL,i+1);
pieslice(200,170,cur/workersum*360,next/workersum*360,90);
fillellipse(420,55+30*i,13,8);
sprintf(temp,"%.2f%",part[i]/(double)workersum*100);
setcolor(WHITE);
outtextxy(180+125*cos(PI*(next+cur)/workersum),
170-125*sin(PI*(next+cur)/workersum),temp);
outtextxy(450,52+30*i,itemhint+i);
cur=next;
}
setcolor(BK_COLOR);
keyreg();
}
/*加载函数*/
void myload(void)
{
FILE *fpinfo;
WORKERTYPE temp;
int i,errflag=0,eofflag;
pworker[0]=(void*)NULL;
workersum=0;
if((fpinfo=fopen("workinfo.dat","rb"))==NULL)
errflag=1;
else
{
for(i=0;i<MAX_WORKERS;i++)
if(fread((void*)&temp,sizeof(WORKERTYPE),1,fpinfo)!=1)
break;
else
{
pworker[i]=malloc(sizeof(WORKERTYPE));
memcpy((void*)pworker[i],(void*)&temp,sizeof(WORKERTYPE));
workersum++;
}
}
if(errflag!=1)
fclose(fpinfo);
if(errflag==0&&workersum!=0)
hz(HINT_LEFT,HINT_TOP,15,1,YELLOW," 载入成功:)");
else
hz(HINT_LEFT,HINT_TOP,15,1,YELLOW," 载入失败:(");
savedflag=1;
setcolor(BK_COLOR);
keyreg();
}
/*保存函数*/
void mysave(void)
{
FILE *fpinfo;
int i,errflag=0;
if (workersum==0)/*没有数据不保存*/
{
hz(HINT_LEFT,HINT_TOP,15,1,RED," 没有数据");
keyreg();
return;
}
if((fpinfo=fopen("workinfo.dat","wb"))==NULL)
{
errflag=1;
}
else
{
for(i=0;i<workersum;i++)
if(fwrite((void*)pworker[i],sizeof(WORKERTYPE),1,fpinfo)!=1)
{
errflag=2;
break;
}
}
if(errflag!=1)/*因为errflag==1时,是因为没能打开文件*/
fclose(fpinfo);
setcolor(LIGHTRED);
if(errflag==0)
{
hz(HINT_LEFT,HINT_TOP,15,1,YELLOW," 保存成功:)");
savedflag=1;/*数据已存*/
}
else
hz(HINT_LEFT,HINT_TOP,15,1,YELLOW," 保存失败:(");
setcolor(BK_COLOR);
keyreg();
}
/*退出函数*/
void myexit(void)
{
/* exit program */
char yn;
int i;
hz(HINT_LEFT,HINT_TOP,15,1,LIGHTRED," 确定退出?(y/n)");
yn=getch();
if (yn=='y' || yn=='Y')
{
clearviewport();
if(savedflag==0&&workersum!=0)/*有资料未存*/
{
hz(HINT_LEFT,HINT_TOP,15,1,LIGHTRED," 是否存盘?(y/n)");
yn=getch();
if(yn=='y' || yn=='Y')
{
clearviewport();
mysave();
}
}
for(i=0;i<workersum;i++)
free((void*)pworker[i]);/*释放所有动态申请的内存*/
close_child_viewport();
cleardevice();
bye();
sound(1000);/*响铃提示*/
delay(500);
nosound();
closehzk();
closegraph();
exit(1);
}
else
{
setcolor(BK_COLOR);
}
}
/********************************************************/
/*将按钮与函数挂钩的函数*/
void fuc_match_button(void)
{
button_fuc[0]=myinput;
button_fuc[1]=mysort;
button_fuc[2]=myfind;
button_fuc[3]=mydel;
button_fuc[4]=mychart;
button_fuc[5]=myload;
button_fuc[6]=mysave;
button_fuc[7]=myexit;
}
void main()
{
inithzk();
logo();
initgr();
fuc_match_button();
setbkcolor(BK_COLOR);
interface_draw();
setcolor(LIGHTGRAY);
while(1)
{
switch (keyreg())
{
case KB_LEFT:
case KB_UP:
cur_button_l(); /*当前按钮左移*/
break;
case KB_RIGHT:
case KB_DOWN:
case KB_TAB:
cur_button_r(); /*当前按钮右移*/
break;
case KB_ENTER:
buttonflat(cur_button,CUR_COLOR);/*按钮的处理*/
delay(4000);
button(cur_button,CUR_COLOR); /*按钮弹回*/
open_child_viewport(); /*开视口*/
button_fuc[cur_button](); /*执行程序*/
close_child_viewport(); /*关闭视口*/
break;
case KB_ESC:
open_child_viewport();
myexit();
close_child_viewport();
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -