车票管理系统_第1页
车票管理系统_第2页
车票管理系统_第3页
车票管理系统_第4页
车票管理系统_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、课程设计得内容

车票管理系统

一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定得

发车时间,固定得路线(起始站、终点站):大致得行车时间,固定得额定载客量。如

班次发车时间起点站终点站行车时间额定载量已定

票人数

18:00郭县广汉245

30

26:30郸县成都0、540

40>7:00郸县成都0、540

20

410:00郸县成都0、540

(一)功能要求:用c/c++设计一系统,能提供下列服务:1作)录入班次信息

(信息用文件保存),可不定时地增加班次数据2©)浏览班次信息,可显示出

所有班次当前状总(如果当前系统时间超过了某班次得发车时间,则显示“此

班已发出”得提示信息)。

(3)查询路线:叮按班次号查询,叩按终点站查询

(4)售票和退票功能

A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能

售票,自动更新已售票人数

B:退票时,输入退票得班次,当本班车未发出时才能退票,自动更新已售票人

二、课程设计得要求与数据

1、进一步掌握和利用C语言进行程设计得能力;

2、进一步理解和运用结构化程序设计得思想和方法;

3、初步掌握开发一个小型实用系统得基本方法;

4、学会调试一个较长程序得基本方法;

5、学会利用流程图或N-S图表示算法;

6、掌握书写程序设计开发文档得能力。

三、课程设计应完成得工作

1、编写完成相应题目得程序;

2、编写课程设计报告,课程设计报告得内容应包括以下6个部分:

1)需求分析:包括设计题目、设计要求以及系统功能需求分析;

2)总体设计:包括系统总体设计框架和系统功能模块图;

3)详细设计:包括主要功能模块得算法设计思路以及对应得工作流程图;

4)调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过

程中存在问题得思考(列出主要问题得出错现象、出错原因、解决方法及

效果等,适当得包含结果截图);

5)总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地

方需要改进?课程设计过程中得学习体会与收获、对本次课程设计得认识

以及自己得建议等内容;

6)附录:主要源程序代码,含必要得注释。

3、答辩:在实验室建立程序运行得环境,并在指导教师得监督下,独立解

决问题、运行程序和回答教师提出得问题。

目录

第一章目得与要求5。

第二章总体设计G

第三章详细设计........................................................9

3、1功能模块设计.................................................9

3、2数据结构设计。11

第四章调试分析12。

第五章总结.........................................................14

第六章附录15。

参考文献25。

第一章目得与要求

编写目得:

便于车站管理部门对汽车班次信息得统计和管理,提高车站部门得工作效

率,能够更好得为市民服务,同时也便于旅客了解相关得信息,方便出行。

要求:

1、能够录入汽车班次信息,如班次号,发车时间,起点站,终点站,行车时间,额载

量,已订票人数等。

2>能够浏览班次信息,显示信息总和(如果已发出站得要要显示“已经开

出”)o

3、查询路线:可按班次号查询,可按终点站查询。

4、售票功能:当查询出已定票人数小于额定载量且当前系统时间小于发车

时间才能售禀,自动更新已售票人数。

5、退票功能:输入退票得班次,当本班车未发出时才能退票,自动更新已售票

人数。

第二章总体设计

1)系统总体设计框架

车票管理系统

2)主要功能流程图:

录入班次信息功能流

浏览班次功能流程图:录入班次

输入错误

进入查询界面

y

续输入起点站

次输入行车时间

输入额定载量

按Y继续查找,按任意键返回主菜单

售票系统工作流程图:

进入售票界面

依据提示操作

0设

第三章成1

L功

3、1功能模块设计

继续售票按Y,返回主菜单按任意键

3、1、1售票函数

while(选择得就就是“Y”)

