當前位置:首頁 » 數據倉庫 » 資料庫課程設計火車訂票系統
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫課程設計火車訂票系統

發布時間: 2023-05-10 09:43:24

Ⅰ 火車售票系統設計及實現C++

設置一個數組
unsigned
char
ticket[10][一列車的站點總數]={0};
1.賣票系統每賣一張票,將相應的站點,列車賦值為1,
比如:列車1的前3站賣出票,那麼把ticket[1][0],ticket[1][1],ticket[1][2]設為1.
2.賣票前先檢查要到的站點是否被賦值為1。按照列車對數組進行遍歷即可。

Ⅱ 使用Eclipse編寫火車訂票系統

......
到學校圖書館去借些盤吧。我們課程設計的時候就是從圖書館裡面借盤然後銬程序的。裡面都有現成的,改改就可行了。網上流傳的那些項目,一般都是要麼有bug,要麼不能運行的。

Ⅲ 用C語言寫火車訂票系統

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int shoudsave=0 ;
int count1=0,count2=0,mark=0,mark1=0 ;
/*定義存儲火車信息的結構體*/
struct train
{
char num[10];/*列車號*/
char city[10];/*目的城市*/
char takeoffTime[10];/*發車時間*/
char receiveTime[10];/*到達時間*/
int price;/*票價*/
int bookNum ;/*票數*/
};
/*訂票人的信息*/
struct man
{
char num[10];/*ID*/
char name[10];/*姓名*/
int bookNum ;/*需求的票數*/
};
/*定義火車信息鏈表的結點結構*/
typedef struct node
{
struct train data ;
struct node * next ;
}Node,*Link ;
/*定義訂票人鏈表的結點結構*/
typedef struct people
{
struct man data ;
struct people*next ;
}bookMan,*bookManLink ;
/* 初始界面*/
void printInterface()
{
puts("********************************************************");
puts("* Welcome to use the system of booking tickets *");
puts("********************************************************");
puts("* You can choose the operation: *");
puts("* 1:Insert a train information *");
puts("* 2:Inquire a train information *");
puts("* 3:Book a train ticket *");
puts("* 4:Update the train information *");
puts("* 5:Advice to you about the train *");
puts("* 6:save information to file *");
puts("* 7:quit the system *");
puts("********************************************************");
}
/*添加一個火車信息*/
void InsertTraininfo(Link linkhead)
{
struct node *p,*r,*s ;
char num[10];
r = linkhead ;
s = linkhead->next ;
while(r->next!=NULL)
r=r->next ;
while(1)
{
printf("please input the number of the train(0-return)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break ;
/*判斷是否已經存在*/
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("the train '%s'has been born!\n",num);
return ;
}
s = s->next ;
}
p = (struct node*)malloc(sizeof(struct node));
strcpy(p->data.num,num);
printf("Input the city where the train will reach:");
scanf("%s",p->data.city);
printf("Input the time which the train take off:");
scanf("%s",p->data.takeoffTime);
printf("Input the time which the train receive:");
scanf("%s",&p->data.receiveTime);
printf("Input the price of ticket:");
scanf("%d",&p->data.price);
printf("Input the number of booked tickets:");
scanf("%d",&p->data.bookNum);
p->next=NULL ;
r->next=p ;
r=p ;
shoudsave = 1 ;
}
}
/*列印火車票信息*/
void printTrainInfo(struct node*p)
{
puts("\nThe following is the record you want:");
printf(">>number of train: %s\n",p->data.num);
printf(">>city the train will reach: %s\n",p->data.city);
printf(">>the time the train take off: %s\nthe time the train reach: %s\n",p->data.takeoffTime,p->data.receiveTime);
printf(">>the price of the ticket: %d\n",p->data.price);
printf(">>the number of booked tickets: %d\n",p->data.bookNum);
}

struct node * Locate1(Link l,char findmess[],char numorcity[])
{
Node*r ;
if(strcmp(numorcity,"num")==0)
{
r=l->next ;
while(r)
{
if(strcmp(r->data.num,findmess)==0)
return r ;
r=r->next ;
}
}
else if(strcmp(numorcity,"city")==0)
{
r=l->next ;
while(r)
{
if(strcmp(r->data.city,findmess)==0)
return r ;
r=r->next ;
}
}
return 0 ;
}

/*查詢火車信息*/
void QueryTrain(Link l)

{
Node *p ;
int sel ;
char str1[5],str2[10];
if(!l->next)
{
printf("There is not any record !");
return ;
}
printf("Choose the way:\n>>1:according to the number of train;\n>>2:according to the city:\n");
scanf("%d",&sel);
if(sel==1)
{
printf("Input the the number of train:");
scanf("%s",str1);
p=Locate1(l,str1,"num");
if(p)
{
printTrainInfo(p);
}
else
{
mark1=1 ;
printf("\nthe file can't be found!");
}
}
else if(sel==2)
{
printf("Input the city:");
scanf("%s",str2);
p=Locate1(l,str2,"city");
if(p)
{
printTrainInfo(p);
}
else
{
mark1=1 ;
printf("\nthe file can't be found!");
}
}
}

