第一篇:火车票管理系统可行性报告(本站推荐)
火车票管理系统可行性报告
一.引言
学习《面向对象程序设计》课程必须重视实践环节,即通过C#结合实际需求开发应用程序。本次课程实习选择使用C#开发数据库应用程序,它能将所学的C#整合SQL Server数据库知识,形成与应实际紧密结合的连贯整体,进一步加深学生对C#基础语法的理解,加强对WinForms编程的认识,提高应用ADO.NET这一.NET中数据库驱动解决方案核心技术的能力,为将来的软件设计工作打下一定的基础。
该课程的实习主要是锻炼学生的实际动手与操作的能力,充分实现理论与实践相结合,从而培养出优秀的学生!
1.摘要
系统名称: 火车票管理系统
系统功能: 实现管理员对系统的增删改查等一系列的功能,让客户可以订票、退票等,该系统只要实现简单的操作功能。
2.背景
扬州环境资源职业技术学院1012网络班小组成员在C#面向对象程序设计该课程的实训周内进行的课程实训,借此提高学生的动手能力,理论与实践相结合的能力;该系统主要是在Visual Studio C# 2005的基础上与SQL数据库相结合而成的面向对象的程序设计系统。
二.系统开发的背景、必要性及意义
1.现行系统调查研究
(1)组织机构:扬州环境资源职业技术学院 1012网络班;指导老师:陈彦(2)实训时间:2011年12月26日至2012年1月6日
(3)小组成员:徐涛平(组长)、,孙淑茵、孙垚垚、,夏盼盼、,柏铭慧、,华飞龙、,陈龙、,顾汉明
(4)成员任务:徐涛平、,孙垚垚、,夏盼盼、,柏铭慧、,华飞龙、,陈龙、,顾汉明负责系统相关文档的编写;,柏铭慧负责前期的数据库设计;孙淑茵负责设计后期与系统相连接的数据库DB的设计,并负责系统的编码编写。
(5)计算机应用情况:台式机装有Visual Studio C# 2005和SQL数据库 2.需求调查和分析
对于现在网络的迅速发展,人们越来越关注网络。人们在网络上进行交易,购物,订餐等。在网上进行订票也越来越受人们的欢迎。鉴于这种情况,本人孙淑茵想要开发一个类似的系统,故而有了现在的火车票管理系统。
该系统由于是本人的初次尝试开发,所以功能比较的简单,还存在不足之处。
三.可行性分析
1.系统运行可行性分析 该系统只需要一台装有Visual Studio C# 2005和SQL数据库的的电脑就可以进行运行,对于企业来说,这是最简单的、最实用的系统了;对于人员来说,不需要花费大量的金钱进行人员的培训,只需要招聘一个相关专业的计算机人员,就可以对系统进行操作。2.技术可行性
火车票管理系统功能简单,对人员要求以及技术要求不高,在这方面,只需要一个计算机相关专业的人员就可以操作系统,在技术上完全可以进行。3.经济可行性
在经济上,不需要额外的费用,只需要付费开发人员即可,可以说是一劳永逸,在后期,不需要企业花费费用,只需要技术人员进行定期的维护即可,在经济上完全可行。
四.系统功能简单介绍
1.数据库
火车票管理系统连接的数据库主要是SQL数据库,数据库的名称为DB.mdb,它包括了Stype表、Train表和UserInfo表三张表,由于时间匆忙,所以只有这三张表,进而组成与系统相连接的数据库。详见下图4.1
图4.1 2.系统功能介绍
火车票管理系统功能比较简单,管理员可以对系统进行增删改查,而一般的浏览者就可以对系统进行相应的查票、订票、退票操作,而不能像管理员那样对系统进行增删改查等操作,从而保证了系统的安全性。下图是系统的相关截图,如图4.2、4.3所示:
图4.2
图4.3 五.结论
在2011年12月26日至2012年1月6日实训期间,小组成员团结协作,共同努力,完成了火车票管理系统的开发,在这个过程中每个成员的努力都市值得褒奖的,尤其是负责代码编写的孙淑茵为我们的系统完成与完善更是值得奖励的。
火车票管理系统功能简单,实现方便,但也耗费了人力物力与心力,能在短时间内开发出这样一个的系统,我们的努力是值得肯定的,但是这个系统还存在着不足之处,有望在以后的日子里,对系统进行改善和维护。
六.说明
在这里,对相关的问题做一些说明:
1.我们是软件技术基础实训和C#课程实训前后进行的,软件技术基础实训在前,分组也是在软件技术基础实训期间分的,相关的文档也是在此期间完成的,代码也是在此期间编写完成,只是比较不完善,而且在软件技术基础实训期间小组成员负责前期数据库设计出的数据库并不能用,都是中文,并且表与表之间没有相关的联系,所以负责代码编写的孙淑茵就自己设计了一个数据库DB。
2.在后来的C#实训期间,小组成员孙淑茵自己对软件技术基础实训期间不完善的火车票管理系统进行了改进,在陈彦老师的指导下,才有了后来的完善的火车票管理系统,可以说这个火车票管理系统是孙淑茵同学的私有产物,与小组其他成员关系不大,在此说明一下。
第二篇:火车票管理系统
火车票管理系统一、课题内容和要求
改系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。
二、需求分析
功能框架图:(见图2-1)
火车票管理系统
录入
查找
删除
排序
售票
退票
保存
图2-1。
1.新增火车票数据记录:预先建立一个txt文档,存入数据,然后在程序中读取文档。
2.查找火车票数据(可按车次,发车时间、起点站、终点站等查找)。
3.删除火车票数据记录(先查找,再删除。若查找出多条记录,则进一步提示用户选择记录的车次,再删除)。
4.对火车票排序(可按车次、发车时间、起点站、终点站等排序。)。
5.显示当前所有火车票信息列表。
6.售票(先查找,当确定车次后,根据售票张数对该车次的已售票人数进行修改)。
7.退票(售票的逆处理,过程与售票类似)。
8.保存火车票数据到文件中。
9.从文件中读入火车票数据。
三、概要设计
1)主要结构体:
struct
time
{
int
hour;
int
minutes;
};
struct
ticket
{
char
SerialNumber[10];
struct
time
SetOut;
char
DeparturePoint[MAX];
char
TerminalPoint[MAX];
float
LastTime;
int
FixNumber;
int
FixedNumber;
}train[N];
2)主要函数流程图:
l
载入函数:用于从文本中载入信息。(见图3-1)
打开文本
能否打开
读入数据
是否结束
结束
否
否
开始
开始
否
是
是
读入车次
是否符合输出信息
结束
是
图3-2
图3-1
l
查找函数:利用输入的车次或站点进行顺序查找并将找到的信息输出。(见图3-2)
l
删除函数:先查找出要删除的信息再删除。(见图3-3)
否
否
是
无法订票
人数加一
是否超载
否
图3-4
结束
开始
读入车次
是否误点
否
图3-3
是
是
否
是否符合读入车次
开始
记录下标i
i=i+1,i++
i<车次总数-1
结束
l
售票退票函数:先判断该车是否已发车,若未发车且人未满则订票成功,否则无法订票退票。(见图3-4)
l
备份文件函数:将文件内容存储到用户给定的地址中(见图3—5)
图3-5
l
排序函数(见图3-6)
图3-6
四、源程序代码
#include
#include
#include
#include
#include
#include
const
int
MAX=20;
const
int
N=50;
const
int
MAXFILENAME=100;
enum
{FALSE,TRUE};
struct
time
{
int
hour;
int
minutes;
};
struct
ticket
{
char
SerialNumber[10];
struct
time
SetOut;
char
DeparturePoint[MAX];
char
TerminalPoint[MAX];
float
LastTime;
int
FixNumber;
int
FixedNumber;
}train[N];
int
RecordNumber;
int
FLAG=FALSE;
/**********************************************/
int
ShowMessage(void);
//载入原始数据
void
mainmenu(void);
//主菜单
void
InsertMessage(void);
//录入班次信息
void
SearchMenu(void);
//查询路线子菜单
void
SearchByNumber(void);
//按班次号查询
void
SearchByAddress(void);
//按终点站查询
void
cancle(void);//删除数据
void
selection(ticket
*pa,int
n);//排序
void
TicketManagement(void);
//车票售出与退回
void
TicketOrder(void);
//售票
void
TicketDelete(void);
//退票
void
exit(void);
//退出该系统
void
SaveRecord(ticket
x);
//储存信息到文件中
/********************************************/
int
main(void)
{
do{
mainmenu();
}while(FLAG==FALSE);
return
0;
}
void
mainmenu(void)
{
system(“mode
con:
cols=140
lines=130“);
char
functionNumber;
printf(“
火车票管理系统\n\n“);
printf(“============================================================================\n“);
printf(“
1.录入班次信息\t\n“);
printf(“
2.显示所有车票信息列表\t\n“);
printf(“
3.查询火车票数据\t\n“);
printf(“
4.删除火车票数据记录\t\n“);
printf(“
5.按行车时间排序\t\n“);
printf(“
6.售票与退票系统\t\n“);
printf(“
7.退出该系统\t\n“);
printf(“============================================================================\n“);
printf(“请选择你所需要的功能:“);
scanf(“%c“,&functionNumber);
switch(functionNumber)
{
case
'1':
{
InsertMessage();
printf(“\n按任意键回主菜单......\n“);
getchar();
getchar();
}
break;
case
'2':
{
RecordNumber=ShowMessage();
printf(“\n按任意键回主菜单......\n“);
getchar();
getchar();
}
break;
case
'3':
{
SearchMenu();
printf(“\n按任意键回主菜单......\n“);
getchar();
getchar();
}
break;
case
'4':
{
cancle();
printf(“\n按任意键回主菜单......\n“);
getchar();
getchar();
}
break;
case
'5':
{
selection(train,RecordNumber);
printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“);
int
i;
for(i=0;i { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } printf(“\n按任意键回主菜单......\n“); getchar(); getchar(); } break; case '6': { TicketManagement(); getchar(); getchar(); } break; case '7': { int i; FLAG=TRUE; for(i=0;i { SaveRecord(*(train+i)); } exit(); } break; default: { printf(“输入错误,请确保你的输入为1--7.\n“); printf(“按任意键回主菜单......\n“); getchar(); getchar(); } }//switch ends FLAG=FALSE; } void InsertMessage(void) { FILE *fp; char filename[MAXFILENAME]; int i; printf(“请输入文件名或者文件路径名:“); scanf(“%s“,filename); if((fp=fopen(filename,“r“))==NULL) { printf(“文件%s不可读,请确认文件%s存在或者文件路径正确.\n\n“,filename,filename); mainmenu(); } for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++) { fscanf(fp,“%s%d%d“,&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes); fscanf(fp,“%s%s%f%d%d“,&train[i].DeparturePoint,&train[i].TerminalPoint,&train[i].LastTime,&train[i].FixNumber,&train[i].FixedNumber); } RecordNumber=i; /*******************************输出更新后的订票记录************************************************************/ printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } fclose(fp); } int ShowMessage(void) { int i; FILE *fp; if((fp=fopen(“add.txt“,“r“))==NULL) { printf(“读取数据失败,请检查文件add.txt是否存在.\n“); exit(-1); } for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++) { fscanf(fp,“%s%d%d“,&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes); fscanf(fp,“%s%s%f%d%d“,&train[i].DeparturePoint,&train[i].TerminalPoint,&train[i].LastTime,&train[i].FixNumber,&train[i].FixedNumber); } int count=i; printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\t“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); printf(“\n“); } return count; } void SearchMenu(void) { system(“mode con: cols=140 lines=130“); char functionNumber; printf(“ 查询子菜单\n“); printf(“============================================================================\n“); printf(“ 1.按班次号查询\t\n“); printf(“ 2.按终点站查询\t\n“); printf(“ 3.返回主菜单\t\n“); printf(“============================================================================\n“); printf(“请选择你所需要的功能:“); scanf(“%*c%c“,&functionNumber); switch(functionNumber) { case '1':SearchByNumber();break; case '2':SearchByAddress();break; case '3': getchar(); mainmenu(); break; default: printf(“输入错误,请确保你的输入为1--3.\n“); printf(“按任意键回查询子菜单......\n“); getchar(); getchar(); SearchMenu(); } } void SearchByNumber(void) { int i; char Number[MAX]; printf(“请输入班次号:“); scanf(“%s“,&Number); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i { //对比终点站记录,找到并输出 if((strcmp(Number,train[i].SerialNumber))==0) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } } } void SearchByAddress(void) { int i; char Address[MAX]; printf(“请输入终点站的名称:“); scanf(“%s“,&Address); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i { //对比终点站记录,找到并输出 if((strcmp(Address,train[i].TerminalPoint))==0) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } } } void cancle(void) { SearchMenu(); int i,j; char m[MAX]; printf(“请输入要删除的班次:“); scanf(“%s“,&m); for(i=0;i { if(i==RecordNumber) { printf(“对不起,没有这趟车\n“); } } for(j=i;j { train[j]=train[j+1]; } printf(“删除成功\n“); } void selection(ticket *pa,int n) { int i,k,index; struct ticket temp; for(k=0;k { index=k; for(i=k+1;i if(pa[i].LastTime index=i; if(index!=k) { temp=pa[index]; pa[index]=pa[k]; pa[k]=temp; } } } void TicketManagement(void) { char functionNumber; system(“mode con: cols=140 lines=130“); printf(“ 订票与退票菜单\n“); printf(“============================================================================\n“); printf(“ 1.订票\t\n“); printf(“ 2.退票\t\n“); printf(“ 3.返回主菜单.\n“); printf(“============================================================================\n“); printf(“选择你需要的功能:“); scanf(“%*c%c“,&functionNumber); switch(functionNumber) { case '1': { TicketOrder(); //getchar(); //getchar(); } break; case '2':TicketDelete();break; case '3': { getchar(); mainmenu(); } break; default: { printf(“输入错误,请确保你的输入为1--3.\n“); printf(“按任意键回主菜单......\n“); getchar(); getchar(); mainmenu(); } } } void TicketOrder(void) { SearchMenu(); int i,j; char a[MAX]; printf(“请输入要订购的车票的班次:“); scanf(“%s“,&a); printf(“请输入要订购的车票的张数:“); scanf(“%d“,&j); for(i=0;i { if((strcmp(a,train[i].SerialNumber))==0) { if(train[i].FixedNumber { (train[i].FixedNumber)+=j; printf(“你的订票成功,请按时上车,谢谢使用!\n“); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } else printf(“对不起,票已卖完\n“); } } } void TicketDelete(void) { SearchMenu(); int i,j; char b[MAX]; printf(“请输入要退购的车票的班次:“); scanf(“%s“,&b); printf(“请输入要退购的车票的张数:“); scanf(“%d“,&j); for(i=0;i { if((strcmp(b,train[i].SerialNumber))==0) { if(train[i].FixedNumber>=1) { train[i].FixedNumber-=j; printf(“退订车票成功,谢谢使用!\n“); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } else printf(“对不起,今天的这趟车的票尚未卖出,无法完成退票!\n“); } } } void exit(void) { printf(“\n\n*********************谢谢使用本系统,欢迎下次继续使用***********************\n“); exit(0); } void SaveRecord(ticket x) { FILE *fp; if((fp=fopen(“add.txt“,“a“))==NULL) { printf(“打开文件%s失败\n“,“add.txt“); exit(-1); } fprintf(fp,“\n%s\t%d\t%d\t\t“,x.SerialNumber,x.SetOut.hour,x.SetOut.minutes); fprintf(fp,“%s\t%s\t\t%.1f\t %d\t\t%d“,x.DeparturePoint,x.TerminalPoint,x.LastTime,x.FixNumber,x.FixedNumber); } 五、测试数据及其结果分析 显示的主菜单界面: 火车票管理系统 ============================================================================ 1.录入班次信息 2.显示所有车票信息列表 3.查询火车票数据 4.删除火车票数据记录 5.按行车时间排序 6.售票与退票系统 7.退出该系统 ============================================================================ 请选择你所需要的功能: 1)录入班次信息 输入:1 输出:请输入文件名或者文件路径名: 输入:D:\\1.txt 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 苏州 2.0 200 t2222 12:40 长沙 上海 9.0 250 k2323 13:50 扬州 南京 1.5 200 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单......2)显示所有车票信息列表 输入:2 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 苏州 2.0 200 t2222 12:40 长沙 上海 9.0 250 k2323 13:50 扬州 南京 1.5 200 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单......3)查询火车票记录 输入:3 输出: 查询子菜单 ============================================================================ 1.按班次号查询 2.按终点站查询 3.返回主菜单 ============================================================================ 请选择你所需要的功能: 输入:1 输出:请输入班次号: 输入:k1111 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 按任意键回主菜单......输入:2 输出:请输入终点站的名称: 输入:上海 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 长沙 上海 9.0 250 按任意键回主菜单......4)删除火车票数据 输入:4 输出:查询子菜单 ============================================================================ 1.按班次号查询 2.按终点站查询 3.返回主菜单 ============================================================================ 请选择你所需要的功能: (查找过程同上) 输出:请输入要删除的班次: 输入:t2222 输出:删除成功 按任意键回主菜单......5)按行车时间排序: 输入:5 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k2323 13:50 扬州 南京 1.5 200 k1234 10:20 上海 苏州 2.0 200 k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 长沙 上海 9.0 250 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单......6)售票 输入:6 输出: 订票与退票菜单 =================================================== 1.订票 2.退票 3.返回主菜单 ================================================== 选择你需要的功能: 输入:1 输出: 查询子菜单 ======================================================================== 1.按班次号查询 2.按终点站查询 3.返回主菜单 ========================================================================= 请选择你所需要的功能: (查询过程同上) 输出:请输入需要订购的车票班次 输入:k1111 输出:请输入要订购的车票张数 输入:10 输出: 您的订票成功,请按时上车,谢谢使用! 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 210 7)退票 输入:6 输出: 订票与退票菜单 =================================================== 1.订票 2.退票 3.返回主菜单 ================================================== 选择你需要的功能: 输入:2 输出: 查询子菜单 ======================================================================== 1.按班次号查询 2.按终点站查询 3.返回主菜单 ========================================================================= 请选择你所需要的功能: (查询过程同上) 输出:请输入需要退购的车票班次 输入:k1111 输出:请输入要订购的车票张数 输入:5 退订车票成功,谢谢使用! 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 195 8)退出 输入:7 输出:****************谢谢使用本系统,欢迎下次继续使用**************** 结果分析:(1).若输入数字不在1——7之间,则会提示错误。 (2).当输入列车班次信息不正确时,将不会得到结果。 (3).文件录入不正确时,将不会得到任何结果。 六、调试过程中的问题 1)文件存储方式不正确:应先定义一个文件存储函数,在其它函数中调用,方便有效。 2)删除时若遇到没有的班次则程序出错。应在不存在输入的列车班次时,输出不存在的提示 3)保存后在下次运行时出错问题:在保存信息时,应在每个信息之间加一空格来保存,否则在文件下次使用时读取就会没有分界点。 4)订票退票只能一次一张。应在用户输入列车班次后让用户输入需要订购的张数。 5)结构指针定义错误,ticket前不应加struct。 摘要 随着时代的发展,计算系软件和系统的成熟,火车票的正当管理成为一个影响铁路部门正常运营的因素之一,而建立火车票订票管理系统是一个很好的解决办法。作为计算机应用的一部分,使用计算机对火车票信息进行管理,具有手工管理所无法比拟的优点,例如检索迅速、查找方便、可靠性高、存储量大、保密性好等,这些优点能够极大的提高火车票信息管理的效率,也正体现了火车票的科学化正规化管理 现在随着社会的发展,数据量急剧增长,现在人们就借助计算机和数据库技术科学的保存大量的数据,以便能更好的利用这些数据资源。本论文就是通过MFC的整体设计把数据库与应用程序相连接,做成一个火车票的订票管理系统,使得火车票管理员能够有效的管理车次信息、旅客信息、退票信息等。同时用户可以通过查询到相关的火车票信息,选择是否适合自己,也可以在网上直接订票、退票,省时省力。 关键字: SQL2000,MFC,数据库设计,火车票订票系统 目录 第一章概述 1.1项目开发背景 1.2系统开发目的 1.3技术可行性研究 第二章开发平台介绍 2.1 系统的架构 2.2系统运行环境操作系统 2.3系统开发环境 2.4开发工具 第三章数据库设计 3.1系统详细调查 3.2数据流图 3.3数据库设计 第四章系统的界面设计 4.1主窗口界面 4.2旅客信息窗口 4.3车次信息窗口 4.4取票及退票窗口 第五章系统的实现 总结与展望 致谢 参考文献 需求分析 需求分析的任务 调查机票预定系统应用领域涉及的内容,对涉及到领域的各个应用的信息要求和操作要求进行详细分析,形成需求分析说明书。最重要的是调查、收集信息、分析购票人信息和火车预定流程。处理要求、数据的安全性与完整性要求。 要求系统能有效、快速、安全、可靠和无误的完成上述操作。并要求客户机的界面要简单明了,易于操作,服务器程序利于维护。需求分析的过程 火车站为方便旅客,需开发一个火车票预定系统。为便于旅客由网上定票,把预定火车票的旅客信息,包括姓名、性别、工作单位、身份证号码、出发时间、目的地,输入火车票订票系统的客户端程序,系统经过查询火车站内的列车车次数据服务器后,为旅客安排列车,印出取票通知。旅客在火车出发前一天凭取票通知和帐单交款后取票,系统校对无误后即印出火车票给旅客。如果某方面出现问题,旅客可以持有效证件去火车站退票。 要求系统能有效、快速、安全、可靠和无误的完成上述操作。并要求客户机的界面要简单明了,易于操作,服务器程序便于维护。数据字典与流程图 经过可行性分析和初步需求调查,抽象出该系统业务流程图,结合该实例具体情况,给出旅客信息、订票信息和取票通知的具体需求。 图2.1 旅客购票流程图 ⑴调查用户需求 ①售票处需求 功能:旅客持个人证件去火车站购买火车票。希望能通过旅客姓名查到该旅客的列车车次并记录旅客基本信息。统计功能: 按火车票统计买票人数 按姓名统计火车票数 ②旅客购票需求 交费功能: 交费 退费 ③取票需求 通知功能: 通知旅客取票 统计功能: 统计通过验证的人数 统计可以取票的人 统计未通过验证的人数 查询功能: 购票旅客查询 购票旅客姓名 购票旅客身份证号 购票旅客订单号 ④列车车次信息需求 查询功能: 车次 始发站 终点站 始发时间 系统框架 在调查完了用户需求之后,就要开始分析用户需求。在此,我们们采用自顶向下的结构化分析方法(SA方法)。首先,定义全局概念结构的框架,如图2.2所示。 图2.2火车票预定系统总框架图 各子系统需要进一步细化。旅客信息系统为例进一步细化,如图2.3所示。 图2.3旅客信息系统细化 以其中的查询旅客信息功能为例进一步细化,如图2.4所示。 图2.4查询旅客信息功能 图2.5列车车次信息系统细化 图2.6取票通知系统细化 图2.7旅客信息系统能查询到的内容 图2.8火车票信息系统能查询到的内容 图2.9退票信息系统细化 将所有子系统全部细化。将所有用户需求分析完毕之后,就要开始构造数据字典了。经分析之后,本系统要用到五个基本表:退票信息表,旅客信息表,列车车次信息表,取票通知信息系统,列车座位信息表。数据结构定义如表2.1所示。表2.1 数据结构定义 数据结构名 含义说明 组成退票信息 定义了退票旅客的有关信息 旅客姓名,身份证号,订单号,电话号 旅客 定义了旅客有关信息 旅客姓名,身份证号,性别,工作单位,电话号 列车车次信息表 定义了车次 的有关信息 车次号,始发地,目的地,始发时间 取票通知单 定义了取票通知相关有关信息 旅客姓名,取票时间,列车车次,座位号,火车票类型 列车座位信息表 定义了列车座位有关信息 列车号,座位号,座位信息,火车票类型 概念结构设计 概念结构设计的方法与步骤 概念结构设计的方法 概念设计阶段我们采用自底向上的方法,即自顶向下的进行需求分析,然后再自底向上的进行概念结构设计。对已经细化到无法再分的阶段逐步集成在一起,最终合成一个全局概念模式。 概念结构设计的步骤 第一步是进行局部视图的设计:由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。因此我们们先逐一的设计分E-R图。 第二步是进行视图的集成:各子系统的E-R图设计好之后,下一步就是要将所有的分E-R图合成一个系统的总E-R图,一般有两个方式,多个分E-R图一次集成,另一种是一次集成两个分E-R图。我们想采用一次集成两个分E-R图的方式。数据抽象与局部视图设计 按照图2.2机票预定系统总框架图,设计实体属性图以及局部E-R图。 图3.1退票信息系统 图3.2旅客信息系统 ……图3.3列车车次信息 图3.4取票通知信息 图3.5列车座位信息表 图3.6旅客购票局部E-R 视图的集成 经过逐步细化再进行每两个一集成初步形成一个E-R图,最后得到图3.4总体概念结构E-R图 图3.4系统总体结构E-R图 逻辑结构设计 E-R图向关系模型的转换 将图3.4总体概念结构E-R图转化成关系模型。退票信息(订单号,旅客姓名,电话号,身份证号) 旅客(旅客姓名,身份证号,电话号,性别,工作单位)车次信息表(车次号,始发站,终点站,始发时间) 取票通知单(旅客姓名,取票时间,车次号,座位号,车票类型)列车座位信息表(座位号,车次号,座位信息,车票类型)数据模型的优化 将转化的关系模式进行优化,最终达到第三范式。 1、确定数据依赖 退票信息(订单号,旅客姓名,电话号,身份证号)根据这个关系写出数据依赖 订单号→旅客姓名,订单号→电话号,订单号→身份证号 旅客(旅客姓名,身份证号,电话号,性别,工作单位)旅客姓名→身份证号,旅客姓名→电话号,旅客姓名→性别,旅客姓名→工作单位 车次信息表(车次号,始发地,目的地,始发时间)列车车次→始发站,列车车次→终点站,车次→始发时间 取票通知单(旅客姓名,取票时间,车次号,座位号,机票类型)旅客姓名→取票时间,旅客姓名→车次号,旅客姓名→座位号,旅客姓名→车票类型 火车座位信息表(座位号,车次号,座位信息,车票类型)(座位号,车次号)→座位信息,(座位号,车次号,座位信息)→车票类型 对各关系模式间数据依赖进行极小化处理,消除冗余 订单号→旅客姓名,订单号→电话号,订单号→身份证号,旅客姓名→性别 旅客姓名→工作单位,旅客姓名→取票时间,旅客姓名→车次号 旅客姓名→座位号,旅客姓名→车票类型,车次号→始发站,列车号→终点站 车次号→始发时间,(座位号,车次号)→座位信息 看这些模式是否符合要求,确定是否要对某些模式进行合并或者分解 最终分解成第三范式: (订单号,电话号,身份证号)(订单号,旅客姓名)(旅客姓名,取票时间,性别,工作单位,车票类型)(旅客姓名,车次号)(旅客姓名,座位号)(车次号,座位号,车票类型)(车次号,始发站,终点站,始发时间) 学生公寓管理系统可行性报告 一.引言 摘要 随着电脑的普及与使用,现在的管理也提升了一个档次,渐渐实现了无纸化办公,即从原来的人工记录管理模式转变为电脑一体化管理。高校是科研的阵地,后勤的公寓管理也应该一改传统的人工管理,更加信息化,时代化,节省人力物力,提高效率。基于这一点,开发此学生公寓管理软件。 学生公寓管理软件,是以高校的管理方式为实例而设计的一种实用型管理系统。本系统最大的特点是通用性、简单操作性,适用于同行业以及一些同类型的企业管理。随着学校寄宿人员的增多,公寓管理人员的负担越来越重,为了让所有公寓管理人员能从繁重的工作中解脱出来,实现无纸化办公;使工作更有条理,更方便,更有效率而开发出这套公寓管理软件。 软件从对学生的分房开始到最后的公寓管理全部电脑化。它主要包括:公寓、寝室的配置、住宿人员登记、卫生检查、公寓资产、值班老师记录以及对学生住宿情况查询,可以更快地了解到每个学生的住宿情况,使公寓的管理效率更高,做的更好! 背景 名称:学生公寓管理系统。 本项目的任务提出者:郑州航院信息统计职业学院。开发者:迈拓者工作室。 用户: 学院公寓办的全体教师职工。 参考资料 《管理信息系统案例教程》、《ASP.NET程序设计与应用开发》等有关资料。 二.可行性研究前提 要求 “学生公寓管理系统”必须适应当前学校实际情况,符合国家各种政策法规,信息指标体系满足标准化要求,能够协助公寓办管理人员统筹安排,提高工作效率。 进行可行性研究的方法 主要通过跟学院对系统的需求分析和研究比较的方法 三.系统的方案 系统的目标:实现办公信息化,使公寓管理更加合理、有序,提高办事效率。 四.系统的功能 系统功能模块包括五大模块:管理系统模块,查询学生模块,宿舍管理模块,资料修改模块,出入登记模块。 1.管理系统模块:实现用户退出功能。 2.查询学生模块:该模块包括五个子模块 按学号查询——实现按学号查询学生信息 按姓名查询——实现按姓名查询学生信息 按学生班级查询——实现按学生班级查询学生信息 按宿舍号查询 ——实现按学生宿舍号查询学生信息 3.宿舍管理模块:包括四个子模块 基本情况录入——录入入住学生的基本信息 宿舍分配管理——处理学生的入宿、退宿、更新 个人财物处理——登记学生个人财产 4.资料修改模块:包括;两个子模块 学生修改——完成学生基本资料修改,个人财物修改和学期注册情况修改 登记修改——实现来访登记修改和物品出入宿舍修改 5.出入登记:包括两各子模块 来访登记——完成来访人员的信息登记 五.系统结构 系统采用B/S结构 五.可行性研究 开发系统的必要性 由于公寓人工管理效率低下,工作繁杂,所以需要建立这样一个“学生公寓管理系统”来提高效率,便于管理。 开发系统的经济可行性 学院提供相关费用。 开发系统的技术可行性 利用Asp.net, SQL Server等技术。 在限制条件下,功能目标是否能达到:看是否能给出正确的信息和提示。 对开发人员数量和质量的要求:七个开发人员,都精通相关技术。在规定的期限内是否能完成:能。 社会条件方面的可行性 法律方面的可行性:符合法律规定的相关条例,完全遵照国家法规来进行研究。 用户使用的可行性:会使用计算机的公寓管理人员。 #include using namespace std; class Bus_infor { int No; static int Bus_No;char start[20];char end[20];int Bus_order; int all_tickted;int tickted;int Hour_start,Minute_start,Hour_end,Minute_end;int Hour;int Minute; public: Bus_infor *next;Bus_infor();~Bus_infor();int Get_no();int Get_all_tickted();int Get_tickted();int Get_bus_order(); char *Get_start();char *Get_end();void addr(); void Order_tickt(int n);void Unorder_tickt(int n);void GetTime_start();void GetTime_end();void ShowTime();void GetTime();void Show_infor(); void input(){ cout<<“ttt按提示输入:”< cout<<“tt输入车次: ”; cin>>Bus_order; cout<<“请输入车的额定载量: ”; cin>>all_tickted; GetTime_start(); GetTime_end(); addr(); char a; cout<<“是否清空售票(y/n)?”< cin>>a; if(a=='y')tickted=0;} void input(ifstream & is) { is>>Bus_order>>start>>end>>all_tickted>>tickted>>Hour_start>>Minute_start>>Hour_end>>Minute_end; is.get(); } void output(){cout<<“客车基本信息如下:”< <<“ 发车时间:”< <<“ 起点站:”< <<“ 终点站:”< <<“行车时间”< <<“额定载量”< void output(ofstream & os) { os< < < < < < < < < < }; int Bus_infor::Bus_No=1; void Bus_infor::GetTime_start(){ int NewH=0,NewM=0;cout<<“请输入发车时间:”< void Bus_infor::GetTime_end(){ int NewH=0,NewM=0;cout<<“请输入行车时间:”< void Bus_infor::GetTime(){ if(Minute_end>=Minute_start){Minute=(Minute_end-Minute_start);Hour=(Hour_end-Hour_start);} else {Minute=(Minute_end-Minute_start+60);Hour=(Hour_end-Hour_start-1);} } void Bus_infor::ShowTime(){ cout< cout< tickted=0;} Bus_infor::~Bus_infor(){ Bus_No--;} void Bus_infor::addr(){ cout<<“请输入起点站与终点站:”< cin>>a;cin>>b;strcpy(start,a);strcpy(end,b);} char *Bus_infor::Get_start(){ return start;} char *Bus_infor::Get_end(){ return end;} int Bus_infor::Get_no(){ return No;} int Bus_infor::Get_all_tickted(){ return all_tickted;} int Bus_infor::Get_tickted(){ return tickted;} int Bus_infor::Get_bus_order(){ return Bus_order;} void Bus_infor::Order_tickt(int n){ tickted=tickted+n;} void Bus_infor::Unorder_tickt(int n){ tickted=tickted-n;}; class Bus_link{ public: Bus_link(){head=new Bus_infor;head->next=NULL;key=0;} void input();void mend();void del();int find(Bus_infor **p,int num,char *pn); int find1(Bus_infor **p,int num,char *pn); void found();void show(); void Order(); void Unorder(); void save(); void begin(); void clear(); char mainmenu(); int getkey(){ return key;} void setkey(int k){ key=k;} private: Bus_infor *head; int key;}; void Bus_link::input(){ Bus_infor *p,*p2=NULL;p=head; int n;while(p->next) p=p->next;while(n){ p2=new Bus_infor; p2->input(); p->next=p2; p2->next=NULL; p=p->next; Bus_link::setkey(1); cout<<“ttt按1继续,按0返回 : ”; cin>>n;} } void Bus_link::Order(){ Bus_infor *p;cout<<“确定购票(y/n)?”< int num; cout<<“ttt输入车次号: ”; cin>>num; if(!find1(&p,num,“^”)) { cout<<“tt找不到你要定票的车辆的内容!”< return; } cout<<“输入要定的票数 ”; int n;cin>>n; p=p->next; if((p->Get_tickted()+n)<=p->Get_all_tickted()) {p->Order_tickt(n); cout<<“谢谢使用”< else cout<<“对不起,没有足够的票数。”< } else if(X=='n')cout<<“谢谢使用”< void Bus_link::Unorder(){ Bus_infor *p;cout<<“确定退票(y/n)?”< int num; cout<<“ttt输入车次号: ”; cin>>num; if(!find1(&p,num,“^”)) { cout<<“tt找不到你要定票的车辆的内容!”< return; } cout<<“输入要退的票数 ”; int n;cin>>n; p=p->next; if((p->Get_tickted()-n)>=0) p->Unorder_tickt(n); else cout<<“对不起,数据出错!。”< } else if(X=='n')cout<<“谢谢使用”< void Bus_link::found(){ Bus_infor *p;int num=-1,n=9;char name[20]=“^”;do { cout<<“tt1:按车次查找,2:按终点站查找: ”; cin>>n;}while(n<1||n>2);if(n==1){ cout<<“ttt输入车次: ”; cin>>num;} if(n==2){ cout<<“ttt输入终点站: ”; cin>>name;} if(!find(&p,num,name)){ cout<<“tt找不到你要查找的内容!”< return;} } int Bus_link::find(Bus_infor **p1,int num,char *pn){ Bus_infor *p; p=head; int t=0; while(p->next){ (*p1)=p; if((p->next)->Get_bus_order()==num||!strcmp((p->next)->Get_end(),pn)) { (p->next)->output(); t=1; break; } p=p->next;} return t;} int Bus_link::find1(Bus_infor **p1,int num,char *pn){ Bus_infor *p;p=head;int t=0;while(p->next){ (*p1)=p; if((p->next)->Get_bus_order()==num||!strcmp((p->next)->Get_end(),pn)) {return 1;} p=p->next;} return 0;} void Bus_link::del(){ Bus_infor *p,*p2;int num;cout<<“ttt输入车次号: ”;cin>>num; if(!find(&p,num,“^”)){ cout<<“tt找不到你要删除的内容!”< return;} p2=p->next;p->next=p2->next;delete p2;Bus_link::setkey(1);} void Bus_link::show(){ Bus_infor *p;p=head;while(p->next){ (p->next)->output(); p=p->next;} } void Bus_link::mend(){ Bus_infor *p;int num=-1;char name[20]=“^”; cout<<“ttt输入车次号: ”;cin>>num; if(!find1(&p,num,name)){ cout<<“tt找不到你要修改的内容!”< return;}(p->next)->output();(p->next)->input();Bus_link::setkey(1);} void Bus_link::save(){ Bus_infor *p;p=head;ofstream os(“bus.txt”,ios::out);if(Bus_link::getkey()==1){ while(p->next) { (p->next)->output(os); p=p->next; } } cout<<“ttt文件已保存!”< Bus_infor *p,*p2;p=head;clear();long t;ifstream is(“bus.txt”,ios::in); if(!is){ ofstream os(“bus.txt”,ios::out); os.close(); return;} int num=-1;while(1){ num=-1; t=is.tellg(); is>>num; is.seekg(t); if(num<0) { is.close(); return; } p2=new Bus_infor; p2->input(is); p->next=p2; p2->next=NULL; p=p->next;} } void Bus_link::clear(){ Bus_infor *p,*p2;p=head->next;while(p){ p2=p; p=p->next; delete p2;} } char Bus_link::mainmenu(){ char n[6];cout<<“nn ---欢迎使用车票管理系统---”< 制作人 刘强 ”< <<“ 物理学院 ”< <<“ ”< <<“ 1.录入车票信息 2.浏览车票信息 <<” 3.查询车票信息 4.删除车票信息 <<“ 5.修改车票信息 6.定购车票信息 <<” 7.退还车票信息 8.保存车票信息 <<“ 0: 退出系统 <<”--------------------------“< <<”--------------------------“< <<” 请选择功能按钮: “;cin>>n;return n[0];} int main(){ Bus_link pp;int k=1;char n;pp.begin(); while(k==1){ n=pp.mainmenu(); switch(n) { case '1':pp.input();break; case '2':pp.show();break; case '3':pp.found();break; ”< case '4':pp.del();break; case '5':pp.mend();break; case '6':pp.Order();break; case '7':pp.Unorder();break; case '8':pp.save();break; case '0': if(pp.getkey()==1) { cout<<“ttt是否保存? 1 : 保存 0:不保存 : ”; cin>>k; if(k==1) pp.save(); } pp.clear(); k=0; break; } } return 0;}第三篇:火车票订票管理系统++设计报告
第四篇:学生公寓管理系统可行性报告
第五篇:c++课程实践火车票管理系统