C++怎么实现教工考勤信息管理系统
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇"C++怎么实现教工考勤信息管理系统"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇
千家信息网最后更新 2025年01月16日C++怎么实现教工考勤信息管理系统
这篇"C++怎么实现教工考勤信息管理系统"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C++怎么实现教工考勤信息管理系统"文章吧。
需求分析
传统意义上的考勤管理都是采用原始的手工操作来完成的。人事部的管理人员或办公室人员要进行繁琐的记录、修改、查询、统计等工作,不仅时间长、劳动强度大、工作效率低下,并且容易出错。
1.1 问题提出
本人计划编写一个教工考勤信息管理系统,主要用来管理教工考勤信息。可以对信息进行排序,查询,输出,修改,添加,删除等操作。
1.2 本系统涉及的知识点
循环、分支、数组、函数、结构体、指针、文件
1.3 功能要求
(1) 排序:按教师号对所有教工的出勤信息进行排序。
(2) 查询:按特定条件查找教工的出勤信息。
(3) 更新:按编号对某个教工的某项出勤信息进行修改。
(4) 插入:加入新教工的出勤信息。
(5) 删除:按编号删除已离职的教工的出勤信息。
(6) 浏览:输出所有教工的出勤信息。
#include#include #include #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 length;i++)//遍历输出 { if(!strcmp(no,L1->data[i].num))//如果学号一样 { break; } } if(i==L1->length)//查询到表尾都没有跳出循环 { printf("删除失败!\n"); return; } for(j=i;j 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 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 length;i++) { for(j=i+1;j 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 length;i++)//遍历查找 { if(!strcmp(no,L1->data[i].num))//如果和输入的教师号一样 { flag=1; printf("%-10s%-10s%-10s%-10s%-20s%-10s%-20s%-20s%-20s\n","教师号","姓名","性别","学历","电话","职称","考勤日期","出勤情况","备注"); 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%-20s\n",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 length;i++)//遍历查找 { if(!strcmp(name,L1->data[i].name))//如果姓名一样 { printf("%-10s%-10s%-10s%-10s%-20s%-10s%-20s%-20s%-20s\n","教师号","姓名","性别","学历","电话","职称","考勤日期","出勤情况","备注"); 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%-20s\n",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%-20s\n","教师号","姓名","性别","学历","电话","职称","考勤日期","出勤情况","备注"); for(i=0;i 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%-20s\n",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++怎么实现教工考勤信息管理系统"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
信息
教师
输入
教工
考勤
查询
姓名
文件
排序
管理
毕业生
备注
学历
性别
情况
日期
电话
职称
循环
输出
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
微米软件开发工作室
为什么服务器突然不能用
数据库 find
天津网络技术服务保障
华为卖掉x86服务器业务的收入
软件开发程序案例
北京做网络安全的上市公司
华为云备份服务器异常3911
网络安全视频创意短片
考研网络安全专业哪个好
数据库设计应该写点什么
有名的中文版服务器托管公司
fm如何还原官方数据库
数据库视图查询功能
联想服务器管理员账号
数据库技术的网站
未成年人网络安全保护
学习网络安全法感想
数据库详细设计安安全性
初中网络安全教育试题
利用云服务器转发数据
苏州网络软件开发产品介绍
关于网络安全法错误
数据库自增如何设置初始值
数据库据
网络安全系统安全典型案例
软件文档在软件开发中的地位
电子政务网络安全方案
网络安全用的是什么系统
怀化棋牌软件开发公司