C语言课程设计——简易公交车管理系统(数组实现)

/**************************头文件声明************************************/

#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=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 (%d) %s",j+1,a[i].b[j].c);
			}
			printf("\n\n请输入公交车的起始时间(格式为:时:分): ");       //起始时间
			scanf("%s",a[i].topen);
			printf("请输入公交车的终止时间(格式为:时:分): ");           //终止时间
			scanf("%s",a[i].tclose);
			printf("\n请输入公交车的票价: ");                            //票价
			scanf("%d",&a[i].money);
			printf("\n第%d辆公交车路线记录创建成功!!!\n",i+1);
			save();
			printf("\n\t按回车键返回!!!\n");
			fflush(stdin);                           //清除键盘缓冲区
			getchar();
			system("cls");
			return;
		}
	}
	if(i==N)
		printf("\n\n\n\t空间已满,不能录入!!!\n");
	printf("\n\t按回车键返回!!!\n");
	fflush(stdin);                           //清除键盘缓冲区
	getchar();
	system("cls");
	return;
}


void view()    //信息显示函数      
{
	int i,j,min;
	struct bus t;                                   
	for(i=0;*a[i].num!='\0'&&i0)
				min=j;
		t=a[i];
		a[i]=a[min];
		a[min]=t;
	}
	printf("\n\n                              公交车信息库");
	printf("\n********************************************************************************\n");
	for(i=0;*a[i].num!='\0'&&i(%d) %s",j+1,a[i].b[j].c);
		printf("\n\n");
	}
	printf("\n********************************************************************************\n");
	printf("\n\t\t公交车信息显示完毕!!!\n");
	printf("\n\t\t输入回车键返回主菜单:");
	fflush(stdin);                           //清除键盘缓冲区
	getchar();
	system("cls");
	return;
}



void mod()                          //信息修改函数
{
	int i,j,m=0;
	char t,cc[20],mod[20];
	printf("请输入要修改信息的公交车路线编号:\n");
	scanf("%s",cc);
	for(i=0;*a[i].num!='\0'&&i(%d) %s",j+1,a[i].b[j].c);
				printf("\n\n");
				printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - \n\n");
				modmeun();
				fflush(stdin);                           //清除键盘缓冲区
				t=Test(getchar(),'1','5');      //菜单检测输入函数 
				system("cls");
				switch(t)
				{
				case '1':           //修改路线编号
					{
						int k;
						printf("\n请输入新的公交车编号:");
						scanf("%s",mod);
						for(k=0;*a[k].num!='\0'&&k12)             //判断是否满足条件
									{
										printf("\n站台总数达到12个,无法添加新站点\n\n按回车键返回\n");
										fflush(stdin);                           //清除键盘缓冲区
										getchar();
										system("cls");
										return;
									}
									printf("\n请输入需要添加第几个站点:");
									scanf("%d",&k);
									while(a[i].n+1k-1;j--)
									{
											a[i].b[j]=a[i].b[j-1];
									}
									printf("\n请输入新添加的站点名称:");
									scanf("%s",a[i].b[k-1].c);
									save();
									break;
								}
							case '2':     //修改站点
								{
									printf("\n请输入需要修改第几个站点:");
									scanf("%d",&k);
									printf("\n请输入新的站点名称:");
									scanf("%s",a[i].b[k-1].c);
									save();
									break;
								}
							case '3':     //删除站点
								{
									printf("\n请输入需要删除第几个站点:");
									scanf("%d",&k);
									for(j=k-1;j12)             //判断是否满足条件
									{
										printf("\n站台总数应满足(2<=n<=12),请重新输入: ");
										scanf("%d",&a[i].n);
										printf("\n");
									}
									for(j=0;j(%d) %s",j+1,a[i].b[j].c);
									printf("\n\n");
									save();
									break;
								}
							case '5':     //返回菜单
								{
									printf("\n\t\t按回车键返回菜单\n");
									fflush(stdin);                           //清除键盘缓冲区
									getchar();
									system("cls");
									return;                            //返回主菜单
								}
							}
						}
					}
				case '4':           //修改行车时间
					{
						printf("\n\n请输入公交车的起始时间(格式为:时:分): ");
						scanf("%s",a[i].topen);
						printf("请输入公交车的终止时间(格式为:时:分): "); 
						scanf("%s",a[i].tclose);
						save();
						break;
					}
				case '5':
					{
						printf("\n\t\t按回车键返回主菜单\n");
						fflush(stdin);                           //清除键盘缓冲区
						getchar();
						system("cls");
						return;                            //返回主菜单
					}
				}
			}
		}
	}
	if(m==0)
		printf("\n\n\t\t无此公交车信息!!!\n");
	printf("\n\t\t按回车键返回\n");
	fflush(stdin);                           //清除键盘缓冲区
	getchar();
	system("cls");
	return;
}



void modmeun()  //修改菜单
{
	printf("\n\t\t                 修改菜单                   ");
	printf("\n\t\t********************************************");
	printf("\n\t\t*            1、修改路线编号               *");
	printf("\n\t\t*            2、修改车辆信息               *");
	printf("\n\t\t*            3、修改行车路线               *");
	printf("\n\t\t*            4、修改行车时间               *");
	printf("\n\t\t*            5、返回到主菜单               *");
	printf("\n\t\t********************************************");
	printf("\n\n\t\t请输入您的选择:");
}


