课程设计
哈夫曼编码/译码器
教室数据管理
电网建设造价计算
计算机竞赛管理系统
航班信息查询和检索系统
一、设计任务及要求
一车站每天有n个发车班次,每个班次都有一个班次号(1、2、3···n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。
根据以上情况设计出相应的车票管理系统,具体功能如下:
- 录入功能:入班次信息,可不定时地增加班次数据
- 浏览功能:浏览班次信息,可显示出所有班次当前状况(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
- 查询功能:查询路线:可按班次号查询,可按终点站查询。
- 售票功能:当查询出已定票人数小于额定载客量且当前系统时间小于发车时间时才能售票,自动更新已售票人数。
- 退票功能:退票输入退票的班次,当本班车未发出时才能退票。
二、设计导向
1. 设计目的
- 巩固和加深对数据结构课程所学知识的理解,了解并掌握数据结构与算法的设计方法;
- 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
- 提高综合运用所学的理论知识和方法,独立分析和解决问题的能力;
- 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;
- 培养查阅资料,独立思考问题的能力。
2. 总体设计方案
总体设计框架图:
- 创建一个线性表用于表示每一班次的多种信息。
- 通过switch函数对不同功能函数选择调用以及退出。
- while函数对switch函数进行重复调用实现运行一次程序便对多个功能使用。
3. 详细设计
-
录入功能:用switch函数选择case1,再通过scanf函数将每一个班次信息依次输入线性表,完成班次信息的录入,返回菜单界面。
-
浏览功能:switch函数选择case2,先校准系统时间,再用for循环调出线性表每一个班次的时间与系统时间进行比对,晚于系统时间则输出此班次信息,早于系统时间则输出“此班次已发出”。For循环结束所有班次发车时间与系统实际比对以后,完成所有班次信息的浏览。返回菜单界面。
-
查询功能:switch函数选择case3,此时再用switch函数对查询方式进行选择。case1为按班次号查询,输入班次,输出线性表中对应位置的班次信息;case2为按终点站查询,输入终点站,用for循环与每一个班次信息的终点站比对,相同则输出完整班次信息;case0为退出这一层switch循环返回菜单。
-
售票功能:switch函数选择case4,先输入想购票的起点、终点站,用for循环与线性表里每一个班次信息起点、终点站比对,相同则输出这一班次。若for循环结束后无符合要求班次,则输出“未查询到相关车次”。再在符合要求的班次里选择班次号,选择的班次会与系统时间比对,早于则输出班次已发出,晚于则输出购票成功且此班次信息的已订票人数项加一。返回菜单。
-
退票功能:switch函数选择case5,输入退票班次号,将此班次信息的发车时间与系统时间比对,早于系统时间则输出“此班已发出无法退票”,晚于系统时间则输出“退票成功”,且将此班次信息的已订票人数减一。返回菜单。
4. 系统测试与结果分析
三、课程设计总结
这一次的数据结构课程设计我分配到的任务是《车票管理系统》。
回顾此次课程设计,至今让我感慨颇多从拿到题目到变成代码,从理论到实践。时间不长却学会了很多多东西,不仅巩固了以前书本上的知识,而且有了许多书本和老师教不了的实践体验。例如题目需要一个主菜单对于多个功能可选择调用,最开始我想到的是利用if else语句实现,但在计划进行的过程中if else语句的繁杂和重复十分影响代码的可执行性,所以最后还是选用了多重选择结构更加清晰的switch函数,再后来主要功能都完成后又有了问题,运行代码后执行一个功能便会终止程序。我希望对switch函数进行多次调用,while函数自然而然就用上了。文章来源:https://www.toymoban.com/news/detail-490593.html
简而言之,这次课程设计使我懂得了理论和实际相结合是非常重要的,通过理论指导实际方向,通过实际去应用理论成果,从而提高自己实际动手能力和独立思考能力。文章来源地址https://www.toymoban.com/news/detail-490593.html
四、附录:源程序清单
#include<stdio.h>
#include<string.h>
#include<time.h>
#define MAXSIZE 10
#include <iostream>
struct Time
{
int hour;
int min;
};
struct infomation
{
int number;
struct Time play;
char qidian[5];
char zhongdian[5];
int cartime;
int zaike;
int proson;
}D[MAXSIZE];
int main()
{
system("color 75");
int a,b,x,i=0;
int input(int x);
int browse(int x);
int query(int x);
int seticket(int x);
int reticket(int x);
int time();
while(1)
{
printf(" 车票管理系统\n");
printf(" ----------------------------------------------------\n");
printf(" | 1.录入车次信息 |\n");
printf(" | 2.浏览所有车次| |\n");
printf(" | 3.查询车次信息 |\n");
printf(" | 4.售票 |\n");
printf(" | 5.退票 |\n");
printf(" | 0.退出程序 |\n");
printf(" ----------------------------------------------------\n");
printf("\n 请根据需要选择相应数字\n");
scanf("%d",&a);
system("cls");
switch(a)
{
case 1:input(i);i++;break;
case 2:browse(i);break;
case 3:query(i);break;
case 4:seticket(i);break;
case 5:reticket(i);break;
case 0:exit(0);break;
default:printf("\n\n******************************************输入无效!*******************************************\n\n\n");
}
}
}
int input(int x) //录入功能
{
printf("请输入班次;");
scanf("%2d",&D[x].number);
printf("请输入发车时间;时 分");
scanf("%2d:%2d",&D[x].play.hour,&D[x].play.min);
printf("请输入起点站;");
scanf("%s",&D[x].qidian);
printf("请输入终点站;");
scanf("%s",&D[x].zhongdian);
printf("请输入行车时间;");
scanf("%2d",&D[x].cartime);
printf("请输入额定载客量;");
scanf("%2d",&D[x].zaike);
printf("请输入已订票人数;");
scanf("%2d",&D[x].proson);printf("\n");
printf("******************************************车次信息录入成功*******************************************\n\n");
}
int browse(int x) //浏览功能
{ int m=0;
printf("/ 班次/ 发车时间/ 起点站/ 终点站/ 行车时间/ 额定载客/ 已订票人数/\n");
time_t t;
struct tm *lt;
time(&t);
lt=localtime(&t);
//printf(" %d:%d\n",lt->tm_hour,lt->tm_min);
for(m;m<x;m++)
{ if(D[m].play.hour<lt->tm_hour)
printf("/ %11d/ 此班车已发出\n",m+1);
else if(D[m].play.hour==lt->tm_hour&&D[m].play.min==lt->tm_min)
printf("/ %11d/ 此班车已发出\n",m+1);
else
{
if(D[m].play.min==0)
printf("/ %11d/%11d:00/ %s/ %s/%14d/%14d/%14d/\n",D[m].number,D[m].play.hour,&D[m].qidian,&D[m].zhongdian,D[m].cartime,D[m].zaike,D[m].proson);
else
printf("/ %11d/%11d:%2d/ %s/ %s/%14d/%14d/%14d/\n",D[m].number,D[m].play.hour,D[m].play.min,&D[m].qidian,&D[m].zhongdian,D[m].cartime,D[m].zaike,D[m].proson);
}
}
printf("\n\n");printf("******************************************浏览车次信息成功*******************************************\n\n");
}
int query(int x) //查询功能
{ int m,n,i=1,flag;
while(i==1)
{
printf("请选择\n1.按班次号查询\n2.按终点站查询\n0.返回上一级\n");
scanf("%d",&m);
switch(m)
{
case 0:i=0;system("cls");break;
case 1:system("cls");printf("请输入班次号:\n");
scanf("%d",&n);
printf("/ 班次/ 发车时间/ 起点站/ 终点站/ 行车时间/ 额定载客/ 已订票人数/\n");
if (D[n-1].play.min==0)
printf("/ %11d/%11d:00/ %s/ %s/%14d/%14d/%14d/\n",D[n-1].number,D[n-1].play.hour,&D[n-1].qidian,&D[n-1].zhongdian,D[n-1].cartime,D[n-1].zaike,D[n-1].proson);
else
printf("/ %11d/%11d:%2d/ %s/ %s/%14d/%14d/%14d/\n",D[n-1].number,D[n-1].play.hour,D[n-1].play.min,&D[n-1].qidian,&D[n-1].zhongdian,D[n-1].cartime,D[n-1].zaike,D[n-1].proson);
printf("\n\n******************************************查询车次信息成功*******************************************\n\n"); break;
case 2:system("cls");printf("请输入终点站:\n");n=0,flag=0;char zd[10];
scanf("%s",zd);
printf("/ 班次/ 发车时间/ 起点站/ 终点站/ 行车时间/ 额定载客/ 已订票人数/\n");
for(n;n<x;n++)
{
if(strcmp(D[n].zhongdian,zd)==0)
{
if(D[n].play.min==0)
printf("/ %11d/%11d:00/ %s/ %s/%14d/%14d/%14d/\n",D[n].number,D[n].play.hour,&D[n].qidian,&D[n].zhongdian,D[n].cartime,D[n].zaike,D[n].proson);
else
printf("/ %11d/%11d:%2d/ %s/ %s/%14d/%14d/%14d/\n",D[n].number,D[n].play.hour,D[n].play.min,&D[n].qidian,&D[n].zhongdian,D[n].cartime,D[n].zaike,D[n].proson);
flag=1;
}
}
if(flag==0)
printf("\n\n******************************************对不起,未查询到相关车次*******************************************\n\n");
else
printf("\n\n******************************************查询车次信息成功*******************************************\n\n");break;
}
}
}
int seticket(int x) //售票功能
{
char qd[10],zd[10];int m,n=0,flag=0;
printf("请输入您的起点站:");
scanf("%s",qd);
printf("请输入您的终点站:");
scanf("%s",zd);
printf("/ 班次/ 发车时间/ 起点站/ 终点站/ 行车时间/ 额定载客/ 已订票人数/\n");
for(n;n<x;n++)
{
if(strcmp(D[n].qidian,qd)==0&&strcmp(D[n].zhongdian,zd)==0)
{
if(D[n].play.min==0)
printf("/ %11d/%11d:00/ %s/ %s/%14d/%14d/%14d/\n",D[n].number,D[n].play.hour,&D[n].qidian,&D[n].zhongdian,D[n].cartime,D[n].zaike,D[n].proson);
else
printf("/ %11d/%11d:%2d/ %s/ %s/%14d/%14d/%14d/\n",D[n].number,D[n].play.hour,D[n].play.min,&D[n].qidian,&D[n].zhongdian,D[n].cartime,D[n].zaike,D[n].proson);
flag=1;
}
}
if(flag==0)
{
printf("对不起,未查询到相关车次\n");
}
if(flag==1)
{
printf("请输入想要购买的班次号:\n");
scanf("%d",&m);n=0;
time_t t;
struct tm *lt;
time(&t);
lt=localtime(&t);
if(D[m-1].play.hour>lt->tm_hour)
{
if(D[m-1].proson<D[m-1].zaike)
{
printf("\n\n******************************************购票成功*******************************************\n\n");
D[m-1].proson++;
printf("/ 班次/ 发车时间/ 起点站/ 终点站/ 行车时间/ 额定载客/ 已订票人数/\n");
if (D[m-1].play.min==0)
printf("/ %11d/%11d:00/ %s/ %s/%14d/%14d/%14d/\n",D[m-1].number,D[m-1].play.hour,&D[m-1].qidian,&D[m-1].zhongdian,D[m-1].cartime,D[m-1].zaike,D[m-1].proson);
else
printf("/ %11d/%11d:%2d/ %s/ %s/%14d/%14d/%14d/\n",D[m-1].number,D[m-1].play.hour,D[m-1].play.min,&D[m-1].qidian,&D[m-1].zhongdian,D[m-1].cartime,D[m-1].zaike,D[m-1].proson);
}
else
{
printf("\n\n******************************************很抱歉人数已满购票失败*******************************************\n\n");
}
}
else if(D[m-1].play.hour==lt->tm_hour&&D[m-1].play.min>lt->tm_min)
{
if(D[m-1].proson<D[m-1].zaike)
{
printf("\n\n******************************************购票成功*******************************************\\n\n");
D[m].proson++;
printf("/ 班次/ 发车时间/ 起点站/ 终点站/ 行车时间/ 额定载客/ 已订票人数/\n");
if (D[m-1].play.min==0)
printf("/ %11d/%11d:00/ %s/ %s/%14d/%14d/%14d/\n",D[m-1].number,D[m-1].play.hour,&D[m-1].qidian,&D[m-1].zhongdian,D[m-1].cartime,D[m-1].zaike,D[m-1].proson);
else
printf("/ %11d/%11d:%2d/ %s/ %s/%14d/%14d/%14d/\n",D[m-1].number,D[m-1].play.hour,D[m-1].play.min,&D[m-1].qidian,&D[m-1].zhongdian,D[m-1].cartime,D[m-1].zaike,D[m-1].proson);
}
else
{
printf("\n\n******************************************很抱歉人数已满购票失败*******************************************\n\n");
}
}
else
{
printf("\n\n******************************************此班车已发出*******************************************\n\n");
}
}
}
int reticket(int x) //退票功能
{
int m,flag=1;
printf("请输入想要退掉的班次号:\n");
scanf("%d",&m);
time_t t;
struct tm *lt;
time(&t);
lt=localtime(&t);
if(D[m-1].play.hour>lt->tm_hour)
{
printf("\n\n******************************************退票成功*******************************************\n\n");
D[m-1].proson--;
printf("/ 班次/ 发车时间/ 起点站/ 终点站/ 行车时间/ 额定载客/ 已订票人数/\n");
if (D[m-1].play.min==0)
printf("/ %11d/%11d:00/ %s/ %s/%14d/%14d/%14d/\n",D[m-1].number,D[m-1].play.hour,&D[m-1].qidian,&D[m-1].zhongdian,D[m-1].cartime,D[m-1].zaike,D[m-1].proson);
else
printf("/ %11d/%11d:%2d/ %s/ %s/%14d/%14d/%14d/\n",D[m-1].number,D[m-1].play.hour,D[m-1].play.min,&D[m-1].qidian,&D[m-1].zhongdian,D[m-1].cartime,D[m-1].zaike,D[m-1].proson);
}
else if(D[m-1].play.hour==lt->tm_hour&&D[m-1].play.min>lt->tm_min)
{
printf("\n\n******************************************退票成功*******************************************\n\n");
D[m].proson--;
printf("/ 班次/ 发车时间/ 起点站/ 终点站/ 行车时间/ 额定载客/ 已订票人数/\n");
if (D[m-1].play.min==0)
printf("/ %11d/%11d:00/ %s/ %s/%14d/%14d/%14d/\n",D[m-1].number,D[m-1].play.hour,&D[m-1].qidian,&D[m-1].zhongdian,D[m-1].cartime,D[m-1].zaike,D[m-1].proson);
else
printf("/ %11d/%11d:%2d/ %s/ %s/%14d/%14d/%14d/\n",D[m-1].number,D[m-1].play.hour,D[m-1].play.min,&D[m-1].qidian,&D[m-1].zhongdian,D[m-1].cartime,D[m-1].zaike,D[m-1].proson);
}
else
{
printf("\n\n******************************************此班车已发出无法退票*******************************************\n\n");
}
}
到了这里,关于车票管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!