You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

371 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include"stdio.h"
#include"string.h"
#define N 100
#define NULL 0
int n,m=0;//n为记录学生的个数m为统计函数1中记录符合统计条件的个数
struct kuangke
{//有关旷课统计函数1的信息记录
char name[40];
int kuangke_num;
}kuangke[N];
struct kuangke2
{//有关旷课统计函数2的信息记录
char name[40];
int num;
}kuangke2[N];
struct kuangke temp;//旷课信息交换
struct kuangke2 temp2;//旷课信息交换
struct Student
{//
int num;
char name[40];
char lesson_name[40];
char lesson_time[40];
float time;
int chidao_num;
int zaotui_num;
int qingjia_num;
int kuangke_num;
}stu[N];
void creat(void)
{//创建学生缺课记录
int i;
printf("\n请输入需要创建缺课信息的总学生数:\n");
scanf("%d",&n);
printf("\n请输入缺课学生信息 包括:\n");
printf("学号 姓名 课程名称 上课时间 缺课日期 迟到次数 早退次数 请假次数 旷课次数 \n");
printf("例如:\n08 张三丰 C语言课程设计 三、四节 6.10 \t1 \t0 \t0 \t0\n\n");
for(i=0;i<n;i++)
{
printf("\n请输入第%d位同学信息\n",i+1);
scanf("%d%s%s%s%f%d%d%d%d",&stu[i].num,stu[i].name,stu[i].lesson_name,stu[i].lesson_time,&stu[i].time,&stu[i].chidao_num,&stu[i].zaotui_num,&stu[i].qingjia_num,&stu[i].kuangke_num);
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("第%d位同学信息为\n\n",i+1);
printf("\t学号\t姓名\t课程名称\n");
printf("\t%d\t%s\t%s\n\n",stu[i].num,stu[i].name,stu[i].lesson_name);
printf("\t上课时间\t缺课日期\n");
printf("\t%s\t%0.2f\n\n",stu[i].lesson_time,stu[i].time);
printf("\t迟到次数 早退次数 请假次数 旷课次数\n");
printf("\t%d\t\t%d\t%d\t\t%d\n\n",stu[i].chidao_num,stu[i].zaotui_num,stu[i].qingjia_num,stu[i].kuangke_num);
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
}
void xiugai(void)
{//修改学生缺课记录
int i,k,flag=0;
int num;
printf("\n请输入需要修改信息的学号\n");
scanf("%d",&num);
for(i=0;i<n;i++)
{//检测是否有符合的数据;
if(num==stu[i].num)
{
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("%d号学生的信息为\n\n",num);
printf("\t学号\t姓名\t课程名称\n");
printf("\t%d\t%s\t%s\n\n",stu[i].num,stu[i].name,stu[i].lesson_name);
printf("\t上课时间\t缺课日期\n");
printf("\t%s\t%0.2f\n\n",stu[i].lesson_time,stu[i].time);
printf("\t迟到次数 早退次数 请假次数 旷课次数\n");
printf("\t%d\t\t%d\t%d\t\t%d\n",stu[i].chidao_num,stu[i].zaotui_num,stu[i].qingjia_num,stu[i].kuangke_num);
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
for(;k!=9;)
{//修改信息菜单
printf("\n请选择需要修改的项目:\n\n");
printf("\t1.学生姓名\t2.课程名称\t3.上课时间\n\n\t4.缺课日期\t5.迟到次数\t6.早退次数\n\n\t7.请假次数\t8.旷课次数\t9.退出\n");
scanf("%d",&k);
if(i<0||i>=50)
break;
printf("\n请输入修改信息:");
switch(k)
{
case 1:scanf("%s",stu[i].name);break;
case 2:scanf("%s",stu[i].lesson_name);break;
case 3:scanf("%s",stu[i].lesson_time);break;
case 4:scanf("%f",&stu[i].time);break;
case 5:scanf("%d",&stu[i].chidao_num);break;
case 6:scanf("%d",&stu[i].zaotui_num);break;
case 7:scanf("%d",&stu[i].qingjia_num);break;
case 8:scanf("%d",&stu[i].kuangke_num);break;
case 9:break;
default:printf("无该菜单选项,请重新输入\n\n");
}
printf("\n修改后的信息为:\n");
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("%d号学生的信息为\n\n",num);
printf("\t学号\t姓名\t课程名称\n");
printf("\t%d\t%s\t%s\n\n",stu[i].num,stu[i].name,stu[i].lesson_name);
printf("\t上课时间\t缺课日期\n");
printf("\t%s\t%0.2f\n\n",stu[i].lesson_time,stu[i].time);
printf("\t迟到次数 早退次数 请假次数 旷课次数\n");
printf("\t%d\t\t%d\t%d\t\t%d\n",stu[i].chidao_num,stu[i].zaotui_num,stu[i].qingjia_num,stu[i].kuangke_num);
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
}
else//未检测到信息时记录并提示错误信息;
flag++;
if(flag==n)
printf("\n输入信息有误\n\n");
}
}
void intfac(void)
{//整型类数据查询
int num,i,flag=0;
scanf("%d",&num);
for(i=0;i<n;i++)
{//检测是否有符合的数据
if(num==stu[i].num)
{
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("%d号学生的信息为\n\n",num);
printf("\t学号\t姓名\t课程名称\n");
printf("\t%d\t%s\t%s\n\n",stu[i].num,stu[i].name,stu[i].lesson_name);
printf("\t上课时间\t缺课日期\n");
printf("\t%s\t%0.2f\n\n",stu[i].lesson_time,stu[i].time);
printf("\t迟到次数 早退次数 请假次数 旷课次数\n");
printf("\t%d\t\t%d\t%d\t\t%d\n",stu[i].chidao_num,stu[i].zaotui_num,stu[i].qingjia_num,stu[i].kuangke_num);
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
else
flag++;
}
if(flag==n)
printf("\n输入信息有误\n\n");
}
void stringfac1(void)
{//字符型数据查询
int i,flag=0;
char string[40];
scanf("%s",string);
for(i=0;i<n;i++)
{//检测是否有符合的数据
if(strcmp(string,stu[i].name)==0)//字符串比较
{
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("%d号学生的信息为\n\n",stu[i].num);
printf("\t学号\t姓名\t课程名称\n");
printf("\t%d\t%s\t%s\n\n",stu[i].num,stu[i].name,stu[i].lesson_name);
printf("\t上课时间\t缺课日期\n");
printf("\t%s\t%0.2f\n\n",stu[i].lesson_time,stu[i].time);
printf("\t迟到次数 早退次数 请假次数 旷课次数\n");
printf("\t%d\t\t%d\t%d\t\t%d\n",stu[i].chidao_num,stu[i].zaotui_num,stu[i].qingjia_num,stu[i].kuangke_num);
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
else
flag++;
}
if(flag==n)
printf("\n输入信息有误\n\n");
}
void stringfac2(void)
{//字符型数据查询
int i,flag=0;
char string[40];
scanf("%s",string);
for(i=0;i<n;i++)
{//检测是否有符合的数据
if(strcmp(string,stu[i].lesson_name)==0)
{
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("%d号学生的信息为\n",stu[i].num);
printf("\t学号\t姓名\t课程名称\n");
printf("\t%d\t%s\t%s\n\n",stu[i].num,stu[i].name,stu[i].lesson_name);
printf("\t上课时间\t缺课日期\n");
printf("\t%s\t%0.2f\n\n",stu[i].lesson_time,stu[i].time);
printf("\t迟到次数 早退次数 请假次数 旷课次数\n");
printf("\t%d\t\t%d\t%d\t\t%d\n",stu[i].chidao_num,stu[i].zaotui_num,stu[i].qingjia_num,stu[i].kuangke_num);
printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
else
flag++;
}
if(flag==n)
printf("\n输入信息有误\n\n");
}
void chaxun(void)
{//缺课信息查询
int k;
do
{
printf("\n*******************************************************************\n");
printf("\n请选择查询项目\n\n");
printf("\t1.按学号查询\t2.按姓名查询\n\n\t3.按课程名查询\t4.退出查询菜单\n\n");
printf("\n*******************************************************************\n");
scanf("%d",&k);
switch(k)
{
case 1:printf("\n请输入学生学号:");intfac();break; //整型数据查询(学号)
case 2:printf("\n请输入学生姓名:");stringfac1();break; //数据类型1查询 (姓名 字符串)
case 3:printf("\n请输入课程名称:");stringfac2();break; //数据类型2查询 (课程名称 字符串
case 4:break;
default:printf("无此菜单选项,请重新输入\n\n");
}
}while(k!=4);
}
void tongji1printf(void)
{
int i,j;
printf("\n统计后的结果为:\n\n");
printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("\t缺课学生姓名\t旷课次数\n\n");
for(i=0;i<=m;i++)
for(j=i+1;j<=m+1;j++) //统计1 学生的旷课次数的排序 旷课多--->旷课少
{
if(kuangke[i].kuangke_num<kuangke[j].kuangke_num)
{
temp=kuangke[i];
kuangke[i]=kuangke[j];
kuangke[j]=temp;
}
}
for(i=0;i<=m;i++)
printf("\t%s\t\t%d\n",kuangke[i].name,kuangke[i].kuangke_num);
printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
void tongji2printf(void) //统计2
{
int i,k,j;
printf("\n请输入课程门数:\n");
scanf("%d",&k);
for(i=0;i<k;i++)
{
printf("\n请输入第%d门课程的名称\n",i+1);
scanf("%s",kuangke2[i].name);
kuangke2[i].num=0;
printf("\n第%d门课程名称为%s\n",i+1,kuangke2[i].name); ///旷的课的课名
}
for(j=0;j<k;j++) ///k为课程门数
{//统计符合检测信息的个数
for(i=0;i<=m;i++) // m为计数的变量 在执行这个函数前 已经令 m=k了
{
if(strcmp(kuangke2[j].name,kuangke[i].name)==0) //如果输入的课程名称是 有学生旷课的课程
{
kuangke2[j].num=kuangke2[j].num+kuangke[i].kuangke_num;
}
}
}
for(i=0;i<k;i++)//按从大到小排序
for(j=i+1;j<k+1;j++)
{
if(kuangke2[i].num<kuangke2[j].num)
{
temp2=kuangke2[i];
kuangke2[i]=kuangke2[j];
kuangke2[j]=temp2;
}
}
printf("\n统计后的结果为:\n\n");
printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
for(j=0;j<k;j++)
{
printf("\t课程名称\t旷课人次\n\n");
printf("\t%s\t\t%d\n",kuangke2[j].name ,kuangke2[j].num);
}
printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
void tongjifac1(void)
{//信息检索
float time1,time2;
int i,flag=0,k;
printf("请输入起始时间和终止时间\n");
scanf("%f%f",&time1,&time2);
for(i=0,k=0;i<n;i++)
{
if(stu[i].time>=time1&&stu[i].time<=time2)
{
if(stu[i].kuangke_num>0)
{
strcpy(kuangke[k].name,stu[i].name);
kuangke[k].kuangke_num=stu[i].kuangke_num;
m=k;
k++;
}
else
flag++;
}
}
if(flag==n)
printf("\n输入信息有误\n\n");
else
tongji1printf();
}
void tongjifac2(void)
{//信息检索
float time1,time2;
int i,flag=0,k;
printf("请输入起始时间和终止时间\n");
scanf("%f%f",&time1,&time2);
for(i=0,k=0;i<n;i++)
{
if(stu[i].time>=time1&&stu[i].time<=time2)
{
if(stu[i].kuangke_num>0)
{
strcpy(kuangke[k].name,stu[i].lesson_name);
kuangke[k].kuangke_num=stu[i].kuangke_num;
m=k;
k++;
}
else
flag++;
}
}
if(flag==n)
printf("\n输入信息有误\n\n");
else
tongji2printf();
}
void tongji(void)
{//统计缺课情况
int k;
do
{
printf("\n*******************************************************************\n");
printf("请选择统计项目\n\n");
printf("\n\t1.统计某段时间内,旷课学生姓名及旷课次数。\n");
printf("\n\t2.统计某段时间内,有学生旷课的课程及旷课人次。\n");
printf("\n\t3.退出统计菜单\n");
printf("\n*******************************************************************\n");
scanf("%d",&k);
switch(k)
{
case 1:tongjifac1();break;
case 2:tongjifac2();break;
case 3:break;
default:printf("\n\n无此菜单选项,请重新选择\n");
}
}while(k!=3);
}
int main(void)
{
struct Student *head;
int n;
printf("\t\t\t欢迎使用学生考勤管理系统\n\n");
printf("\t\t\t请统计好要输入的学生的个数\n\n");
printf("\t\t\t并一次性输入所有的数据\n\n");
printf("\t\t\t注意;本系统只能暂时保存数据\n\n");
printf("\t\t\t所有数据不写入文档,请做好备份\n\n");
do
{
printf("********************************************************************************\n\n");
printf("\t\t\t1.创建学生缺课记录\n\n");
printf("\t\t\t2.修改学生缺课记录\n\n");
printf("\t\t\t3.查询学生缺课记录\n\n");
printf("\t\t\t4.统计学生缺课记录\n\n");
printf("\t\t\t5.退出统一考勤管理系统\n\n");
printf("********************************************************************************\n");
scanf("%d",&n);
switch(n)
{
case 1:creat();break;
case 2:xiugai();break;
case 3:chaxun();break;
case 4:tongji();break;
case 5:break;
default:printf("无该菜单选项,请重新选择。\n\n");
}
}while(n!=5);
}