| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 575 人关注过本帖
标题:这个程序怎么改成文件保存的形式!
只看楼主 加入收藏
胖大海
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-6-28
收藏
 问题点数:0 回复次数:1 
这个程序怎么改成文件保存的形式!
// 校园导游.cpp : Defines the entry point for the console application.
//
#include"stdafx.h"
#define DERCTION    10000      
#define MAX 50
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct ArCell//校区间距离
{
 int way;
}ArCell,WayMatrix[50][50];
typedef struct//图中定点主要表示景点,存放景点的编号,名称,简介信息
{
 char name[30];
 int num;
    char introduction[100];
}infotype;
typedef struct//路径与距离
{
 infotype vexs[50];
    WayMatrix arcs;
    int vexnum,arcnum;
}SGuide;
SGuide b;
SGuide InGuide(void);
void Menu();//菜单
void Browser(SGuide *G);//总体浏览
void ShortPath(SGuide * G); //最短路径
void Floyd(SGuide *G); //所有路径
void Search(SGuide *G); //查找搜寻
int LocateVex(SGuide *G,char* v); //当前地点到其他地点的路径
void print(SGuide *G);
void Menu()//定义菜单函数,显示主页面
{
   
 printf("       |*************************河西校区*****************************         \n");
    printf("       |            *     *    *               *         *    |    |         \n");
    printf("       |            *     *    *               *         *    |      |         \n");
 printf("       |            *     *    *               *         *    |      |         \n");
    printf("       |*********师专校区 *    *               *         *    |    |         \n");
    printf("       |            *     *    *               *         *    |      |         \n");
    printf("       |______________________________________________________|      |         \n");
    printf("       |         *    *     *    *      *      *         *    |    |         \n");
    printf("       | ________*________湘*____*__江________________________|      |         \n");
    printf("       |            *     *    *               *         *    |      |         \n");
    printf("       |            *                          *     冶金校区 |    |         \n");
    printf("       |            *                          *              |      |         \n");
    printf("       |            *                          *              |      |         \n");
    printf("       ***********科技学院**********工学院校区****************|    |         \n");
    printf("    *********************************************************************      \n");
    printf("    *  *            欢迎使用*****大学校园导游查询系统             *  *      \n");
    printf("    *  *                1.查看所有校区                               *  *      \n");
    printf("    *  *                2.查看所有路径                               *  *      \n");
    printf("    *  *                3.选择当前位置和目的地                       *  *      \n");
    printf("    *  *                4.查询校区信息                               *  *      \n");
    printf("    *  *                5.退出                                       *  *      \n");
    printf("    *********************************************************************      \n");
    printf("输入选择操作的序号:");
}
SGuide InGuide(void)//校区介绍,对各校区的简介
{
 SGuide G;
 int i,j;
    G.vexnum=5;
    G.arcnum=14;
 for(i=0;i <G.vexnum;i++)//在校区编号范围之内查询
  G.vexs[i].num=i;
 strcpy(G.vexs[0].name,"工学院校区");
 strcpy(G.vexs[0].introduction,"主校区,约有10000师生,\n                       这里教学条件完善,设备齐全。");
    strcpy(G.vexs[1].name,"河西校区");
    strcpy(G.vexs[1].introduction,"新校区,约有15000师生,\n                      建筑雄伟,学习氛围浓厚。");
    strcpy(G.vexs[2].name,"师专校区");
    strcpy(G.vexs[2].introduction,"师范学院,约有9000师生,\n                      环境优美。");
    strcpy(G.vexs[3].name,"冶金校区");
    strcpy(G.vexs[3].introduction,"冶金工程学院,约有8000师生,\n                校园美丽。");
    strcpy(G.vexs[4].name,"科技学院");  
 strcpy(G.vexs[4].introduction,"独立学院,约有8000师生\n                        环境清幽。");
 for(i=0;i <G.vexnum;i++)//两点间的距离
  for(j=0;j <G.vexnum;j++)
   G.arcs[i][j].way=DERCTION;
  G.arcs[0][1].way=6;
  G.arcs[0][2].way=8;
        G.arcs[2][3].way=7;
        G.arcs[3][4].way=13;
  for(i=0;i <G.vexnum;i++)
   for(j=0;j <G.vexnum;j++)
    G.arcs[j][i].way=G.arcs[i][j].way;
   return G;//返回函数值
}
void Browser(SGuide *G) //定义校区浏览简介函数
{
  int v;
     printf(" 编号  校区名称         简介                                                      \n");
     for(v=0;v <G->vexnum;v++)
   printf("%-4d  %-16s %-56s \n",G->vexs[v].num,G->vexs[v].name,G->vexs[v].introduction);
 }
