车票管理系统C语言课程设计报告.doc_第1页
车票管理系统C语言课程设计报告.doc_第2页
车票管理系统C语言课程设计报告.doc_第3页
车票管理系统C语言课程设计报告.doc_第4页
车票管理系统C语言课程设计报告.doc_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

车票管理系统hubei university of automotive technologyc语言程序设计课程设计报告课设题目: 车票管理系统 专 业: 自动化(汽车工业电气自动化) 班 级: t1123-6 姓 名: 张科 成 绩: 完成日期: 2012年6月18日2012年6月22日 指导教师: 胡宁亚 苗暹 目 录1.课程设计目的22.需求分析22.1要求22.2任务描述22.3运行环境32.4开发工具33.总体设计33.1系统流设计33.2系统模块设计44.详细设计54.1数据结构设计54.2模块接口设计64.3 以下是几个主要模块的流程图:75.运行结果105.1主菜单界面:105.2信息录入界面:105.3信息浏览界面:115.4 信息查询界面:115.5信息修改界面:126.程序调试与测试126.1程序调试126.2程序测试127.问题与不足128.建议129.编程体会1210.程序源代码:1211.参考文献1312.用户使用手册131.课程设计目的1) 通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。2) 通过课程设计,进一步掌握c语言中重要的数据结构。掌握并熟练运用指针、链表、结构体、文件等数据结构。3) 通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。4) 通过课程设计,培养c语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。5) 通过课程设计,加强了自己的程序分析能力。2.需求分析2.1要求1) 遵循软件开发过程的基本规范;能灵活应用,初步具备运用c程序解决实际问题的能力。2) 运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试c程序等过程。3) 学会利用数组、结构体、链表进行相关信息表示。4) 功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5) 各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。6) 所设计的c程序较好的可读性和可靠性;程序书写风格规范,注释清晰。7) 界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。8) 程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。9) 学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。10) 掌握编写、调试和测试c语言程序的基本技巧,充分理解结构化程序设计的基本方法。11) c语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄袭现象。2.2任务描述车票管理系统题目描述一车站每天有n个发车班次,每个班次都有一班次号(1、2、3n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 票价1 8:00 十堰 丹江 3 45 30 362 6:30 十堰 郧县 1 40 40 483 7:00 十堰 郧西 4 40 20 474 10:00 十堰 竹山 3 40 2 27 试设计车票管理系统,使之能提供以下功能:(1) 录入班次信息(信息用文件保存),可不定时地增加班次数据(2) 浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。(3) 查询路线:可按班次号查询 ,可按终点站查询(4) 售票和退票功能a:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数;b:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数;(5) 所有数据符合实际应用要求题目要求(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。(2) 班次信息应该包括:班次、发车时间、起点站、终点站、行车时间、额定载量、已定票人数等。(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。(4) 每个功能操作中,不应有原则性的错误出现;(5) 对输入值用测试用例测试,不应有错误出现;(6) 界面应友好,操作应流畅。输入要求应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。输出要求(1) 应用程序运行后,要在屏幕上显示一个菜单。(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。提示设计一个结构体类型和一维数组类型,用来存放班次信息。扩展功能将所有班次信息存储在一个文件中,并实现文件读写的操作。2.3运行环境1) windowsxp/7系统2) vc+6.0编译环境2.4开发工具c语言3.总体设计3.1系统流设计本系统的功能模块如图1所示,主要有以下模块按车次查询按终点站查询增加班次信息浏览班次信息题 目 信 息保 存退出系统录入班次信息程序欢迎界面主菜单界面售票退票查询班次信息返回主菜单3.2.系统模块设计1) 课程名称界面:主函数int main(),实现课程设计名称以欢迎界面。2) 主菜单界面:构造函数void mainmenu(),实现系统主菜单的显示。3) 系统时间显示:构造系统时间函数int system_time()。实现系统时间的显示以及和车开的时间比较式否以开车。4) 主菜单的选择:构造主菜单选择函数 void chose(),实现主菜单的选择。5) 班次信息的读入:构造主菜单读入函数void load(void),实现文件信息的读入。6) 增加班次函数:构造增加班次函数void add(),实现班次的增加。7) 班次信息的浏览:构造主菜单浏览函数 void show(),实现车票信息浏览界面的显示。8) 班次的查询:构造主菜单查询函数void searsh(),实现车次的查询界面的显示,并通过对班次查询函数void searsh1(),终点站浏览查询函数void searsh2()的调用,实现相应的查询。9) 按班次查询:构造按车次查询函数void searsh1(),实现按车次的查询界面。10) 按终点站查询:构造按终点站查询函数void searsh2(),实现按终点站的查询界面。11) 售票:构造主菜单售票函数void buy_system(),实现买票的界面。12) 退票:构造主菜单退票函数void back_ticket(),实现退票的界面13) 时间比较:构造时间比较函数int canpan(),实现时间比较功能,判断车是否开出。14) 储存当前班次信息:构造储存函数void save(),实现自动更新班次信息功能。4.详细设计4.1数据结构设计根据系统要求,系统中需要保存的数据信息,其结构如下:数据项名称数据项系统表示数据类型数据长度备注车次numberint2发车时间小时hourint2发车时间分钟minuteint2起始站点origin_station20char20终点站last_station20char20持续时间last_timefloat4车次最大人数max_numberint22已售车票sold_ticketint2车票价格piaojiaint2为了能实现程序的操作性和修改性,采用链表的结构保存车次信息,在车次的基本信息时,创建一个车票的节点,将其插入到链表中,示意图如下。 车次信息1车次信息2通讯录信息1221车次信息3车次信息4为此,先声明一个类型为struct ticket的结构体,其成员为车次的基本信息。然后通过对指针、链表、文件等数据结构的操作,实现对车次基本信息的录入,浏览,存盘,等一系列操作。其中,结构体定义如下:struct ticket /定义记录车票信息的结构体 int number; /定义车次 int hour; /记录发车时间包含小时 int minute; /分钟 char origin_station20; /起始站名称数组char last_station20; /终点站名称数组float last_time; /持续时间int max_number; /车次最大运载量int sold_ticket; /已售车票 int piaojia ; /车票的价格struct ticket *next; 4.2模块接口设计1) 所有函数模块声明如下:/*函数声明*/ int system_time(); /系统时间函数void mainmenu(); /主菜单函数void chose(); /主菜单选择函数void load(void); /主菜单读入函数void add(); /增加班次函数void show(); /主菜单浏览函数void searsh(); /主菜单查询函数void searsh1(); /按车次查询函数void searsh2(); /查询函数void buy_system(); /主菜单售票函数void back_ticket(); /主菜单退票函数int canpan(); /时间比较函数void save(); /储存函数void timu(); /题目函数2) 并定义九个全局变量:int s;int flag = 1; int syshour; int sysminute; char filename50;struct ticket *head=null,*p1,*p2,*p33) 主要模块的实现系统以主函数int main()为入,进入系统欢迎界面。然后调用void mainmenu()函数,进入主菜单界面。系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。:1如果用户选择选择1,则调用录入班次函数void load(void)录入班次信息。2如果用户选择选择2,则调用增加班次函数void add()增加班次信息。3如果用户选择选择3,则调用浏览班次函数void show()浏览班次信息。4如果用户选择4,则条用查询函数void searsh()进入查询界面菜单。系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。:1如果用户选择1,则调用按班次查询函数void searsh1()进行班次查询。 2如果用户选择2,则调用按终点站查询函数void searsh2()进行班次查询。3如果用户选择3,则返回主菜单界面。5如果用户选择5,则调用售票void buy_system()进行买票功能。6如果用户选择6,则调用退票void back_ticket()函数进行退票功能。7如果用户选择7,则调用题目void timu()函数显示题目信息。8如果用户选择8,则调用保存函数void save()函数保存对当前班次信息到文件中。7如果用户选择0,则返回主菜单。4.3 以下是几个主要模块的流程图:1) 主菜单函数:否调用对应选项函数进入下一级菜单退出系统是打印主菜单接收用户选项是否合法是否为0否是图1 主函数流程图2) 查询班次函数:打印查询子菜单接收用户选项是否合法是否为0否是是否是否为1按班次查询按终点站查询是否为2回主菜单图2查询班次流程图3) 退票函数:需要退的车票否是否存在是确认退订 否是回主菜单退订失败退订成功图4 信息修改流程图 图3订票流程图5.运行结果5.1欢迎系统界面图45.2主菜单界面图55.3浏览班次界面图65.4查询菜单界面6.程序调试与测试6.1程序调试1欢迎系统界面图1主菜单界面按任意键,进入主菜单界面。2主菜单界面:图2 信息录入界面等待用户选择,进入相应的功能界面。3录入班次界面: 图3 录入班次信息成功图4录入班次信息失败 4增加班次信息图5增加班次信息成功5 浏览班次界面图6显示当前所有班次信息5查询班次界面图7 等待用户选择,进入相应的查询方案。图8按班次查询结果图9 按终点站查询结果6售票界面图10车已开出。无法售票图11票以卖完,无法买票图12买票成功图13更新当前剩余车票7退票界面图14退票成功图15退票失败图16退票成功后更新当前剩余票数6.2程序测试(1) 各模块测试用例数据的确定班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 票价1 8:00 十堰 丹江 3.0 45 30 452 6:30 十堰 郧县 1.0 40 40 563 7:00 十堰 郧西 4.0 40 20 674 23:00 十堰 竹山 3.0 40 40 465 8:00 十堰 孝感 3.0 45 30 456 6:30 十堰 襄樊 1.0 40 40 567 7:00 十堰 鄂州 4.0 40 20 678 23:0 十堰 汉川 3.0 40 40 469 23:30 丹江 仙桃 5.0 45 16 42测试结果(2) 测试中出现的问题的原因和分析由于给定的数据有特定的格式。测试数据只能是按照程序编的格式写入,否者就会读入错误。无法正常显示,不能随便读入一个测试文件。程序的读入有点局限性。7.问题与不足(1) 总体上这个程序还是很严密,一些的小bug也防止,不会出现程序突然死机的情况。但是测试文件具有局限性,只能用给定的测试文件测试,不能随便自己编一个文件测试,否者就会显示错误,要按照程序的格式编写文件,才能正确读入,其他情况基本正常,总体上这个程序比较完美。8.建议就我个人而言,我认为本次课程设计的题目选择还是比较公平的,但是时间安排还是有点欠缺的,到学期最后一些考试集中到一起了,时间比较少,天气也比较热,课程设计应该提前很早就开始准备的。让学生有个心理准备和这个意识,让大家对课程设计更加重视,这个辅导由于人数太多,也不能全部都辅导到,只能大家有选择性的问一些问题,老师只能简单为你解答,主要是还是要靠自己的。老师是只是个辅导作用。9.编程体会本次c语言训练,让我们独立完成一个小系统,我从头到尾努力独立完成,一方面对c语言有了更好的认识,对c语言语法上面的知识有了一个应用性的复习,同时对文件和链表操作有了更好的学习,另一方面我对编程的一些良好习惯也有了认识,编程上的细节处理也有了了解,总之这次训练让我学到很多,这次课程设计让我学到很多知识,让我对c语言又有了个全新的认识,这方面的知识有增加了不少,现在我的个人c语言水平有很大的提高,我觉得任何成果都是通过自己的努力得来的,对自己也是一个考验和锻炼。10.程序源代码:#include #include #include #include #include #include /*链表操作所用结构体指针*/struct ticket *head=null,*p1,*p2,*p3; /*定义结构体指针head 为头指针p1 为输入数据缓存空间指针p2 为尾指针*/struct ticket /定义记录车票信息的结构体 int number; /定义车次 int hour; /记录发车时间包含小时 int minute; /分钟 char origin_station20; /起始站名称数组char last_station20; /终点站名称数组float last_time; /持续时间int max_number; /车次最大运载量int sold_ticket; /已售车票 int piaojia ; /车票的价格struct ticket *next;/*函数声明*/ int system_time(); /系统时间函数void mainmenu(); /主菜单函数void chose(); /主菜单选择函数void load(void); /主菜单读入函数void add(); /增加班次函数void show(); /主菜单浏览函数void searsh(); /主菜单查询函数void searsh1(); /按车次查询函数void searsh2(); /查询函数void buy_system(); /主菜单售票函数void back_ticket(); /主菜单退票函数int canpan(); /时间比较函数void save(); /储存函数void timu(); /题目函数/*定义全局变量*/int s;int flag = 1; int syshour; /记录系统时间小时 int sysminute; /记录系统时间分钟 char filename50; /文件名数组 /*主函数*/ int main() printf(tttt*欢迎使用车票管理系统*tttn); system(pause); while(1) mainmenu(); chose(); return 0;/*主菜单*/void mainmenu() system(cls); printf( 当前时间:); system_time(); printf(t*主菜单*n); printf(t* 1.录入班次信息 *n); printf(t* 2.增加班次信息 *n); printf(t* 3.浏览班次信息 *n); printf(t* 4.查询班次信息 *n); printf(t* 5.售票 *n); printf(t* 6.退票 *n); printf(t* 7.题目信息 *n); printf(t* 8.保存 *n); printf(t* 0.退出系统 *n); printf(t*n);/*系统时间函数*/int system_time() systemtime sys; getlocaltime( &sys ); /调用系统时间 printf( %4d /%02d/%02d %02d:%02d:%02d 星期%1dn, sys.wyear, sys.wmonth, sys.wday, sys.whour, sys.wminute, sys.wsecond, sys.wdayofweek); syshour=sys.whour; sysminute=sys.wminute; return 0;/*主菜单选择函数*/ void chose() int n; printf( 请输入您想做的操作(0)8: ); doscanf(%d,&n); if(n8)printf(ttt您的输入错误请从新输入(整数08):);rewind(stdin);while(n8);switch(n)case 1:load(); system(cls); /每次进入主菜单清空 mainmenu(); break; case 2:add();break; case 3:show();break; case 4:searsh();break; case 5:buy_system();break; case 6:back_ticket();break; case 7:timu();break; case 8:save();break; case 0:exit(0); /调用系统函数退出程序/*主菜单读入函数*/void load(void) /载入文件 char n; /定义变量记录输入字符 file *fp; biaoji : printf(请输入文件名或者文件路径名:); /标记当前位置 scanf(%s,filename); getchar(); printf(您确定您输入的文件路径是否正确(y/n):); /确定文件输入正确 scanf(%c,&n); if(n=y) if(fp=fopen(filename,r)=null) /判断文件的存在,是否可读 printf(文件%s不可读,请确认文件%s存在或者文件路径正确.nn,filename,filename); system(pause);/暂停显示文件状态 return; head=p1=(struct ticket *)malloc(sizeof(struct ticket);/*开辟一个新单元*/p1-next =null;while(!feof(fp)fscanf(fp,%03d, &p1-number);fscanf(fp, %d%02d, &p1-hour, &p1-minute);fscanf(fp, %s%s, p1-origin_station,p1-last_station);fscanf(fp, %f%2d%2d%2d, &p1-last_time, &p1-max_number, &p1-sold_ticket,&p1-piaojia);if(p1-numbernext =p2;p3=p1;p1=p2;p1-next =null;free(p2);p3-next=null; fclose(fp); /关闭文件printf(n);printf(文件录入成功ttt); system(pause); else goto biaoji; /当文件名输入错误时,选择n可返回标记处重新输入/增加班次信息void add()int n=0,m,i;p1=head;if(head=null) /空数据库插入在第一个位置getchar();printf(t车次信息数据库为空,只能插入第一个位置,按任意键将继续。:n);getchar();printf(请按班次 发车时间 起点 终点行车时间(小时) 额定载量已订票人数 票价(请输入0)的形式输入1条车次记录(提示班次不与已存在班次相同):n);head=(struct ticket *)malloc(sizeof(struct ticket);/*开辟一个新单元*/head-next=null; doscanf(%d%d%2d%s%s%f%d%d%d,&head-number,&head-hour,&head-minute,head-origin_station,head-last_station,&head-last_time,&head-max_number,&head-sold_ticket,&head-piaojia);if(head-numbernumberhourhour24)|(head-minuteminute60)|(head-max_numbersold_ticketnumbernumberhourhour24)|(head-minuteminute60)|(head-max_numbersold_ticketnumber, head-hour, head-minute, head-origin_station, head-last_station, head-last_time, head-max_number, head-sold_ticket,head-piaojia); printf(ttt1项信息成功输入完毕!n);system(pause);return;/*数据库不为空时,分插入第一个位置,中间位置,最后一个位置三种情况*/don+;p1=p1-next; while(p1!=0);printf(t车次信息数据库中共有%d条记录,请输入插入的位置n(n=1&n=%d):n,n,n+1);doscanf(%d,&m);if(mn+1) printf(ttt输入范围有误,请重新输入希望插入的正确位置(n=1&n=%d):n,n+1); rewind(stdin);while(mn+1);if(m=1) /*插入在数据库的第一个位置*/p1=head;getchar();printf(请按班次 发车时间 起点 终点行车时间(小时) 额定载量 已订票人数 票价(请输入0)的形式输入1条车次记录(提示班次不与已存在班次相同):n);head=(struct ticket *)malloc(sizeof(struct ticket);/*开辟一个新单元*/ doscanf(%d%d%2d%s%s%f%d%d%d,&head-number,&head-hour,&head-minute,head-origin_station,head-last_station,&head-last_time,&head-max_number,&head-sold_ticket,&head-piaojia);if(head-numbernumberhourhour24)|(head-minuteminute60)|(head-max_numbersold_ticketnumbernumberhourhour24)|(head-minuteminute60)|(head-max_numbersold_ticketnumber, head-hour, head-minute, head-origin_station, head-last_station, head-last_time, head-max_number, head-sold_ticket,head-piaojia);head-next =p1;printf(ttt1项信息成功输入完毕!n);system(pause);return;if(m=n+1)/*插入在数据库的最后一个位置*/p1=head;while( p1-next!=null)p1=p1-next;printf(请按班次 发车时间 起点 终点行车时间(小时) 额定载量已订票人数 票价(请输入0)的形式输入1条车次记录(提示班次不与已存在班次相同):n);p2=(struct ticket *)malloc(sizeof(struct ticket);/*开辟一个新单元*/ doscanf(%d%d%2d%s%s%f%d%d%d,&p2-number,&p2-hour,&p2-minute,p2-origin_station,p2-last_station,&p2-last_time,&p2-max_number,&p2-sold_ticket,&p2-piaojia);if(p2-numbernumberhourhour24)|(p2-minuteminute60)|(p2-max_numbersold_ticketnumbernumberhourhour24)|(p2-minuteminute60)|(p2-max_numbersold_ticketnumber, p2-hour, p2-minute, p2-origin_station, p2-last_station, p2-last_time, p2-max_number, p2-sold_ticket,p2-piaojia);p2-next=null;p1-next =p2;printf(tt1项信息成功输入完毕!n);system(pause);return;/*插入在数据库的中间第n个位置*/p1=head;for(i=1;inext;prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论