logo资料库

软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析+可行性分析).doc

第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
资料共27页,剩余部分请下载后查看
软件课程设计--C 语言设计火车票订票系统之源代码(模拟数据库功 能)(需求分析+可行性分析) 设计题目:火车订票系统 小组成员: 指导教师: 完成时间: 一.需求设计: 1.每条线路所涉及的信息有:起点、终点、站名、车次、、票价、时间、座位号。 2.作为示意系统,全部数据可以只放在内存中。 3.系统能实现的功能和操作如下: ①.查询路线:根据旅客提出的终点站名输入下列信息:车次、车站名。 ②.承办订票业务:根据客户提出的要求查询该车次票额的情况,若尚有余票,则为客户办理订 票手续,输出座位号;若已满员或余票额少于订票额,则需重新查询客户要求,若需要可登记排 队候补。 ③.承办退票业务:根据客户提供的情况(车次、时间、座位号)为客户办理退票手续,然后查 询该车次是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办 理订票手续,否则依次询问其他排队候补的客户。 ④登记旅客情况:包括旅客姓名,性别,年龄,家庭住址,联系方式等。 ⑤统计功能:将每次车的订票,退票结果统计出来。 ⑥管理功能:列车管理员可以通过调用函数来查看车票极其用户情况. ⑦.查询功能:用户可以查询自己需要的车辆信息. 二.总体设计 1.程序流程图:
按 1 键 按 2 键 按 3 键 按 4 键 进入 in 函数 进入 book 函数 进入 inquire 函数 进入 cancel 函数 按 5 键 进入 you 函数 2.总体设计说明: ①.数据结构设计: 程序=数据结构+算法,一个好的程序必定有一个好的数据结构.本设计主要考虑车票信息和用户信 息的数据结构. 车票信息采用半十字链表.横向链表中的每一个结点包含以下内容:车次,起始站,发车时间,指向下 一个结点的指针,指向中途站的指针.纵向链表中每一个结点包含以下内容:从始发站开始的依次 到站,票价,到达时间,是否已被购买标识,才用 mark 标识,当 mark 为 1 时车票已售出,当 mark 为 0 时车票还未售出.以及指向下一个结点的指针.纵向链表采用循环链表,尾指针指向首指针. 未购票用户信息使用队列来保存,因为考虑到用户会预订票,所以把用户以来订票的时间早晚排 在队中.先来先买,后来后买.队列中的每个元素包含以下内容:用户姓名,身份证号码,想要购票的 车次,起始站,要到的站,时间. 已经购票用户信息使用一个单链表来保存,链表中的没个结点包含以下内容:用户姓名,身份证号 码,已购车票的车次,出发时间,到达时间. 车票信息链表示意图: 车次 起始站 发车时间 downn next
下一站名 到站时间 票价 mark next 座位号 未购票用户信息队列: 用户姓名 购票的车次 起始站 要到的站 达到时间 用户姓名 购票的车次 起始站 要到的站 达到时间 注:座位号包含在车次号中 已购票用户信息链表示意图: 用户姓名 身份证号码 已购车票的车次号 出发时间 到达时间 注:座位号包含在车次号中
②算法的设计: 主函数: 利用 case 语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函 数,实现相应的功能。在主函数开始处做下 First 标识,以便在其他函数中使用 goto 语句返回 主函数的用户界面。 In()函数: In()函数负责输入各种信息,链表中车票信息的初始值. Book()函数: Book()函数负责订票功能.主要是遍历整个链表,查找到需要订票的结点后修改其 mark 值. Inquire()函数: Inquire()函数主要负责查询功能.主要是遍历整个链表查找到需要的结点,然后输出. Cancel()函数: Cancel()函数主要负责退票功能.主要是遍历整个链表查找到需要的结点,然后修改 mark 的值. You()函数: You()函数主要负责输入用户信息,主要是创建一个单链表,将用户信息放入.并提供管 理人员的查询功能. Find()函数: Find()函数主要负责查询用户信息,遍历整个单链表后,输出需要的信息. Total()函数: Total()函数主要负责统计整个订票系统的情况. 三.详细设计:
1. 主函数: ①程序代码: Main() { int *t; int c; First: printf(“welcome to our ticket system!\n”); printf(“1.intput the data.\n”); /*按 1 键输入数据*/ printf(“2.book the ticket.\n”); /*按 2 键订车票*/ printf(“3.inquire the ticket.\n”); /*按 3 键查询车票*/ printf(“4.cancel the ticket.\n”); /*按 4 键退车票*/ printf(“5.input your own data.\n”); /*按 5 键输入个人信息*/ scanf(“%d”,&c); switch(c) {case ‘1’: t=in(); break; case ‘2’: book(); break; case ‘3’: inquire(); break; case ‘4’: cancel(); break; case ‘5’: you() ; break; default : printf(“you enter an error number\n”);}} ②功能说明: 通过 printf 语句,输出提示用户选择的信息.用户看到后,按下自己需要功能的代号.然后程序进入 实现该功能函数完成用户所需要的功能. 2. In()函数: ①程序流程图: 建立横向链表头结点 输入 m,n 的值 For 循环,m 是否为 0 否
建立结点 向结点输入数据 For 循环,n 是否为 0 否 建立纵向结点 向结点输入数据 是 返回头指针 Goto 到用户界面 ②程序代码: struct ticket *in() { /*一个返回指针形的函数*/ struct ticket *head; /*头结点*/ struct ticket *p1,*p2; struct station *s1,*s2; int m,n; int i; p1=p2=(struct ticket *)malloc(len); /*建立横向链表的头结点*/ scanf("%d",&m); /*输入一共所需的车票信息总数*/ scanf(“%d”,&n); /*输入从始发站到终点站共有几站*/ head=null; for(i=0;i<=m;i++) { p2->next=p1; p2=p1; p1=(struct ticket )*malloc(len); s1=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/
head1=s1=s2; p1->down=s1=s2; /*指向纵向链表的头结点*/ scanf("%d","%d","%d",&p1->num,&p1->num2, &p1->time); /*输入横向链表的数据*/ for(i=0;i<=n,i++) { s2->next=s2; s2=s1; s1=(struct ticket )*malloc(len); /*建立纵向链表*/ scanf(“%s”,“%d”,“%d”,“%d”,“%d”,s1->name,&s1->time,&s1->money,&s1->seat,&s1->mark); } /*输入纵向链表的数据*/ s1->next=head1; /*纵向链表为循环链表*/ } p2->next=null; return(head); /*返回头指针*/ goto first; /*返回头指针*/ } ③功能说明: 通过用户输入的数值,建立所需的结点数量.再输入每个结点的具体数据.使横向链表的尾指针指 向空,纵向链表的的尾指针指向头指针.最后返回头指针,再回到用户界面. 3.Book()函数: ①程序流程图: 输入需要的车次号 输入需要到达的车站名 While 循环是否需要的车次 是 横向结点值给 o While 循环是否是需要的车站名 是 使 mark 的值为 1
纵向结点值给 s 纵向链表移针 横向链表移针 当横向链表下一个指针为空时 输出 s 点的数据 输出 o 点的数据 Mark 是否为 1 错误 否 是 ②程序代码: void book() { struct ticket *p; struct station *q; int t; int *o,*s; printf(“please enter the number:”); scanf(“%d”,&f); /*输入需要的车次*/ printf(“please enter the station:”); scanf(“%d”,&h); /*输入需要到达的车站名*/ p=t; /*初始化 p 的值*/ while(p=!null) { if(p->number==t) { q=p->down; o=p; /*把符合条件的横向链表结点的数据给 o*/
分享到:
收藏