void modnavimeun() //路线修改菜单
{
	printf("\n\t\t               路线修改菜单                 ");
	printf("\n\t\t********************************************");
	printf("\n\t\t*            1、 站 点 添 加               *");
	printf("\n\t\t*            2、 站 点 修 改               *");
	printf("\n\t\t*            3、 站 点 删 除               *");
	printf("\n\t\t*            4、 路 线 重 置               *");
	printf("\n\t\t*            5、 返 回 菜 单               *");
	printf("\n\t\t********************************************");
	printf("\n\n\t\t请输入您的选择:");
}


void del()       //信息删除函数
{
	int i,j,t,m=0;
	char cc[20];
	printf("\n请输入要删改信息的公交车路线编号:\n");
	scanf("%s",cc);
	for(i=0;*a[i].num!='\0'&&i(%d) %s",j+1,a[i].b[j].c);
			printf("\n\n");
			printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - \n\n");
			printf("即将删除该公交车信息!!!\n确定请按1:");
			scanf("%d",&t);
			if(t==1)
			{
				if(i+1==N)
					memset(&a[i],'\0',sizeof(struct bus));      //最后一辆直接进行清空
				else
					for(j=i;*a[j].num!='\0'&&j+1(%d) %s",j+1,a[i].b[j].c);
					printf("\n\n");
				}
	}
	printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - \n\n");
	printf("\t\t\t\t显示完毕\n");
	if(m==0)
		printf("\n\n\t\t\t\t抱歉,无途径此路线的公交车\n");
	printf("\n\t\t\t\t输入回车键返回查询菜单:");
	fflush(stdin);                           //清除键盘缓冲区
	getchar();
	system("cls");
	return;
}


void findnum()           //路线编号查询函数
{
	int i,j,m=0;
	char cc[20];
	printf("请输入您想要查找的公交路线编号:\n");
	scanf("%s",cc);
	for(i=0;*a[i].num!='\0'&&i(%d) %s",j+1,a[i].b[j].c);
			printf("\n\n");
			printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - \n\n");
			break;
		}
	}
	if(m==0)
		printf("\n\t\t无此公交车信息\n");
	printf("\n\t\t输入回车键返回查询菜单:");
	fflush(stdin);                           //清除键盘缓冲区
	getchar();
	system("cls");
	return;
}


 void findstameun()  //站台信息查询菜单
{
	printf("\n\t\t             站台信息查询菜单");
	printf("\n\t\t********************************************");
	printf("\n\t\t*            1、起始站台查询               *");
	printf("\n\t\t*            2、终止站台查询               *");
	printf("\n\t\t*            3、途径站台查询               *");
	printf("\n\t\t*            4、返回查询菜单               *");
	printf("\n\t\t********************************************");
	printf("\n\n\t\t请输入您的选择:");
}


void findsta()       //站台信息查询函数
{
	int i,j,k;
	char t;
	char cc[20];
	while(1)
	{
		int m=0;
		findstameun();
		fflush(stdin);                           //清除键盘缓冲区
		t=Test(getchar(),'1','4');      //菜单检测输入函数 
		system("cls");
		switch(t)
		{
		case '1':
			{
				printf("请输入您所要查询的起始站台名称:\n");
				scanf("%s",cc);
				printf("\n以%s为起始站台的公交车如下:\n",cc);
				printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - \n");
				for(i=0;*a[i].num!='\0'&&i(%d) %s",j+1,a[i].b[j].c);
						printf("\n\n");
					}
				}
				printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - \n\n");
				printf("\t已全部显示完毕!!!\n");
				if(m==0)
					printf("\n\t没有公交车以该站点为起始站台\n");
				break;
			}
		case '2':
			{
				printf("请输入您所要查询的终止站台名称:\n");
				scanf("%s",cc);
				printf("\n以%s为终止站台的公交车如下:\n",cc);
				printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - \n");
				for(i=0;*a[i].num!='\0'&&i(%d) %s",j+1,a[i].b[j].c);
						printf("\n\n");
					}
				}
				printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - \n\n");
				printf("\t已全部显示完毕!!!\n");
				if(m==0)
					printf("\n\t没有公交车以该站点为起始站台\n");
				break;
			}
		case '3':
			{
				printf("请输入您所要查询的途径站台名称:\n");
				scanf("%s",cc);
				printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - \n");
				for(i=0;*a[i].num!='\0'&&i(%d) %s",j+1,a[i].b[j].c);
							printf("\n\n");
						}
				printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - \n\n");
				printf("\t已全部显示完毕!!!\n");
				if(m==0)
					printf("\n\t没有公交车以该站点为途径站台\n");
				break;
			}
		case '4':
			{
				printf("\n\t\t按回车键返回查询菜单\n");
				fflush(stdin);                           //清除键盘缓冲区
				getchar();
				system("cls");
				return;                            //返回主菜单
			}
		fflush(stdin);                           //清除键盘缓冲区
		getchar();
		system("cls");
		}
	}
	return;
}

void save()         //信息保存函数 
{
	FILE *fp=NULL;
	int i;
	if((fp=fopen("bus.txt","w+"))==NULL)            //以读写的方式打开名称为"bus"的文本文件
	{
		printf("文件打开错误!!!\n");
		return;
	}
	fp=fopen("bus.txt","w+");
	for(i=0;*a[i].num!='\0'&&ic)
	{
		printf("\n\t\t\t输入错误,请重新输入: ");
		fflush(stdin);                           //清除键盘缓冲区
		a=getchar();
	}
	return a;
}


你可能感兴趣的:(C语言课程设计——简易公交车管理系统(数组实现))