




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中国石油大学(华东) 程序设计实训车票管理系统 程序设计实习报告题目:车站售票管理系统 姓名: 张xx 学号: 110xxxxx 班级: 应用物理11-2 同组者: 2012 年 9 月 8 日 第一章 实训内容总述本小组项目的基本描述,适用范围及功能介绍 我们小组设计课题为“车站售票管理系统”。系统主要功能是进行退售票管理,发车时间、车辆班次、始终点站、行车时间、票价、额定载量、售出票数等信息的录入,以及进行班次信息查询。能实现对班次信息的输入浏览、修改、删除,可分别根据发车时间、到站及其组合查询班次信息,也能够为用户提供车票信息的查询,方便用户进行退订票操作,最后还增加了售票统计功能,使得售票信息清晰地展现。本系统能够将各种信息及时保存于文档内,能够及时自动更新班次以及车票信息。我们的车站售票管理系统可应用于各类车站,对车站班次车票的基本信息进行综合管理和快速查询。可以节省在车站信息管理花费的人力和物力。同时可以使得车站管理人士随时随地的掌握班次信息,更简捷的对车站班次以及售票信息进行统计与管理,有助于提高车站的整体管理水平。第二章 课题要求1、题目要求主要内容:设计一个车站售票管理系统,实现售票管理的自动化,主要任务是用计算机对每个汽车班次的信息进行管理,包括用户验证、班次数据维护、售票管理等模块,实现班次信息的录入、修改、删除、查询以及售票、退票和售票统计等一系列功能。要求用键盘以选择菜单方式工作。数据格式用户数据:包括用户名char(10)、密码char(10)、用户类型(a:管理员,s:售票员)char(1)汽车班次数据:班次char(10)、到站char(10)、发车时间char(6)、票价、座位数、剩余票数数据文件用户数据文件user.txt,保存系统用户数据,每个用户的数据为一条记录班次数据文件bus.txt,存放车站的发车班次数据,每个班次的数据为一条记录用户验证系统运行后,首先要求用户登录,提示用户输入用户名和密码,若用户名或密码不对,提示用户并要求重新输入;若通过验证,则根据用户的类型分别进入系统管理界面或者售退票界面班次数据维护(只有管理员有权操作)录入班次信息:输入一个班次信息修改班次信息:根据班次号修改某个班次信息删除班次信息:根据班次号删除某个班次信息查询班次信息:分别根据发车时间、到站及其组合查询班次信息售退票管理(售票员)售票:首先根据到站地点和发车时间查询班次及剩余票数,若存在并且剩余票数大于购票数,则售票并计算出票价,否则,给出提示信息退票:根据班次进行退票处理统计:统计输出当日到达各地的班次、售票数、金额关于文件操作系统运行时,自动读取用户数据文件和班次数据文件,若该文件不存在,则建立该文件;若文件存在,则从中读取相关信息,根据提示选择添加、修改、删除记录,添加班次信息时,若该班次的记录已经存在,则应给出提示信息,并不能添加到文件中,当班次信息发生变化后应修改班次信息文件系统采用模块化设计,并且程序中有适当的注释2、我的任务本次我的任务是负责管理员模块的制作,具体包括录入班次,修改班次,删除班次,查询班次,退出系统五个大模块。在程序编写过程中,为达到预定目标以及方便小组成员间的资源共享,我们采取的是函数模块设计方式。在此过程中,我书写了班次信息管理主菜单函数,录入判断函数,录入函数,修改及增加班次函数,修改函数,删除函数,增加函数,以及跟我组成员共同完成了退出函数,查询函数,班次查询函数,保存函数,打印表头函数,显示所有函数等。第三章 分析设计一、 设计要点(1)、输入班次信息,包括要增加的班次数目,班次,发车时间,始发站,终点站,行车时间,额定载量,已售票量,票价;(2)、输入班次号进行班次信息修改;(3)、删除相应的班次信息;(4)、对班次信息进行查询,包括全部浏览显示,按发车时间查询,按终点站查询;二、设计总体流程图三、 分函数模块程序图1、 录入函数 2、修改函数选择修改班次提示输入修改的班次输入打开文件打开文件修改并保存返回管理界面调用增加函数调用修改函数选择增加班次判断是否是首次录入调用首次录入函数提示输入调用保存函数打开文件并保存返回管理界面依次输入 调用增加函数 是 打开文件删除数据并保存3、 删除函数选择删除班次返回管理界面调用删除函数提示输入删除班次输入调用班次查询函数第四章 关键代码实现说明1、结构体定义: typedef struct ticket /定义新结构体ticketchar num10; /车次编号char hour3; /时间,小时char min3; /分钟char from10; /起始站char to10; /终点站float hours,price; /车程实际时间、车票价格int max; /最大车载容量int now; /已售票数class;2、文件结构:二进制文件班次、发车时间、起点站、终点站、行车时间、总座位数、剩余数、票价文本文件姓名、密码、人员类型3、函数定义:(1)在进入相应菜单时要输入姓名跟密码进行身份验证;char userlogin() (2)进入相应菜单选择所进行的操作;void busmenu()(3)录入相应班次信息;void addbus()(4)修改指定班次的班次、发车时间、起点站、终点站、行车时间、总座位数等信息;void change()(5)删除指定班次的基本信息;void deletemessage()(6)按照发车时间,发车班次查询相应班次信息;void search()(7)录入增加的班次、发车时间、起点站、终点站、行车时间、总座位数等信息;void add()(8)读经保存后文档中的班次信息;void load()(9)保存相应的班次信息;void save() (10)显示班次信息;void showtable1()、void showtable2()(11)退出学生信息系统;void quit()4、关键函数体分析说明1、void busmenu() 该模块功能为管理菜单能进入各个模块分析主模块算法:输出主菜单后键盘输入0-4并回车,进入相应应用;分析主菜单模块的n-s图 输入选择z z=1? 2? 3? 4? 0? z=1进入增加班次模块z=2 进入修改班次模块z=3进入删除班次模块z=4进入查询班次模块z=0进入退出界面模块2、void addbus()该模块功能为按所提示的要求输入班次的各项基本信息;分析输入班次信息模块的n-s图 输入要输入的班次数目 n=0 p=class_num 依次按要求输入班次各项信息 是 y=1 否 y=0 n+ 是 否 p+ 输入完毕 无效选项 y=1保存路入班次的各项基本信息3、 void change()修改指定班次的班次、发车时间、起点站、终点站、行车时间、总座位数等信息分析修改学生信息模块的n-s图 请输入要修改的班次号 打开文档,调用相应班次信息请输入班次号请输入发车时间请输入始发站请输入终点站请输入行车时间请输入额定载量请输入已售票数符合数据类型是 否符合数据类型是 否符合数据类型是 否符合数据类型是 否符合数据类型是 否符合数据类型是 否符合数据类型是 否修改班次无效输入修改时间无效输入修改地点无效输入修改地点无效输入修改时间无效输入修改数量无效输入修改价格无效输入保存修改后的班次信息,返回修改菜单4、 void deletemessage()该函数功能是删除多与学生信息分析删除学生信息模块的n-s图: 输入待删除班次信息的班次号num ij空 j!=n-1 t f ee 删除班次信息 e+j+p-n-;p- 保存删除后班次信息文档第五章 总结在短短五天的实习期间使我获取了不少新知识也巩固了许多老知识。我体会到了老师和同学们的热心帮助,无论面对学习中多大的困难,同学们都会帮助你,老师也会帮助你,大家就像兄弟姐妹一样。老师安排我们有具有的分工: 首先,在计算机机房里同学们积极的对c语言进行巩固与实习,老师热心的讲解同学们提出的问题和实习过程中应该注意的事项和同学们的任何。老师把我们分为几组,每一组三个人,并且分配了具体的任务,在我们实习结束后每一组的同学都把自己组里的成果展示给大家一起分享,告诉大家编程的原理、方法等,使同学们既有动手能力,又能提高语言表达能力。然后同学们把自到自己的小组里,大家具体分工,你编这道题,我编这道题我们不会的地方就去问学习比较好一些的同学,或者去问老师,老师和同学们总是那么的热心,只要你还不明白,不论你问多少次,老师和同学们都会耐心地给你细心的讲解,直到讲会为止。最后我们把每天收获到的知识和心得都以实习日志的形式写好,最后交给老师。我们把自己的成果交给老师,就这样,这次实习圆满结束。这次实习是有益的,它不仅让我们学习到了c语言的知识,更让我们学习到了同学们之间的那种团队精神,为我以后踏入社会工作准备了很多良好的知识与经验。这次实训有很大的收获,让我对c语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对c语言有了浓厚的兴趣和更深层的认识。c语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌套,条理很清楚,不是一个零散的知识,实际上所有的课程都如此,不过通过实训我也知道了自己的不足,存在的很多问题。比如自己写的写的小程序出了问题,不会解决了就叫老师帮忙,虽然说一定意义上增加了师生之间的感情,但是会养成一种依赖的心理,碰到问题了第一个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取做到老师不在身边的时候也可以完成一些简单的程序编写与错误排除。还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。通过实训,逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,c语言还是很有意思的课程。自己亲自动手编写程序让我增加了对c语言程序开发环境的了解,在上课的时候老师就讲,学习c语言最重要的是学习c语言的逻辑思维,不管以后从事什么行业,学习c语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的编程工作可能不用c语言,但是拥有扎实的c语言基础是对工作很有用的。第六章 附录(源程序代码)#include #include #include #include #include #define n 50/声明用户数据类型typedef struct ticket /定义新结构体ticketchar num10; /车次编号char hour3; /时间,小时char min3; /分钟char from10; /起始站char to10; /终点站float hours,price; /车程实际时间int max; /最大车载容量int now; /已售票数class;int class_num=0; /初始班次总数为0 class recordsn;int system_time();int whether(int);void busmenu();void ticketmenu();void showtable1(); /线框调用1,不用没次输 void showtable2(int i); /线框调用2,不用没次输 void save(); / 保存函数void load(); / 按班次查询函数void search(); /查询函数void change(); /修改函数* void quit(); / /退出函数*void ticketorder(); / /*售票函数* void ticketdelete(); /删除函数*int whether(int); /判断时间是否超出函数*void find(char s1,char s2); /查询函数/s1为班次/s2为终点站void deletemessage(); /删除函数int findnum(char s1); /班次查询函数void get(int,int); /* 验证用户合法性 */char userlogin() char utype;file *fp;int a=0,m=1, leap=0,i;char nam10,key10,type10,name10,pass10;while(!leap) i=0; fp=fopen(d:user.txt,rb);if(a3) printf(nntt 欢迎使用售票管理系统 n); printf(ntt=n); printf(ntt 请输入用户名:); gets(name); printf(ntt 请输入密 码:); while(i=9&(passi+=getch()!=r) /使输入的密码字符显示为星号字符* putchar(*); passi-1=0; while(!feof(fp) fscanf(fp,%s%s%s,nam,key,type); if(strcmp(name,nam)=0&strcmp(pass,key)=0) leap=1; utype=type0; break; if(!leap) a+; printf(输入有误,请重新输入!n);system(cls); if(a=3) printf(你的登录次数已达到三次,您无权继续登陆!n); break;fclose(fp);return utype;/*按班次查询函数*/void load() /按班次查询函数file *fp1,*fp2;if(fp1=fopen(d:bus.txt,rb)=null)system(cls); /刷屏printf(文件打开错误!n);getch(); /从控制台读取一个字符,但不显示在屏幕上 exit(0);if(fp2=fopen(d:bus0.txt,rb)=null)system(cls); /刷屏printf(文件打开错误!n);getch(); /从控制台读取一个字符,但不显示在屏幕上 exit(0); /退出fread(&class_num,sizeof(int),1,fp2); /读入信息fread(records,sizeof(class),class_num,fp1);/读入信息fclose(fp1);fclose(fp2); /文件关闭/*修改及增加班次*/ / 修改及增加班次*void get(int i,int j) for(;)printf(请输入发车时间(xx xx):n);scanf(%s%s,recordsi.hour,recordsi.min);if(atoi(recordsi.hour)=0)&(atoi(recordsi.min)=0)break;elseprintf(输入错误!n);getch(); /从控制台读取一个字符,但不显示在屏幕上printf(请输入起点站:n);scanf(%s,recordsi.from);printf(请输入终点站:n);scanf(%s,recordsi.to);printf(请输入行车时间:n);scanf(%f,&recordsi.hours);printf(请输入额定载量:n);scanf(%d,&recordsi.max);printf(请输入票价:n);scanf(%f,&recordsi.price);for(;)printf(请输入已售票数:n);scanf(%d,&recordsi.now);if(recordsi.now=recordsi.max)break;elseprintf(输入错误!n);getch(); /从控制台读取一个字符,但不显示在屏幕上/*保存函数*/void save() /保存函数file *fp1,*fp2; /文件行指针if(fp1=fopen(d:bus.txt,wb)=null) /打开文件、为输出打开一个二进制文件printf(文件打开错误!n);exit(0);if(fp2=fopen(d:bus0.txt,wb)=null) /打开文件、为输出打开一个二进制文件printf(文件打开错误!n);exit(0);fwrite(&class_num,sizeof(int),1,fp2); /写入文件信息fwrite(records,sizeof(class),class_num,fp1);fclose(fp1);fclose(fp2); /关闭文件/*增加函数*/void add() / /增加记录int i,t,j=5,n;load(); / 调用按班次查询函数system(cls); /刷屏 printf(请输入要增加的班次数目:n);scanf(%d,&n); /指向班次指针system(cls); /刷屏 for(t=0;tn;t+) printf(请输入第%d个班次信息:n,t+1);printf(请输入要增加的班次:n);scanf(%s,recordsclass_num.num);for(i=0;iclass_num;i+)if(strcmp(recordsclass_num.num,recordsi.num)=0)/判断字符串比较是否相等, 待比较的字符串 判断车次没重复 printf(输入错误!该班次已存在!请安任意键继续输入n);getch();system(cls); /刷屏break;if(i=class_num) get(i,j); /修改及增加班次*class_num+; /使班次数加1save(); /调用保存函数system(cls); /刷屏 printf(信息录入完毕,请按任意键返回管理界面n);getch(); system(cls); /刷屏 busmenu();/调用班次管理函数/*增加函数*/void newmessage() /*录入函数* int i,j=5,h;/file *fp; /定义文件型指针变量system(cls);/刷屏fp=fopen(d:bus0.txt,rb);printf(请输入要增加的班次数目:n);scanf(%d,&class_num); /指向班次指针system(cls); /刷屏for(i=0;iclass_num;i+) system(cls); /刷屏printf(请输入第%d个班次信息:n,i+1);h=-1;for(;h!=i;) /循环输出printf(请输入班次:n);scanf(%s,recordsi.num);for(h=0;hi;h+)if(strcmp(recordsh.num,recordsi.num)=0) /判断字符串比较是否相等, 待比较的字符串 printf(输入错误!该班次已存在!n);break; /返回get(i,j); /修改及增加班次*j=5;save();/调用保存函数printf(信息录入完毕,请按任意键返回管理界面n);getch(); system(cls); /刷屏busmenu();/调用班次管理函数void addbus() char num10; system(cls); printf(您是否是首次录入(y/n):n); scanf(%s,num); if(num0=y|num0=y)newmessage(); else add();/*售票统计函数*/void staticticket()int i,j,p=0;float t,q=0;system(cls); /刷屏load();i=2;system(cls); /刷屏printf(*message统计信息*n);printf(n |-|-|-|-|-|-|-|); printf(n | 终点站 | 班次 |发车时间|总座位数|售出票数| 票价 | 总售价 |);for(i=0,j=0;iclass_num;i+,j+=2) /按班次顺序输出 t=recordsi.now*recordsi.price; q=q+t;p=p+recordsi.now; printf(n |-|-|-|-|-|-|-|);if(whether(i) /判断时间是否超出函数*printf(n |%10s|%6s|%4s:%-3s|%8d|%8d|%6.1f|%8.1f|,recordsi.to,recordsi.num,recordsi.hour,recordsi.min,recordsi.max,recordsi.now,recordsi.price,t);else printf(n |%10s|%6s| 已发车 |%8d|%8d|%6.1f|%8.1f|,recordsi.to,recordsi.num,recordsi.max,recordsi.now,recordsi.price,t);printf(n |*|);printf(n | 售票总数 |%33d |,p);printf(n |*|); printf(n |总销售金额|%49.1f|,q);printf(n |*|n);printf(按任意键返回管理界面n);getch(); system(cls);/*显示所有函数*/void display() /显示所有函数int i,j,t;system(cls); /刷屏load(); / 调用按班次查询函数showtable1(); /线框调用1,不用没次输 for(i=0,j=0;iclass_num;i+,j+=2) /按班次顺序输出 t=recordsi.max-recordsi.now;printf(n|-|-|-|-|-|-|-|-|n);if(whether(i) /判断时间是否超出函数*printf(|%6s|%4s:%-3s|%10s|%10s|%8.1f|%8d|%6d|%6.1f|,recordsi.num,recordsi.hour, recordsi.min,recordsi.from,recordsi.to,recordsi.hours,recordsi.max, t,recordsi.price);else printf(|%6s| 已发车 |%10s|%10s|%8.1f|%8d|%6d|%6.1f|,recordsi.num,recordsi.from,recordsi.to,recordsi.hours,recordsi.max,t,recordsi.price);showtable2(j); /线框调用2/*打印表头*/void showtable1() /线框调用1,不用没次输int i=2;system(cls); /刷屏printf(*message车程信息*n);printf(n|-|-|-|-|-|-|-|-|); printf(n| 班次 |发车时间| 起点站 | 终点站 |行车时间|总座位数|剩余数| 票价 |);/*打印表尾*/void showtable2(int i) /线框调用2。不用没次输。printf(n|-|-|-|-|-|-|-|-|n);/*按班次查询函数*/int findnum(char s1) /查找班次 int i,h=0;showtable1(); /线框调用1,不用没次输 for(i=0;iclass_num;i+) int t; t=recordsi.max-recordsi.now;if(strcmp(s1,recordsi.num)=0) /判断字符串比较是否相等,如果符合则输出车次等信息 printf(n|-|-|-|-|-|-|-|-|n);printf(|%6s|%4s:%-3s|%10s|%10s|%8.1f|%8d|%6d|%6.1f|,recordsi.num,recordsi.hour,recordsi.min,recordsi.from,recordsi.to,recordsi.hours,recordsi.max,t,recordsi.price);h+=2; /加2使输出的框架合适break;showtable2(h); /调用框架2return i;/*修改函数*/void change() /修改函数*char num10,s10;int h=0,j=13,i;load(); / 调用按班次查询函数system(cls); /刷屏printf(请输入要修改的班次:n);scanf(%s,num);i=findnum(num); /调用班次查询函数 if(i=class_num)printf(输入错误,无此班次!n);getch(); /从控制台读取一个字符,但不显示在屏幕上elseprintf(确定修改(y/n)?n);scanf(%s,s);if(s0=y|s0=y)get(i,j); /修改及增加班次*save(); /调用保存函数printf(请输入任意键返回管理界面n); getch(); system(cls);busmenu();/*删除函数*/void deletemessage() /删除班次信息int i,h=0;char num10;system(cls); /刷屏printf(请输入要删除的班次:n);scanf(%s,num);i=findnum(num); /调用班次查询函数if(i=class_num)printf(输入错误,无此班次!n);getch(); /从控制台读取一个字符,但不显示在屏幕上elseprintf(确定?(y/n)n);scanf(%s,num);if(num0=y|num0=y)for(;iclass_num-1;i+) recordsi=recordsi+1;class_num-; /班次总数减1save(); /调用保存函数printf(删除成功!n);getch();printf(请按任意键返回主菜单n); getch(); system(cls);busmenu();/系统需要编写的的其它函数void find1(char s1,char s2)int i,h=0,t;showtable1(); /调用线框1for(i=0;iclass_num;i+)if(strcmp(s1,recordsi.hour)=0&strcmp(s2,recordsi.min)=0) /判断字符串比较是否相等, 待比较的字符串 t=recordsi.max-recordsi.now;printf(n|-|-|-|-|-|-|-|-|n);printf(|%6s|%4s:%-3s|%10s|%10s|%8.1f|%8d|%6d|%6.1f|,recordsi.num,recordsi.hour,recordsi.min,recordsi.from,recordsi.to,recordsi.hours,recordsi.max,t,recordsi.price);h+=2;break;showtable2(h);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 口腔黏膜试题及答案
- 2025年贵州遵义规划勘测设计集团有限公司招聘考试笔试试题(含答案)
- 2025全国消防安全知识竞赛考试题库(含答案)
- 2024年身体健康及养生保健知识竞赛试题(附含答案)
- 2024国家工作人员学法用法试题库及参考答案(版)
- 兽医传染病学模拟试题与答案
- 呼吸机相关肺炎预防与控制指南试题(附答案)
- CRRT护理相关知识考核试题及答案
- 2025年医院临床主治医师《口腔颌面医学影像诊断学》专业知识考试题库与答案
- (2024)“铸牢中华民族共同体意识”应知应会网络知识竞赛题库及答案
- 生产保密文件管理制度
- 胖东来库存管理制度
- 2025-2030中国马来酸酐接枝聚乙烯市场销售格局及投资战略深度调查研究报告
- T/CIMA 0011-2019食品中黄曲霉毒素B1胶体金免疫层析检测卡
- 外墙仿石漆合同协议书
- 股票代持合同协议书
- 广东2025年广东省特种设备检测研究院第一批招聘笔试历年参考题库附带答案详解
- 2025新人教版英语八上单词默写表(先鸟版)
- 起重吊装安全专项施工方案方案
- 基层卫生岗位(社区护理组)练兵和能竞赛试题
- 反恐安全风险评估记录
评论
0/150
提交评论