软件工程订单

长治学院

课程设计报告

课程名称:软件工程课程设计

设计题目:火车订票系统—订单信息管理

系别:计算机

专业:计算机科学与技术(0901)

组别:第3组袁志刚毋星闫霞谢天

学生姓名: 谢天学号: 09407131 起止日期: 2013.1.06~2013.1.12 指导教师:郭咏梅

目录

第一章问题描述 (1)

1.1开发背景 (1)

1.2设计目的 (1)

1.3开发环境 (1)

1.4功能概述 (1)

1.5任务分工 (1)

第二章火车订票系统需求分析 (2)

2.1数据分析 (2)

2.2功能分析 (2)

2.3其它需求 (4)

2.3.1数据的完整性、准确性及安全性 (4)

2.3.2可靠性 (4)

第三章火车订票系统总体设计 (5)

第四章火车订票系统详细设计 (5)

4.1 数据库设计 (5)

4.2主要界面设计 (6)

4.3 订单信息管理模块详细设计 (7)

4.3.1订单信息管理模块的功能 (7)

4.3.2订单信息管理模块算法描述 (8)

第五章数据管理模块的主要源代码及测试 (10)

5.1 订票模块主要源代码 (10)

5.2 退票模块主要源代码 (11)

5.3 订票模块的测试 (12)

第六章总结 (14)

6.1 开发过程归纳总结 (14)

6.2 遇到的问题以及解决办法 (14)

6.3 对于进一步开发的说明 (14)

6.4 本次课程设计的收获和体会 (15)

参考文献 (16)

第一章问题描述

1.1开发背景

火车是目前客流量最大的运输工具,未来很长一段时间中也会延续这种现状,而传统的人工售票,每逢客流高峰期就会出现旅客排队购票困难的情况。为了提高售票效率,方便旅客订票,产生了面向此课题的研究。

1.2设计目的

结合以前所学的C、C++以及本学期所学的软件工程的理论知识,开发一个简单的火车订票系统,方便管理员管理车次信息、用户订票与退票。

1.3开发环境

开发工具:kate编辑器、g++编译器、gdb调试工具;

开发语言:C++;

系统环境: Red Hat Linux操作系统。

1.4功能概述

本系统主要实现以下功能:

1、用户基本信息的管理;

2、车次基本信息的管理;

3、实现订票与退票的功能。

1.5任务分工

表1-1 课程设计任务分工

第二章火车订票系统需求分析

2.1数据分析

本系统中存在的实体有:用户、车次、火车票(在系统中是以订单的形式出现),各实体都有自己相应的属性,其中“用户”实体和“火车票”实体之间存在“购买”联系,这种联系为一对多的,即一名用户可购买多张火车票(但同一车次的火车票不能被同一用户购买多张);“火车票”实体和“车次”实体存在“包含”联系,这种联系为多对一的,即一个车次可以对应多张火车票,而一张火车票只能对应于一个车次。为了减少数据冗余,便于数据的统计和查询,本系统的主要数据项设计如下:

用户信息,包括数据有:身份证号、用户名、姓名、性别、联系电话。

车次信息,包括数据有:车次编号、发站、到站、发时、到时、票数、票价。

订单信息,包括数据有:订单号、车次号、用户名、座位号。

系统的E-R图如图2-1所示。

图2-1 系统E-R图

2.2功能分析

管理员向火车订票系统录入用户信息(也可以自己注册用户)、车次信息,旅

客登录系统后可以查询管理员录入的车次信息,还可以查看自己的资料,系统的顶层数据流图如图2-2所示。

图2-2 系统的顶层数据流图

本系统主要需要设计六个类,链表类模板、文件类模板、窗口类、用户类、车次类以及订单类,链表类模板与文件类模板主要是进行数据管理,而窗口类主要用于将用户类、车次类以及订单类的一些服务组织起来,实现用户与后台数据的交互。所以呈现给用户的主要有以下几个功能。

登录:用户需要输入自己的用户名和密码方可进入系统,非管理员无法登录到管理员的操作界面,而管理员可以进入旅客的操作界面。

注册:只有经过注册的用户才可以登录订票系统,一个身份证号只能注册一个唯一的账号。

用户信息管理:这部分功能主要是通过设计用户类中的一些服务来实现的。管理员可以用户的信息进行增加、删除、修改、查询、统计操作,普通旅客只能够查询自己的个人资料。

车次信息管理:这部分功能主要是通过设计车次类中的一些服务来实现的。管理员可以对车次的信息进行增加、删除、修改、查询、统计操作,普通旅客可以查询车次信息

订单信息管理:这部分功能主要是通过设计订单类的一些服务来实现的。管理员可以统计系统中存在的订单,旅客可以通过该系统进行订票和退票。

系统数据流图如图2-3所示。

图2-3 系统数据流图

订单管理模块主要实现订票与退票的功能,这就要求设计一个订单类,通过设计该类中的不同服务以实现订票、退票以及统计订单的功能。

2.3其它需求

2.3.1数据的完整性、准确性及安全性

