使用嵌入式SQL,实现数据库自动随机考勤系统(C++)

本文介绍了如何使用C++和嵌入式SQL编程实现一个随机考勤系统。系统基于MySQL数据库,包含职员信息表和考勤表,规则包括:未被选中考勤的员工默认通过,通过者成绩加1,连续3次不通过成绩归0,累计5次不通过永久归0。文章还提供了环境配置、数据库创建和代码框架的详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

随机读取数据库中的记录来生成一份可以任意指定规模到名单,来实现随机考勤。数据库中存放的是职工信息,包括职工号、职工姓名、职工所在部门、部门领导、每一次考勤记录、考勤成绩等。采用嵌入式的SQL编程实现。

  • 每一次考勤,不在名单中的职工默认考勤通过
  • 考勤通过者,相应的考勤成绩+1,且在相应的考勤记录中记录“通过”
  • 连续三次考勤不通过,考勤成绩置0
  • 累计5次考勤不通过,考勤成绩永久置0。

搭建环境

VS2017连接MySQL8.0,参照下面博客:https://blog.youkuaiyun.com/qq_21095573/article/details/82824693

建立数据库

创建模式exp3_,建立两张表:职员信息表以及考勤表:
职员表用来存放职员:职工号,职工姓名,部门以及部门经理。考勤表用来存储职员考勤情况。其中约束关系如下。

use exp3_;
create table employee
( employee_id char(8) primary key,  #职工号 主码
 employee_name varchar(20) not null,  #职工姓名
    depatment varchar(20),     #部门
    manager_name varchar(20)    #部门经理
);
create table attendance
 ( employee_id char(8),
 attendance_time date,      #考勤时间
    pass_or_not boolean,     #是否通过,布尔型
 record tinyint,       #考勤成绩
    constraint id_fk foreign key(employee_id)
  references employee(employee_id)
        on delete cascade     #当删除employee表职员信息时,级联删除attendance表中考勤信息
);
insert into employee values
 ('20170001','陈一一','设计部','陈老板'),
    ('20170002','苏二二','人力开发部','苏老板'),
 ('20170003','毛三三','设计部','陈老板'),
    ('20170004','吴四四','国际部','吴老板');
insert into attendance values
 ('20170001','2019-12-12',0,0),
    ('20170002','2019-12-12',0,0),
 ('20170003','2019-12-12',1,1),
    ('20170004','2019-12-12',1,1);
select * from employee;
select * from attendance;

代码框架

  1. 修改职员信息:void update(MYSQL&);(对employee职员表操作)
    考勤成绩无法修改(必须公平公正没有暗箱操作),不考虑【经理或者员工换名字】,只能修改
    1.经理姓名(部门换老板)
    1.部门和经理姓名(升职加薪or降职)
    3.添加员工(公司招新)
    4.删除员工(炒鱿鱼咯)
    5.查询所有员工信息
    0.退出修改功能

  2. 对职员进行考勤:void attendance_check(MYSQL&);(对attendance考勤表操作) * 基本规则:
    1)每一次考勤,不在名单中的职工默认考勤通过
    2)考勤通过者,相应的考勤成绩+1,且在相应的考勤记录中记录“通过”
    3)连续三次考勤不通过,考勤成绩置0
    4)累计5次考勤不通过,考勤成绩永久置0。
    实现功能:
    1.发起考勤 2.查询所有人考勤情况 0.退出考勤功能

  3. 对于嵌入式SQL,主要通过mysql.h头文件来实现其中函数功能参考:https://blog.youkuaiyun.com/freezgw1985/article/details/5794253介绍最主要的函数:int STDCALL mysql_query(MYSQL *mysql, const char *q);int STDCALL mysql_send_query(MYSQL *mysql, const char *q, unsigned long length);
    通过把SQL指令代入*q(字符串)来完成SQL对表的 select,update,delete等操作以及创建删除表。例如:mysql_query(&mysql, “select * from attendance”);//查询所有职员考勤信息

源码

main.cpp

#include"function.h"
int main(){
   
	MYSQL mysql;				//一个数据库结构体	
	mysql_init(&mysql);			//初始化数据库	mysql_options(&mysql, 
	MYSQL_SET_CHARSET_NAME, "gbk");				//设置编码方式	
	if(mysql_real_connect(&mysql, "localhost", "root", "923533706", "exp3_", 3306, NULL, 0) == NULL)//连接数据库
		cout << "连接失败!" << endl;			//判断如果连接失败就输出连接失败	
	else
	{
   		
		cout.flags(ios::left);		
		cout << "**************** 欢迎老板进入职工考勤系统,请您选择以下操作:*******************" << endl			
		<< setw(30) << "1.修改功能" << setw(30) << "2.考勤功能" << endl			
		<< setw(30) << "0.退出职员考勤系统" << endl;
		int n;
		cin >> n;		
		while (n != 0)		
		{
   			
			switch (n)			
			{
   			
			case 1:			
			{
   				
				update(mysql);				
				break;			
			}			
			case 2:			
			{
   				
				attendance_check(mysql);				
				break;			
			}			
			default:				
				cout << "请输入正确的选择" << endl;			}			
			fflush(stdin);			
			cin >> n;		
		}	
	}	
	mysql_close(&mysql);			//关闭数据库	
	system("pause");	
	return 0;}

function.h

#pragma once
#include <stdio.h>
#include "mysql.h"
#include<iostream>
#include<iomanip>
#include<string> 

using namespace std;  
void update(MYSQL&);						//1. 修改职员信息void 
attendance_check(MYSQL&);				//2. 对职员进行考勤 

/************************************* 【以下为功能函数】 ************************************************/ 
void print_employee(MYSQL&);				// 打印职员信息
void print_employee(MYSQL&, string&);		//【重载函数】打印某个职员信息,第二个参数为职工号
void print_attendance(MYSQL&);				//打印职员考勤情况//
void print_attendance(MYSQL&, string&);	//【重载函数】打印某个职员考勤情况,第二个参数为职工号 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值