题目:
某高校主要人员有:在职人员(行政人员,教师,一般员工),退休人员和临时工。现在需要存储这些人员的人事档案信息,内容包括变好,姓名,性别,年龄,职务,职称,政治面貌,最高学历,任职时间,来院时间,人员类别。其中人员编号唯一,不能重复。
(1) 添加删除功能:能根据学院人事的变动情况,添加删除记录
(2) 查询功能: 能根据编号和姓名进行查询
(3) 编辑功能(高级): 根据查询对相应的记录进行修改并存储
(4) 统计功能: 能根据多种参数进行人员的统计(在职人员,党员人数,女工人数,高学历高学历人员(硕士学位以上或者副教授以上)),统计要求同时显示被统计者的信息。
(5) 排序功能: 按照年龄,来院时间进行排序。 (6) 保存功能: 能对输入的数据进行相应的存储。
1 / 20
程序代码:
#include
First=(TEACHER *)malloc(sizeof(TEACHER)); /*为头结点申请空间*/
Last=First; /*将尾指针指向头结点*/
First->prior=Last; /*设置头结点的前驱指针*/ Last->next=First; /*设置头结点的后继指针*/ p=First; /*设置当前记录指针为头结点*/ }
/*创建教师信息循环双链表*/
2 / 20
void create() {
int unit,flag=0; float temp;
TEACHER *info; /*新增结点*/ init(); for(;;) {
if(flag==1)break; /*标志为1,不再输入*/ clrscr(); /*清屏*/
printf(\ printf(\
info=(TEACHER *)malloc(sizeof(TEACHER));/*为新增结点申请空间*/
if(!info) /*没有空间出错处理*/ {
printf(\ exit(0); }
3 / 20
printf(\开始提示输入*/ scanf(\
if(info->no[0]=='@')/*输入@结束输入*/ {
flag=1;break;} printf(\
scanf(\ printf(\
scanf(\ printf(\
scanf(\ printf(\
scanf(\ printf(\
scanf(\ printf(\ scanf(\ info->workload=temp;
if(strcmp(info->profess,\4 / 20
教授*/
if(strcmp(info->profess,\副教授*/
if(strcmp(info->profess,\讲师*/ if(strcmp(info->profess,\助教*/ info->lessonf=unit*info->workload;/*根据职称计算代课费*/
info->next=Last->next;/*新插入结点插在表末尾*/ info->prior=Last; /*新结点的前驱为原来的尾结点*/ Last->next=info; /*原来尾结点的后继为新结点*/ Last=info; /*新的尾结点为新结点*/
First->prior=Last;/*头结点的前驱为尾指针*/ } return; }
/*显示第一条记录*/ void firstr() {
if(First==Last)return; clear();
5 / 20