/*訂票子模塊*/
void BookTicket(Link l,bookManLink k)
{
Node*r[10],*p ;
char ch,dem ;
bookMan*v,*h ;
int i=0,t=0 ;
char str[10],str1[10],str2[10];
v=k ;
while(v->next!=NULL)
v=v->next ;
printf("Input the city you want to go: ");
scanf("%s",&str);
p=l->next ;
while(p!=NULL)
{
if(strcmp(p->data.city,str)==0)
{
r[i]=p ;
i++;
}
p=p->next ;
}
printf("\n\nthe number of record have %d\n",i);
for(t=0;t<i;t++)
printTrainInfo(r[t]);
if(i==0)
printf("\n\t\t\tSorry!Can't find the train for you!\n");
else
{
printf("\ndo you want to book it?<1/0>\n");
scanf("%d",&ch);
if(ch == 1)
{
h=(bookMan*)malloc(sizeof(bookMan));
printf("Input your name: ");
scanf("%s",&str1);
strcpy(h->data.name,str1);
printf("Input your id: ");
scanf("%s",&str2);
strcpy(h->data.num,str2);
printf("Input your bookNum: ");
scanf("%d",&dem);
h->data.bookNum=dem ;
h->next=NULL ;
v->next=h ;
v=h ;
printf("\nLucky!you have booked a ticket!");
getch();
shoudsave=1 ;
}
}
}
bookMan*Locate2(bookManLink k,char findmess[])
{
bookMan*r ;
r=k->next ;
while(r)
{
if(strcmp(r->data.num,findmess)==0)
{
mark=1 ;
return r ;
}
r=r->next ;
}
return 0 ;
}
/*修改火車信息*/
void UpdateInfo(Link l)
{
Node*p ;
char findmess[20],ch ;
if(!l->next)
{
printf("\nthere isn't record for you to modify!\n");
return ;
}
else
{
QueryTrain(l);
if(mark1==0)
{
printf("\nDo you want to modify it?\n");
getchar();
scanf("%c",&ch);
if(ch=='y');
{
printf("\nInput the number of the train:");
scanf("%s",findmess);
p=Locate1(l,findmess,"num");
if(p)
{
printf("Input new number of train:");
scanf("%s",&p->data.num);
printf("Input new city the train will reach:");
scanf("%s",&p->data.city);
printf("Input new time the train take off");
scanf("%s",&p->data.takeoffTime);
printf("Input new time the train reach:");
scanf("%s",&p->data.receiveTime);
printf("Input new price of the ticket::");
scanf("%d",&p->data.price);
printf("Input new number of people who have booked ticket:");
scanf("%d",&p->data.bookNum);
printf("\nmodifying record is sucessful!\n");
shoudsave=1 ;
}
else
printf("\t\t\tcan't find the record!");
}
}
else
mark1=0 ;
}
}
/*系統給用戶的提示信息*/
void AdvicedTrains(Link l)
{
Node*r ;
char str[10];
int mar=0 ;
r=l->next ;
printf("Iuput the city you want to go: ");
scanf("%s",str);
while(r)
{
if(strcmp(r->data.city,str)==0&&r->data.bookNum<200)
{
mar=1 ;
printf("\nyou can select the following train!\n");
printf("\n\nplease select the fourth operation to book the ticket!\n");
printTrainInfo(r);
}
r=r->next ;
}
if(mar==0)
printf("\n\t\t\tyou can't book any ticket now!\n");

}
/*保存火車信息*/
void SaveTrainInfo(Link l)
{
FILE*fp ;
Node*p ;
int count=0,flag=1 ;
fp=fopen("c:\\train.txt","wb");
if(fp==NULL)
{
printf("the file can't be opened!");
return ;
}
p=l->next ;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next ;
count++;
}
else
{
flag=0 ;
break ;
}
}
if(flag)
{
printf("the number of the record which have been saved is %d\n",count);
shoudsave=0 ;
}
fclose(fp);
}
/*保存訂票人的信息*/
void SaveBookmanInfo(bookManLink k)
{
FILE*fp ;
bookMan*p ;
int count=0,flag=1 ;
fp=fopen("c:\\man.txt","wb");
if(fp==NULL)
{
printf("the file can't be opened!");
return ;
}
p=k->next ;
while(p)
{
if(fwrite(p,sizeof(bookMan),1,fp)==1)
{
p=p->next ;
count++;
}
else
{
flag=0 ;
break ;
}
}
if(flag)
{
printf("the number of the record which have been saved is %d\n",count);
shoudsave=0 ;
}
fclose(fp);
}

int main()
{
FILE*fp1,*fp2 ;
Node*p,*r ;
char ch1,ch2 ;
Link l ;
bookManLink k ;
bookMan*t,*h ;
int sel ;
l=(Node*)malloc(sizeof(Node));
l->next=NULL ;
r=l ;
k=(bookMan*)malloc(sizeof(bookMan));
k->next=NULL ;
h=k ;
fp1=fopen("c:\\train.txt","ab+");
if((fp1==NULL))
{
printf("can't open the file!");
return 0 ;
}
while(!feof(fp1))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp1)==1)
{
p->next=NULL ;
r->next=p ;
r=p ;
count1++;
}
}
fclose(fp1);
fp2=fopen("c:\\man.txt","ab+");
if((fp2==NULL))
{
printf("can't open the file!");
return 0 ;
}

while(!feof(fp2))
{
t=(bookMan*)malloc(sizeof(bookMan));
if(fread(t,sizeof(bookMan),1,fp2)==1)
{
t->next=NULL ;
h->next=t ;
h=t ;
count2++;
}
}
fclose(fp2);
while(1)
{
system("cls");
printInterface();
printf("please choose the operation: ");
scanf("%d",&sel);
system("cls");
if(sel==8)
{
if(shoudsave==1)
{
getchar();
printf("\nthe file have been changed!do you want to save it(y/n)?\n");
scanf("%c",&ch1);
if(ch1=='y'||ch1=='Y')
{
SaveBookmanInfo(k);
SaveTrainInfo(l);
}
}
printf("\nThank you!!You are welcome too\n");
break ;

}
switch(sel)
{
case 1 :
InsertTraininfo(l);break ;
case 2 :
QueryTrain(l);break ;
case 3 :
BookTicket(l,k);break ;
case 4 :
UpdateInfo(l);break ;
case 5 :
AdvicedTrains(l);break ;
case 6 :
SaveTrainInfo(l);SaveBookmanInfo(k);break ;
case 7 :
return 0;
}
printf("\nplease press any key to continue.......");
getch();
}
return 0;
}

Ⅳ 火車售票系統資料庫設計(請詳細說一下具體包含哪些表)

包含的表主要有
列車(列車編號,車種,始發站,始發站,終到站,發時,到時,里程)
車站(車站id,車站名)
經過(列車編號,車站名,站次,里程,到時,發時)
車票(車票編號,車次,發站,到站,發站次,到站次,發時,到時,座位類型,座位號,車票日期,票價)
主要是這四個表,查詢插入操作有些復雜不過都能完成
詳細看列車票務系統資料庫課程設計說明書,文庫里有

Ⅳ 數據結構課程設計 鐵路票務管理系統

#include<fstream>
#include<iostream>
#include<string>
#include<stdio.h>
#include<iomanip>
#define SIZE_view 50
#define SIZE_line 100
#define SIZE_way 300

#define MAXNODE 30 //定義最多的頂點數
#define MAXCOST 1000
//自己寫的頭文件
//#include<addview.h>// //

using namespace std;

struct view_info /*城市信息結構*/弊顫
{
int id;
char name[20];
int code;
char shortname[20];
char LName[100];// 經過此車站的鐵路線名稱
} views[SIZE_view];

struct line_info //鐵路線跡岩信息結構
{
int Lid;
char LName[20];
int start_id; //始發站id
int end_id; //終點站id
int dist; //鐵路線長度
int sign;//通行標志
}lines[SIZE_line];

struct way_info //鐵路度的信息結構
{
int station1;
int station2;
int dist;
}ways[SIZE_way];

struct path_info //用於最短路徑的查詢

{
int count;
int path[SIZE_view];
};

int view_count,line_count,way_count;//用來存儲文件中有多少條記錄

void readviews()
{
int i;
ifstream infile("views.txt",ios::in); //打開文件
infile >>view_count ; //把文件中的記錄賦值給view_count
if(!infile) //打開文件失租州敗敗
{
cerr<<"open error!"<<endl;
exit(1);
}
//infile>>view_count; // 先讀入文件個數
for(i=0;i<view_count;i++)
{
infile>>views[i].id>>views[i].name>>views[i].code>>views[i].shortname>>views[i].LName;

}
//view_count=i;//給出原文件中車站的個數
infile.close();
cout<<" "<<"id"<<" "<<"name"<<" "<<"code"<<" "<<"shortname"<<" "<<"LName"<<endl;
for(i=0;i<view_count;i++)
cout<<" "<<views[i].id<<" "<<views[i].name<<" "<<views[i].code
<<" "<<views[i].shortname<<" "<<views[i].LName<<endl;

}

void readways() //讀文件ways.txt
{
int i;
ifstream infile("ways.txt",ios::in); //打開文件
infile>>way_count; ////把文件中的記錄賦值給way_count
if(!infile) //打開文件失敗
{
cerr<<"open error!"<<endl;
exit(1);
}
for(i=0;i<way_count;i++)
infile>>ways[i].station1>>ways[i].station2>>ways[i].dist;
infile.close();
//測試用,輸出路段的信息
cout<<" "<<"station1"<<" "<<"station2"<<" "<<"dist"<<endl;
for(i=0;i<way_count;i++)
cout<<" "<<ways[i].station1<<" "<<ways[i].station2<<" "<<ways[i].dist<<endl ;

}

void readlines() //讀文件lines.txt
{
int i;
ifstream infile("lines.txt",ios::in); //打開文件
infile>>line_count; //把文件中的記錄賦值給line_count
if(!infile) //打開文件失敗
{
cerr<<"open error!"<<endl;
exit(1);
}
for(i=0;i<line_count;i++)
infile>>lines[i].Lid>>lines[i].LName>>lines[i].start_id>>lines[i].end_id>>lines[i].dist>>lines[i].sign;
infile.close();

/*
cout<<" "<<"Lid"<<" "<<"LName"<<" "<<"start_id"<<" "<<"end_id"<<" "<<"dist"<<" "<<"sign"<<endl;
for(i=0;i<view_count;i++)
cout<<" "<<lines[i].Lid<<" "<<lines[i].LName<<" "<<lines[i].start_id
<<" "<<lines[i].end_id<<" "<<lines[i].dist<<" "<<lines[i].sign<<endl;

*/ //這里是輸出文件中的信息

}

void search () //查詢車站信息(所在的鐵路線)
{
cout<<"please enter the station name:";
char sta_name[20];
cin>>sta_name; //輸入要查詢的名字
cout<<endl;
ifstream infile("views.txt ",ios::in); //讀文件
infile >>view_count ; //讀出文件記錄的個數
if(!infile) //打開文件失敗
{
cerr<<"open error!"<<endl;
exit(1);
}
int i,mark;
for(i=0;i<view_count;i++)
infile>>views[i].id>>views[i].name>>views[i].code>>views[i].shortname>>views[i].LName;
infile.close();
for(i=0;i< view_count;i++)
{
if(strcmp(sta_name,views [i].name)==0) //找到車站
{
cout<<"the station's informations is:\n"<<endl;
cout<<" "<<"id"<<" "<<"name"<<" "<<"code"<<" "<<"shortname"<<" "<<"LName"<<endl;
cout<<" "<<views[i].id<<" "<< views[i].name<<" "<< views [i].code
<<" "<< views [i].shortname<<" "<< views [i].LName <<endl;
break;
}
mark=i;

}
if(mark==( view_count -1)) //若沒有找到,輸出提示
{
cout<<"sorry,the station is not in here"<<endl;
}
}

void addview()
{
cout<<"please enter the new view's informations:"<<endl; //輸入新車站信息
cout<<"id:";
cin>>views[view_count].id;
cout<<"name:";
cin>>views[view_count].name;
cout<<"code:";
cin>>views[view_count].code;
cout<<"shortname:";
cin>>views[view_count].shortname;
cout<<"LName:";
cin>>views[view_count].LName;

ofstream outfile("views.txt",ios::app); //打開views文件,並且寫入數據
outfile<<view_count<<endl;
if(!outfile) //文件打開失敗
{
cerr<<"open error!"<<endl;
exit(1);
}
outfile<<views[view_count].id<<" "<<views[view_count].name<<" "<<views[view_count].code
<<" " <<views[view_count].shortname<<" "<<views[view_count].LName<<endl;
//在文件末尾添加
view_count=view_count+1;

outfile.close(); //關閉文件
cout<<"successfully! the new station is added"<<endl;
cout<<"now station number is:"<<view_count<<endl;

}

void addway()
{
cout<<"please enter the new way's informations:"<<endl; //輸入新車站信息
cout<<"station1:";
cin>>ways[way_count].station1; // station1的id
cout<<"station2:";
cin>>ways[way_count].station2; //station2的id
cout<<"dist:";
cin>>ways[way_count].dist; //路段的長度

ofstream outfile("ways.txt",ios::app); //打開way.txt文件
outfile<<way_count<<endl;
if(!outfile) //文件打開失敗
{
cerr<<"open error!"<<endl;
exit(1);
}
outfile<<ways[way_count].station1<<" "<<ways[way_count].station2<<" "<<ways[way_count].dist;
//在文件末尾添加

outfile.close(); //關閉文件
cout<<"successfully! the new station is added"<<endl;
way_count=way_count+1;
cout<<"now station number is:"<<view_count<<endl;

}

void addline()
{
cout<<"please enter the new line's informations:"<<endl; //輸入新鐵路線信息
cout<<"Lid:";
cin>>lines[line_count].Lid;
cout<<"LName:";
cin>>lines[line_count].LName;
cout<<"start_id:";
cin>>lines[line_count].start_id;
cout<<"end_id:";
cin>>lines[line_count].end_id;
cout<<"dist:";
cin>>lines[line_count].dist;
cout<<"sign:";
cin>>lines[line_count].sign;

ofstream outfile("lines.txt",ios::app); //打開文件
outfile <<line_count << endl;
if(!outfile) //文件打開失敗
{
cerr<<"open error!"<<endl;
exit(1);
}
outfile<<lines[line_count].Lid<<" "<<lines[line_count].LName<<" "<<lines[line_count].start_id
<<" " <<lines[line_count].end_id<<" "<<lines[line_count].dist<<lines[line_count].sign<<endl;
//在文件末尾添加

outfile.close(); //關閉文件
cout<<"successfully! the new line is added"<<endl;
line_count=line_count+1;
cout<<"now line number is:"<<line_count<<endl;

}

//-----------------------------------------------------------------------------------

void floyed() //弗洛伊德(Floyed)演算法
{

int i, j, k, m, start_num, end_num; //i,j用來表示起始點和終點
int dist_list[SIZE_view][SIZE_view]; //定義了一個數組
view_count=view_count+1;
struct path_info path_list[SIZE_view][SIZE_view]; //定義了一個path_info結構的變數,包含著count和path[]用來存儲經過的路徑
for(i=1;i<=view_count;i++) //這里開始讀文件,先讓所有的線都為最大值
for(j=1;j<=view_count;j++)
dist_list[i][j]=MAXCOST;

for(int t=0;t<=way_count;t++)
{
i=ways[t].station1;
j=ways[t].station2;
dist_list[i][j]=ways[t].dist;//把文件中的數據賦值給dist_list[i][j]=ways[t].dist;形式

}

for (i =0; i< view_count; i++)
{
for (j= 0; j<view_count; j++)
{
if (i == j)
{
dist_list[i][j] = 0;
continue;
}

dist_list[i][j] = -1;
path_list[i][j].count = 0;
for (k = 0; k< way_count; k++) //
{
if (ways[k].station1 == i && ways[k].station2 == j) //把起始點和終點分別給予i,j

{
dist_list[i][j] = ways[k].dist;
path_list[i][j].count = 2;
path_list[i][j].path[0] = i;
path_list[i][j].path[1] = j;
break;
}

}

}

}

for (k = 0; k<= view_count-1; k++)
{
for (i = 0; i < view_count; i++)
for (j = 0; j< view_count; j++)
{
if (i == k || j == k || i == j)
continue;
if (dist_list[i][k] == -1 || dist_list[k][j] == -1)
continue;
if ( (dist_list[i][j] == -1) ||
((dist_list[i][j] != -1) &&(dist_list[i][k] + dist_list[k][j] < dist_list[i][j])))
{
dist_list[i][j] = dist_list[i][k] + dist_list[k][j];
// shortest[i][j]=shortest[i][k]+shortest[k][j];
path_list[i][j].count = path_list[i][k].count + path_list[k][j].count - 1;
// path[i][j]=k;
for (m = 0; m < path_list[i][k].count; m++)
path_list[i][j].path[m] = path_list[i][k].path[m];
for (m = 0; m < path_list[k][j].count; m++)
path_list[i][j].path[m+path_list[i][k].count] = path_list[k][j].path[m+1];

}

}
}

cout<<" Floyed table:\n";
cout<<" All views in the school:\n";
for (i = 0; i < view_count-1; i++)
cout<<" "<<i+1<<":"<<views[i].name<<endl;

cout<<" Please input the start number: ";
cin>>start_num;
cout<<" Please input the end number: ";
cin>>end_num;
cout<<endl<<endl;

cout<<"From"<<views[start_num-1].name<<"to"<<views[end_num-1].name;
if (dist_list[start_num][end_num] == -1)
cout<<"no way."<<endl;
else
{
cout<<"distance is "<<dist_list[start_num][end_num]<<", and path is :";//dist_list[][]用來表示兩點間的長度
k = path_list[start_num][end_num].path[0]-1; //path_list[][]用來保存路徑path[m]在這里表明是通過的那個車站的
cout<<views[k].name;
for (m = 1; m < path_list[start_num][end_num].count; m++)
{
k = path_list[start_num][end_num].path[m]-1; //這里應該也是int型,k是經過的路徑的id
cout<<"->"<<views[k].name;
}
}
cout<<endl<<endl;
}

void main()
{
readviews();
readlines() ;
readways();

while(1)
{

int menu;
cout<<endl<<endl<<endl<<endl;
cout<<" 全國鐵路運輸網最佳經由系統 "<<endl;
cout<<"**********************************************************"<<endl;
cout<<" 1:增加車站信息 "<<endl;
cout<<" 2:增加鐵路線信息 "<<endl;
cout<<" 3:查詢車站信息 "<<endl;
cout<<" 4:查詢最短路徑 "<<endl;
cout<<" 5:退出界面 "<<endl;
cout<<"**********************************************************"<<endl;

cout<<"輸入要進行的操作的代碼(1--5):"<<endl;
cin>>menu;
while(menu<1||menu>5)
{
cout<<"error!please enter again:";
cin>>menu;
}
switch(menu)
{
case 1:
while(1)
{
addview();
while (1)
{
addway();
cout<<"do you want to continue (y/n) "<<endl;
char con ;
cin>>con;
if(con=='y')
addway();
else
break;

}
cout<<"do you want to continue (y/n) "<<endl;
char con ;
cin>>con;
if(con=='y')
addview();
else
break;

}

break;
case 2:
while(1)
{
addline();
cout<<"do you want to continue (y/n) "<<endl;
char con ;
cin>>con;
if(con=='y')
addline();
else
break;

}

break;

case 3:
while(1)
{
search ();
cout<<"do you want to continue (y/n) "<<endl;
char con ;
cin>>con;
if(con=='y')
search ();
else
break;

}

break;
case 4:
while(1)
{
floyed();
cout<<"do you want to continue (y/n) "<<endl;
char con ;
cin>>con;
if(con=='y')
floyed();
else
break;

}

break;
case 5:
{
cout<<"謝謝使用,再見!"<<endl;
exit(1);
}

}
}
}

Ⅵ 那個我也想要一個資料庫設計事例,就是火車售票管理SQL

目錄
概述: 5
1. 需求分析 5
1.1 用戶需求: 5
1.2 業務流程分析: 6
1.3 信息需求分析 6
1.4 功能需求分析: 7
2. (資料庫)概念(模型)設計 8
2.1構思ERD的四條原則及根據這些原則相應得出的實體、聯系及其屬性: 9
2.2、系統具體E-R圖: 9
3. (資料庫)邏輯(模型)設計 10
3.1 一般邏輯模型設計: 10
3.2 具體邏輯模型設計: 11
4. 資料庫物理設計與資料庫保護設計 12
5. 處理功能設計 12
5.1 主控模塊設計: 12
5.2 子模塊設計: 13
6. 資料庫應用系統的實現 14
6.1 資料庫及其表結構的建立: 14
6.2 創建表的相關視圖: 16
6.3 各表關系圖, 16
6.4 數據輸入:利用系統錄入數據,如下圖為各表內容: 17
6.5 模塊實現: 18
7. 資料庫應用系統運行 26
7.1 寫出系統操作使用的簡要說明。 26
7.2 按使用說明運行系統並列印出運行結果。 26
7.3 系統評價: 27

報告內容
概述:
隨著國民經濟快速發展, 人們出行、交通越來越頻繁, 對服務的快捷、便利性要求也越來越高。從而對客運行業的建設與管理提出了更高的要求。為適應和推動客運行業的發展, 各種交通公司和部門開始廣泛採用使用日趨成熟的計算機技術和資料庫技術來實現票務信息的現代化管理,具有手工管理所無法比擬的優點,如:檢索迅速,查找方便,可靠性高,存儲量大,保密性好,壽命長,成本底等。這些優點能夠極大地提高信息管理和業務管理的效率。
本學生火車訂票系統正是通過資料庫存儲信息實現高效率管理。該實驗設計首先進行需求分析,然後在需求文檔的指導下實現系統的功能,如操作員的信息管理功能及普通學生的火車信息查詢、訂票、退票等功能,最終實現的是學生購得一張自己滿意的票券,同時力求通過資料庫系統及計算機在其中的運用達到提高工作效率,節約人力資源的效果。

1. 需求分析
1.1 用戶需求:
(一)、問題描述:
學生火車票定票系統
(1)背景:一年兩次的火車票訂票管理
(2)主要實現以下功能:
1)學生基本信息的管理,尤其是所在地
2)學生購票的基本信息,尤其是價錢和車票目的地
3)購票以後的分發管理
4)退票的管理
5)信息的統計和查詢
6)操作員管理
(二)、目的及現狀:
1)、實驗目的:
資料庫設計就是要使學生採用本課程中學習的資料庫設計方法,運用其基本思路與主要圖表工具完成一個自己所了解的業務的資料庫應用系統信息需求分析與資料庫的概念設計、邏輯設計、物理設計以及處理功能設計,用自己熟悉的資料庫管理系統、程序設計語言及其相關開發工具實現該系統,並運行、評價、改進之;在此基礎上嚴格按本大綱所附報告提綱撰寫課程設計報告。通過本設計進一步弄懂資料庫系統及其相關的基本概念,理解資料庫系統的系統結構、主要特點,掌握資料庫設計的原理、方法及其基本過程,初步具備資料庫應用設計的能力,初步形成運用資料庫應用系統解決管理決策中的實際問題的基本素質。
2)、現狀和系統要求:
在傳統模式下利用人工進行火車訂票業務,存在著較多的缺點,如:效率底,保密性差,時間一長將產生大量的文件和數據,更不便於查找,更新,維護等。諸如這些情況,給各相關部門工作人員帶來了很大困難,嚴重影響了他們的工作效率。運用計算機技術和資料庫技術來實現票務信息的現代化管理,具有手工管理所無法比擬的優點,如:檢索迅速,查找方便,可靠性高,存儲量大,保密性好,壽命長,成本底等。這些優點能夠極大地提高信息管理和業務管理的效率。
在本系統中,系統用戶共有兩種, 並根據用戶許可權的不同而實現不同的功能,如操作員
擁有添加、修改、刪除某火車相關信息及修改自己的個人信息的功能。學生有對車票信息、、哪一車次哪天還剩餘多少張票和自己所訂票券的查詢功能,訂票功能及退票功能。系統利用計算機和資料庫的高效率大大減輕了學校票點工作人員的勞動強度, 提高了各部門的工作效率。
1.2 業務流程分析:
(一)、描述系統的業務流程:
本系統共有兩種用戶, 根據用戶許可權的不同而實現不同的功能。
操作員的許可權最大,他進入系統必須先登錄。操作員可以添加、修改、刪除某車票的相關信息,可以修改自己的個人信息;查詢、刪除學生的訂票情況,確認學生是否已付款取票等。
學生可以按目的地的車次對車票信息進行查詢,可以訂票,訂票時須錄入自己的信息及所選擇的車次,系統將檢查該車次票數是否已訂完或不足,若已訂完或不足則提示錯誤信息並返回到訂票界面,訂票成功後將生成訂票單。學生還可以對自己所訂的票券即訂票單進行查詢,以及查詢哪一車次哪天還剩餘多少張票。用戶付款和取票可在學校票點完成。
(二)、初步業務流程圖:

1.3 信息需求分析
1.3.1 資料收集

1.3.2 事項分析:
在本火車票訂票系統中,各資料的基本數據項列舉如下:
學生資料:學號,姓名,密碼,所在學院,專業,班級,電話,目的城市
車票基本信息:車次號,出發站,開車時間,到達站,到達時間,車票種類,余票數
車次詳細信息:ID號,車次號,途徑站,票價,
訂票單信息:訂單號,訂票人學號,訂單時間,付款取票與否
訂票具體信息:ID號,訂單號,所得車次號,目的城市,訂票數,總票價,取票時間
訂票點信息:票點號,票點主任的員工號,聯系電話,所在校區
操作員資料:員工號,票點號,密碼,姓名,性別,電話
1.4 功能需求分析:
(一)、完善業務流程圖:

(二)、功能層次圖:
本系統共有兩種用戶, 根據用戶許可權的不同而實現不同的功能,如操作員查詢、添加、修改、刪除某火車相關信息及查詢、修改自己的個人信息的功能。學生對車票信息、、哪一車次哪天還剩餘多少張票和訂票功能以及對自己所訂票券的查詢功能、退票功能。

2. (資料庫)概念(模型)設計
2.1構思ERD的四條原則及根據這些原則相應得出的實體、聯系及其屬性:

① 原則1 (確定實體):能獨立存在的事物,例如人、物、事、地、團體、機構、活動、事項等等,在其有多個由基本項描述的特性需要關注時,就應把它作為實體。
在本系統中,實體主要有學生、操作員、車票信息、車票詳細信息表、訂票單,訂票詳細信息表,訂票點。
②原則2 (確定聯系):兩個或多個實體間的關聯與結合,如主管,從屬,組成,佔有,作用,配合,協同等等,當需要予以關注時,應作為聯系。實體間的聯系可分為一對一、一對多、多對多等三類,在確定聯系時還要確定其類型。
在本系統中,學生、車票信息、訂票單和訂票詳細信息表之間存在「訂購」的聯系,一個車票信息可以被多個學生購買,而一個學生只可以購買多個車次所屬的一到兩張車票,它們之間的聯系是一對多的「購買」聯系,同時一次登錄無論訂多少車次只生成一張訂票單。訂票點和操作員之間存在「隸屬」的聯系,它們之間的聯系是一對多的「隸屬」聯系;車票信息和車票詳細信息表之間存在「包含」與被包含的關系;訂票單和訂票詳細信息表之間也存在「包含」與被包含的關系。
③原則3 (確定屬性):實體的屬性是實體的本質特徵。實體應有標識屬性(能把不同個體區分開來的屬性組),並指定其中一個作為主標識。聯系的屬性是聯系的結果或狀態。
從這條原則可得到實體和聯系的屬性如下:
學生(學號,姓名,密碼,所在學院,專業,班級,電話,目的城市)
車票基本信息(車次號,出發站,開車時間,到達站,到達時間,車票種類,余票數)
車次詳細信息(ID號,車次號,途徑站,票價)
訂票單信息(訂單號,訂票人學號,訂單時間,付款取票與否)
訂票具體信息(ID號,訂單號,所得車次號,目的城市,訂票數,總票價,取票時間)
訂票點(票點號,票點主任的員工號,所在校區,電話)
操作員(員工號,票點號,密碼,姓名,性別,電話)

④原則4(一事一地):信息分析中得到的基本項要在且僅在實體聯系圖中的一個地方作為屬性出現。
根據以上的分析,可以畫出本系統的原始ERD的基本結構。如

2.2、系統具體E-R圖:

