题目要求:
文章来源地址https://www.toymoban.com/news/detail-505859.html
代码实现如下:
在这里插入代码片
#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);
}
}
文章来源:https://www.toymoban.com/news/detail-505859.html
到了这里,关于C语言实现学生考勤管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!