(1)拥有用户、密码模块管理用户权限

(2)可根据各种条件进行查询

2.3.2可靠性

该软件在软硬件环境均未发生重大改变和提高的情况下,在正确使用和适当维护的条件下,可以长久使用,各项功能可以正常实现,可靠性较好。

第三章火车订票系统总体设计

火车订票系统分为四个大模块,即用户信息管理模块、车次信息管理模块、订单信息管理模块以及数据处理模块,前三个模块每个模块下面又分为若干个子模块,数据处理模块是辅助前三个模块正常处理数据的。

订单信息管理模块主要分为订票、退票以及订单统计,旅客在登录系统后可以根据自己的需要进行订票,当用户订票完毕后系统会随机生成一个订单号和座位号呈现给用户;当用户因为某种原因想取消订单的时候,可以进行退票操作,当然必须是用户在此之前已经订过票。管理员可以将所有旅客所下订单信息进行统计,系统的层次结构图如图3-1所示。

图3-1 系统层次结构图

第四章火车订票系统详细设计

4.1 数据库设计

表4-1用户信息表

表4-2 车次信息表

订单信息表中存放的数据包括订单号、车次、用户名和座位号。其中订单号、车次和用户名在表中是唯一确定的,且订单号长度必须为5位,车次与用户名的长度设计分别在车次信息表与用户信息表当中有说明。该系统全部由C、C++来实现,虽然订单号长度设计为5位,但为了防止数组越界可能产生的错误,将它在结构体当中的定义扩大,其它比如车次、用户名等也是如何。

表4-3 订单信息表

4.2主要界面设计

根据需求,设计如下一些界面:

当用户登录系统后会呈现给用户一个操作界面,用户可以根据自己的需要选择相应的操作,界面如下图所示。

图4-1 旅客登录后首界面

当用户选择订票操作的时候会要求用户输入乘车区间,界面如图所示

图4-2 要求输入乘车区间界面

系统会根据用户的要求呈现给用户所有满足条件的车次,旅客可以根据自己的需要进行选择,设计的界面如图所示

图4-3 订票操作界面

4.3 订单信息管理模块详细设计

4.3.1订单信息管理模块的功能

1、订票模块:当旅客登录系统后选择订票,会要求用户输入自己的乘车区间,若乘车区间不存在,系统会给出相应的提示,若乘车区间存在,系统会显示出所有满足要求的车次,当用户订票完毕之后系统会随机生成一个订单号和座位号呈现给用户。

2、退票模块:旅客可以根据自己的要求进行退票操作。

3、订单统计模块:管理员可以执行订单统计操作,可以查看到所有用户的订单信息。

4.3.2订单信息管理模块算法描述

订单信息管理模块中各个子模块的功能上面已经介绍,这里就订票与退票模块进行算法描述,其中流程图分别如图4-4和图4-5示所示。

图4-4 订票模块算法流程图

图4-5 退票模块算法流程图

第五章数据管理模块的主要源代码及测试

5.1 订票模块主要源代码

//订票

void Order::order_ticket(const char* a,bool b,string& s)

