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%-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<L1->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<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%-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"); } } }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。