第一篇:火车订票系统c++程序
/* 头文件 */ #include //标准输入、输出头文件 #include //包含字符串函数处理头文件
#include //包含动态存储与释放函数头文件 /* 宏定义 */ #define GESHI “ 车次 站数 起始站 终点站 开车时间 到达时间 票数n” //输出
表
头
#define
“ %5s%10s%10s%10s%13s%13s%10dn”,s[i].code,s[i].data,s[i].lp,s[i].ap,s[i].lt,s[i].at,s[i].count //输出记录格式 #define N 1000 //最大列车组数 /* 结构定义 */ struct train //定义结构体数组 { char code[10];//车次 char data[10];//站数 char lp[20];//起始站 char ap[20];//终点站
char lt[10];//开车时间 char at[10];//到达时间 int count;//票数 }s[N];/* 全局变量 */ int i;//输入计数器 int m=0;//合计计数器 char l[20];//纠错空间 /* 函数声明 */ void INPUT();//输入车次信息 void PRINTF();//输出车次信息 void save();//保存车次信息 void read();//读取车次信息 void search();//查找车次信息 void dingpiao();//订票信息 void tuipiao();//退票信息 void WRONG();//纠错模块
///////////////////////////////////////////////////////////////////////////////////////主函数 void main(){
int
j;do
{
system(“cls”);//
清
屏
语
句
printf(“ *************************************************************n”);printf(“
欢迎进入火车票务管理系统
n”);printf(“ *************************************************************”);printf(“ n
请输入选项 nn”);printf(“ 1.添加列车信息 nn” “ 2.查找 nn” “ 3.订票 nn” “ 4.退票 nn” “
5.退出
nn”);printf(“ *************************************************************nn”);printf(“请选择: ”);scanf(“%d”,&j);gets(l);
switch(j){ case 1: INPUT();//调用输入模块 break;case 2:search();//调用查找模块 break;case 3:dingpiao();//调用订票模块 break;case
4:tuipiao();//调用退票模块 break;case
5:;break;default:WRONG();break;} }while(j!=5);//判断结束
printf(“n 王志强
1241班 201210913124 n ”);printf(“n--------”); printf(“n 正在退出,请按任意键退出”); printf(“n--------n ”);}//主函数结束
//////////////////////////////////////////////////////////////////////////////////////////输入模块 void INPUT(){
int y;
system(“cls”);printf(“n ====================欢迎
进
入
录
入
火
车
时
刻
信
息
界
面
====================nn”);for(i=0;i
printf(“请输入车次号: ”);scanf(“%s”,&s[i].code);//读取车次号 printf(“请输入站数: ”);scanf(“%s”,&s[i].data);//读取站数 printf(“请输入起始站: ”);scanf(“%s”,s[i].lp);//读取起始站 printf(“请输入终点站: ”);scanf(“%s”,s[i].ap);//读取终点站 printf(“请输入开车时间: ”);scanf(“%s”,s[i].lt);//读取开车时间 printf(“请输入到达时间: ”);scanf(“%s”,s[i].at);//读取到达时间 printf(“请输入车票数: ”);scanf(“%d”,&s[i].count);//读取票数 m++;
printf(“第%d个信息已经输完.按任意键继续,按 0 结束: ”,m);scanf(“%d”,&y);gets(l);if(y==0){ save();//将结构体信息存盘 PRINTF();//输出输入的列车信息
printf(“n 按任意键返回上级菜单: ”);gets(l);break;} }
}
////////////////////////////////////////////////////////////////////////保存模块程序 void save(){ FILE *fp,*fp1;//定义文件指针
if((fp=fopen(“chen.dat”,“wb”))==NULL)//打开文件并判断是否出错 { printf(“创建文件失败!nn”);//打印出错提示 getchar();return;} if((fp1=fopen(“hao.dat”,“wb”))==NULL)//打开文件并判断是否出错 { printf(“创建文件失败!nn”);//打印出错提示 getchar();return;}
for(i=0;i printf(“关闭文件 }
///////////////////////////////////////////////////////////////////////文件读取模块 void read(){ FILE *fp,*fp1;//定义文件指针
if((fp=fopen(“chen.dat”,“rb”))==NULL)//打开文件,并判断是否出错 { printf(“出错,请检查文件是否存在,按任意键返回住菜单”);//打印出错提示
getchar();} if((fp1=fopen(“hao.dat”,“rb”))==NULL)//打开文件并判断是否出错 { printf(“创建文件失败!nn”);//打印出错提示 getchar();return;} fscanf(fp1,“%d”,&m);fclose(fp1);//关闭文件 for(i=0;i
//////////////////////////////////////////////////////////////////////////////查询模块 void search(){ char name1[20];char name2[20];char ii[10];int nk;char no[10];do { system(“cls”);//清屏语句
printf(“nn ====================欢迎进入 查询火车时刻信息 界面====================n”);
printf(“n
++++++++++++++++++++++++++++++++++++nn”);
请
选
择
查
找
方
式
向
文
件
输
入
数
据
失
败!nn”);fprintf(fp1,“%d”,m);fclose(fp);//关闭文件 fclose(fp1);//
printf(“
----1.显示所有列车信息
2.按车次查询 3.按始发站查询----n”); printf(“
-----4.按终点站查询 5.返回主菜单----n”);
printf(“n 请选择: ”);scanf(“%d”,&nk);//读取查找方式 gets(l);if(nk==5)break;
switch(nk){ case 1:PRINTF();//调用打印模块 break;case 2: printf(“请输入车次号:n”);scanf(“%s”,&no);//车次号 break;case
3:
printf(“
请输入始发站名称:
n”);scanf(“%s”,name1);//读取始发站 break;case 4: printf(“请输入终点站名称:n”);scanf(“%s”,name2);//终点站 break;default:
WRONG();
break;} read();//调用读取函数 for(i=0;i>是否继续查找?(y/n)<--------nntt”);scanf(“%s”,ii);}while(strcmp(ii,“y”)==0);//判断结
束
}
///////////////////////////////////////////////////////////////////////////////////订票模块 void dingpiao(){ int n;char a[10];do { system(“cls”);
search();//调用查询模块
printf(“请输入您要订的车票数以回车键结束
:
”);scanf(“%d”,&n);//
读
取
所
订
机
票
数
if(n<0){ system(“cls”);WRONG();//scanf(“%s”,l);//gets(l);
break;} if(s[i].count!=0&&s[i].count>=n)//判断是否出错 { s[i].count=s[i].count-n;//调用保存函数
system(“cls”);printf(“订票成功!nn”);printf(“ntt按任意键返回主菜单: ”);scanf(“%s”,l);
break;} if(s[i].count
break;} printf(“是否继续?(y/n):n”);//判断是否继续订票
scanf(“%s”,a);}while(!strcmp(a,“y”));//判断结束
}
///////////////////////////////////////////////////////////////////////////////退票模块 void tuipiao(){ int n;char a;do { search();//调用查询模块
printf(“请输入您要退的机票数目:n”);scanf(“%d”,&n);//输入所退票数
gets(l);if(n<0)//判断票数是否有效 {
WRONG();
break;} s[i].count=s[i].count+n;do {
system(“cls”);//借鉴而来的清屏语句,好用!
printf(“nn-->退票成功<--”);printf(“nn-->继续 y,返回主菜单 n <--”);
a=getchar(); gets(l);
if(a!='y'&&a!='n') WRONG();
}while(a!='y'&&a!='n');}while(a!='n');//判断并跳出循环 } ///////////////////////////////////////////////////////////////////////////////////////纠错模块 void WRONG(){ system(“cls”);//借鉴而来的清屏语句,好用!
printf(“nn--->!!输入错误,请按任意键返回!!<---”);gets(l);} 第二篇:火车订票管理系统
学号11~15 选题三:火车票订票管理系统
1.基本要求:为方便管理火车票购买信息,编写一个火车票订票管理系统软件。系统记录必须包括订票人姓名、订票人身份证号、始发站、终到站、票价、席别、订票时间等。2.基本管理功能: [1] [2] 添加:增加一条订票人的记录到管理系统中。
查询:根据订票人身份证查找订票人的相关信息并显示,若找不到也要给出相应提示。[3] [4] 修改:在管理系统中修改订票人的订票记录。
保存:将所有订票信息保存在一个文件中(数据库文件或普通的文本文件)。[5] [6] [7] [8] 读取:从文件中读取已保存了数据。删除:从管理系统中删除一条记录。恢复:能恢复被删除的记录。
统计:(A)统计每天订票张数和总车票金额;(B)统计单价在100元以下、100~400元之间和400元以上的票数总张数及总金额;(C)以表格形式打印所有订票信息。
源代码:
#include #include #include #include using namespace std; int d;//用于选择(按1继续,按2退出,按他其他报错待完善)int x=1;//用于脱出while循环
string sfz;//身份证号码,用户输入可用到 class
ticket
{public:
string
ID;string
name;string
Sstation;string Tstation;float price;string seat;string time;ticket *next;ticket(string I,string n,string S, string T,float p, string s,string t){ID=I;name=n;Sstation=S;Tstation=T;price=p;seat=s;time=t;} void display();};
void ticket::display(){cout< cout<<“|” * 1.添加车票信息 *”< * 2.查询车票信息 *”< * 3.修改车票信息 *”< * 4.删除车票信息 *”< * 5.恢复车票信息 *”< * 6.显示车票信息 *”< * 7.统计车票信息 *”< * 8.保存车票信息 *”< * 9.读取车票信息 *”< * 0.离开 *”< **************************************************************”< ticket *head=NULL,*del=NULL,*p0,*p1,*p2,*p3,*p4;//head数据链表头指针,p0,p1,p2添加函数专用,避免发生错误 int check(string b)//身份证号码作为功能基本辨别数据,应该有 一个函数专门检查其是否重复,0 表示重复,1 表示不重复 {ticket *ch;ch=head;int che=1;while(ch!=NULL) {if(ch->ID==b){che=0;ch=NULL;} else {ch=ch->next;} } return che;} int check1(string b)// sbl {ticket *ch;ch=del;int che=1;while(ch!=NULL) {if(ch->ID==b){che=0;ch=NULL;} else {ch=ch->next;} } return che;} int add()//将订票数据保存在一个基础链表中 {system(“cls”);float name,ID,Sstation,Tstation,seat,time; if(head==NULL)// 以 下 为 链 表 为 空 的 情 况 { cout<<“=============开始输入订票信息=============”< cout<<“请输入订票人身份证号码:”;cin>>ID;cout<<“请输入订票人姓名:”;cin>>name;cout<<“请输入始发站:”;cin>>Sstation; cout<<“请输入终点站:”;cin>>Tstation; cout<<“请输入票价:”;cin>>price;cout<<“请输入席别:”;cin>>seat;cout<<“请输入订票时间(年月日以“-”隔开):”;cin>>time; head=p1=p2=new ticket(ID,name,Sstation,Tstation,price,seat,time);x=1;while(x){system(“cls”); cout<<“按1继续输入,按2退出-》”; cin>>d; if(d==1) {system(“cls”); price;string p1->next=NULL; cout<<“=============开始输入订票信息=============”< cout<<“请输入订票人身份证号码:”; cin>>ID; if(check(ID)==0){cout<<“身份证号码重复!”< system(“pause”); return 0;} cout<<“请输入订票人姓名:”; cin>>name; cout<<“请输入始发站:”; cin>>Sstation; cout<<“请输入终点站:”; cin>>Tstation; cout<<“请输入票价:”; cin>>price; cout<<“请输入席别:”; cin>>seat; cout<<“请输入订票时间(年月日以“-”隔开):”; cin>>time; p1=new ticket(ID,name,Sstation,Tstation,price,seat,time); p2->next=p1; p2=p1; } else if(d==2) {p1->next=NULL; x=0; } else {cout<<“非法输入!”< } //以上为链表为空的情况 else //以下为链表已有数据,往末尾添加 {p3=head; while(p3->next!=NULL) {p3=p3->next;} x=1; while(x) {system(“cls”); cout<<“=============开始输入订票信 cout<<“请输入订票人身份证号码:”; cin>>ID; if(check(ID)==0){cout<<“身份证号码重复!”< system(“pause”); return 0;} cout<<“请输入订票人姓名:”; cin>>name; cout<<“请输入始发站:”; cin>>Sstation; cout<<“请输入终点站:”; cin>>Tstation; cout<<“请输入票价:”; cin>>price; cout<<“请输入席别:”; cin>>seat; cout<<“请输入订票时间(年月日以“-”隔开):”; cin>>time; p0=new ticket(ID,name,Sstation,Tstation,price,seat,time); p3->next=p0; p3=p0; system(“cls”); 息=============” if(d==1){x=1;p3->next=NULL;} else if(d==2){p3->next=NULL;x=0;} else {cout<<“非法输入!”< } } //以上为链表已有数据,往末尾添加 return 1;} ticket *search1(string a)//查询函数1,用于输入身份证号码返回一个指针,可在其他部分被使用 {ticket *cha1;cha1=head;x=1;while(x) {if(cha1==NULL){x=0;} else if(cha1->ID==a){x=0;} else {cha1=cha1->next;} } return cha1;} ticket *search_1(string a)//改查1后面都得改,嗯,就这样了(~ ̄▽ ̄)~ {ticket *cha1;cha1=del;x=1;while(x) {if(cha1==NULL){x=0;} else if(cha1->ID==a){x=0;} else {cha1=cha1->next;} } return cha1;} ticket *search2(string b)//查询函数2,返回所要查询结点的前一个结点的指针,在删除部分使用 {ticket *cha2,*cha3;cha2=cha3=head;x=1;while(x) {if(cha2->next==NULL){x=0;} else if(cha2->ID==b){x=0;} else {cha3=cha2; cha2=cha2->next;} } return cha3;} ticket *search_2(string b)//-_-{ticket *cha2,*cha3;cha2=cha3=del;x=1;while(x) {if(cha2->next==NULL){x=0;} else if(cha2->ID==b){x=0;} else {cha3=cha2; cha2=cha2->next;} } return cha3;} void search()//用于用户查询功能(目前只能查询一次,然后退出,待完善){system(“cls”);cout<<“请输入身份证号码:”;cin>>sfz;p3=search1(sfz);if(p3==NULL){cout<<“无相关信息!”< cout<<“|”< cout<<“----------”< p3->display();system(“pause”);} } void display1()// {system(“cls”);ticket *dis;cout< {dis->display(); dis=dis->next; } while(dis!=NULL);} void modify()//修改函数,用于修改数据(目前只可以修改单个订票信息,待完善){system(“cls”);display1();cout<<“请输入要修改信信息!”< while(x) {system(“cls”); cout<<“1.身份证号码 2.姓名 3.始发站 4.终点站 5.票价 6.席别 7.时间”< cout<<“请输入要修改的选项前的编号:”; cin>>d; if(d==1){hui2: cout<<“请输入身份证号码:”; cin>>sfz; 息 的 身 份 证 号 码:”;cin>>sfz;p3=search1(sfz);if(p3==NULL){cout<<“无相关 if(check(sfz)==0){cout<<“身份证号码重复!”< goto hui2;} p3->ID=sfz; } else if(d==2){cout<<“请输入姓名:”;cin>>p3->name;} else if(d==3){cout<<“请输入始发站:”;cin>>p3->Sstation;} else if(d==4){cout<<“请输入终点站:”;cin>>p3->Tstation;} else if(d==5){cout<<“请输入票价:”;cin>>p3->price;} else if(d==6){cout<<“请输入席别:”;cin>>p3->seat;} else if(d==7){cout<<“请输入时间:”;cin>>p3->time;} else {cout<<“非法输入!”< hui1: cout<<“按1继续输入,按2退出-》”; int d1; cin>>d1; if(d1==1){x=1;} else if(d1==2){x=0;} else {cout<<“非法输入!”< } } } void Darea(ticket *c)//将删除信息储存在另一链表中 {if(del==NULL){del=c;del->next=NULL;} else {ticket *Dar; Dar=del; while(Dar->next!=NULL) {Dar=Dar->next;} Dar->next=c; Dar=c; Dar->next=NULL; } } void Delete()//删除函数将要删除的订票信息移出链表,并将所有删除信息结成另一链表,供恢复使用 {system(“cls”);display1();cout<<“请输入要删除订票信息的身份证 号 码:”;cin>>sfz;p3=search1(sfz);p4=search2(sfz);if(p3==NULL){cout<<“无相关信息!” else {p4->next=p3->next;} } void recover()//恢复函数,用于将已经删除的订票信息恢复 {system(“cls”);ticket *r1,*r2,*r3;if(del==NULL){cout<<“无可恢复订票信息!”< cout<<“|”< cout<<“----------”< r1=del; if(del!=0) do {r1->display(); r1=r1->next; } while(r1!=NULL);hui3: cout<<“请输入要恢复的订票信息的身份证号码:”; cin>>sfz; if(check1(sfz)==1){cout<<“非法输入!”< r2=head; while(r2->next!=NULL){r2=r2->next;} r3=search_1(sfz); r2->next=r3; r3->next=NULL; Rdel(sfz); cout<<“成功恢复!”< system(“pause”); } } void display()//显示基础链表中的所有订票信息 {system(“cls”);ticket *dis;cout< {dis->display(); dis=dis->next; } while(dis!=NULL);system(“pause”);} void count()// 统 计 部 {system(“cls”);if(head==NULL){cout<<“无可统计信息!” if(i<100){n1=n1+1;m1=m1+i;} if(i>=100&&i<=400){n2=n2+1;m2=m2+i;} if(i>400){n3=n3+1;m3=m3+i;} p3=p3->next; } cout< cout<<“|”< cout<<“-------------------”< cout<<“|”< 元 以 下 cout<<“|”< cout<<“|”< 分 cout<<“|”< system(“pause”); } } void save()// 保 存 函 数 {system(“cls”);string filename,filename1;ofstream file;cout<<“请输入文件 名:”;cin>>filename1;filename1=filename1+“.txt”;filename=“C:Program Files(x86)Microsoft Visual StudioMyProjects火车票订票管理系统savedata”+filename1;//此处路径根据需要自行更改 /*file.open(filename.c_str(),ios::in);//功能失败部分待完善 if(!file){d=1;} else {d=2;} file.close();if(d==1){file.open(filename.c_str(),ios::out); p1=head; x=1; while(x) {if(p1!=NULL) {file< ID< name< Sstation< Tstation< price< seat< time< p1=p1->next;} else {x=0;} } file.close(); cout<<“保存成功”< if(d==2){ */ int i;// cout<<“文件已存在!”< cin>>i; if(i==1) {file.open(filename.c_str(),ios::out); p3=head; x=1; while(x) {if(p3!=NULL) {file< ID file.close(); cout<<“保存成功”< } else if(i==2) {file.open(filename.c_str(),ios::app); p3=head; x=1; while(x) {if(p3!=NULL) {file< ID file.close(); cout<<“保存成功”< } else {cout<<“非法输入!”;goto hui;} //} } int load()//读取函数 {system(“cls”);int i=0,ii=0,j=0;ifstream infile;string filename,filename1;cout<<“ 请 输 入 文 件 名:”;cin>>filename1;filename1=filename1+“.txt”;filename= “C:Program Files(x86)Microsoft Visual StudioMyProjects火车票订票管理系统savedata”+filename1;//此处路径根据需要自行更改 infile.open(filename.c_str(),ios::in); if(!infile){cerr<<“读取失败!”< system(“pause”); return-1;} string a[1000];//能力有限,不会动态大小,只能这样了(+﹏+)~ while(!infile.eof()){getline(infile,a[i],'n'); i++;} ticket *L1,*L2;float f;for(ii=0;ii {f=atof(a[ii+4].c_str()); head=new ticket(a[ii],a[ii+1],a[ii+2],a[ii+3],f,a[ii+5],a[ii+6]); head->next=NULL; } else {L1=head; while(L1->next!=NULL) {L1=L1->next;} f=atof(a[ii+4].c_str()); L2=new ticket(a[ii],a[ii+1],a[ii+2],a[ii+3],f,a[ii+5],a[ii+6]); L1->next=L2; L1=L2; L1->next=NULL; } } infile.close();cout<<“读取成功”< void select()//选择功能分支 {system(“cls”);menu();cin>>d; if(d==1){add();select();} if(d==2){search();select();} if(d==3){modify();select();} if(d==4){Delete();select();} if(d==5){recover();select();} if(d==6){display();select();} if(d==7){count();select();} if(d==8){save();select();} if(d==9){load();select();} else if(d==0) {ticket *ex1,*ex2,*ex3,*ex4; ex1=head; while(ex1!=NULL) {ex2=ex1; ex1=ex1->next; delete ex2; } ex3=del; while(ex3!=NULL) {ex4=ex3; ex3=ex3->next; delete ex4; } cout<<“离开!”< exit(0);} else {cout<<“错误!”< int main(){head=NULL;select();return 0;} //较多bug,比如,如果先恢复第一个会导致后面的数据全部丢失,时间能力有限,实在抱歉->_<- 第三篇:火车订票系统部分 uml[推荐] 全程一体化建模报告 ——火车订票系统 工商管理学院 信息1101 20110837 王若洲 1.火车订票系统描述....................................................................3 2.用例图和用例说明....................................................................3 3.类图 ........................................................................................11 4.对象图......................................................................................13 5.顺序图和协作图.....................................................................14 6.状态图....................................................................................28 7.组件图.....................................................................................29 8.部署图.....................................................................................30 9.总结............................................................................................301.火车订票系统描述 线上预订火车票系统是一款功能强大、操作简便、易维护的、具有良好人机交互界面的线上订票系统,用户可以在注册之后进入系统。购票用户可以在系统中查询车票信息,并进行车票预定。同时购票用户的个人信息可以修改,已预定的车票也可以在取消订单的窗口中取消,很方便用户的使用。 对于管理员来说,可以对用户的信息进行统一的管理,具有实时性、便捷性等有点。同时,系统的数据可以定期备份,以防止信息的丢失。 2.用例图和用例描述 2.1 用例描述 用例编号:001 用例名:注册帐号 用例描述:购票用户在注册帐号后成为该系统的用户,使用该系统的功能 参与者:购票用户 前置条件:电子商城正常运行 后置条件:如果用户输入的帐号在系统中未被注册过,该用户会注册成功;否则,显示帐号已注册,提示用户重新输入。基本路径: 1.用户登录火车订票系统 2.购票用户输入要注册的帐号和密码 3.购票用户提交信息 4.系统检查用户帐号是否已被注册 5.系统添加帐号,并显示注册成功 扩展点: 4a:系统检测到帐号已被注册 4a1.用户重新输入 4a2.用户离开系统 变异点:无 用例编号:002 用例名:登录帐号 用例描述:购票用户在登录帐号后进入系统,使用该系统的功能 参与者:购票用户 前置条件:电子商城正常运行 后置条件:如果用户输入的帐号和密码与系统数据库中的数据一致,该用户会登录成功;否则,显示输入信息有误,提示用户重新输入。基本路径: 1.用户登录火车订票系统 2.购票用户输入自己的帐号和密码 3.购票用户提交信息 4.系统检查用户帐号和密码是否匹配 5.系统记录并显示当前用户 扩展点: 4a:系统检测到帐号有误 4a1.用户重新输入 4a2.用户离开系统 4b:购票用户密码错误 4b1:系统弹出密码错误警告信息 4b2:购票用户离开或重新输入密码 变异点:无 用例编号:003 用例名:车票查询 用例描述:在车票查询页面可以通过车次,始发地等信息查询相关车次,获得具体的车票信息 参与者:购票用户 前置条件:电子商城正常运行,用户已登录该系统 后置条件:用户输入的车次信息是在实际的火车运行系统中存在的则显示相应的车票信息,否则,提示用户输入的信息有误。基本路径: 1.用户执行登录帐号进入自己的页面 2.用户进入车票查询界面 3.购票用户输入要查询的车票、车次或时间等信息 4.系统检测输入的信息是否正确 5.系统返回给用户车票的具体信息 扩展点: 4a:系统检测到用户输入的信息有误 4a1.用户重新输入 4a2.用户离开该功能界面 变异点:无 用例编号:004 用例名:订单查询 用例描述:用户在提交订单后可以通过该功能查询自己的订单情况以及历史订单 参与者:购票用户 前置条件:电子商城正常运行,用户已登录该系统并在该系统已提交过订单 后置条件:用户提交信息后系统会查询相关的数据库信息,如果用户提交过订单,系统返回所有订单(包括历史订单),否则提示用户订单列表为空 基本路径: 1.用户执行登录帐号进入自己的页面 2.用户进入订单查询界面 3.购票用户输入要查询的订单的时间区间 4.系统调取用户的订单信息 5.系统返回给用户想要的订单信息(没有订单显示空) 扩展点:无 变异点:无 用例编号:005 用例名:取消订单 用例描述:该功能是订单查询的拓展功能,在订单查询之后可以选择取消之前的订单操作 参与者:购票用户 前置条件:用户在执行完查询订单功能,并至少有一份未完成的订单 后置条件:系统根据用户的操作在系统数据库中找到相应数据,如果符合条件则删除该条订单信息,否则,提示用户没有未完成的订单 基本路径: 1.用户执行登录帐号进入自己的页面 2.用户进入订单查询界面 3.用户执行取消订单操作 4.系统检测该操作是否符合取消订单的条件 5.系统删除用户为完成的订单 扩展点: 4a:用户没有未完成的订单,用户取消操作 变异点:无 用例编号:006 用例名:车票预定 用例描述:该功能是车票查询的拓展功能,在查询完车票信息后可以继续执行该功能,完成车票的最后预定 参与者:购票用户 前置条件:电子商城正常运行,用户已登录该系统并查询到自己需要的车票 后置条件:用户提交信息后系统会查询相关的数据库信息,如果该车票有余票,则用户预定成功,否则,提示用户重新选择车票或者放弃操作 基本路径: 1.用户执行登录帐号进入自己的页面 2.用户执行车票查询功能 3.用户预定车票 4.系统检测车票是否有余票 5.系统返回用户预定成功 扩展点: 4a:车票已被全部出售 4a1:用户重新选择车票 4a2:用户放弃该操作 变异点:无 用例编号:007 用例名:信息查询 用例描述:该功能可以让用户查询自己的相关信息,包括帐号、密码、姓名及邮箱等 参与者:购票用户 前置条件:电子商城正常运行,用户登录系统进入自己的页面 后置条件:用户提交请求后系统从数据库中调用与该用户有关的所有信息 基本路径: 1.用户执行登录帐号进入自己的页面 2.用户提交信息查询申请 3.系统调用数据库中与该用户有关的信息 4.系统把数据返回给用户 扩展点:无 变异点:无 用例编号:008 用例名:修改信息 用例描述:该功能是信息查询的拓展功能,主要指密码、邮箱的修改 参与者:购票用户 前置条件:电子商城正常运行,用户已登录系统并执行了查询功能 后置条件:用户提交修改信息功能后,系统对比修改信息需要的条件,如果符合则把用户在系统数据库中的信息修改,否则,提示信息修改失败 基本路径: 1.用户执行登录帐号进入自己的页面 2.用户执行信息查询功能 3.用户填写想要修改的信息 4.系统检测相关条件 5.系统修改用户的信息 扩展点:无 变异点:无 用例编号:009 用例名:添加用户 用例描述:把新注册的用户添加到系统数据库中 参与者:系统管理员 前置条件:有用户条件注册申请,管理员执行添加操作 后置条件:如果用户输入的帐号在系统中未被注册过,该用户会注册成功;否则,显示帐号已注册,提示用户重新输入。基本路径: 1.管理员登录系统 2.管理员执行添加用户操作 3.系统检测用户是否注册 4.管理员将用户信息添加到数据库中 扩展点:无 变异点:无 用例编号:010 用例名:修改用户 用例描述:该功能可以修改用户的信息及用户权限 参与者:系统管理员 前置条件:系统正常运行 后置条件:管理员选择修改用户信息,系统修改用户在数据库中的信息 基本路径: 1.管理员登录系统 2.管理员执行修改用户操作 3.系统修改用户信息 扩展点:无 变异点:无 用例编号:011 用例名:删除用户 用例描述:该功能可以把用户从系统中彻底删除 参与者:系统管理员 前置条件:系统正常运行 后置条件:管理员选择删除用户,将用户从系统中彻底删除 基本路径: 1.管理员登录系统 2.管理员执行删除用户操作 3.系统将用户彻底删除 扩展点:无 变异点:无 用例编号:012 用例名:修改票务信息 用例描述:在车票的价格及火车的发车时间等实际信息更改后要在系统中做出相应修改 参与者:系统管理员 前置条件:系统正常运行,实际运行的票务信息有变化 后置条件:管理员根据实际的修改对系统中的票务信息做出相应修改 基本路径: 1.管理员登录系统 2.管理员执行修改票务信息操作 3.系统重新存储修改后的信息 扩展点:无 变异点:无 用例编号:013 用例名:数据备份 用例描述:定期将重要数据进行备份,防止数据丢失 参与者:系统管理员 前置条件:系统正常运行 后置条件:管理员选择数据备份,数据被备份存储 基本路径: 1.管理员登录系统 2.管理员执行数据备份操作 3.系统将重要数据进行备份 扩展点:无 变异点:无 2.2用例图 3.类图 3.1 实体类 3.2 边界类 3.3控制类 4.对象图 5.顺序图和协作图 5.1用户的顺序图和协作图 (1)注册帐号 :购票用户:注册界面:处理注册:系统数据库1: c_register2: submit_info3: check_account4: return_account5: register6: succeed1: c_register:购票用户:注册界面2: submit_info3: check_account5: register:处理注册4: return_account6: succeed:系 统数据库 (2)登录帐号 :购票用户:登录界面:处理登录:系统数据库1: c_login2: submit_info3: check_account4: account5: return_ok 1: c_login:购票用户:登录界面5: return_ok2: submit_info3: check_account:处理登录4: account:系统数据库 (3)车票查询 :购票用户:车票查询界:查询车票面1: c_query_ticket2: submit_ticket_info:车票数据3: request_info4: return_info1: c_query_ticket:购票用户:车票查询界面2: submit_ticket_info3: request_info:查询车票4: return_info:车票数据 (4)车票预定 :购票用户:车票查询界:查询车票面1: c_query_ticket2: submit_ticket_info:车票数据库:预定车票:个人订单3: request_info4: return_info5: c_reserve_ticket6: submit_order8: return_success7: create_order9: deliver_order 1: c_query_ticket5: c_reserve_ticket:购票用户:车票查询界面4: return_info2: submit_ticket_info:查询车票8: return_success:车票数据库3: request_info6: submit_order:个人订单7: create_order9: deliver_order:预定车票 (5)订单查询 :购票用户:订单查询界面:查询订单:个人信息:个人订单1: query_order2: submit_info3: request_person_info4: return_info5: request_order6: return_order_info 1: query_order:购票用户:订单查询界面2: submit_info:查询订单4: return_info6: return_order_info5: request_order3: request_person_info:个人订单:个人信息 (6)取消订单 :购票用户:订单查询界面:查询订单:个人信息:个人订单:取消订单request_person_info4: return_order_info7: 1: c_query_order2: submit_info3: request_order6: submit_cancel9: return_info5: c_cancel_order8: cancel_order10: return_success11: return_cancel_ok:购票用户1: c_query_order7: request_order11: cancel_order:个人信息 (7)信息查询 :购票用户:信息查询界面:信息查询:个人信息1: c_person_query2: return_person_info 1: c_person_query:购票用户5: return_person_info:信息查询界面2: submit_request3: query_info:信息查询4: info:个人信息 (8)修改个人信息 :购票用户:信息查询界面:信息查询:个人信息:修改信息1: c_person_query2: submit_request3: query_info4: info5: return_person_info6: c_edit_info7: request_edit8: edit_info9: true10: return_edit_ok1: c_person_query6: c_edit_info:购票用户:信息查询界面2: submit_request:信息查询5: return_person_info10: return_edit_ok4: info3: query_info7: request_edit8: edit_info:修改信息9: true:个人信息 5.2 系统管理员的顺序图和协作图 (1)添加用户 :系统管理员:添加用户界面:添加用户:系统数据库1: a_add_account2: add_request3: check_account4: true5: add_account6: ok7: return_add_ok1: a_add_account:添加用户界面:系统管理员7: return_add_ok2: add_request3: check_account5: add_account:系统数据库:添加用户4: true6: ok (2)删除用户 :系统管理员:删除用户界面:删除用户:用户信息1: a_delete_account2: delete_request3: check_account4: true5: delete_account6: true7: return_delete_ok submit_request3: query_info4: info5: c_cancel_order: 订 单 查 询 界 面 6: return_order_info2: submit_info:查询订单8: submit_cancel5: return_cancel_ok10: return_success3: request_person_info4: return_info:个人订单:取消订单9: :系统管理员1: a_delete_account7: return_delete_ok:删除用户界面:删除用户 (3)修改用户信息 :系统管理员:修改信息界面:修改用户信息:用户信息1: a_edit_account2: edit_request3: edit_info4: true5: return_edit_ok 1: a_edit_account:系统管理员:修改信息界面5: return_edit_ok2: edit_request3: edit_info:修改用户信息4: true:用户信息 (4)修改票务信息 :系统管理员:系统信息管理界面:票务信息修改:票务信息1: a_manage_info2: request_edit_ticket3: edit_info4: true5: get_info6: info7: return_new_info :系统信息管理界面1: a_manage_info:系统管理员7: return_new_info2: request_edit_ticket3: edit_info5: get_info:票务信息修改:票务信息4: true6: info (5)数据备份 :系统管理员:系统信息管理界面:数据备份:系统数据:备份数据1: a_manage_info2: backup_request3: backup_data4: data5: restore_data6: success 1: a_manage_info:系统管理员:系统信息管理界面2: backup_request:数据备份4: data6: success3: backup_data5: restore_data:系统数据:备份数据 6.状态图 6.1 车票状态图 添加车票车票可订选定车票被选定提交订单被预订取消订单完成支付已被取取票成功等待取票 6.2 用户状态图 未注册createAccountEvent已注册关闭帐号帐号被注销 7.组件图 login.jspcustomer.javaregister.jspdata.java火车订票系统java 2: delete_request3: check_account5: delete_account4: true6: true:用户信息 库 order_ticket.jsporder.javacancel_order.jspcancel.javaconsult_order.jspconsult.java 8.部署图 路由器防火墙<>购票客户浏览器web服务器<>数据服务器<>打印机系统管理员 9.总结 通过这次对火车订票系统的建模分析,让我对全程城一体化建模的理解更深了。在做系统分析的时候,遇到了很多问题。其中最大的问题就是,系统在实际做的时候跟想的时候差距是很大的。做系统的时候要注意到所有的细节,要把每一步都想的非常清楚,只有这样才能搭建一个合理的系统。 第四篇:火车订票管理系统主程序流程 程序简介 此程序是采用多文件模块化形式编写;其中自定义头文件中包括了程序中所有调用的函数的声明,以及需要的所有系统头文件。 #include #include #include #include #include #include extern void searchtrain(link l);extern void Modify(link l);extern void showtrain(link l);extern void SaveTrainInfo(link l);extern void printdata(Node *q);extern void printhead();等 编写时的分块包括订票块、查询块、输出块,及已订票修改部分等。 订票块则包含了定票流程的所有代码。查询块中是通过车次号码或是到达城市来查询的。输出部分包括了主界面的输出,已定车票信息的输出,所查车次信息输出的头部分。订票修改即是改定过程的编程。 即此程序包括了查询、订票、改定的流程。 编程过程 在编写该程序时,遇到了信息的保存问题。订票时与改定时的录入信息的保存不知如何处理;之后将保存的部分分为链表暂存和文件 的保存,在录入信息时是暂存在链表中的,当离开此系统是会提示是否保存信息,若是则保存到文件中。此举方便了票的改定,将数据分割开了,也精简了程序,更便于阅读。 编程模块划分后,编写程序之后的编译时,总是连分文件编译时都无法通过。但是写入的代码经过检查又没有问题,一直困扰着我。直到想起老师教的课本以外的知识,并以一种玩玩试一试的心态用条件编译得以解决此问题。 同时在编程时多次用到“清屏”,保证了输出界面的简洁。 在分出模块后,未完成所有部分的编程时的试运行时出现刚一进入子程序时便会回到主界面,后发现时由于只有输出部分没有输入部分,每当运行完子程序后回到主程序时都会被“清屏”,结果造成编译时正常,到运行时却漏洞百出。 在编程时,由于对文件的处理不熟悉,以及计算机的设置问题没考虑,使用了‘w+’的调用方式,使得在保存数据到文件时出现无法写入文件的现象。在百度,问同学以及问老师后才用‘wb+’和别的方式调用,并写入成功。 这个程序时我学习计算机c以来编写的最大型涵盖面最广的一个程序,没有之一。但同时我也知道这在c语言编程中也只是很小的一个小程序而已,我在这编程中发现:我要学的还有很多,大型程序也不是一个人能写出来的,会一些编程技巧是很有必要的,与人合作是 – 1 – 必须的,当然了,我不是在写诗,而是真的这么觉得。一个人会的有限,专精方向也不同,若能好好的合作肯定可以超过一个人单干。 部分源代码 订票程序 #ifndef TRAINHEAD_H #define TRAINHEAD_H #include“trainhead.h” #endif/*条件编译,作用是防止头文件被重复引用*/ int saveflag = 0;void Bookticket(link l,booklink k){ Node *p[10],*q;char c[2],tnum[10],str[10],str1[10];Book *r,*s;int i = 0,t = 0,flag = 0,dnum;r = k;while(r->next!=NULL) r = r->next;printf(“Input the city you want to go:”);scanf(“%s”,&str);q = l->next;while(q!=NULL) { if(strcmp(q->data.reachcity,str)==0) { p[i] = q; i++; } q = q->next; } printf(“nthe number of record have %dn”,i); printhead(); for(t=0;t printdata(p[t]); if(i==0) printf(“nSorry!Can't find the train for you!n”); else { printf(“ndo you want to book it?n”);– 2 – scanf(“%s”,c); if(strcmp(c,“Y”)==0||strcmp(c,“y”)==0)/*判断是否订票*/ { s =(Book*)malloc(sizeof(Book)); printf(“nInput your name: ”); scanf(“%s”,&s->data.name); printf(“nInput your ID: ”); scanf(“%s”,&str1); 相应减少*/ strcpy(s->data.num,str1);printf(“nplease input the number of the train:”);scanf(“%s”,tnum);for(t=0;tdata.num,tnum)==0){ if(p[t]->data.ticketnum < 1)/*判断剩余的供订票的票数是否为0*/ { printf(“nsorry,no ticket!”); Sleep(2); return;} if(flag==0){ printf(“nInput printf(“nremain = printf(“ninput %d 1;break;} your ticketsn”,p[t]->data.ticketnum);flag error”);Sleep(2);return;} bookNum: ”);scanf(“%d”,&dnum);p[t]->data.ticketnum=p[t]->data.ticketnum-dnum;/*定票成功则可供订的票数s->data.bookNum = dnum;s->next = NULL;r->next = s;r = s;printf(“nLucky!you have booked a ticket!”);getch(); – 3 – } } } saveflag = 1;使用说明 运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分。其运行效果如图19.1所示。在主界面上输入数字0——6,实现相应的功能。 图19.1 火车订票系统主界面 主界面输入“1”,进入添加火车信息界面,如图19.2所示。根据屏幕上给出的提示输入火车的车次,起点,终点,出发时间,到达时间,票价和可以订购的票数。 – 4 – 图19.2 输入效果图 主界面输入“2”,可以查询火车信息,可以选择查询的方法有两种,一种是按照车次查询,一种是按照你想要到达的地方查询,运行效果如图19.3所示。 – 5 – 图19.3 查询效果图 当在主界面输入“3”时,进入订票界面,按照提示输入你想要到达的城市,会自动显示出你终点站为你输入城市的信息,根据提示输 入你是否决定订票以及你的个人信息,运行效果如图19.4所示。 图19.4 订票效果图 当在主界面输入“4”时,进入修改界面,根据提示输入你要修改的内容,修改模块的运行效果如图19.5所示。 – 6 – 图19.5 修改效果图 当在主界面输入“5”时,可以显示出所有的火车信息,显示模块效果如图19.6所示。 – 7 – 图19.6 显示效果图 当在主界面输入“6”时,进入到保存模块,将录入的火车信息进行保存,并且将订票人的信息也进行保存,存储在指定的磁盘文件中。运行效果如图19.7所示。 图19.7 保存效果图 – 8 – 第五篇:火车订票系统的设计与实现 课 程 设 计 课程名称 SQL数据库系统课程设计 题目名称 火车订票系统的设计与实现 专业班级 学生姓名 2014级计算机科学与技术(升本) 吴文渊 祁娥安 学 号 51402111001 51402111009 指导教师 戚晓明(副教授) 二○一四年十二月二十日 目录 目述义 录 ............................................................1 1.1 开 发1.2 目完 的 和成 引 意情 言.............................................................1 HYPERLINK L _TOC31277 1.概 ...................................3 ................................................3 况具析析性性性析求求求计计计计 ......................................................3 ............................................4 .......................................................5 ....................................................5 ................................................5 ................................................5 ................................................5 ......................................................5 ..................................................5 ..................................................6 ...................................................6 2.3. 开发系可经技操 环境统行济 及工分 具.................................................4 2.1 开发环境和开发工 3.1 3.1.1 3.1.2 3.1.3 3.2 3.2.1 3.2.2 3.2.34.4.1 4.2 4.2.14.3 数 性可可可求能据能统体细程库 分行行行分需需需设设设设设 术作需功数性系总详过据 .......................................................8 ......................................................8 ......................................................8 ...................................................8 计...................................................11 4.3.1 用户信息表...............................................11 4.3.2 车次详细信息表表表现 ...........................................11 ...............................................11 ................................................12 ......................................................12 4.3.3 4.3.4 5.5.1 系订退系统票票登 信信统录 息息实界 面.................................................12 5.2 系统管理员登录界面...........................................13 5.3 票务管理员登录界面面结辞献 ...........................................14 5.4 乘 客 登6. 参加 部 分考代 码录 界总谢 文 实 .................................................14 ...........................................................16 ..........................................................17 ......................................................19 附 现.................................................20 引 言 用信息化推动工业化,用信息技术改造传统产业,这是我国迫切要完成的一项战略性任务。作为工业文明的产物----铁路,如何借助信息技术的帮助,实现管理方式,运营组织,服务标准的现代化,这是摆在我国铁路工作者面前的重大课题。 铁路信息化是铁路现代化的重要标志,其根本目的是将信息技术应用到铁路生产经营与管理决策等各项活动中,改造传统产业,提高铁路生产率,提高市场竞争力,提高铁路运营经济效益。 国内外已有运作合理完善的火车售票管理系统,其具有售票、查询、管理和维护等功能,系统管理员可以进行对车次的更改、票价的变动及调度功能,票价的修改可以通过修改运价来进行,车次调度可通过对发车时刻表的修改来进行,维护功能即可对表进行修改。满足当前火车售票管理的需求,并且运作十分良好。铁路信息化建设目前主要集中在搞好铁路运输生产管理上,加快计算机调度系统建设,完善客票发售与预订系统,搞好各地信息系统的结合,实现资源有效利用,信息共享。其总体目标是:形成具有国际水平的铁路信息化基础通信平台,实现各部门各系统之间的信息数据共享,互联互通;建成车,机,工,电,辆各部门调度控制,安全生产,运输指挥的现代化保障体系。为铁路运输各部门提供所需的管理信息资源和强有力的决策支持。通过现代客货营销手段和电子商务手段,带动铁路运输经济发展,大幅度提高运输效益。建立建全与信息化相适应的管理体制。我国目前的铁路信息化总体程度居国内领先,国际先进水平。 关键字:铁路订票系统,国际水平,铁路信息化管理体制 Introduction Train ticket management system at home and abroad operation reasonable and perfect, having a ticket, query, management and maintenance functions, the system administrator can be carried out on trips, the fare changes and change the scheduling function, fare modifications can be carried out through modifying the freight, train scheduling can be based on the departure time table are modified, maintenance function can be modified on the table.To meet the current train ticket management needs, and the operation is very good.The construction of railway informatization at present mainly focus on good management in production of railway transportation, speed up the construction of computer control system, perfect the ticketing and reservation system, combined with the well around the information system, realize the effective use of resources, information sharing.Its overall goal is: the formation of railway fundamental information communication platform with international level, realize the sharing of information and data between the various departments, various system interconnection;built car, machine, electric, car industry, each department dispatching control, safety in production, transportation command modern security system.Provide management information resources required and strong decision support for railway transportation departments.Through the modern passenger cargo marketing means and means of e-commerce, promote the development of railway transportation economy, greatly a improve the transportation efficiency.To establish comprehensive information management system compatible with the.At present our country railroad informatization to the overall level of ranking the leading domestic, international advanced level.Keywords: international level of railway, railway booking system, information management system 2 1.概 述 1.1 开发目的和意义 铁路客票发售和预订系统经过几年的建设,取得了很大的进展。火车站订票系统的推广使用,大大方便了旅客购票,也预示着我国铁 路售票系统正日趋合理与完善,并且具有良好的交互界面,容易被用户所接受。本系统基于铁路售票系统订票业务的基本流程,通过模拟售票员与客户之间的基本操作,实现了查询、订票、退票等基本功能,同时利用计算机网络,通过网络与售票系统,为用户提供方便快捷的订票服务,使得售票服务更为便捷效率,使铁路售票系统应用更为广泛,但由于铁路火车票务管理的复杂性,本设计与开发也仅是一个尝试性的工作,希望为铁路售票业务,铁路客运及运输发展更为稳定,迅猛尽微薄之力。 1.2 完成情况 本课程设计针对火车订票实际情况,按照软件工程的结构化设计思想,经过项目的可行性研究和需求分析、总体设计、详细设计,以及编码实现和调试等步骤设计开发了火车订票系统。并运用数据流图和数据字典、数据库逻辑结构、层次图、系统流程图、以及程序流程图,对该系统的数据需求、数据库、系统软件结构、系统流程、以及处理过程等进行了分析和设计。 该系统基于铁路售票系统订票业务的基本流程,通过模拟售票员与客户之间的基本操作,可以满足火车站网上售票的基本要求,包括查询、订票、退票等三个方面的功能。该系统能运用到火车站售票的工作中,根据用户的需求,设置其权限,并快捷方便的为用户提供服务。 2.开发环境及工具 本系统是一个基于SQL构架的系统。系统的开发和应用目的是使售票活动能够在多个不同的地点进行并且能够使旅客通过系统查询到自己所需要的出行信息。基于SQL结构售票系统的具体实现的功能:查询,订票,退票,等三大模块,并研究SQL结构在网络中面临的安全问题及提出相应的解决方案。 2.1 开发环境和开发工具 伴随着Internet/Intranet技术的发展,开发基于Web的应用程序势在必行,数据库技术更是需要和Web数据相结合,才有更为广阔的前景。C#语言作为微软推出的新兴Web应用程序开发技术,在数 据库应用方面发挥着越来越重要的作用,数据库选择用的SQLServer2000,语言使用C#程序设计语言。 3.系统分析 3.1 可行性分析 该阶段通过对系统目标的初步调研和分析,提出可行性方案并进行论证。我们在这里主要从技术可行性,经济可行性和操作可行性三方面进行分析。3.1.1 经济可行性 开发该系统所需的相关资料可以通过已存在的网上购票系统进行调查采集,所需的其他应用软件、硬件软件也易于获得。因此,开发成本低。而引进使用本系统后,与传统方式相比,具有高效率、低成本、高质量的特点,可以节省不少人力、物力及财力。所以,从经济的角度来看,该系统可行。3.1.2 技术可行性 开发工具:Victual Studio2010 数据库环境:SQL Server 2000 系统环境:Microsoft Windows 2000或以上版本 系统实现依靠相对熟悉的Java语言和SQL Server 2000数据库系统,其基本操作实质还是对数据库进行添加、删除、查找、等操作,暂不存在技术问题。3.1.3 操作可行性 系统采用菜单式,实现用户与数据的交互,界面简洁友好,操作方便。用户只需对订票流程和业务了解即可,不需掌握数据库等相关知识。 3.2 需求分析 该系统是利用C#平台开发,数据库采用的是SQLSever2000,旨在开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的火车售票系统,为用户提供满意的火车票订票服务。3.2.1 功能需求 火车订票管理系统的参与者: 乘客:查询、预订车票的人员。 售票员:具体负责乘客的车票订单。 票务管理员:负责更新车票信息。 系统管理员:系统管理员负责系统的员工信息管理,乘客信息管理以及系统 5 的维护等。 火车站系统中的所有人都是管理员,管理员是一个抽象的概念,它包含的行为是所有管理员的共同行为。管理员在本系统中通过合法的身份验证能够修改自身的信息和密码。 系统管理员能够通过本系统进行如下活动: ①管理乘客信息:系统管理员能够对当前注册到本系统的客户进行整理。②管理售票员信息:系统管理员能够管理当前系统中的售票员信息,如添加、删除和修改售票员信息等。 ③系统设置:系统管理员可以对系统进行必要的设置和维护,如升级等。3.2.2 数据需求 (1)数据录入和处理的准确性 数据的输入是否正确是数据处理的前提,错误的输入会导致系统输出的不正确和不可用,从而得不到想要的结果。数据的输入来源是手工输入。所以系统地界面要让用户容易使用,如果用户出现误操作,系统能简单明了的给出中文提示。 (2)数据的一致性和完整性 由于系统的数据是共享的,在不同的代售点中,车次信息是共享数据,所以如何保证这些数据的一致性,是系统必须解决的问题。要解决这一问题,要求系统能保证数据的一致性,在数据录入处控制数据的去向,并且要求对数据库的数据完整性进行严格的约束。 对于输入的数据,要为其定义完整性规则,如果不能符合完整性约束,系统应该拒绝该数据,并给出出错提示。 (3)数据的共享与独立性 整个售票系统的数据是共享的。然而,从系统开发的角度上看,共享会给设计和调试带来困难。因此,应该提供灵活的配置,使不同权限的用户都可以正常进行操作。3.2.3性能需求 为了保证系统能够长期、安全、稳定、可靠、高效的运行,本系统应该满足以下的性能需求。 (1)系统的准确性和及时性 系统处理的准确性和及时性是系统的必要性能。系统应能及时而且准确的根据用户权限及所输入的信息做出响应。由于本系统的查询 功能对于整个系统的功能和性能完成举足轻重。作为系统的很多数据来源,而车票的数量和时间又影响用户的决策活动,其准确性和及时性很大程度上决定了系统的成败。在系统开发过程中,必须采用一定的方法保证系统的准确性和及时性。 (2)系统的开放性和可扩展性 订票系统在开发过程中,应该充分考虑以后的可扩充性。例如车次信息的临时或者永久性改变,用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,即系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。 (3)系统的易用性和易维护性 订票系统是直接面对普通用户的,而大多普通用户往往对计算机并不是非常熟悉。这就要求系统能够提供良好的用户界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息界面;针对用户在使用中出现的错误操作,尽量给出中文提示。 订票系统中涉及到的数据是铁路部门的相当重要的信息,系统应提供方便的手段供系统维护人员进行数据的备份,日常的安全管理,以及系统意外崩溃时数据的恢复等工作。 4.系统设计 4.1 总体设计 本火车站售票管理系统可划分为信息查询、网上订票、取消订票三个部分。其中信息查询又可分为车次查询和订单查询两个部分。系统功能结构如图4.1所示。 火车票网上售票系统信息查询网上售票退出车次查询车票查询 图4.1 系统功能结构图 4.2 详细设计 4.2.1过程设计 本系统主界面为用户设计了三个功能操作以供选择:查询,订票,退票。另外,为方便用户,还将“退出系统”也单另列了出来,用户 可以根据需要触发不同事件。 根据分析,系统用户权限的系统主程序流程图,售票员权限的系统主程序流程图,车次信息查询程序流程图,售票程序流程图,订票信息查询模块程序流程图,退票模块程序流程图,如图4.2—4.3所示: 图4.2 系统用户权限的系统主程序流程图 开始登录框登录,确定访问权限主界面选择售票窗口N选择查询窗口YYN选择退票窗口售票界面查询界面N查询车次信息查询车票信息退票界面Y售票售票退票NY退票N退出Y结束 图4.2 系统用户权限的系统主程序流程图 图4.3 售票员权限的系统主程序流程图 开始登录框登录,确定访问权限主界面选择售票窗口N选择查询窗口YYN售票界面查询界面N查询车次信息Y售票售票N退出Y结束 图4.3 售票员权限的系统主程序流程图 4.3 数据库设计 本系统采用的数据库软件为SQLserver2000,本系统用到的数据库名为train tickets(火车票),它里面包括张表,下面逐一介绍。4.3.1 用户信息表 用户表用来存储注册用户的信息,它的结构如表4.7所示: 图4.7用户信息表 4.3.2 车次详细信息表 车次详细信息表存储的是车次的具体路段信息,它的结构如表4.8所示: 图4.8车次详细信息表 4.3.3 订票信息表 订票信息表存储的是用户的买票信息和订票信息,买票和订票操作产生的记 11 录有不同的字段,本系统中把两种不同字段放在一张表里,如果订票字段为空,则系统可判断这是一条买票记录,它的具体结构如表4.9所示: 图4.9 订票信息表 4.3.4退票信息表 退票纪录表存储的是用户的退票记录和退票信息,它的具体结构如表4.10所示: 图4.10 退票信息表 5.系统实现 5.1 系统登录界面 本系统设计要求用户通过登录框选择访问权限,登录系统。登录身份包括系统管理员、票务管理员和乘客。其中,用户须输入用户名和密码,以进入系统。 系统用户输入正确的用户名和密码,访问系统,得到其相应的权限。系统登陆界面如图5.1所示: 图5.1 系统登陆界面 5.2 系统管理员登录界面 系统管理员具有系统的管理、系统的设置和系统的维护权限。在系统管理中可以实现对乘客信息和票务管理员信息的添加、删除和修改,在系统设置中可以修改系统的相关属性,在系统维护中可以实现清除系统运行中发生的故障和错误,对系统进行必要的修改与完善,使系统适应用户环境的变化,满足新提出的需要。系统管理员登录界面如图5.2所示: 图5.2 系统管理员登录界面 5.3 票务管理员登录界面 票务管理员是车票信息的管理者,具有添加车票信息、修改车票信息、删除车票信息的权限。票务管理员通过日期、车次或出发地、目的地来查询相关车票信息,并完成对车票信息的添加、删除和修改。票务管理员登录界面如图5.3所示: 图5.3票务管理员登录界面 5.4 乘客登录界面 乘客是本系统的主要使用者,具有查询车票信息、预订车票和退票的 权限,在查询功能中,乘客通过日期、车次或出发地、目的地来 查询相关车票信息,如票价、余票、列车正晚点、列车时刻表、中转站等。查询成功后,乘客选定满意的车次,在购票处完成预定。乘客登录界面如图5.4所示: 图5.4 乘客登陆界面 5.5 用户修改车次界面 图5.5用户修改车次界面 6.总结 6.1小结 本文主要介绍了基于SQL结构的火车站售票管理系统的分析设计以及编程实现。整个系统的功能结构和现实中的火车订这次系统的设计从最开始的可行性研究,需求分析,到系统的总体设计,详细设计,再到编码、测试等的一个整体过程,使我真正明白了要做一个软件的难度,特别是要做一个真正可用的软件,就更难了。在老师和同学的帮助下,我把以往所学的软件工程、数据库知识结合起来,利用VS开发工具,加上SQL Server数据库系统,完成了本次课程设计,尽量使它能满足各个方面的要求。当然,我的个人能力有限,还有很多不足的地方,敬请谅解票系统还具有一定的差距,通过C#开发平台和sqlserver2000数据库,完成开始原来设想的大部分功能模块。 现将本系统的开发过程中取得的成果归结如下: (1)根据对现实中火车站售票管理系统的界面分析,我们设计完成了数据库中数据表的所有字段,系统通过和数据库交互的结果能顺利地完成系统对数据库的常规操作。 (2)采用C#语言以Victual Studio2010工具独立设计开发完成整个系统的界面设计与实现。 (3)独立编程实现了系统原先设计的大部分功能,根据对有些功能实现的理解,完成了对一些特有功能的编码。 但由于火车订票系统的复杂性和编者水品的限制,本系统依然存在很多问题: (1)软件采纳的数据不是很全面,不能很好的接受外来的影响。 (2)客流人数预设不到位,可能会有票数不达的局限。如果这些 问题存在,可能会影响系统的操作,秩序也会受到破坏。 (3)与已存在的火车订票系统相比整个系统的功能结构和现实中的12306火车订票系统还具有一定的差距。 谢 辞 三个星期的SQL数据库系统课程设计终将竣工,内心实乃感慨万千,在这次课程设计过程中我们遇到了不少的难题,比如数据库操作问题,界面设计问题,函数使用与消息处理问题等等。其中,最关键的是最初对系统的需求分析做的不透彻,导致后续设计工作乃至编码时的修改工作量变大。尤其,越接近结束,就越是时常出现问题。所以,通过这次课程设计我深刻的体会到软件工程还是必须学精通、学透彻。 通过这一次的课程设计,我们组员越来越默契,在设计过程中我们先把功能分工了,然后每个人下去都把需求写出来,当需求综合时,大家都不局限于只考虑自己的功能实现,往往还要考虑其他组员的功能。大家一起集思广益,用心认真的完成着系统每一部分的设计与实现,我认为这是我们的一次大的进步。 这一学期的SQL的课程设计我们完成的是火车订票系统的设计与实现功能,当看到系统最终成型并能准确实现相应的功能的时候我们觉得特别的开心,我们的努力获得了回报。我很高兴能有这样的一个机会让我们一起面对一个难题并为之倾尽全力,这个过程给了我新的体会也些许改变了我一直以来各种烦恼的心态。这个学期一开始我就觉得好多东西跟不上节奏,完成课程设计的过程给了我动力,当然也给了我压力,让我能够静下心来好好研究一下课上所讲的知识,自己去学习新的知识,也让我能和伙伴们一起讨论问题、解决问题,这种感觉很不错的。 在完成课程设计的过程中我学到了很多东西,不管是自身还是从同伴的身上,他们给了我很多的帮助和鼓励,当然也让我在比较中更加看到自己的不足,我知道自己需要学习的地方还有很多。此次的火车订票系统是我们自上大学以来完成的第一个可以应用与实际的软件。在课程设计过程中难度最大的是编码的部分,在编码部分最难的莫过 于对方法的重写。因为你需要实现一些之前从没有做过,甚至没有听说过的功能,但是我慢慢明白这是学习与提升自我最好的、最快的方法。这次系统的设计从最开始的可行性研究,需求分析,到系统的总体设计,详细设计,再到编码、测试等的一个整体过程,使我们真正明白了要做一个软件的难度,特别是要做一个真正可用的课程设计,那就更难了。在老师和同学的帮助下,我们把以往所学的C#程序设计、数据库知识结合起来,利用VS开 发工具,加上SQL Server数据库系统,完成了本次课程设计,尽量使它能满足各个方面的要求。 虽然我们顺利完成了火车订票系统的设计与实现的功能,但是我们深知,项目依然存在很大的改进的空间,我们将大部分的精力投入到对设计功能的实现,忽视了对程序整体架构的设计,我们会继续加油的。 通过这次课程设计,我们学会了如何对所学课程综合运用,巩固了课程设计的一般规范,这也让我们对一年后的毕业设计奠定了一定的基础,让我们彻底地对数据库的使用有了更进一步的了解。总体来说,课程设计让我们学会了不少知识。我认为课程设计是我们学习生涯中相当重要的一课,除了验证学生的学习成果外,也能训练一个人独立思考及解决问题的能力。 参 考 文 献 [1] 严蔚敏.吴伟民.数据结构[M].北京: 清华大学出版社,2003.[2] 齐治昌等.软件工程[M].高等教育出版社,2002.1.[3] 余祥宣.崔国华.邹海明.计算机算法基础[M].武汉:华中科技大学出版社,2006 [4] Abraham Schweitzer.Henry F.North.S.Substandard.数据库系统概念[M].北京:高等教育出版社,2006 [5] Buckle Keck 著 侯捷 译.Java编程思想[M].机械工业出版社.2010 [6]戚晓明.Access数据库实用教程[M].北京:清华大学出版社,2010 [7]西尔伯沙茨 等著,杨冬青 等译.数据库系统概念(原书第5版)[M].北京:机械工业出版社,2006 [8]熊拥军,刘卫国。数据库技术与应用实践教程-SQL Server 2005[M].北京:清华大学出版社,2010 [9]维埃拉著.SQL Server 2008高级程 序设计.杨华,腾灵灵译.北京:清华大学出版社,2010 [10]孙涌.《现代软件工程》.北京希望电子出版社.2003年 [11]萨师煊,王珊.《数据库系统概论》.高等教育出版社.2002年 [12]于松涛.精通SQL server 2000数据库管理与开发[M].高等教育出版社.2003年 [13]飞思科技产品开发中心.SQL Server 2000基础与提高[M].北京:电子工业出版社:电子工业出版社.2001年 [14]汤庸.软件工程方法与管理[M].北京:冶金工业出版社.2002年 [15]张虹.软件工程与软件开发工具[M].北京:清华大学出版社.2004年 附加部分代码实现 火车订票信息代码: using System;using System.Collections.Generic;using System.Data;using System.Text;using System.ComponentModel;using System.Drawing;using 火车票 { public partial class Form2_订票界面 : Form { public int preIndex =-1; public string s = null; public Form2_订票界面() { InitializeComponent(); } Private { //preIndex = dataGridView1.CurrentRow.Index; //s = dataGridView1.Rows[preIndex].Cells[0].Value.ToString(); } void dataGridView1_CellContentClick(object sender,DataGridViewCellEventArgs e) System.Linq;using System.Windows.Forms;using System.Data.SqlClient;namespace private void Form2_Load(object sender, EventArgs e) {} private void GetData(DataGridView data) { SqlConnection conn = new SqlConnection(@“Data Source=YBLX-20140705MD;Initial Catalog=huochepiao;Integrated id=sa;password=123456;”); if(conn.State == ConnectionState.Open) conn.Close(); string selectQuery = “select * from 车次详细信息表1 where 出发站='” + textBox1.Text + “' and 到达站='” + textBox2.Text + “'”; SqlDataAdapter da = new SqlDataAdapter(selectQuery, conn); DataSet ds = new DataSet(); da.Fill(ds); dataGridView1.DataSource = ds.Tables[0].DefaultView; } private void button1_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(@“Data Source=YBLX-20140705MD;Initial Catalog=huochepiao;Integrated id=sa;password=123456;”); if(conn.State == ConnectionState.Open) conn.Close(); string selectQuery = “select * from 车次详细信息表1 where 出 发 站 ='”+textBox1.Text+“' and 到 达 站 ='”+textBox2.Text+“'”; Security=false;user Security=false;user SqlDataAdapter da = new SqlDataAdapter(selectQuery ,conn); DataSet ds = new DataSet(); string sql = “select count(*)from 车次详细信息表1 where 出发站='” + textBox1.Text + “' and 到达站='” + textBox2.Text + “'”; SqlCommand cmd = new SqlCommand(sql, conn); try { conn.Open(); int nn = Convert.ToInt32(cmd.ExecuteScalar()); if(nn > 0) { da.Fill(ds, “车次详细信息表1”); dataGridView1.DataSource = ds.Tables[“车次详细信息表1”].DefaultView; } else { MessageBox.Show(“没有此票!”); textBox1.Text = “\"; textBox2.Text = ”“; } } catch(Exception ex) { MessageBox.Show(”查询失败!“+ex.Message); textBox1.Text = ”“; textBox2.Text = ”“; } finally { conn.Close(); } } private void button2_Click(object sender, EventArgs e) { Form5_客户主界面 fm = new Form5_客户主界面(); fm.Show(); this.Hide(); } private void button3_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(@”Data Source=YBLX-20140705MD;Initial Catalog=huochepiao;Integrated id=sa;password=123456;“); if(conn.State == ConnectionState.Open) conn.Close(); conn.Open(); int n,m; preIndex = dataGridView1.CurrentRow.Index; string string string string s_s_s_ 出出到 站 s 发达 时 站站间 = = = = dataGridView1.Rows[preIndex].Cells[0].Value.ToString(); dataGridView1.Rows[preIndex].Cells[1].Value.ToString(); dataGridView1.Rows[preIndex].Cells[2].Value.ToString(); dataGridView1.Rows[preIndex].Cells[3].Value.ToString(); Security=false;user string string string s_ s_s_ 到站票金 时数额 间 = = = dataGridView1.Rows[preIndex].Cells[4].Value.ToString(); dataGridView1.Rows[preIndex].Cells[5].Value.ToString(); dataGridView1.Rows[preIndex].Cells[6].Value.ToString(); int ps =int.Parse(s_票数); if(ps >0) { n =Convert.ToInt32(ps-1); /* string selectl = ”update 车次详细信息表1 set 剩余票数=“+n+” where 车次='“+s+”'“; SqlCommand cd = new SqlCommand(selectl, conn); cd.ExecuteNonQuery();*/ m = Convert.ToInt32(ps-n); string mn = ”select count(*)from 订票信息表 where 车次='“+s+”'“; SqlCommand comd = new SqlCommand(mn,conn); int chaxun_shuliang = Convert.ToInt32(comd.ExecuteScalar()); if(chaxun_shuliang>0) { /* string select2 = ”update 订票信息表 set 剩余票数=“ + m + ” where 车次='“ + s + ”'“; SqlCommand cd2 = new SqlCommand(selectl, conn); cd2.ExecuteNonQuery();*/ MessageBox.Show(”订票信息表里有这张票一张,不允许再次订票!“); } else { string selectQ = ”insert into 订票信息表 values('“ + s + ”','“ + s_出发站 + ”','“ + s_到达站 + ”','“ + s_出站时间 + ”','“ + s_到站时间 + ”','“ + m + ”','“ + s_金额 + ”')“; SqlCommand cmd = new SqlCommand(selectQ, conn); cmd.ExecuteNonQuery(); MessageBox.Show(”总票数减少一张!“); MessageBox.Show(”订票成功!“); GetData(dataGridView1); } /*Form3 fm = new Form3(); fm.Show(); this.Hide();*/ } else { /*n = 3; string selectl = ”delete from 车次详细信息表1 where 出发站='“ + s_出发站 + ”'and 到达站='“ + s_到达站 + ”'“; SqlCommand cd = new SqlCommand(selectl, conn); cd.ExecuteNonQuery();*/ MessageBox.Show(”总票库存没了!\"); } } } } 因篇幅问题不能全部显示,请点此查看更多更全内容