资源描述
-
数学与计算机学院
课程设计说明书
课 程 名 称: 程序设计语言课程设计
课 程 代 码:
题 目: 车票管理系统
年级/专业/班: 2008级软件工程 班
学 生 姓 名:
学 号:
开 始 时 间: 2009 年 12 月 24 日
完 成 时 间: 2010 年 1 月 11 日
课程设计成绩:
学习态度及平时成绩(30)
技术水平与实际能力(20)
创新(5)
说明书(计算书、图纸、分析报告)撰写质量(45)
总 分(100)
指导教师签名: 年 月 日
C 语 言 课 程 设 计 任 务 书
学院名称: 数学与计算机学院 专业: 软件工程 年级: 2008
一、设计题目
车票管理系统
二、主要内容
一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如
班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数
1 8:00 郫县 广汉 2 45 30
2 6:30 郫县 成都 0.5 40 40
3 7:00 郫县 成都 0.5 40 20
4 10:00 郫县 成都 0.5 40 2
…
(一)功能要求:用c/c++设计一系统,能提供下列服务:
(1)录入班次信息(信息用文件保存),可不定时地增加班次数据
(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线:可按班次号查询 ,可按终点站查询
(4)售票和退票功能
A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数
B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数
(二)其它要求:
(1) 只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3) 学生可自动增加新功能模块(视情况可另外加分)
三、具体要求
模块化程序设计;锯齿型书写格式;必须上机调试通过。写出设计的报告。
设计报告格式:
1、设计目的
2、总体设计(程序设计组成框图、流程图)
3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)
4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施
5、源程序清单和执行结果:清单中应有足够的注释
四、主要技术路线提示
文件的读入;静态存储或动态存储及其应用。
五、进度安排
2周完成。1天进行分析,6天编写软件,3天写出课程设计报告并上交。
六、完成后应上交的材料
设计报告纸质文档和电子文档各一份,软件一套。
七、推荐参考资料
《C语言程序设计》
指导教师 签名日期 年 月 日
系 主 任 审核日期 年 月 日
目 录
摘要 ……………………………………………………………………………………5
第1章 引言 ……………………………………………………………………………6
1.1问题的提出……………………………………………………………………6
1.2车票管理系统开发的必要性…………………………………………………6
第2章 流程图 …………………………………………………………………………7
第3章 功能模块设计及说明………………………………………………………………8
3.1 程序设计功能说明…………………………………………………………8
3.2 程序模块功能………………………………………………………………8
3.3 系统测试……………………………………………………………………20
3.4 系统问题运行描述…………………………………………………………20
第4章 设计总结……………………………………………………………………………21
参考文献……………………………………………………………………………………22
教师评语 ……………………………………………………………………………………23
摘 要
随着计算机的普及越来越多的企业、家庭、个人开始享受到了E网时代的无限精彩。网上购物、远程商务、网上开店等使很多人的梦想在网络世界里得到了充分的实现。网上有很多资源我们可以利用。互联网成为了学习的资源、交流的手段。越来越多的办公自动化设备进入了众多公司、学校和家庭中等,给我们日常工作、学习、和生活等带来了极大的方便。因此为了方便车票的管理,车票管理系统已经成了车辆管理中的一项主要的管理工具。若遵从以往旧式的工作方式,该工作的工作量大,管理繁琐,既耗人力,又耗物力;如今面对大量的人员流动,有大量的信息需要综合处理。以往的工作人员手工处理方式已经很难跟上现代化的步伐。随着计算机技术及网络通讯技术的飞速发展,许多交通部门已经有了较好的计算机应用甚至网络硬件建设基础。因此为车辆管理工作的现代化、科学化水平,保证信息处理的即时化、准确化,开发一套对车票进行管理的软件是极其重要的,而且是必需的,而这次设计的车票管理系统。它包括了以下几个主要内容:
1. 按班次号查询
2. 按终点站查询
3. 售票
4. 退票
5. 浏览信息
6. 退出
系统应具有良好的界面、必要的交互信息和较好的健壮性。操作人员能快捷简单地进行操作。开发功能完善及安全可靠的管理系统可以大大地提高车辆管理的实际应用,即时准确地获得需要的信息,充分发挥人员的工作潜力。
关键词:计算机、车票管理系统
第一章 引言
1.1问题的提出
随着计算机的普及,网络进入大众的家庭,车票管理系统已经成了车辆管理中的一项主要的管理工具。若遵从以往旧式的工作方式,该工作的工作量大,管理繁琐,既耗人力,又耗物力;如今面对大量的人员流动,有大量的信息需要综合处理。以往的工作人员手工处理方式已经很难跟上现代化的步伐。随着计算机技术及网络通讯技术的飞速发展,许多交通部门已经有了较好的计算机应用甚至网络硬件建设基础。因此为车辆管理工作的现代化、科学化水平,保证信息处理的即时化、准确化,开发一套对车票进行管理的软件是极其重要的,而且是必需的。
1.2车票管理系统开发的必要性
在车票管理系统中,查询车辆情况是一个很重要的问题。一个查询者在坐车之前需要了解车辆的发车时间,行车的时间,订票人数等问题,之后他才可以决定他要不要订票。在他的查询中,他可以选择按班次号查询,也可以选择按终点站查询,两种查询方式动方便快捷,都有良好的健全性。
在这系统之中,售票和退票是这些问题中的重点。当一个人浏览车辆的情况后,他就要根据车辆的情况进行订票或者退票。售票和退票都要根据车辆的综合信息进行判断,根据时间和订票人数决定可不可以售票和退票。
这些情况的信息量是很大的,以往的人员接待管理繁琐,既耗人力,又耗物力;如今面对大量的人员流动,有大量的信息需要综合处理,
不能满足当今社会发展的需要。而计算机的信息化管理就显的日益重要,可以显示它的优越性。开发一套车辆管理系统是社会发展的必然产物,是极其必要的。
第2章 流程图
流程图的建立可以使程序更加直观、灵活、自由、形象。它的描述如下:
开始车票
管理系统
从文本录入班次信息
建立链表,把车辆信息放入
按终点站查询
车没发出
额定>订票
按班次查询
售 票
退 票
返回主菜单
返回主菜单
第3章 功能模块设计及说明
3.1 程序设计功能说明
一. 查询路线功能:
1. 可按班次序号查询;
2. 可按终点站查询。
二. 售票和退票功能
1. 当查询出已定票人数小于额定数量且当前系统时间小于发车时间时才能售票,自动更新已售票人数;
2. 退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。
三.浏览车次信息
显示出所有班次信息。
这些子功能都是在C++环境中运行,车辆的信息都存在链表文件中,当查询路线时,可以输入他要到达的地点,就可以从文件菜单中得到相应的提示信息,再进行必要的操作就可以查询车辆的信息,进行买票或者退票。
3.2功能模块设计
1.头文件,定义所需结构体,全局变量
#include<stdio.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>
typedef struct chefile
{
int banci;
char time1[10];
char place1[21];
char place2[21];
float time2;
int maxnum;
int booknum;
struct chefile *next;
}bus,*PINF; //结构体类型的指针
bus *head; //建立班次头结点
bus *rear;
2.主菜单显示
int main() //主程序
{
system("color 2f");
head=rear=(bus *)malloc(sizeof(bus));
head->next=NULL;
//函数声明
void Read_In(); //文件读入
void Scan(); //浏览全部信息
void Lookup(); //查询信息
void Buyticket(); //预定车票
void Cancelticket(); //退订车票
void Save_In(); //把数据重新保存到文件中
Read_In(); //读入信息
int i=0;
while(i!=5)
{
printf("\n");
printf("**************************\n\n\n");
printf("*******车站管理系统*******\n"); //总菜单
printf(" 1、 浏览信息 \n");
printf(" 2、 查询信息 \n");
printf(" 3、 预订车票 \n");
printf(" 4、 退订车票 \n");
printf(" 5、 退出系统 \n");
printf("**************************\n");
printf("请选择您要操作的功能序号:");
scanf("%d",&i);
switch(i)
{
case 1:Scan();break;
case 2:Lookup();break;
case 3:Buyticket();break;
case 4:Cancelticket();break;
case 5:break;
default:printf("您输入了错误的序号,请确保您的输入为1--5.\n");break;
}
}
Save_In(); //保存信息
return 0;
}
通过主菜单的显示,乘客可以根据显示的菜单选择需要的操作,然后进入相应的功能模块。
3.班次信息的录入、保存及浏览
void Read_In() //班次信息文件读入
{
FILE *fp;
if((fp=fopen("chefile.txt","r+"))==0)
{
printf("\n打开文件错误!\n");
exit(0);
}
while(!feof(fp)) //读取文件并测试是否抵达文件尾
{
bus *p;
p=(bus*)malloc(sizeof(bus)); //开辟内存空间
fscanf(fp,"%d%s%s%s%f%d%d\n",&p->banci,&p->time1,&p->place1,&p->place2,&p->time2,&p->maxnu
m,&p->booknum);
rear->next=p; //在bus单链表中依次插入下一结点
rear=p;
rear->next=NULL;
}
fclose(fp);
}
void Save_In() //保存数据
{
FILE *fp;
if((fp=fp=fopen("chefile.txt", "r+"))==0)
{
printf("\n打开文件错误!\n");
exit(0);
}
PINF p=head->next;
while(p!=NULL)
{
fprintf(fp,"%d\t%s\t%s\t%s\t%.2f\t%d\t%d\n",p->banci,p->time1,p->place1,p->place2,p->time2,p->maxnum,p->booknum);
p=p->next;
}
fclose(fp);
}
void Scan()
{
PINF p=head->next;
printf("\n各班次信息如下:\n");
printf("\n班次号\t发车时间\t起点站\t终点站\t行车时间 额定载客量 已订票人数\n");
printf("____________________________________________________________________________\n");
while(p!=NULL)
{
printf("%d\t%s\t\t%s\t%s\t%.2f\t\t%d\t\t%d\n",p->banci,p->time1,p->place1,p->place2,p->time2,p->maxnum,p->booknum);
p=p->next;
}
printf("____________________________________________________________________________\n");
}
通过此模块,系统可以自动保存修改后的班次相关信息,并可在乘客需要浏览时显示出所有的班次信息。
4.班次信息查询
void Lookup() //查询班次信息
{
system("color 2f");
void SearchbyNum(); //函数声明
void SearchbyEnd(); //函数声明
int i,j=0;
while(j!=1)
{
printf("\n");
printf("**************************\n");
printf(" 1.按班次号查询\t\n");
printf(" 2.按终点站查询\t\n");
printf("**************************\n");
printf("请选择您要查询的方式:");
scanf("%d", &i);
switch(i)
{
case 1: SearchbyNum(); break;
case 2: SearchbyEnd(); break;
default : printf("\n您输入了错误的序号,请确保您的输入为1--2.\n");
break;
}
printf("**************************\n");
printf("\n1.返回主菜单 2.继续查询 : ");
scanf("%d",&j);
}
}
void SearchbyNum() //按班次号查询班次
{
system("color 2f");
int GetHour(char *s);
int GetMinute(char *s);
PINF p,q; //定义两个结点
int num; //要查询的班次号
int j=0; //判断班次
p=head->next;
printf("\n请输入您要查询的班次号: ");
scanf("%d",&num);
while(p!=NULL)
{
if(p->banci-num==0)
{
q=p;
printf("\n");
printf("班次:\t");printf("%d\n",q->banci);
printf("发车时间:\t");printf("%s\n",q->time1);
printf("起点站:\t\t");printf("%s\n",q->place1);
printf("终点站:\t\t");printf("%s\n",q->place2);
printf("行车时间:\t");printf("%.2f\n",q->time2);
printf("额定载客量:\t");printf("%d\n",q->maxnum);
printf("已定票人数:\t");printf("%d\n",q->booknum);
time_t t;
struct tm *timeinfo;
time(&t);
timeinfo = localtime(&t);
if(GetHour(q->time1)<timeinfo->tm_hour)
printf("\n此班次车已发出!\n");
else
if(GetHour(q->time1) == timeinfo->tm_hour)
{
if(GetMinute(q->time1)<=timeinfo->tm_min)
printf("\n此班次车已发出!\n");
else
printf("\n此班次车尚未发出!\n");
}
else
printf("\n此班次车尚未发出!\n");
j++;
}
p=p->next;
}
if(j==0)
printf("\n对不起,不存在此班次!\n");
}
void SearchbyEnd() //按终点站查询班次
{
system("color 2f");
int GetHour(char *s);
int GetMinute(char *s);
PINF p,q; //定义两个结点
char place2[21]; //要查询的终点站名
int j=0;
p=head->next;
printf("\n请输入需要查询的终点站名: ");
scanf("%s",place2);
while(p!=NULL)
{
if(strcmp(p->place2,place2)==0)
{
q=p;
printf("\n");
printf("班次:\t");printf("%d\n",q->banci);
printf("发车时间:\t");printf("%s\n",q->time1);
printf("起点站:\t\t");printf("%s\n",q->place1);
printf("终点站:\t\t");printf("%s\n",q->place2);
printf("行车时间:\t");printf("%.2f\n",q->time2);
printf("额定载客量:\t");printf("%d\n",q->maxnum);
printf("已定票人数:\t");printf("%d\n",q->booknum);
time_t t;
struct tm *timeinfo;
time(&t);
timeinfo=localtime(&t);
if(GetHour(q->time1)<timeinfo->tm_hour)
printf("\n此班已发出!\n");
else
if(GetHour(q->time1)==timeinfo->tm_hour)
{
if(GetMinute(q->time1)<=timeinfo->tm_min)
printf("\n此班已发出!\n");
else
printf("\n此班次车尚未发出!\n");
}
else
printf("\n此班次车尚未发出!\n");
j++;
}
p=p->next;
}
if(j==0)
printf("\n对不起,不存在此班次!\n");
}
这一模块的功能主要实现乘客查询要的班次信息,该查询主要可以分为以班次查询和以终点站查询,为乘客的需要带来方便。
5.订票功能
void Buyticket() //预定车票
{
system("color 2f");
int GetHour(char *s);
int GetMinute(char *s);
int i=0;
while(i!=1)
{
int num,j=0;
PINF p,q; //定义两个结点
p=head->next;
time_t t;
struct tm *timeinfo;
time(&t);
timeinfo=localtime(&t);
printf("\n请输入你要购买的班次号:");
scanf("%d",&num);
while(p!=NULL)
{
if(p->banci-num==0)
{
q=p;
j++;
if(q->booknum<q->maxnum)
{
if(GetHour(q->time1)>timeinfo->tm_hour)
{
printf("\n你已订票成功,请按时上车,谢谢使用!\n");
q->booknum++;
}
else
if((GetHour(q->time1)==timeinfo->tm_hour) && (GetMinute(q->time1)>timeinfo->tm_min))
{
printf("\n你已订票成功,请按时上车,谢谢使用!\n");
q->booknum++;
}
else
printf("\n对不起,该班次车已经发出,请明天再来!谢谢使用!\n");
}
else
printf("\n对不起,该班次车已经发出,请明天再来!谢谢使用!\n");
}
p=p->next;
}
if(j==0)
printf("\n对不起,不存在此班次!谢谢使用!\n");
printf("*******************************\n");
printf("\n1. 返回主菜单 2. 继续订票 : ");
scanf("%d",&i);
}
}
该模块主要用于实现乘客订票,为乘客订票带来方便。
7. 退票功能
void Cancelticket() //退订车票
{
system("color 2f");
int GetHour(char *s);
int GetMinute(char *s);
int i=0;
while(i!=1)
{
PINF p,q;
p=head->next;
int num,j=0;
time_t t;
struct tm *timeinfo;
time(&t);
timeinfo=localtime(&t);
printf("\n请输入你要退票的班次号:");
scanf("%d",&num);
while(p!=NULL)
{
if(p->banci-num==0)
{
q=p;
j++;
if(GetHour(q->time1)>timeinfo->tm_hour)
{
printf("\n你已退票成功,谢谢使用!\n");
q->booknum--;
}
else
if((GetHour(q->time1)==timeinfo->tm_hour) && (GetMinute(q->time1)>timeinfo->tm_min))
{
printf("\n你已退票成功,谢谢使用!\n");
q->booknum--;
}
else
printf("\n对不起,该班次车已经发出,不能退票!谢谢使用!\n");
}
p=p->next;
}
if(j==0)
printf("\n对不起,输入错误,不存在此班次车!谢谢使用!\n");
printf("**************************\n");
printf("\n1. 返回主菜单 2. 继续退票 : ");
scanf("%d",&i);
}
}
该模块主要用于实现乘客退票,为乘客退票带来方便。
7.时间模块
int GetHour(char *s)
{
char *p,*q;
p=(char *)malloc(10);
strcpy(p,s);
q=p;
while(*q!=':')
{
q++;
}
*q='\0';
return atoi(p); //字符串到浮点数的转换
}
int GetMinute(char *s)
{
char *p;
p=(char *)malloc(10);
strcpy(p,s);
while(*p!=':')
{
p++;
}
p++;
return atoi(p);
}
3.3.系统测试
测试数据:
1 6 00 郫县 广汉 2 45 30
2 6 30 郫县 成都 0.5 40 40
3 7 00 郫县 成都 0.5 40 20
4 10 00 郫县 成都 0.5 40 20
5 22:30 武汉 南京 3. 35 15
3.4.系统运行问题描述
当要求用户输入数字选择,若输入字符型数据或其他非整型数据时存在系统不能运行的问题。
第4章 程序总结
由这次设计,我更深入的了解了C语言,也对其中的
展开阅读全文