欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

战疫期间公司可用的员工签到与访客管理系统(c++版)

程序员文章站 2024-03-19 07:58:57
...

项目简介:

------怀着“战疫工作,必须从小事做起,从身边做起”的信念,我萌生了一个想法:我能不能利用我所学的专业知识为抗击疫情做点力所能及的事情呢?想到家里的公司开工在即,为了保证公司员工的安全,我想到了用c++写一个员工及访客管理系统以供保卫科使用。
-------这个系统名为“诚信装饰员工及访客管理系统”,这个系统分为两个部分,一个给经理使用,一个给保卫科管理员使用。管理员使用的部分一共有7项功能:添加员工记录、员工考勤管理、查询员工信息、全览员工记录、访客登记管理、查询访客信息和全览访客记录。保卫科管理员可以通过这个程序实现对员工的考勤以及体温记录,对访客的体温、来访时间以及来访目的记录和管理。一方面节省了记录纸张的使用,为保护环境做贡献,也在一定程度上简化和方面了员工与访客信息管理的工作,同时对于体温异常的员工和访客可以做出及时的应对。经理使用的部分有4项功能,分别是:查询员工信息、全览员工信息、查询访客信息和全览访客记录,通过这个程序经理可以通过保卫科管理员实时更新的员工记录信息和访客记录信息,做到对员工和访客信息的实时监控和管理,一定程度上为管理工作提供了方便,同时对于体温异常的员工和访客可以做出及时的应对。
------在2020年3月16日,我在公司完成了这个程序的安装,安装完毕后,我分别给经理、保卫科管理员和员工代表进行了讲解。经过我的讲解以后,他们都已经熟悉了程序的使用方法,并且当即投入了使用,以下是我收集的部分员工和访客数据:
战疫期间公司可用的员工签到与访客管理系统(c++版)
战疫期间公司可用的员工签到与访客管理系统(c++版)
-------晚上我去公司收集测试数据即员工体验时,经理、保卫科管理员以及部分员工对我的程序表示了肯定,但也提出了一些建设性的意见,比如说:操作界面略显简单、不能直接读取并记录电子温度计的温度信息等,这些建议我都会随着我的学习、知识的积累,慢慢地优化好程序,争取成为公司员工们心目中的好程序!
------希望能通过我的这个程序的使用,提醒公司的员工:虽然目前我国的疫情已有所好转,但依然不能放松警惕,心里依然要绷紧这根弦,一定要注意自我保护,不给国家添乱。同时我还希望通过公司的员工还能够把这个思想传递给他们身边的人们,从而能够引起尽可能多的人的重视!
------最后附上这个小程序的代码和注释:(如果有什么问题,还请大家指正,大家共同学习,共同进步!)

管理员系统:

#include <bits/stdc++.h>
#include <windows.h>
#include<conio.h>                            /*getch函数使用的头文件*/
using namespace std;

/*-----------------宏定义------------------*/

#define LEN_Employee sizeof(struct emp)
#define LEN_Visitor sizeof(struct vis)
#define Employee_DATA astEmp[i].eid,astEmp[i].name,astEmp[i].tem,astEmp[i].visit,astEmp[i].date,astEmp[i].late
#define Visitor_DATA astVis[i].vno,astVis[i].name,astVis[i].tem,astVis[i].rea,astVis[i].hour,astVis[i].minute
#define Employee_NUM 100
#define Visitor_NUM 200

/*----------------结构体-------------------*/

struct emp {
	int  eid;                        /*员工编号*/
	char name[12];                   /*员工姓名*/
	float tem;                       /*员工体温*/
	char visit[4];                   /*员工昨天下班后是否外出*/
	int date;                        /*员工签到日期*/
	char late;                       /*员工是否迟到*/
};
struct vis {
	int vno;                         /*来访编号*/
	char name[12];                  /*来访者姓名*/
	float tem;                      /*来访者体温*/
	char rea[15];                   /*来访目的*/
	int hour;                       /*来访时间由时和分组成*/
	int minute;
};

/*---------------全局变量-------------------*/

struct emp astEmp[Employee_NUM];
struct vis astVis[Visitor_NUM];


/*--------------函数声明-----------------*/

void ShowMainMenu();                               /*显示主菜单*/
int ReadEmployeeFile( const char * pcMode);        /*从员工记录文件中读取图书记录*/
void SaveEmployeeFile(int iEmployeeId);            /*将记录号为iEmployeeId的员工记录存入文件*/
int ReadVisitorFile( const char * pcMode);         /*从访客记录文件中读取公司来访记录*/
void SaveVisitorFile(int iVisitorId);              /*将记录号为vno的图书存入文件*/
void Login(char ID[15],char Password[15]);         /*登录验证*/
void AddEmployee();                                /*添加员工信息*/
void ShowEmployee();                               /*显示员工信息*/
void attendance();                                 /*员工考勤*/
int SearchEmployee();                              /*查询员工信息*/
void AddVisitor();                                 /*添加访客信息*/
void ShowVisitor();                                /*显示访客信息*/
int SearchVisitor();                                /*查询访客信息*/

