软件工程实践专题 第一次作业

作业题目:运行别人开发的一个软件或一段程序,简单运行一下他的功能,写下心得体会。

1759227  范杨   代码来源:大一小学期别的组写的

一、代码分析

本程序是用C++写的,最多支持管理100个航班信息,10000机票信息,管理员可以进行航班信息的输入、单个或全部航班信息的删除、航班信息查询、旅客信息输入、机票信息查询、机票订购以及机票退订等功能,其中航班信息查询支持按航班号查询以及按目的地和起飞时间查询两种方式,机票信息查询支持按航班号查询、按旅客姓名查询以及按机票编号查询三种方式。程序运行开始时要输入管理员密码(默认为123456),通过后可以自由进行操作,但需要按提示操作。

具体功能如下:

  1. 菜单  ①主菜单 ②航班信息查询方式菜单 ③航班信息维护方式菜单 ④机票信息查询方式菜单
  2. 文件读取 ①本地航班信息读取

    void fileread1()

    ②本地机票信息读取

    void fileread2()

  3. 文件保存  ①本地航班信息保存

    void filesave1()

    ②本地机票信息保存

    void filesave2()

  4. 信息输入  ①航班信息输入

    void flight_info_input()

    ②机票信息输入

    void ticket_info_input(struct FLIGHT *p) //根据航班信息往机票中写入共有的信息

  5. 查询  ①航班信息查询

    void search_ticket_flight_num()

    ②机票信息查询

    void search_ticket_num()

  6. 航班信息维护
  7. 订票

    void ticket_book()

    与退票

    void ticket_cancel()

接下来是我对代码的理解:

航班信息以及机票信息用的是结构数组存储,且用结构指针进行传递。定义了两个外部静态型变量计数航班数以及已售机票数,又定义了两个文件指针分别指向存储航班信息的文件和存储机票信息的文件。为了将界面做的比较友好,做了四个菜单,且主函数中除了验证密码外功能外,其他均是调用函数。航班信息包括航班号、出发地、目的地、起飞时刻、到达时刻、总票数、剩余票数、价格,机票信息包括航班号、机票编号、出发地、目的地、起飞时刻、到达时刻、登机口、座位号、姓名、性别、身份证号、联系电话,其中航班号、出发地、目的地、起飞时刻、到达时刻、价格均是真实信息,总票数、剩余票数是随手写的,航班信息在显示时均会显示,且会有一个内部编号以供订票用、删除用,这样在其它函数中就不用重复写查询函数,机票编号是用B1+机票订购次序编号而成,登机口是用A+航班号后两位而成的(用到了sprintf函数),座位号是用买票的先后顺序而生成的,且统一按三位的格式显示,由于DOS屏宽的限制机票信息不显示身份证号码以及联系电话。菜单选项均用字符识别以避免在使用数字时会不停地显示。文件读取时是用的fread函数的返回值是读取的项数而构成的for循环以读出所有信息且不会多读取。保存函数是直接写信息。该程序只读一次文件且只写一次文件,所以退出只能用主菜单下的保存退出。航班或机票信息输入时char型均用gets函数输入,int型均用scanf函数输入。所有查询函数均用strcmp或者直接比较数值大小来实现,其中按目的地和起飞时间查询航班信息时,时间只取前两位,所以用到strncmp函数。此外,航班信息删除以及退票均是使用后一个信息替换前一个信息且构成for循环来实现的。

二、我的建议和改进方案

1.可以卖出退订的机票而生成机票号和座位号时可以使用退了的号码而不出错。

2.可以继续增加功能,例如更改密码的功能,有更加多的查询方式,以及可以支持不同的输入(如地名用中文、拼音、缩写等),目的地还要显示所降落的机场,所坐飞机的机型、舱位等级,支持更多的出发地(默认为武汉),还有就是支持不同的日期以及可以根据一个星期的航班信息查询以后任一天的航班信息。

3.该程序如果用链表这种非线性存储结构进行的话,效率可能会更高。而在进行程序时,有的地方也要分配内存以进行现场保护。这个程序中最大的问题是如何将退了之后的票再卖出,而机票号码和座位号不会发生重复,开始时没有注意到这个问题,后来发现了之后,经过认真的思考,想到了可以先进性排异性查别,如果有相同的则往前进行排查,发现有不同的就将其作为卖出票的号码。

三、心得体会

第一、此程序是大一时写的,当初还没学其他专业课,所以代码看上去比较多,不像Java那样简洁明了。可以试着用链表来写,这样会解决很多问题。

第二、测试用例还没完整的学过,只是上课老师有所提到过,所以还不能完全理解,这里就不写测试用例了,我想通过后面的学习会有所理解。

第三、第一次接触此类型的作业,还不是很清楚如何很好的完成作业,虽然这次作业的感觉有点模糊,但还是有所感悟,至少以前不怎么喜欢看代码的我现在还是能完整的看完了如此长的代码,锻炼了我的耐心和对代码的兴趣。

总之,这次作业还真的和往常别的老师布置的不一样,有点独特,还有点难,但至少收获还是挺多的。

posted on 2019-03-05 14:34  躺着的海星Kim  阅读(256)  评论(0编辑  收藏  举报