{打印当前时间

打印“班次发车时间起点站终点站行车时间额定载量已定票人数”

forO

输出班次信息

J

提示输入车得班次

if(当查询出已定票人数小于额定载量且当前系统时间小于发车时间时)

{提示售票成功!

订票人数加1;

IF(额定载量小于订票人数)

提示票已售完!;

c1seif(输入得班次号小于零)

{该车不存在!}

elseif(当前系统时间晚于发车时间)

{

提示车已发出!

}

提示继续售票按Y,按任意键返回主菜单!

输入一个字符;

}

3、1、2退票函数

while(输入得就就是Y得时候)

提示输入要退票得车次;

输入一个字符;

if(输入得班次号存在和系统时间比发车时间晚)

{订票人数-1;

提示退票成功!

e1seif(输入得班次号小于零)

提示该班次不存在!;

)

elseif(要退票得那辆车得发车时间早过现在系统时间)

{

提示车已发出不能退票!;

提示继续退票请按(Y),返回主菜单按任意键;

输入一个字符;

}

)

3、1、3菜单函数

{

打印“车票管理系统”;

打印“系统时间”;

打印“录入班次信息”;

打印“查询班次信息”;

打印“售票”;

打印“退票”;

打印“保存车次信;”;

打印“退出系统”;

打印“请选择(0—6)";

打印“车票管理系统;

得到一个字符;

返回值;

3、2数据结构设计(可选)

structBuses{//定

structTimes

程序中涉)定采J?时间为一个数

(inthour;义汽车

据结构体(intmin;二汽车员元素,这样处

intsec;intnumber;

);

理数据容2

数据结构1structTimestime;

第四charstart[3

_____JrOA1.

本人在写代码得过程中觉得难控制得就就是那个班次数。因为本系统提供了

个录入信息功能,可以不定时得增加班次,即这个班次数就就是不确定得。而这

个班次数又影响到查询函数,退票函数,售票函数等,另外还影响到一些功能小

函数,如比较时间函数等c经过上网查找资料,我发现有一个巧妙得方法可以解决

这个问题,即设定一个静态局部变量(即代码中得H),这样每当班次号改变之

后这个H得值就和她得班次号一样大,这样就可以解决之前提到得问题了。另夕卜,

这个系统要有一个保存文件功能,由于本人对文件保存处理不清楚,设计过程中一

直搞不明白。最后在网上查到了相关信息才叩以弄出。

以下就就是该程序运行得部分结果:

主界面:

车票管理系统工口

XXXXXXXXXXXXXXXX*《2011.年12月15日)

菜单;

<1>录]近次信主

<2>显示施蓬息

<3>

<4>售票;

<5>退票J

<6>保容车次信息

<0>退出系统;

请选择《0-6〉:

信息录入图和浏览时刻表:

车的

nV次

k闫

时:1

1VJ间0012:2000

k主A

20站

>l30南

的:<

n点

k主

V,洛H

A^入

T的:

k主

V行

n月20

k需

>:载1

TR入500

k成<:

>功

菜按

任意键

续>

--<v

车辆时刻表

班次发车时间起点站终点站行车时间额定载量己定票人数

112:20:0南阳洛阳120.0500。〈己发出〉

1条记录?

按任意键返回主菜单..〜

查询售票图:

安次

询i

查l

输<1

-2>号:

次:

.R

车辆时刻表

班次发车时间起点站终点站行车时间额定载量已定票人数

112:20:0南阳洛阳120.0500。〈已发出)

继续查找请按<Y),返回主菜单按任意键..・

退票图:

请输入车次:1

车己发出不能退赛?

继续退票请按《丫),返回主菜单按任春键..・■

保存信息图:

车票管理系统=口

XMXMMMXMXMXXXXMXX(2011.年•1.2.月15日,

菜单;

<1>录入班次信息;

<2>显示班次信息;

<3>看施以福息;

<4>售票;

<5>退票;

<6>保存车次信息;

<0>退出系统;

请选择<0-6〉:6

文件保存成功?

第五章总结

经历近几天得学习和锻炼,这个车票管理系统算就就是做出来了(不过我承认

我就就是参考网上代码所得,我基本能看懂)。她基本有前面提到过得功能,即录入

班次信息,浏览班次信息,售票和退票,保存文件。有一个扩展功能,即可以退出系统

(代码中得sys_exit()函数)。

不过目前我发现她一个不足之出,就就就是不能对输入时间得格式起限制作

用。如我可以输入26:30:00,她系统不会提示说输入错误提示再输入一个正确得

时间。还有,就就就是整个代码条理不够清晰,只就就是用到一个主函数和调用其

她函数,可读性差!我认为最好就就是能分模块化处理,分文件处理,这样条理性强,

可读性高,再者修改也容易。不过由于本人水平有限,不能这样处理。

经历这近几天得锻炼,我也比较满意自己得表现。在这过程中我查阅了很多

书,学到了很多课堂上没有得东西。很多知识我之前不知道得现在大部分都知道

了,不过理解不够深透,,导致在这近几天里碰了不少壁!

近几天我觉得编程既就就是一项费时费力但也就就是有趣得事。说她费时费

力就就是因为她繁琐,而有趣就就是因为我很享受一段段得小程序编成功之后得

喜悦,苦尽干来啊。我觉得编程就就是一件快乐得差事,我想我今后会加把时间学

习她,把她学好。

第六章附录

程序代码:

#include11stdio、h”

#include"time>h”

#inC1udenwindowssh”

#include"string、h"

#inc1ude“dos、h"

#include"std1ib、h”

#include”ctype、h”

#defineMax50//最大贮赌量

#definenu110

StaticintH=0;

structTimes

{〃定义时钟

inthour;

intmin;

intsec;

};

structBuses{//定义汽车

intnumber;

structTimcstime;

charstart[30];

charend[30];

floattimc_cost;

intcarry_number;

intbOoKnumber;

};

structBusesbus[Max];

time_tnow=time(0);

tm*tnow=1ocaltime(&now);

voidload0;//载人车次信息

void1u(void);//声明录入函数

voidchaxun(struetBuscsbus[]);//声明查询路线函数

voidsave(structBusesbus[]);//声明保存函数

intcaidan。;〃声明菜单录数

voidliulaii(sLruciBusesbus|]);//声明浏览函数

voidtuipiao(structBusesbus二]);//退票

voidShoupiao(StructBusesbus[]),/声明售票函数

voidxitongtuichuQ;//声明退出函数

〃工具函数

struCtBusescopy(structBuscSbl,structBusesb2);//赋值

voidsort_time(struetBusesbus[]);//声明按时间发车得先后顺序排序

intparetime(structTimest1,structTimest2);//时间比较函数

intparc_systimc(structBusesbus,tm*T);//比较发车时间与当前系统时间得

函数

voidprint(StruetBusesbuS);//声明输入出函数

intnumber_search(structBusesbus[],intnum);//声明按班次查询

函数

intcnd_scarch(structBuscSbus,CharendS[));//声明按终点查询函数

