mysql建考勤信息代码_C++嵌入式SQL写考勤/点名功能程序
数据库原理课程的实验要用嵌入式SQL实现一个职工考勤功能的程序,在网上学习许久发现C++操作mysql数据库的资料身份少。好不容易在VS2017用C++连接Mysql数据库后,却又发现《数据库系统概论》书里讲的方法(EXEC,通信区什么的)好像用不了qwq(当然可能是我没找到使用的办法)。
于是只能上网找资料模仿着实现:
按照上面一步步走应该是可以连上Mysql数据库的;
这里讲一下一些可能的坑点:如果是像Wamp这样的集成环境,Mysql可能会没有include和lib文件夹,不过没关系,到官方网站下载一个免安装版本的ZIP格式,然后把免安装版本的lin和include放到工程目录下就可以了。
连接成功后看上面的API就可以对数据库操作了。其实主要用到也就是:用字符串拼接成SQL语句然后用mysql_query()执行语句,接着用mysql_store_result得到查询结果(如果有的话),最后再用mysql_fetch_row把结果一行一行取出来。
这里贴下我的代码(才疏学浅写得很丑功能简陋,大佬轻喷):
实现的功能是:
随机读取数据库中的记录来生成一份可以任意指定规模到名单,来实现随机考勤。数据库中存放的是职工信息,包括职工号、职工姓名、职工所在部门、部门领导、每一次考勤记录、考勤成绩等。采用嵌入式的SQL编程实现。
基本规则:1)每一次考勤,不在名单中的职工默认考勤通过,2)考勤通过者,相应的考勤成绩+1,且在相应的考勤记录中记录“通过”,3)连续三次考勤不通过,考勤成绩置0,4)累计5次考勤不通过,考勤成绩永久置0。
数据库的设计是:
数据库Rollcall有两个表Staff表和Record表:
Staff表用于存储职工的职工号、职工姓名、职工所在部门、部门领导、总考勤成绩、总缺勤次数、连续缺勤次数。
Record表用于记录每个职工每一次的出勤情况,1代表出勤,0代表缺勤。
按道理来说,这里得考勤记录应该一列一列插入,博主这里没有时间实现了,大家可以尝试这样做。
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include "mysql.h" //包含MySQL的API函数的头文件
8 #pragma comment(lib,"libmysql.lib") //导入libmysql.lib库
9 using namespacestd;10 MYSQL mysql;11 int tot = 0; //考勤次数
12
13 void setrec(string id, int abs) { //在record表设置第tot次考勤记录
14 string sql = "update record set RC"+to_string(tot)+"="+to_string(abs)+"where ID=" + id + ";";15 mysql_query(&mysql, sql.c_str());16 }17
18 void absence(string id,int &tscore,int &ttotabs,int &tconabs) { //员工id出勤
19 setrec(id, 0);20 if (tscore < 0) return;21 ttotabs++; tconabs++; //缺勤,总缺勤次数和连续缺勤次数+1
22 if (tconabs >= 3) tscore = 0; //连续三次考勤不通过,考勤成绩置0
23 if (ttotabs >= 5) tscore = -1; //累计5次考勤不通过,考勤成绩永久置0
24 string sql = "update staff set Score="+to_string(tscore)+",TotAbs="+to_string(ttotabs)+",ConAbs="+to_string(tconabs)+"where ID=" + id + ";";25 mysql_query(&mysql, sql.c_str()); //更新数据
26 }27 void noabsence(string id, int &tscore, int &ttotabs, int &tconabs) { //员工id缺勤
28 setrec(id, 1);29 if (tscore < 0) return;30 tscore++; //考勤通过者,相应的考勤成绩+1
31 tconabs = 0; //出勤,连续缺勤次数置零
32 string sql = "update staff set Score=" + to_string(tscore) + ",TotAbs=" + to_string(ttotabs) + ",ConAbs=" + to_string(tconabs) + "where ID=" + id + ";";33 mysql_query(&mysql, sql.c_str()); //更新数据
34 }35
36 void rollcall(string id,int abs) { //考勤函数37 //cout << id << " " << abs << endl; return;
38 string sql = "select Score,TotAbs,ConAbs from staff where ID="+id+";";39 mysql_query(&mysql, sql.c_str());40 MYSQL_RES *res = mysql_store_result(&mysql); //读取结果
41 MYSQL_ROW row; //数据库一行查询结果
42 while ((row = mysql_fetch_row(res)) !=NULL) {43 int tscore = atoi(row[0]); //总考勤成绩
44 int ttotabs = atoi(row[1]); //总缺勤次数
45 int tconabs = atoi(row[2]); //连续缺勤次数
46 if (abs == 0) absence(id, tscore, ttotabs, tconabs);47 elsenoabsence(id, tscore, ttotabs, tconabs);48 printf("考勤成绩:%d;总缺勤次数:%d;连续缺勤次数:%d;\n", tscore, ttotabs, tconabs);49 if (tscore == -1) printf("该员工缺勤超过5次,考勤成绩永远置零\n");50 }51 }52
53 string getname(stringid) {54 string sql = "select Name from staff where ID=" + id + ";";55 mysql_query(&mysql, sql.c_str());56 MYSQL_RES *res = mysql_store_result(&mysql); //读取结果
57 MYSQL_ROW row=mysql_fetch_row(res);58 return row[0];59 }60
61 void dorandom(int num) { //随机读取数据库num个员工进行考勤
62 string sql = "select ID,Name from Staff;";63 mysql_query(&mysql, sql.c_str());64 MYSQL_RES *res = mysql_store_result(&mysql); //读取结果
65 MYSQL_ROW row; //数据库一行查询结果
66 string tID[100]; int p = 0;67 while ((row = mysql_fetch_row(res)) != NULL) { tID[p++] = row[0]; }68 num =min(num, p);69 random_shuffle(tID, tID+p); //打乱ID数组制造随机,取前num个作为本次考勤名单
70 printf("\n下面开始考勤,该员工出勤请输入Y,缺勤请输入N;\n");71 for (int i = 0; i < num; i++) {72 cout<
83 void inspect(string id) { //特别考察职工号ID的员工出勤情况
84 cout << "员工" << id << " " << getname(id) << "是否出勤?出勤请输入Y,缺勤请输入N;";85 char ch[3]; scanf_s("%s", ch, 3); printf("\n");86 if (ch[0] == 'Y') rollcall(id, 1); else rollcall(id, 0);87 }88
89 void update() { //修改职工信息
90 printf("请输入要修改员工信息\n");91 stringhid,hname,hdep,hlead;92 cout << "职工号:"; cin >>hid;93 cout << "姓名:"; cin >>hname;94 cout << "部门:"; cin >>hdep;95 cout << "领导:"; cin >>hlead;96 string sql = "update staff set Name='" + hname + "',Dep='" + hdep + "',Leader='" + hlead + "' where ID=" + hid+";";97 if (!mysql_query(&mysql, sql.c_str())) printf("更新成功\n"); else printf("更新失败\n");98 }99
100 void Init() { //方便实验:初始化表格数据
101 string sql = "update staff set Score=0,TotAbs=0,ConAbs=0;";102 mysql_query(&mysql, sql.c_str());103 sql = "update record set RC1=0,RC2=0,RC3=0,RC4=0,RC5=0,RC6=0;RC7=0;RC8=0;RC9=0;";104 mysql_query(&mysql, sql.c_str());105 }106
107 intmain()108 {109 mysql_init(&mysql);110 //mysql_real_connect连接到MySQL数据库服务器,其中localhost为服务器机器名,root为连接用户名,为密码,111 //Rollcall为数据库名,3306为端口号
112 if (mysql_real_connect(&mysql, "localhost", "root", "", "Rollcall", 3306, 0, 0) ) {113 mysql_query(&mysql, "set names gb2312"); //设置字符集防止输出中文乱码
114 Init(); //方便实验:初始化表格数据
115 do{116 printf("----------------------------------------------------------------------------------------------\n");117 tot++; //考勤次数
118 printf("连接成功,请开始第%d次考勤\n",tot);119 for(;;) {120 printf("\n输入数字代表将要随机考勤的人数,输入职工号考察特定员工,需要修改员工信息请输入U;\n");121 printf("输入Q代表结束本次考勤;\n");122 char s[20]; scanf("%s", s);123 if (s[0] == 'Q') break;124 if (s[0]=='U') update();125 else if (strlen(s) > 2) inspect(s);126 elsedorandom(atoi(s));127 }128 } while (1);129 }130 else printf("数据库不存在!\n");131 mysql_close(&mysql);132 return 0;133 }
mysql建考勤信息代码_C++嵌入式SQL写考勤/点名功能程序相关推荐
- HTML学生考勤界面代码,基于jsp的学生考勤系统-JavaEE实现学生考勤系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的学生考勤系统, 该项目可用各类java课程设计大作业中, 学生考勤系统的系统架构分为前后台两部分, 最终实现在线上 ...
- python点名代码_基于python tkinter的点名小程序功能的实例代码
基于python tkinter的点名小程序功能的实例代码,花名册,次数,窗口,未找到,初始化 基于python tkinter的点名小程序功能的实例代码 易采站长站,站长之家为您整理了基于pytho ...
- Python3 使用 pymysql 连接 MySQL 建表时出现 Warning3719 UTF8 警告
在学习 Python3 爬虫关系型数据库储存时,利用 pymysql 连接 MySQL 建表,测试用的代码如下,第一句 SQL 用于获取当前 MySQL 的版本信息,第二句 SQL 执行创建 spid ...
- Shell脚本导出导入MySQL建表语句
Shell脚本导出导入MySQL建表语句 一.导出sql语句 1.需求: 2.shell脚本如下: 二.导入sql语句 1.需求 2.shell实现1 3.shell实现2 一.导出sql语句 1.需 ...
- 学生签到系统c代码_C++实现学生考勤信息管理系统
学生考勤信息管理系统记录了学生的缺课情况,它包括: 缺课日期.第几节课.课程名称.学生姓名.学生学号.缺课类型(迟到.请假及旷课).系统具有以下功能: 1).录入学生的缺课记录: 2).修改某个学生的 ...
- mysql 建表 title create table_mysql中create命令建表sql语句
MySQL中create table语句的基本语法是: 代码如下 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definiti ...
- 华为H3C交换机+Radius+mysql Radius认证认证方案,嵌入式客户端代码,配置(下:交换机和Radius服务器配置)
(一交互机配置) 1 802.1x本地认证方案配置 当Radius服务器不可用的时候,需要在交换机本地有一个备用认证方案,用户名和密码设置在交换机上替换Radius Server完成对交换机端口的认证 ...
- MySql 建表出现的问题:[ERR] 1064 - You have an error in your SQL syntax; check the manual..........
使用 MySql 建表出现的问题 在使用 Navicat Premium 运行 sql 语句进行建表时,MySQL 报错如下: 建表语句: DROP DATABASE IF EXISTS javawe ...
- 如何通过SQL Server语句查询三个月内的信息代码的教程方法
如何通过SQL Server语句查询三个月内的信息代码的教程方法 作者:张国军_Suger 开发工具与关键技术:SQL Server 2014.SQL.SQL关键字 由于需求需要我们达 ...
- SQL server删除表信息代码
SQL server删除表信息代码: 1.delete删除: delete * from table--只是删除了表中的内容,并没有把表删除. 2.drop删除: drop table 表名--把整个 ...
最新文章
- 某程序员以阿里为原型写小说!阿里员工:每件事都是真的!网友:建议拍成电视剧!...
- java中常用的几种排序算法--常见笔试面试
- C++:39---继承中构造函数、析构函数的关系
- 我们渴望和平freeeim
- React UI 库 React Suite 3.7.9 版本更新
- 敲黑板!从零开始,小白如何通过Kaggle竞赛提高数据分析能力!
- 斐讯路由器k3c虚拟服务器,斐讯K3C路由器32.1.26.175如何打开telnet升级到官改固件教程...
- 工业4.0的网络技术(TSN)
- Python+Selenium爬取新浪微博数据
- 经典佳句(500)言
- 深度评测阿里云、腾讯云和华为云
- Tackling the Qubit Mapping Problem for NISQ-Era Quantum Devices
- javafx 教程_示例介绍:JavaFX 8打印
- 【PTA】7-7 大炮打蚊子
- ArduPilot姿态控制方法解析---(倾转分离)
- 第三章 μC/OS-Ⅱ中的任务
- 虚拟机(Ubuntu18.04版本)中文字体乱码或混乱的一种解决方案
- 桌面自动化-SuperPatrick工具图像识别点击解析
- 输出大写字母字符串中每个大写字母之后的第5个字母所对应的小写字母
- go语言学习笔记 — go工具(4):使用go install,编译并安装