C语言人事管理附加流程图Word格式文档下载.docx
《C语言人事管理附加流程图Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言人事管理附加流程图Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
/*为头结点申请空间*/
Last=First;
/*将尾指针指向头结点*/
First->
prior=Last;
/*设置头结点的前驱指针*/
Last->
next=First;
/*设置头结点的后继指针*/
p=First;
/*设置当前记录指针为头结点*/
}
/*创建教师信息循环双链表*/
voidcreate()
intunit,flag=0;
floattemp;
TEACHER*info;
/*新增结点*/
init();
for(;
;
)
{
if(flag==1)break;
/*标志为1,不再输入*/
clrscr();
/*清屏*/
printf("
Pleaseenterteacherinfomation\n"
);
input@endenter\n"
info=(TEACHER*)malloc(sizeof(TEACHER));
/*为新增结点申请空间*/
if(!
info)/*没有空间出错处理*/
\noutofmemory"
exit(0);
}
No:
"
/*开始提示输入*/
scanf("
%s"
info->
no);
if(info->
no[0]=='
@'
)/*输入@结束输入*/
flag=1;
break;
Name:
name);
Sex:
sex);
Profess:
profess);
Dept:
dept);
Class:
class);
Workload:
%f"
&
temp);
info->
workload=temp;
if(strcmp(info->
profess,"
prof"
))unit=25;
/*教授*/
aprof"
))unit=20;
/*副教授*/
lect"
))unit=15;
/*讲师*/
ass"
))unit=10;
/*助教*/
lessonf=unit*info->
workload;
/*根据职称计算代课费*/
next=Last->
next;
/*新插入结点插在表末尾*/
/*新结点的前驱为原来的尾结点*/
next=info;
/*原来尾结点的后继为新结点*/
Last=info;
/*新的尾结点为新结点*/
/*头结点的前驱为尾指针*/
return;
/*显示第一条记录*/
voidfirstr()
if(First==Last)return;
clear();
p=First->
print(p);
/*显示最后一条记录*/
voidlastr()
p=Last;
/*显示前一条记录*/
voidpriorr()
if(First==Last)
if(p->
prior!
=First)
p=p->
prior;
else
/*显示下一条记录*/
voidnextr()
if(p==Last)
/*从文件读数据*/
voidload()
TEACHER*p1;
FILE*fp;
if((fp=fopen("
data.txt"
"
rb"
))==NULL)
cannotopenfile\n"
while(First->
next!
=First)/*如果当前表不空,删除当前表*/
p1=First->
next=p1->
free(p1);
free(First);
First=(TEACHER*)malloc(sizeof(TEACHER));
/*创建头结点*/
First)
outofmemory!
\n"
while(!
feof(fp))/*当文件不为空时读数据*/
p1=(TEACHER*)malloc(sizeof(TEACHER));
p1)
if(1!
=fread(p1,sizeof(TEACHER),1,fp))
break;
/*读数据*/
p1->
/*将新读出的数据链在当前表尾*/
next=p1;
Last=Last->
fclose(fp);
/*关闭文件*/
/*保存数据到磁盘文件*/
voidsave()
/*定义指向文件的指针*/
/*定义移动指针*/
wb"
))==NULL)/*为输出打开一个文本文件,如没有则建立*/
/*如不能打开文件,显示提示信息,结束程序*/
/*返回*/
p1=First;
/*移动指针从头指针开始*/
while(p1->
=First)/*如p1不为空*/
fwrite(p1->
next,sizeof(TEACHER),1,fp);
/*写入一条记录*/
p1=p1->
/*指针后移,处理下一条记录*/
/*删除记录*/
voiddelete()
/*表为空*/
if(p==First)/*p为头结点*/
if(p==Last)/*p为尾结点*/
Last=p->
p1=p;
/*一般情况*/
prior->
next->
prior=p1->
/*输出记录*/
voidprint(TEACHER*p)
intx1=70,y1=100;
charstr[20];
outtextxy(x1+110,y1+75,p->
outtextxy(x1+360,y1+75,p->
outtextxy(x1+110,y1+105,p->
outtextxy(x1+360,y1+105,p->
outtextxy(x1+110,y1+135,p->
outtextxy(x1+360,y1+135,p->
sprintf(str,"
p->
workload);
outtextxy(x1+110,y1+165,str);
lessonf);
outtextxy(x1+360,y1+165,str);
/*****清除界面显示信息******/
voidclear()
intx1=70,y1=100,m,n;
for(m=0;
m<
4;
m++)
for(n=0;
n<
2;
n++)
setfillstyle(1,WHITE);
/*白色覆盖原有信息*/
bar(x1+n*250+100,y1+50+m*30+20,x1+n*250+200,y1+50+m*30+40);
/*sort排序函数*/
voidsort()
TEACHER*p0,*p00,*p1,*p11,*templast;
if(First->
next==First||First->
next==First)return;
p00=First;
/*作排好序表的表头和第一个结点*/
p0=First->
p1=p0->
prior=p0;
p0->
templast=p0;
while(p1!
=First)/*当p1没有转回到表头时*/
p11=p1;
/*将p11作为待插入结点*/
/*p1指向下一个待排序结点*/
/*从头结点开始寻找插入位置*/
p0=p00->
/*p0是p00的后继*/
while(p0!
=First&
&
p11->
workload>
p0->
workload)
p00=p0;
/*当新插入结点比当前表结点大时,指针后移*/
p0=p0->
if(p0==First)/*如果p0移到了头结点*/
p11->
next=p00->
prior=p00;
p00->
next=p11;
prior=p11;
templast=p11;
else/*新插入结点介于p00和p0之间*/
next=p0;
Last=templast;
/*设置尾指针*/
/*设置当前记录指针*/
流程图: