已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
合肥学院计算机科学与技术系课程设计报告20102011学年第二学期课程 C+课程设计课程设计名称车票管理系统学生姓名常新亚 学号1004011025 专业班级 10级计本一班指导教师 华姗姗、高玲玲2011年6月30车票管理系统设计报告一. 需求分析1. 首先本演示程序要实现录入班次信息的功能,并且要用文件来保存这些信息,还可以不定时的增加班次数据信息。2. 本程序还需要实现一次性输出当前班次信息,供使用者浏览。并且要从实际考虑,若当前系统时间已经超过了某班次的发车时间,则要显示“班次已发出”的提示信息。3. 此程序既为车票管理系统,就要实现查询路线、售票、退票等功能。而且当使用者使用查询路线功能时,要分为两种情况查询:按班次号查询和按终点站查询。若要使用售票功能,则只有在查询出定票人数小于额定载量且当前系统时间小于发车时间时才能售票,并且要自动更新已售票人数。退票时要求输入退票的班次,当班次尚未出发时才能退票,同时也要求自动更新售票人数。4. 本车票管理系统程序已用户和计算机对话的方式执行,采用画面菜单。用户可根据提示实现各项功能。操作后的信息用户可以选择是否保存。信息保存在bus.txt文件。二. 设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。(1)进一步巩固、加深学生所学专业课程C+程序设计语言的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用C+语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握结构化程序设计方法,熟悉面向对象程序设计方法。(6)熟练掌握C+语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序和修改程序。(8)进一步提升学生对编程语言的了解及提高学生对编程的兴趣。三. 算法设计1. 设计思想:程序结构(UML图)如下:Bus_Link- *head : Busticket_Control+ input() + show() + found() + find(*p1:Busticket_Control,num:int,*pn:char)+ sale()+ back()+ save()+ clear()+ begin()+ menu() : charBusticket_Control+ *next : Busticket_Control- bus_order : int- hour_start : int- minute_start : int- place_start10 : char- place_end10 : char- huor_running : float- overload : int- ticketed : int+ Busticket_Control()+ Busticket_Control()+ ptime() : bool+ input() : void+ output() : void+ sale() : void+ back() : void+ input(&is : ifstream) : void+ output(&os : ofstream) : void+ get_bus_order() : int + get_place_end() : string1.*-*head1数据结构:本程序使用C+中的类、类的组合、链表。其中定义的Busticket_Control类存放着车票的信息(私有类型)及对车票信息进行操作的成员函数(公有类型)。Bus_Link类中定义了一个Busticket_Control类的对象指针头用做链表的头。Bus_Link类中还存放着许多成员函数,这些成员函数用来对Busticket_Control类中的成员函数进行调用操作及判断操作。这些类完成了对车票信息及处理的封装。而链表则方便了对很多车票信息的存储及操作。主要算法思想:本程序有:录入班次信息(信息用文件保存),可不定时地增加班次数据浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。查询路线:可按班次号查询 ,可按终点站查询售票和退票功能 A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数。B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。等功能。首先为了实现录入功能必须要有一个对类私有变量进行访问的成员函数,于是定义了Busticket_Control:input(void)这个录入函数,同理需要定义输出车票信息函数、售票函数、退票函数和判断时间函数。为了将已经操作的信息录入文件和从文件中读出车票信息,需要定义录入文件的函数和读取文件函数,同时还定义了返回终点站及班次的函数为下面搜索功能的实现提供方便。以上函数都是直接对一个班次的车票信息进行操作的,为了将很多的车票信息链接起来方便查找及不定时增加班次数据,定义类另一个链表类Bus_Link这个类中定义一个私有的头指针和其他对Busticket_Control中数据进行间接操作的函数(调用Busticket_Control相应的函数),如:录入函数、浏览函数、查找函数、查找判断函数、售票函数、退票函数、保存数据函数、清除函数、初始化函数及菜单函数。然后,在主函数中首先定义一个Bus_Link类的类对象,接着调用初始化函数(begin())读入文件内容并形成链表。下面就可以通过菜单函数及用户输入来实现其他功能。为了实现不定时录入功能需要首先调用Bus_Link类的input函数这个函数首先找到链表尾部在调用Busticket_Control中的input函数来实现录入并存入链表中;同理实现其他功能。浏览班次函数会调用时间判断的函数来判断班次是否发出并打印。查询函数就是在链表中查找想要的内容;售票及退票函数会调用查找函数和时间判断函数来判断是否允许售票和退票。最后设计一个循环来实现返回主菜单功能及退出时确定保存数据到文件中。2. 设计表示:Busticket_Control类中的函数及其介绍: a函数名:Busticket_Control类的构造函数。 函数体:Busticket_Control:Busticket_Control(void) ticketed=0; 函数功能:函数用来实现对新创建的Busticket_Control类类对象中已定票人数进行清零操作。跟一般的构造函数没有什么区别。 b函数名:Busticket_Control类的析构函数。 函数体:Busticket_Control:Busticket_Control() 函数功能:用来完成对象被删除前的一些清理工作。 c函数名:ptime(void) 函数体:bool Busticket_Control:ptime(void) /判断时间函数 struct tm *local; /读入系统当前时间 time_t t; t=time(NULL); local=localtime(&t); if(local-tm_hourhour_start)|(local-tm_hour=hour_start&local-tm_minminute_start) /与系统当前时间较 return 1; else return 0;函数功能:每次调用这个函数时,此函数会首先读入系统当前时间,并把车票信息中的发车时间与系统时间比较,如果发车时间大于等于当前系统时间则返回0;当发车时间小于系统当前时间时候返回1;实现发车时间与系统时间的比较。把这个功能单独用个函数封装方便与下面多处调用时代码的重复,增强程序简洁性。d函数名:input(void)/录入函数 函数体: void Busticket_Control:input(void) /录入函数 cout*请按提示输入*endl; cout请输入班次bus_order;cout请输入发车时间的小时hour_start; cout请输入发车时间的分钟minute_start; cout请输入起点站place_start; cout请输入终点站place_end; cout请输入行车时间hour_running; cout请输入额定载量overload;cout请输入已定票人数ticketed; 函数功能:此函数用于录入一个班次的车票信息,给出提示帮助用户完成车票信息的输入。 e. 函数名:output(void) /输出函数 函数体: void Busticket_Control:output(void) /输出函数coutsetw(4)bus_ordersetw(4)hour_startsetw(2):setw(4)minute_startsetw(10)place_startsetw(10)place_endsetw(15)overloadsetw(15)ticketed;if(ptime()cout 此班已发出endl;elsecout 此班未发出endl; 函数功能:此函数用于输入一个班次的车票信息,并调用ptime()函数判断班次是否发出,如果发出输出“此班已发出”提示,如果没有发出输出“此班未发出”提示。 f函数名:sale(void)/售票函数 函数体:void Busticket_Control:sale(void) /售票函数if(ticketedoverload)ticketed+;cout成功售出一张车票endl;elsecout车票已售完endl; 函数功能:用于对已定票人数累加操作,判断当已定票人数小于额定载量时才能售票并提示“成功售出一张车票”,否则输出“车票已售完”。 g函数名:back(void) /退票函数 函数体: void Busticket_Control:back(void) /退票函数ticketed-;cout退票成功bus_orderhour_startminute_startplace_startplace_endhour_runningoverloadticketed;is.get(); 函数功能:用于读取存放车票信息的文件中的内容到Busticket_Control类对象中。 i函数名:output(ofstream &os) /写到文件函数 函数体: void Busticket_Control:output(ofstream &os) ossetw(6)bus_ordersetw(15)hour_startsetw(15)minute_startsetw(15)place_startsetw(15)place_endsetw(15)hour_runningsetw(15)overloadsetw(15)ticketednext=NULL;函数功能:用于创建链表的头指针。b. 函数名:Bus_Link类的析构函数函数体: Bus_Link:Bus_Link() /析构函数delete head; 函数功能:用于删除链表。c. 函数名:input()函数体: void Bus_Link:input(void) /录入函数 Busticket_Control *p,*p2; int n=1; p=head; while(p-next) p=p-next; while(n) p2=new Busticket_Control; p2-input(); p-next=p2; p2-next=NULL; p=p-next; cout继续输入请按1,否则请按0退去n; 函数功能:用于加入链表的节点并调用Busticket_Control类中的input函数完成录入车票信息的功能,并给出提示让用户判断是否继续输入车票信息。d. 函数名:show(void) /浏览函数函数体: void Bus_Link:show(void) /浏览函数 coutsetw(4)班次setw(10)发车时间setw(10) 起点站setw(10) 终点站setw(15)额定载量setw(15)已定票人数setw(13)是否发出endl; cout-next) (p-next)-output(); p=p-next; 函数功能:用于按格式输入所有已有的车票信息,通过调用Busticket_Control类中的output()函数实现。e. 函数名:find(Busticket_Control *p1,int num,char *pn)/查询判断函数体: int Bus_Link:find(Busticket_Control *p1,int num,char *pn) Busticket_Control *p; p=head; int m=0; coutsetw(4)班次setw(10)发车时间setw(10) 起点站setw(10) 终点站setw(15)额定载量setw(15)已定票人数setw(13)是否发出endl; cout-next) if(p-next)-get_bus_order()=num|(p-next)-get_place_end()=pn) (*p1)=p; (p-next)-output(); m=1; p=p-next; return m; 函数功能:通过参数我们可以看出,此函数是用于查找车票信息的,可以通过班次查找和终点站查找,但此函数并不是完整的查找函数,而是返回是否找到的函数,并打印查找到的车票信息而且记录找到的车票信息在链表中的位置传给真正的查找函数。f. 函数名:found(void) /查询函数函数体: void Bus_Link:found(void) /查询函数 Busticket_Control *p; int n,num; char name10; cout按班次查找请按1,按终点查找请按2n; if(n=1) cout请输入班次num; if(n=2) cout请输入终点站name; if(!find(&p,num,name) cout没有你要查找的信息endl; return; 函数功能:可以看出此函数是真正的查找函数,提示用户按不同的方式查找(1.按班次查找;2.按终点站查找);并通过调用前面的find()查找判断函数来实现查找和输出。在没有用户输入的车票信息时,输出“没有你要查找的信息”提示。g. 函数名: sale() /售票函数函数体: void Bus_Link:sale(void) /售票函数 Busticket_Control *p; int n,num; cout确定购票?(是请按1,否请按2)n; if(n=1) cout请输入班次num; if(!find(&p,num,) cout没有你要找的班次next; if(p-ptime() cout此班次已发出sale(); 函数功能:用于完成售票功能,按班次售票,先通过调用find()函数查到该班次并记录该班次在链表中的位置,然后判断该班次是否发出,如果发出则提示“此班次已发出”否则调用Busticket_Control中sale()函数完成售票。h. 函数名:back() /退票函数函数体: void Bus_Link:back(void) /退票函数Busticket_Control *p;int n,num;cout确定退票?(1/2)n;if(n=1)cout请输入班次num;if(!find(&p,num,)cout没有该班次next;if(p-ptime()cout班次已发出不能退票back(); 函数功能:用于实现退票功能,首先调用find()函数找到用户要退票的班次,如果没有这打印“没有该班次”,然后判断该班次是否发出,如果发出则打印“班次已发出不能退票”提示。最后调用Busticker_Control类对象中的back函数实现退票。i. 函数名:save() /保存函数函数体:void Bus_Link:save(void) /保存函数 Busticket_Control *p; p=head; ofstream os(bus.txt,ios:out); while(p-next) (p-next)-output(os); p=p-next; cout文件已保存num; is.seekg(t); /移动到原来位置 if(numinput(is); p-next=p1; p1-next=NULL; p=p-next; 函数功能:此函数用于程序的初始化操作,首先建立头节点,然后打开文件(如果没有文件,则创建文件)调用input(is)函数读入文件中的信息,判断如果读到文件末则跳出,否则继续向下读取。读取的内容存入Busticket_Control类对象中并加入链表中。k. 函数名:menu(void) /菜单函数函数体: char Bus_Link:menu(void) /菜单函数 char s; struct tm *local; char s1128; time_t t; t=time(NULL); local=localtime(&t); strftime(s1,128,%Y-%m-%d %H:%M ,local); coutnn 欢迎使用车票管理系统endlendl; cout endl endl 1. 录入车票信息 2. 浏览车票信息 endl 3. 查询车票信息 4. 定购车票信息 endl 5. 退还车票信息 6. 保存车票信息 endl 0. 退出系统 endl endl endl ttts1endlendl; cout请输入操作按钮s; return s; 函数功能:此函数用于图形化打印菜单,并输出当前系统时间用作提示及提示用户输入信息进行操作。l. 函数名:main() /主函数函数体: void main() /主函数 Bus_Link bus; int i=1; char s; bus.begin(); /初始化 while (i=1) system(cls); /清屏 s=bus.menu(); switch(s) case 1: bus.input();break; /录入 case 2: bus.show();break; /浏览 case 3: bus.found();break; /查找 case 4: bus.sale();break; /售票 case 5: bus.back();break; /退票 case 6: bus.save();break; /保存 case 0: i=0;break; /退出 default : cout输入错误endl; if(i=1) int m; coutendlendl; cout是否返回主菜单(1/0)m; if (m=1|m=0) i=m; else i=1; if(i=0) int k; cout是否保存(1/0)k; if(k=1) bus.save(); system(pause);函数功能:主函数中首先定义一个Bus_Link类对象做头指针。然后调用初始化函数读入文件中的车票信息,然后使用一个循环实现菜单函数与其他操作函数联系在一起。用户键入相关的操作按钮就可以进入该操作模式。然后判断是否保存文件,退出系统。 3. 实现注释: 题目中的各项功能均已在该程序中实现,不过该程序还可以添加其他模块完成更多功能,比如记录车票总数,修改车票信息,删除车票信息等功能。4. 算法设计中一些新的想法: 本程序的算法很简单可以应用在其他类似的程序中,并且对该程序中函数稍作修改就可以完成其他更多的功能。本程序在代码的简洁上还可以进行优化,是程序更简洁,可读性更强。还有程序中一个重要不足就是用户必须按照程序提示要求输入不能错误。四. 用户手册1. 用户需要按照系统提示要求输入。2. 用户不得输入非法字符。3. 车票信息中的时间输入格式是02或2型式。4. 车票班次有一定取值范围(-21474836482147483647)。五. 调试与测试本程序在设计过程中遇到了很多问题,其中1. 最大问题就是对链表的创建和查找定位操作,由于对链表的操作不熟练导致消耗大量时间,最终在老师和参考资料的帮助下解决了该问题,把链表的创建和查找定位操作单独写成2个函数这样就不会影响下面其他函数操作了。2. 对系统时间读入和与车票信息中时间的比较。这个问题是老师帮忙解决的使用了time.h库中的相关函数完成。3. 对文件读取和写入操作。这个问题是老师帮忙解决的,使用了fstream.h库中相关函数来实现的。4. 链表指针的移动问题。在设计中链表指针的向下移动是一个很头疼的问题,在自己不断调试和修改下终于纠正了所有指针移动的错误。程序测试数据用了题目中的数据。运行实例截图在附录中;六. 小结在经过本次课程设计后,让我掌握很多c+中的知识,特别是对链表的操作,收获很大,同时也培养了自己独立解决问题的能力。这次课程设计是我进一步巩固、加深了c+程序设计语言的基本理论知识,理论联系实际进一步提高了解决编程问题的能力。还有课程设计也训练了我独立开发应用系统,进行数据处理的综合能力及对编程软件的熟练使用。七. 参考文献1郑莉等编著C+语言程序设计(第三版)北京:清华大学出版社2郑莉等编著C+语言程序设计(第三版)学生用书北京: 清华大学出版社3李春葆等编著C+程序设计学习与上机实验指导 北京:清华大学出版社4范辉等编著Visual C+6.0程序设计简明教程 高等教育出版社5李龙澍C+程序设计实训教程北京:清华大学出版社 6洪国胜等编著 C+ Builder程序设计轻松上手北京:清华大学出版社7严蔚敏等数据结构(c语言版) 北京:清华大学出版社,1997年4月第1版。8胡学钢等数据结构算法设计指导北京:清华大学出版社,1999年 第1版。附录:原程序清单:#include #include #include #include #include #include using namespace std;class Busticket_Controlpublic:Busticket_Control(void); /构造函数Busticket_Control(); /析构函数Busticket_Control *next; /链表指针bool ptime(void); /判断时间void input(void); /录入班次信息void output(void); /浏览班次信息void sale(void); /售票void back(void); /退票void input(ifstream & is); /读取void output(ofstream & os);/写入string get_place_end(void) const; /返回终点站int get_bus_order(void);private:int bus_order; /班次int hour_start; /发车时间(小时)int minute_start; /发车时间(分钟)char place_start10; /起点站char place_end10; /终点站float hour_running; /行车时间int overload; /额定载量int ticketed; /已定票人数;Busticket_Control:Busticket_Control(void) /构造函数ticketed=0;Busticket_Control:Busticket_Control() /析构函数bool Busticket_Control:ptime(void) /判断时间函数struct tm *local; /读入系统当前时间time_t t;t=time(NULL);local=localtime(&t); if(local-tm_hourhour_start)|(local-tm_hour=hour_start&local-tm_minminute_start) /与系统当前时间比较return 1;else return 0;void Busticket_Control:input(void) /录入函数cout*请按提示输入*endl;cout请输入班次bus_order;cout请输入发车时间的小时hour_start;cout请输入发车时间的分钟minute_start;cout请输入起点站place_start;cout请输入终点站place_end;cout请输入行车时间hour_running;cout请输入额定载量overload;cout请输入已定票人数ticketed;void Busticket_Control:output(void) /输出函数coutsetw(4)bus_o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业并购整合方案与风险控制
- 供应链管理师年度优化计划与流程再造
- 面向管理者的操作工工作计划分析报告
- 初学者如何快速掌握CNC编程技术
- 如何有效利用媒体进行线下宣传活动
- 质量体系运行维护年度改进计划
- 模具工程师成本控制考核方案
- 注册兽医动物治疗计划及安排
- 建筑模型设计师初级的工作计划及设计流程
- 网络安全企业内勤职责与工作规划
- JG/T 342-2012建筑用玻璃与金属护栏
- 银行面试题目100及最佳答案
- GB/T 17642-2025土工合成材料非织造布复合土工膜
- 神经外科临床诊疗指南及操作规范
- 《住院患者身体约束的护理》团体标准解读课件
- DB42-T 1989-2023 城乡公益性安葬设施建设与管理规范
- 2025国家开放大学《小学语文教学研究》形考任务1-5答案
- 肠内营养支持护理指南
- 教师名师笔试题库及答案
- 铁路营业线施工安全管理实施细则
- 2025年共同策划城市更新改造项目策划协议
评论
0/150
提交评论