Cmake用到的语句记录

1、如题:Implant 下有两个文件夹Nails、Plates,希望用Cmake命令将每个文件夹中的文件拷贝到Bin目录下,CMakeLists.txt与Implant放到同一目录下,可在CMakeLists.txt中用以下语句实现

COMMAND ${CMAKE_COMMAND} -E remove_directory Implant\\.svn
COMMAND ${CMAKE_COMMAND} -E remove_directory Implant\\Nails\\.svn
COMMAND ${CMAKE_COMMAND} -E remove_directory Implant\\Plates\\.svn
COMMAND ${CMAKE_COMMAND} -E copy_directory Implant ${Bin_Root}\\$(ConfigurationName)\\Implant

执行过程却发现Nails文件夹中只能拷贝部分文件,原因是Nails中的文件有些是用中文命名的,所以带有中文的文件cmake是无法识别的,导致拷贝失败。
又记起以前为Cmake指定一个第三方库Qt的Dir,因为Qt放到了一个中文目录下也一直导致camkeConfigure失败
cmake拷贝具体文件可用以下语句

COMMAND ${CMAKE_COMMAND} -E copy_if_different Trace.bat ${Bin_Root}\\$(ConfigurationName)\\Trace.bat

2、指定Cmake的最低版本限制,如果不指定cmake运行时会有warn。
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
3、指定生成的exe等文件的目录

SET(Bin_Root "${CMAKE_CURRENT_SOURCE_DIR}/Bin/$(PlatformName)")//将CMAKE_CURRENT_SOURCE_DIR}/Bin/$(PlatformName)定义为Bin_Root,以后出现Bin_Root 指的便是前者
SET_TARGET_PROPERTIES(KeyGenerator//工程名
    PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY ${Bin_Root}
)

上述语句便指定将exe文件生成到bin(如果没有bin,则创建)下

