智能人员考勤系统(C语言)

/*智能人员考评系统*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<string.h>
void SaveStaff();
void ReadStaff();
//typedef struct sNode Node;
typedef struct staff{char name[20];char id[10];int sex;int grade;char function[20];void (*func)(void *g_pHead );
}Staffes;typedef struct sNode
{Staffes stu;          //员工信息struct sNode* pNext;   //指向下一个员工
}Node;Node *g_pHead =NULL;    //定义第一个员工void menu(){printf("     智能人员考评系统       \n");printf("----------------------------\n");printf("|1、添加员工信息            |\n");printf("|2、保存所有员工信息        |\n");printf("|3、查询员工信息            |\n");printf("|4、删除员工信息            |\n");printf("|5、修改员工信息            |\n");printf("|6、职能施展                |\n");printf("|7、退出                    |\n");printf("----------------------------\n");printf("请输入相应的序号选择!       \n");
}//添加员工
void addStaff(){system("cls");ReadStaff();//SaveStaff();printf("请输入员工 工号 姓名 性别 评分 职能\n");Node* p;p = g_pHead;while (g_pHead !=NULL &&p->pNext != NULL){p = p->pNext;}Node* pNewNode = (Node*)malloc(sizeof(Node));//为新添加的员工分配空间pNewNode->pNext = NULL;if (g_pHead == NULL){g_pHead = pNewNode;p = g_pHead;}else{p->pNext = pNewNode;//p的下一个节点为pNewNode}  //scanf("%s %s %d %d %s",pNewNode->stu.id,pNewNode->stu.name,&pNewNode->stu.sex,&pNewNode->stu.grade,pNewNode->stu.function);printf("工号:");scanf("%s",pNewNode->stu.id);printf("姓名:");scanf("%s",pNewNode->stu.name);printf("性别:");scanf("%d",&pNewNode->stu.sex);printf("评分:%d\n",pNewNode->stu.grade=0);printf("职能:");scanf("%s",pNewNode->stu.function);printf("     \n数据添加成功....\n\n\n");system("pause");system("cls");}//保存
void SaveStaff()
{system("cls");FILE *pFile = fopen("staff.txt", "w");if (pFile ==0){printf("打开文件失败");return;}//写入数据Node *p;p = g_pHead;while (p != NULL){fprintf(pFile,"%s %s %d %d %s\n",p->stu.id,p->stu.name,p->stu.sex,p->stu.grade,p->stu.function);p =p->pNext;}printf("     \n\n数据保存成功\n\n\n");fclose(pFile);system("pause");system("cls");
}//读员工信息
void ReadStaff()
{system("cls");Node *p,*p2;p = p2 = g_pHead;while(p2 != NULL)//先吧链表中的数据删掉{p=p->pNext;free(p2);p2=p;}g_pHead = NULL;FILE *pFile = fopen("staff.txt","r+");//printf("打开文件");if(pFile ==0){printf("打开文件失败");return;}//读取数据while (!feof(pFile)){Node *pTemp = (Node*)malloc(sizeof(Node));fscanf(pFile, "%s %s %d %d %s\n", &pTemp->stu.id, &pTemp->stu.name, &pTemp->stu.sex, &pTemp->stu.grade,&pTemp->stu.function);//  printf("duqu");//创建链表if(g_pHead ==NULL){g_pHead = pTemp;p = g_pHead;  }else {p->pNext =pTemp; //p的下一个节点为tempp = p->pNext;p->pNext = NULL;}}fclose(pFile);}//查找员工
Node* FindStaff()
{system("cls");char StaNum[20];printf("请输入您要查找的员工号: ");scanf("%s",StaNum);ReadStaff();  //把文件的东西都取到链表中Node* p;p = g_pHead;while (p != NULL){if (strcmp(p->stu.id,StaNum)==0){return p;}p = p->pNext;}//链表完没有找到信息if (p == NULL){printf("没有员工的信息\n");return NULL;}return NULL;}//删除
void DeleteStaff()
{system("cls");char StaNum[20];printf("请输入要删除员工工号:\n");scanf("%s",StaNum);ReadStaff();   //把文件内容读入链表Node *p,*p2;p= g_pHead;if(strcmp(g_pHead->stu.id,StaNum)==0)//判断是不是头结点{p2 = g_pHead;g_pHead=g_pHead->pNext;free(p2);return;}while(p->pNext != NULL)//不是头节点时{if(strcmp(p->pNext->stu.id,StaNum)==0){p2=p->pNext;p->pNext =p->pNext->pNext;//直接把要删除的跳过free(p2);return;}p=p->pNext;if(p->pNext == NULL)//看看是不是链表尾{break;}}if (p->pNext == NULL){printf("没有该员工信息\n");}}//修改员工信息
void modifystaff(){system("cls");char StaNum[20];printf("请输入您要修改的员工工号");scanf("%s",StaNum);ReadStaff();   //把文件内容读入链表Node* p;p = g_pHead;while(p != NULL){if(strcmp(p->stu.id,StaNum)==0){printf("工号:%s\t姓名:%s\t性别:%d\t评分%d\t职能:%s\n\n",p->stu.id, p->stu.name, p->stu.sex, p->stu.grade,p->stu.function);printf("请输入要修改的信息:工号 姓名 性别 分数 职能\n\n");printf("工号:%s\n",p->stu.id);printf("姓名:");scanf("%s",p->stu.name);printf("性别:%d\n评分:%d\n职能:",p->stu.sex,p->stu.grade);scanf("%s",p->stu.function);printf("\n修改成功\n");break;}p=p->pNext;}if(p== NULL){printf("没有该员工信息!\n");}system("pause");system("cls");
}
//考核打分
void DaFen(void *g_pHead){system("cls");ReadStaff();   //把文件内容读入链表Node* p;p = (Node*)g_pHead;while (p != NULL){printf("工号:%s\t姓名:%s\t性别:%d\t职能:%s\t评分:",p->stu.id,p->stu.name,p->stu.sex,p->stu.function);  scanf("%d",&p->stu.grade);p = p->pNext;}SaveStaff();
//  return 0;
}//清楚打分
void Clear(void *g_pHead){system("cls");ReadStaff();   //把文件内容读入链表Node* p;p = (Node*)g_pHead;while (p != NULL){printf("工号:%s\t姓名:%s\t性别:%d\t职能:%s\t评分:",p->stu.id,p->stu.name,p->stu.sex,p->stu.function);p->stu.grade=0;printf("%d\n",p->stu.grade);p = p->pNext;}system("pause");SaveStaff();//    return 0;
}//排序
void Sort(void *g_pHead){system("cls");ReadStaff();   //把文件内容读入链表int i,j,cout=0;     Node* p;Staffes t; p =(Node*) g_pHead;while (p != NULL){cout++;//   printf("工号:%s\t姓名:%s\t性别:%d\t评分%d\t职能:%s\n",p->stu.id, p->stu.name, p->stu.sex, p->stu.grade,p->stu.function);p = p->pNext;}Node* b,* d;for(b=(Node*) g_pHead;b!=NULL;b = b->pNext){for(d=b;d!=NULL;d = d->pNext){if(b->stu.grade>d->stu.grade){t = d->stu;d->stu=b->stu;b->stu=t;}}}p =(Node*) g_pHead;while (p != NULL){cout++;printf("工号:%s\t姓名:%s\t性别:%d\t评分%d\t职能:%s\n",p->stu.id, p->stu.name, p->stu.sex, p->stu.grade,p->stu.function);p = p->pNext;}system("pause");   SaveStaff();//  return 0;
}
//计算分数
void Average(void *g_pHead){//  system("cls");int sum=0;int cout=0;ReadStaff();   //把文件内容读入链表Node* p;p =(Node*) g_pHead;while (p != NULL){sum=sum+p->stu.grade;cout++; p = p->pNext;} printf("所有员工总分数为:  %d\n",sum);printf("所有员工总人数为:  %d\n",cout);printf("所有员工平均分数为:%d\n\n",sum/cout);system("pause");system("cls");//SaveStaff();//return 0;
}//职能施展
void operation(){system("cls");   char StaNum[20];printf("请输入您的工号:");scanf("%s",StaNum);char dafen[]="dafen";char sclear[]="clear";char sort[]="sort";char average[]="average";ReadStaff();   //把文件内容读入链表Node* p;p = g_pHead;while(p!= NULL){if(strcmp(p->stu.id,StaNum)==0){if(strcmp(p->stu.function,dafen)==0){p->stu.func=DaFen;p->stu.func(g_pHead);break;}else if(strcmp(p->stu.function,sclear)==0){p->stu.func=Clear;p->stu.func(g_pHead);break;}else if(strcmp(p->stu.function,sort)==0){p->stu.func=Sort;p->stu.func(g_pHead);break;}else if(strcmp(p->stu.function,average)==0){p->stu.func=Average;p->stu.func(g_pHead);break;}else {printf("抱歉您没有特殊职能\n");break;}}p=p->pNext;}if(p == NULL){printf("工号输入错误\n");}}int main()
{while(1){//  system("cls");menu();char ch;ch = _getch();switch (ch){case '1':        //1、添加员工信息addStaff();break;case '2':        //2、保存员工信息SaveStaff();break; case '3':       //3、查询员工信息 {Node *pNode = FindStaff();if(pNode !=NULL){printf("工号:%s\t姓名:%s\t性别:%d\t评分%d\t职能:%s\n\n\n",pNode->stu.id, pNode->stu.name, pNode->stu.sex, pNode->stu.grade,pNode->stu.function);}system("pause");system("cls");break;   }       case '4':       //4、删除员工信息DeleteStaff();break;case '5':        //5、修改员工信息 modifystaff();break;case '6':        //6、职能施展 operation();break;case '7':        //7、退出printf("\n\n   欢迎再次使用!  \n\n\n");         exit(0);            break;default:printf("您的输入有误,请重新输入!\n");break;}}return 0;
}

智能人员考勤系统(C语言)相关推荐

  1. 大学生考勤系统C语言代码,C++学生考勤系统(含源代码)

    <C++学生考勤系统(含源代码)>由会员分享,可在线阅读,更多相关<C++学生考勤系统(含源代码)(26页珍藏版)>请在人人文库网上搜索. 1.C+吾言程序设计课程设计报告书题 ...

  2. c语言写考勤系统,C语言课程设计学生考勤系统

    <C语言课程设计学生考勤系统.doc>由会员分享,可免费在线阅读全文,更多与<C语言课程设计学生考勤系统>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜 ...

  3. c语言程序设计学生考勤系统,C语言课程设计学生考勤系统最终版(样例3)

    <C语言课程设计学生考勤系统.doc>由会员分享,可免费在线阅读全文,更多与<C语言课程设计学生考勤系统(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文 ...

  4. 基于RFID定位技术的工地人员定位考勤系统-工地人员定位-新导智能

    跟着城市的快速展开,高效信息化的人员流转需求越来越迫切,而在杂乱且快节奏的作业环境中,对人员考勤的处理特别重要.所以,关于人员考勤系统有如下要求:首先是大容量,其次是操作要便利,最后是系统更新程序应简 ...

  5. RFID建筑工地人员考勤管理解决方案——铨顺宏FUWIT

    1.项目背景 随着城市的快速发展,高效信息化的工地建筑需求越来越迫切,而在复杂且快节奏的工地建筑环境中,对人员考勤的管理尤其重要.而建筑工地的人员考勤有一定的特殊性:一是人流量大:二是大部分工人的文化 ...

  6. 基于人脸识别的课堂考勤系统 tkinter+openpyxl+face_recognition

    本项目结合了上一篇文章基于face_recognition库实现人脸识别,通过利用Python的tkinter模块来设计考勤系统的图形化界面,此外结合openpyxl模块,实现将学生的信息和考勤打卡数 ...

  7. java学生考勤系统实验报告,程序设计实验报告学生考勤系统).doc

    程序设计实验报告学生考勤系统) C语言程序设计 课程报告 所在学院计算机科学学院所在班级计算机科学与技术1班 小组成员XX(组长) XXX(副组长) XXX(组员) XXX(组员) 指导老师XXX X ...

  8. 智能公交考勤系统管理软件设计

    智能公交考勤系统管理软件设计-VB(论文+系统+开题报告+答辩PPT) 摘要:随着现代科学技术的发展,越来越多的企业对职工的考勤管理都实行了信息化管理,使用计算机系统代替繁琐冗余的手工方式来管理考勤事 ...

  9. 基于RFID技术下的室内人员定位考勤系统,室内来访定位-新导智能

    1.1 概 述 考勤.识别管理系统,又称为室内人员定位出入识别系统,在RFID在国内应用的今天,已发展成为一套现代化的.功能齐全的高效管理系统,它对出入门和通道的管理也早已超出了单纯人员的管理.它不止 ...

最新文章

  1. vue-自定义过滤器--时间
  2. java 全双工服务器_利用Java实现串口全双工通讯_JAVA实例教程_IT部落
  3. 动画库Animate.css
  4. I2C总线时序模拟(二)-加深理解总线协议
  5. Pandas Index 更新和计算(Modifyingcomputations)
  6. 点击实现页面的跳转及跳转到同一页面的不同iframe模块(也许标题看不清楚,但是想实现功能性跳转的请看内容)...
  7. 服务器系统启用flash,如何在Windows Server 2016中启用Adobe Flash Player
  8. P2P软件工作原理是什么?
  9. CSDN学霸课表——网络工程师(软考中级)
  10. WIN10 共享文件夹并取消密码访问
  11. 正则表达式中(RegExp)的字符和转译
  12. maven打jar包时报update interval of XXX has elapsed or updates are force
  13. 这几excel操作技巧,每一个都是大神和菜鸟的分水岭!
  14. 【Git-2022总结】分布式代码版本控制工具【GitHub/Gitee/GitLab】
  15. 万人千题第一阶段报告【待继续总结】
  16. 如何搞好团建和提高团队执行力?
  17. Java开发工程师需要掌握哪些技能?
  18. C++set函数用法
  19. 多小区智慧物业管理系统源码
  20. Geomagic.eShell.v7.0 1CD(助听器设计软件)

热门文章

  1. 转 兵无常势 水无常形 贴
  2. python画建筑物_函数绘制带有门窗的建筑
  3. 求大佬指点,什么是内部异常堆栈跟踪的结尾?
  4. ACM POJ 题目分类(完整整理版本)
  5. 20年南京大学软件工程考研经验分享
  6. 计算机开机关响五声原因,电脑开机后出现5声报警短响怎么办_电脑开机后出现5声报警短响的解决方法...
  7. 印度理工学院有多难考?
  8. ES聚合查询详解(四):管道聚合
  9. 我国计算机的创新,浅析计算机技术的创新过程
  10. Linux下nginx宕机自动启动