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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

题目:某高校主要人员有:在职人员(行政人员,教师,一般员工),退休人员和临时工。现在需要存储这些人员的人事档案信息,内容包括变好,姓名,性别,年龄,职务,职称,政治面貌,最高学历,任职时间,来院时间,人员类别。其中人员编号唯一,不能重复。(1)添加删除功能:能根据学院人事的变动情况,添加删除记录(2)查询功能:能根据编号和姓名进行查询(3)编辑功能(高级):根据查询对相应的记录进行修改并存储(4)统计功能:能根据多种参数进行人员的统计(在职人员,党员人数,女工人数,高学历高学历人员(硕士学位以上或者副教授以上)),统计要求同时显示被统计者的信息。(5)排序功能:按照年龄,来院时间进行排序。(6)保存功能:能对输入的数据进行相应的存储。程序代码:#includestdio.h/*根据实际存放位置修改此路径*//*初始化双链表*/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;elsep=Last;clear();print(p);}/*显示下一条记录*/voidnextr(){if(First==Last)return;if(p==Last)p=First-next;elsep=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;m4;m++)for(n=0;n2;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-workloadp0-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;/*设置当前记录指针*/}流程图:

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功