91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++怎么實現教工考勤信息管理系統

發布時間:2022-05-17 09:26:42 來源:億速云 閱讀:192 作者:iii 欄目:開發技術

這篇“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");
        }
    }
}

以上就是關于“C++怎么實現教工考勤信息管理系統”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

安陆市| 饶平县| 南华县| 隆尧县| 连城县| 邓州市| 昌江| 庆云县| 屏东市| 黄石市| 策勒县| 大悟县| 舟曲县| 肇源县| 闽清县| 扶沟县| 岑巩县| 阿图什市| 龙海市| 宜宾市| 瓮安县| 宜良县| 杂多县| 札达县| 建水县| 新田县| 孟州市| 舞阳县| 南涧| 平远县| 安福县| 庆安县| 克东县| 前郭尔| 眉山市| 故城县| 鹤峰县| 运城市| 洞口县| 洛川县| 兴安盟|