元旦前后利用几天时间完成了数据结构课程设计,学期初计划搞一个*精美* 些的课程设计,最后还是一拖再拖,到最后只来得及实现些基本功能。
团队协作完成,所以代码风格不尽相同。
另外才疏学浅,若有错误恳请不吝赐教!
程序打包,提取码:1a01
基本要求如下:
① 账户登陆设计,用户可以自行选择是否登录,根据是否登录以及登陆的账户类型系统提供不同的功能。
② 对于账户信息应保存在文件中,并利用MD5加密算法将用户密码以密文形式存储。
③ 从文件中读取校园平面图并展示,所含内容应包括景点名称以及距离。
④ 能够从文件中读取地图信息,利用邻接表存储图的信息。
⑤ 利用BFS提供游览路线。
⑥ 利用KMP算法对于用户所给关键词进行匹配,为用户推荐适宜的地点并进行详细的介绍。例如:对于用户的“美食”需求,系统将会推荐前往餐厅并给出详细的介绍。
⑦ 利用Kruskal算法为用户预估游览所有景点所需的最短时间。
⑧ 对于用户给出的两地点,能够给出最短路径。
⑨ 对于管理员账户,提供更改图的信息的功能。
模块划分如图
main:
#include<iostream>#include"UI.h" #include"Function.h"using namespace std;int main(){Agreement();//启动界面 int Status;while (1){system("cls");Start();//登陆界面 int choose;cin>>choose;Status = -1;//0 未登录;1 用户 1;2 管理员; switch(choose) {case 0: exit(0);case 1: Status = Login();break; case 2: Status = Register();break;case 3: Status = 0;break;default:color(4);printf("\t\t\t\t\t命令无效,2秒后自动返回\n");color(7); Sleep(2000);}if (Status != -1)//命令有效跳出循环 {break;}}if (Status == 0)//未登录 {while (1){system("cls");Menu_none();int choose;cin>>choose;switch(choose){case 0: exit(0);//退出 case 1: Show();break;//显示 地图 case 2: Search();break;//景点推荐 default:color(4);printf("\t\t\t\t\t命令无效,2秒后自动返回\n");color(7); Sleep(2000); }}}else if (Status == 1)//普通账户 {ifstream infile(".\\Data\\Data_dij.dat");int n,m;//n is the sum of nodesinfile>>n>>m;//m is the sum of edges map mp(n,m);//声明并实例化mp; infile.close();mp.mapset();//读图 while (1){system("cls");Menu_guest();int choose;cin>>choose;switch(choose){case 0: exit(0);//退出 case 1: Show();break;//显示 地图 case 2: Search();break;//景点推荐 case 3: Visit();break;//游览全部景点所需最短时间 //case 4:{string st;cout<<"请输入您的起点:";cin>>st;mp.DFS(st);//从st开始进行深度优先搜索 break;}//case 5: {string st;string ed;cout<<"请输入您的起点:";cin>>st;cout<<"请输入您的终点:";cin>>ed;mp.dijkstra(st, ed);//求两点之间最短路 break;}//case 6: {string s;cout<<"请输入您当前所在的位置"<<endl;//从st开始进行广度优先搜索 cin>>s;mp.BFS(s);system("pause");break;}default:color(4);printf("\t\t\t\t\t命令无效,2秒后自动返回\n");color(7); Sleep(2000); }}}else if (Status == 2)//管理员账户 {ifstream infile(".\\Data\\Data_dij.dat");int n,m;//n is the sum of nodesinfile>>n>>m;//m is the sum of edges map mp(n,m);//声明并实例化mp;infile.close();mp.mapset();//读图 while (1){system("cls");Menu_admin();int choose;cin>>choose;switch(choose){case 0: exit(0);//退出 case 1: Show();break;//显示 地图 case 2: Search();break;//景点推荐 case 3: Visit();break;//游览全部景点所需最短时间 //case 4:{string st;cout<<"请输入您的起点:";//从st开始进行深度优先搜索 cin>>st;mp.DFS(st);break;}//case 5: {string st;string ed;cout<<"请输入您的起点:";cin>>st;cout<<"请输入您的终点:";cin>>ed;mp.dijkstra(st, ed);//求两点之间最短路 ,st为起点,ed为终点 break;}//case 6: {string s;cout<<"请输入您当前所在的位置"<<endl; cin>>s;mp.BFS(s);从st开始进行广度优先搜索system("pause");break;}// case 7: {cout<<"请输入需要删除的地点"<<endl;string s;cin>>s;mp.DeleteNode(s);//删除某一结点 break;}//case 8: Register_privilege();break;//新建管理员账户 default:color(4);printf("\t\t\t\t\t命令无效,2秒后自动返回\n");color(7); Sleep(2000); }}}return 0;}