void ShortPath(SGuide * G) //定义最短路径的算法函数
{
 int v,w,i,min,t=0,x,flag=1,v0;
    int final[20], D[20], p[20][20];
 while(flag)
 {
  printf("请输入一个起始校区编号:");
        scanf("%d",&v0);
  if(v0 <0||v0>G->vexnum)
  {
   printf("校区编号不存在!请重新输入景点编号:");
            scanf("%d",&v0);
  }
  if(v0>=0&&v0 <G->vexnum)
   flag=0;
 }
 for(v=0;v<G->vexnum;v++)
 {
  final[v]=0;
  D[v]=G->arcs[v0][v].way;
  for(w=0;w <G->vexnum;w++)
   p[v][w]=0;
  if(D[v] <DERCTION)
  {
   p[v][v0]=1;p[v][v]=1;
  }
 }
 D[v0]=0;final[v0]=1;
    for(i=1;i <G->vexnum;i++)
 {
  min=DERCTION;
  for(w=0;w <G->vexnum;w++)
   if(!final[w])
    if(D[w] <min){v=w;min=D[w];
    }
     final[v]=1;
     for(w=0;w <G->vexnum;w++)
      if(!final[w]&&(min+G->arcs[v][w].way <D[w]))
      {
       D[w]=min+G->arcs[v][w].way;
       for(x=0;x <G->vexnum;x++)
        p[w][x]=p[v][x];
       p[w][w]=1;
      }
 }
 for(v=0;v <G->vexnum;v++)
 {
  if(v0!=v) printf("%s",G->vexs[v0].name);
  for(w=0;w <G->vexnum;w++)
  {
   if(p[v][w]&&w!=v0)  printf("-->%s",G->vexs[w].name);
   t++;
  }
  if(t>G->vexnum-1&&v0!=v)printf("      总路线长%dKM\n\n",D[v]);
 }
}
void Floyd(SGuide *G)//所有路径的函数
{
 int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];//通过以下循环得到起始点到其它地点的路径和距离
 for(v=0;v <G->vexnum;v++)
  for(w=0;w <G->vexnum;w++)
  {
   D[v][w]=G->arcs[v][w].way;
   for(u=0;u <G->vexnum;u++)
    p[v][w][u]=0;
   if(D[v][w] <DERCTION)
   {
     p[v][w][v]=1;p[v][w][w]=1;
   }
  }
  for(u=0;u <G->vexnum;u++)
   for(v=0;v <G->vexnum;v++)
    for(w=0;w <G->vexnum;w++)
     if(D[v][u]+D[u][w] <D[v][w])
     {
      D[v][w]=D[v][u]+D[u][w];
      for(i=0;i <G->vexnum;i++)
       p[v][w][i]=p[v][u][i]||p[u][w][i];
     }
     while(flag)
     {
      printf("请输入出发点和目的地的编号:");
      scanf("%d%d",&k,&j);
      if(k <0||k>G->vexnum||j <0||j>G->vexnum)
      {
       printf("校区编号不存在!请重新输入出发点和目的地的编号:");
       scanf("%d%d",&k,&j);
      }
      if(k>=0&&k <G->vexnum&&j>=0&&j <G->vexnum)
       flag=0;
     }
     printf("%s",G->vexs[k].name);
     for(u=0;u <G->vexnum;u++)
      if(p[k][j][u]&&k!=u&&j!=u)
       printf("-->%s",G->vexs[u].name);
      printf("-->%s",G->vexs[j].name);
      printf(" 总路线长%dm\n",D[k][j]);
}
void Search(SGuide *G)//定义查找函数
{
 int k,flag=1;
 while(flag)
 {
  printf("请输入要查询的校区编号:");
  scanf("%d",&k);
  if(k <0||k>G->vexnum)//不在搜寻范围内
  {
   printf("校区编号不存在!请重新输入校区编号:"); //报错
   scanf("%d",&k);
  }
  if(k>=0&&k <G->vexnum)//在搜寻范围内,可查找
   flag=0;
 }
 printf(" 编号 校区名称        简介                                                    ┃\n");
 printf(" %-4d %-16s %-56s \n",G->vexs[k].num,G->vexs[k].name,G->vexs[k].introduction);
}
int LocateVex(SGuide *G,char* v)
{
 int c=-1,i;
 for(i=0;i <G->vexnum;i++)
  if(strcmp(v,G->vexs[i].name)==0)
  {c=i;break;}
  return c;
}
void print(SGuide *G)
{
 int v,w,t=0;
 for(v=0;v <G->vexnum;v++)
  for(w=0;w <G->vexnum;w++)
  {
   if(G->arcs[v][w].way==DERCTION)
    printf("∞      ");
   else printf("%-7d",G->arcs[v][w].way);
    t++;
    if(t%G->vexnum==0)
     printf("\n");
  }
}
void main()
{

 int i;
 Menu();//定义菜单
    b=InGuide();
 scanf("%d",&i);
    while(i !=5)
 {if(i<1||i>5){
         printf("傻瓜!您选的数字不在范围内\n");
         printf("再给你一次机会哦,请输入正确的编号!\n");
    }
 switch(i)//选择执行
 {
        case 1:Browser(&b);Menu();break;
        case 2:ShortPath(&b);Menu();break;
        case 3:Floyd(&b);Menu();break;
        case 4:Search(&b);Menu();break;
        case 5:exit(1);break;
   default:break;
    }
     scanf("%d",&i);
     
 }
   
}
搜索更多相关主题的帖子: 形式 文件 保存 
2010-06-28 17:10
hao0716
Rank: 4
等 级:业余侠客
威 望:1
帖 子:353
专家分:222
注 册:2006-4-11
收藏
得分:0 
运行时加 >文件名

2010-07-09 20:21
快速回复:这个程序怎么改成文件保存的形式!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026485 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved