欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    完整版C语言集中上机实验报告车票管理系统.docx

    • 资源ID:8956828       资源大小:20.83KB        全文页数:17页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    完整版C语言集中上机实验报告车票管理系统.docx

    1、完整版C语言集中上机实验报告 车票管理系统C语言集中上机报告 院 系: 计算机学院 班 级: xxx 姓 名: xxx 合 作 者: 无 指导教师: xxx 2009年 6月 11日目 录一概述 3二总体方案设计 3三详细设计 5四程序的调试与运行结果说明 8五课程设计总结 10六后记 10七附录 11参考文献 20一 概述1. 课程设计的目的熟练掌握C语言的应用及特点; 掌握函数声明、定义和使用的方法;熟练掌握C语言中的对文件进行操作的基本方法;熟练掌握结构体的使用方法;掌握链表的基本操作。2. 课程设计的要求1.要求利用C语言面向过程的编程思想完成系统设计;2.突出C语言的函数特征,以多个

    2、函数实现每一个子功能;3.画出功能模块图;4.进行简单的界面设计,能够实现友好交互;5.具有清晰的程序流程图和数据结构的详细定义;6.源码格式规范,要有适当的注释,使程序容易阅读。3. 课程设计的主要设计思想这次设计的车票管理系统,实现了对车票的实时管理,功能包括录入、增加班次信息(信息用文件保存),浏览班次信息,查询路线以及售票和退票功能。主要使用了链表实现了数据的保存和修改,同时使用文件相关函数对文件进行同步。二 总体方案设计这个程序比较简单,主要分为菜单,浏览/查询,售票/退票,和增加数据四个部分。采用了链表作为存储的方式,并实现了结构体与文件的同步修改,已经具备了题目要求的所有功能。这

    3、个程序由我个人完成。在编程过程中遇到的关键问题有系统时间的获取与显示,从文件中读取链表,处理每天班次的人数刷新问题,以及如何提高代码的复用率等。程序整体框图如下:三 详细设计程序结构以及各函数的具体功能main.c:void main();程序入口,对文件进行打开和初始化后进入菜单void menu(struct banci *head,struct banci *nw,FILE *data,unsigned int serial);显示菜单,从主函数中得到各种信息,通过switch语句调用其他功能operate.c:void update(struct banci *ut,FILE *dat

    4、a);更新结构体中的各个数据,主要对日期进行处理,当班次更新后重新写入日期并将已订票人数清零void displaybanci(struct banci *head, unsigned short mode);作为整个程序中唯一的数据显示函数,显示班次信息,有3个显示模式struct banci * addbanci(struct banci * tail, FILE *data,unsigned serial);增加一条新的班次信息到链表末尾,并写入文件void searchbanci(struct banci * head);查找班次信息,可按班次号查询或按终点站查询void piao(s

    5、truct banci *head,FILE *data);实现售票和退票功能,并自动更新文件operate.h声明结构体和各个自定义函数部分函数的算法分析1. 对文件进行打开和初始化。这个功能在主函数main()中完成。有关代码如下,具体功能解释在程序注释中。 FILE *data; struct banci *head,*nw; head=(struct banci*)malloc(sizeof(struct banci); if(data=fopen(banci.dat,r+)=NULL) data=fopen(banci.dat,w); printf(nn建立新文件,请至少输入一条班次

    6、记录n); nw=addbanci(head,data,1); head=nw; else if(fread(head,sizeof(struct banci),1,data)=0) /判断文件是否为空。fread()返回的是读取成功的数据块数目,返回0说明读取失败。若文件不为空则实现读取文件 printf(nn数据文件是空的,请至少输入一条班次记录n); nw=addbanci(head,data,1); head=nw; else nw=head; while(1) /把整个链表从文件中读出来,同时获取目前的班次总数 serial+; /if(nw-next=NULL) break; /这

    7、么判断结尾时不可行的,因为nw-next已经被赋值不可能为空了 nw-next=malloc(sizeof(struct banci); if(fread(nw-next,sizeof(struct banci),1,data)=0) /逐条读取。若遇到结尾,结束读取 nw-next=NULL; break; nw=nw-next; 2. update() 函数。使用这个函数主要是考虑到系统日期变化后对班次的售票信息进行更新。在程序中每进入一次菜单就要执行一次update()函数。当结构体中存储的年月日和系统目前的时间都相等是则跳过并不清零已订票人数,否则对结构体进行更新并清零已订票人数。主要

    8、代码如下: if( nowtime.wYear = ut-fache.wYear & nowtime.wMonth = ut-fache.wMonth & nowtime.wDay = ut-fache.wDay ) fseek(data,sizeof(struct banci),1); /不需要更新,则跳过这个结构体,不写文件 else ut-fache.wYear=nowtime.wYear; ut-fache.wMonth=nowtime.wMonth; ut-fache.wDay=nowtime.wDay; ut-fache.wDayOfWeek=nowtime.wDayOfWeek;

    9、 ut-yidingpiaorenshu=0; fwrite(ut,sizeof(struct banci),1,data); 3. displaybanci() 函数。通过显示模式这一变量,实现了代码的重复利用。当显示整个链表时,循环显示所有信息;当在查找中仅需要显示单条记录时,不再继续显示之后的信息。这是有关显示模式的主要代码: while(head!=NULL) if (mode=1 | mode=3) /显示全部记录时,继续显示 head=head-next; if (mode=2) /显示单条记录时,不再显示 break; if(mode=1) getch(); /模式2和3不需要暂

    10、停,故有这个判断4. 关于班次的序列号。这个程序中班次是固定的,不需要修改或删除,故班次的序号又系统自动分配,不需要输入。在程序开始初始化文件时,就获取了目前的班次总数,若再增加班次,则序列号自动加一。具体实现:(菜单menu()中)case 5: serial+;nw=addbanci(nw,data,serial); break;(addbanci()中)newnode-serial=serial;四 程序的调试与运行结果说明1. 启动程序,提示输入第一条记录建立文件建立新文件,请至少输入一条班次记录这是第 1 个班次输入发车时间(小时:分钟)2. 若文件为空,也提示输入第一条记录数据文件

    11、是空的,请至少输入一条班次记录这是第 1 个班次输入发车时间(小时:分钟)3. 输入记录后进入菜单,使用了简单的文本菜单界面C题目二十三: 车票管理系统今天是 2009 年 6 月 12 日,目前读取的时间为 8 时 37 分 1. 浏览班次信息 2. 售票 / 退票 3. 查询班次 4. 退出系统 5. 增加班次4. 浏览班次信息浏览班次班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 是否已发出1 8 : 00 aaa bbb 0.5 40 0 已发出2 23 : 00 bbb aaa 0.5 40 23 12 : 00 rtf bbb 1.5 40 14 17 : 30 b

    12、bb rtf 1.5 40 05 19 : 30 ttt rtf 0.3 40 06. 查询班次信息,按终点站查询查询班次 1. 按班次号查询 2. 按终点站查询输入要查询的终点站: bbb浏览班次班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 是否已发出1 8 : 00 aaa bbb 0.5 40 0 已发出浏览班次班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 是否已发出3 12 : 00 rtf bbb 1.5 40 17. 售票、退票,以售票为例浏览班次班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 是否已发出1 8 : 00 aaa

    13、bbb 0.5 40 0 已发出2 23 : 00 bbb aaa 0.5 40 23 12 : 00 rtf bbb 1.5 40 24 17 : 30 bbb rtf 1.5 40 05 19 : 30 ttt rtf 0.3 40 0售票 / 退票 1. 售票 2. 退票输入要售票的班次号:3第 3 班次完成一次售票8. 增加班次信息这是第 6 个班次输入发车时间(小时:分钟)10:15输入起点站ytr输入终点站aaa输入行车时间(分钟)60输入额定载量32五 课程设计总结经过测试,这个系统已经达到了题目中的全部要求。从功能上讲,这个程序还有不完善的地方,如不能修改或删除班次信息等。另外

    14、,由于追求代码复用率的原因,在查询班次时会显示出多余的信息,有待进一步改进。这个程序有一个特点就是界面简明,但从另一方面讲也可以说是界面简陋,如果可能的话,下一个版本将采用图形界面。在编程过程中也遇到了一些困难,如系统时间的获取与保存,从文件中读出整个链表等,这些都通过查询资料和询问同学得到了解决。另外在程序测试过程中发现了发车后订票人数不能归零的问题,后来通过添加update()函数得到了解决。六 后记经过这次集中上机实习,我充分认识到了C语言的用途是非常广的,功能也非常强大,是学计算机不可缺少的语言。更重要的是,在这次编程中熟悉了编写一个比较复杂程序的流程,以及发现问题、解决问题的能力,为

    15、下一步计算机语言的学习做了准备。之前感觉遥不可及的功能,现在可以实现了,应当感谢老师和同学的热心帮助,这是我得以及时完成这个程序的重要因素。七 附录main.c#include#include#include#includeoperate.hunsigned int serial=0; /班次序列号,由系统自动生成不能修改void menu(struct banci *head,struct banci *nw,FILE *data,unsigned int serial);void main() FILE *data; struct banci *head,*nw; /system(mode

    16、 con cols=80 lines=25); /定义屏幕宽度 head=(struct banci*)malloc(sizeof(struct banci); if(data=fopen(banci.dat,r+)=NULL) data=fopen(banci.dat,w); printf(nn建立新文件,请至少输入一条班次记录n); nw=addbanci(head,data,1); head=nw; else if(fread(head,sizeof(struct banci),1,data)=0) /判断文件是否为空。fread()返回的是读取成功的数据块数目,返回0说明读取失败。若文

    17、件不为空则实现读取文件 printf(nn数据文件是空的,请至少输入一条班次记录n); nw=addbanci(head,data,1); head=nw; else nw=head; while(1) /把整个链表从文件中读出来,同时获取目前的班次总数 serial+; /if(nw-next=NULL) break; /这么判断结尾时不可行的,因为nw-next已经被赋值不可能为空了 nw-next=malloc(sizeof(struct banci); if(fread(nw-next,sizeof(struct banci),1,data)=0) /逐条读取。若遇到结尾,结束读取 n

    18、w-next=NULL; break; nw=nw-next; menu(head,nw,data,serial);void menu(struct banci *head,struct banci *nw,FILE *data,unsigned int serial) char kinput; while(1) system(cls); printf(C题目二十三: 车票管理系统); update(head,data); printf(n 1. 浏览班次信息n 2. 售票 / 退票n 3. 查询班次n 4. 退出系统n 5. 增加班次nn); kinput=getch(); switch(k

    19、input) case 1: displaybanci(head,1);break; case 2: piao(head,data);break; case 3: searchbanci(head);break; case 4: fclose(data);exit(0); case 5: serial+;nw=addbanci(nw,data,serial); break; default:; oprate.c#include#include#include#includeoperate.hvoid update(struct banci *ut,FILE *data) /防止第二天定票人数不

    20、归零的情况发生 SYSTEMTIME nowtime; GetLocalTime(&nowtime); printf(n今天是 %d 年 %d 月 %d 日,目前读取的时间为 %d 时 %d 分n, nowtime.wYear,nowtime.wMonth,nowtime.wDay,nowtime.wHour,nowtime.wMinute); rewind(data); for(;ut!=NULL;ut=ut-next) if( nowtime.wYear = ut-fache.wYear & nowtime.wMonth = ut-fache.wMonth & nowtime.wDay =

    21、 ut-fache.wDay ) fseek(data,sizeof(struct banci),1); /不需要更新,则跳过这个结构体,不写文件 else ut-fache.wYear=nowtime.wYear; ut-fache.wMonth=nowtime.wMonth; ut-fache.wDay=nowtime.wDay; ut-fache.wDayOfWeek=nowtime.wDayOfWeek; ut-yidingpiaorenshu=0; fwrite(ut,sizeof(struct banci),1,data); void displaybanci(struct ban

    22、ci *head, unsigned short mode) /承担所有的链表显示,有3个显示模式 SYSTEMTIME nowtime; GetLocalTime(&nowtime); printf(浏览班次n); printf(班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 是否已发出n); while(head!=NULL) printf(%-4d %2d : %02d %-10s%-10s%-10.1f%-9d%-3d , head-serial,head-fache.wHour,head-fache.wMinute,head-qidian,head-zhongdian

    23、, (float)head-shijian/60,head-edingzailiang,head-yidingpiaorenshu); if( nowtime.wHourhead-fache.wHour | (head-fache.wHour=nowtime.wHour & nowtime.wMinutehead-fache.wMinute) head-shifouyifachu=1; printf( 已发出n); head-yidingpiaorenshu=0; else head-shifouyifachu=0; printf( n); if (mode=1 | mode=3) /显示全部

    24、记录时,继续显示 head=head-next; if (mode=2) /显示单条记录时,不再显示 break; if(mode=1) getch(); /模式2和3不需要暂停,故有这个判断struct banci * addbanci(struct banci * tail, FILE *data,unsigned serial) struct banci *newnode; newnode=(struct banci*)malloc(sizeof(struct banci); GetLocalTime(&newnode-fache); /先调出系统时间 printf(n这是第 %d 个班

    25、次n,serial); printf(输入发车时间(小时:分钟)n); scanf(%d:%d,&newnode-fache.wHour,&newnode-fache.wMinute); printf(输入起点站n); scanf(%s,newnode-qidian); printf(输入终点站n); scanf(%s,newnode-zhongdian); printf(输入行车时间(分钟)n); scanf(%d,&newnode-shijian); printf(输入额定载量n); scanf(%d,&newnode-edingzailiang); newnode-yidingpiaor

    26、enshu=0; /这两个变量由系统自动指定无需输入 newnode-serial=serial; tail-next=newnode; /连接链表 newnode-next=NULL; fwrite(newnode,sizeof(struct banci),1,data); /更新文件 fflush(data); return newnode;void searchbanci(struct banci * head) char sinput; unsigned sserial; char szhongdian8; unsigned short label=0; printf(查询班次nn 1. 按班次号查询n 2. 按终点站查询n); sinput=getch(); switch(sinput) case 1: printf(输入要查询的班次: );


    注意事项

    本文(完整版C语言集中上机实验报告车票管理系统.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开