项目介绍:
这个项目是楼主上学期手搓的数据库课程设计,搁置了蛮久的,今天抽空写一下总结,分享给大家一起学习与交流!
本项目通过将C++和MYSQL相结合,实现教务管理系统登录和注册,并划分教师端和学生端,教师端实现对学生和课程的增删改查,学生端实现选课。整个项目使用纯C++代码编写,没有使用框架,所以界面比较简陋,有能力的可以自行完善。
项目思维导图:
开发环境:
Windows 10
开发工具:
Virtual Studio 2019
开发语言:
C++
MYSQL (5.7.44)
依赖配置:
1、复制MYSQL安装目录下\lib\libmysql.dll文件到C:\Windows\System32
2、打开项目属性>VC++目录,将MYSQL安装目录下include和lib文件夹路径分别添加到下面两个目录
数据库表结构:
department表:部门表
course表:课程表
sc表:选课表
teacher表:教师表
student表:学生表
这些表不需要手动创建,本系统连接数据库成功后会自动创建。(tip:部门表对应学生的专业,因为变动比较小,所以我在C++代码中将数据写死了,有需要可以自己在代码中修改或增加对应增删函数)
主要代码实现:
首先根据数据库中的表设计部门类、老师类、学生类、课程类、选课类。分别用于存储数据库读取的数据
/*
table.h
by 打印两年半的HelloWorld
*/
#pragma once
#include<iostream>
#include<string>
using namespace std;
class Base {
public:
Base();
Base(string number,string name);
void SetNumber(string number);
string GetNumber();
void SetName(string name);
string GetName();
protected:
string number;
string name;
};
class Person:public Base{
public:
Person();
Person(string number, string name, string sex, string age, string dname, string password);
void SetSex(string sex);
string GetSex();
void SetAge(string age);
string GetAge();
void SetDname(string dname);
string GetDname();
void SetPassword(string password);
string GetPassword();
protected:
string sex;
string age;
string dname;
string password;
};
class Course:public Base{
public:
Course();
Course(string number, string cname, string tname);
void SetTname(string tname);
string GetTname();
bool status;//选课状态
private:
string tname;
};
class Department:public Base {
public:
Department();
Department(string number, string name);
};
class Sc {
public:
Sc();
Sc(string sno, string cno, string score);
void SetSno(string sno);
string GetSno();
void SetCno(string cno);
string GetCno();
void SetScore(string score);
string GetScore();
protected:
string sno;
string cno;
string score;
};
class Compare {
public:
bool operator()(Department t1, Department t2) const{
return t1.GetNumber().compare(t2.GetNumber()) < 0;
}
bool operator()(Person t1, Person t2) const {
return t1.GetNumber().compare(t2.GetNumber()) < 0;
}
bool operator()(Course t1, Course t2) const {
return t1.GetNumber().compare(t2.GetNumber()) < 0;
}
bool operator()(Sc t1, Sc t2) const {
return t1.GetCno().compare(t2.GetCno()) < 0;
}
};
其次设计一个MySQL操作类,用于封装MySQL的连接、SQL语句的执行和数据的存取。
/*
databaseManager.h
by 打印两年半的HelloWorld
*/
#pragma once
#include<mysql.h>
#include<vector>
#include<set>
#include<map>
#include<fstream>
#include"table.h"
using namespace std;
class DatabaseManage {
public:
DatabaseManage();
//连接数据库
bool Connect(const char* server, const char* user, const char* password, const char* database, const char* charset = "gbk");
//log
void log(string content);
//执行SQL语句
bool ExeSql(string sql);
//获取数据库所有表
map<string, bool> GetTables();
//初始化表
void InitializeTbs();
//创建部门表
void CreateDepartmentTb();
set<Department, Compare> GetDepartmentTb(string sqlStr= "select * from department;");
//创建教师&学生表
void CreatePersonTb(int mode);
set<Person, Compare> GetPersonTb(string sqlStr);
//创建课程表
void CreateCourseTb();
set<Course, Compare> GetCourseTb(string sqlStr="select *form course;");
//创建选课表
void CreateScTb();
set<Sc, Compare> GetScTb(string sqlStr);
MYSQL mydata;
MYSQL_RES* result;//结果集
};
然后设计Console类,用于设计系统逻辑和界面
/*
table.h
by 打印两年半的HelloWorld
*/
#pragma once
#include<iostream>
#include<string>
#include<vector>
#include<set>
#include<conio.h>
#include<windows.h>
#include<io.h>
#include"databaseManager.h"
using namespace std;
class Console {
public:
Console();
bool ConnectDatabase();
void WriteRecord();
void SetCursor(int x, int y, bool visible=false);
void ArrowsMove(int x, int y, int low, int high, vector<char> operand = {});
void Input(string& str);
bool Alert(string content);
void LoadinPage();
void Control();
bool SignIn();
void MainPage();
void InfoPage(string title, string no="", string name="", string sex="", string age="", string dname="", string password="");
Department ChoiceDepartment();
void AddTeacherInfo();
void DeleteTeacherInfo();
void Config();
void ManageStudent();
void ManageCourse();
void ChoiceCourse();
void AddStudentInfo();
void SearchStudentInfo();
void ModifyStudentInfo(Person& p);
void DeleteStudentInfo(Person& p);
Person ChoiceTeacher();
void CourseInfoPage(string title,string cno="",string name="",string tname="");
void AddCourseInfo();
void ShowCourseAllStudent(Course& c);
void DeleteStudentCourse(Person& p, Course& c);
void DeleteCourse(Course& c);
COORD pos;
CONSOLE_CURSOR_INFO cci;
char operand;//操作符
string account;
string password;
int mode=1;
DatabaseManage data;
string server= "localhost";
string user = "root"; //连接数据库的账号
string Dpassword = "123456"; //连接数据库的密码
string database = "edu"; //需要操作的数据库
string charset = "GBK";
char sqlStr[1024];
string type[2] = { "教职工","学生" };
set<Person, Compare> st;
set<Person, Compare> te;
set<Department, Compare> de;
set<Course, Compare> co;
set<Sc, Compare> sc;
};
最后编写主函数创建console对象即可
/*
main.cpp
by 打印两年半的HelloWorld
*/
#include"console.h"
int main() {
Console u;
return 0;
}
具体实现代码比较多就不贴了,有需要的可以在 https://github.com/hihinim/-C-MySQL-.git 上下载全部源码,由于楼主是初学者,代码可能存在bug,或者有需要优化的地方,如果还有其他问题也可以参考另一篇文章【记录一下VS2019连接MySQL的过程 - CSDN App】http://t.csdnimg.cn/3fjPH
最终效果图: