车票管理系统C语言课程设计_第1页
车票管理系统C语言课程设计_第2页
车票管理系统C语言课程设计_第3页
车票管理系统C语言课程设计_第4页
车票管理系统C语言课程设计_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

精选文档

河北建筑工程学院

课程设计报告

课程设计名称:C语言课程设计

课程设计题目:车票管理系统

院(系):理学院

专业:信息与计算科学

班级:信142

学号:

指导教师:

完成日期:2015-6-17

精选文档

目录

前言...................................................................2

第1章概要设计........................................................3

1.1题目的内容与要求..................................................3

1.2总体结构..........................................................3

第2章详细设计........................................................4

主模块流程图..........................................................4

车票管理系统软件详细设计.............................................4

第3章调试分析........................................................6

第4章使用说明与执行结果..............................................7

参考文献..............................................................15

附录(程序清单)...................................................16

致谢................................................................32

精选文档

刖三

随着计算机技术的发展,可视编程技术占有了越来越重要的作用。Visual

C++6.0是一种功能强大行之有效的可视化编程工具。因此此软件是在Visual

C++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・1功能模块图

精选文档

第2章详细设计

主模块流程图

图2.1主模块流程图

车票管理系统软件详细设计

一个名Timetable的结构体进行定义,

包括inino;//班次

inthour;〃发车时间(时)

intminute;〃发车时间(分)

charStarting_station[10];〃始发站

charLastslalion[10];〃终点站

floattime;〃行车时间

intmax_number;〃最大载客数

intsold_numb2r;〃已售票数等结构体成员。

然后对调用函数进行定义。voidadd()增加记录,voidCipher()密码验证函

数,voiddel()删除班次信息函数,voidfind(intsi,chars2口)查找函数,

intfindnum(intsi)查找班次函数,voidInput(>信息录入函数,voidhuanying

精选文档

()欢迎界面,voidland()登录选择界面,voidmenul()管理员菜单界面,void

menu2()普通菜单界面,voidopen()调用数据函数,voidsave。保存函数,void

searchesmenuO查询菜单,voidticketdelete()退票函数,voidticketorder()

售票函数,inttimee(inti)判断时间是否超出函数,voidtimetable1显示车次

函数该系统将这些信息均放在文件20143140219中,

最后定义main。函数,利用函数调用,实现程序的各种功能。将其放在系统

文件车20143140201中.

精选文档

第3章调试分析

1、程序陷入死循环

解决办法:仔细分析程序间的关系,画程序流程图分析问题所在。利用break

命令跳出循环

2、程序出现乱码

解决办法:利用VC6.0本身的调试功能查找错误的所在,修改源程序。

3、所学知识不能很好的完成程序

解决办法:上网查找相关资料,进入一些开源论坛寻求一定的帮助。

精选文档

第4章使用说明与执行结果

图4-1

欢迎界面

图4-2

登录菜单

精选文档

图4-3

管理员登录的密码机制

图4-4

密码容错机制

精选文档

图4-5

管理员菜单

图4-6

■G:\lt&Hbug\m口n.ext

翻以行车时m

输入锦w载量:

褊入己售厚或:

输师)

图4-7

班次录入界面

精选文档

1G*S.Debugmiartexe

匚增加班次

2.返回三

诘选择6-2〉

半:I▼

图4-8

IGl6DcbUgaiai.cxc

口请输入要堰t口的班次:

xxxx>120R

隔鬻人终点站:

*]刚入行车时间:

请输入额定载量;

85

请输入已售票数:

3-

图4-9

班次增加界面

精选文档

图4-10

时刻表浏览界面

图4-11

查询界面

精选文档

图4-11

注销班次界面

Gl1\Debug\miaaexeCJI巨I

图4-12

普通登录菜单

精选文档

图4-13

1:\i^t\Debug\mian.exeX

1

2

青神人要订票的班次〈若无请输入。〉:

交班次已满或已发匕I

图4-14

售票窗口

精选文档

图4-15

图4-16

退票界面

精选文档

参考文献

1、《C程序设计(第四版)》作者:谭浩强书号:ISBN9787302224464出版社:清华大

学出版社。

2、《C语言学习路线图》作者:明日科技书号:ISBN9787302276593出版社:清华大学

出版社。

3、《C语言从入门到精通悌2版)》作者:明日科技刊号:ISBN9787302287520出版社:

清华大学出版社。

4、《21天学通C语言(笫7版)》作者:(美)琼斯等著,姜估译书号:ISBN9787115355379

出版社:人民邮电出版社。

5、《CPrimerPhis(第五版)中文版》作者:|^]StephenPrata书号:ISBN9787115130228