{

system("clear");

Window w;

strcpy(https://www.360docs.net/doc/ed17143744.html,,s.c_str());

Ticket t;

string ss = a;

while(1)

{

if(!t.ticket_quary2(s))

break;

cout << "请选择您所需要乘坐的车次:";

string s1;

cin >> s1;

getchar();

strcpy(o.tnum,s1.c_str());

if(fo.fo(s.c_str(),s1.c_str()))//判断该用户是否已经订过该车次的车票

{

cout << "一个用户只能订购同一车次的一张车票!\n";

break;

}

cout << "是否确认购买该车次的车票(y/n):";

char ch;

cin >> ch;

getchar();

if(ch=='y')

{

string s3 = order_num();//随机产生订单号

string s4 = order_snum();//随机产生座位号

strcpy(o.num,s3.c_str());

strcpy(o.snum,s4.c_str());

lo.read_to_list("order.dat");

lo.insert_back(o);

lo.write_to_file("order.dat");

//订单生成后到列车信息表当中将余票数减1

t.ticket_cha_cou1(s1.c_str(),s,-1);

system("clear");

cout << "*****************************\n"; cout << "*恭喜您购票成功!请牢记您的订单号:" << s3 << " *\n"; cout << "*您乘坐的车次" << s1 << "的座位号为:" <

}

break;

}

cout << "您是否需要购买其它车次的车票(y/n):";

char ch;

cin >> ch;

getchar();

if(ch=='y')

order_ticket(a,b,s);

w.login_tra(ss.c_str(),b,s);

}

5.2 退票模块主要源代码

//退票(删除相关订单信息,并使余票数加1)

void Order::return_ticket(const char* a,bool b,string& s)

{

system("clear");

Ticket t;

string ss = a;

lo.clear();

//查看订单当中是否有与自己相关的订单

if(!fo.if_has_exits1(s.c_str()))

{

system("clear");

cout << "您当前没有订单,无须进行退票操作!\n";

cout << "回车返回一级\n";

getchar();

return;

}

fo.cat_from_file2(s.c_str());

cout << "是否需要继续取消订单(y/n):";

char ch;

cin >> ch;

getchar();

if(ch != 'y')

return;

cout << "请输入您所想取消的订单号:";

string s1;

cin >> s1;

getchar();

//检测该用户是否存在此订单号

if(!fo.if_has_exits1(s.c_str(),s1.c_str()))

{

cout << "您没有此订单!\n";

cout << "回车返回上一级!\n";

getchar();

return;

}

cout << "是否确认退票(y/n):";

cin >> ch;

getchar();

if(ch=='y')

{

lo.read_to_list("order.dat");

Onode on = lo.find1(s1.c_str());

lo.erase(lo.find(on));

lo.write_to_file("order.dat");

t.ticket_cha_cou1(on.tnum,s,1);

cout << "退票成功!\n";

}

}

5.3 订票模块的测试

这里仅列订票模块的测试过程,其它子模块的测试可以用相同的方法进行测试,这里没有一一列出。这里采用路径覆盖的方法进行测试,图5-1为输出某车次信息的算法流程图。其白盒测试结果如表所示。

图5-1算法流程图

第六章总结

6.1 开发过程归纳总结

本课程设计完成了一个简单的火车订票系统,管理员可以登录系统对用户、车次以及订单进行管理,而旅客可以通过该系统进行查询车次、订票以及退票等操作。本课程设计的开发过程大致涉及到以下知识点:

1、C++面向对象编程;

2、Linux环境下的C与C++编程;

3、数据结构中单链表的知识;

4、如何通过软件工程的相关知识点合理地进行软件的设计。

6.2 遇到的问题以及解决办法

(1)在设计系统的初期目的不明确,几乎没有进行任何的系统分析就开始进行代码的编写,导致越做越乱,最后暂时中止了程序的编写。

解决办法:先进行需求分析,参考12306网站,确定系统到底需要完成什么功能以及在自己的能力范围之内可以实现什么功能,然后进行面向对象的分析,确定系统需要哪个几类,然后逐个分析每个类中应该有的属性有服务,大致框架确定之后再确定如何实现每个类中的服务,最后再逐个的进行细化。

(2)测试系统的时候,有时候发现一组数据测试的结果正确,可是再次登录系统的时候发现另外一组数据测试的结果就出现问题了。

解决办法:恰当的选择测试数据,并且测试数据需要达到一定的量,利用软件工程中白盒测试的方法,再结合gdb调试工具,确定出现问题的地方逐个进行改正。

6.3 对于进一步开发的说明

(1)本系统对于一些数据信息的处理都是通过文件来进行的,而文件只适合保存少量的数据,处理数据信息效率比较低,在后期的开发中将考虑在程序中调用数据库,比如mysql数据库,数据库里面存放程序所需要的所有信息,以提高访问数据的效率。

(2)本系统是模仿12306网站进行设计,由于时间问题,很多功能都不够完善,后期将会继续添加一些功能,比如付款功能,当然本系统不能从真正意义上实现付款功能,只是模拟这个功能。之所以需要这个功能,是因为只有经过付款后的订单才是真正意义上有效的,下单并不代表已经购票成功。

6.4 本次课程设计的收获和体会

我们小组所做的课程设计题目是火车订票系统,我在小组内的任务是设计一个订单类,实现对订单基本信息的管理。经过数天的研究学习之后,在经过小组成员的通力合作下终于完成了本次课程设计,通过本次课程设计对软件工程这门课有了更深刻的了解,知道了软件工程这门课的重要性以及其广泛地应用性。另外由于本次课程设计我们小组是用C++来进行编程的。所以在经过本次课程设计后对C++也有了进一步更深刻理解和熟悉掌握,知道应该如何正确有效的进行面向对象编程,即如何设计一些类并将它们有效的组织起来。通过本次课程设计实现了理论与实际相结合让我能够把平时在课堂上学到的理论知识应用到实际生活中。通过自己所学改善自己的生活达到学以致用。

最大的收获是通过本次课程设计让我知道我自己还存在很多的不足,尤其是对软件工程中的一些理论知识理解的还不是很透彻,还有就是对C++语言的运用不是十分熟练,在以后的学习生活中我一定要加强基本的理论知识的学习与研究,更深层次的理解基本的理论知识。同时也要加强自己的实际动手能力让自己更好的把理论与实际相结合。同时本次课程设计也让我知道了合作的重要性,如果要完成一个困难的大工作量的工程必须大家通力合作,齐心协力才能成功。

参考文献

[1] 谭浩强.C语言程序设计(第三版).北京:清华大学出版社

[2] 郑莉,董渊,何江舟.C++语言程序设计(第四版).北京:清华大学出版社

[3] 严蔚敏.数据结构(C语言版).北京:清华大学出版社

[4] 张海潘.软件工程导论(第五版).北京:清华大学出版社

[5] 杨树青,王欢.Linux环境C编程指南(第二版).清华大学出版社

相关主题
相关文档
最新文档