/**************************头文件声明************************************/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
/**************************函数声明************************************/
void init(); //初始化函数
void add(); //信息录入函数
void view(); //信息显示函数
void mod(); //信息修改函数
void modmeun(); //修改菜单
void modnavimeun(); //路线修改菜单
void del(); //信息删除函数
void find(); //信息查询函数
void findmeun(); //查询菜单
void findnavi(); //路线导航查询函数
void findnum(); //路线编号查询函数
void findstameun(); //站台信息查询菜单
void findsta(); //站台信息查询函数
void save(); //信息保存函数
void mainmeun(); //主菜单
char Test(char a,char b,char c); //菜单输入检测函数
/**************************宏定义声明************************************/
#define N 100 //公交车数量
/**************************结构体定义************************************/
struct station //途径站点信息
{
char c[20]; //站点名称
};
struct bus //公交车信息
{
char num[20]; //公交车路线编号
char name[20]; //司机姓名
int n; //站台数目
struct station b[12]; //站台名称
char topen[20]; //起始时间
char tclose[20]; //终止时间
int money; //票价
}a[N];
/**************************函数定义************************************/
int main()
{
char a;
init();
printf("\n\t\t目前所能录入的公交车数量上限为 %d 辆\n\n",N);
printf("\n\t\t输入回车键继续\n");
fflush(stdin); //清除键盘缓冲区
while(1)
{
system("cls");
mainmeun();
a=Test(getchar(),'1','6'); //菜单检测输入函数
switch(a)
{
case '1': system("cls"); add(); break;
case '2': system("cls"); view(); break;
case '3': system("cls"); mod(); break;
case '4': system("cls"); del(); break;
case '5': system("cls"); find(); break;
case '6': return 0;
}
}
return 0;
}
void init() //初始化函数
{
FILE *fp; //文件指针
int i;
if((fp=fopen("bus.txt","r+"))==NULL) //初次尝试打开"bus.txt"文本文件
{
printf("\n\t\t文件打开失败\n\n\t\t正在尝试创建新文件...\n");
fp=fopen("bus.txt","w"); //创建"bus.txt"文本文件
if((fp=fopen("bus.txt","r+"))==NULL) //再次判断是否打开成功
{
printf("\t\t文件创建失败!!!\n");
return;
}
}
fp=fopen("bus.txt","r+");
for(i=0;i<N;i++) //将磁盘中的信息输出到内存中
if(fread(&a[i],sizeof(struct bus),1,fp)!=1)
break;
fclose(fp);
printf("\n\t\t初始化完成!!!\n\n");
return;
}
void add() //信息录入函数
{
FILE *fp=NULL; //文件指针
int i,j;
char cc[20];
for(i=0;i<N;i++)
{
if(*a[i].num!='\0')
continue;
else
{
printf("\n添加第%d辆公交车路线记录:\n",i+1);
printf("\n请输入路线编码(3位编码,第一位为大写字母,后两位为数字):\n"); //路线编码
scanf("%s",cc);
for(j=0;j<N;j++) //检验是否重复
if(strcmp(a[j].num,cc)==0)
{
printf("\n与已有路线编码重复,按回车键返回!!!\n");
fflush(stdin); //清除键盘缓冲区
getchar();
system("cls");
return;
}
strcpy(a[i].num,cc);
printf("\n请输入司机姓名: "); //司机姓名
scanf("%s",a[i].name);
printf("\n请输入途径站台总数(>=2): "); //站台总数
scanf("%d",&a[i].n);
printf("\n");
if(a[i].n<2||a[i].n>12)
{
while(a[i].n<2||a[i].n>12)
{
printf("\n站台总数应满足(2<=n<=12),请重新输入: ");
scanf("%d",&a[i].n);
printf("\n");
}
}
for(j=0;j<a[i].n;j++)
{
printf("请输入第%d个站台名称: ",j+1); //站台名称
scanf("%s",a[i].b[j].c);
}
printf("\n自动生成公交路线:(1) %s",a[i].b[0].c);
for(j=1;j<a[i].n;j++)
{
printf(" ----> (%d) %s",j+1,a[i].b[j].c);
}
printf("\n\n请输入公交车的起始时间(格式为:时:分): "); //起始时间
scanf("%s",a[i].topen);
printf("请输入公交车的终止时间(格式为:时:分): "); //终止时