/******************主函数*******************/

int main() {
	int iItem;
	ShowMainMenu();
	scanf("%d",&iItem);
	getchar();
	while(iItem) {
		switch(iItem) {
			case 1:
				AddEmployee();
				break;
			case 2:
				attendance();
				break;
			case 3:
				SearchEmployee();
				cout<<"请按回车键返回主菜单!"; 
				break;
			case 4:
				ShowEmployee();
				cout<<"请按任意键返回主菜单!";
				break;
			case 5:
				AddVisitor();
				break;
			case 6:
				SearchVisitor();
				break;
			case 7:
				ShowVisitor();
				break;
			default:
				printf("\t\t请输入正确的数字!\n\t\t程序将于三秒后跳转到主菜单");
				Sleep(3000);

		}
		getchar();
		ShowMainMenu();
		scanf("%d",&iItem);
		getchar();
	}
	return 0;
}
/*-----------ShowMainMenu函数 显示主菜单----------------*/

void 	ShowMainMenu() {
	system("cls");
	printf("\n\n\n\n\n");
	printf("\t\t ★ *-*-*-*-*-*-*-*-*-*-*-欢迎进入*-*-*-*-*-*-*-*-*-*-*-★ \n");
	printf("\t\t ★                                                      ★ \n");
	printf("\t\t ★               诚信装饰员工及访客管理系统             ★ \n");
	printf("\t\t ★                                                      ★ \n");
	printf("\t\t ★                     1.添加员工记录                   ★ \n");
	printf("\t\t ★                     2.员工考勤管理                   ★ \n");
	printf("\t\t ★                     3.查询员工信息                   ★ \n");
	printf("\t\t ★                     4.全览员工记录                   ★ \n");
	printf("\t\t ★                     5.访客登记管理                   ★ \n");
	printf("\t\t ★                     6.查询访客信息                   ★ \n");
	printf("\t\t ★                     7.全览访客记录                   ★ \n");
	printf("\t\t ★                     0.退出程序                       ★ \n");
	printf("\t\t ★                                                      ★ \n");
	printf("\t\t ★*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-★ \n");
	printf("\n");
	printf("\t\t请选择(0--8),执行其中一个程序:");
}

/*----------------登录进入主页面----------------------*/

void Login(char ID[15],char Password[15]) {
	system("cls");//清屏
	cout<<"请输入您的账号(2018204602):";
	cin>>ID;
	cout<<"请输入您的密码(123456):";
	cin>>Password;
}

/*----------------ReadEmployeeFile函数-------------------*/

int ReadEmployeeFile( const char * pcMode) {                               /*因为从调用函数中传过来的是一个字符串常量,不能被修改,而此处的形参是一个可以修改的变量,所以需要加const限定为只读取不修改*/
	int iEmployeeRecord=0;
	FILE *pfEmployee;                                                     /*文件指针*/
	pfEmployee=fopen("Employee.txt",pcMode);                              /*以pcMode指针所指向的内容的形式打开Employee.txt文件*/
	if(pfEmployee==NULL)
		return -1;
	while(!feof(pfEmployee)) {                                             /*判断文件是否结束*/
		if(fread(&astEmp[iEmployeeRecord],LEN_Employee,1,pfEmployee))             /*统计文件中记录的条数*/
			iEmployeeRecord++;
	}
	fclose(pfEmployee);
	return iEmployeeRecord;
}

/*----------------SaveEmployeeFile函数-------------------*/

void SaveEmployeeFile(int iEmployeeId) {
	FILE *pfEmployee;
	pfEmployee=fopen("Employee.txt","rb+");
	if(pfEmployee!=NULL) {
		fseek(pfEmployee,LEN_Employee*iEmployeeId,SEEK_SET);                        /*SEEK_SET表示文件头部*/
		if(fwrite(&astEmp[iEmployeeId],LEN_Employee,1,pfEmployee)!=1)
			printf("无法保存信息!\n");
	}
	fclose(pfEmployee);
}

/*----------------ReadVisitorFile函数-------------------*/

int ReadVisitorFile( const char * pcMode) {                               /*因为从调用函数中传过来的是一个字符串常量,不能被修改,而此处的形参是一个可以修改的变量,所以需要加const限定为只读取不修改*/
	int iVisitorRecord=0;
	FILE *pfVisitor;                                                     /*文件指针*/
	pfVisitor=fopen("Visitor.txt",pcMode);                              /*以pcMode指针所指向的内容的形式打开Visitor.txt文件*/
	if(pfVisitor==NULL)
		return -1;
	while(!feof(pfVisitor)) {                                             /*判断文件是否结束*/
		if(fread(&astVis[iVisitorRecord],LEN_Visitor,1,pfVisitor))             /*统计文件中记录的条数*/
			iVisitorRecord++;
	}
	fclose(pfVisitor);
	return iVisitorRecord;
}

