C语言课程设计-工资管理系统 第4页
C语言课程设计
{
printf("\nout of memory"); /*如没有得到空间,内存溢出*/
exit(0); /*退出程序*/
}
info->next=NULL; /*新结点的后继为空*/
info->prior=NULL; /*新结点的前驱为空*/
gotoxy(1,8);printf("|");
gotoxy(12,8);printf("|");
gotoxy(29,8);printf("|");
gotoxy(38,8);printf("|");
gotoxy(2,8);
inputs(info->no,10); /*输入新结点的编号,并校验*/
gotoxy(13,8);
inputs(info->name,14); /*输入新结点的姓名,并校验*/
gotoxy(30,8);
scanf("%f",&temp); /*输入基本工资*/
info->jbgz=temp; /*给基本工资字段赋值*/
info->koukuan=0; /*扣款初始为0*/
info->yfgz=0; /*应发工资初始为0*/
info->shuijin=0; /*税金初始为0*/
info->sfgz=0; /*实发工资初始为0*/
printf("|----------|----------------|--------|");
p=First; /*移动指针从头指针开始*/
while(strcmp(p->no,s)&&p!=NULL) /*查找结点确定插入位置*/
p=p->next; /*指针后移,继续查找*/
if(p==NULL) /*如p为空*/
if(p==First) /*如p为头指针,说明链表为空*/
{
First=info; /*新结点为头指针*/
First->prior=NULL; /*头结点的前驱为空*/
Last=First; /*唯一结点,尾指针等于头指针*/
}
else /*新结点插在尾部*/
{
Last->next=info;
info->prior=Last;
Last=info; /*尾指针指向新结点*/
}
else
if(p==First) /*p不为空,但p为头指针,新结点插在第一个结点位置*/
{
info->prior=NULL; /*新结点的前驱为空*/
info->next=p; /*新结点的后继为p*/
p->prior=info; /*p的前驱是新结点*/
First=info; /*修改头指针指向新结点*/
}
else /*新结点插入在中间某一个位置p之前*/
{
info->next=p; /*新结点的后继是p*/
info->prior= p->prior; /*新结点的前驱是p的前驱*/
p->prior->next=info; /*p的前驱的后继是新结点*/
p->prior=info; /*p的前驱是新结点*/
}
printf("\n\n\n ----have inserted %s SALARY----\n",info->name);
printf("\n---Don't forget save---\n"); /*提醒调用保存文件存盘*/
}
/*保存文件*/
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 sort()
{
SALARY *p0,*p00,*p1,*p11,*p2; /*定义临时指针*/
int i=1; /*统计当前排第几个结点*/
clrscr(); /*清屏*/
printf("\n\n start sort....\n"); /*开始排序*/
p1=p11=p2=First;
while(p1!=NULL) /*当p1不为空时*/
{
p0=p1; /*待比较结点从p1开始*/
p2=p1; /*p2从当前待排序位置开始*/
while(p2->next!=NULL) /*p2的后继不为空时*/
{
if(p0->sfgz>p2->next->sfgz) /*找当前最小结点*/
{
p00=p2; /*找到当前最小结点记录其前驱指针*/
p0=p2->next; /*记录当前最小值结点的指针p0*/
}
p2=p2->next; /*指针后移*/
}
Last=p0; /*当前最小结点为尾结点*/
if(p1!=p0) /*判断最小结点是否是当前排序位置,不是则作指针修改*/
{
p00->next=p0->next; /*将p00的后继指向p0的后继*/
p0->next->prior=p00; /*p0的后继的前驱为p00*/
p0->next=p1; /*p0的后继指向下个排序位置p1*/
p1->prior=p0; /*p1的前驱为p0*/
if(i==1)
{
First=p0; /*作头指针*/
First->prior=NULL; /*头指针的前驱为空*/
}
else /*不是第一个结点*/
{
p11->next=p0; /*p11的后继指向p0*/
p0->prior=p11; /*p0的前驱指向p11*/
}
p11=p1=p0; /*因p0是排好序的最后一个结点,p1是下一个将要排序的位置,所以将p0赋值给p1和p11*/
}
i++; /*排好序的结点数加1*/
p1=p1->next; /*p1后移指向下一个待排序位置*/
}
printf("sort sucess!!!\n"); /*输出排序成功*/
}
/*初始化函数*/
void init()
{
First=NULL;
Last=NULL;
}
/*输入数据,创建双链表*/
void create()
{
751com.cn
SALARY *info,*p; /*定义临时变量*/
if(First!=NULL)
init(); /*如果头指针为空,调用初始化函数*/
p=First; /*从头指针开始*/
for(;;)
{
if(flag==1)
break; /*如果flag=1,结束输入*/
i=0;
x=0; /*确定移动的行坐标*/
clrscr(); /*清屏*/
gotoxy(1,3);
printf("*************gongziguanli*************");/*输出标题*/
gotoxy(1,4);
printf(" --Enter @ end--"); /*提示输入@结束*/
gotoxy(1,5);
printf("|------------------------------------|");/*输出表格的起始线*/
gotoxy(1,6);
printf("| no | name | jbgz |");/*输出字段标题,注意空格数*/
for(;;)
{
gotoxy(1,7+x);
printf("|----------|----------------|--------|");/*输出表格的水平线*/
info=(SALARY *)malloc(sizeof(SALARY)); /*申请一个记录空间*/
if(!info)
{
printf("\nout of memory");/*如没有得到空间,输出内存溢出信息*/
exit(0); /*退出程序*/
上一页 [1] [2] [3] [4] [5] [6] 下一页