数据库原理课程的实验要用嵌入式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写考勤/点名功能程序相关推荐

  1. HTML学生考勤界面代码,基于jsp的学生考勤系统-JavaEE实现学生考勤系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的学生考勤系统, 该项目可用各类java课程设计大作业中, 学生考勤系统的系统架构分为前后台两部分, 最终实现在线上 ...

  2. python点名代码_基于python tkinter的点名小程序功能的实例代码

    基于python tkinter的点名小程序功能的实例代码,花名册,次数,窗口,未找到,初始化 基于python tkinter的点名小程序功能的实例代码 易采站长站,站长之家为您整理了基于pytho ...

  3. Python3 使用 pymysql 连接 MySQL 建表时出现 Warning3719 UTF8 警告

    在学习 Python3 爬虫关系型数据库储存时,利用 pymysql 连接 MySQL 建表,测试用的代码如下,第一句 SQL 用于获取当前 MySQL 的版本信息,第二句 SQL 执行创建 spid ...

  4. Shell脚本导出导入MySQL建表语句

    Shell脚本导出导入MySQL建表语句 一.导出sql语句 1.需求: 2.shell脚本如下: 二.导入sql语句 1.需求 2.shell实现1 3.shell实现2 一.导出sql语句 1.需 ...

  5. 学生签到系统c代码_C++实现学生考勤信息管理系统

    学生考勤信息管理系统记录了学生的缺课情况,它包括: 缺课日期.第几节课.课程名称.学生姓名.学生学号.缺课类型(迟到.请假及旷课).系统具有以下功能: 1).录入学生的缺课记录: 2).修改某个学生的 ...

  6. mysql 建表 title create table_mysql中create命令建表sql语句

    MySQL中create table语句的基本语法是: 代码如下 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definiti ...

  7. 华为H3C交换机+Radius+mysql Radius认证认证方案,嵌入式客户端代码,配置(下:交换机和Radius服务器配置)

    (一交互机配置) 1 802.1x本地认证方案配置 当Radius服务器不可用的时候,需要在交换机本地有一个备用认证方案,用户名和密码设置在交换机上替换Radius Server完成对交换机端口的认证 ...

  8. MySql 建表出现的问题:[ERR] 1064 - You have an error in your SQL syntax; check the manual..........

    使用 MySql 建表出现的问题 在使用 Navicat Premium 运行 sql 语句进行建表时,MySQL 报错如下: 建表语句: DROP DATABASE IF EXISTS javawe ...

  9. 如何通过SQL Server语句查询三个月内的信息代码的教程方法

    如何通过SQL Server语句查询三个月内的信息代码的教程方法 作者:张国军_Suger 开发工具与关键技术:SQL Server 2014.SQL.SQL关键字         由于需求需要我们达 ...

  10. SQL server删除表信息代码

    SQL server删除表信息代码: 1.delete删除: delete * from table--只是删除了表中的内容,并没有把表删除. 2.drop删除: drop table 表名--把整个 ...

最新文章

  1. 某程序员以阿里为原型写小说!阿里员工:每件事都是真的!网友:建议拍成电视剧!...
  2. java中常用的几种排序算法--常见笔试面试
  3. C++:39---继承中构造函数、析构函数的关系
  4. 我们渴望和平freeeim
  5. React UI 库 React Suite 3.7.9 版本更新
  6. 敲黑板!从零开始,小白如何通过Kaggle竞赛提高数据分析能力!
  7. 斐讯路由器k3c虚拟服务器,斐讯K3C路由器32.1.26.175如何打开telnet升级到官改固件教程...
  8. 工业4.0的网络技术(TSN)
  9. Python+Selenium爬取新浪微博数据
  10. 经典佳句(500)言
  11. 深度评测阿里云、腾讯云和华为云
  12. Tackling the Qubit Mapping Problem for NISQ-Era Quantum Devices
  13. javafx 教程_示例介绍:JavaFX 8打印
  14. 【PTA】7-7 大炮打蚊子
  15. ArduPilot姿态控制方法解析---(倾转分离)
  16. 第三章 μC/OS-Ⅱ中的任务
  17. 虚拟机(Ubuntu18.04版本)中文字体乱码或混乱的一种解决方案
  18. 桌面自动化-SuperPatrick工具图像识别点击解析
  19. 输出大写字母字符串中每个大写字母之后的第5个字母所对应的小写字母
  20. go语言学习笔记 — go工具(4):使用go install,编译并安装

热门文章

  1. 一文读懂DH密钥交换算法
  2. 谷歌FLASH无法添加保存网站
  3. 【 PID 算法 】PID 算法基础
  4. AUTOCAD 绘图技巧
  5. 斐波那契堆 - 解析与实现
  6. PMP课程笔记:第5章 项目范围管理
  7. 安全HCIP之eSight
  8. nfc加密卡pm3和pm5区别_为了省门禁卡的钱,买了NFC读卡器,到底值不值
  9. 科猫网:72个白手起家创业点子推荐
  10. Java毕设项目宠物医院管理系统计算机(附源码+系统+数据库+LW)