/*----------------SaveVisitorFile函数-------------------*/

void SaveVisitorFile(int iVisitorId) {
	FILE *pfVisitor;
	pfVisitor=fopen("Visitor.txt","rb+");
	if(pfVisitor!=NULL) {
		fseek(pfVisitor,LEN_Visitor*iVisitorId,SEEK_SET);                        /*SEEK_SET表示文件头部*/
		if(fwrite(&astVis[iVisitorId],LEN_Visitor,1,pfVisitor)!=1)
			printf("无法保存信息!\n");
	}
	fclose(pfVisitor);
}

/*------------------AddEmployee函数------------------------*/

void AddEmployee() {
	FILE *pfEmployee;                                                     /*通过文件指针打开文件*/
	int iEmployeeRecord,iFlagExist,i;                                     /*iFlagExist作为用户输入的编号是否与系统中的已有编号重复的标志*/
	char cFlag;
	system("cls");
	iEmployeeRecord = ReadEmployeeFile("ab+");                                /*ab+:以追加的方式打开二进制文件,若无文件,可自动新建一个二进制文件*/
	if(iEmployeeRecord == -1) {
		printf("文件打开失败!\n");
		return;
	} else if(iEmployeeRecord==0)
		printf("没有员工记录!\n");
	else
		ShowEmployee();                                                     /*如果员工记录不为0,则调用ShowEmployee函数显示所有员工*/
	/*以下代码为循环录入员工信息*/
	printf("请选择是否需要录入员新的员工信息(y:是/n:否):");
	cFlag=getchar();
	getchar;                                                            /*用来接收输入字符后的回车符*/
	if(cFlag=='n')
		return;
	pfEmployee=fopen("Employee.txt","ab+");
	if(pfEmployee==NULL) {
		printf("文件打开失败");
		return;
	}
	while(cFlag=='y') {
		if(iEmployeeRecord>=Employee_NUM) {                                     /*若超过容量范围则不能继续写入*/
			printf("记录以满,不能继续录入!");
			fclose(pfEmployee);
			return;
		}
		printf("请输入需要录入的员工编号(四位):");
		do {
			iFlagExist=0;
			scanf("%d",&astEmp[iEmployeeRecord].eid);
			getchar();
			for(i=0; i<iEmployeeRecord; i++) {
				if(astEmp[i].eid==astEmp[iEmployeeRecord].eid) {
					iFlagExist=1;
					printf("此员工编号已存在,请重新录入:");
					break;
				}
			}
		} while(iFlagExist==1);
		/*新增员工信息*/
		SYSTEMTIME sys;
		GetLocalTime(&sys);
		int d=sys.wDay;
		astEmp[iEmployeeRecord].date=d;
		astEmp[iEmployeeRecord].late='N';
		printf("请输入需要录入的员工的名称:");
		gets(astEmp[iEmployeeRecord].name);
		printf("请输入需要录入的员工的昨天是否外出(是/否):");
		gets(astEmp[iEmployeeRecord].visit);
		printf("请输入员工的体温:");
		scanf("%f",&astEmp[iEmployeeRecord].tem);
		getchar();

		/*将新增的员工信息写入文件中*/
		if(fwrite(&astEmp[iEmployeeRecord],LEN_Employee,1,pfEmployee)!=1) {
			printf("无法保存该条员工信息!\n");
			return;
		} else {
			printf("%d号员工信息已保存!\n",astEmp[iEmployeeRecord].eid);
			cout<<"其信息如下:"<<endl;
			int i=iEmployeeRecord;
			printf("\t|-----------------------------------------------------------------------------|\n");
			printf("\t %-13s %-13s %-13s %-15s %-10s %-10s\n","员工编号","员工姓名","员工体温","昨日是否外出","签到日期","是否迟到");       /*负号是指输出左对齐*/
			printf("\t %-13d %-13s   %.1f          %-15s %d           %c\n",Employee_DATA);
			printf("\t|-----------------------------------------------------------------------------|\n");
			cout<<endl;

			iEmployeeRecord++;
		}
		printf("继续输入信息吗?(y:是/n:否)");
		cFlag=getchar();
		getchar();
	}
	fclose(pfEmployee);
	printf("添加员工执行完毕!请按回车键返回主菜单!\n");
}

/*------------------ShowEmployee函数---------------------*/
void ShowEmployee() {
	int i,iEmployeeRecord;
	system("cls");
	iEmployeeRecord=ReadEmployeeFile("rb");                                     /*以只读的方式打开二进制文件*/
	if(iEmployeeRecord==-1)
		printf("文件打开失败!请先添加员工信息!\n");
	else if(iEmployeeRecord==0)
		printf("文件中没有员工信息!\n");
	else {
		cout<<"\t目前已有的员工信息如下:"<<endl ;
		printf("\t|-----------------------------------------------------------------------------|\n");
		printf("\t %-13s %-13s %-13s %-15s %-10s %-10s\n","员工编号","员工姓名","员工体温","昨日是否外出","签到日期","是否迟到");       /*负号是指输出左对齐*/
		for(i=0; i<iEmployeeRecord; i++)
			printf("\t %-13d %-13s   %.1f          %-15s %d           %c\n",Employee_DATA);
		printf("\t|-----------------------------------------------------------------------------|\n");
		cout<<endl;
	}
}

/*---------------员工考勤模块-----------*/
void attendance() {
	int iEmployeeId;
	system("cls");
	iEmployeeId=SearchEmployee();                                       /*调用查询员工记录函数获得员工记录号*/
	if(iEmployeeId==-1)
		return;                                                  /*未找到该序号的员工,直接返回*/
	cout<<"请您输入"<<astEmp[iEmployeeId].name<<"现在的体温:";
	cin>>astEmp[iEmployeeId].tem;
	cout<<"请您输入"<<astEmp[iEmployeeId].name<<"昨天是否外出:";
	cin>>astEmp[iEmployeeId].visit;
	getchar();
	SYSTEMTIME sys;
	GetLocalTime(&sys);
	astEmp[iEmployeeId].date=sys.wDay;
	if(sys.wHour>8) astEmp[iEmployeeId].late='Y';
	else if(sys.wHour=8&&sys.wMinute>3011) astEmp[iEmployeeId].late='Y';
	else astEmp[iEmployeeId].late='N';
	/*调用SaveEmployeeFile函数将修改记录存入文件*/
	SaveEmployeeFile(iEmployeeId);
	cout<<astEmp[iEmployeeId].name<<"已成功签到,签到信息如下:"<<endl;
	int i= iEmployeeId;
	printf("\t|-----------------------------------------------------------------------------|\n");
	printf("\t %-13s %-13s %-13s %-15s %-10s %-10s\n","员工编号","员工姓名","员工体温","昨日是否外出","签到日期","是否迟到");       /*负号是指输出左对齐*/
	printf("\t %-13d %-13s   %.1f          %-15s %d           %c\n",Employee_DATA);
	printf("\t|-----------------------------------------------------------------------------|\n");
	cout<<"请按回车键返回主菜单!"<<endl;
}

/***********SearchEmployee函数**************/

int SearchEmployee() {
	int iEmployeeNum,iEmployeeRecord,iEmployeeId,i;
	system("cls");
	iEmployeeRecord=ReadEmployeeFile("rb");                          /*以“rb”形式打开文件,如果失败则返回*/
	if(iEmployeeRecord==-1) {
		printf("文件打开失败!\n");
		printf("|按任意键返回子菜单|");
		getch();
		return -2;                                          /*文件打开失败,返回-2*/
	} else if(iEmployeeRecord==0) {
		printf("没有员工记录!\n");
		printf("|按任意键返回子菜单|");
		getch();
		return -3;                                          /*文件中没有记录,返回-3*/
	}
	printf("请输入员工的编号:");
	scanf("%d",&iEmployeeNum);
	getchar();
	for(i=0; i<iEmployeeRecord; i++) {
		if(iEmployeeNum==astEmp[i].eid) {
			iEmployeeId=i;                                      /*找到记录,返回记录号*/
			cout<<iEmployeeNum<<"号员工信息如下:"<<endl ;
			printf("\t|-----------------------------------------------------------------------------|\n");
			printf("\t %-13s %-13s %-13s %-15s %-10s %-10s\n","员工编号","员工姓名","员工体温","昨日是否外出","签到日期","是否迟到");       /*负号是指输出左对齐*/
			printf("\t %-13d %-13s   %.1f          %-15s %d           %c\n",Employee_DATA);
			printf("\t|-----------------------------------------------------------------------------|\n");
			break;
		}
	}
	if(i==iEmployeeRecord) {                                    /*遍历循环,没有找到记录,提示用户*/
		printf("找不到%d号员工信息!\n",iEmployeeNum);
		iEmployeeId=-1;                                        /*找不到记录,返回-1*/
	}
	return iEmployeeId;
}

/*------------------AddVisitor函数------------------------*/