出版社:人民邮电出版社。

谢鸣;百度文库百度贴吧百度百科C语言之家Linux开源俱乐部

网络资料来源:

1、http://www.xuexi111.com/

2、http:///tag/c/

3、http:〃/category/c-cpp/scripts-programs/Hotscripts

4、https://www.daniweb.eom/software-development/cpp/code/_/8

精选文档

附录(程序清单)

代码

〃增加记录

#include<stdio.h>

#include"news.h"

#include<stdlib.h>

#include<conio.h>

voidadd()

voidopen();

intget();

voidsave();

voidmenu1();

inti,j=5;

open();//调用按班次查询函数

system("cls");〃清屏

printf("l.增加班次\n”);

printf("2.返回\n”);

printf("请选择(l-2)\d);

scanf("%d",&i);

if(i==l)

{

system("cls");〃清屏

printf(T.请输入要增加的班次:\n");

scanf("%d',&>timetable[class_num].no);

fbr(i=O;i<class_num;i++)

if(timetable[class_num|.no==timetable|i|.no)

〃比较是否相等,判断车次是否重复

printf("输入错误!\rT);

getch();〃收集回车

break;

)

if(i==class_num)

(

get(i,j);〃修改及增加班次*

class_num++;〃使班次数加1

save();〃调用保存函数

精选文档

else

menu1();

#include<stdio.h>

voidCipher。〃密码验证函数

(

intm,n=123;〃规定密码

voidmenu1();〃上级菜单的声明;容错机制

print*"请输入密码:”);〃输入提示

scanf("%d",&m);//密码输入

while⑴{〃容错机制

if(m==n)

menu1();

else

print*”密码错误请重新输入:");

scanf("%d",&m);

)}

〃删除班次信息

#include<stdio.h>

#include<stdlib.h>“system("ds")的声明

#include<conio.h>//getch()的声明

#include"news.h"

voiddel()

{voidsave();

intfindnum(intsi);

inti,h=0;

intnum;

charor|10|;

systemf'cls");〃清屏

print”删除班次\n");

printf("2.返回\n'j;

printff1请选择

scanf("%d",&i);

精选文档

if(i==l)

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[01=='Y')

{

for(;i<class_num-1;i++)

timetable|i|=timetable[i+1|;

class_num-;〃班次总数减1

save();〃调用保存函数

〃查找函数

#include<stdio.h>

#include"news.h"

#include<string.h>

voidfindfintsl,chars2|])

(

inti,h=0,m;

if(s2[01=='\0')

m=l;//I为无条件执行

elsem=0;

精选文档

printf("\n|----------1----------1----------1----------1-一一|-一一I------------1\n");

printf("\n|班次|发车时间|起点站|终点站|行车时间|额定载量|已售票

l\n");

fbr(i=O;i<class_num;i++)

if(sl=timetable[i].no11strcmp(s2,timetable|i].Last_station)==0)

〃判断字符串比较是否相等

{

printf("\n|--1----------1..............|----------............................................I\n");

printf("|%10d|%5d:%-4d|%1Os|%1Os|%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==l)

h++;

break;

}

printf("\n|.............|-...........|..............I..............I...........I...........I...............I\nM);

if(h==O)//不能break则执行

printf("要查找的班次不存在!\n");

〃查找班次

#include<stdio.h>

#include"news.h"

intfindnumfintsi)

(

inti;

Printfl"\n|----------1----------1----------1----------1——I——I-----------I\n");

for(i=0;i<class_num;i++)

{

if(sl==timetable[i].no)〃判断字符串比较是否相等,如果符合则输出车次等信

printffl.............|..............I..............I..............I-……II.................I\n");

printf("|%10d|%5d:%-4d|%1Os|%1Os|%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;

}

}

printfl"\n|............I.............I----------1............卜一卜一|......|\n");

returni;

}

〃欢迎界面

#include<stdio.h>

voidhuanying

(){printfT\n\n\n\nl;

printf(M\t************************************************************

printf("\n\n\n\n");

printf(1,\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(n\^************************************************************•

〃信息录入界面

#include<stdio.h>

#include"news.h"

#include<stdlib.h>

#include<conio.h>

voidInput()j

(

inti=0,j=5,h;

chars[5|;

精选文档

voidsave();

voidadd();

voidget(inti,intj);

FILE*fp;〃定义文件型指针变量

system("cls");〃清屏

if((fp=fopen("车票管理系统O.dat","rb"))!=NULL)//fopen打开文件

printf("车票信息已经存在!\n");

printf(”任意输入边入添加菜单\rT);

scanf("%s",s);〃收集任意输入

i=l;〃通过是1

add();

if(i==O)

|

system("cis");〃清屏

printf("请输入要录入班次总数:\n");

scanf("%d",&.class_num);〃指向班次指针

systemf'cls");〃清屏

fbr(i=O;i<class_num;i++)

{

system("cls"j;//清屏

printf("请输入第%d个班次信息:\n",i+l);

h=-l;

for(;h!=i;)〃/循环输出

{

printff请输入班次:\n");

scanf("%d",&timetable[i].no);

for(h=0;h<i;h++)

if(timetable|h|.no==timetable[i|.no)

{

printf("输入错误!该班次已存在!\n");

break;〃返回

}

get(i,j);〃修改及增加班次

j=5;

}

save();〃调用保存函数

精选文档

voidget(inti,intj)//修改及增加班次

{

for(;;)

(

printf("请输入发车时间(xx

xx)");scanf("%d%d",&timetable|i].hour,&timetable|i].minute);

if(timetable[i].hour<24&&timetable|i].hour>=0&&timeta31e[i].minute<60&&timetable[i].mi

nute>=0)

break;

else

{

printf("输入喑误!\n”);

getch();〃收集回车

}

}

printff,请输入起点站:\n");

scanf("%s",timetable|i].Starting_station);

printff'请输入终点站:\n");

scanf("%s",timetable[i].Last_station);

printfC,请输入行车时间:\n");

scanf("%f',&timetable[i].time);

printf("请输入额定投量:\n");

scanf("%d",&timetable|i|.max_number);

printf("请输入已售票数:\n");

scanf("%d",&timetable|i|.sold_number);

〃管理员菜单界面

#include<stdio.h>

voidmenu1()j

voidInput();

voidtimetable1();

voidsave();

voiddel();

精选文档

voidsearchesmenu();

voidland();

voidadd();

intn;

printf(,\t\t\t1、车次信息录入\n\N\N2、增加车次信息\n\t\t\t\t3、时刻表浏览\n\t\N\t4、车

辆信息查询\n\t\t\t\t5、注销车次\n\N\N6、保存\n\N\N7、返回\n");

printf(H\t\t\t请输入需要运行的命令编号\n");

while(D{〃死循环形成菜单

scanf("%d",&n);

switch(n){

case1:lnput();break;〃车辆信息录入

case2:add();break;〃增加车次信息

case3:timetable1();break;〃浏览时亥ij表

case4:searchesmenu();break;〃车辆信息查询

case5:del();break;〃注销车次

case6:save();break;〃保存命令

case7:land();break;〃返回上级菜单

default:printf("非法输入\n");break;

)

)

)

〃普通登录菜单

#include<stdio.h>

voidmenu2(){

voidtimetablei();

voidticketorder();

voidticketdelete();

voidland();

voidsearchesmenu();

intn;

printf("\t\t\t\t1,时刻表浏览\n\t\t\t\t2、车辆信息查询\n\t\N\t3、购买车票\n\t\t\W4、退回车

票\n\t\t\W5、返回\n");

printf("\t\t\t请输入需要运行的命令编号\n");

while(1){

scanf("%d",&n);

switch(n){

case1timetable1();break;〃时刻表浏览

case2:searchesmenu();break;〃车辆信息查询

精选文档

case3:ticketorder0;break;〃购买车票

case4:ticketdelete();break;〃退回车票

case5:land();break;〃返回上级菜单

default:printf("非法输入\n");break;

#include<stdio.h>

voidhuanying();

voidland();

intmain(){

charch;

huanying。;

ch=getchar();〃收集回车

land();

return0;

#include<stdio.h>

#include<stdlib.h>

#include"news.h"

#include<conio.h>

voidopen(){

FILE*fpl,*fp2;

if((fpl=fopen("车票管理系统.dat","rb"))==NULL)

{

system("cls");〃清屏

printf("文件打开错误!\n");

getch();〃收集回车

exit(O);

|

if((fp2=fopen("车票管理系统O.dat","rb"))==NULL)

system("cls");〃清屏

精选文档

printf("文件打开错误!\n");

getch();〃收集回车

exit(O);〃退出

}

fread(&class_num,sizeof(int),1,fp2);〃/读入信息

fread(timetable,sizeof(timetable⑼),class_num,fp1);〃〃/读入信息

fcloseffp1);fclose(fp2);〃/文件关闭

#include<stdio.h>

#include<stdlib.h>

#include"news.h"

voidsave()〃保存函数

voidmenu1();

FILE*fp1,*fp2;〃文件行指针

if((fpl=fopen("车票管理系统.dat",”wb"))==NULL)〃打开文件、为输出打开一个二进制

文件

(

printff文件打开错误【\明;

exit(O);

}

if((fp2=fopen("车票管理系统O.dat","wb"))==NULL)〃打开文件、为输出打开一个二进制

文件

{

printf("文件打开错误!\n");

exit(O);

}

f\vrite(&class_num,sizeof(int),1,fp2);〃写入文件信息

fwrite(timetable,sizeof(timetable[0]),class_num,fpl);

fclose(fpl);fclose(fp2);〃关闭文件

printf("保存成功”);

menu1();

精选文档

〃查询菜单

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

voidsearchesmenu(){

inti;

voidfind(ints1,chars2[|);

charsl=0,s2|10]={'\0't;

voidopen();

voidland();

system("cls");〃清屏

printffl.按班次查询\n");

printf("2.按终点站查询\n");

printf("3.退出\n");

printf『请选择(l-3):\n");

scanf("%d",&i);

open();〃调用按班次查询函数

switch(i)〃菜单

{

case1:printf("请输入要查询的班次:\rT);//si为班次

scanf("%d",&sl);

find(sl,s2);〃调用查找函数

break;

case2:printf("请输入要查询终点站:\n");//s2为终点站

scanf("%s",s2);

find(sl,s2);〃调用查找函数

break;

case3:land();break;〃返回机制

default:printf("输入错误!\n");

break;

}

printf("按任意键继续\n");

getch();〃收集回车

〃退票函数

#include<stdio.h>

#include"news.h"

#include<stdlib.h>

#include<conio.h>

精选文档

voidticketdelete()

inti;

intnum;

charor;

inttimee();

voidopen();

intfindnum(intsl);

voidsave。;

voidmenu2();

system("cls");〃清屏

printf("1.退票\n");

printfC'2.返回\nM);

printf("请选择(1-2)\n:");

scanf("%d",&i);

if(i==1)

(

system("cls");〃清屏

open();//调用按班次查询函数

printf("请输入要退票的班次:\n");

scanf("%d",&num);

i=findnum(num);〃调用班次查询函数

if(num=timetable[i].no)〃判断字符串比较是否相等待比较的字符串

if(timee(i))〃判断时间是否超出函数

(

scanf("%c",&or);

if(or=='y'||or=='Y')

getch();

(

timetable[i].sold_number-;〃使已售票加1

printf("退票成功!\叫;

save();〃调用保存函数

getch();〃从控制台读取一个字符,但不显示在屏幕上

)

)

else

(

printf("该班车已发出,无法退票M");

getch();〃收集回车

)

)

)

精选文档

〃售票函数

#include<stdio.h>

#include"news.h"

#include<stdlib.h>

#include<conio.h>

voidticketorder()

{

inti;

intnum;

voidsave();

inttimee(inti);

voidopen();

voidsearchesmenu();

voidland();

system("cls");〃清屏

printff'l.售票\n");

printf("2.返回\n”);

printf("请选择(l-2):\n");

scanf("%d",&i);

if(i==l)

(

open();//调用open

printff,请输入要订票的班次(若无请输入0):\n");

scanf("%d",&num);

fbr(i=O;i<class_num;i++)

if(num==timetable[i].no)//比较是否相等

if(timetable[i|.sold_number>timetable[i].max_number&»&,timee(i)==l)

〃判断时间是否超出函数***并且***没超出最大客量

timetable|i|.sold_number++;〃使已售的票数+1

printf("通向%s班次为%d的票订票成

功!\n”,timetable1].Startingstation,timetablefi].no);

save();〃调用保存函数

getch();〃收集回车

break;

else

printf("该班次已满或已发出!\n“);

getchf);〃收集回车

精选文档

land();

elseland();

#include<time.h>

#include<stdlib.h>

#include"news.h"

inttimee(inti)//判断时间是否超出函数***

{

structtm*local;〃时间结构体

time.tt;〃把当前时间给t

t=time(NULL);〃NULL在stdio.h中定义为0

local=localtime(&t);〃〃/获取当前系统时间

if(local->tm_hour<timetable[i].hour||local->tm_hour==timetable[i|.hour&&local->tm_min<timeta

ble[i].minute)

return1;

else

return0;

#include<stdio.h>

#include"news.h"

#include<stdlib.h>

#include<conio.h>

voidtimetable1()〃显示车次函数

inti,j;

voidopen();

inttimee(inti);

voidland();

system("cls");〃清屏

open));//调用open

system("cls");〃清屏

printESSAGE车程信

温馨提示

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

评论

0/150

提交评论