2022-07-06 16:42 上传sql文件,bean对象转存为h文件,改写为通用参数化sql语句
This commit is contained in:
parent
fc3e710d50
commit
d3d9ae2bb4
23
BaseDAO.h
Normal file
23
BaseDAO.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* 数据库操作基础接口
|
||||||
|
*/
|
||||||
|
#ifndef BASE_DAO_H
|
||||||
|
#define BASE_DAO_H
|
||||||
|
|
||||||
|
#import "c:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF", "EndOfFile")
|
||||||
|
|
||||||
|
#include<iostream>
|
||||||
|
#include<string>
|
||||||
|
#include<vector>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 对参数化sql语句进行参数填充并执行
|
||||||
|
* @param connection 数据库连接
|
||||||
|
* @param sql 待填充和执行的sql语句
|
||||||
|
* @param v 要填充的参数(无参数则传入NULL)
|
||||||
|
* @return _RecordsetPtr 返回记录集指针
|
||||||
|
*/
|
||||||
|
_RecordsetPtr executeSql(_ConnectionPtr connection, const char* sql, vector<string>* v);
|
||||||
|
|
||||||
|
#endif // !BASE_DAO_H
|
22
BaseDAOImpl.cpp
Normal file
22
BaseDAOImpl.cpp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* 数据库操作基础接口实现
|
||||||
|
*/
|
||||||
|
#include"BaseDAO.h"
|
||||||
|
|
||||||
|
_RecordsetPtr executeSql(_ConnectionPtr connection, const char* sql, vector<string>* v) {
|
||||||
|
if (v == NULL) {
|
||||||
|
return connection->Execute(sql, NULL, (long)0);
|
||||||
|
}
|
||||||
|
|
||||||
|
_CommandPtr command(__uuidof(Command));
|
||||||
|
command->ActiveConnection = connection;
|
||||||
|
command->CommandText = sql;
|
||||||
|
command->CommandType = adCmdText;
|
||||||
|
size_t size = v->size();
|
||||||
|
for (size_t i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
_ParameterPtr p = command->CreateParameter("var" + i, adBSTR, adParamInput, sizeof((*v)[i].c_str()), (*v)[i].c_str());
|
||||||
|
command->Parameters->Append(p);
|
||||||
|
}
|
||||||
|
return command->Execute(NULL, NULL, long(0));
|
||||||
|
}
|
@ -9,6 +9,7 @@
|
|||||||
#include<iostream>
|
#include<iostream>
|
||||||
#include<vector>
|
#include<vector>
|
||||||
#include"Course.h"
|
#include"Course.h"
|
||||||
|
#include"BaseDAO.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 向数据库添加课程
|
* 向数据库添加课程
|
||||||
|
@ -1,27 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* 课程表数据库操作接口实现
|
||||||
|
*/
|
||||||
#include"CourseDAO.h"
|
#include"CourseDAO.h"
|
||||||
|
|
||||||
void addCourse(_ConnectionPtr connection, Course course) {
|
void addCourse(_ConnectionPtr connection, Course course) {
|
||||||
string sql = "insert into course values('" + course.getId() + "'," +
|
string sql = "insert into course values(?,?)";
|
||||||
"'" + course.getName() + "')";
|
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(course.getId());
|
||||||
|
v->push_back(course.getName());
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deleteCourse(_ConnectionPtr connection, string id) {
|
void deleteCourse(_ConnectionPtr connection, string id) {
|
||||||
string sql = "delete from course where id = '" + id + "'";
|
string sql = "delete from course where id = ?";
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(id);
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateCourseName(_ConnectionPtr connection, string id, string name) {
|
void updateCourseName(_ConnectionPtr connection, string id, string name) {
|
||||||
string sql = "update course set name = '" + name + "\' where id = \'" + id + "'";
|
string sql = "update course set name = ? where id = ?";
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(name);
|
||||||
|
v->push_back(id);
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
Course* getCourseById(_ConnectionPtr connection, string id) {
|
Course* getCourseById(_ConnectionPtr connection, string id) {
|
||||||
string sql = "select * from course where id = '" + id + "'";
|
string sql = "select * from course where id = ?";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(id);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
Course* course = new Course();
|
Course* course = new Course();
|
||||||
@ -31,8 +48,12 @@ Course* getCourseById(_ConnectionPtr connection, string id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Course* getCourseByName(_ConnectionPtr connection, string name) {
|
Course* getCourseByName(_ConnectionPtr connection, string name) {
|
||||||
string sql = "select * from course where name = '" + name + "'";
|
string sql = "select * from course where name = ?";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(name);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
Course* course = new Course();
|
Course* course = new Course();
|
||||||
@ -43,7 +64,7 @@ Course* getCourseByName(_ConnectionPtr connection, string name) {
|
|||||||
|
|
||||||
std::vector<Course>* getAllCourse(_ConnectionPtr connection) {
|
std::vector<Course>* getAllCourse(_ConnectionPtr connection) {
|
||||||
string sql = "select * from course";
|
string sql = "select * from course";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), NULL);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
std::vector<Course>* v = new std::vector<Course>();
|
std::vector<Course>* v = new std::vector<Course>();
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/*
|
||||||
|
* 数据库连接工具函数接口实现
|
||||||
|
*/
|
||||||
#include"DBCUtils.h"
|
#include"DBCUtils.h"
|
||||||
|
|
||||||
bool getConnection(std::string& pwd, _ConnectionPtr& connection) {
|
bool getConnection(std::string& pwd, _ConnectionPtr& connection) {
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include<iostream>
|
#include<iostream>
|
||||||
#include<vector>
|
#include<vector>
|
||||||
#include"Grade.h"
|
#include"Grade.h"
|
||||||
|
#include"BaseDAO.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 向数据库添加成绩
|
* 向数据库添加成绩
|
||||||
|
145
GradeDAOImpl.cpp
145
GradeDAOImpl.cpp
@ -1,40 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* 成绩表数据库操作接口实现
|
||||||
|
*/
|
||||||
#include"GradeDAO.h"
|
#include"GradeDAO.h"
|
||||||
|
|
||||||
void addGrade(_ConnectionPtr connection, Grade grade) {
|
void addGrade(_ConnectionPtr connection, Grade grade) {
|
||||||
string sql = "insert into grade values('" + grade.getStuId() + "'," +
|
string sql = "insert into grade values(?,?,?)";
|
||||||
"'" + grade.getCourseId() + "'," +
|
|
||||||
"'" + grade.getGradeStr() + "')";
|
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(grade.getStuId());
|
||||||
|
v->push_back(grade.getCourseId());
|
||||||
|
v->push_back(grade.getGradeStr());
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deleteOnesGrade(_ConnectionPtr connection, string stuId, string courseId) {
|
void deleteOnesGrade(_ConnectionPtr connection, string stuId, string courseId) {
|
||||||
string sql = "delete from grade where stuId = '" + stuId + "\' and courseId = \'" + courseId + "'";
|
string sql = "delete from grade where stuId = ? and courseId = ?";
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuId);
|
||||||
|
v->push_back(courseId);
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deleteGradeByStuId(_ConnectionPtr connection, string stuId) {
|
void deleteGradeByStuId(_ConnectionPtr connection, string stuId) {
|
||||||
string sql = "delete from grade where stuId = '" + stuId + "'";
|
string sql = "delete from grade where stuId = ?";
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuId);
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deleteGradeByCourseId(_ConnectionPtr connection, string courseId) {
|
void deleteGradeByCourseId(_ConnectionPtr connection, string courseId) {
|
||||||
string sql = "delete from grade where courseId = '" + courseId + "'";
|
string sql = "delete from grade where courseId = ?";
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(courseId);
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateOnesGrade(_ConnectionPtr connection, string stuId, string courseId, string grade) {
|
void updateOnesGrade(_ConnectionPtr connection, string stuId, string courseId, string grade) {
|
||||||
string sql = "update grade set grade = " + grade + " where stuId = '" + stuId + "\' and courseId = \'" + courseId + "'";
|
string sql = "update grade set grade = ? where stuId = ? and courseId = ?";
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(grade);
|
||||||
|
v->push_back(stuId);
|
||||||
|
v->push_back(courseId);
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
Grade* getOnesGrade(_ConnectionPtr connection, string stuId,string courseId) {
|
Grade* getOnesGrade(_ConnectionPtr connection, string stuId,string courseId) {
|
||||||
string sql = "select * from grade where stuId = '" + stuId + "\' and courseId = \'" + courseId + "'";
|
string sql = "select * from grade where stuId = ? and courseId = ?";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuId);
|
||||||
|
v->push_back(courseId);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
Grade* grade = new Grade();
|
Grade* grade = new Grade();
|
||||||
@ -45,59 +71,72 @@ Grade* getOnesGrade(_ConnectionPtr connection, string stuId,string courseId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Grade>* getGradeByStuId(_ConnectionPtr connection, string stuId) {
|
std::vector<Grade>* getGradeByStuId(_ConnectionPtr connection, string stuId) {
|
||||||
string sql = "select * from grade where stuId = '" + stuId + "'";
|
string sql = "select * from grade where stuId = ?";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuId);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
std::vector<Grade>* v = new std::vector<Grade>();
|
std::vector<Grade>* vg = new std::vector<Grade>();
|
||||||
Grade* grade;
|
Grade* grade;
|
||||||
for (; !record->EndOfFile; record->MoveNext()) {
|
for (; !record->EndOfFile; record->MoveNext()) {
|
||||||
grade = new Grade();
|
grade = new Grade();
|
||||||
grade->setStuId((char*)(_bstr_t)record->Fields->GetItem("stuId")->Value);
|
grade->setStuId((char*)(_bstr_t)record->Fields->GetItem("stuId")->Value);
|
||||||
grade->setCourseId((char*)(_bstr_t)record->Fields->GetItem("courseId")->Value);
|
grade->setCourseId((char*)(_bstr_t)record->Fields->GetItem("courseId")->Value);
|
||||||
grade->setGrade((char*)(_bstr_t)record->Fields->GetItem("grade")->Value);
|
grade->setGrade((char*)(_bstr_t)record->Fields->GetItem("grade")->Value);
|
||||||
v->push_back(*grade);
|
vg->push_back(*grade);
|
||||||
}
|
}
|
||||||
return v;
|
return vg;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Grade>* getGradeByCourseId(_ConnectionPtr connection, string courseId) {
|
std::vector<Grade>* getGradeByCourseId(_ConnectionPtr connection, string courseId) {
|
||||||
string sql = "select * from grade where courseId = '" + courseId + "'";
|
string sql = "select * from grade where courseId = ?";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(courseId);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
std::vector<Grade>* v = new std::vector<Grade>();
|
std::vector<Grade>* vg = new std::vector<Grade>();
|
||||||
Grade* grade;
|
Grade* grade;
|
||||||
for (; !record->EndOfFile; record->MoveNext()) {
|
for (; !record->EndOfFile; record->MoveNext()) {
|
||||||
grade = new Grade();
|
grade = new Grade();
|
||||||
grade->setStuId((char*)(_bstr_t)record->Fields->GetItem("stuId")->Value);
|
grade->setStuId((char*)(_bstr_t)record->Fields->GetItem("stuId")->Value);
|
||||||
grade->setCourseId((char*)(_bstr_t)record->Fields->GetItem("courseId")->Value);
|
grade->setCourseId((char*)(_bstr_t)record->Fields->GetItem("courseId")->Value);
|
||||||
grade->setGrade((char*)(_bstr_t)record->Fields->GetItem("grade")->Value);
|
grade->setGrade((char*)(_bstr_t)record->Fields->GetItem("grade")->Value);
|
||||||
v->push_back(*grade);
|
vg->push_back(*grade);
|
||||||
}
|
}
|
||||||
return v;
|
return vg;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Grade>* getGradeByStuClass(_ConnectionPtr connection, string stuClass) {
|
std::vector<Grade>* getGradeByStuClass(_ConnectionPtr connection, string stuClass) {
|
||||||
string sql = "select * from grade where stuId in(select id from student where stuClass = '" + stuClass + "')";
|
string sql = "select * from grade where stuId in (select id from student where stuClass = ?)";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuClass);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
std::vector<Grade>* v = new std::vector<Grade>();
|
std::vector<Grade>* vg = new std::vector<Grade>();
|
||||||
Grade* grade;
|
Grade* grade;
|
||||||
for (; !record->EndOfFile; record->MoveNext()) {
|
for (; !record->EndOfFile; record->MoveNext()) {
|
||||||
grade = new Grade();
|
grade = new Grade();
|
||||||
grade->setStuId((char*)(_bstr_t)record->Fields->GetItem("stuId")->Value);
|
grade->setStuId((char*)(_bstr_t)record->Fields->GetItem("stuId")->Value);
|
||||||
grade->setCourseId((char*)(_bstr_t)record->Fields->GetItem("courseId")->Value);
|
grade->setCourseId((char*)(_bstr_t)record->Fields->GetItem("courseId")->Value);
|
||||||
grade->setGrade((char*)(_bstr_t)record->Fields->GetItem("grade")->Value);
|
grade->setGrade((char*)(_bstr_t)record->Fields->GetItem("grade")->Value);
|
||||||
v->push_back(*grade);
|
vg->push_back(*grade);
|
||||||
}
|
}
|
||||||
return v;
|
return vg;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Grade>* getAllGrade(_ConnectionPtr connection) {
|
std::vector<Grade>* getAllGrade(_ConnectionPtr connection) {
|
||||||
string sql = "select * from grade";
|
string sql = "select * from grade";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), NULL);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
std::vector<Grade>* v = new std::vector<Grade>();
|
std::vector<Grade>* v = new std::vector<Grade>();
|
||||||
@ -113,8 +152,12 @@ std::vector<Grade>* getAllGrade(_ConnectionPtr connection) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
double getOnesAvgGrade(_ConnectionPtr connection, string stuId) {
|
double getOnesAvgGrade(_ConnectionPtr connection, string stuId) {
|
||||||
string sql = "select count(*) cnt,sum(grade) all_grade from grade where stuId = '" + stuId + "'";
|
string sql = "select count(*) cnt,sum(grade) all_grade from grade where stuId = ?";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuId);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
int cnt = atoi((char*)(_bstr_t)record->Fields->GetItem("cnt")->Value);
|
int cnt = atoi((char*)(_bstr_t)record->Fields->GetItem("cnt")->Value);
|
||||||
@ -123,35 +166,51 @@ double getOnesAvgGrade(_ConnectionPtr connection, string stuId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
double getOnesAllGrade(_ConnectionPtr connection, string stuId) {
|
double getOnesAllGrade(_ConnectionPtr connection, string stuId) {
|
||||||
string sql = "select sum(grade) all_grade from grade where stuId = '" + stuId + "'";
|
string sql = "select sum(grade) all_grade from grade where stuId = ?";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuId);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
return atof((char*)(_bstr_t)record->Fields->GetItem("all_grade")->Value);
|
return atof((char*)(_bstr_t)record->Fields->GetItem("all_grade")->Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
double getClassAvgGrade(_ConnectionPtr connection, string stuClass, string courseName) {
|
double getClassAvgGrade(_ConnectionPtr connection, string stuClass, string courseName) {
|
||||||
string sql = "select avg(grade) avg_grade from grade where stuId in (select id from student where stuClass = '" + stuClass + "') ";
|
string sql = "select avg(grade) avg_grade from grade where stuId in (select id from student where stuClass = ?) and courseId in (select id from course where name = ?)";
|
||||||
sql += "and courseId in (select id from course where name = '" + courseName + "')";
|
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuClass);
|
||||||
|
v->push_back(courseName);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
return atof((char*)(_bstr_t)record->Fields->GetItem("avg_grade")->Value);
|
return atof((char*)(_bstr_t)record->Fields->GetItem("avg_grade")->Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
double getClassMaxGrade(_ConnectionPtr connection, string stuClass, string courseName) {
|
double getClassMaxGrade(_ConnectionPtr connection, string stuClass, string courseName) {
|
||||||
string sql = "select max(grade) max_grade from grade where stuId in (select id from student where stuClass = '" + stuClass + "') ";
|
string sql = "select max(grade) max_grade from grade where stuId in (select id from student where stuClass = ?) and courseId in (select id from course where name = ?)";
|
||||||
sql += "and courseId in (select id from course where name = '" + courseName + "')";
|
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuClass);
|
||||||
|
v->push_back(courseName);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
return atof((char*)(_bstr_t)record->Fields->GetItem("max_grade")->Value);
|
return atof((char*)(_bstr_t)record->Fields->GetItem("max_grade")->Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
double getClassMinGrade(_ConnectionPtr connection, string stuClass, string courseName) {
|
double getClassMinGrade(_ConnectionPtr connection, string stuClass, string courseName) {
|
||||||
string sql = "select min(grade) min_grade from grade where stuId in (select id from student where stuClass = '" + stuClass + "') ";
|
string sql = "select min(grade) min_grade from grade where stuId in (select id from student where stuClass = ?) and courseId in (select id from course where name = ?)";
|
||||||
sql += "and courseId in (select id from course where name = '" + courseName + "')";
|
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuClass);
|
||||||
|
v->push_back(courseName);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
return atof((char*)(_bstr_t)record->Fields->GetItem("min_grade")->Value);
|
return atof((char*)(_bstr_t)record->Fields->GetItem("min_grade")->Value);
|
||||||
|
3
Menu.cpp
3
Menu.cpp
@ -1,3 +1,6 @@
|
|||||||
|
/*
|
||||||
|
* 菜单接口实现
|
||||||
|
*/
|
||||||
#include"Menu.h"
|
#include"Menu.h"
|
||||||
|
|
||||||
void mainMenu(_ConnectionPtr connection) {
|
void mainMenu(_ConnectionPtr connection) {
|
||||||
|
3
Menu.h
3
Menu.h
@ -12,9 +12,6 @@
|
|||||||
#include<direct.h>
|
#include<direct.h>
|
||||||
#include<io.h>
|
#include<io.h>
|
||||||
|
|
||||||
#include"Student.cpp"
|
|
||||||
#include"Course.cpp"
|
|
||||||
#include"Grade.cpp"
|
|
||||||
#include"DBCUtils.h"
|
#include"DBCUtils.h"
|
||||||
#include"MenuUtils.h"
|
#include"MenuUtils.h"
|
||||||
#include"StringUtils.h"
|
#include"StringUtils.h"
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/*
|
||||||
|
* 菜单工具接口实现
|
||||||
|
*/
|
||||||
#include"MenuUtils.h"
|
#include"MenuUtils.h"
|
||||||
|
|
||||||
void checkOptInput(int& opt, int low, int high) {
|
void checkOptInput(int& opt, int low, int high) {
|
||||||
|
@ -127,6 +127,7 @@
|
|||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClCompile Include="BaseDAOImpl.cpp" />
|
||||||
<ClCompile Include="CourseDAOImpl.cpp" />
|
<ClCompile Include="CourseDAOImpl.cpp" />
|
||||||
<ClCompile Include="DBCUtils.cpp" />
|
<ClCompile Include="DBCUtils.cpp" />
|
||||||
<ClCompile Include="GradeDAOImpl.cpp" />
|
<ClCompile Include="GradeDAOImpl.cpp" />
|
||||||
@ -137,6 +138,7 @@
|
|||||||
<ClCompile Include="StudentDAOImpl.cpp" />
|
<ClCompile Include="StudentDAOImpl.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="BaseDAO.h" />
|
||||||
<ClInclude Include="Course.h" />
|
<ClInclude Include="Course.h" />
|
||||||
<ClInclude Include="CourseDAO.h" />
|
<ClInclude Include="CourseDAO.h" />
|
||||||
<ClInclude Include="DBCUtils.h" />
|
<ClInclude Include="DBCUtils.h" />
|
||||||
|
@ -39,6 +39,9 @@
|
|||||||
<ClCompile Include="StringUtils.cpp">
|
<ClCompile Include="StringUtils.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="BaseDAOImpl.cpp">
|
||||||
|
<Filter>源文件</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="DBCUtils.h">
|
<ClInclude Include="DBCUtils.h">
|
||||||
@ -71,5 +74,8 @@
|
|||||||
<ClInclude Include="Grade.h">
|
<ClInclude Include="Grade.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="BaseDAO.h">
|
||||||
|
<Filter>头文件</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -1,3 +1,6 @@
|
|||||||
|
/*
|
||||||
|
* 字符串工具接口实现
|
||||||
|
*/
|
||||||
#include"StringUtils.h"
|
#include"StringUtils.h"
|
||||||
|
|
||||||
string doubleToString(double num) {
|
string doubleToString(double num) {
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/*
|
||||||
|
* 俚륜눔묏야쌈왯
|
||||||
|
*/
|
||||||
#ifndef STRING_UTILS_H
|
#ifndef STRING_UTILS_H
|
||||||
#define STRING_UTILS_H
|
#define STRING_UTILS_H
|
||||||
#define _CRT_SECURE_NO_WARNINGS
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include<iostream>
|
#include<iostream>
|
||||||
#include<vector>
|
#include<vector>
|
||||||
#include"Student.h"
|
#include"Student.h"
|
||||||
|
#include"BaseDAO.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 向数据库添加学生
|
* 向数据库添加学生
|
||||||
|
@ -1,36 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* 学生表数据库操作接口实现
|
||||||
|
*/
|
||||||
#include"StudentDAO.h"
|
#include"StudentDAO.h"
|
||||||
|
|
||||||
void addStudent(_ConnectionPtr connection, Student student) {
|
void addStudent(_ConnectionPtr connection, Student student) {
|
||||||
string sql = "insert into student values('" + student.getId() + "'," +
|
string sql = "insert into student values(?,?,?,?,?)";
|
||||||
"'" + student.getName() + "'," +
|
|
||||||
"'" + student.getSex() + "'," +
|
|
||||||
"'" + student.getStuClass() + "'," +
|
|
||||||
"'" + student.getStatus() + "')";
|
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(student.getId());
|
||||||
|
v->push_back(student.getName());
|
||||||
|
v->push_back(student.getSex());
|
||||||
|
v->push_back(student.getStuClass());
|
||||||
|
v->push_back(student.getStatus());
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deleteStudent(_ConnectionPtr connection, string id) {
|
void deleteStudent(_ConnectionPtr connection, string id) {
|
||||||
string sql = "delete from student where id = '" + id + "'";
|
string sql = "delete from student where id = ?";
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(id);
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateStudentClass(_ConnectionPtr connection, string id, string stuClass) {
|
void updateStudentClass(_ConnectionPtr connection, string id, string stuClass) {
|
||||||
string sql = "update student set stuClass = '" + stuClass + "\' where id = \'" + id + "'";
|
string sql = "update student set stuClass = ? where id = ?";
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(stuClass);
|
||||||
|
v->push_back(id);
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateStudentStatus(_ConnectionPtr connection, string id, string status) {
|
void updateStudentStatus(_ConnectionPtr connection, string id, string status) {
|
||||||
string sql = "update student set status = '" + status + "\' where id = \'" + id + "'";
|
string sql = "update student set status = ? where id = ?'";
|
||||||
|
|
||||||
connection->Execute(sql.c_str(), NULL, (long)0);
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(status);
|
||||||
|
v->push_back(id);
|
||||||
|
|
||||||
|
executeSql(connection, sql.c_str(), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
Student* getStudentById(_ConnectionPtr connection, string id) {
|
Student* getStudentById(_ConnectionPtr connection, string id) {
|
||||||
string sql = "select * from student where id = '" + id + "'";
|
string sql = "select * from student where id = ?";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(id);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
Student *student = new Student();
|
Student *student = new Student();
|
||||||
@ -43,11 +64,15 @@ Student* getStudentById(_ConnectionPtr connection, string id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Student>* getStudentByName(_ConnectionPtr connection, string name) {
|
std::vector<Student>* getStudentByName(_ConnectionPtr connection, string name) {
|
||||||
string sql = "select * from student where name = '" + name + "'";
|
string sql = "select * from student where name = ?";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
vector<string>* v = new vector<string>();
|
||||||
|
v->push_back(name);
|
||||||
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), v);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
std::vector<Student> *v = new std::vector<Student>();
|
std::vector<Student> *vs = new std::vector<Student>();
|
||||||
Student* student;
|
Student* student;
|
||||||
for (; !record->EndOfFile; record->MoveNext()) {
|
for (; !record->EndOfFile; record->MoveNext()) {
|
||||||
student = new Student();
|
student = new Student();
|
||||||
@ -56,14 +81,15 @@ std::vector<Student>* getStudentByName(_ConnectionPtr connection, string name) {
|
|||||||
student->setSex((char*)(_bstr_t)record->Fields->GetItem("sex")->Value);
|
student->setSex((char*)(_bstr_t)record->Fields->GetItem("sex")->Value);
|
||||||
student->setStuClass((char*)(_bstr_t)record->Fields->GetItem("stuClass")->Value);
|
student->setStuClass((char*)(_bstr_t)record->Fields->GetItem("stuClass")->Value);
|
||||||
student->setStatus((char*)(_bstr_t)record->Fields->GetItem("status")->Value);
|
student->setStatus((char*)(_bstr_t)record->Fields->GetItem("status")->Value);
|
||||||
v->push_back(*student);
|
vs->push_back(*student);
|
||||||
}
|
}
|
||||||
return v;
|
return vs;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Student>* getAllStudent(_ConnectionPtr connection) {
|
std::vector<Student>* getAllStudent(_ConnectionPtr connection) {
|
||||||
string sql = "select * from student";
|
string sql = "select * from student";
|
||||||
_RecordsetPtr record = connection->Execute(sql.c_str(), NULL, (long)0);
|
|
||||||
|
_RecordsetPtr record = executeSql(connection, sql.c_str(), NULL);
|
||||||
if (record->BOF == -1) return NULL;//记录集为空
|
if (record->BOF == -1) return NULL;//记录集为空
|
||||||
|
|
||||||
std::vector<Student>* v = new std::vector<Student>();
|
std::vector<Student>* v = new std::vector<Student>();
|
||||||
|
57
v2.sql
Normal file
57
v2.sql
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
create database stuAdminSystem;
|
||||||
|
|
||||||
|
use stuAdminSystem;
|
||||||
|
|
||||||
|
create table student(
|
||||||
|
id nvarchar(10) primary key,
|
||||||
|
name nvarchar(15) not null,
|
||||||
|
sex nvarchar(5) not null,
|
||||||
|
stuClass nvarchar(20) not null,
|
||||||
|
status nvarchar(10) not null
|
||||||
|
);
|
||||||
|
|
||||||
|
create table course(
|
||||||
|
id nvarchar(10) primary key,
|
||||||
|
name nvarchar(50) not null
|
||||||
|
);
|
||||||
|
|
||||||
|
create table grade(
|
||||||
|
stuId nvarchar(10),
|
||||||
|
courseId nvarchar(10),
|
||||||
|
graded decimal(5,2) not null,
|
||||||
|
primary key(stuId,courseId)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
insert into student
|
||||||
|
values
|
||||||
|
('1','张三','男','软件12004','在读'),
|
||||||
|
('2','李四','女','软件12004','在读'),
|
||||||
|
('3','王五','女','计科12003','在读'),
|
||||||
|
('4','赵六','女','物联网12001','在读'),
|
||||||
|
('5','李恩情','男','计科12003','在读'),
|
||||||
|
('6','魏抵税','男','软件12004','在读'),
|
||||||
|
('7','张三','女','计科12003','在读'),
|
||||||
|
('8','李六','男','软件12004','在读');
|
||||||
|
|
||||||
|
insert into course
|
||||||
|
values
|
||||||
|
('C001','高数'),
|
||||||
|
('C002','大学英语'),
|
||||||
|
('C003','线性代数'),
|
||||||
|
('C004','大学物理'),
|
||||||
|
('C005','C语言'),
|
||||||
|
('C006','体育');
|
||||||
|
|
||||||
|
insert into grade
|
||||||
|
values
|
||||||
|
('1','C001',95),
|
||||||
|
('1','C002',90),
|
||||||
|
('1','C005',97),
|
||||||
|
('2','C006',75),
|
||||||
|
('2','C001',90),
|
||||||
|
('3','C005',76),
|
||||||
|
('4','C003',75),
|
||||||
|
('5','C001',78),
|
||||||
|
('8','C001',98);
|
Loading…
x
Reference in New Issue
Block a user