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

C語言實現(xiàn)考勤管理系統(tǒng)

 更新時間:2022年02月28日 08:50:26   作者:我是一個粉刷匠1  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)考勤管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

這些天因為補修c語言課設,在花費了一段時間后寫完了這個課設,課設的要求如下:

考勤信息記錄了學生的缺課情況,它包括:缺課日期、第幾節(jié)課、課程名稱、學生姓名、缺課類型(遲到、早退、請假及曠課)。試設計一考勤管理系統(tǒng),使之能提供以下功能:

(1) 錄入學生的缺課記錄;
(2) 修改某個學生的缺課記錄;
(3) 查詢某個學生的缺課情況;
(4) 統(tǒng)計某段時間內,曠課學生姓名及曠課次數(shù),按曠課次數(shù)由多到少排序;
(5) 統(tǒng)計某段時間內,有學生曠課的課程及曠課人次,按曠課人次由多到少排序;
(6) 系統(tǒng)以菜單方式工作。

本程序由visual studio 2017編寫

我會先將程序放上來然后后面慢慢加注釋,程序的大概思路是設計三個結構體,考勤信息結構體負責保存每一條缺課信息,其中包括學生信息和課程信息,每次添加考勤信息的時候,剩下的兩個學生和課程結構體會自動從里面添加所需要的信息,整個程序的功能實現(xiàn)也是建立在三個結構體的基礎上的。

