车票管理系统C语言课程设计.docx
《车票管理系统C语言课程设计.docx》由会员分享,可在线阅读,更多相关《车票管理系统C语言课程设计.docx(32页珍藏版)》请在冰豆网上搜索。
车票管理系统C语言课程设计
建筑工程学院
课程设计报告
课程设计名称:
C语言课程设计
课程设计题目:
车票管理系统
院(系):
理学院
专业:
信息与计算科学
班级:
信142
学号:
姓名:
新月
指导教师:
鸿强
完成日期:
2015-6-17
前言
随着计算机技术的发展,可视编程技术占有了越来越重要的作用。
VisualC++6.0是一种功能强大行之有效的可视化编程工具。
因此此软件是在VisualC++6.0环境下编写的。
对于我们,随着学习的深入,已经大体掌握了VisualC++6.0环境下的程序开发。
为了将我们的编程能力提升到一个更高的水平,深化面向对象的编程思维和解决问题的能力,值此课程设计周期间,进行基于VisualC++6.0环境的软件开发,先以字符统计软件作为开始,对VisualC++6.0环境和面向对象程序设计进行回忆和熟悉,使得在此基础上的下一个员工培训系统软件的开发进行的更加顺利。
本文档详细叙述了基于VisualC++6.0环境下的车票管理系统的设计过程以及程序源代码。
本文档从概要设计,详细设计,参考源程序代码以及显示程序运行的截屏等方面详尽的介绍了软件开发过程。
此次车票管理系统的开发目的是使我们用面向对象的方式来思考和解决问题的能力,并且可以掌握字符数组的使用、字符指针的使用、数据库的设计和文件使用以及C语言语法。
程序在设计的过程中遇到的问题已及时更正,但由于编者的能力和水平有限,车票管理系统和文档中不免会出现一些不期待的错误,望文档读者能够理解和体谅,并欢迎提醒和纠正,在此表示感以及敬意。
第1章概要设计
1.1题目的容与要求
一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。
如
班次发车时间起点站终点站行车时间额定载量已定票人数
18:
00郫县广汉24530
26:
30郫县0.54040
37:
00郫县0.54020
410:
00郫县0.5402
…
(一)功能要求:
用c/c++设计一系统,能提供下列服务:
(1)录入班次信息(信息用文件保存),可不定时地增加班次数据
(2)浏览班次信息,可显示出所有班次当前状总。
(3)查询路线:
可按班次号查询,可按终点站查询
(4)售票和退票功能
A:
当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数
B:
退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数
(二)其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3)学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档
欢迎界面
管理员菜单
普通登录菜单
增加信息
查询信息
订票
保存信息
查询信息
删除信息
退票信息
1.2总体结构
图1-1功能模块图
第2章详细设计
主模块流程图
欢迎界面
管理员菜单
普通登录菜单
增加信息
查询信息
订票
保存信息
查询信息
删除信息
退票
密码验证
按车次
按终到站
按车次
按终到站
图2.1主模块流程图
车票管理系统软件详细设计
一个名Timetable的结构体进行定义,
包括intno;//班次
inthour;//发车时间(时)
intminute;//发车时间(分)
charStarting_station[10];//始发站
charLast_station[10];//终点站
floattime;//行车时间
intmax_number;//最大载客数
intsold_number;//已售票数等结构体成员。
然后对调用函数进行定义。
voidadd()增加记录,voidCipher()密码验证函数,voiddel()删除班次信息函数,voidfind(ints1,chars2[])查找函数,intfindnum(ints1)查找班次函数,voidInput()信息录入函数,voidhuanying()欢迎界面,voidland()登录选择界面,voidmenu1()管理员菜单界面,voidmenu2()普通菜单界面,voidopen()调用数据函数,voidsave()保存函数,voidsearchesmenu()查询菜单,voidticketdelete()退票函数,voidticketorder()售票函数,inttimee(inti)判断时间是否超出函数,voidtimetable1显示车次函数该系统将这些信息均放在文件中。
最后定义main()函数,利用函数调用,实现程序的各种功能。
将其放在系统文件车中。
第3章调试分析
1、程序陷入死循环
解决办法:
仔细分析程序间的关系,画程序流程图分析问题所在。
利用break命令跳出循环
2、程序出现乱码
解决办法:
利用VC6.0本身的调试功能查找错误的所在,修改源程序。
3、所学知识不能很好的完成程序
解决办法:
上网查找相关资料,进入一些开源论坛寻求一定的帮助。
第4章使用说明与执行结果
图4-1
欢迎界面
图4-2
登录菜单
图4-3
管理员登录的密码机制
图4-4
密码容错机制
图4-5
管理员菜单
图4-6
图4-7
班次录入界面
图4-8
图4-9
班次增加界面
图4-10
时刻表浏览界面
图4-11
查询界面
图4-11
注销班次界面
图4-12
普通登录菜单
图4-13
图4-14
售票窗口
图4-15
图4-16
退票界面
参考文献
1、《C程序设计(第四版)》作者:
谭浩强书号:
ISBN64:
清华大学。
2、《C语言学习路线图》作 者:
明日科技书号:
ISBN93:
清华大学。
3、《C语言从入门到精通(第2版)》作者:
明日科技书号:
ISBN20:
清华大学。
4、《21天学通C语言(第7版)》作者:
(美)琼斯等著,估译书号:
ISBN79
:
人民邮电。
5、《CPrimerPlus(第五版)中文版》作者:
[美]StephenPrata书号:
ISBN28
:
人民邮电。
鸣:
XX文库XX贴吧XX百科C语言之家Linux开源俱乐部
网络资料来源:
1、.xuexi111./
2、snippets.dzone./tag/c/
3、.hotscripts./category/c-cpp/scripts-programs/Hotscripts
4、https:
//.daniweb./software-development/cpp/code/_/8
附录(程序清单)
代码
//增加记录
#include
#include"news.h"
#include
#include
voidadd()
{
voidopen();
intget();
voidsave();
voidmenu1();
inti,j=5;
open();//调用按班次查询函数
system("cls");//清屏
printf("1.增加班次\n");
printf("2.返回\n");
printf("请选择(1-2)\n");
scanf("%d",&i);
if(i==1)
{
system("cls");//清屏
printf("1.请输入要增加的班次:
\n");
scanf("%d",&timetable[class_num].no);
for(i=0;iif(timetable[class_num].no==timetable[i].no)
//比较是否相等,判断车次是否重复
{
printf("输入错误!
\n");
getch();//收集回车
break;
}
if(i==class_num)
{
get(i,j);//修改及增加班次*
class_num++;//使班次数加1
save();//调用保存函数
}
else
menu1();
}
}
#include
voidCipher()//密码验证函数
{
intm,n=123;//规定密码
voidmenu1();//上级菜单的声明;容错机制
printf("请输入密码:
");//输入提示
scanf("%d",&m);//密码输入
while
(1){//容错机制
if(m==n)
menu1();
else
printf("密码错误请重新输入:
");
scanf("%d",&m);
}}
//删除班次信息
#include
#include//system("cls")的声明
#include//getch()的声明
#include"news.h"
voiddel()
{voidsave();
intfindnum(ints1);
inti,h=0;
intnum;
charor[10];
system("cls");//清屏
printf("1.删除班次\n");
printf("2.返回\n");
printf("请选择(1-2):
\n");
scanf("%d",&i);
if(i==1)
{
system("cls");//清屏
printf("请输入要删除的班次:
\n");
scanf("%d",&num);
i=findnum(num);//调用班次查询函数
if(i==class_num)//全部匹配后但无匹配项
{
printf("输入错误,无此班次!
\n");
getch();//收集回车
del();
}
else
{
printf("确定?
(y/n)\n");//确认机制
scanf("%s",or);
if(or[0]=='y'||or[0]=='Y')
{
for(;itimetable[i]=timetable[i+1];
class_num--;//班次总数减1
save();//调用保存函数
}
}
}
}
//查找函数
#include
#include"news.h"
#include
voidfind(ints1,chars2[])
{
inti,h=0,m;
if(s2[0]=='\0')
m=1;//1为无条件执行
elsem=0;
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("\n|班次|发车时间|起点站|终点站|行车时间|额定载量|已售票|\n");
for(i=0;iif(s1=timetable[i].no||strcmp(s2,timetable[i].Last_station)==0)
//判断字符串比较是否相等
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("|%10d|%5d:
%-4d|%10s|%10s|%8.1f|%8d|%8d|\n",timetable[i].no,timetable[i].hour,
timetable[i].minute,timetable[i].Starting_station,timetable[i].Last_station,timetable[i].time,
timetable[i].max_number,timetable[i].sold_number);
if(m==1)
h++;
break;
}
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
if(h==0)//不能break则执行
printf("要查找的班次不存在!
\n");
}
//查找班次
#include
#include"news.h"
intfindnum(ints1)
{
inti;
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
for(i=0;i{
if(s1==timetable[i].no)//判断字符串比较是否相等,如果符合则输出车次等信息
{
printf("|----------|----------|----------|----------|--------|--------|--------|\n");
printf("|%10d|%5d:
%-4d|%10s|%10s|%8.1f|%8d|%8d|",timetable[i].no,timetable[i].hour,
timetable[i].minute,timetable[i].Starting_station,timetable[i].Last_station,timetable[i].time,
timetable[i].max_number,timetable[i].sold_number);
break;
}
}
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
returni;
}
//欢迎界面
#include
voidhuanying(){
printf("\n\n\n\n");
printf("\t************************************************************\n");
printf("\n\n\n\n");
printf("\t\t\t\t车票管理系统\n");
printf("\n\n\n\n");
printf("\t\t\t设计人:
嘉星;新月;田宇\n");
printf("\n\n");
printf("\t\t\t\t感您的使用\n\t\t\t\t按任意键继续\n");
printf("\n\n");
printf("\t************************************************************\n");
}
//信息录入界面
#include
#include"news.h"
#include
#include
voidInput(){
{
inti=0,j=5,h;
chars[5];
voidsave();
voidadd();
voidget(inti,intj);
FILE*fp;//定义文件型指针变量
system("cls");//清屏
if((fp=fopen("车票管理系统0.dat","rb"))!
=NULL)//fopen打开文件
{
printf("车票信息已经存在!
\n");
printf("任意输入进入添加菜单\n");
scanf("%s",s);//收集任意输入
i=1;//通过是1
add();
}
if(i==0)
{
system("cls");//清屏
printf("请输入要录入班次总数:
\n");
scanf("%d",&class_num);//指向班次指针
system("cls");//清屏
for(i=0;i{
system("cls");//清屏
printf("请输入第%d个班次信息:
\n",i+1);
h=-1;
for(;h!
=i;)///循环输出
{
printf("请输入班次:
\n");
scanf("%d",&timetable[i].no);
for(h=0;h
if(timetable[h].no==timetable[i].no)
{
printf("输入错误!
该班次已存在!
\n");
break;//返回
}
}
get(i,j);//修改及增加班次
j=5;
}
save();//调用保存函数
}
}
}
voidget(inti,intj)//修改及增加班次
{
for(;;)
{
printf("请输入发车时间(xxxx)");scanf("%d%d",&timetable[i].hour,&timetable[i].minute);
if(timetable[i].hour<24&&timetable[i].hour>=0&&timetable[i].minute<60&&timetable[i].minute>=0)
break;
else
{
printf("输入错误!
\n");
getch();//收集回车
}
}
printf("请输入起点站:
\n");
scanf("%s",timetable[i].Starting_station);
printf("请输入终点站:
\n");
scanf("%s",timetable[i].Last_station);
printf("请输入行车时间:
\n");
scanf("%f",&timetable[i].time);
printf("请输入额定载量:
\n");
scanf("%d",&timetable[i].max_number);
printf("请输入已售票数:
\n");
scanf("%d",&timetable[i].sold_number);
}
//管理员菜单界面
#include
voidmenu1(){
voidInput();
voidtimetable1();
voidsave();
voiddel();
voidsearchesmenu();
voidland();
voidadd();
intn;
printf("\t\t\t\t1、车次信息录入\n\t\t\t\t2、增加车次信息\n\t\t\t\t3、时刻表浏览\n\t\t\t\t4、车辆信息查询\n\t\t\t\t5、注销车次\n\t\t\t\t6、保存\n\t\t\t\t7、返回\n");
printf("\t\t\t请输入需要运行的命令编号\n");
while
(1){//死循环形成菜单
scanf("%d",&n);
switch(n){
case1:
Input();break;//车辆信息录入
case2:
add();break;//增加车次信息
case3:
timetable1();break;//浏览时刻表
case4:
searchesmenu();break;//车辆信息查询
case5:
del();break;//注销车次
case6:
save();break;//保存命令
case7:
land();break;//返回上级菜单
default:
printf("非法输入\n");break;
}
}
}
//普通登录菜单
#include
voidmenu2(){
voidtimetable1();
voidticketorder();
voidticketdelete();
voidland();
voidsearchesmenu();
intn;
printf("\t\t\t\t1、时刻表浏览\n\t\t\t\t2、车辆信息查询\n\t\t\t\t3、购买车票\n\t\t\t\t4、退回车票\n\t\t\t\t5、返回\n");
printf("\t\t\t请输入需要运行的命令编号\n");
while
(1){
scanf("%d",&n);
switch(n){
case1:
timetable1();break;//时刻表浏览
case2:
searchesmenu();break;//车辆信息查询
case3:
ticketorder();break;//购买车票
case4:
ticketdelete();break;//退回车票
case5:
land();break;//返回上级菜单
default:
printf("非法输入\n");break;
}
}
}
#include
voidhuanying();
voidland();
intmain(){
charch;
huanying();
ch=getchar();//收集回车
land();
return0;
}
#include
#include
#include"news.h"
#include
voidopen(){
FILE*fp1,*fp2;
if((fp1=fopen("车票管理系统.dat","rb"))==NULL)
{
system("cls");//