大学生考勤系统再升级--增加老师信息 获取系统时间版本

时间:2024-06-13 20:47:26

实现的主要功能是:

新设密码功能,只有输入正确密码方可进入真正的大学生考勤系统,以此和网上搜到的大学生考勤系统做区分

a 新增学生和老师信息数据(学生姓名,辅导员老师姓名,班级,考勤结果)

考勤时间从系统自动获取

b 查找数据(可按学号、姓名、考勤日期等查找)。

c 修改学生记录(可以先查找,再修改)。

d 删除学生记录(请参考上面修改的处理)。

e 显示学生考勤数据列表(可显示部分或全部)。

f 排序(可按学号、姓名、考勤日期等排序)。

g 数据统计(对考勤数据统计分析,统计完成后,可以通过考勤系统中得出考勤明细表,考勤日报表、考勤汇总表、考勤异常表,请假汇总表等)。

h 保存数据到文件中并从文件中读入数据。&num);

有需要完整源码的私信联系我

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <stdbool.h> // 添加头文件以使用布尔类型
#include <time.h>
#define maxsize 15
#define maxnum 1000
typedef struct {
	char Teacher_Name[maxsize];
	char Name[maxsize];
	char Class_Number[maxsize];
	char Attandance_date[maxsize];
	char Attandance_Result[maxsize];
} student;
 
student Students[maxnum];

//下面是代码中包括的函数及其说明:

//读取并返回存储在文件 mima.txt 中的密码。
char *password():

//检查输入的密码是否与文件 mima.txt 中存储的密码匹配,返回 1 表示匹配,返回 0 表示不匹配。
int check(char *ps):

//修改文件 mima.txt 中的密码为新密码 nw。
void newpassword(char *nw):

//获取当前系统日期并将其格式化为字符串存储在 datetime_str 中。
void get_current_datetime(char *datetime_str, size_t max_len):

//等待用户按下回车键。
void wait_for_Enter():

//将日期字符串 str 转换为整数格式,以便进行比较。
int convert(char str[]):

//qsort 的比较函数,用于按日期对学生信息进行排序。
int compare_dates(const void *a, const void *b):

//将 b 学生信息复制到 a。
void copy(student *a, student *b):

//打印提示信息 pinfo,并读取用户输入存储到 desinfo 中。
void setInfo(char pinfo[], char desinfo[]):

//打印所有学生的详细信息。
void PrintAllInformation():

//打印所有学生的部分信息(姓名、考勤日期、考勤结果)。
void PrintPartInformation():

//添加学生信息,并记录当前日期为考勤日期。
void ADD():

//根据辅导员姓名、学生姓名或考勤日期查找学生信息。
void Find():

//修改系统中已有的学生信息,支持按辅导员姓名、学生姓名或考勤日期进行修改。
void Change():

//根据辅导员姓名或学生姓名删除学生信息。
void Delete():

//根据用户选择,打印部分或全部学生信息。
void Print():

//交换两个学生的所有信息。
void exchange(student *a, student *b):

//根据辅导员姓名、学生姓名或考勤日期对学生信息进行排序并打印。
void Order():

//打印考勤明细表,并生成相应的 CSV 文件。
void Detail_Print():

//打印指定日期的考勤日报表,并生成相应的 CSV 文件。
void Daily_Print():

//打印考勤异常表(考勤结果不是“出勤√”的学生),并生成相应的 CSV 文件。
void Informal_Print():

//打印请假汇总表(考勤结果为“事假▲”或“病假O”的学生),并生成相应的 CSV 文件。
void AskForLeave_Print():

//根据用户选择,打印考勤明细表、考勤日报表、考勤异常表或请假汇总表。
void Statistics():

//主函数,处理密码验证、菜单显示和调用相应的功能函数。
int main(){
int i, a, b = 1;
	char str[10];
	int k=0,j=0;
	char nw[50];
	char password[50];
	printf("-----------请输入密码(初始密码123456)----------\n");
	while((str[k]=_getch())!='\r')
	{
		printf("*");
		k++;
	}
	str[k]='\0';
	if(check(str))
 {

	printf("\n密码正确\n");
	system("cls");
	FILE *fp= fopen("exist.txt", "at+");
	if (!fp) {
		printf("错误!未能打开文件\n");
		exit(0);
	}
	fscanf(fp, "%d", &num);//读入已经在系统中的学生的个数 
	printf("当前系统中储存的学生个数:%d人\n", num);
	for (i = 0; i < num; i++) {//读入系统中学生的信息 
		fscanf(fp, "%s%s%s%s%s", &Students[i].Teacher_Name, &Students[i].Name, &Students[i].Class_Number, &Students[i].Attandance_date, &Students[i].Attandance_Result);
	}
	fclose(fp);
	while (b != 0) {
		printf("==========================================================\n");
		printf("===================1.新增学生数据=========================\n");
		printf("===================2.查找学生数据=========================\n");
		printf("===================3.修改学生记录=========================\n");
		printf("===================4.删除学生记录=========================\n");
		printf("===================5.显示学生考勤的数据列表===============\n");
		printf("===================6.对指定数据进行排序===================\n");
		printf("===================7.进行数据统计=========================\n");
		printf("===================8.修改密码=============================\n");
		printf("===================9.退出系统=============================\n");
		scanf("%d", &a);
		switch (a) {
			case 1:
				ADD();
				break;
			case 2:
				Find();
				break;
			case 3:
				Change();
				break;
			case 4:
				Delete();
				break;
			case 5:
				Print();
				break;
			case 6:
				Order();
				break;
			case 7:
				Statistics();
				break;
			case 8:
				printf("请输入新的密码\n");
				scanf("%s",nw);
				newpassword(nw);
				break; 
			case 9:
				printf("已退出\n");
				b = 0;
				break;
		}
		system("cls");//清屏函数,为了使界面更加美观 
	}
	//在最后把信息输入到文件,保留以备下次运行使用
     ......