《C++程序设计》
课程设计说明书
题目长途客运售票管理系统的设计
学号
姓名
指导教师
日期
内蒙古科技大学课程设计任务书
目录
第1章需求分析 (3)
第2章总体设计 (3)
第3章类的设计 (4)
3.1 ×××类的设计 (4)
3.2 ×××类的设计 (5)
第4章详细设计 (6)
4.1 工程视图 (7)
4.2 类图视图 (7)
4.3 函数的调用关系 ...................................................................................................... 错误!未定义书签。
4.4 主程序流程图 (7)
4.5 主要算法的流程图 (7)
第5章测试 (8)
第6章总结 (10)
附录:程序代码 (10)
第1章需求分析
1.1设计资料及参数
用C++设计一个系统,能提供下列服务:
(1)录入车次信息,格式为:
可不定时地增加车次数据。
(2)浏览车次信息,可显示出所有车次,如果当前系统时间超过了某车次的发车时间,则显示“此班列车已发出”的提示信息。
(3)查询路线:可按车次编号查询,可按起始站,终点站查询
(4)售票和退票功能
A:查询车次或站点。当剩余座位数大于0,并且当前系统时间小于发车时间时才能售票,售票后自动更新剩余座位数。
B:退票时,输入退票的车次,当本班列车未发出时才能退票,退票后自动更新剩余座位数。
第2章总体设计
2.1用结构框图表示各个功能之间的关系
2.2将框图中系统的各个功能用文字详细的描述。
1.铁路售票管理系统理解:
系统中必须有车次信息,车次信息应该是由管理员录入,可由管理员或者乘客查看,定退票及其他操作。其中要注意的是录入信息必须是由管理员完成的,所以我会创建一个乘客类,然后创建管理员类继承乘客类,进而继承乘客的所有功能,并添加录入信息的功能。
信息的载体可以使链表,也可以是数组,因为我更加熟悉数组,所以我用对象数组。(为了熟悉链表,课下自己还建立了以链表存放数据的系统)
系统录入信息的操作非常枯燥,所以我创建了一个文件,把每次录入的信息保存入文件,在下一次进入系统是,它会默认读取文件原有的信息,当然也可以随时添加录入车次信息。
然后系统的各个功能仅仅是通过查询找到具体对象的具体数据进行操作。
2.基本功能:录入——次、始发站、终点站、开车时间(小时、分钟)、票价、剩余票数等信息。
浏览车次——查看所有的录入车次其中开车时间小于当前时间的车次则输出车次已发出。
查询车次——通过搜索车次或站点来快速的查看车辆的信息。
定退票——车时间大于当前系统时间的前提下才可退票并且在票数大于零的前提下才可定票,票数更新。
文件的存储——存储录入的车次信息以便下次访问。
文件的读取——读取文件内的信息方便操作以上的各项功能;。
第3章类的设计
3.1service类的设计(第一个类)
1.画出类图
2.对类的函数成员的说明
定义了一个service 类,类中包括以下几部分:
公有继承了user类
私有段:
定义车辆的车次、开车时间(小时、分钟)、始发站、终点站、票价、票数。公有段
依次为输入函数、输出函数、定票函数、退票函数。添加设定信息函数。
友元函数
查询函数、浏览函数、文件存储函数、文件读取函数。添加输入函数。
3.2user类的设计(第二个类)
1.画出类图
2.对类的函数成员的说明
定义了一个user 类,类中包括以下几部分:
私有段:
定义车辆的车次、开车时间(小时、分钟)、始发站、终点站、票价、票数。
公有段
依次为输出函数、定票函数、退票函数。
友元函数
查询函数、浏览函数、文件存储函数、文件读取函数。
3.3全局变量,重要形式参数、局部变量等等,它们的命名及用途解释g-num:确定数组对象的个数,也是控制循环的条件。
ticket[j]:代表具体的某个对象。
A:bool型,判断使用者身份。
B:bool型,判断是否退出程序。
t: long型,获得当前距1970年秒数。
pt: tm 指向类的对象的指针,指向当前时间。
Functionnumber:整型,选择功能。
第4章详细设计
4.1工程视图
说明有几个源代码文件,可以截取工程文件视图表示
4.2类图视图
4.3主程序流程图
4.4主要算法的流程图
第5章测试5.1验证身份后登陆
5.2录入信息并保存
5.3验证身份
5.4查询车次
5.5查询子菜单
5.6退、订票
第6章总结
课程设计旨在锻炼学生的实际动手能力和解决真实问题的能力。并在其中掌握和熟练所学的知识,并能够运用所学知识解决比较简单的现实模拟问题。
在为期两周的C++课程设计中,我体会颇多,学到了很多东西。我加强了对C++程序设计这门课程的认识,并且复习了以前学到的知识。这些都使得我对计算机语言的学习有了更深入的认识!总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。课程设计,有些问题并不是只靠课本的哪些知识就可以轻易解决的。所以,它不仅锻炼了我们挑战自己的决心,学会用已掌握的知识去解决我们看似不能解决的问题,同时进一步培养了我们独立思考问题和解决问题的能力。特别是在C++中如何调试程序的方法。当然,老师的指导以及同学的帮助是不可忽视的,他们给了我提示和帮助,教会了我编译复杂程序的方法。
虽然这次课程设计是在参考程序的基础之上进行的,但是我觉得不管咋样来说,对我们学生都是一个挑战和锻炼。我很欣赏自己能在程序中加入自己的想法和有关程序的内容,将它进行一番改进,感觉收获很大。
总之,这次的C++课程设计让我有了一些新的收获,让我对计算机语言有了更深体会,祝自己在以后的学习中更上一层楼。
附录:程序代码
#include
#include
#include
#include
#include
#include
using namespace std;
const int N=10;
bool A=false,B=true;
long t = time(0);
tm * pt = localtime(&t);
void mainmenu();
struct Time
{
int hour;
int minute;
};
class user
{ friend void save ();
friend void sure_message();
friend void browse();
friend void ticketmenu();
friend void search_train();
friend void search_station(); protected:
char train[10];
Time time;
char start_station[20];
char end_station[20];
int ticket_price;
int remaind_seats;
public:
void display()
{
cout< "< t = ::time(NULL); tm * pt = localtime(&t); if(time.hour cout<<" 此班列车已发出"; else if(time.hour==pt->tm_hour&&time.minute<=pt->tm_min) cout<<" 此班列车已发出"; else cout<<"\t正常"; cout< } void order() { if(time.hour cout<<" 此班列车已发出,不能订票,退出!"; else if(time.hour==pt->tm_hour&&time.minute<=pt->tm_min) cout<<" 此班列车已发出,不能订票,退出!"; else if ( remaind_seats == 0 ) cout << "此班列车已没票,不能订票,退出!" << endl; else { remaind_seats = remaind_seats - 1; cout < } } void Delete() { if(time.hour cout<<" 此班列车已发出,不能退票,退出!"; else if(time.hour==pt->tm_hour&&time.minute<=pt->tm_min) cout<<" 此班列车已发出,不能退票,退出!"; else { remaind_seats = remaind_seats + 1; cout < } } }; class service :public user { friend void input(); public: void setinfo (char* c, int h, int m, char* q, char* z, int p, int s) { strcpy(train,c); time.hour=h; time.minute=m; strcpy(start_station,q); strcpy(end_station,z); ticket_price=p; remaind_seats=s; } }; service ticket[N]; static int g_num=-1; void save () { ofstream file("数据.txt",ios::out); for(int j=0;j<=g_num;j++) { file< file< file< file< file< file< file< } file.close(); cout<<"信息已存入文件"< } void input() { g_num++; char c[10]; int h; int m; char q[20]; char z[20]; int p; int s; cout<<"车次:";cin>>c; cout<<"开车时间hour:";cin>>h; cout<<"开车时间minute:";cin>>m; cout<<"起始:";cin>>q; cout<<"终点:";cin>>z; cout<<"票价:";cin>>p; cout<<"剩余座位:";cin>>s; ticket[g_num].setinfo (c, h, m, q, z, p, s); save (); } void browse() { int j; t = time(NULL); tm * pt = localtime(&t); cout<<"当前时间:"< cout< cout< cout<<"现存车次信息如下:"< cout<<"车次\t"<<"开车时间\t"<<"起始\t"<<"终点\t"<<"票价\t"<<"剩余座位\t"<<"状态\t"< for( j=0;j<=g_num;j++) ticket[j].display(); } void search_train() { char train[10]; cout<<"输入你要查询的车次:"; cin>>train; cout< for(int j=0;j<=g_num;j++) if(strcmp(train,ticket[j].train)==0) { cout<<"查询结果:"< cout<<"车次\t"<<"开车时间\t"<<"起始\t"<<"终点\t"<<"票价\t" <<"剩余座位\t"<<"状态\t"< ticket[j].display();break; } if(j>g_num) cout<<"对不起,没有这趟车次信息!"; } void search_station() { char station[20]; cout<<"输入你要查询的站点:"; cin>>station; cout< for(int j=0;j<=g_num;j++) if((strcmp(station,ticket[j].start_station)==0)||(strcmp(station,ticket[j].end_station)==0)) { cout<<"查询结果:"< cout<<"车次\t"<<"开车时间\t"<<"起始\t"<<"终点\t"<<"票价\t"<<"剩余座位\t"<<"状态\t"< ticket[j].display();break; } if(j>g_num) cout<<"对不起,没有有关此站点的车次信息!"; } void ticketmenu() { long t = time(0); tm * pt = localtime(&t); int functionNumber;int j; cout<<" >>>>>> 票务菜单<<<<<< \n"; char train[10];char station[20]; cout<<"可按站点或车次查询订票(1.按站点,2.按车次)"< cout<<"选择你需要的功能:"; cin>>functionNumber;getchar(); for(;functionNumber!=1&&functionNumber!=2;) { cout<<"指令错误!请重新输入!"< cin>>functionNumber; } cout< if (functionNumber==1) { cout<<"输入你要订票或退票的站点:"; cin>>station; cout< for( j=0;j<=g_num;j++) if((strcmp(station,ticket[j].start_station)==0)||(strcmp(station,ticket[j].end_station)==0)) { cout<<"本车次现存信息:"< cout<<"车次\t"<<"开车时间\t"<<"起始\t"<<"终点\t"<<"票价\t"<<"剩余座位\t"<<"状态\t"< ticket[j].display();break; } if(j>g_num) cout<<"对不起,没有这趟车次信息!,无法订退票!"; } if (functionNumber==2) { cout<<"输入你要订票或退票的车次:"; cin>>train; cout< for( j=0;j<=g_num;j++) if(strcmp(train,ticket[j].train)==0) { cout<<"本车次现存信息:"< cout<<"车次\t"<<"开车时间\t"<<"起始\t"<<"终点\t"<<"票价\t"<<"剩余座位\t"<<"状 态\t"< ticket[j].display();break; } if(j>g_num) cout<<"对不起,没有有关此站点的车次信息!无法订退票!"; } if(ticket[j].time.hour cout<<"此班列车已发出,不能订退票!"; else if(ticket[j].time.hour==pt->tm_hour&&ticket[j].time.minute<=pt->tm_min) cout<<"此班列车已发出,不能订退票!"; else { cout<<"\n"; cout<<" 1.订票\n"; cout<<" 2.退票\n"; cout<<" 3.返回主菜单\n"; cout<<"\n"; cout<<"选择你需要的功能:"; cin>>functionNumber; for(;functionNumber!=1&&functionNumber!=2&&functionNumber!=3;) { cout<<"指令错误!请重新输入!"< cin>>functionNumber; } cout< switch(functionNumber) { case 1:ticket[j].order();save ();break; case 2:ticket[j].Delete();save ();break; case 3:mainmenu();break; }//switch ends } } void search_menu() { int functionNumber; cout<<" >>>>>> 查询子菜单<<<<<< \n"; cout< cout<<" 1.按班次查询\n"; cout<<" 2.按站点查询\n"; cout<<" 3.返回主菜单\n"; cout< cout<<"请选择你所需要的功能:"; cin>>functionNumber; cout< for(;functionNumber!=1&&functionNumber!=2&&functionNumber!=3;) { cout<<"指令错误!请重新输入!"< cin>>functionNumber; cout< } switch(functionNumber) { case 1:search_train();break; case 2:search_station();break; case 3:system("cls"); mainmenu(); } } void mainmenu() { int functionNumber;