欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)教工考勤信息管理系統(tǒng)

 更新時間:2022年05月16日 16:26:27   作者:馬振禹  
這篇文章主要為大家詳細介紹了C++實現(xiàn)教工考勤信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++實現(xiàn)教工考勤信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

需求分析

傳統(tǒng)意義上的考勤管理都是采用原始的手工操作來完成的。人事部的管理人員或辦公室人員要進行繁瑣的記錄、修改、查詢、統(tǒng)計等工作,不僅時間長、勞動強度大、工作效率低下,并且容易出錯。

1.1 問題提出

本人計劃編寫一個教工考勤信息管理系統(tǒng),主要用來管理教工考勤信息??梢詫π畔⑦M行排序,查詢,輸出,修改,添加,刪除等操作。

1.2 本系統(tǒng)涉及的知識點

循環(huán)、分支、數(shù)組、函數(shù)、結(jié)構(gòu)體、指針、文件

1.3 功能要求

(1) 排序:按教師號對所有教工的出勤信息進行排序。
(2) 查詢:按特定條件查找教工的出勤信息。
(3) 更新:按編號對某個教工的某項出勤信息進行修改。
(4) 插入:加入新教工的出勤信息。
(5) 刪除:按編號刪除已離職的教工的出勤信息。
(6) 瀏覽:輸出所有教工的出勤信息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LIST_MAX_SIZE ?100//順序表最大長度

typedef struct //定義的用于表示學(xué)生信息
{
?? ?char num[8];//教師號
?? ?char name[20];//姓名
?? ?char sex[10];//性別
?? ?char study[20];//學(xué)歷
?? ?char date[20];//日期
?? ?char phone[20];//電話
?? ?char location[20];//職稱
?? ?char chuqin[20];//出勤情況
?? ?char remarks [30];//備注
}Teacher;

typedef struct
{
?? ? Teacher data[LIST_MAX_SIZE];//數(shù)據(jù)域
?? ?int length;//表長
}SqList;

//功能設(shè)計
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);//文件寫入畢業(yè)生信息
?? ??? ??? ?break;
?? ??? ?case '2':
?? ??? ??? ?select_all(L1);//畢業(yè)生信息瀏覽
?? ??? ??? ?break;
?? ??? ?case '3':
?? ??? ??? ?select_num(L1);//按照學(xué)號查詢
?? ??? ??? ?break;
?? ??? ?case '4':
?? ??? ??? ?select_name(L1);//按照姓名查詢
?? ??? ??? ?break;
?? ??? ?case '5':
?? ??? ??? ?change(L1);//修改畢業(yè)生信息
?? ??? ??? ?write(L1);//文件寫入畢業(yè)生信息
?? ??? ??? ?break;
?? ??? ?case '6':
?? ??? ??? ?delete_teacher(L1);//刪除畢業(yè)生信息
?? ??? ??? ?write(L1);//文件寫入畢業(yè)生信息
?? ??? ??? ?break;
?? ??? ?case '7':
?? ??? ??? ?ran(L1);//按照學(xué)號進行排序
?? ??? ??? ?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))//如果學(xué)號一樣
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?if(i==L1->length)//查詢到表尾都沒有跳出循環(huán)
?? ?{
?? ??? ?printf("刪除失敗!\n");
?? ??? ?return;
?? ?}
?? ?for(j=i;j<L1->length-1;j++)
?? ?{
?? ??? ?L1->data[j]=L1->data[j+1];//用后一個覆蓋前面一個 達到刪除的效果
?? ?}
?? ?L1->length--;//人數(shù)-1
?? ?printf("刪除成功!\n");
}

void change(SqList *L1)//改變畢業(yè)生信息
{
?? ?int i;
?? ?char no[20];
?? ?printf("輸入教師號:");
?? ?scanf("%s",no);
?? ?for(i=0;i<L1->length;i++)//遍歷輸出
?? ?{
?? ??? ?if(!strcmp(no,L1->data[i].num))//如果學(xué)號一樣
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?if(i==L1->length)//查詢到表尾都沒有跳出循環(huán)
?? ?{
?? ??? ?printf("修改失敗!\n");
?? ??? ?return;
?? ?}
?? ?printf("請輸入姓名:");
?? ?scanf("%s",L1->data[i].name);
?? ?printf("請輸入性別:");
?? ?scanf("%s",L1->data[i].sex);
?? ?printf("請輸入學(xué)歷:");
?? ?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++)//選擇排序 每次循環(huán)排好一個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("輸出根據(jù)教師號排序后的結(jié)果:\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","教師號","姓名","性別","學(xué)歷","電話","職稱","考勤日期","出勤情況","備注");
?? ??? ??? ?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)//查詢到表尾都沒有跳出循環(huán)
?? ?{
?? ??? ?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","教師號","姓名","性別","學(xué)歷","電話","職稱","考勤日期","出勤情況","備注");
?? ??? ??? ?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;//設(shè)置標(biāo)志 表示查詢到了 ?這里不跳出 是因為 姓名可能會重復(fù) 需要把重復(fù)的人也顯示
?? ??? ?}
?? ?}
?? ?if(flag==0)//查詢到表尾都沒有跳出循環(huán)
?? ?{
?? ??? ?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 是順序表當(dāng)前長度 第L1->length個元素并未被使用 所以直接存在里面
?? ?printf("請輸入姓名:");
?? ?scanf("%s",L1->data[L1->length].name);
?? ?printf("請輸入性別:");
?? ?scanf("%s",L1->data[L1->length].sex);
?? ?printf("請輸入學(xué)歷:");
?? ?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 使得剛剛存的數(shù)據(jù)有效
}

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","教師號","姓名","性別","學(xué)歷","電話","職稱","考勤日期","出勤情況","備注");
?? ?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,用來識別到底有沒有刪除數(shù)據(jù).t,用來接收fsacnf函數(shù)的返回值(為-1是說明無數(shù)據(jù))
?? ?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);?? ??? ?//關(guān)閉文件
?? ??? ?if (a == 0)
?? ??? ?{
?? ??? ??? ?printf("文本無數(shù)據(jù),教工考勤信息讀取失敗\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);?? ?//關(guān)閉文件
?? ??? ?if(L1->length==0)
?? ??? ?{
?? ??? ??? ?t=1;
?? ??? ?}
?? ??? ?if (t == 1)
?? ??? ?{
?? ??? ??? ?printf("教師信息寫入完成\n");
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("教工考勤信息寫入失敗\n");
?? ??? ?}
?? ?}
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論