湖北工业大学
工程技术学院
课程设计报告书
课程名称:      C语言课程设计       
    级:      物联网一班           
小组成员: 范立恒、陈根、聂俊豪、麦灿文、黄文康     
组    长:      范立恒               
指导教师:      楚惟善               
二○一三
1 课程题目及要求及要求
题目一:火车售票系统
任务:结合C语言中相关知识,设计出火车售票系统。
1 录入北京西站车次信息;
2 旅客按车次买票;
3 统计某日火车票销售金额。
程序要求
贯彻结构化的程序设计思想。
用户界面友好,功能明确,操作方便。
用户界面中的菜单至少应包括“车次信息录入”、“旅客买票”、“统计某    日销售 金额”、“退      出”4项。
代码应适当缩进,并给出必要的注释,以增强程序的可读性
为了保证所有的数据可以长期被使用,要求程序能将相关数据存储在外部数据文件中,具
体数据格式和文件名、路径等自定;
根据所设计的算法,定义相应函数分别实现系统的各子功能模块,同时由主程序提供友好的用户界面,使用户可通过选择主菜单调用课程设计中要求完成的各个功能模块,子程序执行完后可返回到主菜单,继续选择其他功能执行。源程序要求书写规范,结构清晰重点函数的重点变量,重点功能部分求给出清晰的程序注释。
程序编译、链接成功后,自己设计实现程序功能的一组或多组测试数据,并严格按照此测试数据进行测试,然后分析测试结果。如果程序不能正常运行或结果不正确,则需对程序进行单步调试,在调试过程中认真查算法实现中存在的问题,并加以分析和
2 程序分设计说明
  经过对程序设计题目的分析可知,整个程序的设计实现大致分为八个模块,每一个模块对应一个函数。在这些函数当中,添加车次数据函数,售票函数,查询总额函数的实现严格按照题目的要求,而显示时间函数和显示车次函数属于附加功能。读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。
1. 添加车次函数  主要实现程序最初运行时车次的录入;
fopen函数失败2. 旅客买票函数  实现的功能是按照旅客所需车次几所购买车票的数目;
3. 查询车票总额  按照题目的具体要求实现的是总额的查询;
4. 显示函数  实现的是显示目前所有的有效车次信息。
除上面介绍的功能之外,程序还具有显示当地时间,以及退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个车次都包含车次、日期,始发、终点以及所受票数和所需费用,在程序当中,将车次类型定义为结构体类型,添加的车次信息直接写入E盘的文件中,其它函数每次对车次记录的访问,其数据来源都是文件,这样做不但可以保证的一致性,而且可以对车次数据进行永久保存,保证每次运行程序都可以采用原来的数据。
3程序流程图
1. 程序总体结构图
图1程序总体结构图
2. 具体功能框图
(1)添加函数add
图2 添加函数
(2)读取函数reads
图3读取
(3)删除学生记录函数del
图4 删除学生记录
(4)按总分排序函数sort
图5按总分排序
4.程序清单
本程序主要由九个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来
实现要求的所有功能。在这些函数当中,添加函数、删除数据函数和排序函数是程序中较为核心的部分,下面分别进行说明。
1.录入车次信息函数
录入车次信息,首先由程序创建一个新文件,并将录入的车次信息写入该文件(e:\\)当中。具体的程序段如下:
    if((fp=fopen("e:\\","a"))==NULL)  //如果文件已经存在,可以追加车次信息
    {
        if((fp=fopen("e:\\","w"))==NULL) // 文件不存在时,创建新文件,输入车次信息
        {
            printf("文件打开失败!\n");
            return;
        }
    }
    printf("请输入要车次的数量,按回车键确认:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        printf("\n请输入第%d个车的车次,日期,始发,终点,用空格分开,并按回车键确认:\n",i);
        scanf("%d%d%s%s",&tra.num,&tra.date,tra.);
        printf("\n请输入第%d个卖出的数量,车次所需的费用,用空格分开,并按回车键确认:\n",i);
        scanf("%d%f",&tra.maipiao,&tra.tickeprice);
        fprintf(fp,"%d %d %s %s %d %f\n",tra.num,tra.date,tra.,tra.maipiao,tra.tickeprice);
       
       
    }
    fclose(fp);
}
2.旅客买票函数
  对于买票,这部分程序然调用了reads函数,首先应输入旅客所买车次,然用if函数进行比较,如果成立就进行一下售票以及金额运算,最后调用save函数进行更新。
具体程序如下:
n=reads(tra);
    printf("\n请输入待查询的车次号,按回车键确认:\n");
    scanf("%d",&num);
    for(i=0;i<n;i++)
      if(num==tra[i].num) break;
      if(i>=n)
    {
        printf("没有到该车次信息!\n");
        return;
    }
    else
    printf("\n请输入所买票数,按回车键确认:\n");
    scanf("%d",&j);
  tra[i].maipiao=tra[i].maipiao+j;