voidmain(){〃主函数

while(l){

syStem("c1s11);

switch(caidan()){

case1:1u();break;

case2:1iu1an(bus);break;

case3:chaxun(bus);break;

casc4:shoupiao(bus);break;

case5:tuipiao(bus);break;

case6:save(bus);break;

case0:xitongtuichu();break;

)

}

}

intparc_systimc(StractBuscsbus,tm*T){〃与系统时间得比较函数

if(bus>time、hour>=T—>tm_hour){

return1;

if(bus>time、min>=T->tm_min){

return1;

if(bus、time、sec>T->tm_sec)

rcturn1;

elsereturn0;

}

return0;

}

return0;

}

structBusescopy(structBusesb1,structBusesb2){

bl、bOoK_numbcr=b2>bOol<_numbcr;

bl、carry_number=b2^carty_number;

strcpy(bl>end,b2>end);

bl、numbcr二b2、number;

strcpy(bl、start,b2>start);

bl、time、hour=b2>time、h0ur;

bl、time、min=b2stimc^min;

bl、time、sec=b2>time、sec;

b1time_cost二b2、timecost;

returnbl;

}

voidliuIan(struCtBuseSbus[]){//浏览车次

getchar();

system(nc1s”);

inti;

printf("\n\t\t\t\t车辆时刻表\n11);

printf("\t\t\t**************************\n"),

printf(”\t班次发车时间起点站终点站行车时间额定载量已定票人

数");

printf("\n\t——----————————---------——-----——————-------——\

n“);

sorttime(bus);

for(i=0;i<H;i++){

print(busEi]);

}

printf(H\t——---------------——--------------——----------———-———

"\n");

printf(,,\t\t\t\t%d条记录!\n”,H);

printf(”\t按任意键返回主菜单、、、”);

gctchar0;

}

intpare_time(structTimest1,structTimest2){//比较时间大小

if(t1xhour>t2xhour){

return1;

if(t1xmin>=t2>min){

rcturn1;

if(tl>sec>=t2>sec)

return1;

elsereturn0;

}

return0;

return0;

}

voidsOrL_Liiiic(struCLBusesbus口){//按发车时间排序

inti,j,k;

structBusesb={0};

fbr(i=0;i<H-l;i++){

k二i;

for(j=i+1;j<H;j++){

if(pare_time(bus[i]、time,bus[j]、time)){

k=j;

if(k!=i){

b=copy(b,bus[i]);

bus[i]=Copy(buS[i],bus[k]);

bus[k]=copy(buS[k],b);

)

intnumber_search(structBusesbus[],intn){〃按班次查询

inti;

for(i=0;i<H;i++){

if(bus[i]、number==n)

returni;

)

return-1;

}

intend_scarch(structBusesbus,CharendS[]){//按终点站查询

if(strcmp(bus、end,ends)==0)

return1;

else

return—1;

}

voidprint(structBuScsbuS){

if(!pare_systime(bus,tnow);

printf(”\t%-6d%-2d:%-2d:%-2d%6s%8s%8、1f%10d%l0d(已发出)\n”,

bus>number,bustime、hour,

bus、timesmin,bus>time、sec,bus>start,bus>end,bus>time_c

ost,bus、Carry_number,bus>bool<_number);

else

printf("\t%-6d%-2d:%・2d:%—2d%6s%8s%8、lf%10d%10d\n”,bus、numb

er,buSNtime>hour,

bus、time、min,busstime、sec,bus、start,bus、end,bus、time_cos

t,bus、carry_number,bus>bool<_number);

)

inicaidan(){

inta;

System("cis");〃以下就就是菜单图案

printf(11\n\nM);

printf(n\t\t车票管理系统\n“);

printf(11\t\t*****************(%d年%(1月%d日)\n11,

1900+tnow—>tm_year,tnoon+1,tnow->tm_mday);

ptintf(1\t\t|----~---———-------~——-------------I\n);

printfC\t\t|菜单|'n”);

printf("\t\t|-----—-----———--------—————-----------------------|\n

printf("\t\t|(1)录入班次信息I\n;

printf(n\t\t|———————----—————-------------------——I\n");

printf(n\t\t|(2)显示班次信息|\n0);

printf(M\t\t|---------------—————-----------------------一-—-—-|\n");

printff'\t\t|(3)查询班次信息|\nn);

printf(11\t\t|-------------------------------------1\n11);

printf(4)售票|\n");

printf(H\t\t|---------————------------------------|\n");

printf(H\t\t|(5)退票|'n");

prin11--——————------—------------------------|\nH);

printf(n\t\t|(6)保存车次信息|\n.);

printf(,f\t\t|——---------------—------------——----|\nn);

printf(H\t\t|(0)退出系统|\n");

printf("\t\t|-----------------------------------—I\nM);

printf("\n\t\t请选择(0—6)

scanf(11%d11,&a);

return(a);

}

voidsave(structBusesbus[]){//保存函数体

getchar();

FILE*fp;

inti;

if((fp=fopen(nBus_system","wb"))==null){

printf("不能打开文件\n”);

return;

}

for(i=0;ivH;i++)

if(fwrite(&bus[i],sizeof(structBuses),1,fp)!=1)

printf("文件保存出错!\n");

fC1ose(fp);

printf("文件保存成功!」);

getchar();

)

voidlu(){〃录入函数

inti=H,f=1;

charflag=zY*;

whiIe(toupper(f1ag)==,Y,){

system("cis");

printf(M\n\t\t车次信息录入\n请输入车得班次:");

scanf("%d”,&bus[i]>number);

getChar();

whilc(number_scareh(bus,bus[i]>number)>=0){

printf(n您输入得班次已存在请重新输入!:“);

scanf("%d”,&buS[i]、number);

getchar();

}

printf(”请输入时间如:(20:3如00):");

scanf(H%d:%d:%d”,&bus[i]、time^hour,&bus[i]>time、min,&b

us[i]>time、sec);

getchar();

printf("请输入车得起点站:”);

scanf(”%s”,bus[i]、start);

getcharQ;

printf("请输入车得终点站:u);

scanf(n%sH,bus[i]>end);

getchar();

printf(”请输入行车时间:*');

scanf('*%f",&bus[i]>time_cost);

gctChar();

printf("请输入车得额定载量:”);

scanf("%d”,&bus[i]>carry_number);

gctcharQ;

bus[i]、booK_number=0;

H++;

i++;

printf(11信息录入成功!\n”);

printf,继续录入请按(Y),返回主菜单按任意键、、、");

flag=gctcharQ;

}

}

voidchaxun(structBuseSbus口){//查询路线

inta,i=0;

intm=0;

charf1ag=,Y';

whi1e(toupper(flag)==,Y,){

charend[30];

system("cis");

printf(”\n按班次查询请按l\n终点站查询请按2\n请选择(1-2;

seanfa);

whi1e(a!=l&&a!=2){

print。注意只能选择1或2!\n请重新输入

scanf(11%d”,&a);

getchar();

)

Switch(a)

{

caSe1:{

printf(”请输入车次号巧;

scanf(u%dH,&m);

getChar();

i=number_search(bus,m);

if(i>=0){

Printf(H\n\t\t\t\t车辆时刻表\n”);

pr山tt\t**************************、1”)•

printf("'t班次发车时间起点站终点站行车时间额定载量已定票

人数)

printf(\n'、、t———---------————---------------

—一\心;

print(bus[i]);

printf(11\t----------—————---------------------------------------------—————--

------'n");

)

else

printf(n\n\t\t\t没有您要查找得记录!\n”);

}brcak;

case2:{

printf("请输入车得终点站:");

scanf(H%S11,cnd);

getchar();

while(i<H){

if((m=cnd_scarch(bus[i],cnd))==1){

printf(H\n\t\t\t\t车辆时刻表\n");

printf("\t\t\t***************,k*********

printf(”\t班次发车时间起点站终点站行车时间额定载量已定票人数”);

printf("\n\t----------—----------———--------------—-------------——------------———

-\n");

print(bus[i]);

i++;}

brcak;

}

for(i;i<H;i++i{

if(end_search(bus[i],end)==1)

print(bus[i]);

}

if(m==l)printf("\t——----------——-------------------------------------———-----

—_-------_——\口");

}

for(i=0;i<H;i-+){

if(end_search(bus[i],end)!=1)

printf("\n\t\t\t没有到该站得车!\n”);break;

print继续查找请按(Y),返回主菜单按任意键、、、”);

flag=getchar();

voidshoupiao(structBusesbus口){〃售票函数

inti,n;

charflag=Y;

while(toupper(flag)==*Y1){

system(ncIs”);

printf(11\n\t\t\t\t车辆时刻表\n");

printf(n\t\t\t**************************当前时间(%左%(1:%d)\

n",

tnow->tmhour,tnow->tmmin,tnow->tmsec);

printf(”\t班次发车时间起点站终点站行车时间额定载量已定票人

数)

pr1ntf(,"nt-------~------------------~~------

--————-——\n

for(intj=0;j<H;j++){

print(bus[j]);

printf(11\t———---------———-----------------------------一—―-

——一————\nn);

printf(n\t请输入车得班次:");

Scanf(H%d",&i);

n二number_search(bus,i);

getchar0;

if(n>=0&&bus[n]>carry_number>bus[n]sbooK_number&&pare_systim

e(bus[n],tnow))\

printf(H\n\t\t\t售票成功!\nn);

bus|n]、booK_numbcr++;

primf("\L班次发车时间起点站终点站行车时间额定载量已定票人

数");

printf("\n\t--―■------------------—~~----------——--

-----\n");

print(bus[n]);

printf("\n\t----------------------——----------------—————-----------—

----——---------\nH);

if(bus|n]、carry—number<=bus[n]>booK_number)

printf(”\n\t\t\t该次车得票已售完!\n“);

e1Seif(n<0)

printf(n\n\t\t\t该次车不存在!\n");

eIseif(!pare_systime(bu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论