📄 gooda.c
字号:
{
i=0; /*记录一页的输出行数*/
clrscr(); /*清屏*/
printf("\n\n\n"); /*换行三次*/
printf("*************************************SALARY***********************************\n"); /*输出大标题*/
printf("|nO | name | jbgz | koukuan | yfgz | shuijin | sfgz |\n"); /*输出字段标题*/
printf("|----------|---------------|---------|---------|---------|---------|---------|\n"); /*输出水平线*/
while(p!=NULL) /*当p不为空时*/
{
printf("|%-10s|%-15s|%9.2f|%9.2f|%9.2f|%9.2f|%9.2f|\n",
p->no,p->name,p->jbgz,p->koukuan,p->yfgz,p->shuijin,p->sfgz);
p=p->next; /*指针后移*/
i++; /*输出行数加1 */
if(i%10==0)
break; /*如果满10行,跳出内循环*/
}
printf("****************************************end***********************************\n"); /*输出本页的结束行*/
printf("Press any key congtinue...\n");
getch(); /*输出一页暂停一下,压任意键继续*/
} /*返回到外循环,准备下一页的输出*/
}
/*输出指针所指结点信息*/
void print(SALARY *p)
{
if(p) /*如果指针不为空,则显示信息*/
{
clrscr(); /*清屏*/
printf("\n\n\n"); /*换行*/
printf("************************************SALARY************************************\n"); /*输出标题信息*/
printf("|no | name | jbgz | koukuan| yfgz | shuijin | sfgz |\n"); /*输出字段标题*/
printf("|----------|---------------|---------|---------|---------|---------|---------|\n"); /*输出分割线*/
printf("|%-10s|%-15s|%9.2f|%9.2f|%9.2f|%9.2f|%9.2f|\n", p->no,p->name,
p->jbgz,p->koukuan,p->yfgz,p->shuijin,p->sfgz);/*输出结点信息*/
printf("***************************************end***************************** *******\n"); /*输出结束标记*/
}
}
/*计算实发工资*/
void calc()
{
int x; /*行坐标*/
int i=0; /*记录数*/
float temp; /*临时变量扣款*/
SALARY *p; /*移动指针*/
clrscr(); /*清屏*/
p=First; /*从头指针开始*/
while(p!=NULL) /*当p不为空时,也就是有记录时,外循环控制换页*/
{
x=0;
clrscr();
gotoxy(1,3);
printf("***************************gongziguanli************************************"); /*输出标题*/
gotoxy(1,5);
printf("|--------------------------------------------------------------------------|");
gotoxy(1,6);/*下面输出字段标题*/
printf("| no | name | jbgz | koukuan | yfgz |shuijin | sfgz |");
while(p!=NULL) /*当p不为空时,也就是有记录时,内循环控制处理9条*/
{
gotoxy(1,7+x);
printf("|----------|----------------|--------|----------|--------|--------|--------|");
gotoxy(1,8+x);printf("|");
gotoxy(12,8+x);printf("|");
gotoxy(29,8+x);printf("|");
gotoxy(38,8+x);printf("|");
gotoxy(49,8+x);printf("|");
gotoxy(58,8+x);printf("|");
gotoxy(67,8+x);printf("|");
gotoxy(76,8+x);printf("|");
gotoxy(2,8+x);
printf("%-10s",p->no); /*输出编号*/
gotoxy(13,8+x);
printf("%-15s",p->name); /*输出姓名*/
gotoxy(30,8+x);
printf("%.2f",p->jbgz); /*输出基本工资*/
gotoxy(39,8+x);
scanf("%f",&temp); /*输入扣款*/
p->koukuan=temp; /*扣款字段赋值*/
p->yfgz=p->jbgz-p->koukuan; /*计算应发工资=基本工资-扣款*/
gotoxy(50,8+x);
printf("%.2f",p->yfgz); /*输出应发工资*/
gotoxy(59,8+x);
p->shuijin=(p->yfgz-1000)*fax(p->yfgz); /*否则按税率计算税金*/
printf("%.2f",p->shuijin); /*输出税金*/
gotoxy(68,8+x);
p->sfgz=p->yfgz-p->shuijin; /*计算实发工资*/
printf("%-8.2f",p->sfgz); /*输出实发工资*/
x+=2; /*行坐标下移两行*/
i++; /*记录数加1*/
if(i%9==0)break; /*记录数超过9条,跳出内循环*/
p=p->next; /*指针后移,处理下一条*/
}
gotoxy(1,7+x);
printf("|----------|----------------|--------|----------|--------|--------|--------|\n"); /*输出结束行*/
printf("Press any key congtinue...\n");
getch();
}
}
/*根据应发工资,计算税率*/
float fax(float x)
{
float f1;
if(x<1000)
return 0; /*小于1000,返回0*/
switch((int)(x/1000))
{
case 1:f1=0.05;break; /*1000~1999,返回0.05*/
case 2:f1=0.1;break; /*2000~2999,返回0.1*/
case 3:f1=0.15;break; /*3000~3999,返回0.15*/
case 4:f1=0.2;break; /*4000~4999,返回0.2*/
default:f1=0.3;break; /*5000以上,返回0.3*/
}
return f1;
}
/*按编号查找记录*/
SALARY *find(char *no)
{
SALARY *p; /*定义移动指针*/
p=First; /*从头指针开始*/
while(p) /*当p不为空时*/
{
if(!strcmp(no,p->no))
return p; /*比较相等,查找成功,返回指针*/
p=p->next; /*不相等指针后移*/
}
printf("not found\n"); /*没有找到*/
return NULL; /*返回为空指针*/
}
/*删除结点*/
void delete()
{
SALARY *p; /*定义临时变量,p指向要删除的结点p*/
char s[11]; /*要删除结点的编号*/
clrscr(); /*清屏*/
printf("please deleted no\n"); /*提示输入信息*/
scanf("%s",s); /*输入要删除的职工编号*/
if((p=find(s))!=NULL) /*调用查找函数,如果找到做下面的处理*/
{
if(First==p) /*如果是第一个结点*/
{
First=p->next; /*将头指针指向其后继结点*/
if(First) /*如头指针不为空*/
First->prior=NULL; /*将头结点的前驱设为空*/
else
Last=NULL; /*否则头为空,尾也为空*/
}
else /*删除的不是第一个结点*/
{
p->prior->next=p->next; /*p的前驱的后继指向p原来的后继*/
if(p!=Last) /*如果p不是最后个结点*/
p->next->prior=p->prior; /*p后继的前驱指向p原来的前驱*/
else
Last=p->prior;/*如p是最后一个结点,修改尾指针为p的前驱*/
}
free(p); /*删除结点后,不要忘记释放空间*/
printf("\n have deleted %s SALARY\n",s);
printf("Don't forget save\n");
}
}
/*按姓名查找结点*/
void search()
{
SALARY *p; /*移动指针*/
char s[15]; /*保存姓名*/
clrscr(); /*清屏*/
printf("please enter name for search\n"); /*提示输入*/
scanf("%s",s); /*输入要查找人的姓名*/
p=First; /*移动指针从头指针开始*/
while(strcmp(p->name,s)&&p!=NULL) /*做比较判断*/
p=p->next; /*没找到,指针后移继续查找*/
if(p==NULL) /*指针为空,说明没有找到*/
printf("\nlist no %s SALARY\n",s); /*显示没找到信息*/
else
{
printf("\n\n"); /*换行*/
print(p); /*查找成功,调用输出函数输出指针p所指记录*/
}
}
/*保存文件*/
void save()
{
FILE *fp; /*定义指向文件的指针*/
SALARY *p; /*定义移动指针*/
char outfile[10]; /*保存输出文件名*/
clrscr();/*清屏*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n");/*提示输入文件名格式信息*/
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件*/
{
printf("can not open file\n");
return; /*返回*/
}
printf("\nSaving file......\n");
p=First; /*移动指针从头指针开始*/
while(p!=NULL) /*如p不为空*/
{
fwrite(p,sizeof(SALARY),1,fp); /*写入一条记录*/
p=p->next; /*指针后移,处理下一条记录*/
}
fclose(fp); /*关闭文件*/
printf("-----save success!!-----\n");/*显示保存成功*/
}
void modify()
{
SALARY *p;
char d[11];
clrscr(); /*清屏*/
printf("pleae enter the no. of the person you want to modify:");
scanf("%s",d);
p=First;
while(p)
{
if(!strcmp(d,p->no))
{
printf("pleae enter the no. you want to modify:");
scanf("%s",p->no);
printf("pleae enter the name. you want to modify:");
scanf("%s",p->name);
printf("pleae enter the salary you want to modify:");
scanf("%f",&p->jbgz);
return;
}
else
p=p->next;
}
printf("\nno this person.\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -