2017级数据结构课程设计任务书
【设计目的】
数据结构是计算机学科实践性很强的一门核心课程。课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C/C++/Java程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。
【设计要求】
1、课程设计时间为1.5周;
2、每个学生必须独立完成;
3、设计语言C/C++/Java不限;
4、课余时间完成源程序和课程设计报告等文档书写工作,上机时间做调试和验收工作。
5、上机任务
1)选择并定义合适的数据结构;
2)根据程序所要完成的基本要求,设计出必要的操作;
3)设计出主程序(main函数),使其成为完整的程序,也可以进行可视化程序设计。
6、上机时间:上午8:20~11:50,下午2:10~5:00
7、无论在校外、校内,都要严格遵守学校和所在单位的学习和劳动纪律、规章制度,学生有事离校必须请假。课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,其成绩按不及格处理。
【题目】图的操作和应用之景区信息管理系统
现有一个景
2017级数据结构课程设计任务书
【设计目的】
数据结构是计算机学科实践性很强的一门核心课程。课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C/C++/Java程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。
【设计要求】
1、课程设计时间为1.5周;
2、每个学生必须独立完成;
3、设计语言C/C++/Java不限;
4、课余时间完成源程序和课程设计报告等文档书写工作,上机时间做调试和验收工作。
5、上机任务
1)选择并定义合适的数据结构;
2)根据程序所要完成的基本要求,设计出必要的操作;
3)设计出主程序(main函数),使其成为完整的程序,也可以进行可视化程序设计。
6、上机时间:上午8:20~11:50,下午2:10~5:00
7、无论在校外、校内,都要严格遵守学校和所在单位的学习和劳动纪律、规章制度,学生有事离校必须请假。课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,其成绩按不及格处理。
【题目】图的操作和应用之景区信息管理系统
现有一个景区,景区里面有若干个景点,景点之间满足以下条件:
(1) 某些景点之间铺设了道路(相邻)
(2) 这些道路都是可以双向行驶的(无向图)
(3) 从任意一个景点出发都可以游览整个景区(连通图)
开发景区信息管理系统,对景区的信息进行管理。使用图的数据结构来保存景区景点信息,为用户提供创建图、查询景点信息、旅游景点导航、搜索最短路径、铺设电路规划等功能。
区,景区里面有若干个景点,景点之间满足以下条件:
(1) 某些景点之间铺设了道路(相邻)
(2) 这些道路都是可以双向行驶的(无向图)
(3) 从任意一个景点出发都可以游览整个景区(连通图)
开发景区信息管理系统,对景区的信息进行管理。使用图的数据结构来保存景区景点信息,为用户提供创建图、查询景点信息、旅游景点导航、搜索最短路径、铺设电路规划等功能。
// ScenicAreaInfoMS.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
//----------【忽略安全检测】----------------
#define _CRT_SECURE_NO_WARNINGS
//----------【头文件】------------------
#include<stdlib.h>
#include<string.h>
#include<string>
#include<iostream>
#include<fstream>
#include<graphics.h>
#include<conio.h>
#include<math.h>
using namespace std;
//----------【自定义最大顶点数】-----------
#define MAX_VERTEX_NUM 20
//----------【图形缩小倍数】---------------
constexpr auto ShrinkFactor = 2;
//----------【顶点圆圈半径】--------------
constexpr auto VexR = 20;
//----------【主函数功能函数】----------
bool CreateGraph(); //创建景区景点图
void GetSpotInfo(); //查询景点信息
void TravelPath(); //规划游览景点路线
void FindShortPath(); //搜索景点最短路径
void DesignPath(); //铺设电路规划
void ModifiedGraph(); //修改图保存文件
void menu(); //显示主页面菜单
void menu_6(); //显示页面6菜单
void LoginCheck(); //登录验证函数
//----------【修改图保存文件】所属函数----------
void menu60();//输出当前景点信息
void menu61();//页面6函数
void menu62();
void menu63();
void menu64();
void menu65();
void menu66();
//----------【主函数功能函数辅助图解函数】---------------------
void ShowGetSpotInfo(int nVex); //图解查询景点信息
//----------【景点、道路、路径、用户设为结构体】-----------
struct Vex //景点结构【相当于图的结点】vertex:顶点
{ //对应Vex.txt文件
int num; //景点编号
char name[20]; //景点名字
char desc[1024]; //景点描述
int x, y; //位置
};
struct Edge //道路结构【相当于图的弧】Edge:边缘
{ //对应Edge.txt文件
int vex1; //边的第一个顶点
int vex2; //边的第二个顶点
int weight; //权重
};
typedef struct Path //路径结构
{
int vexs[MAX_VERTEX_NUM]; //用数组保存一条路径
Path *next = NULL; //指向下一条路径
}*PathList; //指针型结构体【路径】变量
struct User
{
int userNum;
char userName[20];
char passWord[1024];
};
//----------【无向图设为类(结构体也行)】------------------
class UDGraph
{
private: //图成员
int m_adjacentMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //【弧组】存储类型为邻接矩阵
Vex m_aVexs[MAX_VERTEX_NUM]; //【顶点组】图包含的顶点数组
int m_nVexNum; //【顶点数】当前图的顶点个数
int pathCount; //【路径数】记录已输出的路径数
public: //成员函数
void Init(); //【图初始化】设置图基本信息
int InsertVex(Vex sVex); //【插入顶点】将顶点sVex保存到邻接矩阵
int InsertEdge(Edge sEdge); //【插入边缘】将边 sEdge保存到邻接矩阵
Vex GetVex(int nVex); //【查询顶点】返回指定顶点信息
int getEdgeWeight(int vex1, int vex2); //【查询边长】返回两顶点之间权重距离
int FindEdge(int nVex, Edge aEdge[]); //【查询边缘】查询与指定顶点相连的边
int GetVexnum(void); //【查顶点数】获取当前顶点数
void DFSbyRecursive(int nVex, bool bVistd[], int &nIndex, PathList &pList); //【深度搜索】递归方式深度优先搜索
void DFSTraverse(int nVex, PathList &pList); //【深搜应用】调用深度优先搜索
int FindShortPath(int nVexStart, int nVexEnd, Edge aPath[]); //【最短路径】寻找两点间最短路径
int FindMinTree(Edge aPath[]); //【图最小树】寻找最小生成树
int InsertNewVex(Vex v); //【插入】景点
int InsertNewEdge(Edge e); //【插入】道路
void DeleteVex(int vexnum); //【删除】景点
void DeleteEdge(int vex1, int vex2); //【删除】道路
void AmendVex(int vexnum, Vex v); //【修改】景点
void AmendEdge(int vex1, int vex2, Edge e); //【修改】道路
void MemoryToFiles(); //将内存数据写入文件
}m_Graph; //默认图
//----------【MD5相关】------------------
#define shift(x, n) (((x) << (n)) | ((x) >> (32-(n))))//右移的时候,高位一定要补零,而不是补充符号位
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
#define A 0x67452301
#define B 0xefcdab89
#define C 0x98badcfe
#define D 0x10325476
unsigned int strlength; //strBaye的长度
unsigned int atemp; //A,B,C,D的临时变量
unsigned int btemp;
unsigned int ctemp;
unsigned int dtemp;
const unsigned int k[] = {
0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,
0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,0x698098d8,
0x8b44f7af,0xffff5bb1,0x895cd7be,0x6b901122,0xfd987193,
0xa679438e,0x49b40821,0xf61e2562,0xc040b340,0x265e5a51,
0xe9b6c7aa,0xd62f105d,0x02441453,0xd8a1e681,0xe7d3fbc8,
0x21e1cde6,0xc33707d6,0xf4d50d87,0x455a14ed,0xa9e3e905,
0xfcefa3f8,0x676f02d9,0x8d2a4c8a,0xfffa3942,0x8771f681,
0x6d9d6122,0xfde5380c,0xa4beea44,0x4bdecfa9,0xf6bb4b60,
0xbebfbc70,0x289b7ec6,0xeaa127fa,0xd4ef3085,0x04881d05,
0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,0xf4292244,
0