void AddVisitor() {
	FILE *pfVisitor;                                                     /*通过文件指针打开文件*/
	int iVisitorRecord,iFlagExist,i;                                     /*iFlagExist作为用户输入的编号是否与系统中的已有编号重复的标志*/
	char cFlag;
	system("cls");
	iVisitorRecord = ReadVisitorFile("ab+");                                /*ab+:以追加的方式打开二进制文件,若无文件,可自动新建一个二进制文件*/
	if(iVisitorRecord == -1) {
		printf("文件打开失败!\n");
		return;
	} else if(iVisitorRecord==0)
		printf("没有访客记录!\n");
	else
		ShowVisitor();                                                     /*如果访客记录不为0,则调用ShowVisitor函数显示所有访客*/
	/*以下代码为循环录入访客信息*/
	printf("请选择是否登记新的访客信息(y:是/n:否):");
	cFlag=getchar();
	getchar;                                                            /*用来接收输入字符后的回车符*/
	if(cFlag=='n')
		return;
	pfVisitor=fopen("Visitor.txt","ab+");
	if(pfVisitor==NULL) {
		printf("文件打开失败");
		return;
	}
	while(cFlag=='y') {
		if(iVisitorRecord>=Visitor_NUM) {                                     /*若超过容量范围则不能继续写入*/
			printf("记录以满,不能继续录入!");
			fclose(pfVisitor);
			return;
		}
		printf("请输入需要录入的访客编号(四位):");
		do {
			iFlagExist=0;
			scanf("%d",&astVis[iVisitorRecord].vno);
			getchar();
			for(i=0; i<iVisitorRecord; i++) {
				if(astVis[i].vno==astVis[iVisitorRecord].vno) {
					iFlagExist=1;
					printf("此访客编号已存在,请重新录入:");
					break;
				}
			}
		} while(iFlagExist==1);
		/*新增访客信息*/
		SYSTEMTIME sys;
		GetLocalTime(&sys);
		int d=sys.wDay;
		astVis[iVisitorRecord].hour=sys.wHour;
		astVis[iVisitorRecord].minute=sys.wMinute;
		printf("请输入需要登记的访客的名称:");
		gets(astVis[iVisitorRecord].name);
		printf("请输入访客的来访目的:");
		gets(astVis[iVisitorRecord].rea);
		printf("请输入需要登记的访客的体温:");
		scanf("%f",&astVis[iVisitorRecord].tem);
		getchar();

		/*将新增的访客信息写入文件中*/
		if(fwrite(&astVis[iVisitorRecord],LEN_Visitor,1,pfVisitor)!=1) {
			printf("无法保存该条访客信息!\n");
			return;
		} else {
			printf("%d号访客信息已保存!\n",astVis[iVisitorRecord].vno);
			cout<<"其信息如下:"<<endl;
			int i=iVisitorRecord;
			printf("\t|-----------------------------------------------------------------------------|\n");
			printf("\t %-13s %-13s %-13s %-15s %-10s \n","访客编号","访客姓名","访客体温","来访目的","来访时间");       /*负号是指输出左对齐*/
			printf("\t %-13d %-13s   %.1f          %-15s %d:%d\n",Visitor_DATA);
			printf("\t|-----------------------------------------------------------------------------|\n");
			cout<<endl;

			iVisitorRecord++;
		}
		printf("继续输入信息吗?(y:是/n:否)");
		cFlag=getchar();
		getchar();
	}
	fclose(pfVisitor);
	printf("访客登记完毕!请按回车键返回主菜单!\n");
}

/*------------------ShowVisitor函数---------------------*/
void ShowVisitor() {
	int i,iVisitorRecord;
	system("cls");
	iVisitorRecord=ReadVisitorFile("rb");                                     /*以只读的方式打开二进制文件*/
	if(iVisitorRecord==-1)
		printf("文件打开失败!请先添加访客信息!\n");
	else if(iVisitorRecord==0)
		printf("文件中没有访客信息!\n");
	else {
		cout<<"\t目前已有的访客信息如下:"<<endl ;
		printf("\t|-----------------------------------------------------------------------------|\n");
		printf("\t %-13s %-13s %-13s   %-15s %-10s \n","访客编号","访客姓名","访客体温","来访目的","来访时间");       /*负号是指输出左对齐*/
		for(i=0; i<iVisitorRecord; i++)
			printf("\t %-13d %-13s   %.1f          %-15s %d:%d\n",Visitor_DATA);
		printf("\t|-----------------------------------------------------------------------------|\n");
		cout<<endl;
	}
}

/***********SearchVisitor函数**************/

