C语言人事管理附加流程图.docx

上传人:b****5 文档编号:4376893 上传时间:2022-12-01 格式:DOCX 页数:14 大小:62.28KB
下载 相关 举报
C语言人事管理附加流程图.docx_第1页
第1页 / 共14页
C语言人事管理附加流程图.docx_第2页
第2页 / 共14页
C语言人事管理附加流程图.docx_第3页
第3页 / 共14页
C语言人事管理附加流程图.docx_第4页
第4页 / 共14页
C语言人事管理附加流程图.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言人事管理附加流程图.docx

《C语言人事管理附加流程图.docx》由会员分享,可在线阅读,更多相关《C语言人事管理附加流程图.docx(14页珍藏版)》请在冰豆网上搜索。

C语言人事管理附加流程图.docx

C语言人事管理附加流程图

  题目:

 

某高校主要人员有:

在职人员(行政人员,教师,一般员工),退休人员和临时工。

现在需要存储这些人员的人事档案信息,内容包括变好,姓名,性别,年龄,职务,职称,政治面貌,最高学历,任职时间,来院时间,人员类别。

其中人员编号唯一,不能重复。

 

(1)添加删除功能:

能根据学院人事的变动情况,添加删除记录

 

(2)查询功能:

能根据编号和姓名进行查询

 (3)编辑功能(高级):

根据查询对相应的记录进行修改并存储

 (4)统计功能:

 能根据多种参数进行人员的统计(在职人员,党员人数,女工人数,高学历高学历人员(硕士学位以上或者副教授以上)),统计要求同时显示被统计者的信息。

(5)排序功能:

按照年龄,来院时间进行排序。

(6)保存功能:

能对输入的数据进行相应的存储。

 

程序代码:

#include/*根据实际存放位置修改此路径*/

/*初始化双链表*/

voidinit()

