C语言课程设计(大作业)(车票管理系统)
一、项目简介
设计一个车票管理系统实现录入、查看班次信息,售票,退票等基本功能。设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节
二、任务概述
(1)录入班次信息(信息用文件保存),可不定时地增加班次数据
(2)浏览班次信息,可显示出所有班次当前状总。
(3)查询路线:可按班次号查询 ,可按终点站查询
(4)售票和退票功能
A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数
B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数
【数据结构】
本程序用到2个结构体,方便信息的录入,浏览,查询,订票与退票,等功能的实现。
三、功能展示
四、思维导图
五、程序源码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <time.h>
#define FALSE 0
#define TRUE 1
void mainmenu(void); //主菜单函数
void InputMessage(void);//输入信息函数
void ShowMessage(void);//显示信息函数
void SearchMessage(void);//查询信息函数
void searchbynumber();//根据班次号查询函数
void searchbyaddress();//根据终点站查询的函数
void TicketManagement(void);//选择订票/退票的函数
void TicketOrder();//订票实现函数
void TicketDelete();//退票实现函数
int FLAG;//标志
struct time//时间结构体
{
int hour;
int minutes;
};
struct ticket//车票的结构体
{
int carnumber;//车次
struct time setout;
char beginpoint[20];//起点站
char endpoint[20];//终点站
float lasttime;//行车时间
int fixnumber;//额定载量
int fixednumber;//已定票的人数
}car[4];
int main()
{int FLAG=FALSE;
do{mainmenu(); }while(FLAG=FALSE);
}
void mainmenu()
{char functioNnumber;
printf(" 车票管理系统\n\n");
printf("=============================================================\n"); printf(" 1.录入班次信息\t\n");
printf(" 2.浏览班次信息\t\n");
printf(" 3.查询行车路线\t\n");
printf(" 4.售票与退票系统\t\n");
printf(" 5.退出该系统\t\n");
printf("=============================================================\n"); printf("请选择你所需要的功能:");
scanf("%s",&functioNnumber);switch(functioNnumber)
{
case '1':
{system("cls");InputMessage();
printf("\n按任意键返回主菜单\n");
getchar();
getchar();
mainmenu();
};break;
case '2':{ system("cls");ShowMessage();
printf("\n按任意键返回主菜单\n");
getchar();
getchar();
mainmenu();
};break;
case '3':
{ system("cls");SearchMessage();
printf("\n按任意键返回主菜单\n");
getchar();
getchar();
mainmenu();
};break;
case '4':
{system("cls");TicketManagement();
printf("\n按任意键返回主菜单\n");
getchar();
getchar();
mainmenu();
};break;
case '5':FLAG=TRUE;
printf("*****************************感谢使用本系统***********************************************"); exit(0);
break;
default:
{
printf("对不起你的输入有误,请确保你的输入为1-5.\n"); printf("按任意键返回主菜单\n");
getchar();
getchar();
mainmenu();
};
};
FLAG=FALSE;
}
void InputMessage()
{int i;
for(i=0;i<4;i++)//一次录入四班车
{printf("请输入班次号:\n");
scanf("%d",&car[i].carnumber);
printf("请输入发车时间:\n");
scanf("%d %d",&car[i].setout.hour,&car[i].setout.minutes);
printf("请输入起点站:\n");
scanf("%s",car[i].beginpoint);
printf("请输入终点站:\n");
scanf("%s",car[i].endpoint);
printf("请输入行车时间:\n");
scanf("%f",&car[i].lasttime);
printf("请输入额定载量:\n");
scanf("%d",&car[i].fixnumber);
printf("请输入已定票人数:\n");
scanf("%d",&car[i].fixednumber);
}
for(i=0;i<4;i++)
{printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已订票人数\n"); printf("%d\t%d:%d\t",car[i].carnumber,car[i].setout.hour,car[i].setout.minutes);
printf("%s\t%s\t%f\t%d\t%d\t\n",car[i].beginpoint,car[i].endpoint,car[i].lasttime,car[i].fixnumber,car[i].fixednumber);
}}
void ShowMessage()
{int i;
time_t tval;
struct tm*now;
tval=time(NULL);
now=localtime(&tval);for(i=0;i<4;i++)
{if((now->tm_hour==car[i].setout.hour&&now->tm_min<car[i].setout.minutes)||(now->tm_hour<car[i].setout.hour))
{printf("%d\t%d:%d\t",car[i].carnumber,car[i].setout.hour,car[i].setout.minutes);
printf("%s\t%s\t%f\t%d\t%d\t\n",car[i].beginpoint,car[i].endpoint,car[i].lasttime,car[i].fixnumber,car[i].fixednumber);}
else {printf("此车已出发。\n");
printf("%d\t%d:%d\t",car[i].carnumber,car[i].setout.hour,car[i].setout.minutes);
printf("%s\t%s\t%f\t%d\t%d\t\n",car[i].beginpoint,car[i].endpoint,car[i].lasttime,car[i].fixnumber,car[i].fixednumber);}
}}
void SearchMessage()
{char functionnumber;
printf("查询子菜单:\n");
printf("=========================================================================\n");
printf(" 1.按班次号查询\n");
printf(" 2.按终点站查询\n");
printf(" 3.返回主菜单\n");
printf("=========================================================================\n");
printf("请选择你需要的功能:");
scanf("%s",&functionnumber);
switch(functionnumber)
{
case '1':system("cls");searchbynumber();break;
case '2':system("cls");searchbyaddress();break;
case '3':system("cls");mainmenu();break;
default:printf("输入错误,请确保你的输入为1-3.\n");
printf("请按任意键返回查询子菜单\n");
getchar();
getchar();
SearchMessage();
}
}
void searchbynumber()
{int searchnumber;
int s;
printf("请输入你要查询的班次号:");
scanf("%d",&searchnumber);
if(searchnumber>=1&&searchnumber<=4)
{s=searchnumber-1;
printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已订票人数\n");printf("%d\t%d:%d\t",car[s].carnumber,car[s].setout.hour,car[s].setout.minutes);
printf("%s\t%s\t%f\t%d\t%d\t\n",car[s].beginpoint,car[s].endpoint,car[s].lasttime,car[s].fixnumber,car[s].fixednumber);}
else printf("对不起,没有这趟车.");
}
void searchbyaddress()
{int i;
char address[20];
printf("请输入终点站名:");
scanf("%s",address);
for(i=0;i<=4;i++)
if(strcmp(address,car[i].endpoint)==0)
{printf("%d\t%d:%d\t",car[i].carnumber,car[i].setout.hour,car[i].setout.minutes);
printf("%s\t%s\t%f\t%d\t%d\t\n",car[i].beginpoint,car[i].endpoint,car[i].lasttime,car[i].fixnumber,car[i].fixednumber);
}
}
void TicketManagement()
{
char functionnumber;
printf("==========================================================================\n");
printf(" 1.订票.\n");
printf(" 2.退票.\n");
printf(" 3.返回主菜单.\n");
printf("==========================================================================\n");
printf("请选择你需要的功能:\n");
scanf("%s",&functionnumber);
switch(functionnumber)
{case '1':system("cls");
TicketOrder();break;
case '2':system("cls");
TicketDelete();
break;
case '3':system("cls");
{mainmenu();}break;
default:
{printf("输入错误,请确保你的输入为1--3.\n");
printf("按任意键返回子菜单.\n");
getchar();getchar();
TicketManagement();
}
}
}
void TicketOrder()
{int i;
int s;
printf("请输入要订购的车票的班次:\n");
scanf("%d",&i);
s=i-1;
if(s<0||s>3)
{printf("对不起,没有这趟车,请查询后再订票.\n");
printf("按任意键返回车票管理菜单。");
getchar();
getchar();
TicketManagement();
}
else
{
time_t tval;
struct tm*now;
tval=time(NULL);
now=localtime(&tval);
if((now->tm_hour==car[s].setout.hour&&now->tm_min<car[s].setout.minutes)||(now->tm_hour<car[s].setout.hour))
{if(car[s].fixednumber<car[s].fixnumber)
{car[s].fixednumber++;
printf("你的订票成功,请按时上车,谢谢使用!\n");
}else printf("对不起,今天的这趟车的票已卖完,请明天再来,谢谢合作!\n");
}else printf("对不起,今天的这趟车已出发,请明天再来,谢谢合作!\n");
}
printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已订票人数\n");
printf("%d\t%d:%d\t",car[s].carnumber,car[s].setout.hour,car[s].setout.minutes);
printf("%s\t%s\t%f\t%d\t%d\t",car[s].beginpoint,car[s].endpoint,car[s].lasttime,car[s].fixnumber,car[s].fixednumber);
printf("按任意键返回主菜单。\n");getchar();
getchar();
}
void TicketDelete()
{int i;
int s;
printf("请输入要退购的车票的班次:\n");
scanf("%d",&i);
s=i-1;
if(s<0||s>3)
{printf("对不起,没有这趟车,请查询后再退票.\n");
printf("按任意键返回车票管理菜单。");
getchar();
getchar();
TicketManagement();
}
else
{
time_t tval;
struct tm*now;
tval=time(NULL);
now=localtime(&tval);
if((now->tm_hour==car[s].setout.hour&&now->tm_min<car[s].setout.minutes)||(now->tm_hour<car[s].setout.hour))
{if(car[s].fixednumber<car[s].fixnumber)
{car[s].fixednumber--;
printf("退票成功,谢谢使用!\n");
}else printf("对不起,今天的这趟车的票尚未卖出,无法完成退票!\n");
}else printf("对不起,今天的这趟车已出发,无法完成退票!\n");
}
printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已订票人数\n");
printf("%d\t%d:%d\t",car[s].carnumber,car[s].setout.hour,car[s].setout.minutes);
printf("%s\t%s\t%f\t%d\t%d\t",car[s].beginpoint,car[s].endpoint,car[s].lasttime,car[s].fixnumber,car[s].fixednumber);`在这里插入代码片`
printf("按任意键返回主菜单。\n");
getchar();
getchar();
}
如若不可用评论区回复(山无陵天地合都要点个赞。)