int SearchVisitor() {
	int iVisitorRecord,iVisitorId,i;
	char iVisitorName[12];
	     system("cls");
	iVisitorRecord=ReadVisitorFile("rb");                          /*以“rb”形式打开文件,如果失败则返回*/
	if(iVisitorRecord==-1) {
		printf("文件打开失败!\n");
		printf("|按任意键返回子菜单|");
		getch();
		return -2;                                          /*文件打开失败,返回-2*/
	} else if(iVisitorRecord==0) {
		printf("没有访客记录!\n");
		printf("|按任意键返回子菜单|");
		getch();
		return -3;                                          /*文件中没有记录,返回-3*/
	}
	printf("请输入访客的姓名:");
	cin>>iVisitorName;
	getchar();
	for(i=0; i<iVisitorRecord; i++) {
		if(strcmp(iVisitorName,astVis[i].name)==0) {
			iVisitorId=i;                                      /*找到记录,返回记录号*/
			cout<<"访客"<<iVisitorName<<"信息如下:"<<endl ;
			printf("\t|-----------------------------------------------------------------------------|\n");
			printf("\t %-13s %-13s %-13s %-15s %-10s \n","访客编号","访客姓名","访客体温","来访目的","来访时间");       /*负号是指输出左对齐*/
			printf("\t %-13d %-13s   %.1f          %-15s %d:%d\n",Visitor_DATA);
			printf("\t|-----------------------------------------------------------------------------|\n");
			break;
		}
	}
	if(i==iVisitorRecord) {                                    /*遍历循环,没有找到记录,提示用户*/
		printf("找不到%d号访客信息!\n",iVisitorName);
		cout<<"找不到"<< iVisitorName<<"的访客记录信息";
		iVisitorId=-1;                                        /*找不到记录,返回-1*/
	}
	cout<<"请按回车键返回主菜单!";
	return iVisitorId;
}


经理系统:

//这个是主管端口 
#include <bits/stdc++.h>
#include <windows.h>
#include<conio.h>                            /*getch函数使用的头文件*/
using namespace std;

/*-----------------宏定义------------------*/

#define LEN_Employee sizeof(struct emp)
#define LEN_Visitor sizeof(struct vis)
#define Employee_DATA astEmp[i].eid,astEmp[i].name,astEmp[i].tem,astEmp[i].visit,astEmp[i].date,astEmp[i].late
#define Visitor_DATA astVis[i].vno,astVis[i].name,astVis[i].tem,astVis[i].rea,astVis[i].hour,astVis[i].minute
#define Employee_NUM 100
#define Visitor_NUM 200

/*----------------结构体-------------------*/

struct emp {
	int  eid;                        /*员工编号*/
	char name[12];                   /*员工姓名*/
	float tem;                       /*员工体温*/
	char visit[4];                   /*员工昨天下班后是否外出*/
	int date;                        /*员工签到日期*/
	char late;                       /*员工是否迟到*/
};
struct vis {
	int vno;                         /*来访编号*/
	char name[12];                  /*来访者姓名*/
	float tem;                      /*来访者体温*/
	char rea[15];                   /*来访目的*/
	int hour;                       /*来访时间由时和分组成*/
	int minute;
};

/*---------------全局变量-------------------*/

struct emp astEmp[Employee_NUM];
struct vis astVis[Visitor_NUM];


/*--------------函数声明-----------------*/

void ShowMainMenu();                               /*显示主菜单*/
int ReadEmployeeFile( const char * pcMode);        /*从员工记录文件中读取图书记录*/
void SaveEmployeeFile(int iEmployeeId);            /*将记录号为iEmployeeId的员工记录存入文件*/
int ReadVisitorFile( const char * pcMode);         /*从访客记录文件中读取公司来访记录*/
void SaveVisitorFile(int iVisitorId);              /*将记录号为vno的图书存入文件*/
void Login(char ID[15],char Password[15]);         /*登录验证*/
void AddEmployee();                                /*添加员工信息*/
void ShowEmployee();                               /*显示员工信息*/
void attendance();                                 /*员工考勤*/
int SearchEmployee();                              /*查询员工信息*/
void AddVisitor();                                 /*添加访客信息*/
void ShowVisitor();                                /*显示访客信息*/
int SearchVisitor();                                /*查询访客信息*/

/******************主函数*******************/

int main() {
	int iItem;
	ShowMainMenu();
	scanf("%d",&iItem);
	getchar();
	while(iItem) {
		switch(iItem) {

			case 1:
				SearchEmployee();
				break;
			case 2:
				ShowEmployee();
				cout<<"请按任意键返回主菜单!";
				break;
			case 3:
				SearchVisitor();
				break;
			case 4:
				ShowVisitor();
				break;
			default:
				printf("\t\t请输入正确的数字!\n\t\t程序将于三秒后跳转到主菜单");
				Sleep(3000);

		}
		getchar();
		ShowMainMenu();
		scanf("%d",&iItem);
		getchar();
	}
	return 0;
}
/*-----------ShowMainMenu函数 显示主菜单----------------*/

