免费预览已结束,剩余19页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖南文理学院课程设计报告课程名称: 计算机软件技术基础课程设计 系 部: 电气与信息工程学院 专业班级: 通信09103班 学生姓名: 指导教师: 完成时间: 2011.12.27 报告成绩: 评阅意见: 评阅教师 日期 目录摘要3关键词3第一章 需求分析41.1 用户功能需求41.2 数据流图6第二章 概念结构设计72.1 火车基本表72.2 火车时刻表72.3 火车站表52.4 省份表6 第三章 物理结构设计8 第四章 系统程序的设计9 课程设计的总结22 参考文献:23 致 谢:23铁路售票查询系统的设计与实现摘要:它是通过系统的方法、原理来售出火车票。本款系统采用人性化的售票管理模式,能很好的解决了乘客购票难,售票工作人员任务重的问题。本款软件采用身份证作为身份验证的初始凭证,乘客按照系统所显示的操作逐一输入票务信息。系统会通过预先存入的程序导出客户所需信息和客户要求。为了防止非法份子使用假身份证购票,在预命令中就事先输入了相关的信息,此类状况会直接导出无效信息,并显示红色警报信息。关键词: 铁路;售票;查询;系统;身份证abstract:it is through a systematic approach, principle to sell train tickets. this system adopts the humanized management mode, it can be a good solution to the passenger ticket, ticket sales staff arduous tasks of the problem. the software adopts the identity card as the authentication certificate according to the initial, passenger system revealed by operation to enter one by one ticket information. the system will advance through a stored program derived required customer information and customer requirements. in order to prevent unauthorised person using a false identity card purchase, the prefetch commands in advance input the relevant information, this kind of situation will directly export the invalid information, and display the red alert information.keyword:railway; ticketing; query; system; identity card一、 需求分析中国地域广大,火车线路错综复杂。另一方面人们生活质量逐渐提高,旅游业发展迅猛,外出乘车旅游的旅客也越发增多,为了能选择一个最佳路线,我们很有需要建立一个查询火车路线,进而选定火车票的系统。全国有大量的人员通过搭乘火车到达目的地。而与火车的特殊性及可能经过多个城市,每个城市的车站可以出售此火车的车票。而且同一车站可能有多辆车经过。许多希望以最快的方式选择自己想来乘坐的那一趟列车。所以以人工的方式是不可能实现这种功能的。一种可行的方案是基于客户端服务器的体系结构。服务器为数据库系统,存储所有必要的信息。客户端通过连接到服务的应用程序快速、准确地完成相应的工作。列车票务管理系统的实施,将会在一定程度上促进铁路客运生产力和生产关系的变革,增强市场竞争能力,提高铁路部门的工作效率,提升管理水平,减少劳动强度,方便广大旅客购票,有一定的社会和经济效益。1.1 用户功能需求 旅客购票需求 l 按车次查询车票信息:旅客可根据始发站名和终到站名查询到全国任意两站之间的所有车次,并且相应查询出两站的距离公里数、票价、经过的时间和车次类型等各 种信息。l 按车站查询车票信息:用户直接输入起始站点和终点站,选择火车车次和车票种类,系统输出满足条件的详细车票信息在详细调查了用户需求之后,就要开始分析用户需求。在此,我们采用自顶向下的结构化分析方法(sa方法)。首先,定义全局概念结构的框架,如下图所示。 查询系统简单总体框架结构图分解总系统为子系统后 系统数据流图分别简化为如下模型l 查询系统模型:l 分类查询功能:l 子车次查询系统: l 子车站查询系统: 依此类推,将所有子系统全部细化。将所有用户需求分析完毕之后,就要开始构造数据字典了。经过分析之后,我们需要五个不同的基本表和关系表来完成该系统的数据储存。分别是火车基本表、火车时刻表、火车站表、省份表、站点火车表。数据结构定义如下表所示。数据结构名含义说明组成火车基本表定义了各列火车的简单信息火车车次号,火车种类,始发站,终点站,始发时间,到站时间,总路程,总时间火车时刻表定义了所有列车的有关信息火车车次号,火车站id,火车站名,站次,日期,出发时间,到站时间,绝对路程,票种及票价火车站表定义了各列火车及其经过车站信息火车车次号,车站名,火车站id省份表定义了全国省份基本信息省份名,省份id,省份拼音缩写站点火车表定义全国各省份所拥有的车站信息火车站id,火车站名,省份id,火车编号1.2 数据流图使用结构化分析方法,确定系统的数据主要是身份证号、车次、终点站名、发车时间和车票,对数据的操作主要有身份证证件的辨伪、车次修改、终点站修改、发车时间修改、售票及打印,可以确定系统的处理逻辑和流程,得到如下所示的系统数据流图。二、概念结构设计2.1 火车基本表:2.2 火车时刻表:2.3 火车站表:2.4 省份表:三、物理结构设计系统软件结构图:四、系统程序的设计源程序:#include#include#define max 100#define n 50 typedef struct time /时间类型 int x,y,z; /分别对应年,月,日time; typedef struct cnode /票信息类型 int no; /票号 int id; /购票人证件号 time date; /购票日期 struct cnode *next;cnode; typedef struct tnode /车次信息类型 char data; /车次编号 struct tnode *lchild,*rchild; cnode *head;tnode; void create(); /按车次建立二叉排序树void insert(int ); /增加新的车次(二叉排序树的插入)void del(); /取消车次(二叉排序树节点删除)void inorder(tnode *); /中序遍历车次二叉排序树(仅显示车次信息)void inorder_all(tnode *); /中序遍历车次二叉排序树(显示车次及售票信息)void preorder(tnode *); /先序遍历车次二叉排序树(仅显示车次信息)tnode *search(); /按车次编号搜索cnode *insert_c(cnode *); /插入新的售票信息(单张)cnode *insert_c_more(cnode *); /插入新的售票信息(批量)cnode *del_c(cnode *,cnode *); /退票处理(删除售票信息)cnode *search_c(cnode *,int); /按票号查询void search_c_id(cnode *,int); /按购票人证件号搜索(限定某车次)void search_c_id_all(tnode *,int); /按购票人证件号搜索(所有车次)void search_date(cnode *,time); /按购票日期搜索(限定某车次)void search_date_all(tnode *,time); /按购票日期搜索(所有车次)void print_c(cnode *); /输出售票纪录(单张)void print_c_all(cnode *); /输出售票纪录(批量) tnode *root=null; void main() int i,func,no,ok; tnode *t; cnode *c; time d; printf(nnn); for(i=0;i15;i+) printf(=); printf(列车售票信息管理系统); for(i=0;i15;i+) printf(=); printf(n); printf(t1.车次信息管理n); printf(t2.售票记录管理n); printf(t3.售票记录查询n); printf(t4.售票记录一览n); printf(t5.退出系统n); for(i=0;in); for(i=0;in;i+) printf(=); printf(nt1.增加新的车次); printf(nt2.取消车次); printf(nt3.返回上级菜单n); for(i=0;in); for(i=0;in;i+) printf(=); printf(nt1.增加新的售票记录); printf(nt2.退票); printf(nt3.返回上级菜单n); for(i=0;ihead=insert_c_more(t-head); break; case 2: t=search(); printf(需要退票的票号:); scanf(%d,&no); t-head=del_c(t-head,search_c(t-head,no); break; case 3:main();break; default:printf(n错误功能号输入有误!请重新输入!); break; case 3: printf(nn售票记录查询n); for(i=0;in;i+) printf(=); printf(nt1.按票号搜索); printf(nt2.按购票者证件号搜索); printf(nt3.按购票日期搜索); printf(nt4.返回上级菜单n); for(i=0;ihead,no); if(c=null) printf(错误没有该票号的纪录!该票还未售出或为废票!自动返回上级菜单n.); break; case 2: printf(n请输入您所要查询的购票者证件号:); scanf(%d,&no); search_c_id_all(root,no); printf(搜索完毕!自动返回上级菜单n.); break; case 3: do printf(n请输入您所要查询的日期(格式: yy-mm-dd):); scanf(%d-%d-%d,&d.x,&d.y,&d.z); if(d.y0) if(d.y=1|d.y=3|d.y=5|d.y=7|d.y=8|d.y=10|d.y=12) if(d.z0) ok=1; else if(d.z=2) if(d.z0) ok=1; else if(d.z0) ok=1; else ok=0; if(!ok) printf(n错误日期输入有误!请重新输入!); while(!ok); printf(n指定车次吗?(1-是,0-否):); scanf(%d,&ok); if(ok) search_date(search()-head,d); else search_date_all(root,d); break; case 4:main();break; default:printf(n错误功能号输入有误!自动返回上级菜单n.); break; case 4: printf(nn售票记录一览n); for(i=0;in;i+) printf(=); printf(nt1.仅浏览车次); printf(nt2.指定车次已售票记录); printf(nt3.所有车次已售票记录); printf(nt4.测试:先序遍历车次); printf(nt5.返回上级菜单n); for(i=0;ihead); printf(n); break; case 3: printf(n+所有车次已售票记录n); if(root=null) printf(错误无车次纪录!); elseinorder_all(root);printf(n); break; case 4: printf(n+测试:先序遍历车次n); if(root=null) printf(错误无车次纪录!); elsepreorder(root);printf(n); break; case 5:main();break; default:printf(n错误功能号输入有误!自动返回上级菜单n.); break; case 5:exit(0); default:printf(n错误功能号输入有误!请重新输入!); main(); void inorder_all(tnode *ptr)if(ptr!=null) inorder_all(ptr-lchild); printf(%d:n,ptr-data); print_c_all(ptr-head); printf(n); inorder_all(ptr-rchild); void inorder(tnode *ptr)if(ptr!=null) inorder(ptr-lchild); printf(%dt,ptr-data); inorder(ptr-rchild); void preorder(tnode *ptr)if(ptr!=null) printf(%dt ,ptr-data); preorder(ptr-lchild); preorder(ptr-rchild); void print_c(cnode *tkt) if(tkt!=null) printf(t%dt%dt%d-%d-%dn,tkt-no,tkt-id,tkt-date.x,tkt-date.y,tkt-date.z); void print_c_all(cnode *head) int i=0,j=0; if(head=null)printf(n记录为空!n);return; for(i=0;in;i+) printf(=); printf(nnot票号t购票者证件号t购票日期(年-月-日)n); for(i=0;inext; printf(n); for(i=0;in;i+) printf(-); printf(n总计 %d 条记录n,j); for(i=0;in;i+) printf(=); printf(n); void create()int n,i;int kmax;printf(n您所希望增加车次的数量:);scanf(%d,&n);for(i=0;in;i+) printf(新增第%d列车次:,i+1); scanf(%d,&ki);for(i=0;idata=m; root-lchild=root-rchild=null; root-head=null; else p1=root; while(m!=p1-data) if(mdata)&(p1-lchild!=null) p1=p1-lchild; else if(mp1-data)&(p1-rchild!=null) p1=p1-rchild; else if(mdata)&(p1-lchild=null) p2=(tnode *)malloc(sizeof(tnode); p2-data=m; p2-lchild=p2-rchild=null; p2-head=null; p1-lchild=p2; return; else if(mp1-data)&(p1-rchild=null) p2=(tnode *)malloc(sizeof(tnode); p2-data=m; p2-lchild=p2-rchild=null; p2-head=null; p1-rchild=p2; return; printf(n错误未能成功增加车次%d,车次号 %d 已存在!,m,m); tnode *search() int key; tnode *p; p=root; printf(n输入您所要查找的车次编号:); scanf(%d,&key); while(p!=null&p-data!=key) if(keydata)p=p-lchild; else if(keyp-data)p=p-rchild; if(p=null) printf(n该车次不存在!); return(p); void del() int key; tnode *p1,*p2,*p3,*temp; p1=p2=root; p3=temp=null; printf(n请输入您想要取消的车次编号:); scanf(%d,&key); while(p2!=null&p2-data!=key) if(keydata)p1=p2;p2=p2-lchild; else if(keyp2-data)p1=p2;p2=p1-rchild; if(p2=null)printf(n错误该车次不存在!返回上级菜单n.);return; else if(p2-lchild=null&p2-rchild=null) if(p1-lchild=p2) p1-lchild=null; if(p1-rchild=p2) p1-rchild=null; temp=p2; if(root=p2) temp=root;root=null; else if(p2-rchild=null) temp=p2-lchild; p2-data=temp-data; p2-lchild=temp-lchild; p2-rchild=temp-rchild; else if(p2-lchild=null) temp=p2-rchild; p2-data=temp-data; p2-lchild=temp-lchild; p2-rchild=temp-rchild; else p3=p2; temp=p2-lchild; while(temp-rchild!=null)p3=temp;temp=temp-rchild; p2-data=temp-data; if(p3=p2) p3-lchild=temp-lchild; else p3-rchild=temp-lchild; free(temp); printf(车次 %d 已取消!nn,key); cnode *insert_c(cnode *head) cnode *k,*p; k=(cnode *)malloc(sizeof(cnode); do printf(n车票编号:); scanf(%d,&k-no); p=search_c(head,k-no); if(p!=null) printf(n错误该票已被购买!请重新选择!n); while(p!=null); printf(购票者证件号:); scanf(%d,&k-id); printf(购票日期(格式:yy-mm-dd):); scanf(%d-%d-%d,&k-date.x,&k-date.y,&k-date.z); k-next=head; head=k; return(head); cnode *insert_c_more(cnode *head) int n,i; printf(n请输入批量新增售票记录数:); fflush(stdin); scanf(%d,&n); for(i=0;iid!=id)s=temp;temp=temp-next; print_c(temp); if(temp!=null) return(s); else return null; void search_c_id(cnode *head,int id) cnode *s,*head_s; s=head_s=null; if(head=null) printf(无该证件号纪录!n); while(head!=null) if(head-id=id) s=(cnode *)malloc(sizeof(cnode); s-no=head-no;s-id=head-id;s-date=head-date; s-next=head_s;head_s=s; head=head-next; print_c_all(head_s); printf(n); void search_c_id_all(tnode *ptr,int id) if(ptr!=null) search_c_id_all(ptr-lchild,id); printf(n车次:%dn,ptr-data); search_c_id(ptr-head,id); search_c_id_all(ptr-rchild,id); void search_date(cnode *head,time t) cnode *s,*head_s; s=head_s=null;while(head!=null) if(t.x=head-date.x) if(t.y=head-date.y) if(t.z=head-date.z) s=(cnode *)malloc(sizeof(cnode); s-no=head-no;s-id=head-id;s-date=head-date; s-next=head_s;head_s=s; head=head-next; print_c_all(head_s); prin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 锅炉作业证考试理论会不会很难?备考怎么处理容易混淆的压力、水位、温度考点
- 心脏康复科普健康宣教
- 2021年度护理工作计划
- 2026年临床检验专项训练
- 转变教育思想大讨论总结报告(3篇)
- 2026年LNG船运市场发展预测
- 腰痛问题解析
- 2026及未来5年中国城市公路治安卡口视频监测系统数据监测研究报告
- 2026及未来5年中国叶绿素铜钠数据监测研究报告
- 2026事业单位工勤技能-江苏-江苏水工监测工二级(技师)历年参考题库含答案详解3套试卷
- 2026广东佛山市顺德区(家电)知识产权快速维权中心招聘事业编制人员3人笔试题库(培优)附答案详解
- 2026年二级建造师水利水电工程真题及答案(完整版)
- 《医疗器械经营质量管理规范》培训试题及答案
- 成都市新都区2026年社区网格员招录考试真题库及完整答案
- 2025年卫生高级职称面审答辩(儿童保健)副高面审综合能力测试题及答案
- 30HXY110A螺杆冷水机组开机、运行维护手册
- 大学学院智能制造工程专业教学大纲
- 卫生院“服务基层行”支撑材料(3.3.5患者参与医疗安全)
- 铝合金门窗安装施工工艺详解
- 三年级语文 综合性学习:中华传统节日公开课
- 高一语文起始课课件
评论
0/150
提交评论