c/c++语言开发共享C++实现教工考勤信息管理系统

本文实例为大家分享了c++实现教工考勤信息管理系统的具体代码,供大家参考,具体内容如下需求分析传统意义上的考勤管理都是采用原始的手工操作来完成的。人事部的管理人员或办公室人员要进行繁琐的记录、修改、查

c/c++开发分享C++实现教工考勤信息管理系统实例为大家分享了c++实现教工考勤信息管理系统的具体代码,供大家参考,具体内容如下

需求分析

传统意义上的考勤管理都是采用原始的手工操作来完成的。人事部的管理人员或办公室人员要进行繁琐的记录、修改、查询、统计等工作,不仅时间长、劳动强度大、工作效率低下,并且容易出错。

1.1 问题提出

本人计划编写一个教工考勤信息管理系统,主要用来管理教工考勤信息。可以对信息进行排序,查询,输出,修改,添加,删除等操作。

1.2 本系统涉及的知识点

循环、分支、数组、函数、结构体、指针、文件

1.3 功能要求

(1) 排序:按教师号对所有教工的出勤信息进行排序。
(2) 查询:按特定条件查找教工的出勤信息。
(3) 更新:按编号对某个教工的某项出勤信息进行修改。
(4) 插入:加入新教工的出勤信息。
(5) 删除:按编号删除已离职的教工的出勤信息。
(6) 浏览:输出所有教工的出勤信息。

#include <stdio.h>  #include <stdlib.h>  #include <string.h>    #define list_max_size  100//顺序表最大长度    typedef struct //定义的用于表示学生信息  {      char num[8];//教师号      char name[20];//姓名      char sex[10];//性别      char study[20];//学历      char date[20];//日期      char phone[20];//电话      char location[20];//职称      char chuqin[20];//出勤情况      char remarks [30];//备注  }teacher;    typedef struct  {       teacher data[list_max_size];//数据域      int length;//表长  }sqlist;    //功能设计  void add(sqlist *l1);//添加教工考勤信息  void ran(sqlist *l1);//出勤信息排序  void select_num(sqlist *l1);//按教工查询  void select_name(sqlist *l1);//按教工名查询  void select_all(sqlist *l1);//查询所有教工  void delete_teacher(sqlist *l1);//删除教工考勤信息  void change(sqlist *l1);//改变教工考勤信息  void read(sqlist *l1);//文件读教工考勤信息  void write(sqlist *l1);//文件写教工考勤信息  void menu();//菜单    void menu()//菜单  {      system("cls");//清屏      printf("1、教师信息录入n");      printf("2、教师信息浏览n");      printf("3、按教师号查询n");      printf("4、按照姓名查询n");      printf("5、修改教师信息n");      printf("6、删除教师信息n");      printf("7、按教师号排序n");      printf("0、退出n");  }    int main()  {      char x;      sqlist *l1;      l1 = (sqlist*)malloc(sizeof(sqlist));      l1->length = 0;      read(l1);//文件读        while (1)      {          menu();//界面登陆          printf("请输入你的选择:");          scanf("%c", &x);          switch (x)          {          case '1':              add(l1);//教师信息录入              write(l1);//文件写入毕业生信息              break;          case '2':              select_all(l1);//毕业生信息浏览              break;          case '3':              select_num(l1);//按照学号查询              break;          case '4':              select_name(l1);//按照姓名查询              break;          case '5':              change(l1);//修改毕业生信息              write(l1);//文件写入毕业生信息              break;          case '6':              delete_teacher(l1);//删除毕业生信息              write(l1);//文件写入毕业生信息              break;          case '7':              ran(l1);//按照学号进行排序              break;          case '0':              return 0;          default:              printf("输入有误,请重新选择!n");              break;          }          getchar();          system("pause");      }      return 0;  }  void delete_teacher(sqlist *l1)//删除教师  {      int i,j;      char no[20];      printf("输入教师号:");      scanf("%s",no);      for(i=0;i<l1->length;i++)//遍历输出      {          if(!strcmp(no,l1->data[i].num))//如果学号一样          {              break;          }      }      if(i==l1->length)//查询到表尾都没有跳出循环      {          printf("删除失败!n");          return;      }      for(j=i;j<l1->length-1;j++)      {          l1->data[j]=l1->data[j+1];//用后一个覆盖前面一个 达到删除的效果      }      l1->length--;//人数-1      printf("删除成功!n");  }    void change(sqlist *l1)//改变毕业生信息  {      int i;      char no[20];      printf("输入教师号:");      scanf("%s",no);      for(i=0;i<l1->length;i++)//遍历输出      {          if(!strcmp(no,l1->data[i].num))//如果学号一样          {              break;          }      }      if(i==l1->length)//查询到表尾都没有跳出循环      {          printf("修改失败!n");          return;      }      printf("请输入姓名:");      scanf("%s",l1->data[i].name);      printf("请输入性别:");      scanf("%s",l1->data[i].sex);      printf("请输入学历:");      scanf("%s",l1->data[i].study);      printf("请输入电话:");      scanf("%s",l1->data[i].phone);      printf("请输入职称:");      scanf("%s",l1->data[i].location);      printf("请输入考勤日期(xxxx-xx-xx):");      scanf("%s",l1->data[i].date);      printf("请输入出勤情况:");      scanf("%s",l1->data[i].chuqin);      printf("请输入备注:");      scanf("%s",l1->data[i].remarks);      printf("修改成功!n");  }    void ran(sqlist *l1)//按教师号排序  {      int i,j;      teacher temp;      for(i=0;i<l1->length;i++)      {          for(j=i+1;j<l1->length;j++)//选择排序 每次循环排好一个data[i]          {              if(strcmp(l1->data[i].num,l1->data[j].num)>0)//如果需要交换               {                  temp=l1->data[i];                  l1->data[i]=l1->data[j];                  l1->data[j]=temp;              }          }      }      printf("输出根据教师号排序后的结果:n");      select_all(l1);//排序完显示  }  void select_num(sqlist *l1)//按号查询  {      int i,flag=0;      char no[20];      printf("输入教师号:");      scanf("%s",no);      for(i=0;i<l1->length;i++)//遍历查找      {          if(!strcmp(no,l1->data[i].num))//如果和输入的教师号一样          {              flag=1;              printf("%-10s%-10s%-10s%-10s%-20s%-10s%-20s%-20s%-20sn","教师号","姓名","性别","学历","电话","职称","考勤日期","出勤情况","备注");              printf("%-10s%-10s%-10s",l1->data[i].num,l1->data[i].name,l1->data[i].sex);              printf("%-10s%-20s%-10s",l1->data[i].study,l1->data[i].phone,l1->data[i].location);              printf("%-20s%-20s%-20sn",l1->data[i].date,l1->data[i].chuqin,l1->data[i].remarks);              }      }      if(flag==0)//查询到表尾都没有跳出循环      {          printf("无该教师信息!n");      }  }    void select_name(sqlist *l1)//按姓名查询  {      int i,flag=0;      char name[20];      printf("输入教师姓名:");      scanf("%s",name);      for(i=0;i<l1->length;i++)//遍历查找      {          if(!strcmp(name,l1->data[i].name))//如果姓名一样           {              printf("%-10s%-10s%-10s%-10s%-20s%-10s%-20s%-20s%-20sn","教师号","姓名","性别","学历","电话","职称","考勤日期","出勤情况","备注");              printf("%-10s%-10s%-10s",l1->data[i].num,l1->data[i].name,l1->data[i].sex);              printf("%-10s%-20s%-10s",l1->data[i].study,l1->data[i].phone,l1->data[i].location);              printf("%-20s%-20s%-20sn",l1->data[i].date,l1->data[i].chuqin,l1->data[i].remarks);                  flag=1;//设置标志 表示查询到了  这里不跳出 是因为 姓名可能会重复 需要把重复的人也显示          }      }      if(flag==0)//查询到表尾都没有跳出循环      {          printf("无该姓名信息!n");      }    }    void add(sqlist *l1)  {      if(l1->length>=list_max_size)//如果达到了最大长度      {          printf("顺序表满,无法添加!n");          return ;      }      printf("请输入教师号:");      scanf("%s",l1->data[l1->length].num);//信息存入表尾 l1->length 是顺序表当前长度 第l1->length个元素并未被使用 所以直接存在里面      printf("请输入姓名:");      scanf("%s",l1->data[l1->length].name);      printf("请输入性别:");      scanf("%s",l1->data[l1->length].sex);      printf("请输入学历:");      scanf("%s",l1->data[l1->length].study);      printf("请输入电话:");      scanf("%s",l1->data[l1->length].phone);      printf("请输入职称:");      scanf("%s",l1->data[l1->length].location);      printf("请输入考勤日期(xxxx-xx-xx):");      scanf("%s",l1->data[l1->length].date);      printf("请输入出勤情况:");      scanf("%s",l1->data[l1->length].chuqin);      printf("请输入备注:");      scanf("%s",l1->data[l1->length].remarks);      l1->length++;//表长+1 使得刚刚存的数据有效  }    void select_all(sqlist *l1)//显示所有的教师信息  {      int i;      if(l1->length==0)//顺序表长度为0      {          printf("无教师信息!n");          return;      }      printf("%-10s%-10s%-10s%-10s%-20s%-10s%-20s%-20s%-20sn","教师号","姓名","性别","学历","电话","职称","考勤日期","出勤情况","备注");      for(i=0;i<l1->length;i++)//遍历输出      {          printf("%-10s%-10s%-10s",l1->data[i].num,l1->data[i].name,l1->data[i].sex);          printf("%-10s%-20s%-10s",l1->data[i].study,l1->data[i].phone,l1->data[i].location);          printf("%-20s%-20s%-20sn",l1->data[i].date,l1->data[i].chuqin,l1->data[i].remarks);      }  }    void read(sqlist *l1)//文件读  {      file *fp;      int a = 0;//a,用来识别到底有没有删除数据.t,用来接收fsacnf函数的返回值(为-1是说明无数据)      if ((fp = fopen("teacher.txt", "r+")) == null)//‘r'允许读      {          printf("文件打开失败!n");          return;      }      else      {          while (!feof(fp))          {              a = 1;              fread(&l1->data[l1->length++],sizeof(teacher),1,fp);          }          fclose(fp);        //关闭文件          if (a == 0)          {              printf("文本无数据,教工考勤信息读取失败n");          }          else          {              l1->length--;          }      }  }    void write(sqlist *l1)//文件写  {      file *fp;      int t = 0;      int i;      if ((fp = fopen("teacher.txt", "w+")) == null)      {          printf("文件打开失败!n");          return;      }      else      {          for (i = 0; i < l1->length; i++)          {              t=1;              fwrite(&l1->data[i],sizeof(teacher),1,fp);          }          fclose(fp);    //关闭文件          if(l1->length==0)          {              t=1;          }          if (t == 1)          {              printf("教师信息写入完成n");          }          else          {              printf("教工考勤信息写入失败n");          }      }  }

以上就是c/c++开发分享C++实现教工考勤信息管理系统的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

需要了解更多c/c++开发分享C++实现教工考勤信息管理系统,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1246781.html

(0)
上一篇 2022年9月23日
下一篇 2022年9月23日

精彩推荐