C语言编写的学生考勤信息管理系统

本文介绍如何使用C语言开发一个学生考勤信息管理系统,包括数据结构设计、功能模块如添加、删除、查询和统计考勤记录的实现,以及程序的编译与调试过程。
摘要由CSDN通过智能技术生成
						录入信息需要先后顺序,不然可能有BUG
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include<conio.h>
#include <windows.h>
struct  student
{
   
	char name[16];            //姓名
	char ID[10];              //学号
	int classes;              //班级 
	char speciality[16];      //专业 
	char phone[16];           //电话
	int age;                  //年龄 
	int year;                 //出生日期--年
	int month;                //出生日期--月
	int day;                  //出生日期--日
	char dormitory[10];       //宿舍
	int QQ;                   //QQ 
	int math[10];			  //下标决定第几次考勤,数组内容是考勤情况(1-正常 2-迟到 3-早退 4-旷课)
	int english[10];
	int c[10];
}stu[100];
struct subject
{
   
	char course_number[10];   //课程编号  
	char course_name[10];     //课程名称
	int course_score;         //课程学分
	char teacher_name[10];    //任课教师 
	char time[16];           //上课时间 
	int class_times;          //上课次数
	char class_place[10];     //上课地点 
	struct student Student;
}sub[100];
int e=0; 
int main();
void backup();
void student();
void student_information();
void student_information_enter();
void student_information_search();
void student_information_delete();
void student_information_enter_1();
void student_information_enter_2();
void student_information_search_all();
void student_information_search_ID();
void student_information_search_name();
void student_information_delete_ID();
void student_information_delete_name();
void student_attendance();
void student_attendance_enter();
void student_attendance_search();
void student_attendance_search_name();
void student_attendance_search_ID();
void course();
void course_enter();
void course_search();
void course_search_all();
void course_search_coursename();
void course_search_teachername();
void color(short x);
void color(short x) //自定义函根据参数改变颜色   
{
     
    if(x>=0 && x<=15)//参数在0-15的范围颜色  
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);    //只有一个参数,改变字体颜色   
    else//默认的颜色白色  
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);  
}  
int main()
{
   
	if(e==0)
	{
   
		e++;
		printf("\n\n\n\n\n\t\t         ※欢迎进入学生考勤系统             \n");
color(10);
		printf("\n\n\n\t\t\t\t\t\t\t\tby xxxx大学xx级计科x班");color(16);
		Sleep(2000);
	}
	system("cls");
	char i;
	while(1)
	{
   
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨           1.学生           丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨           2.课程           丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨           3.备份           丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨           4.退出           丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
 		switch (i)
		{
   
			case '1': student(); 									    break;
			case '2': course();	    						        	break;
			case '3': backup(); 	     							    break;
			case '4':				 									break;		
			default: printf("\t\t你输入的数字错误,	请重新输入!\n");   break;
		}		
		if (i=='4')
		{
   
			system("cls");
			color(7);
			printf("\n\n\n\n\n\n\n\n\t\t\t即将退出退出系统,欢迎下次使用!\n");
			break;
		}
	}
	Sleep(1500);
	system("pause");
	exit(0);
	return 0;
}
void student()
{
   
	system("cls");
	char i;
	while(1)
	{
   
color(15);		
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨         1.学生信息         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨         2.学生考勤         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨         3.主菜单           丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
		switch(i)
		{
   
			case '1':student_information();   		   		      break;//学生信息操作 
			case '2':student_attendance();    		 		      break;//学生考勤操作
			case '3':                        						  break;//返回主菜单
			default:printf("\t\t您输入的数字错误,请重新输入!\n");	  break; //出错提示
		}
		if(i=='3')	
			break;
	}
	main();
}
void student_information()
{
   
	system("cls");
	char i;
	while(1)
	{
   
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        1.学生信息录入      丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        2.学生信息查询      丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        3.学生信息删除      丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨        4.上一级菜单        丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
		switch(i)
		{
   
			case '1':student_information_enter();   		   	   break;//学生信息录入 
			case '2':student_information_search();    		   break;//学生信息查询 
			case '3':student_information_delete();               break;//学生信息删除
			case '4': 										   break;//返回上一级菜单 
			default:printf("\t\t您输入的数字错误,请重新输入!\n"); break;//出错提示 
		}
		if(i=='4')	
			break;
	}
	student();
}
void student_information_enter()
{
   
	char i;
	system("cls");
	while(1)
	{
   
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨  1.学生信息全部清零再录入  丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨  2.学生信息追加录入        丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨  3.上一级菜单              丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
		switch(i)
		{
   
			case '1':student_information_enter_1();   		   		  break;//生信息全部清零再录入 
			case '2':student_information_enter_2();    		 		  break;//学生信息追加录入
			case '3':                        							  break;//回上一级菜单 
			default:printf("\t\t您输入的数字错误,请重新输入!\n");		  break;//出错提示
		}
		if(i=='3')	
			break;
	}
	student_information();
}
void student_information_enter_1()
{
   
	int i;
	char k,j;
	FILE *fp;
	system("cls");
	printf("\n\n\n\n\n");
	if((fp=fopen("ARecord.txt","w"))==NULL)
	{
   
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_information_enter();
	}
	for(i=0,k='1';k=='1';i++)//k来判断是否继续录入学生信息 
	{
   
color(11);		
		for(j='0';j=='0';)//j来判断是否确定学生信息 
		{
   	
				printf("\t\t请输入第%d个学生的姓名:",i+1);
				scanf("%s",&stu[i].name);
				printf("\t\t请输入第%d个学生的学号:",i+1);
				scanf("%s",&stu[i].ID);
				printf("\t\t请输入第%d个学生的班级:",i+1);
				scanf("%d",&stu[i].classes);
				printf("\t\t请输入第%d个学生的专业:",i+1);
				scanf("%s",&stu[i].speciality);
				printf("\t\t请输入第%d个学生的电话:",i+1);
				scanf("%s",&stu[i].phone);
				printf("\t\t请输入第%d个学生的年龄:",i+1);
				scanf("%d",&stu[i].age);
				printf("\t\t请输入第%d个学生的出生日期(格式:年-月-日例如:2020 2 2):", i + 1);
				scanf("%d%d%d", &stu[i].year, &stu[i].month, &stu[i].day);
				printf("\t\t请输入第%d个学生的宿舍:",i+1);
				scanf("%s",&stu[i].dormitory);
				printf("\t\t请输入第%d个学生的QQ:",i+1);
				scanf("%d",&stu[i].QQ);
color(14);
				printf("\t\t请确定信息 (重输-0 确定-1):\n");
color(16);
				j=getch();
		}
		if(fwrite(&stu[i], sizeof(struct student),1,fp)!=1)
		{
   
			printf("文件写入错误\n");
			system("pause");
			student_information_enter();
		}
color(14);
		printf("\t\t是否继续输入下一个学生的信息  终止-0 继续-1:\n\n");
color(16);
		k=getch();
	}
color(16);
	fclose(fp);
color(4);
	printf("\n\t\t保存成功\n");
color(16);
	Sleep(1000);
	student_information_enter();
}
void student_information_enter_2()
{
   
	int i,t,x,m,f;
	char j,k;
	char student_name[16];
	FILE *fp;
	system("cls");
	printf("\n\n\n\n\n");
	if((fp=fopen("ARecord.txt","r"))==NULL)
	{
   
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_information_enter();
	}
	for (m=0;feof(fp)==0;m++)
	{
   
		fread(&stu[m], sizeof(struct student), 1, fp);  //读取文件内容
	}
color(11);
	for(i=m-1,k='1';k=='1';i++)//k来判断是否继续输入学生信息,i是读取数据之后数组的最后一个+1 
	{
   
		for(j='0',t=1;j=='0';)//j来判断是否确定学生信息 
		{
   	
				printf("\t\t请输入第%d个学生的姓名:",i+1);
				scanf("%s",&student_name);
				for(x=0;x<m;x++)
				{
   
					t=strcmp(stu[x].name,student_name);//对输入的学生姓名进行比较,得到下标 
					if(t==0)
					{
   
						printf("该生已存在!\n");//该学生已存在,返回 
						break;
					}			
				}
				strcpy(stu[i].name,student_name);
				printf("\t\t请输入第%d个学生的学号:",i+1);
				scanf("%s",&stu[i].ID);
				printf("\t\t请输入第%d个学生的班级:",i+1);
				scanf("%d",&stu[i].classes);
				printf("\t\t请输入第%d个学生的专业:",i+1);
				scanf("%s",&stu[i].speciality);
				printf("\t\t请输入第%d个学生的电话:",i+1);
				scanf("%s",&stu[i].phone);
				printf("\t\t请输入第%d个学生的年龄:",i+1);
				scanf("%d",&stu[i].age);
				printf("\t\t请输入第%d个学生的出生日期(格式:年-月-日例如:2020 2 2):", i + 1);
				scanf("%d%d%d", &stu[i].year, &stu[i].month, &stu[i].day);
				printf("\t\t请输入第%d个学生的宿舍:",i+1);
				scanf("%s",&stu[i].dormitory);
				printf("\t\t请输入第%d个学生的QQ:",i+1);
				scanf("%d",&stu[i].QQ);
color(14);
				printf("\t\t请确定信息 (重输-0 确定-1):\n");
color(16);
				j=getch();
		}
		if(t!=0)
		{
   
			if((fp=fopen("ARecord.txt","w"))==NULL)
			{
   
				printf("\t\t文件打开失败!\n");
				system("pause");			
				student_information_enter();
			}
			for(f=0;f<i;f++)
			{
   
				if(fwrite(&stu[f], sizeof(struct student),1,fp)!=1)
				{
   
					printf("\t\t文件写入错误\n");
					system("pause");
					student_information_enter();
				}
			}
		}
color(14);
		printf("\t\t是否继续输入下一个学生的信息  终止-0 继续-1:\n\n");
		k=getch();
color(16);
	}
color(16);
	fclose(fp);
color(4);
	printf("\n\t\t保存成功\n");
color(16);
	Sleep(1000);
	student_information_enter();
}
void student_information_search()
{
   
	char i;
	system("cls");
	while(1)
	{
   
color(15);
		printf("\n\n\n\n\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨       1.按学号查询         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨       2.按姓名查询         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨       3.查询所有人         丨\n");
		printf("\t\t丨                            丨\n");
		printf("\t\t丨       4.上一级菜单         丨\n");
		printf("\t\t丨                            丨\n");
color(16);
		i=getch();
		switch(i)	
		{
   
			case '1':student_information_search_ID();   		   break;//按学号查询 
			case '2':student_information_search_name();    	   	   break;//按姓名查询 
			case '3':student_information_search_all();             break;//查询所有人
			case '4': 										       break;//返回上一级菜单 
			default:printf("\t\t您输入的数字错误,请重新输入!\n");     break;//出错提示 
		}
		if(i=='4')	
			break;
	}
	student_information();
}
void student_information_search_name()
{
   
	system("cls");
	printf("\n\n\n\n\n");
	int i=0,j=0,t=1,k;
	char x='1';
	FILE *fp;
	char student_name[16] = {
    0 };
	if ((fp = fopen("ARecord.txt", "r")) == NULL)   //将文件内容读入内存
	{
   
		printf("\t\t文件打开失败!\n");
		system("pause");
		student_information_search();
	}
	for (i=0;feof(fp)==0;i++)
	{
   
		fread(&stu[i], sizeof(struct student), 1, fp);  //读取文件内容
	}
	while(x!='0')
	{
   
color(6);
		printf("\t\t请输入需要查询学生的姓名:");
		scanf("%s", &student_name);
		for (j=0,t=1;j<i;j++)
		{
   
			t=strcmp(stu[j].name,student_name);
			if(t==0)
			{
   
				break;	
			}	
		}
		if (t==0)   //查询成功
		{
   
			printf("姓名\t\t学号\t\t班级\t\t专业\t\t电话\t\t年龄\t\t生日\t\t宿舍\t\tQQ\n");
			printf("%s     \t%s \t%d \t\t%s \t\t%s \t%d \t\t%d.%d.%d \t%s \t%d\n",stu[j].name,stu[j].ID,stu[j].classes,stu[j].speciality,stu[j].phone,stu[j].age,stu[j].year,stu[j].month,stu[j].day,stu[j].dormitory,stu[j].QQ);
		}
		else
		{
   
color(12);
			printf("\t\t未找到该学生信息!\n");
color(16);
		}
color(14);
		printf("\t\t继续-1,退出-0\n");
color(16);
		x=getch(); 
	}
color(16);
	fclose(fp);
	student_information_search();
}
void student_information_search_ID()
{
   
	system("cls");
	printf("\n\n\n\n\n");
	int i=0,j=0,t=1;
	char x='1';
	FILE *fp;
	char student_ID[10] = {
    0 };
	if ((fp = fopen("ARecord.txt", "r")) == NULL)   //将文件内容读入内存
	{
   
		printf("\t\t文件打开失败!\n");
		system("pause");
		<
  • 15
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值