c语言课程设计车票管理系统.doc
如有侵权,请联系网站删除,仅供学习与交流c语言课程设计车票管理系统【精品文档】第 20 页河北建筑工程学院课 程 设 计 报 告课程设计名称:C语言课程设计课程设计题目:车票管理系统院(系):理学院 专 业:信息与计算科学班 级:信142学 号:20143140219姓 名:李嘉星指导教师:李鸿强完成日期: 2015-6-17目 录前言2第1章 概要设计31.1题目的内容与要求31.2总体结构3第2章 详细设计4主模块流程图4车票管理系统软件详细设计4第3章 调试分析6第4章 使用说明与执行结果7参考文献15附 录(程序清单)16致谢32前言随着计算机技术的发展,可视编程技术占有了越来越重要的作用。Visual C+6.0 是一种功能强大行之有效的可视化编程工具。因此此软件是在Visual C+6.0环境下编写的。对于我们,随着学习的深入,已经大体掌握了Visual C+6.0环境下的程序开发。为了将我们的编程能力提升到一个更高的水平,深化面向对象的编程思维和解决问题的能力,值此课程设计周期间,进行基于Visual C+6.0环境的软件开发,先以字符统计软件作为开始,对Visual C+6.0环境和面向对象程序设计进行回忆和熟悉,使得在此基础上的下一个员工培训系统软件的开发进行的更加顺利。本文档详细叙述了基于Visual C+6.0环境下的车票管理系统的设计过程以及程序源代码。本文档从概要设计,详细设计,参考源程序代码以及显示程序运行的截屏等方面详尽的介绍了软件开发过程。此次车票管理系统的开发目的是使我们用面向对象的方式来思考和解决问题的能力,并且可以掌握字符数组的使用、字符指针的使用、数据库的设计和文件使用以及C语言语法。程序在设计的过程中遇到的问题已及时更正,但由于编者的能力和水平有限,车票管理系统和文档中不免会出现一些不期待的错误,望文档读者能够理解和体谅,并欢迎提醒和纠正,在此表示感谢以及敬意。第1章 概要设计1.1题目的内容与要求一车站每天有n个发车班次,每个班次都有一班次号(1、2、3n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数1 8:00 郫县 广汉 2 45 302 6:30 郫县 成都 0.5 40 403 7:00 郫县 成都 0.5 40 204 10:00 郫县 成都 0.5 40 2(一)功能要求:用c/c+设计一系统,能提供下列服务:(1)录入班次信息(信息用文件保存),可不定时地增加班次数据(2)浏览班次信息,可显示出所有班次当前状总。(3)查询路线:可按班次号查询 ,可按终点站查询(4)售票和退票功能 A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数 (二)其它要求:(1) 只能使用C/C+语言,源程序要有适当的注释,使程序容易阅读(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)(3) 学生可自动增加新功能模块(视情况可另外加分)(4)写出课程设计报告,具体要求见相关说明文档欢迎界面管理员菜单普通登录菜单增加信息查询信息订票保存信息查询信息删除信息退票信息1.2总体结构图1-1 功能模块图第2章 详细设计主模块流程图欢迎界面管理员菜单普通登录菜单增加信息查询信息订票保存信息查询信息删除信息退票密码验证按车次按终到站按车次按终到站图2.1 主模块流程图车票管理系统软件详细设计一个名Timetable的结构体进行定义,包括 int no;/班次int hour;/发车时间(时)int minute;/发车时间(分)char Starting_station10;/始发站char Last_station10;/终点站float time;/行车时间int max_number;/最大载客数int sold_number;/已售票数等结构体成员。然后对调用函数进行定义。void add()增加记录,void Cipher()密码验证函数,void del()删除班次信息函数,void find(int s1,char s2) 查找函数,int findnum(int s1)查找班次函数,void Input() 信息录入函数,void huanying () 欢迎界面,void land() 登录选择界面,void menu1()管理员菜单界面,void menu2()普通菜单界面,void open() 调用数据函数,void save()保存函数,void searchesmenu()查询菜单,void ticketdelete()退票函数,void ticketorder()售票函数,int timee(int i) 判断时间是否超出函数,void timetable1显示车次函数该系统将这些信息均放在文件20143140219中。最后定义main()函数,利用函数调用,实现程序的各种功能。将其放在系统文件车20143140219中。第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程序设计(第四版) 作者:谭浩强 书号:ISBN9787302224464 出版社:清华大学出版社。2、C语言学习路线图 作 者:明日科技 书号:ISBN9787302276593出版社:清华大学出版社。3、C语言从入门到精通(第2版) 作者:明日科技 书号:ISBN 9787302287520出版社:清华大学出版社。4、21天学通C语言(第7版) 作者:(美)琼斯等著,姜估译 书号:ISBN 9787115355379出版社:人民邮电出版社。5、C Primer Plus(第五版)中文版 作者:美Stephen Prata 书号:ISBN 9787115130228出版社:人民邮电出版社。谢鸣:百度文库 百度贴吧 百度百科 C语言之家 Linux开源俱乐部网络资料来源:1、2、 3、 Hotscripts 4、附 录(程序清单)代码/增加记录#include<stdio.h>#include"news.h"#include<stdlib.h>#include<conio.h>void add() void open();int get();void save();void menu1();int i,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",&timetableclass_num.no);for(i=0;i<class_num;i+)if(timetableclass_num.no=timetablei.no)/比较是否相等,判断车次是否重复 printf("输入错误!n");getch(); /收集回车break;if(i=class_num) get(i,j); /修改及增加班次*class_num+; /使班次数加1save(); /调用保存函数elsemenu1();#include<stdio.h>void Cipher()/密码验证函数int m,n=123;/规定密码void menu1(); /上级菜单的声明;容错机制printf("请输入密码:");/输入提示scanf("%d",&m);/密码输入while(1)/容错机制if(m=n)menu1();elseprintf("密码错误请重新输入:");scanf("%d",&m);/删除班次信息#include<stdio.h>#include<stdlib.h> /system("cls")的声明#include<conio.h> /getch()的声明#include"news.h"void del() void save(); int findnum(int s1);int i,h=0;int num;char or10;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();elseprintf("确定?(y/n)n");/确认机制scanf("%s",or);if(or0='y'|or0='Y')for(;i<class_num-1;i+) timetablei=timetablei+1;class_num-; /班次总数减1save(); /调用保存函数/查找函数#include<stdio.h>#include"news.h"#include<string.h>void find(int s1,char s2)int i,h=0,m;if(s20='0')m=1; /1为无条件执行else m=0;printf("n|-|-|-|-|-|-|-|n"); printf("n| 班次 | 发车时间 | 起点站 | 终点站 |行车时间|额定载量| 已售票 |n");for(i=0;i<class_num;i+)if(s1=timetablei.no|strcmp(s2,timetablei.Last_station)=0) /判断字符串比较是否相等 printf("n|-|-|-|-|-|-|-|n");printf("|%10d|%5d:%-4d|%10s|%10s|%8.1f|%8d|%8d|n",timetablei.no,timetablei.hour,timetablei.minute,timetablei.Starting_station,timetablei.Last_station,timetablei.time,timetablei.max_number,timetablei.sold_number);if(m=1)h+;break;printf("n|-|-|-|-|-|-|-|n"); if(h=0)/不能break则执行printf("要查找的班次不存在!n");/查找班次 #include<stdio.h>#include"news.h"int findnum(int s1) int i;printf("n|-|-|-|-|-|-|-|n"); for(i=0;i<class_num;i+)if(s1=timetablei.no) /判断字符串比较是否相等,如果符合则输出车次等信息 printf("|-|-|-|-|-|-|-|n");printf("|%10d|%5d:%-4d|%10s|%10s|%8.1f|%8d|%8d|",timetablei.no,timetablei.hour,timetablei.minute,timetablei.Starting_station,timetablei.Last_station,timetablei.time,timetablei.max_number,timetablei.sold_number);break;printf("n|-|-|-|-|-|-|-|n"); return i;/欢迎界面#include <stdio.h>void huanying ()printf("nnnn");printf("t*n");printf("nnnn");printf("tttt车票管理系统n");printf("nnnn");printf("ttt设计人:李嘉星;刘新月;田宇n");printf("nn");printf("tttt感谢您的使用ntttt按任意键继续n");printf("nn");printf("t*n");/信息录入界面#include <stdio.h>#include "news.h"#include<stdlib.h>#include<conio.h>void Input()int i=0,j=5,h; char s5;void save();void add();void get(int i,int j);FILE *fp; /定义文件型指针变量system("cls"); /清屏if(fp=fopen("车票管理系统0.dat","rb")!=NULL) /fopen打开文件 printf("车票信息已经存在!n");printf("任意输入进入添加菜单n");scanf("%s",s); /收集任意输入i=1; /通过是1add();if(i=0)system("cls"); /清屏printf("请输入要录入班次总数:n");scanf("%d",&class_num); /指向班次指针system("cls"); /清屏for(i=0;i<class_num;i+) system("cls"); /清屏printf("请输入第%d个班次信息:n",i+1);h=-1;for(;h!=i;) /循环输出printf("请输入班次:n");scanf("%d",&timetablei.no);for(h=0;h<i;h+)if(timetableh.no=timetablei.no) printf("输入错误!该班次已存在!n");break; /返回get(i,j); /修改及增加班次j=5;save(); /调用保存函数void get(int i,int j) / 修改及增加班次 for(;)printf("请输入发车时间(xx xx)");scanf("%d %d",&timetablei.hour,&timetablei.minute);if(timetablei.hour<24&&timetablei.hour>=0&&timetablei.minute<60&&timetablei.minute>=0)break;elseprintf("输入错误!n");getch(); /收集回车printf("请输入起点站:n");scanf("%s",timetablei.Starting_station);printf("请输入终点站:n");scanf("%s",timetablei.Last_station);printf("请输入行车时间:n");scanf("%f",&timetablei.time);printf("请输入额定载量:n");scanf("%d",&timetablei.max_number);printf("请输入已售票数:n");scanf("%d",&timetablei.sold_number);/管理员菜单界面#include <stdio.h>void menu1()void Input();void timetable1();void save();void del();void searchesmenu();void land();void add();int n;printf("tttt1、车次信息录入ntttt2、增加车次信息ntttt3、时刻表浏览ntttt4、车辆信息查询ntttt5、注销车次ntttt6、保存ntttt7、返回n");printf("ttt 请输入需要运行的命令编号n"); while(1)/死循环形成菜单scanf("%d",&n);switch(n)case 1:Input();break;/车辆信息录入case 2:add();break;/增加车次信息case 3:timetable1();break;/浏览时刻表case 4:searchesmenu();break;/车辆信息查询case 5:del();break;/注销车次case 6: save();break;/保存命令case 7:land();break;/返回上级菜单default: printf("非法输入n");break;/普通登录菜单#include <stdio.h>void menu2()void timetable1();void ticketorder();void ticketdelete();void land(); void searchesmenu();int n;printf("tttt1、时刻表浏览ntttt2、车辆信息查询ntttt3、购买车票ntttt4、退回车票ntttt5、返回n");printf("ttt 请输入需要运行的命令编号n"); while(1)scanf("%d",&n);switch(n)case 1:timetable1();break;/时刻表浏览case 2:searchesmenu();break;/车辆信息查询case 3:ticketorder();break;/购买车票case 4:ticketdelete(); break;/退回车票case 5:land();break;/返回上级菜单default: printf("非法输入n");break;#include<stdio.h>void huanying ();void land();int main()char ch;huanying(); ch=getchar( );/收集回车land();return 0;#include <stdio.h>#include <stdlib.h>#include "news.h"#include<conio.h>void open()FILE *fp1,*fp2;if(fp1=fopen("车票管理系统.dat","rb")=NULL)system("cls"); /清屏printf("文件打开错误!n");getch(); /收集回车exit(0);if(fp2=fopen("车票管理系统0.dat","rb")=NULL)system("cls"); /清屏printf("文件打开错误!n");getch(); /收集回车 exit(0); /退出fread(&class_num,sizeof(int),1,fp2); /读入信息fread(timetable,sizeof(timetable0),class_num,fp1);/读入信息fclose(fp1);fclose(fp2); /文件关闭#include <stdio.h>#include <stdlib.h>#include "news.h"void save() /保存函数void menu1();FILE *fp1,*fp2; /文件行指针if(fp1=fopen("车票管理系统.dat","wb")=NULL) /打开文件、为输出打开一个二进制文件printf("文件打开错误!n");exit(0);if(fp2=fopen("车票管理系统0.dat","wb")=NULL) /打开文件、为输出打开一个二进制文件printf("文件打开错误!n");exit(0);fwrite(&class_num,sizeof(int),1,fp2); /写入文件信息fwrite(timetable,sizeof(timetable0),class_num,fp1);fclose(fp1);fclose(fp2); /关闭文件 printf("保存成功");menu1();/查询菜单#include<stdio.h>#include<stdlib.h>#include<conio.h>void searchesmenu()int i;void find(int s1,char s2);char s1=0,s210='0'void open();void land();system("cls"); /清屏printf("1. 按班次查询n");printf("2. 按终点站查询n");printf("3. 退出n");printf("请选择(1-3):n");scanf("%d",&i);open(); / 调用按班次查询函数switch(i) /菜单 case 1: printf("请输入要查询的班次:n"); /s1为班次scanf("%d",&s1);find(s1,s2); /调用查找函数break;case 2:printf("请输入要查询终点站:n"); /s2为终点站scanf("%s",s2);find(s1,s2); /调用查找函数break; case 3:land();break;/返回机制default : printf("输入错误!n");break;printf("按任意键继续.n");getch(); /收集回车/退票函数#include<stdio.h>#include"news.h"#include<stdlib.h>#include<conio.h>void ticketdelete() int i;int num;char or;int timee();void open(); int findnum(int s1);void save();void menu2();system("cls"); /清屏printf("1. 退票n");printf("2. 返回n");printf("请选择(1-2)n:");scanf("%d",&i);if(i=1)system("cls"); /清屏open(); / 调用按班次查询函数printf("请输入要退票的班次:n");scanf("%d",&num);i=findnum(num); /调用班次查询函数if(num=timetablei.no) /判断字符串比较是否相等 待比较的字符串 if(timee(i) /判断时间是否超出函数scanf("%c",&or);if(or='y'|or='Y')getch();timetablei.sold_number-; /使已售票加1printf("退票成功!n");save(); /调用保存函数getch(); /从控制台读取一个字符,但不显示在屏幕上elseprintf("该班车已发出,无法退票!n");getch(); /收集回车/售票函数#include<stdio.h>#include"news.h"#include<stdlib.h>#include<conio.h>void ticketorder() int i;int num;void save();int timee(int i);void open();void searchesmenu();void land();system("cls"); /清屏printf("1. 售票n");printf("2. 返回n");printf("请选择(1-2):n");scanf("%d",&i);if(i=1)open(); / 调用openprintf("请输入要订票的班次(若无请输入0):n");scanf("%d",&num);for(i=0;i<class_num;i+)if(num=timetablei.no)/比较是否相等if(timetablei.sold_number>timetablei.max_number&&timee(i)=1) /判断时间是否超出函数*并且*没超出最大客量timetablei.sold_number+; /使已售的票数+1printf("通向%s班次为%d的票订票成功!n",timetablei.Starting_station,timetablei.no);save(); /调用保存函数getch(); /收集回车break;elseprintf("该班次已满或已发出!n");getch(); /收集回车land();else land();#include<time.h>#include<stdlib.h>#include"news.h"int timee(int i) /判断时间是否超出函数*struct tm *local; /时间结构体 time_t t; /把当前时间给tt=time(NULL); /NULL在stdio.h中定义为0local=localtime(&t); /获取当前系统时间 if(local->tm_hour<timetablei.hour|local->tm_hour=timetablei.hour&&local->tm_min<timetablei.minute) return 1; else return 0;#include <stdio.h>#include "news.h"#include<stdlib.h>#include<conio.h>void timetable1() /显示车次函数int i,j;void open();int timee(int i);void land();system("cls"); /清屏open();/ 调用opensystem("cls"); /清屏printf("*MESSAGE车程信息*n");printf("n|-|-|-|-|-|-|-|n"); printf("n| 班次 | 发车时间