#define _CRT_SECURE_NO_WARNINGS
#define N 1000
#define M 100
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct kaoqing {
?? ?//int total;//曠課總節(jié)數(shù)
?? ?int number;// 曠課的第幾節(jié)
?? ?char coure_name[20];//課程名稱
?? ?char stu_name[20];//學生名字
?? ?char type[20];//課程類型
?? ?int year;
?? ?int month;
?? ?int day;
};
struct stu {
?? ?char stu_name2[20];
?? ?int num;//每個學生的曠課總節(jié)數(shù),曠課次數(shù)
};
struct course {
?? ?char coure_name2[20];//課程名稱
?? ?int num;//本門課程曠課人次
};
struct kaoqing K[N+1]= { 0 };
struct stu S[M + 1] = { 0 };
struct course C[M + 1] = { 0 };
int add_course(char name[], int *t)
{
?? ?int z = *t;
?? ?int i = 1;
?? ?int flag = 0;
?? ?for (; i < z; i++) {
?? ??? ?if (strcmp(C[i].coure_name2, name) == 0) {
?? ??? ??? ?flag = 1;
?? ??? ?}
?? ?}
?? ?if (flag) {
?? ??? ?return 1;//
?? ?}
?? ?strcpy(C[i].coure_name2, name);
?? ?++(*t);
?? ?return 0;
}
int add_stu(char name[],int *t)
{
?? ?int m = *t;
?? ?int i = 1;
?? ?int flag = 0;
?? ?for(;i<m;i++) {
?? ??? ?if (strcmp(S[i].stu_name2, name) == 0) {
?? ??? ??? ?flag = 1;
?? ??? ?}
?? ?}
?? ?if (flag) {
?? ??? ?return 1;//
?? ?}
?? ?strcpy(S[i].stu_name2, name);
?? ?++(*t);
?? ?return 0;
}
void Coure_show(int n,int m)
{
?? ?int imax; int temp;
?? ?int i = 1, j = 1;
?? ?int by, bm, bd, ey, em, ed;
?? ?for (; i < n; i++) {
?? ??? ?printf("%s缺課日期:%d年%d月%d日 第%d節(jié)課 %s %s\n", K[i].stu_name, K[i].year, K[i].month, K[i].day, K[i].number, K[i].coure_name, K[i].type);
?? ?}
?? ?printf("請輸入統(tǒng)計時間段的起點時間:");
?? ?scanf("%d%d%d", &by, &bm, &bd);
?? ?printf("請輸入統(tǒng)計時間段的終點時間:");
?? ?scanf("%d%d%d", &ey, &em, &ed);
?? ?i = 1; j = 1;
?? ?for (; i < m; i++) {
?? ??? ?for (j = 1; j < n; j++) {
?? ??? ??? ?if ((K[j].year >= by) && (K[j].year <= ey)) {
?? ??? ??? ??? ?if ((K[j].month >= bm) && (K[j].month <= em)) {
?? ??? ??? ??? ??? ?if ((K[j].day >= bd) && (K[j].day <= ed)) {

?? ??? ??? ??? ??? ??? ?if (strcmp(K[j].coure_name, C[i].coure_name2) == 0) {
?? ??? ??? ??? ??? ??? ??? ?++C[i].num;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?i = 1; j = 1;
?? ?for (; i < m; i++)
?? ?{
?? ??? ?imax = i;
?? ??? ?for (j = i + 1; j < m; j++)
?? ??? ?{
?? ??? ??? ?if (C[j].num > C[imax].num) {
?? ??? ??? ??? ?imax = j;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?temp = C[imax].num;
?? ??? ?C[imax].num = C[i].num;
?? ??? ?C[i].num = temp;
?? ?}
?? ?i = 1; j = 1;
?? ?printf("從%d年%d月%d日到%d年%d月%d日這段時間內,曠課情況如下:\n", by, bm, bd, ey, em, ed);
?? ?for (; i < m; i++) {
?? ??? ?//if (C[i].num > 0) {
?? ??? ??? ?printf("%s ? 曠課人次%d\n", C[i].coure_name2, C[i].num);
?? ??? ?//}
?? ??? ?for (j = 1; j < n; j++) {
?? ??? ??? ?if (strcmp(K[j].coure_name, C[i].coure_name2) == 0) {
?? ??? ??? ??? ?printf("缺課日期:%d年%d月%d日 ? 第%d節(jié)課 ?%s ? %s\n", K[j].year, K[j].month, K[j].day, K[j].number, K[j].stu_name, K[j].type);
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?i = 1;
?? ?for (; i < m; i++) {
?? ??? ?C[i].num = 0;
?? ?}
}
void Info_show(int n,int m)
{
?? ?int imax; int temp;
?? ?int i = 1,j=1;
?? ?int by, bm, bd,ey,em,ed;
?? ?for (; i < n; i++) {
?? ??? ??? ?printf("%s缺課日期:%d年%d月%d日 第%d節(jié)課 %s %s\n",K[i].stu_name,K[i].year, K[i].month, K[i].day, K[i].number, K[i].coure_name, K[i].type);
?? ?}
?? ?printf("請輸入統(tǒng)計時間段的起點時間:");
?? ?scanf("%d%d%d", &by, &bm, &bd);
?? ?printf("請輸入統(tǒng)計時間段的終點時間:");
?? ?scanf("%d%d%d", &ey, &em, &ed);
?? ?i = 1; j = 1;
?? ?for (; i < m; i++) {
?? ??? ?for (j=1; j < n; j++) {
?? ??? ??? ?if ((K[j].year >= by) && (K[j].year <= ey)) {//滿足年份則不需要管月份和日期
?? ??? ??? ??? ?if ((K[j].month >= bm) && (K[j].month <= em)) {//不滿足年份滿足月份則不需要管
?? ??? ??? ??? ??? ?if ((K[j].day >= bd) && (K[j].day <= ed)) {

?? ??? ??? ??? ??? ??? ?if (strcmp(K[j].stu_name,S[i].stu_name2)==0) {
?? ??? ??? ??? ??? ??? ??? ?++S[i].num;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?i = 1; j = 1;
?? ?for (; i < m; i++)
?? ?{
?? ??? ?imax = i;
?? ??? ?for (j = i + 1; j < m; j++)
?? ??? ?{
?? ??? ??? ?if (S[j].num > S[imax].num) {
?? ??? ??? ??? ?imax = j;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?temp = S[imax].num;
?? ??? ?S[imax].num = S[i].num;
?? ??? ?S[i].num = temp;
?? ?}
?? ?i = 1; j = 1;
?? ?printf("從%d年%d月%d日到%d年%d月%d日這段時間內,曠課情況如下:\n",by,bm,bd,ey,em,ed);
?? ?for (; i < m; i++) {
?? ??? ?if (S[i].num > 0) {
?? ??? ??? ?printf("%s ? 曠課次數(shù)%d\n", S[i].stu_name2, S[i].num);
?? ??? ?}
?? ??? ?for (j=1; j < n; j++) {
?? ??? ??? ?if (strcmp(K[j].stu_name, S[i].stu_name2) == 0) {
?? ??? ??? ??? ?printf("缺課日期:%d年%d月%d日 ? 第%d節(jié)課 ?%s ? %s\n", K[j].year, K[j].month, K[j].day, K[j].number, K[j].coure_name, K[j].type);
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?i = 1;
?? ?for (; i < m; i++) {
?? ??? ?S[i].num = 0;
?? ?}
}
void Info_change(int n)
{
?? ?char name[20];
?? ?int i=1;
?? ?int flag = 0;//記錄是否修改
?? ?int year, month, day, number;
?? ?printf("請輸入想修改的學生姓名:");
?? ?scanf("%s", name);
?? ?printf("請輸入想修改記錄的時間和節(jié)數(shù):");
?? ?scanf("%d%d%d%d", &year, &month, &day, &number);
?? ?for (; i < n; i++) {
?? ??? ?if ((strcmp(K[i].stu_name,name) == 0)&&((K[i].year==year)&&(K[i].month==month)&&(K[i].day==day)&&(K[i].number==number))) {
?? ??? ??? ?printf("請依次輸入新的該條信息!");
?? ??? ??? ?printf("請輸入缺課日期,格式為年 月 日:");
?? ??? ??? ?scanf("%d%d%d", &K[i].year, &K[i].month, &K[i].day);
?? ??? ??? ?printf("請輸入缺課課程為當日第幾節(jié):");
?? ??? ??? ?scanf("%d", &K[i].number);
?? ??? ??? ?printf("請輸入缺課課程名稱:");
?? ??? ??? ?scanf("%s", K[i].coure_name);
?? ??? ??? ?printf("請輸入缺課類型:");
?? ??? ??? ?scanf("%s", K[i].type);
?? ??? ??? ?printf("請輸入缺課學生姓名:");
?? ??? ??? ?scanf("%s", K[i].stu_name);
?? ??? ??? ?printf("修改成功!");
?? ??? ??? ?++flag;
?? ??? ?}
?? ?}
?? ?if (!flag) {
?? ??? ?printf("修改失敗!請聯(lián)系管理員進行錯誤排查!");
?? ?}
}
void Info_find(int n)
{
?? ?char name[20];
?? ?int i = 1;
?? ?printf("請輸入查找學生姓名:");
?? ?scanf("%s", name);
?? ?printf("%s的缺課情況如下:\n",name);
?? ?for (; i < n; i++) {
?? ??? ?if (strcmp(K[i].stu_name, name) == 0) {
?? ??? ??? ?printf("缺課日期:%d年%d月%d日 第%d節(jié)課 %s %s\n", K[i].year, K[i].month, K[i].day, K[i].number, K[i].coure_name, K[i].type);
?? ??? ?}
?? ?}
}
void Info_init(int *x,int *y,int *z)?
{
?? ?/*
?? ?int number;// 曠課的第幾節(jié)
?? ?char coure_name[20];//課程名稱
?? ?char stu_name[20];//學生名字
?? ?char type[20];//課程類型
?? ?int year;
?? ?int month;
?? ?int day;
?? ?*/
?? ?int a_s;
?? ?int a_c;
?? ?int X = *x;
?? ?int Y = *y;
?? ?int Z = *z;
?? ?int numbera;// 曠課的第幾節(jié)
?? ?char coure_namea[20];//課程名稱
?? ?char stu_namea[20];//學生名字
?? ?char typea[20];//課程類型
?? ?int yeara;
?? ?int montha;
?? ?int daya;
?? ?FILE *fp;
?? ?if ((fp = fopen("INFO.txt", "r")) == NULL) {
?? ??? ?printf("數(shù)據(jù)讀入失敗!請聯(lián)系管理員進行錯誤排查!");
?? ??? ?exit(0); ?//退出程序(結束程序)
?? ?}
?? ?while (fscanf(fp, "%d%s%s%s%d%d%d", &numbera, coure_namea, stu_namea, typea, &yeara, &montha, &daya) == 7) {
?? ??? ?K[*x].number = numbera;
?? ??? ?strcpy(K[*x].coure_name,coure_namea);
?? ??? ?strcpy(K[*x].stu_name, stu_namea);
?? ??? ?strcpy(K[*x].type, typea);
?? ??? ?K[*x].year = yeara;
?? ??? ?K[*x].month = montha;
?? ??? ?K[*x].day = daya;
?? ??? ?++(*x);
?? ??? ?printf("%d\n", *x);
?? ??? ?a_s = add_stu(stu_namea,y);
?? ??? ?a_c = add_course(coure_namea,z);
?? ??? ?/*if (!a_s) {
?? ??? ??? ?printf("%d\n", *y);
?? ??? ??? ?printf("學生姓名數(shù)組初始化成功!\n");
?? ??? ?}
?? ??? ?
?? ??? ?if (!a_c) {
?? ??? ??? ?printf("%d\n", *z);
?? ??? ??? ?printf("課程名稱數(shù)組初始化成功!\n");
?? ??? ?}*/

?? ?}
?? ?fclose(fp);

}
void Info_save(int n)
{
?? ?int i=1;
?? ?FILE * fp;

?? ?if ((fp = fopen("INFO.txt", "w")) == NULL) {
?? ??? ?printf("數(shù)據(jù)讀入失??!請聯(lián)系管理員進行錯誤排查!");
?? ??? ?exit(0); ?//退出程序(結束程序)
?? ?}
?? ?for (; i < n; i++) {
?? ??? ?fprintf(fp, "%d %s %s %s %d %d %d\n", K[i].number, K[i].coure_name, K[i].stu_name, K[i].type, K[i].year, K[i].month, K[i].day);
?? ?}
?? ?fclose(fp);
}
void Info_in(int *w,int *z,int *v)
{
?? ?char name[20];
?? ?char c_name[20];
?? ?int flag1, flag2;
?? ?int n = *w;//記錄數(shù)組的控制數(shù)
?? ?int m = *z;//學生數(shù)組的控制數(shù)
?? ?int o = *z;//課程數(shù)組的控制數(shù)
?? ?printf("請依次輸入學生的缺課情況:");
?? ?printf("請輸入缺課日期,格式為年 月 日:");
?? ?scanf("%d%d%d", &K[n].year, &K[n].month, &K[n].day);
?? ?printf("請輸入缺的課程為當日第幾節(jié):");
?? ?scanf("%d", &K[n].number);
?? ?printf("請輸入缺的課程的名稱:");
?? ?scanf("%s", K[n].coure_name);
?? ?strcpy(c_name, K[n].coure_name);
?? ?flag1 = add_course(c_name, v);
?? ?if (!flag1)
?? ?{
?? ??? ?printf("課程名稱添加成功");
?? ?}
?? ?printf("請輸入缺課的學生姓名:");
?? ?scanf("%s", K[n].stu_name);
?? ?strcpy(name, K[n].stu_name);
?? ?flag2=add_stu(name,z);
?? ?if (!flag2)
?? ?{
?? ??? ?printf("學生姓名添加成功");
?? ?}
?? ?printf("請輸入缺課類型:");
?? ?scanf("%s", K[n].type);
?? ?printf("添加成功!");
?? ?++(*w);
}
int main()
{
?? ?int X = 1; int Y = 1; int Z = 1;
?? ?Info_init(&X,&Y,&Z);
?? ?while (1)
?? ?{
?? ??? ?system("cls");
?? ??? ?int n;
?? ??? ?printf(" ? ? ? ? ? ?*************************************************************************\n");
?? ??? ?printf(" ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? **\n");
?? ??? ?printf(" ? ? ? ? ? ?** ? ? ? ? ? ? ? -------歡迎使用考勤管理系統(tǒng)------ ? ? ? ? ? ? ? ? ? ? **\n");
?? ??? ?printf(" ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? **\n");
?? ??? ?printf(" ? ? ? ? ? ?*************************************************************************\n\n");
?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?1.缺課信息登記 ? ?]\n\n");
?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?2.缺課信息修改 ? ?]\n\n");
?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?3.缺課信息查詢 ? ?]\n\n");
?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?4.曠課學生信息展示]\n\n");
?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?5.課程情況展示 ? ?]\n\n");
?? ??? ?printf("\t\t\t ? ? ? ? [ ? ?6.退出系統(tǒng) ? ? ? ?]\n\n");
?? ??? ?printf("請輸入需要使用的功能數(shù)字:");
?? ??? ?scanf("%d", &n);
?? ??? ?while (n < 1 || n > 7) {
?? ??? ??? ?printf("\n\n代碼輸入有誤,請您重新輸入:");
?? ??? ??? ?scanf("%d", &n);
?? ??? ?}
?? ??? ?switch (n) {
?? ??? ?case 1:Info_in(&X,&Y,&Z); break;
?? ??? ?case 2:Info_change(X); break;
?? ??? ?case 3:Info_find(X); break;
?? ??? ?case 4:Info_show(X,Y); break;
?? ??? ?case 5:Coure_show(X,Z); break;
?? ??? ?case 6:exit(0);
?? ??? ?}
?? ??? ?Info_save(X);
?? ??? ?system("pause");
?? ?}
?? ?return 0;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用

    詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用

    這篇文章主要介紹了詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用,是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • C++中點操作符和箭頭操作符的使用詳解

    C++中點操作符和箭頭操作符的使用詳解

    本篇文章介紹了,C++中點操作符和箭頭操作符的使用詳解。需要的朋友參考下
    2013-05-05
  • c++ 中__declspec 的用法詳解

    c++ 中__declspec 的用法詳解

    這篇文章主要介紹了c++ 中__declspec 的用法詳解,對初學者有一定的幫助,有需要的可以了解一下。
    2016-11-11
  • 基于C++編寫一個密碼系統(tǒng)

    基于C++編寫一個密碼系統(tǒng)

    這篇文章主要為大家詳細介紹了如何基于C++編寫一個簡單的密碼系統(tǒng),文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11
  • 一起聊聊C++中的智能指針

    一起聊聊C++中的智能指針

    C++?是手工管理內存的分配和釋放,這給了程序員極大的自由度也給了我們極高的門檻,弄不好就得內存泄露。使用智能指針能更好的管理堆內存,本文主要給大家介紹一下c++的智能指針,需要的朋友可以參考下
    2022-07-07
  • 一文掌握C++ const與constexpr及區(qū)別

    一文掌握C++ const與constexpr及區(qū)別

    C++ 11標準中,const 用于為修飾的變量添加“只讀”屬性而 constexpr關鍵字則用于指明其后是一個常量,編譯器在編譯程序時可以順帶將其結果計算出來,而無需等到程序運行階段,這樣的優(yōu)化極大地提高了程序的執(zhí)行效率,本文重點介紹C++ const與constexpr區(qū)別介紹,一起看看吧
    2024-02-02
  • Qt調用MATLAB引擎混合編程的過程詳解

    Qt調用MATLAB引擎混合編程的過程詳解

    這篇文章給大家介紹了Qt調用MATLAB引擎混合編程的全過程,文中通過圖文結合的方式給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 插入排序算法之希爾排序+直接插入排序

    插入排序算法之希爾排序+直接插入排序

    這篇文章主要介紹了插入排序算法之希爾排序+直接插入排序的相關知識,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • C++ 函數(shù)重載詳情介紹

    C++ 函數(shù)重載詳情介紹

    這篇文章主要介紹了C++ 函數(shù)重載詳情,函數(shù)重載還有一個別名叫函數(shù)多態(tài),函數(shù)多態(tài)是C++在C語言基礎上的新特性,它可以讓我們使用多個同名函數(shù),下面來看看文章具體內容的介紹
    2021-11-11
  • opencv實現(xiàn)顏色檢測

    opencv實現(xiàn)顏色檢測

    這篇文章主要為大家詳細介紹了opencv實現(xiàn)顏色檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評論