《火车票订票系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《火车票订票系统课程设计报告.doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、设计题目:火车订票管理系统班 级:姓 名:学 号:2015年1月4日1.课程设计目的和要求火车订票管理系统的主要功能包括:1. 火车线路查询功能,乘客输入终点站名称或输入车次,输出相应的火车线路信息。2. 订票功能。乘客输入车次和订票数,先查询该车次的余票数,若余票数大于等于订票数,则为乘客办理订票手续,要求乘客输入姓名、身份证号码,计算出总票价,产生一个新结点,将该结点添加到对应车次的链表中,然后修改该车次的余票数。若余票数小于订票数,则输出提示信息“余票数不足,订票失败!”。3. 退票功能。乘客输入车次和身份证号码,在该车次对应的链表中查找该乘客,若找到,询问乘客退票数量,若退票数小订票数
2、,则只需修改结点的订票数;若退票数等于订票数,则将该乘客对应的结点删除,然后修改该车次的余票数;若没找到,则应提示“未找到相应信息”,要求乘客重新输入车次和身份证号码,再进行查找,如果仍未找到,则输出提示信息“输入信息错误,退票失败!”。4. 其他查询功能。(1) 输入车次,输出该车次的全部订票信息。(2) 输入车次,输出该车次的订票数和余票数。(3) 输入终点站名称,输出相关火车线路的信息。(4) 输入日期(年.月.日),输出发车时间为该天的火车线路的信息。(5) 输出余票数为0的火车线路的信息。2.系统总体设计2.1 系统功能模块图火车线路查询订票退票火车订票管理系统管理员入口乘客入口输入
3、系统信息其他查询查询某车次的全部订票信息查询某车次的订票数和余票数查询终点站为某地的火车线路信息查询发车时间为某天的火车线路信息查询票数为零的火车线路信息2.2 数据结构设计假设有5条火车线路(起点均为济南),每条线路所涉及的信息有:终点站、车次、发车时间(年.月.日.时.分)、票价、余票数(假设火车总票数为300)。乘客订票信息包括:乘客姓名、乘客身份证号码、订票数,总票价。 本系统要求用结构体数组和链表实现,将火车线路信息存放在结构体数组中,每条线路对应一个链表,乘客订票就是在链表中插入结点,乘客退票就是在链表中删除结点。链表的结点类型和结构体类型定义如下:typedef struct n
4、odechar name10; /乘客姓名char IDcard20; /乘客身份证号码int TicketNum; /订票数 float FareSum; /总票价struct node *next; /指针成员SN;typedef struct Dtime short year; short month; short day; short hour; short minute;SD;typedef struct trainchar terminal10; /终点站char sequence10; /车次struct Dtime StartTime; /发车时间float fare; /票价
5、int SpareTicketNum; /余票数struct node *head; /指针成员,指向该线路第一个订票乘客ST;系统整体结构见图9.3所示全局变量如下:#define N1 5 /火车线路数ST bN1; /火车信息结构体数组#define LEN1 sizeof(ST)/火车信息结构体数据块大小#define LEN2 sizeof(SN)/乘客信息结构体数据块大小3系统详细设计3.1 函数说明#include#include#include#define N1 5 /*火车线路数/*结构体类型的定义typedef struct node char name20; char
6、IDcard20; int TicketNum; float FareSum; struct node *next;SN;typedef struct Dtime short year; short month; short day; short hour; short minute;SD;typedef struct train char terminal20; char sequence20; struct Dtime StartTime; float fare; int SpareTicketNum; struct node *head;ST;ST bN1;#define LEN1 si
7、zeof(ST)#define LEN2 sizeof(SN)/*函数声明int Menu1(void); /*火车订票管理系统界面int Menu2(void); /*其他查询功能界面int Menu3(void); /*第一界面void creat1(void); /*管理员录入信息SN* creat2(float k); /*录入乘客信息void find0(void); /*查询void dingpiao(void); /*订票void tuipiao(void); /*退票void find1(void); /*查找功能1void find2(void); /*查找功能2void f
8、ind3(void); /*查找功能3void find4(void); /*查找功能4void shuchu(void); /*输出0票数线路功能void LIST(SN *head); /*输出链表void READ(void); /*将数据读出生成文件void WRITE(void); /*将链表写入文件/*主函数int main() int a,b,c; char m20; b=Menu3(); switch(b) case 0:printf(nt谢谢使用,再见!n);exit(0); case 1: printf(n请输入密码:); scanf(%s,m); if(strcmp(m,
9、666)=0) creat1(); else printf(n密码输入错误!nn); break; case 2: while(1) c=Menu1(); switch(c) case 1:find0();break; case 2:dingpiao();break; case 3:tuipiao();break; case 4:a=Menu2(); switch(a) case 1:find1();break; case 2:find2();break; case 3:find3();break; case 4:find4();break; case 5:shuchu();break; ca
10、se 6:break; case 0:printf(nt谢谢使用,再见!n);exit(0); default:printf(nt您的按键有误,请重新选择!n); break; case 0:printf(nt谢谢使用,再见!n);exit(0); default:printf(nt您的按键有误,请重新选择!n);/*各函数定义int Menu1(void) int sel; printf(n); printf(t-n); printf(t* *n); printf(t* 欢迎进入火车订票管理系统 *n); printf(t* *n); printf(t-n); printf(n); prin
11、tf(t请选择您要使用的功能:nn); printf(t 1.火车路线查询n); printf(t 2.订票n); printf(t 3.退票n); printf(t 4.其他查询n); printf(t 0.退出系统nn); printf(t 请选择按键04n); scanf(%d,&sel); return(sel);int Menu2(void) int sel; printf(n); printf(t-n); printf(t* *n); printf(t* 欢迎进入火车订票管理系统 *n); printf(t* *n); printf(t-n); printf(n); printf(
12、t请选择您要使用的功能:nn); printf(t 1.输入车次,查询该车次的全部订票信息n); printf(t 2.输入车次,查询该车次的订票数和余票数n); printf(t 3.输入终点站名称,查询相关火车线路的信息n); printf(t 4.输入日期(年月日),查询发车时间为该天的火车线路的信息n); printf(t 5.查询余票数为0的火车线路信息n); printf(t 6.返回上一界面n); printf(t 0.退出系统nn); printf(t 请选择按键06n); scanf(%d,&sel); return(sel);int Menu3(void) int sel;
13、 printf(n); printf(t-n); printf(t* *n); printf(t* 欢迎进入火车订票管理系统 *n); printf(t* *n); printf(t-n); printf(n); printf(t 1.管理员入口n); printf(t 2.乘客入口n); printf(t 0.退出系统nn); printf(t 请选择按键02n); scanf(%d,&sel); return(sel);void creat1() SN *p1; int i,j; for(i=0;iN1;i+) printf(nn); printf(请输入火车终点站:); scanf(%s
14、,bi.terminal); printf(请输入火车车次:); scanf(%s,bi.sequence); printf(请输入火车发车时间(年_月_日_时_分_):); scanf(%hd%hd%hd%hd%hd,&bi.StartTime.year,&bi.StartTime.month, &bi.StartTime.day,&bi.StartTime.hour,&bi.StartTime.minute); printf(请输入火车票价:); scanf(%f,&bi.fare); printf(请输入火车余票数:); scanf(%d,&bi.SpareTicketNum); bi.
15、head=creat2(bi.fare); WRITE();SN *creat2(float k) SN *p1,*p2,*head; head=NULL; int n=0,i,m; printf(请输入您要录入的乘客人数:); scanf(%d,&m); for(i=0;iname); printf(请输入乘客身份证号码:); scanf(%s,p1-IDcard); printf(请输入乘客订票数:); scanf(%d,&p1-TicketNum); p1-FareSum=p1-TicketNum*k; head=p1; else p1=(SN*)malloc(LEN2); if(p1=
16、NULL) printf(n No enough memory!n); exit(0); printf(请输入乘客姓名:); scanf(%s,p1-name); printf(请输入乘客身份证号码:); scanf(%s,p1-IDcard); printf(请输入乘客订票数:); scanf(%d,&p1-TicketNum); p1-FareSum=p1-TicketNum*k; p2-next=p1; p2=p1; p2-next=NULL; printf(n输入成功!nn); return(head);void find0(void) int x=0; SN *p1,*p2; int
17、 i=0,n=0,m=0,j; char ch20; FILE *fp; READ(); while(!x) printf(n请输入您要查找的火车终点站或者车次:); scanf(%s,ch); for(i=0;iN1;i+) if(strcmp(ch,bi.terminal)=0|strcmp(bi.sequence,ch)=0) printf(终点站:%s 车次:%s 发车时间:%hd年%hd月%hd日%hd时%hd分 火车票价:%.2f 火车余票数:%dnn, bi.terminal,bi.sequence,bi.StartTime.year,bi.StartTime.month, bi
18、.StartTime.day,bi.StartTime.hour,bi.StartTime.minute, bi.fare,bi.SpareTicketNum);n+; if(n=0)printf(n对不起,您查找的火车信息不存在!nn); printf(n继续查找请选0,退出查询请选1nn); printf(请选择:); scanf(%d,&x);void dingpiao(void) SN *p1,*p2,*p0; char ch20; int s,i,n=0; FILE *fp; READ( ); printf(n请输入您要订购的火车车次:); scanf(%s,ch); printf(
19、请输入您要订购的车票数:); scanf(%d,&s); for(i=0;ibi.SpareTicketNum)printf(n余票数不足,订票失败!nn);break; else p0=(SN*)malloc(LEN2); if(p0=NULL) printf(n No enough memory!n); exit(0); printf(n请输入乘客姓名:); scanf(%s,p0-name); printf(请输入乘客身份证号码:); scanf(%s,p0-IDcard); p0-TicketNum=s; p0-FareSum=p0-TicketNum*bi.fare; p0-next
20、=bi.head; bi.head=p0; bi.SpareTicketNum=bi.SpareTicketNum-p0-TicketNum; printf(n订票成功!nn); if(n=0) printf(n对不起,您的输入有误!nn); WRITE();void tuipiao(void) SN *p1,*p2,*p0; char ch20,sh20; int t,s=0,i,j,n=0; READ(); for(j=0;j2;j+) printf(n请输入您要退票的车次:); scanf(%s,ch); printf(请输入身份证号码:); scanf(%s,sh); for(i=0;
21、iIDcard)=0) printf(请输入您要退票的数量:); scanf(%d,&t); if(tTicketNum) p0-TicketNum=p0-TicketNum-t; bi.SpareTicketNum=bi.SpareTicketNum+t; printf(n退票成功!nn); goto end; else if(t=(p0-TicketNum) bi.SpareTicketNum=bi.SpareTicketNum+p0-TicketNum; if(n=1) bi.head=p0-next; else p1-next=p0-next; printf(n退票成功!nn); go
22、to end; else printf(n输入退票数有误!nn);goto end; p1=p0;p0=p0-next; if(j=1) printf(n未找到相应信息,请重新查找nn); if(s=0) printf(n输入信息错误,退票失败!nn); end: WRITE();void find1(void) char ch20; int i,n; READ(); printf(n请输入您要查询订票信息的车次:); scanf(%s,ch); for(i=0;iN1;i+) if(strcmp(ch,bi.sequence)=0) LIST(bi.head); if(n=0) printf
23、(n您查找的信息不存在,请重新查找nn); printf(n谢谢您的使用nn);void find2(void) char ch20; SN *p1; int i,n=0,sum=0; READ(); printf(n请输入您要查询订票信息的车次:); scanf(%s,ch); for(i=0;iTicketNum;p1=p1-next; printf(n该车次的订票数为:%d 该车次的余票数为:%dnn,sum,bi.SpareTicketNum); n+; if(n=0) printf(n未找到相应信息!nn);void find3(void) char ch20; int i,n=0;
24、 READ(); printf(n请输入您要查询订票信息的终点站:); scanf(%s,ch); printf(n); for(i=0;iN1;i+) if(strcmp(ch,bi.terminal)=0) printf(终点站:%s 车次:%s 发车时间:%hd年%hd月%hd日%hd时%hd分 火车票价:%.2f 火车余票数:%dnn, bi.terminal,bi.sequence,bi.StartTime.year,bi.StartTime.month, bi.StartTime.day,bi.StartTime.hour,bi.StartTime.minute, bi.fare,
25、bi.SpareTicketNum);n+; if(n=0)printf(n您查找的信息不存在,请重新查找nn);void find4(void) char ch20; short a,d,c; int i,n=0; READ(); printf(n请输入您要查询的日期:); scanf(%hd%hd%hd,&a,&d,&c); printf(n); for(i=0;iN1;i+) if(a=bi.StartTime.year) if(d=bi.StartTime.month) if(c=bi.StartTime.day) printf(终点站:%s 车次:%s 发车时间:%hd年%hd月%h
26、d日%hd时%hd分 火车票价:%.2f 火车余票数:%dnn, bi.terminal,bi.sequence,bi.StartTime.year,bi.StartTime.month, bi.StartTime.day,bi.StartTime.hour,bi.StartTime.minute, bi.fare,bi.SpareTicketNum); n+; if(n=0) printf(n未找到相应信息!nn);void shuchu(void) int i,n=0; READ(); for(i=0;inext; fclose(fp);/*第2个文件* if(fp=fopen(,wb+)=NULL) printf(Can not open file!n) ; exit(0) ; p1=b1.head; while(p1!=NULL) fwrite(p1,LEN2,1,fp); p1=p1-next; fclose(fp);/*第3个文件* if(fp=fopen(,wb+)=N