<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了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"); } } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45