3. (資料庫)邏輯(模型)設計
3.1 一般邏輯模型設計:
(一)、由ERD導出一般關系模型的四條原則:
原則1(實體轉換為關系模式):ERD中每個獨立的實體轉換為一個關系模式,實體的屬性組成關系的屬性,實體的主標識轉換成關系的主碼。
原則2(從實體及其主從聯系轉換為關系模式):ERD中一個從實體及其主從聯系轉換為一個關系,從實體的屬性及其主實體關系的屬性組成的屬性,其主實體關系的主碼,在主從關系聯系為一對多聯系時還要加上可把同一主實體個體所對應的從實體個體區分開來的,從實體的一組屬性,作為該關系的主碼。對子類實體可作類似一對一聯系的從實體的轉換。
原則3(一對多聯系在關系模式中的表示):ERD中的一個一對多聯系通過在其「多」實體關繫上增加「1」實體關系的主碼(作為外碼)和聯系本身的屬性來表示。
原則4(多對多聯系轉換為關系):ERD中的一個多對多聯系轉換為一個關系,其被聯系實體關系的主碼和該聯系本身的屬性一起組成的屬性,被聯系關系的主碼組成該關系的復合主碼。

(二)、資料庫初步構思的關系框架:
通過ERD轉換為一般關系模型四條原則分析,得到須在資料庫中進行存儲的一般關系模型如下(帶下劃線的為主碼,帶#的為外鍵):
學生(學號,姓名,密碼,所在學院,專業,班級,電話,目的城市)
車票基本信息(車次號,出發站,開車時間,到達站,到達時間,車票種類,余票數)
車次詳細信息(ID號,車次號#,途徑站,票價)
訂票單信息(訂單號,訂票人學號#,訂單時間,付款取票與否)
訂票具體信息(ID號,訂單號#,所得車次號#,目的城市,訂票數,總票價,取票時間)
訂票點(票點號,票點主任的員工號#,所在校區)
操作員(員工號,密碼,姓名,性別,電話)
3.2 具體邏輯模型設計:
(1)、Student表:用來保存學生信息:
項名 類型 長度 小數位 值域 主鍵 外鍵 空鍵
學號 字元 12 是 非空
姓名 字元 20 非空
密碼 字元 12 非空
學院 字元 40 非空
專業 字元 30 非空
班級 數據 4 0 >0 非空
電話 字元 12 非空
目的城市 字元 30 非空
(2)、Ticket表:用來保存車票信息表
項名 類型 長度 小數位 值域 主鍵 外鍵 空鍵
車次號 字元 20 是 非空
出發站 字元 30 非空
開車時間 日期 8 非空
到達站 字元 30 非空
到達時間 日期 8 非空
車票種類 字元 20 非空
余票數 數據 8 0 >0 非空
(3)、Citysite表:用來保存車票詳細信息表:
項名 類型 長度 小數位 值域 主鍵 外鍵 空鍵
ID號 整數,自動編號 8 是 非空
車次號 字元 20 是 非空
途徑城市 字元 30 非空
票價 decimal 非空

(4)、Ticketsite表:用來保存訂票點表:
項名 類型 長度 小數位 值域 主鍵 外鍵 空鍵
票點號 整數,自動編號 8 0 是 非空
票點主任員工號 整數,自動編號 8 0 是 非空
聯系電話 字元 12 非空
所在校區 字元 40 非空
(5)、Admin表:用來保存操作員表:
項名 類型 長度 小數位 值域 主鍵 外鍵 空鍵
員工號 整數,自動編號 8 0 是 非空
用戶名 字元 20 非空
密碼 字元 12 非空
姓名 字元 20 非空
性別 字元 4 非空
電話 字元 12 非空
(6)、Book表:用來保存訂單表:
項名 類型 長度 小數位 值域 主鍵 外鍵 空鍵
訂單號 整數,自動編號 8 0 是 非空
學號 字元 是 非空
訂單時間 字元 非空
付款取票與否 整數 2 0 非空
(7)、Ticket表:用來保存取票單表:
項名 類型 長度 小數位 值域 主鍵 外鍵 空鍵
ID號 整數,自動編號 8 0 是 非空
取票號 字元 8 0 是 非空
車次號 字元 是 非空
目的城市 字元 非空
訂票數 數據 8 0 >0 非空
總票價 Decimal 非空
取票時間 日期 8 非空
4. 資料庫物理設計與資料庫保護設計
根據表的結構關系,本系統採用SQL Server 2000資料庫。SQL Server 2000是微軟公司關系型資料庫產品,它是在由MS SQL Server 7.0建立的堅固基礎之上產生的。客戶的需求極大的推動了該產的革新,SQL Server2000在易用性、可縮放性和可靠性,以及數據倉庫等諸多方面有了很大的增強。這使得SQL Server 2000在很多資料庫產品發展最快的應用領域(如電子商務、移動計算、分支自動化、商業級應用和數據交換中心等)中成為領先者
在資料庫中創建表的同時須創建相關的索引。索引就是加快檢索表中數據的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息。在資料庫中,索引也允許資料庫程序迅速地找到表中的數據,而不必掃描整個資料庫。本資料庫表較為簡單,且每個表中定義主鍵約束或者唯一性鍵約束,已經間接創建了索引,故無需再創建索引。
5. 處理功能設計
5.1 主控模塊設計:

(1)、登錄系統模塊:
在登錄窗體界面中,你可以輸入代碼和密碼,選擇你的身份(操作員或系統管理員),確認後就可進入主界面窗體。如果你是學生,且還沒注冊,可以在此窗體界面上點擊「注冊」,在注冊界面輸入所要求的項,確定後重新返回登錄界面,用你剛注冊的賬號登錄進入主界面。
在主界面中包含上述模塊圖的幾部分,根據身份,即是用戶或者管理員,對應許可權不同,分為不同的主界面,即用戶主界面和管理員主界面。
(2)、系統設置模塊圖:
用戶:在此模塊用戶可以查詢、修改自身注冊信息以及退出登錄,退出系統後將返回登錄界面。

管理員模塊:在此模塊管理員除了擁有用戶的各項設置外還可以注冊新的管理員,但為了安全起見,此功能只有當登錄人是票點主任時才可執行。

5.2 子模塊設計:
5.2.1、管理員模塊
1、車票信息管理模塊:在此模塊,管理員可以執行車票信息錄入、查詢、刪除和修改功能,不過刪除和修改功能須當該車次沒有被預訂的情況下才可執行。

2、訂票管理模塊:在此模塊,管理員可以查詢所有訂單情況、已付款取票和未付款取票的訂單情況,還可以按學號查詢某學生的訂票情況以及各種統計信息,並在學生來付款取票時執行「付款」操作。另外還可以在訂單已付款或學生取消訂單時刪除訂單。

5.2.2、用戶模塊:
1、訂票管理模塊:在此模塊,用戶可以查詢車票信息和自身訂票情況。查詢車票情況分為按車次、按目的地、按起始站—目的站查詢,當查詢到自身所想要的車票時即可訂票,但注意預定票的目的地須與學生家鄉所在城市相符,否則系統不允許訂票;查詢自身訂票情況包括訂單信息及金額統計,還須注意訂票信息上要求的取票期限,訂票人須在規定期限內去所在校區的票點付款取票,逾期票點工作人員將不予處理。

2、用戶小貼士模塊:在這里,用戶將了解本訂票系統的訂票流程及相關規定及用戶訂票後付款取票地點的信息等。

6. 資料庫應用系統的實現
6.1 資料庫及其表結構的建立:
利用SQLServer企業管理器創建資料庫Tickets,然後創建表:
1、學生表Book
create table Student
(Sno varchar(12) primary key, Sname varchar(20) not null,
Ssex varchar(4) not null, Spw varchar(12) not null, //密碼
Sadm varchar(40) not null, //學院
Sdept varchar(30) not null, Sclass numeric(4) not null,
Stel varchar(12) not null, //電話
Semail varchar(50) not null, Shcity varchar(30) not null //所在地
);
2、車票信息表Ticket
create table Ticket
(Tno varchar(20) primary key, //車次號
Startcity varchar(30) not null, Starttime varchar(20) not null,
Endcity varchar(100) not null, Endtime varchar(20) not null,
Ttype varchar(20) CHECK (Ttype IN('硬座','軟座','硬卧','軟卧')),
Tickets int not null //票數
);
3、車次站次信息表Citysite
create table Citysite
(Cityno numeric(8) identity(1,1), //票點號
Tno varchar(20), City varchar(100),
Tprice decimal not null, //票價
primary key (Cityno,Tno),
foreign key (Tno) references Ticket(Tno) on delete cascade
)
4、訂票單表Book
create table Book
(Bno numeric(8) identity(1,1) primary key, Sno varchar(12),
Maketime datetime not null, judge int,
foreign key (Sno) references Student(Sno),);
5、訂票詳細信息表Bookno
create table Bookno
(ID numeric(8) identity(1,1) primary key,
Bno numeric(8), Tno varchar(20), City varchar(100),
Booktime varchar(20) not null, Ticketnums int not null,
Price decimal not null, //票價
Pickdate datetime not null, foreign key (Tno) references Ticket(Tno),
foreign key (Bno) references Book(Bno));
6、操作員表Operater
create table Operater
(Adname varchar(20) primary key, //登錄用戶名
Adpw varchar(12) not null, //登錄密碼
Opname varchar(20) not null, //員工真實姓名
Opsex varchar(4) not null, Optel varchar(12) not null,
Opemail varchar(50) not null);
7、訂票點表Ticketsite
create table Ticketsite
(Siteno numeric(8) primary key identity, //票點號
Adname varchar(20), // 票點主任登錄名
Sitetel varchar(12) not null, Siteaddr varchar(40),
foreign key (Adname) references Operater(Adname));
//為安全起見,學校各校區訂票點內容的添加要以直接輸入資料庫的方式進行
insert into Ticketsite(Adname,Sitetel,Siteaddr) values('linyp','870432','龍洞校區行政樓205')
insert into Ticketsite(Adname,Sitetel,Siteaddr) values('admin','87084432','大學城校區E區205')
6.2 創建表的相關視圖:
1、創建V_Book視圖,得到對於某種車票的訂票人數和訂票張數
create view V_Book(Tno,stu_no,sumticket)
as
select Tno,count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno group by Tno
2、創建W_Book視圖,得到對於所有訂票學生的人數和訂票總張數
create view W_Book(stu_nums,sumtickets)
as select count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno
3、創建P_Book視圖,得到對於已付款取票的人數和車票總張數
create view P_Book(cout_no,cout_nums)
as select count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno and judge=1
4、創建M_Book視圖, 得到對於某一訂票的總金額
create view M_Book(Allprice)
as select sum(Tprice*Ticketnums) from Book,Bookno,Citysite
where Bookno.Bno=Book.Bno and Bookno.Tno=Citysite.Tno and Bookno.City=Citysite.City
6.3 各表關系圖,

易知表Ticket與表Citysite之間是父表與子表的關系:

表Book與表Bookno之間也是父表與子表的關系:

它們之間都是父表對子表的一對多的關系。
根據表之間的結構關系圖,可以得出各表的完整性約束條件如下圖:
表名 主鍵列名 外鍵
外鍵列名 參照表
Student Sno 無
Ticket Tno 無
Citysite Cityno Tno Ticket
Book Bno Sno Student
Bookno ID Bno,Tno Book,Ticket
Operater Adname 無
Ticketsite Siteno Adname Operater

6.4 數據輸入:利用系統錄入數據,如下圖為各表內容:

6.5 模塊實現:
本次系統設計我前台採用JSP技術,後台採用SQL Server 2000,操作系統採用Windows XP。
JSP(JavaServer Pages)是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標准,它是在傳統的網頁HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件(*.jsp)。JSP具備了Java技術的簡單易用,完全的面向對象,具有平台無關性且安全可靠,主要面向網際網路的所有特點。