日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言實現考勤管理系統_C 語言

作者:我是一個粉刷匠1 ? 更新時間: 2022-04-30 編程語言

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

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

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

本程序由visual studio 2017編寫

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

#define _CRT_SECURE_NO_WARNINGS
#define N 1000
#define M 100
#include
#include
#include
struct kaoqing {
?? ?//int total;//曠課總節數
?? ?int number;// 曠課的第幾節
?? ?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;//每個學生的曠課總節數,曠課次數
};
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= 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節課 ?%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節課 %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("請輸入統計時間段的起點時間:");
?? ?scanf("%d%d%d", &by, &bm, &bd);
?? ?printf("請輸入統計時間段的終點時間:");
?? ?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 ? 曠課次數%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節課 ?%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("請輸入想修改記錄的時間和節數:");
?? ?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("請輸入缺課課程為當日第幾節:");
?? ??? ??? ?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("修改失敗!請聯系管理員進行錯誤排查!");
?? ?}
}
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節課 %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;// 曠課的第幾節
?? ?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;// 曠課的第幾節
?? ?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("數據讀入失敗!請聯系管理員進行錯誤排查!");
?? ??? ?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("學生姓名數組初始化成功!\n");
?? ??? ?}
?? ??? ?
?? ??? ?if (!a_c) {
?? ??? ??? ?printf("%d\n", *z);
?? ??? ??? ?printf("課程名稱數組初始化成功!\n");
?? ??? ?}*/

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

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

?? ?if ((fp = fopen("INFO.txt", "w")) == NULL) {
?? ??? ?printf("數據讀入失敗!請聯系管理員進行錯誤排查!");
?? ??? ?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;//記錄數組的控制數
?? ?int m = *z;//學生數組的控制數
?? ?int o = *z;//課程數組的控制數
?? ?printf("請依次輸入學生的缺課情況:");
?? ?printf("請輸入缺課日期,格式為年 月 日:");
?? ?scanf("%d%d%d", &K[n].year, &K[n].month, &K[n].day);
?? ?printf("請輸入缺的課程為當日第幾節:");
?? ?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(" ? ? ? ? ? ?** ? ? ? ? ? ? ? -------歡迎使用考勤管理系統------ ? ? ? ? ? ? ? ? ? ? **\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.退出系統 ? ? ? ?]\n\n");
?? ??? ?printf("請輸入需要使用的功能數字:");
?? ??? ?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;
}

原文鏈接:https://blog.csdn.net/weixin_46497661/article/details/118479367

欄目分類
最近更新