void 	ShowMainMenu() {
	system("cls");
	printf("\n\n\n\n\n");
	printf("\t\t ★ *-*-*-*-*-*-*-*-*-*-*-欢迎进入*-*-*-*-*-*-*-*-*-*-*-*★ \n");
	printf("\t\t ★                                                       ★ \n");
	printf("\t\t ★               诚信装饰员工及访客管理系统              ★ \n");
	printf("\t\t ★                                                       ★ \n");
	printf("\t\t ★                     1.查询员工信息                    ★ \n");
	printf("\t\t ★                     2.全览员工记录                    ★ \n");
	printf("\t\t ★                     3.查询访客信息                    ★ \n");
	printf("\t\t ★                     4.全览访客记录                    ★ \n");
	printf("\t\t ★                     0.退出程序                        ★ \n");
	printf("\t\t ★                                                       ★ \n");
	printf("\t\t ★*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*★ \n");
	printf("\n");
	printf("\t\t请选择(0--4),执行其中一个程序:");
}

/*----------------登录进入主页面----------------------*/

void Login(char ID[15],char Password[15]) {
	system("cls");//清屏
	cout<<"请输入您的账号(2018204602):";
	cin>>ID;
	cout<<"请输入您的密码(123456):";
	cin>>Password;
}

/*----------------ReadEmployeeFile函数-------------------*/

int ReadEmployeeFile( const char * pcMode) {                               /*因为从调用函数中传过来的是一个字符串常量,不能被修改,而此处的形参是一个可以修改的变量,所以需要加const限定为只读取不修改*/
	int iEmployeeRecord=0;
	FILE *pfEmployee;                                                     /*文件指针*/
	pfEmployee=fopen("Employee.txt",pcMode);                              /*以pcMode指针所指向的内容的形式打开Employee.txt文件*/
	if(pfEmployee==NULL)
		return -1;
	while(!feof(pfEmployee)) {                                             /*判断文件是否结束*/
		if(fread(&astEmp[iEmployeeRecord],LEN_Employee,1,pfEmployee))             /*统计文件中记录的条数*/
			iEmployeeRecord++;
	}
	fclose(pfEmployee);
	return iEmployeeRecord;
}

/*----------------SaveEmployeeFile函数-------------------*/

void SaveEmployeeFile(int iEmployeeId) {
	FILE *pfEmployee;
	pfEmployee=fopen("Employee.txt","rb+");
	if(pfEmployee!=NULL) {
		fseek(pfEmployee,LEN_Employee*iEmployeeId,SEEK_SET);                        /*SEEK_SET表示文件头部*/
		if(fwrite(&astEmp[iEmployeeId],LEN_Employee,1,pfEmployee)!=1)
			printf("无法保存信息!\n");
	}
	fclose(pfEmployee);
}

/*----------------ReadVisitorFile函数-------------------*/

int ReadVisitorFile( const char * pcMode) {                               /*因为从调用函数中传过来的是一个字符串常量,不能被修改,而此处的形参是一个可以修改的变量,所以需要加const限定为只读取不修改*/
	int iVisitorRecord=0;
	FILE *pfVisitor;                                                     /*文件指针*/
	pfVisitor=fopen("Visitor.txt",pcMode);                              /*以pcMode指针所指向的内容的形式打开Visitor.txt文件*/
	if(pfVisitor==NULL)
		return -1;
	while(!feof(pfVisitor)) {                                             /*判断文件是否结束*/
		if(fread(&astVis[iVisitorRecord],LEN_Visitor,1,pfVisitor))             /*统计文件中记录的条数*/
			iVisitorRecord++;
	}
	fclose(pfVisitor);
	return iVisitorRecord;
}

/*----------------SaveVisitorFile函数-------------------*/

void SaveVisitorFile(int iVisitorId) {
	FILE *pfVisitor;
	pfVisitor=fopen("Visitor.txt","rb+");
	if(pfVisitor!=NULL) {
		fseek(pfVisitor,LEN_Visitor*iVisitorId,SEEK_SET);                        /*SEEK_SET表示文件头部*/
		if(fwrite(&astVis[iVisitorId],LEN_Visitor,1,pfVisitor)!=1)
			printf("无法保存信息!\n");
	}
	fclose(pfVisitor);
}


/*------------------ShowEmployee函数---------------------*/
void ShowEmployee() {
	int i,iEmployeeRecord;
	system("cls");
	iEmployeeRecord=ReadEmployeeFile("rb");                                     /*以只读的方式打开二进制文件*/
	if(iEmployeeRecord==-1)
		printf("文件打开失败!请先添加员工信息!\n");
	else if(iEmployeeRecord==0)
		printf("文件中没有员工信息!\n");
	else {
		cout<<"\t目前已有的员工信息如下:"<<endl ;
		printf("\t|-----------------------------------------------------------------------------|\n");
		printf("\t %-13s %-13s %-13s %-15s %-10s %-10s\n","员工编号","员工姓名","员工体温","昨日是否外出","签到日期","是否迟到");       /*负号是指输出左对齐*/
		for(i=0; i<iEmployeeRecord; i++)
			printf("\t %-13d %-13s   %.1f          %-15s %d           %c\n",Employee_DATA);
		printf("\t|-----------------------------------------------------------------------------|\n");
		cout<<endl;
	}
}