{

First=(TEACHER*)malloc(sizeof(TEACHER));/*为头结点申请空间*/

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");

printf("input@endenter\n");

info=(TEACHER*)malloc(sizeof(TEACHER));/*为新增结点申请空间*/

if(!

info)/*没有空间出错处理*/

{

printf("\noutofmemory");

exit(0);

}

printf("No:

");/*开始提示输入*/

scanf("%s",info->no);

if(info->no[0]=='@')/*输入@结束输入*/

{

flag=1;break;}

printf("Name:

");

scanf("%s",info->name);

printf("Sex:

");

scanf("%s",info->sex);

printf("Profess:

");

scanf("%s",info->profess);

printf("Dept:

");

scanf("%s",info->dept);

printf("Class:

");

scanf("%s",info->class);

printf("Workload:

");

scanf("%f",&temp);

info->workload=temp;

if(strcmp(info->profess,"prof"))unit=25;/*教授*/

if(strcmp(info->profess,"aprof"))unit=20;/*副教授*/

if(strcmp(info->profess,"lect"))unit=15;/*讲师*/

if(strcmp(info->profess,"ass"))unit=10;/*助教*/

info->lessonf=unit*info->workload;/*根据职称计算代课费*/

info->next=Last->next;/*新插入结点插在表末尾*/

info->prior=Last;/*新结点的前驱为原来的尾结点*/

Last->next=info;/*原来尾结点的后继为新结点*/

Last=info;/*新的尾结点为新结点*/

First->prior=Last;/*头结点的前驱为尾指针*/

}

return;

}

/*显示第一条记录*/

voidfirstr()

{

if(First==Last)return;

clear();

p=First->next;

print(p);

}

/*显示最后一条记录*/

voidlastr()

{

if(First==Last)return;

clear();

p=Last;

print(p);

}

/*显示前一条记录*/

voidpriorr()

{

if(First==Last)

return;

if(p->prior!

=First)

p=p->prior;

else

p=Last;

clear();

print(p);

}

/*显示下一条记录*/

voidnextr()

{

if(First==Last)

return;

if(p==Last)

p=First->next;

else

p=p->next;

clear();

print(p);

}

/*从文件读数据*/

voidload()

{

TEACHER*p1;

FILE*fp;

if((fp=fopen("data.txt","rb"))==NULL)

{

printf("cannotopenfile\n");

return;

}

while(First->next!

=First)/*如果当前表不空,删除当前表*/

{

p1=First->next;

First->next=p1->next;

free(p1);

}

free(First);

First=(TEACHER*)malloc(sizeof(TEACHER));/*创建头结点*/

if(!

First)

{

printf("outofmemory!

\n");

return;

}

Last=First;

First->prior=Last;

Last->next=First;

p=First;

while(!

feof(fp))/*当文件不为空时读数据*/

{

p1=(TEACHER*)malloc(sizeof(TEACHER));

if(!

p1)

{

printf("outofmemory!

\n");

return;

}

if(1!

=fread(p1,sizeof(TEACHER),1,fp))

break;/*读数据*/

p1->next=Last->next;/*将新读出的数据链在当前表尾*/

p1->prior=Last;

Last->next=p1;

Last=Last->next;

First->prior=Last;

}

fclose(fp);/*关闭文件*/

}

/*保存数据到磁盘文件*/

voidsave()

{

FILE*fp;/*定义指向文件的指针*/

TEACHER*p1;/*定义移动指针*/

if((fp=fopen("data.txt","wb"))==NULL)/*为输出打开一个文本文件,如没有则建立*/

{

printf("cannotopenfile\n");/*如不能打开文件,显示提示信息,结束程序*/

return;/*返回*/

}

p1=First;/*移动指针从头指针开始*/

while(p1->next!

=First)/*如p1不为空*/

{

fwrite(p1->next,sizeof(TEACHER),1,fp);/*写入一条记录*/

p1=p1->next;/*指针后移,处理下一条记录*/

}

fclose(fp);/*关闭文件*/

}

/*删除记录*/

voiddelete()

{

TEACHER*p1;

if(First==Last)

return;/*表为空*/

if(p==First)/*p为头结点*/

p=First->next;

if(p==Last)/*p为尾结点*/

Last=p->prior;

p1=p;/*一般情况*/

p=p->next;

p1->prior->next=p1->next;

p1->next->prior=p1->prior;

free(p1);

}

/*输出记录*/

voidprint(TEACHER*p)

{

intx1=70,y1=100;

charstr[20];

outtextxy(x1+110,y1+75,p->no);

outtextxy(x1+360,y1+75,p->name);

outtextxy(x1+110,y1+105,p->sex);

outtextxy(x1+360,y1+105,p->profess);

outtextxy(x1+110,y1+135,p->dept);

outtextxy(x1+360,y1+135,p->class);

sprintf(str,"%f",p->workload);

outtextxy(x1+110,y1+165,str);

sprintf(str,"%f",p->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->next==First)return;

p00=First;/*作排好序表的表头和第一个结点*/

p0=First->next;

p1=p0->next;

First->prior=p0;

p0->next=First;

templast=p0;

while(p1!

=First)/*当p1没有转回到表头时*/

{

p11=p1;/*将p11作为待插入结点*/

p1=p1->next;/*p1指向下一个待排序结点*/

p00=First;/*从头结点开始寻找插入位置*/

p0=p00->next;/*p0是p00的后继*/

while(p0!

=First&&p11->workload>p0->workload)

{

p00=p0;/*当新插入结点比当前表结点大时,指针后移*/

p0=p0->next;

}

if(p0==First)/*如果p0移到了头结点*/

{

p11->next=p00->next;

p11->prior=p00;

p00->next=p11;

p0->prior=p11;

templast=p11;

}

else/*新插入结点介于p00和p0之间*/

{

p11->next=p0;

p11->prior=p00;

p0->prior=p11;

p00->next=p11;

}

}

Last=templast;/*设置尾指针*/

p=First;/*设置当前记录指针*/

}

流程图:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1