声明:本文只是一份数据结构课程设计报告,可为各位的课设设计提供简明思路,但它不属于软件设计流程中任何一个环节的说明文档,请勿将其当成需求分析说明书做要求或使用。该项目的内容是展示在CMD上而非图形界面,有需要花钱找人代打的可以私聊我,收JAVA、C#、数据结构、数据库相关课设。QQ:2788636917
闽南师大软件工程专业的学生们在大二的时候都要做一份数据结构课程设计来检验自己的水平。为了凸显自己的能力,同学们所选的题目也是五花八门,令老师们看的头痛不已。开发者特此开发出了这个软件,既可以快速浏览目前所有的课题和学生信息,也可以对课题进行编辑修改,同时自带统计管理功能。该软件的使用者为该系统的开发者和负责课程设计的老师们。
该项目名称初步命名为:课程设计管理系统。分为六个模块:系统模块、数据插入模块、数据删除模块、数据修改模块、数据查询模块、数据库模块、数据模块和数据库连接模块。本项目的提出者和开发者均为计算机学院16级软件2班姚兴业。
一级界面:指菜单界面
二级界面:指所有直接通过一级界面进入的界面,也可称为信息类别选择界面
三级界面:指所有直接通过二级界面进入的界面,也可称为详细信息输入界面
无
在此处列出文档所引用的外部文档或其他项目资料
本项目旨在开发出一个可以帮助教师们进行简单的课设项目管理和评分的帮助性软件
本软件具备以下功能:
i. 添加功能: 通过系统向用户提供的选择界面来正确的添加学生信息或课程设计信息。在添加时将会限定学号和编号的唯一性,即当添加的学生学号或添加的课题编号重复时,系统将给出适当的提示并要求用户重新输入信息。
ii. 删除功能: 通过系统向用户提供的选择界面来帮助用户删除指定编号的信息。
iii. 修改功能: 用户将可以通过学号或编号来找到指定的学生或课题信息(如果它们存在的话),并通过系统提供的选择界面来对信息进行修改。
iv. 查询功能: 用户可以通过学号或编号来查询学生或者课题的信息,如果信息不存在,系统将会给出适当的提示。
v. 显示全部功能: 一键选择显示全部的学生信息或课题信息。
vi. 统计功能: 用户可以通过系统提供的选择界面来对当前已有的信息进行统计。
vii. 读取功能: 允许用户通过该功能向指定的Access数据库文件读取数据。
viii. 保存功能: 将当前数据保存至本地Access数据库文件中。
本系统旨在方便老师们对数据的管理,同时为了能更有效地执行任务,用户应先将存在excel中的输入导入至Access数据库中以方便系统读取。
系统启动后将会直接进入主界面中,用户可以根据自己需要输入指令执行相应功能,在事务处理完毕后,用户可以通过退出指令退出系统。
系统总体结构如下图所示:
i. 系统功能
ii. 添加功能
iii. 删除功能
iv. 修改功能
v. 查询功能
vi. 显示全部功能
vii. 统计功能
viii. 保存功能
ix. 读取功能
i. 用户界面: 采用经典的Windows指令台风格,通过最简单的指令输入形式执行相应功能。
ii. 软件接口: 运行于Windows XP/7/8.1/10且具有Win32指令台的操作系统
iii. 硬件接口: 支持市面上常见的或更高档的微机和笔记本电脑。
i. 系统模块: 系统启动时自动调用,初始化界面后等待用户输入
ii. 数据插入模块: 由系统模块调用,启动后调用数据模块的增加功能
iii. 数据删除模块: 由系统模块调用,启动后调用数据模块的删除和查询功能
iv. 数据修改模块: 由系统模块调用,启动后调用数据模块的修改和查询功能
v. 数据查询模块: 由系统模块调用,启动后调用数据模块的查询功能
vi. 数据库模块: 由系统模块调用,启动后调用数据库连接模块。
vii. 数据库连接模块: 由数据库模块调用,启动后调用打开拦截、SQL语句查询、关闭连接等功能。
viii. 数据模块: 可由数据插入模块、数据删除模块、数据修改模块、数据查询模块等模块调用,启动后可根据需要调用增加、删除、修改、查询等功能。
(此处仅展示方法签名,具体的实现写在相对应的.cpp文件中)
i. BinaryNode(二叉树节点)
template
struct BinaryNode
{
DataType data;
BinaryNode *leftNode, *rightNode;
BinaryNode() { leftNode = rightNode = nullptr; }
BinaryNode(DataType &element)
{
leftNode = rightNode = nullptr;
data = element;
};
};
ii. BinaryTree(二叉排序树)
template
class BinaryTree
{
private:
BinaryNode * root;
DataType findMin(BinaryNode *bt);
void Release(BinaryNode *bt);
void PreOrder(BinaryNode *bt) const;
void InOrder(BinaryNode *bt) const;
void PostOrder(BinaryNode *bt) const;
BinaryNode* isFind(DataType &element, BinaryNode *bt);
void Delete(DataType &element, BinaryNode *bt);
int length;
public:
BinaryTree() { length = 0; root = NULL; }
~BinaryTree() { Release(root); }
void Release() { this->Release(root); }
void PreOrder();
void InOrder();
void PostOrder();
void Insert(DataType &element);
DataType isFind(DataType &element);
void Delete(DataType &element);
int Length() { return this->length; }
};
iii. CurriculumDesign(课程设计实体类)
class CurriculumDesign
{
private:
string design_name;
string design_dataStruct;
string author;
Score design_score;
public:
CurriculumDesign();
CurriculumDesign(string design_name, string design_dataStruct = "NULL",
string author = "NULL");
~CurriculumDesign();
string getInfo();
string writeToFile();
//getter & setter
string get_design_name() { return this->design_name; }
void set_design_name(string new_name) { this->design_name = new_name; }
string get_design_dataStruct() { return this->design_dataStruct; }
void set_design_dataStruct(string new_ds) { this->design_dataStruct = new_ds; }
string get_author() { return this->author; }
void set_author(string new_author) { this->author = new_author; }
double get_design_score() { return this->design_score.get_total(); }
void set_design_score(string type_score, double new_score);
void set_design_score(Score score);
// overload
friend bool operator<(CurriculumDesign &left, CurriculumDesign &right);
friend bool operator<(CurriculumDesign &left, double number);
friend bool operator>(CurriculumDesign &left, CurriculumDesign &right);
friend bool operator>(CurriculumDesign &left, double number);
friend bool operator==(CurriculumDesign &left, CurriculumDesign &right);
friend bool operator==(CurriculumDesign &left, double number);
friend ostream &operator<<(ostream &out, CurriculumDesign &temp);
};
iv. Student(学生实体类)
class Student
{
private:
string stu_name;
int stu_ID;
string stu_class;
string design_name;
public:
Student();
Student(int stu_ID, string stu_name = "NULL", string stu_class = "NULL",
string design_name = "NULL") :
stu_ID(stu_ID), stu_name(stu_name), stu_class(stu_class),
design_name(design_name) {}
Student(const Student &obj);
~Student();
// getter & setter
string get_stu_name() { return this->stu_name; }
void set_stu_name(string new_name) { this->stu_name = new_name; }
int get_stu_ID() { return this->stu_ID; }
void set_stu_ID(int new_ID) { this->stu_ID = new_ID; }
string get_stu_class() { return this->stu_class; }
void set_stu_class(string new_class) { this->stu_class = new_class; }
string get_design_name() { return this->design_name; }
void set_design_name(string new_name) { this->design_name = new_name; }
string getInfo();
string writeToFile();
// overload
friend bool operator<(Student &left, Student &right);
friend bool operator>(Student &left, Student &right);
friend bool operator==(Student &left, Student &right);
friend ostream &operator<<(ostream &out, Student &temp);
};
v. Management(管理类,Service部分)
/**
* 每添加一个学生信息就对应添加一个课题信息,课题的作者即为学生名
* 课题不可删除,每删除一个学生就对应删除一个课题
* 学生的信息最初先添加在链表里,在课题打分后再添加到二叉树中进行排序
* /
class Management
{
private:
BinaryTree *design; // 存储所有已打分的课设信息
StudentList *stu_list; // 存储所有学生的信息
CurriculumDesignList *design_list; // 存储所有课设的信息
public:
Management();
~Management();
void Insert(Student &stu, CurriculumDesign &design);
bool Delete(int stu_ID);
string Edit(int stu_ID, int new_info);
string Edit(int stu_ID, string type_info, string new_info);
void SearchAllStudent();
void SearchAllDesign();
bool Search(int stu_ID);
bool Search(string design_name);
Student Get(int stu_ID);
CurriculumDesign Get(string design_name);
string* InfoToFile_Design();
string* InfoToFile_Student();
int numOfStudent() { return stu_list->Length(); }
int numOfDesign() { return design_list->Length(); }
int numOfMarkedDesign();
int numOfPassDesign();
void Mark(int stu_ID, Score score);
void MultipleMark();
void RankingList();
void ReadFile(string *str_stu, string *str_design);
};
vi. CurriculumDesignManagement (main函数部分方法)
Management admin; // 管理类实例化对象
void title(); // 标题
void footer(); // 结束语
void menu(); // 菜单
void Insert(); // 添加信息
void Delete(); // 删除信息
void Edit(); // 修改信息
void Search(); // 查询信息
int Calc_numOfStudent() { return admin.numOfStudent(); } // 统计学生总人数
int Calc_numOfMarkedDesign() { return admin.numOfMarkedDesign(); } // 统计已打分的课程数
int Calc_numOfPassDesign() { return admin.numOfPassDesign(); } // 统计及格人数
void SimpleMark();
void MultipleMark();
Score Grade();
void Save(); // 保存文件
void Load(); // 读取文件
bool isNumber(string str); // 判断str是否为纯数字串
int main();
数据库采用Microsoft Access 2017,表结构设计如下:
i. Student
字段名 | 类型 | 字段长度 | 备注 |
---|---|---|---|
stu_name | varchar | 50 | 主键 |
stu_class | varchar | 50 | |
stu_ID | varchar | 50 | |
design_name | varchar | 50 |
ii.CurriculumDesign
字段名 | 类型 | 字段长度 | 备注 |
---|---|---|---|
design_name | varchar | 50 | 主键 |
design_dataStruct | varchar | 50 | |
author | varchar | 50 | 学生姓名 |
design_score | float | - |
i. 系统模块: 调用全局变量admin,根据用户输入的指令cmd来调用相应的函数
ii. 数据插入模块: 根据指令cmd调用admin中的两条插入函数。
iii. 数据删除模块: 根据指令cmd调用admin中的两条删除函数。
iv. 数据查询模块: 根据指令cmd调用admin中的四条查询函数。
v. 数据修改模块: 根据指令cmd调用admin中的两条编辑函数。
所有类与函数均用英文全称命名,类内参数采用“[类名缩写][信息类型][数据名]”的格式来命名。如:学生的基本信息姓名的参数名为“stu_info_name”。
本软件控制流程如下:首先由用户启动软件,之后根据屏幕上的提示输入指令,系统根据指令触发事件及调用相关模块。
每个功能都快的感受不出来
a) 本软件在系统关键处采用try-catch代码块将危险代码包围起来,保证用户触发异常时系统可以正常运行下去。
b) 在用户执行删除或修改等破坏性操作时,系统将会提供确认机制。
无
此处留作日后使用,用户安全与软件安全相关部分均需记载于此。
本软件完全依照RUP过程开发并充分考虑了软件的可维护性,详细编写了概要设计文档,以利于未来的二次开发。
有鉴于有人找我要这份课设的代码,故我将项目post到了我的Github项目中,需要的话直接clone下来就好,使用VS打开.sln文件即可加载整个项目,不过由于数据库已经丢失了,相关的部分可能需要同学们自己重新设计。
课程设计管理系统(https://github.com/w8692736/CurriculumDesign.git)