/***********SearchEmployee函数**************/

int SearchEmployee() {
	int iEmployeeNum,iEmployeeRecord,iEmployeeId,i;
	system("cls");
	iEmployeeRecord=ReadEmployeeFile("rb");                          /*以“rb”形式打开文件,如果失败则返回*/
	if(iEmployeeRecord==-1) {
		printf("文件打开失败!\n");
		printf("|按任意键返回子菜单|");
		getch();
		return -2;                                          /*文件打开失败,返回-2*/
	} else if(iEmployeeRecord==0) {
		printf("没有员工记录!\n");
		printf("|按任意键返回子菜单|");
		getch();
		return -3;                                          /*文件中没有记录,返回-3*/
	}
	printf("请输入员工的编号:");
	scanf("%d",&iEmployeeNum);
	getchar();
	for(i=0; i<iEmployeeRecord; i++) {
		if(iEmployeeNum==astEmp[i].eid) {
			iEmployeeId=i;                                      /*找到记录,返回记录号*/
			cout<<iEmployeeNum<<"号员工信息如下:"<<endl ;
			printf("\t|-----------------------------------------------------------------------------|\n");
			printf("\t %-13s %-13s %-13s %-15s %-10s %-10s\n","员工编号","员工姓名","员工体温","昨日是否外出","签到日期","是否迟到");       /*负号是指输出左对齐*/
			printf("\t %-13d %-13s   %.1f          %-15s %d           %c\n",Employee_DATA);
			printf("\t|-----------------------------------------------------------------------------|\n");
			break;
		}
	}
	if(i==iEmployeeRecord) {                                    /*遍历循环,没有找到记录,提示用户*/
		printf("找不到%d号员工信息!\n",iEmployeeNum);
		iEmployeeId=-1;                                        /*找不到记录,返回-1*/
	}
	cout<<"请按回车键返回主菜单!";
	return iEmployeeId;
}


/*------------------ShowVisitor函数---------------------*/
void ShowVisitor() {
	int i,iVisitorRecord;
	system("cls");
	iVisitorRecord=ReadVisitorFile("rb");                                     /*以只读的方式打开二进制文件*/
	if(iVisitorRecord==-1)
		printf("文件打开失败!请先添加访客信息!\n");
	else if(iVisitorRecord==0)
		printf("文件中没有访客信息!\n");
	else {
		cout<<"\t目前已有的访客信息如下:"<<endl ;
		printf("\t|-----------------------------------------------------------------------------|\n");
		printf("\t %-13s %-13s %-13s %-15s %-10s \n","访客编号","访客姓名","访客体温","来访目的","来访时间");       /*负号是指输出左对齐*/
		for(i=0; i<iVisitorRecord; i++)
			printf("\t %-13d %-13s   %.1f          %-15s %d:%d\n",Visitor_DATA);
		printf("\t|-----------------------------------------------------------------------------|\n");
		cout<<endl;
	}
}

/***********SearchVisitor函数**************/

int SearchVisitor() {
	int iVisitorRecord,iVisitorId,i;
	char iVisitorName[12];
	     system("cls");
	iVisitorRecord=ReadVisitorFile("rb");                          /*以“rb”形式打开文件,如果失败则返回*/
	if(iVisitorRecord==-1) {
		printf("文件打开失败!\n");
		printf("|按任意键返回子菜单|");
		getch();
		return -2;                                          /*文件打开失败,返回-2*/
	} else if(iVisitorRecord==0) {
		printf("没有访客记录!\n");
		printf("|按任意键返回子菜单|");
		getch();
		return -3;                                          /*文件中没有记录,返回-3*/
	}
	printf("请输入访客的姓名:");
	cin>>iVisitorName;
	getchar();
	for(i=0; i<iVisitorRecord; i++) {
		if(strcmp(iVisitorName,astVis[i].name)==0) {
			iVisitorId=i;                                      /*找到记录,返回记录号*/
			cout<<"访客"<<iVisitorName<<"信息如下:"<<endl ;
			printf("\t|-----------------------------------------------------------------------------|\n");
			printf("\t %-13s %-13s %-13s %-15s %-10s \n","访客编号","访客姓名","访客体温","来访目的","来访时间");       /*负号是指输出左对齐*/
			printf("\t %-13d %-13s   %.1f          %-15s %d:%d\n",Visitor_DATA);
			printf("\t|-----------------------------------------------------------------------------|\n");
			break;
		}
	}
	if(i==iVisitorRecord) {                                    /*遍历循环,没有找到记录,提示用户*/
		printf("找不到%d号访客信息!\n",iVisitorName);
		cout<<"找不到"<< iVisitorName<<"的访客记录信息";
		iVisitorId=-1;                                        /*找不到记录,返回-1*/
	}
	cout<<"请按回车键返回主菜单!";
	return iVisitorId;
}


相关标签: 小程序代码分享