题目要求:

学生考勤管理系统java github 学生考勤管理系统源码_i++


学生考勤管理系统java github 学生考勤管理系统源码_算法_02

代码实现如下:

在这里插入代码片
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int number;//全局变量,记录全部人的个数
//结构体,定义单个学生的信息 
typedef struct student
{
	int year;
	int month;
	int day;
	int start;
	int end;
	char arr[10];
	char name[10];
	char type[10];
}Student;
Student *Input(Student *P,int num);
void Print();
void Change(struct student *P) ;
void Search(struct student *p);
void Sort(struct student *p);
void out(struct student *P);
int main()
{
	Student *P=NULL;
	Student *Pr=NULL;
	printf("============================================\n");
    printf("============================================\n");
    printf("============================================\n");
    printf("**************欢迎来到考勤系统**************\n");
    printf("============================================\n"); 
    printf("============================================\n");
    printf("============================================\n");
	printf(".............请按任意键进入考勤系统  .......\n");
    getchar();
    system("cls");//调用System输出函数 
    Print();
     while (1)
    {
        printf("请选择操作的命令:\n");
        int item, num;
        scanf("%d", &item);
        switch (item)
        {
        case 1:
            //录入信息
            {
                system("cls");
               	printf("请输入学生的总人数:");
 				
 				scanf("%d",&num);
                P = Input(Pr,num);
                out(P);
            }
            break;
        case 2:
            //修改学生信息
            {
                system("cls");
                Change(P);
            }
            break;
        case 3:
            //查询学生信息
            {
                system("cls");
                Search(P);
            }
            break;
		case 4:
			//排序
			{
			    system("cls");
				Sort(P);
			}
			break;
         case 5:
            //退出系统
            {
                //程序结束
                system("cls");
                exit(0);
            }
            break;
        default:
            printf("用户输入错误,请重新输入\n");
            break;
        }
    }
	if(P!=NULL)
	{
		free(P);
	}
    //return 0;
	
 } 
 //显示系统 
 void Print()
 {
 	printf("-------------------------------------------------\n");
    printf("-----------------学生管理系统--------------------\n");
    printf("-----------------1.录入学生信息------------------\n");
    printf("-----------------2.修改学生信息------------------\n");
    printf("-----------------3.查询学生信息------------------\n");
    printf("-----------------4.某段时间内旷课信息------------\n");
    printf("-----------------5.退出系统----------------------\n");
    
 }
 //输入学生信息 
 Student *Input(Student *P,int num)
 {
 	
 	//循环开辟空间,存储程序;
 	 P = (struct student *)malloc(sizeof(struct student) * num);
	 int i=0;
	 for(i=0;i<num;i++)
	 {
	 	printf("请输入第%d学生的出勤信息:\n",i+1);
 	 	printf("输入的格式是:缺课日期 第几节课 课程名称 学生姓名 缺课类型\n");
 		scanf("%d-%d-%d",&P[i].year,&P[i].month,&P[i].day);
 		scanf("%d-%d",&P[i].start,&P[i].end); 
 		scanf("%s%s%s",P[i].arr,P[i].name,P[i].type);
 		/*printf("请输入缺课日期如2022-1-2\n");
 		scanf("%d",&P[i].year);
 		printf("请输入缺课日期如2022-1-2\n");
 		scanf("%d",&P[i].month);
 		printf("请输入缺课日期如2022-1-2\n");
 		scanf("%d",&P[i].day);*/
 		//printf("请输入缺课的具体节数:\n");
 	//	scanf("%d-%d",P->start,P->end);
 	//	printf("请输入课程名称:\n");
	//	 scanf("%s",P->arr) ;
	//	 printf("请输入学生姓名:\n");
		// scanf("%s",P->name);
	//	 printf("请输入学生的缺课类型:\n");
	//	 scanf("%s",P->type);
	number++;
 	printf("此学生的信息已录入!录入的信息如下:\n");
 	printf("%d-%d-%d %d-%d %s %s %s\n",P[i].year,P[i].month,P[i].day,P[i].start,P[i].end,P[i].arr,P[i].name,P[i].type);
	  } 
 	printf("学生信息录入完毕!!!!!!!\n");
 	printf("%d个学生的信息如下:\n",number);
 	for(i=0;i<number;i++)
 	{
 		printf("%d-%d-%d %d-%d %s %s %s\n",P[i].year,P[i].month,P[i].day,P[i].start,P[i].end,P[i].arr,P[i].name,P[i].type);
	 }
    //system("cls");
    Print(); 
    return P;
 }
 //修改学生信息
 void Change(struct student *P) 
 {
 	char name[20];
 	printf("请输入要修改学生的名字:\n");
 	scanf("%s",name);
 	int i=0;
 	int a;
 	for(i=0;i<=number;i++)
 	{
 		if(strcmp(P[i].name,name)==0)
 		{
 			a=i;
 			break;
		 }
		 
	 }
	 if(a==i)
	 {
	 	printf("请您对%s同学的出勤情况做一个修改:\n",P[a].name);
	 	printf("输入的格式是:缺课日期 第几节课 课程名称 学生姓名 缺课类型\n");
 		scanf("%d-%d-%d",&P[i].year,&P[i].month,&P[i].day);
 		scanf("%d-%d",&P[i].start,&P[i].end); 
 		scanf("%s%s%s",P[i].arr,P[i].name,P[i].type);
	 	
	 }
	 else
	 printf("对不起没有要修改的学生信息!\n");
	 printf("%s同学修改后的个人信息如下:\n",P[i].name);
	printf("%d-%d-%d %d-%d %s %s %s\n",P[i].year,P[i].month,P[i].day,P[i].start,P[i].end,P[i].arr,P[i].name,P[i].type);	
	Print();
	
 	
 }
 //查询学生的出勤信息
  void Search(struct student *p)
  {
  	printf("请输入要查询的学生姓名:\n");
  	char name[20];
  	scanf("%s",&name);
  	int i=0,num=0;
  	for(i=0;i<number;i++)
  	{
  		if(strcmp(p[i].name,name)==0)
  		{
  			num=i;
  			break;
		  }
	  }
	  if(i==num)
	  {
	  		printf("缺课日期 第几节课 课程名称 学生姓名 缺课类型\n");
	  		printf("%d-%d-%d %d-%d %s %s %s\n",p[i].year,p[i].month,p[i].day,p[i].start,p[i].end,p[i].arr,p[i].name,p[i].type);
	  }
	  else
	  {
	  	printf("对不起,我们没有查询到此人的出勤信息!\n");
	  }
	  Print();
  }
  
  //冒泡排序-按照缺课的次数输出
  void name(struct student *A)
{
   struct student temp;
   int i=0,j=0;
   for( i=0;i<number-1;i++)
   {
   for( j=0;j<number-i-1;j++)
	   {
	    if(A[j].name[0]>A[j+1].name[0])
	   {
	   temp=A[j];
	   A[j]=A[j+1];
	   A[j+1]=temp;
	   }
       }
   }
   for(i=0;i<number;i++)
   {
   	printf("%d-%d-%d %d-%d %s %s %s\n",A[i].year,A[i].month,A[i].day,A[i].start,A[i].end,A[i].arr,A[i].name,A[i].type);
   }
}

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 //排序代码
 void Sort(struct student *p)
 {
 	//输入两个时间段
 	
 	struct student *A;
	  A = (struct student *)malloc(sizeof(struct student) * number);
	 int a,b,c,ae,be,ce;
	 printf("请输入开始查找日期:\n");
	 scanf("%d-%d-%d",&a,&b,&c);
	 printf("请输入截止日期:\n");
	 scanf("%d-%d-%d",&ae,&be,&ce);
	 int i=0;
	 for(i=0;i<number;i++)
	 {
	 	if(p[i].year<=ae&&p[i].year>=a)//年份优先,然后是月,然后是具体的某一天
			{
				if(p[i].month<=be&&p[i].month>=b)
				{
					if(p[i].day<=ce&&p[i].day>=c)
					{
						A[i].year=p[i].year;
						A[i].month=p[i].month;
						A[i].day=p[i].day;
						A[i].start=p[i].start;
						A[i].end=p[i].end;
						strcpy(A[i].arr,p[i].arr);
						strcpy(A[i].name,p[i].name);
						strcpy(A[i].type,p[i].type);//复制到新的数组中去 
					}
				}
			  }	  
	  } 
	  //调用排序函数输出排序结果 
	  name(A) ;
	  
	  
   }
//输出总结果
void out(struct student *P)
{
	int i=0;
	printf("以下是%d个学生的出勤信息:\n",number);
	for(i=0;i<number;i++)
	{
	printf("%d-%d-%d %d-%d %s %s %s\n",P[i].year,P[i].month,P[i].day,P[i].start,P[i].end,P[i].arr,P[i].name,P[i].type);	
	}
 }