东莞理工学院三级项目设计报告
课程:高级语言程序设计学号:xxx
姓名:xxx
班级:xxx
教师:xx
2011年12 月26 日
目录
第一章系统概述 (3)
1.1 功能简介 (3)
1.2 设计思路 (3)
第二章系统功能的分析和设计 (4)
2.1 初始录入功能 (4)
2.2 订票函数 (4)
2.3 查找函数 (4)
2.3.1 按车次查询 (4)
2.3.2 按目的城市查询 (4)
2.4 修改函数 (5)
2.5 增加函数 (5)
2.6 显示函数 (5)
2.7 退出系统 (5)
第三章调试及运行结果 (6)
3.1 主菜单 (6)
3.2 显示功能 (6)
3.3 增加功能 (6)
3.4 修改功能 (7)
3.5 查询功能 (8)
3.6 订票功能 (9)
第四章总结 (10)
4.1 遇到的问题及解决方法 (10)
4.2 收获和体会 (11)
附录:程序代码 (11)
第一章系统概述
1.1 功能简介
本软件是一个简单的火车票订票管理系统,软件窗口为DOS页面。
火车票订票管理信息管理系统的功能主要是实现火车票订票的信息化管理。通过火车票订票管理系统,火车站管理人员可以实现对火车票信息的输入、订票、查找、修改和查询等操作。并且在原来基本要求功能的基础上新增了:增加数据功能。本系统最大的优点就是操作简便快捷等。
1.2 设计思路
将火车票信息定义为一个ticket类,在类中包含私有数据成员int num;string origin;string destination;string start;string end;int price;int count;分别表示车次号、出发城市、目的城市、出发时间、到达时间、票价、票数。
公有成员函数包括set( ) ,book(),search( ) ,change( ) ,add(), display( ) ,分别用来实现对学生信息的数据初始录入、订购火车票、查询数据、修改数据、增加数据,显示所有数据功能。
然后定义了一个menu( ) 菜单函数,使功能菜单显示在运行窗口以提示用户如何进行操作。
主函数是一个程序必不可少的,在主函数中,使用一个switch语句来选择调用主菜单中的各个功能函数。
第二章系统功能的分析和设计
在本章中,主要是介绍各个功能函数的设计思路和实现方法。
2.1 初始录入功能
此函数实现的功能主要是,对火车票信息的初始化录入功能,在初始时,文件中没有任何数据,可以通过次函数输入任意个火车票的信息,在输入时通过一个if条件语句来实现控制循环,当输入的出发城市是“0”时,使用break语句就跳出循环,即停止输入火车票信息。
在此函数中使用文件处理的方式,先建立一个文件输出流对象,以写的方式打开f1.txt文件,使输入的车票信息都写入文件。
2.2 订票函数
此函数实现的功能主要是,输入目的城市显示所有相关信息,按1或2可实现新增功能票价从低到高和新增功能票数从多到少显示出来,可根据自己情况选择相应车次,此时会显示剩余票数,输入个人信息(ID和姓名)及订票数即可完成订票。
2.3 查找函数
在查询功能中,可以按多条件查询,本系统分为两个查询条件,即按车次查询和按目的城市查询。使用if语句来选择查询条件。
2.3.1 按车次查询
根据提示信息输入车次号后,然后使用一个for循环语句,从第一个火车号开始检索,如果该次火车的车次号和输入的车次号相等,则输出该次火车的信息,
当无查询结果时,会输出一条提示信息“无此车次!”。
2.3.2 按目的城市查询
根据提示信息输入目的城市后,然后使用一个for循环语句,从第一个目的城市开始检索,如果该目的城市和输入的目的城市一样,则输出该目的城市的
信息,由于目的城市的名字有可能重复出现,所以不能使用break语句跳出循环,应该从第一个目的城市开始检索直到最后一个目的城市。
当无查询结果时,会输出一条提示信息“无此目的城市!”。
2.4 修改函数
此函数实现的功能主要是,修改一次火车票的信息。应用的思想是将火车票的信息重新写入文件的方法,将原有数据覆盖。
2.5 增加函数
此函数实现的功能主要是,添加多次火车的信息,也就是说调用一次这个函数能添加多次火车的信息,直至按0退出循环。在此函数中也使用文件处理的方式,但使用的是以追加的方式打开文件,使输入的火车票信息写在文件里原有信息的后面。
2.6 显示函数
此函数实现的功能主要是,显示所有车次的信息。先是从文件中读取火车的信息,然后在输出到显示窗口中。用一个for循环语句,来把所有火车的信息都输出
2.7 退出系统
当输入“0”时,就能退出系统,这是通过while语句来控制实现的。
第三章调试及运行结果
3.1 主菜单
主菜单显示如下:
图3-1 主菜单
3.2 显示功能
按5则显示全部信息,如图3-2:
图3-2 显示功能
3.3 增加功能
进入主菜单后选择5,进入增加功能,按要求输入火车票信息,增加数据前显示如图3-2:增加后显示如图3-3:
按0结束.
增加后显示全部:
图3-3
3.4 修改功能
进入主菜单后选择3,进入修改功能
,按要求输入要修改的火车票信息(修改115),修改数据前显示如图3-3:修改
后如图3-4:
图3-4 修改后3.5 查询功能
进入主菜单后选择4,进入查询功能,如图3-5:
图3-5选择查询条件按车次查询如图3-6:
按目的城市查询如图3-7:
图3-6 按车次查询:
图3-7按目的城市查询
3.6 订票功能
进入主菜单后选择2,进入订票功能,如图
按1,新增功能票价从低到高
按2, 新增功能票数从高到低
订票过程:
订票后该车次票数会减去相应数目,如图3-9
第四章总结
4.1 遇到的问题及解决方法
程序设计、调试过程中遇到的问题:
①在调试“修改功能”时,开始时当选择3,修改的车次不存在时,再选
6原先的数据不能再显示出来,且文本f1中也没有记录;故在if(c!=num[d]) { cout<<"车次不存在"< }中加入for(i=0;i {outfile< outfile< outfile< outfile< outfile< outfile< outfile< outfile.close(); 结果:再选择6原先的数据能再显示出来,且文本f1中也有记录了 ②在调试“订票功能”时,类似于“查找功能”和“修改功能”;在输入目的城市从而显示车次,这过程可以用“查找功能”中的“b按目的城市查找”;在根据自己的情况选择相应车次,这过程可以用“修改功能”,因为“修改功能”是根据“输入车次号”来修改数据的; 难点:在根据自己的情况选择相应车次后,如何根据票价的高低来显示剩余的票数;(思路:用冒泡法或选择法)但没能实现; ③若没有增加一个“增加功能”,则想增加火车票信息,只能通过“修改功能”,但使用“修改功能”又会将原来的数据覆盖,故不能用“修改功能”; 若增加一个“增加功能”就可以避免上述情况了,这样可以方便地为乘客们提供更多的信息,可以解决乘客们的燃眉之急。 4.2 收获和体会 ①通过设计这个火车票管理系统,我深深认识到作为一名编程工程师的辛苦;而且要成为一名优秀的编程工程师,需要具有认真、负责和完美主义的做事态度;一个功能完整的程序,不仅可以提高工作人员的办公效率,还可以为人民提供方便、快捷的生活环境。 ②但需要一个团队完成一个程序时,队员们应该学会合理分工和交流编程心得,可以说“没有交流就没有进步!” 上述是我在这次编程中得到的一些收获。 附录:程序代码 #include #include #include #include using namespace std; #define M 200 //可以存信息总量 int N=0; //车次总量 class ticket { public: ticket(); void set(); //初始化信息,第一次对信息的录入 void change(); //修改某车次的所有信息 void search(); //查询某车次的所有信息 void display(); //显示功能 void book(); //订票功能 void add(); //增加车票功能 void X(); //新增初始化N值函数 private: static int num; int count,price; string origin,destination,start,end; }; int ticket::num=110; //车次号 ticket::ticket() {} void ticket::set() //录入功能 { int i,setcount,setprice; string setorigin,setdestination,setstart,setend; ofstream outfile; outfile.open("f1.txt",ios::out); //----打开文件---- if(!outfile) { cerr<<" open error"< exit(1); } for(i=0;i cout<<"当出发城市输入为'0'时,停止输入!!!"< cout<<"请输入出发城市:"< cin>>setorigin; origin=setorigin; if(setorigin=="0") break; if(setorigin!="0") { N++; num++; outfile< outfile< cout<<"请输入目的城市:"< cin>>setdestination; destination=setdestination; outfile< cout<<"请输入发车时间:"< cin>>setstart; start=setstart; outfile< cout<<"请输入到达时间:"< cin>>setend; end=setend; outfile< cout<<"请输入票价:"< cin>>setprice; price=setprice; outfile< cout<<"请输入票数:"< cin>>setcount; count=setcount; outfile< } } outfile.close(); //----关闭文件-- } void ticket::book() //订票功能 { int i,n,w=0,a[M][3],searchnum,num[M],count[M],j=-1,k,min,d[M][3],t,l,p,price[M]; char ch; string searchdestination,destination[M],origin[M],start[M],end[M],q,b[M][4],c[M][4]; ticket::X(); ifstream infile("f1.txt",ios::in); if(!infile) { cerr<<" open error"< exit(1); } for(i=0;i { infile>>num[i];a[i][0]=num[i]; infile>>origin[i];b[i][0]=origin[i]; infile>>destination [i];b[i][1]=destination [i]; infile>>start[i];b[i][2]=start[i]; infile>>end[i];b[i][3]=end[i]; infile>>price[i];a[i][1]=price[i]; infile>>count[i];a[i][2]=count[i]; }