已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
题 目 淮师大校园导航系统 学 院 计算机科学与技术 专 业 计算机科学与技术(师范 ) 学 号 学 生 姓 名 指导教师姓名 日期: 2011-12-26 1、 题目与要求1.1 功能要求1不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。2对系统进行功能模块分析、画出总流程图和各模块流程图。3用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单。4通过命令行相应选项能直接进入某个相应菜单选项的功能模块。5所有程序需调试通过。1.2 设计内容:1、查询了解学校概况,为导游参观者提供关于学校的相关信息。2、查询校园各个场所和景点信息; 3、为导游者或外来人员参观人员提供校园交通信息,方便用户走访学校。 4如有时间,可为程序增加以下功能:登录模块。该模块在进入主界面之前先执行,用于对进入系统的用户进行身份验证,若用户输入正确的用户名及用户密码,则进入主界面,否则输入超过3次错误则退出程序。处理方法:用户名及用户密码可保存在一文件中,校验时从文件中读入数据进行校验。在系统中应增加一个用户管理模块,在其中可新增用户,修改用户信息等。 5系统帮助。显示开发者姓名、班级、开发完成日期、版本号和指导老师等信息。二、分析2.1设计基础:要掌握最短路径的实现方式。2.2分析设计课题的要求,要求编程实现以下功能:(1)退出系统(2)进入淮师大导航系统(3)新增用户信息(0)修改密码2.3主控菜单设计为实现导航的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。程序运行后,给出菜单项的内容和输入提示,如下: 1学校简介 2淮师大校园平面简图3. 显示场所的编号4. 查看场所的具体信息5. 计算路径长度及找出最短路径6. 退出2.4设计课题已明确要求,有关的定义如下:void insert();#define n 10 int n=1;#define max 32767#define num 16typedef struct arccell int adj; / 相邻接的景点之间的路程 char *info;arccell; / 定义边的类型 typedef struct vertextype int number; / 景点编号 char *sight; / 景点名称 char *description; / 景点描述 vertextype; / 定义顶点的类型 typedef struct vertextype vexnum; / 图中的顶点,即为景点 arccell arcsnumnum; / 图中的边,即为景点间的距离 int vexnum,arcnum; / 顶点数,边数 mgraph; / 定义图的类型 mgraph g; / 把图定义为全局变量 int pnumnum; /long int dnum; / 辅助变量存储最短路径长度 void createudn(int v,int a); / 创建图的函数 void pingmu(); /屏幕输出函数void introduce();/输入介绍内容,但不输出void shortestpath(int num); /最短路径函数void output(int sight1,int sight2); /输出函数void printmgraph();char menu(); / 主菜单 void search(); / 查询景点信息 char searchmenu(); / 查询子菜单 void show();/显示校园平面图void mainn();2.4逻辑设计: 按所设想的功能,把程序化分为几个模块,各模块的名称和其数据类型如下:(1) main主函数 调用各函数,实现课程设计的目标。其中包含三个功能,一个是直接进入导航系统,利用主函数中已有的数据,进行查询:一个是进行创建数据,本程序中初始数据为农大的导航数据,如果需要也可以自己建立一个;最后一个是退出功能。(2) menu菜单函数该函数用于显示初页面,列出两个功能的选择。一个是进入农大导航系统,一个是进行自己创建一个导航系统。(3) dijkstra建立最小生成树这是本程序的中心,在众多路径中选出最短路径。基于对dijkstra求最小生成树方法的应用。使整个程序显得极为简便。课本中的dijkstra函数只是输入一个结点,然后输出从该结点出发到各结点的最短路径,为了使它更适用于本课程设计,我将它改为“输入两个结点,输出这两点的最短路径”。(4) search查询函数设计该函数的目的是为了能够多次得应用dijkstra函数进行查询最短路径。同时该函数可以列出各景点的代号和对应的名称,这样大家只要输入代号就行了。方便进行查询。相关模块介绍已在定义中图1:校园平面图2.5 程序调试的实验截图l 用户登陆界面l 用户登陆界面成功l 导航系统界面l 最短路径l 景点查询信息l 校园平面图三、源程序及系统文件使用说明#include#include #include /*清屏*/#includevoid insert();#define n 10int n=1;#define max 32767#define num 16typedef struct arccell int adj; / 相邻接的景点之间的路程 char *info;arccell; / 定义边的类型 typedef struct vertextype int number; / 景点编号 char *sight; / 景点名称 char *description; / 景点描述 vertextype; / 定义顶点的类型 typedef struct vertextype vexnum; / 图中的顶点,即为景点 arccell arcsnumnum; / 图中的边,即为景点间的距离 int vexnum,arcnum; / 顶点数,边数 mgraph; / 定义图的类型 mgraph g; / 把图定义为全局变量 int pnumnum; /long int dnum; / 辅助变量存储最短路径长度 void createudn(int v,int a); / 创建图的函数 void pingmu(); /屏幕输出函数void introduce();/输入介绍内容,但不输出void shortestpath(int num); /最短路径函数void output(int sight1,int sight2); /输出函数void printmgraph();char menu(); / 主菜单 void search(); / 查询景点信息 char searchmenu(); / 查询子菜单 void nextvalue(int); void display(); / 显示遍历结果 void show();/显示校园平面图void mainn();struct student char name20; char secret20; ;struct student stun;void pf()printf(nntt 计算机科学与技术学院数据结构课程设计);printf(nnntt -);printf(n tt |t 名称: 淮师大校园导航系统t|); printf(n tt |t 姓名: 田文祥 t|); printf(n tt |t 班级: 10计师 t|); printf(n tt |t 指导老师: 王宝华 t|); printf(n tt |t 作者: 淮师大校园 t|); printf(n tt -);void main()/主函数char s210,s310,s410,s510,s610,s110,s710=0;int i=0,a,j; file *fp; if(fp=fopen(用户信息.txt,r)=null) printf(找不到 用户信息.txt文件!n); system(pause); exit(0); else for(i=0;in;i+) fscanf(fp,t%st%sn,,stui.secret); fclose(fp); printf(nnnnnnnntt保存在用户信息.txt文件中的所有信息已经读入程序中!nnttt); system(pause); system(cls); for(i=0;i3;i+) pf();printf(nntt 用户登陆);printf(请输入用户名,你还有%d次机会。nttt,3-i);gets(s3); if(!strcmp(s3,s7) printf(用户名不能空格,谢谢!); printf(用户名不正确,请从新输入。n); system(pause); system(cls); if(i=2) printf(nnttt用户名不正确,按任意键退出。nnnttt); exit(0); continue; for(j=0;jn;j+) if(!strcmp(,s3) printf(用户名正确n); strcpy(s1,); strcpy(s2,stuj.secret); system(cls); break; if(!strcmp(s1,s3)break; printf(用户名不正确,请从新输入。n);system(pause); if(i=2) printf(用户名和密码不匹配,按任意键退出。n); system(pause); exit(0); system(cls); for(i=0;i3;i+) pf(); printf(nnt 用户登陆); printf(nn用户名正确n); printf(n请输入用户密码,你还有%d次机会。n,3-i); printf(密码正确,登陆成功时,系统将自动跳转n); gets(s4); if(!strcmp(s2,s4) system(cls); break; elseif(i=2) system(cls);printf(nnnttt用户名和密码不匹配,按任意键退出。nnnttt);exit(0);elsesystem(cls);printf(输入错误,请从新输入:n);for(i=0;i+)pf();printf(ntt *n);printf(tt * 1.退出系统 * n); printf(tt * * n);printf(tt * 2.进入淮师大导航系统 * n);printf(tt * * n);printf(tt * 3.新增用户信息 * n);printf(tt * * n); printf(tt * 0.修改密码 * n); printf(tt *n); printf(请选择功能n);scanf(%d,&a);if(a=1)printf(按任意键退出n);break;getchar(); if(a=2) mainn(); if(a=3) insert();if(a=0) for(i=0;i3;i+) system(cls); pf(); printf(nn请输入原密码n); printf(两次不正确,系统将自动返回,你还有%d次机会。n,3-i-1); gets(s3); if(!strcmp(s2,s3) for(i=0;i+) printf(n请输入新密码n); gets(s6); printf(n请在此输入新密码n); gets(s5); if(!strcmp(s5,s6) system(cls);printf(新密码为: %sn,s5);strcpy(s2,s5);strcpy(stuj.secret, s2); if(fp=fopen(用户信息.txt,w)=null) printf(n保存失败!); exit(0); else for(i=0;in;i+) fprintf(fp,t%st%sn,,stui.secret); fclose(fp); printf(新用户信息已保存在用户信息.txt中!n); system(pause); system(cls); break; elsesystem(cls);printf(nn两次输入密码不一样,密码修改失败n);break; break; else printf(原密码输入错误n); printf(请珍惜机会,从新输入。); system(pause); system(cls); if(i=2) exit(0); void insert() int i; file *fp; n+; printf(ntt输入新插入用户信息n); printf(n输入新用户名:); scanf(%s,); fflush(stdin); /清空输入缓冲区,通常是为了确保不影响后面的数据读取 printf(n输入新用户密码:); scanf(%s,stun.secret); if(fp=fopen(用户信息.txt,w)=null) printf(n保存失败!); exit(0); else for(i=0;in;i+) fprintf(fp,t%st%sn,,stui.secret); fclose(fp); printf(新用户信息已保存在用户信息.txt中!n); system(pause); system(cls);void mainn() / 主函数 int v0,v1,i; char ck; system(color 1b); createudn(num,16); do ck=menu(); switch(ck) case1: system(cls); introduce(); printf(nntt%-25snn,g.vex0.description); getchar(); getchar(); break; case 2: show(); getchar(); getchar();break; case 3: /printmgraph(); for(i=1;inum;i+) printf(tt%ctt(%2d)%-20s%cttt,1,i,g.vexi.sight,1); / 输出景点列表 printf(nntttt请按回车键继续.n); getchar(); getchar(); break; case 4:search(); break; case 5: system(cls); for(i=1;inum;i+) printf(tt%ctt(%2d)%-20s%cttt,1,i,g.vexi.sight,1); / 输出景点列表 printf(nnttt请选择起点景点(115):); scanf(%d,&v0); printf(ttt请选择终点景点(115):); scanf(%d,&v1); shortestpath(v0); / 计算两个景点之间的最短路径 output(v0,v1); / 输出结果 printf(nntttt请按回车键继续.n); getchar(); getchar(); break; while(ck!=6); system(cls);void show() printf(tttt淮北师范大学平面图nnnn); printf(tttttt 图书馆n); printf(tttttt n); printf(tttttt n); printf(tttttt n); printf(t 学生三食堂新阶科学讲堂行政楼n); printf(t tttt t n); printf(t 校医院四园广场校大门n); printf(t tttt n); printf(t tttt n); printf(t tttt n); printf(t tttt n); printf(t 综合实验楼t n); printf(t t tt n); printf(t 音乐楼 t 物电学院主教学楼n); printf(t t tt t n); printf(t 生物楼tt n); printf(t ttt n); printf(t ttt n); printf(t 文 科 楼逸夫实验楼nn); char menu() / 主菜单 / char c; int flag; system(cls); do flag=1; pingmu(); introduce(); printf(tt * 1.学校简介 nn); printf(tt * 2.淮师大校园平面简图 nn); printf(tt * 3.显示场所的编号 nn); printf(tt * 4.查看场所的具体信息 nn); printf(tt * 5.计算路径长度及找出最短路径nn); printf(tt * 6.退出 nn); printf(tt*n); printf(tttt请输入您的选择:); scanf(%c,&c); if(c=1|c=2|c=3|c=4|c=5|c=6) flag=0; while(flag); return c;char searchmenu() / 查询子菜单 char c; int flag; do flag=1; system(cls); pingmu(); introduce(); printf(ntt*n); printf(tt * n); printf(tt * 1、按照景点编号查询 n); printf(tt * 2、按照景点名称查询 n); printf(tt * 0、返回 n); printf(tt * n); printf(tt *n); printf(ttt请输入您的选择:); scanf(%c,&c); if(c=1|c=2|c=0) flag=0; while(flag); return c;void search() / 查询景点信息 int num; int i; char c; char name20; do system(cls); c=searchmenu(); switch (c) case 1: system(cls); introduce(); for(i=1;inum;i+) printf(tt%ctt(%2d)%-20s%cttt,1,i,g.vexi.sight,1); / 输出景点列表 printf(nntt请输入您要查找的景点编号:); scanf(%d,&num); for(i=0;inum;i+) if(num=g.vexi.number) printf(nnttt您要查找景点信息如下:); printf(nnttt%-25snn,g.vexi.description); printf(nttt按任回车返回.); getchar(); getchar(); break; if(i=num)/只要上面for循环执行完毕,则i就是num printf(nnttt没有找到!); printf(nnttt按回车键返回.); getchar(); getchar(); break; case 2: system(cls); introduce(); printf(nntt请输入您要查找的景点名称:); scanf(%s,name); for(i=1;inum;i+) if(!strcmp(name,g.vexi.sight) printf(nnttt您要查找景点信息如下:); printf(nnttt%-25snn,g.vexi.description); printf(nttt按回车键返回.); getchar(); getchar(); break; if(i=num)/只要上面for循环执行完毕,则i就是num printf(nnttt没有找到!); printf(nnttt按回车键返回.); getchar(); getchar(); break; while(c!=0); getchar();void createudn(int v,int a) / 创建图的函数 int i,j; g.vexnum=v; / 初始化结构中的景点数和边数 g.arcnum=a; for(i=1;ig.vexnum;+i) g.vexi.number=i; / 初始化每一个景点的编号 / 初始化每一个景点名及其景点描述 g.vex0.sight=学校简介; g.vex1.sight=校大门; g.vex2.sight=逸夫实验楼; g.vex3.sight=主教学楼; g.vex4.sight=图书馆; g.vex5.sight=物电学院; g.vex6.sight=四园广场; g.vex7.sight=行政楼; g.vex8.sight=文科大楼; g.vex9.sight=生物楼; g.vex10.sight=综合实验楼; g.vex11.sight=科学讲堂; g.vex12.sight=音乐楼; g.vex13.sight=校医院; g.vex14.sight=新阶; g.vex15.sight=学生三食堂; / 这里把所有的边假定为32767,含义是这两个景点之间是不可到达 for(i=1;ig.vexnum;+i) for(j=1;jg.vexnum;+j) g.arcsij.adj=max; g.=null; /下边是可直接到达的景点间的距离,由于两个景点间距离是互相的,/ 所以要对图中对称的边同时赋值。 g.arcs14.adj=g.arcs41.adj=1000; g.arcs16.adj=g.arcs61.adj=600; g.arcs23.adj=g.arcs32.adj=400; g.arcs28.adj=g.arcs82.adj=1200; g.arcs35.adj=g.arcs53.adj=400; g.arcs36.adj=g.arcs63.adj=900; g.arcs46.adj=g.arcs64.adj=700; g.arcs47.adj=g.arcs74.adj=700; g.arcs56.adj=g.arcs65.adj=800; g.arcs59.adj=g.arcs95.adj=800; g.arcs510.adj=g.arcs105.adj=800; g.arcs67.adj=g.arcs76.adj=100; g.arcs711.adj=g.arcs117.adj=200; g.arcs89.adj=g.arcs98.adj=200; g.arcs812.adj=g.arcs128.adj=400; g.arcs910.adj=g.arcs109.adj=700; g.arcs912.adj=g.arcs129.adj=500; g.arcs1114.adj=g.arcs1411.adj=100; g.arcs1213.adj=g.arcs1312.adj=600; g.arcs1315.adj=g.arcs1513.adj=100; g.arcs1415.adj=g.arcs1514.adj=100;void introduce() / 介绍函数 int i; for(i=1;i=num;i+) g.vex0.description= 淮北师范大学位于国家能源基地、国家园林城市安徽省淮北市,nntt是安徽具有较长本科办学历史的一所普通高等师范院校.nntt国家历史文化名城淮北,校园依山流韵、芳林叠翠、风景美丽。nntt经过半个多世纪的发展,学校现已形成以教师教育为主要办学特色nntt教、文、管、理、经等多学科协调发展的格局,是安徽省培养基础教育nntt师资和其他高级应用型人才的重要基地.nntt积极扩大对外交流与合作,学术交流日趋频繁nntt下面几点是淮北师范大学的办学特色:nntt办学历史较为悠久nntt学科专业较为齐全nntt师资队伍素质优良nntt教学成果较为丰硕nntt科研水平不断提高nntt校园文化丰富活跃nntt人才培养成效显著nntt合作交流日趋频繁nntt; g.vex1.description=t 学校大门,对面是天象校区; g.vex2.description=t 逸夫实验大楼,坐落在淮北师范大学南门的邵逸夫实验大楼,nt是一座崭新的现代化实验大楼。nntt; g.vex3.description=t 四园广场为学校举行大型活动的主要场所,位于行政大楼的下面,nt学生作品会展中心,学习活动之地nntt; g.vex4.description=t 图书馆为同学们阅读自习的不二之选,nt南楼设有自习室,北楼多为电子阅读室nntt; g.vex5.description=t 文科大楼,分为文南和文北。文南主要为多媒体教室。nt文北则是大多数热爱自习的同学的理想场所,那里学习气氛浓厚。nntt; g.vex6.description=t 科学讲堂,简称科讲,半圆形状的两层建筑,全部配备有多媒体。nntt; g.vex7.description=t 行政楼,教育交流中心,基本位于学校心脏位置,内部多为各科处室,会议室。nt指挥我校各项工作正常运行,其作用可想而知啦!nntt; g.vex8.description=t 音乐楼,专为音乐学院设计,外观圆形,经常有悦耳的琴声传出,叫人羡慕。nntt; g.vex9.description=t 主教学楼,历史悠久,拥有80年代建筑特有的火柴盒式的外形,共七层。nntt; g.vex10.description=t 学生三食堂,是同学们用“餐”的地方。nntt; g.vex11.description=t 新阶,原称“阶梯教室”,多媒体教室居多,教师宽敞明亮。nt也是一座很有个性的建筑呢。; g.vex12.description=t 生物楼,生命科学学院主要阵地,设有多个生物实验室,可进行各类项目生物实验。nt设备齐全而先进,室内环境优良。nntt; g.vex13.description=t 物电学院,与主楼样式相同,同意年代建造,发挥着不可替代的重要作用。nntt; g.vex14.description=t 又称“计算机楼”或“美术楼”。nntt; g.vex15.description=t 校医院,同学们健康保障的后盾,治愈率极低,冷清!nntt; void pingmu() / 屏幕输出函数 printf(tt-n); printf(tt * * * * * * * * * n); printf(tt * * * * * * * * * * * * n); printf(tt * * * * * * * * * * * * * * n); printf(tt * * * * * * * * * * * * n); printf(tt * * * * * * * * * n); printf(tt-n); printf(tt*n); printf(tttt欢迎光临淮北师范大学n); printf(tt*n);void shortestpath(int num) / 迪
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创新教育模式探索质性研究规范
- 维修合同协议版本模板
- 辽宁技术咨询合同范本
- 连锁养殖服务合同范本
- 高价电缆出售合同范本
- 街道办游泳池合同范本
- 物业与酒店的合同范本
- 监控变更合同书面协议
- 租同小区装修合同范本
- 教资语文笔试试题及答案
- 幕墙工程量计算规则
- 2024-2025苏教版(2017)小学科学四年级上册期末考试测试卷及参考答案(共3套)
- 2024年广东高考物理试题分析和复习策略
- Unit4EatWell(第3课时)SectionA3a-3d课件-人教版英语七年级下册
- 实施工程师述职报告
- 2025-2030年新能源汽车保险服务行业深度调研及发展战略咨询报告
- 采购合同中的税务条款3篇
- 大学生积极心理健康教育知到智慧树章节测试课后答案2024年秋运城职业技术大学
- 2024-2025学年译林版八年级英语上学期期末复习 专题01 Unit1 ~Unit8重点词汇短语句子归纳【考点清单】
- 外科学(1)知到智慧树章节测试课后答案2024年秋温州医科大学
- 社区小小宣传员(课件)四年级下册劳动人教版
评论
0/150
提交评论