选题:题结合课上所讲案例,设计一个小型的高校教务管理系 统,包括学生信息、课程安排、成绩记录以及奖惩情况等。 Ø至少设计7个实体,7张数据表,画出E-R图,设计关系模型, 视图、存储过程、触发器至少各1个 Ø需求分析、设计、实现、测试应用系统; Ø可以选用MySql、SQL Server等DBMS完成交付:课程设计报告(含:需求分析、数据库设计(E-R图、关系模 型)、功能截图)、SQL代码(50分) Ø验收时系统可以演示运行(20分) Ø用到了视图、存储过程、触发器等数据库知识点(20分) Ø考勤(10分,旷课、迟到、早退累计三次此项记0分) Ø答辩(如果想申请优良)高校教务管理系统开发的目的是为了实现学生信息关系的科学化和规范化。通过该系统,学校可以 对学生各种信息进行日常管理,其任务主要包括:收集并整理学生个人信息、成绩记录、奖惩记录等; 提供查询和修改功能;实现学籍变动管理等任务。 要求:符合数据库设计标准,减少冗余度。至少包含以下实体: (1)学生(学号,姓名,性别,班级号,专业号,院系号,年龄,出生日期,家庭地址,入学时间) (2)班级(班级号,专业号,院系号,班级名称,人数) (3)专业(专业号,院系号,专业名称) (4)院系(院系号,院系名称) (5)课程(课程号,课程名,学分,学时) (6)课程成绩(课程号,学号,成绩) (7)奖惩(奖惩号,学号,专业号,院系号,奖惩名称) 实体间的联系 (1)学生与班级:一个学生属于一个班级,一个班级有多个学生,所以是1对多的关系。 (2)学生与专业:一个学生属于一个专业,一个专业有多个学生,所以是1对多的关系。 (3)学生与院系:一个学生属于一个院系,一个院系有多个学生,所以是1对多的关系。 (4)学生与课程:一个学生选修一门或多门课程,同时课程可被多个学生选择,所以是多对多的关系。 (5)学生与成绩:一个学生的每门课程对应一个成绩,所以是1对1的关系。 (6)学生与奖惩:一个学生可能获得一个或多个奖惩,每个奖惩记录只属于一个学生,所以是1对多 的关系。 (7)班级与专业:一个班级属于一个专业,一个专业有多个班级,所以是1对多的关系。 (8)班级与院系:一个班级属于一个院系,一个院系有多个班级,所以是1对多的关系。 (9)专业与院系:一个专业属于一个院系,一个院系有多个专业,是1对多 (10)课程与成绩:课程成绩属于一个或多个学生,一个学生有一个课程成绩,所以是1对多的关系。系统功能: 1.学生管理: 管理学生的基本信息,对学生信息进行增删改查操作外,查询获得“三好学生”称号 的学生的学号、姓名、专业、院系。 2.课程管理:管理课程的基本信息,对课程信息进行增删改查操作外, 3.成绩管理:管理成绩的基本信息,对成绩信息进行增删改查操作外,查询某门课的平均分、最高分 以及最低分。 4.班级人数统计:创建触发器,当增/减班级学生人数时自动修改相应班级人数。 5.查看学生奖惩信息:创建学生奖惩视图,实现查询各个学生的学号、姓名、班级、专业、院系、奖 惩名。 6.查询指定学生的成绩单:创建存储过程查询指定学生的成绩单。 实体间的联系 (1)学生与班级:一个学生属于一个班级,一个班级有多个学生,所以是 1对多的关系。 (2)学生与专业:一个学生属于一个专业,一个专业有多个学生,所以是 1对多的关系。 (3)学生与院系:一个学生属于一个院系,一个院系有多个学生,所以是1对多的关系。 (4)学生与课程:一个学生选修一门或多门课程,同时课程可被多个学生选择,所以是多对多的关系。 (5)学生与成绩:一个学生的每门课程对应一个成绩,所以是1对1的关系。 (6)学生与奖惩:一个学生可能获得一个或多个奖惩,每个奖惩记录只属于一个学生,所以是1对多 的关系。 (7)班级与专业:一个班级属于一个专业,一个专业有多个班级,所以是1对多的关系。 (9)专业与院系:一个专业属于一个院系,一个院系有多个专业,是1对多 (10)课程与成绩:课程成绩属于一个或多个学生,一个学生有一个课程成绩,所以是1对多的关系。一、选题介绍 二、需求分析 三、系统功能设计 画出系统功能模块图 图1 系统功能模块图 四、概念结构设计 ER图 + 数据表 图2 E-R图 表1 银行客户表 表名:yonghu 序号 字段名 类型 长度 主键 描述 1 id int 是 (主键) 2 yonghuming varchar 50 用户名 3 mima varchar 50 密码 4 xingming varchar 50 姓名 5 xingbie varchar 10 性别 6 shouji varchar 50 手机 7 youxiang varchar 50 邮箱 8 shenfenzheng varchar 50 身份证 五、逻辑结构设计 数据库建表语句 六、数据库实施与截图 七、实验总结(不少于500字) (对整体实施过程的总结,出现问题(截图),解决方案)。 用C++代码实现
05-12
<think>好的,我现在需要帮助用户用C++实现一个高校教务管理系统。用户要求包括学生信息、课程安排、成绩记录和奖惩情况等功能模块,同时需要设计至少7个实体和7张数据表,以及E-R图、关系模型、视图、存储过程和触发器等数据库知识点。首先,我需要回顾之前用户的需求,确保不遗漏任何关键点。 用户之前提到的实体包括学生、班级、专业、院系、课程、课程成绩和奖惩记录,共7个实体。需要确保每个实体对应的数据表都设计正确,主键和外键约束合理。接下来,E-R图需要展示这些实体之间的关系,比如学生与班级、专业、院系的一对多关系,学生与课程的多对多关系,以及成绩和奖惩的关联。 接下来是C++的实现部分。用户希望用C++来实现,这意味着可能需要使用数据库连接库,比如MySQL Connector/C++或者ODBC。首先需要确定数据库的选择,用户提到可以使用MySQL或SQL Server,这里假设使用MySQL。然后,设计C++的类结构,每个实体对应一个类,比如Student、Course、Grade等,每个类包含相应的属性和方法。 数据库的连接和操作是关键部分。需要编写代码来连接数据库,执行SQL语句,处理查询结果。例如,学生信息的增删改查操作需要对应的SQL语句,并通过C++调用这些语句。同时,需要实现事务处理,确保数据的一致性,比如在插入成绩时检查触发器是否生效。 视图、存储过程和触发器的实现需要在数据库层面完成。视图可以用于简化复杂查询,比如学生成绩视图。存储过程可以封装常用的业务逻辑,比如查询学生平均成绩。触发器用于自动化数据更新,比如当学生人数变化时自动更新班级表中的班级人数。 关于E-R图和关系模型,用户可能需要先绘制E-R图,然后转化为具体的数据表结构。每个实体的属性需要明确,主键和外键要正确设置。例如,学生表中的班级号是外键,关联到班级表的主键。课程成绩表需要学生号和课程号作为联合主键,同时关联到学生表和课程表。 测试部分需要考虑各个功能模块的测试用例,比如添加学生信息是否成功,成绩录入是否符合范围,触发器是否在人数变化时自动更新。此外,还需要处理可能出现的异常,比如数据库连接失败、SQL注入攻击等安全问题。 用户可能还关心系统的扩展性和维护性,因此在设计时需要模块化,便于后续功能添加或修改。例如,将数据库操作封装成独立的类或函数,减少代码冗余,提高可读性。 最后,需要确保所有的需求都被覆盖,比如7个数据表、视图、存储过程和触发器的实现,以及C++与数据库的交互。可能需要编写示例代码,展示如何执行SQL语句,处理结果集,以及错误处理机制。同时,提供系统架构图,说明各个模块之间的关系,帮助用户理解整体设计思路。</think>### 基于C++的高校教务管理系统实现方案 #### 一、系统架构设计 采用分层架构模式(如图1),基于MySQL数据库实现持久化存储,通过ODBC接口进行数据库连接,符合引用[1]中提到的B/S体系结构设计理念[^1]。 ``` 应用层 业务逻辑层 数据访问层 数据库层 ``` ![系统架构图](https://via.placeholder.com/600x300?text=Architecture+Diagram) #### 二、数据库设计 ##### 2.1 E-R图核心关系(简化版) ```mermaid erDiagram STUDENT ||--o{ CLASS : "属于" STUDENT ||--o{ MAJOR : "属于" STUDENT ||--o{ DEPARTMENT : "属于" STUDENT ||--|{ SCORE : "获得" STUDENT ||--|{ REWARD : "获得" COURSE ||--o{ SCORE : "关联" CLASS ||--o{ MAJOR : "隶属" MAJOR ||--o{ DEPARTMENT : "隶属" ``` ##### 2.2 数据表设计(7张核心表) ```sql -- 学生表(引用[4]中提到的学籍信息存储要求) CREATE TABLE Student ( SID CHAR(10) PRIMARY KEY, SName VARCHAR(20) NOT NULL, Gender ENUM('男','女'), ClassID CHAR(6), MajorID CHAR(4), DeptID CHAR(2), BirthDate DATE, EnrollDate DATE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 课程表(满足引用[2]中的课程管理需求) CREATE TABLE Course ( CID CHAR(5) PRIMARY KEY, CName VARCHAR(30) NOT NULL, Credit TINYINT UNSIGNED, Hours SMALLINT UNSIGNED ); -- 成绩表(实现引用[3]的成绩管理功能) CREATE TABLE Score ( SID CHAR(10), CID CHAR(5), Grade DECIMAL(5,2), PRIMARY KEY(SID, CID), FOREIGN KEY(SID) REFERENCES Student(SID), FOREIGN KEY(CID) REFERENCES Course(CID) ); -- 其余表结构类似,包含班级表、专业表、院系表、奖惩表 ``` #### 三、C++关键实现 ##### 3.1 数据库连接类(ODBC) ```cpp class DBConnector { private: SQLHENV henv; SQLHDBC hdbc; public: DBConnector(const string& connStr) { SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); SQLDriverConnect(hdbc, NULL, (SQLCHAR*)connStr.c_str(), SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE); } ~DBConnector() { SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); } }; ``` ##### 3.2 学生管理模块 ```cpp class StudentManager { public: void AddStudent(const Student& stu) { string sql = "INSERT INTO Student VALUES('" + stu.SID + "','" + stu.SName + "','" + stu.Gender + "',...)"; ExecuteSQL(sql); // 调用数据库执行方法 } vector<Student> QueryByClass(string classID) { string sql = "SELECT * FROM Student WHERE ClassID='" + classID + "'"; SQLExecDirect(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); // 处理结果集... } }; ``` #### 四、数据库高级功能实现 ##### 4.1 视图(三好学生视图) ```sql CREATE VIEW MeritStudents AS SELECT S.SID, S.SName, M.MajorName, D.DeptName FROM Student S JOIN Reward R ON S.SID = R.SID JOIN Major M ON S.MajorID = M.MajorID JOIN Department D ON S.DeptID = D.DeptID WHERE R.RewardType = '三好学生'; ``` ##### 4.2 存储过程(成绩统计) ```sql DELIMITER // CREATE PROCEDURE CourseStats(IN courseID CHAR(5)) BEGIN SELECT AVG(Grade) AS AvgScore, MAX(Grade) AS MaxScore, MIN(Grade) AS MinScore FROM Score WHERE CID = courseID; END // DELIMITER ; ``` ##### 4.3 触发器(班级人数同步) ```sql CREATE TRIGGER UpdateClassCount AFTER INSERT ON Student FOR EACH ROW BEGIN UPDATE Class SET StudentCount = StudentCount + 1 WHERE ClassID = NEW.ClassID; END; ``` #### 五、系统测试要点 1. **事务测试**:批量成绩录入时的原子性操作 2. **约束验证**:成绩范围检查(0-100分) 3. **性能测试**:千人级数据查询响应时间 4. **触发器验证**:新增学生后班级人数自动+1 #### 六、部署建议 1. 使用CMake构建系统 2. 采用ODBC统一接口 3. 配置连接池提升性能 4. 实现数据加密传输(参考引用[1]的安全设计)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

COSummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值