當前位置:首頁 » 編程語言 » 車票管理程序設計c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

車票管理程序設計c語言

發布時間: 2023-05-13 00:32:00

㈠ 用c語言編寫一個車票管理系統

#include<stdio.h> ///宏定義函數
#include<string.h> //串操作及內存操作函數
#include<stdlib.h> /////調用系統函數
#include<time.h> ///時間庫函數
#include<conio.h> ///輸入輸出函數
#define N 1000 //宏定義多條記錄
typedef struct TICKET ////定義新結構體TICKET
{
char num[10]; //車次編號
char hour[3]; //時間,,小時
char min[3]; //分鍾
char from[10]; //起始站
char to[10]; //終點站
float hours; //車程實際時間
int max; //最大車載容量
int now; //已售票數
}CLASS;
int class_num=0; ///初始班次總數為0
CLASS records[N]; // 多條記錄
int system_time(); //系統時間
void NewMessage(); //新紀錄*錄入函數******
void ShowTable1(); //線框調用1,,,不用沒次輸
void ShowTable2(int i); //線框調用2,,,不用沒次輸
void Display(); //顯示所有函數
void add(); //增加記錄
void save(); // 保存函數
void load(); // 按班次查詢函數
void search(); //查詢函數
void change(); //修改函數**
void quit(); ////////// //退出函數******
void Ticketorder(); // //*售票函數***
void Ticketdelete(); //刪除函數*
int menu_select(); //菜單函數*
int whether(int); ////判斷時間是否超出函數***
void find(char s1[],char s2[]); //查詢函數★//s1為班次//s2為終點站
void deletemessage(); //刪除函數
int findnum(char s1[]); //班次查詢函數
void get(int,int); //修改及增加班次*
char *menu[]={"*****************歡迎使用車票查詢系統*****************",
"\n*******************MENU功能菜單***********************",
"\n◤ ★ 1. 錄入班次 ◥",
"\n◆ ★ 2. 顯示所有班次 ◆",
"\n◆ ★ 3. 查詢班次 ◆",
"\n◆ ★ 4. 增加班次 ◆",
"\n◆ ★ 5. 售票 ◆",
"\n◆ ★ 6. 退票 ◆",
"\n◆ ★ 7. 修改班次 ◆",
"\n◆ ★ 8. 刪除班次 ◆",
"\n◣ ★ 9. 退出 ◢"};
/**************************主函數***************************/
void main()
{
system("cls"); //刷屏
while(1) //菜單函數循環
{
switch(menu_select()) //菜單函數*
{
case 1: NewMessage();break; ////新紀錄*錄入函數******
case 2: Display();break; // //顯示
case 3: search();break; //查找函數**
case 4: add();break; // //增加記錄
case 5: Ticketorder();break; ////*售票函數***
case 6: Ticketdelete();break; //刪除函數*
case 7: change();break; //修改函數**
case 8: deletemessage();break; //////選擇調用刪除函數
case 9: quit();break; //////退出函數******
}
}
}
/***********************菜單函數**************************/
int menu_select() /////////菜單函數*
{
char s[5]; ///定義要輸入的數字功能
int c,i;
system("cls"); //刷屏
system("color 09");//改變顏色
for(i=0;i<11;i++)
{
printf("%s",menu[i]); //輸出菜單各項)
}
i=0;
while(c<0||c>9) //判斷是否是1到9的命令
{
printf("\n"); ///輸出換行

printf("******************************************************");
printf("\n請選擇(1-9):▁▂▃▄▆▇");
scanf("%s",s);
c=atoi(s); //atoi將字元串轉換成一個整數值
} ///輸出菜單面
return c; ////返回請求
}
/*******************************錄入函數************************************/
void NewMessage() //*錄入函數******
{
int i=0,j=5,h; ////
char s[5];
FILE *fp; ////定義文件型指針變數
system("cls"); //刷屏
if((fp=fopen("d:車票管理系統0.dat","rb"))!=NULL) //fopen打開文件
{
printf("車票信息已經存在請選擇增加功能!\n");
printf("任意輸入則返回菜單\n");
scanf("%s",s);
i=1; //通過是1
}
if(i==0)
{
system("cls"); //刷屏
printf("請輸入要錄入班次總數:\n");
scanf("%d",&class_num); //指向班次指針
system("cls"); //刷屏
for(i=0;i<class_num;i++)
{
system("cls"); //刷屏
printf("請輸入第%d個班次信息:\n",i+1);
h=-1;
for(;h!=i;) ///循環輸出
{
printf("請輸入班次:\n");
scanf("%s",records[i].num);
for(h=0;h<i;h++)
if(strcmp(records[h].num,records[i].num)==0)
//判斷字元串比較是否相等,, 待比較的字元串
{
printf("輸入錯誤!該班次已存在!\n");
break; ///返回
}
}
get(i,j); ////修改及增加班次*
j=5;
}
save(); //調用保存函數
}
}
/*******************************顯示所有函數********************************/
void Display() //顯示所有函數
{
int i,j;
system("cls"); //刷屏
load(); // 調用按班次查詢函數
ShowTable1(); //線框調用1,,,不用沒次輸
for(i=0,j=0;i<class_num;i++,j+=2) /////按班次順序輸出
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
if(whether(i)) //判斷時間是否超出函數***
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,
records[i].min, records[i].from,records[i].to,records[i].hours,
records[i].max,records[i].now);
else
printf("|%10s| 已發車 |%10s|%10s|%8.1f|%8d|%8d|",records[i].num,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);

}
ShowTable2(j); //線框調用2
printf("\n按任意鍵繼續....\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
}
/**********************************列印表頭***********************************************/

void ShowTable1() //線框調用1,,,不用沒次輸
{
int i=2;
system("cls"); //刷屏
printf("**************************MESSAGE車程信息**********************************\n");
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("\n| 班次 | 發車時間 | 起點站 | 終點站 |行車時間|額定載量| 已售票 |\n");
}
/***************************************列印表尾************************************************/

void ShowTable2(int i) //線框調用2。不用沒次輸。
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
}
/**************************查找函數11**************************/
void search() ////查詢調用
{
int i;
char s1[10]={'\0'},s2[10]={'\0'};
system("cls"); //刷屏
printf("1. 按班次查詢\n");
printf("2. 按終點站查詢\n");
printf("3. 退出\n");
printf("請選擇(1-3):\n");
scanf("%d",&i);
load(); // 調用按班次查詢函數
switch(i) //多分枝選擇語句
{
case 1: printf("請輸入要查詢的班次:\n"); //////s1為班次
scanf("%s",s1);
find(s1,s2); /////調用查找函數222 2
break;
case 2: printf("請輸入要查詢終點站:\n"); /////s2為終點站
scanf("%s",s2);
find(s1,s2); /////調用查找函數222 2
break;
case 3: break;
default : printf("輸入錯誤!\n");
break;
}
printf("按任意鍵繼續....\n");
getch(); ///從控制台讀取一個字元,但不顯示在屏幕上
}
/********************************查詢函數22*********************************/
void find(char s1[],char s2[])
{
int i,h=0,m;
ShowTable1(); ////調用線框1
if(s2[0]=='\0')
m=1; ///1為無條件執行
else m=0;
for(i=0;i<class_num;i++)
if(strcmp(s1,records[i].num)==0||strcmp(s2,records[i].to)==0)
////判斷字元串比較是否相等,, 待比較的字元串
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,records[i].min,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
h+=2;
if(m==1)
break;
}
ShowTable2(h); ////調用線框2
if(h==0)
printf("要查找的班次不存在!\n");

}
/***********************增加函數****************************/
void add() // //增加記錄
{
int i,j=5;
load(); // 調用按班次查詢函數
system("cls"); //刷屏
printf("1. 增加班次\n");
printf("2. 返回\n");
printf("請選擇(1-2)\n");
scanf("%d",&i);
if(i==1)
{
system("cls"); //刷屏
printf("1. 請輸入要增加的班次:\n");
scanf("%s",records[class_num].num);
for(i=0;i<class_num;i++)
if(strcmp(records[class_num].num,records[i].num)==0)
//判斷字元串比較是否相等,, 待比較的字元串 判斷車次沒重復
{
printf("輸入錯誤!\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
break;
}
if(i==class_num)
{
get(i,j); ////修改及增加班次*
class_num++; ///使班次數加1
save(); //調用保存函數
}
}
}
/********************************售票函數*****************************/
void Ticketorder() //*售票函數***
{
int i;
char num[10];
system("cls"); //刷屏
printf("1. 售票\n");
printf("2. 返回\n");
printf("請選擇(1-2):\n");
scanf("%d",&i);
if(i==1)
{
load(); // 調用按班次查詢函數
search(); //查找函數**
printf("請輸入要訂票的班次(若無請輸入0):\n");
scanf("%s",num);
for(i=0;i<class_num;i++)
if(strcmp(num,records[i].num)==0)//判斷字元串比較是否相等,, 待比較的字元串
if(records[i].max>records[i].now&&whether(i)==1)
//判斷時間是否超出函數***並且***沒超出最大客量
{
records[i].now++; ///使已售的暑假1
printf("通向%s班次為%s的票訂票成功!\n",records[i].to,records[i].num);
save(); //調用保存函數
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
break;
}
else
{
printf("該班次已滿或已發出!\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
}
}
}
/****************************退票刪除函數***************************************/
void Ticketdelete() //刪除函數*
{
int i;
char num[10];
system("cls"); //刷屏
printf("1. 退票\n");
printf("2. 返回\n");
printf("請選擇(1-2)\n:");
scanf("%d",&i);
if(i==1)
{
system("cls"); //刷屏
load(); // 調用按班次查詢函數
printf("請輸入要退票的班次:\n");
scanf("%s",num);
i=findnum(num); //調用班次查詢函數
if(strcmp(num,records[i].num)==0) //判斷字元串比較是否相等 待比較的字元串
if(whether(i)) //判斷時間是否超出函數***
{
printf("確定(Y/N)?");
scanf("%s",num);
if(num[0]=='y'||num[0]=='Y')
{
records[i].now--; //使已售票加1
printf("退票成功!\n");
save(); //調用保存函數
getch(); //從控制台讀取一個字元,但不顯示在屏幕上
}
}
else
{
printf("該班車已發出,無法退票!\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
}
if(i==class_num)
{ printf("輸入錯誤!\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
}
}
}
/********************************修改函數*********************************/
void change() //修改函數**
{
char num[10],s[10];
int h=0,j=13,i;
load(); // 調用按班次查詢函數
system("cls"); //刷屏
printf("請輸入要修改的班次:\n");
scanf("%s",num);
i=findnum(num); //調用班次查詢函數
if(i==class_num)
{
printf("輸入錯誤,無此班次!\n");
getch(); ///從控制台讀取一個字元,但不顯示在屏幕上
}
else
{
printf("確定修改(Y/N)?\n");
scanf("%s",s);
if(s[0]=='y'||s[0]=='Y')
{
get(i,j); ////修改及增加班次*
save(); //調用保存函數
}
}
}
/*******************************刪除函數**********************************/
void deletemessage() //刪除班次信息
{
int i,h=0;
char num[10];
system("cls"); //刷屏
printf("1. 刪除班次\n");
printf("2. 返回\n");
printf("請選擇(1-2):\n");
scanf("%d",&i);
if(i==1)
{
system("cls"); //刷屏
printf("請輸入要刪除的班次:\n");
scanf("%s",num);
i=findnum(num); //調用班次查詢函數
if(i==class_num)
{
printf("輸入錯誤,無此班次!\n");
getch(); ///從控制台讀取一個字元,但不顯示在屏幕上
}
else
{
printf("確定?(y/n)\n");
scanf("%s",num);
if(num[0]=='y'||num[0]=='Y')
{
for(;i<class_num-1;i++)
records[i]=records[i+1];
class_num--; ////班次總數減1
save(); //調用保存函數
printf("刪除成功!\n");
getch();
}
}
}
}
/****************************按班次查詢函數****************************/
int findnum(char s1[]) //查找班次
{
int i,h=0;
ShowTable1(); //線框調用1,,,不用沒次輸
for(i=0;i<class_num;i++)
{
if(strcmp(s1,records[i].num)==0) //判斷字元串比較是否相等,如果符合則輸出車次等信息
{
printf("|----------|----------|----------|----------|--------|--------|--------|\n");
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,
records[i].min,records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
h+=2; ///加2使輸出的框架合適
break;
}
}
ShowTable2(h); ///調用框架2
return i;
}
/**************************************保存函數*******************************/
void save() //////保存函數
{
FILE *fp1,*fp2; //文件行指針
if((fp1=fopen("d:車票管理系統.dat","wb"))==NULL) //打開文件、為輸出打開一個二進制文件
{
printf("文件打開錯誤!\n");
exit(0);
}
if((fp2=fopen("d:車票管理系統0.dat","wb"))==NULL) //打開文件、為輸出打開一個二進制文件
{
printf("文件打開錯誤!\n");
exit(0);
}
fwrite(&class_num,sizeof(int),1,fp2); //寫入文件信息
fwrite(records,sizeof(CLASS),class_num,fp1);
fclose(fp1);fclose(fp2); ///關閉文件
}
/*******************************按班次查詢函數*******************************/
void load() //按班次查詢函數
{
FILE *fp1,*fp2;
if((fp1=fopen("d:車票管理系統.dat","rb"))==NULL)
{
system("cls"); //刷屏
printf("文件打開錯誤!\n");
getch(); ///從控制台讀取一個字元,但不顯示在屏幕上

exit(0);
}
if((fp2=fopen("d:車票管理系統0.dat","rb"))==NULL)
{
system("cls"); //刷屏
printf("文件打開錯誤!\n");
getch(); ///從控制台讀取一個字元,但不顯示在屏幕上

exit(0); //退出
}
fread(&class_num,sizeof(int),1,fp2); ///讀入信息
fread(records,sizeof(CLASS),class_num,fp1);/////讀入信息
fclose(fp1);fclose(fp2); ///文件關閉
}
/******************************退出函數***************************/
void quit() //退出函數******
{
char s[5];
printf("確認退出?(Y/N)\n");
scanf("%s",s);
if(s[0]=='y'||s[0]=='Y')
exit(0); //程序中止執行,返回調用過程..state 0-正常中止非0-非正常
}
/*************************修改及增加班次*******************************/
void get(int i,int j) // 修改及增加班次*
{
for(;;)
{
printf("請輸入發車時間(xx xx)");scanf("%s%s",records[i].hour,records[i].min);
if((atoi(records[i].hour)<24&&atoi(records[i].hour)>=0)&&(atoi(records[i].min)<60&&atoi(records[i].min)>=0))
break;
else
{
printf("輸入錯誤!\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
}
}
printf("請輸入起點站:\n");
scanf("%s",records[i].from);
printf("請輸入終點站:\n");
scanf("%s",records[i].to);
printf("請輸入行車時間:\n");
scanf("%f",&records[i].hours);
printf("請輸入額定載量:\n");
scanf("%d",&records[i].max);
for(;;)
{
printf("請輸入已售票數:\n");
scanf("%d",&records[i].now);
if(records[i].now<=records[i].max)
break;
else
{
printf("輸入錯誤!\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
}
}
}
/********************************判斷時間是否超出函數**********************************/
int whether(int i) //判斷時間是否超出函數***
{
struct tm *local; //時間結構體
time_t t; //把當前時間給t
t=time(NULL); //NULL在stdio.h中定義為0
local=localtime(&t); /////獲取當前系統時間
if(local->tm_hour<atoi(records[i].hour)||local->tm_hour==atoi(records[i].hour)&&local->tm_min<atoi(records[i].min))
//atoi將字元串轉換成一個整數值
return 1;
else
return 0;
}

我也是拷貝別人的 我用過了這個程序可行

㈡ C語言怎麼編寫車票管理系統

推薦用vc,vb
一般用面向對象的語言編寫這樣的系統,這樣出來的系統才有可能滿足用戶的需求,用面向過程的語言部容易實現這點,並不好調試.建議用.
首先需要知道用戶的要求.
再設計好能滿足用戶要求的系統,建立對象模型,動態模型和功能模型.
然後才編程.
具體過程你可以看看面向對象方法學的書.
如果要快一點完成的話,就看看一些有關你用的語言的項目實踐書,他們都會帶光碟的,,光碟上有一些已經開發的系統,看看就知道車票管理系統怎麼樣編寫了.很可能直接有車票管理系統.呵呵`~

㈢ c語言程序設計題。實驗報告。高分。

車票系統,與你的第2題要求略有不同,你自己修改吧
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
#include<time.h>
#include<conio.h>
#include<string.h>
const int MAX=20;
const int N=50;
const int MAXFILENAME=100;
enum {FALSE,TRUE};
struct time
{
int hour;
int minutes;
};
struct ticket
{
int SerialNumber;
struct time SetOut;
char DeparturePoint[MAX];
char TerminalPoint[MAX];
float LastTime;
int FixNumber;
int FixedNumber;
}car[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 TicketManagement(void); //車票售出與退回
void TicketOrder(void); //售票
void TicketDelete(void); //退票
void exit(void); //退出該系統
/********************************************/
int main(void)
{
RecordNumber=ShowMessage();
if(1)
do{
mainmenu();
}while(FLAG==FALSE);
return 0;
}
void mainmenu(void)
{
system("color 1f");
system("mode con: cols=140 lines=130");
char functionNumber;
printf(" 車票管理系統\n\n");
printf(" 製作:hmm182007\n");
printf(" 日期:2007/11/25/19:57\n");
printf("============================================================================\n");
printf(" 1.錄入班次信息\t\n");
printf(" 2.瀏覽班次信息\t\n");
printf(" 3.查詢行車路線\t\n");
printf(" 4.售票與退票系統\t\n");
printf(" 5.退出該系統\t\n");
printf("============================================================================\n");
printf("請選擇你所需要的功能:");
scanf("%c",&functionNumber);
switch(functionNumber)
{
case '1':
{
InsertMessage();
printf("\n按任意鍵回主菜單......\n");
getchar();
getchar();
}
break;
case '2':
{
ShowMessage();
printf("\n按任意鍵回主菜單......\n");
getchar();
getchar();
}
break;
case '3':
{
SearchMenu();
printf("\n按任意鍵回主菜單......\n");
getchar();
getchar();
}
break;
case '4':
{
TicketManagement();
getchar();
getchar();
}
break;
case '5':FLAG=TRUE;exit();break;
default:
{
printf("輸入錯誤,請確保你的輸入為1--5.\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,"%d%d%d",&car[i].SerialNumber,&car[i].SetOut.hour,&car[i].SetOut.minutes);
fscanf(fp,"%s%s%f%d%d",&car[i].DeparturePoint,&car[i].TerminalPoint,&car[i].LastTime,&car[i].FixNumber,&car[i].FixedNumber);
}
int count=i;
printf("班次\t發車時間\t起點\t終點\t行車時間(小時)\t額定載量\t已定票人數\n");
for(i=0;i<count;i++)
{
printf("%d\t%d:%d\t\t",car[i].SerialNumber,car[i].SetOut.hour,car[i].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[i].DeparturePoint,car[i].TerminalPoint,car[i].LastTime,car[i].FixNumber,car[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=0;!feof(fp)&&!ferror(fp);i++)
{
fscanf(fp,"%d%d%d",&car[i].SerialNumber,&car[i].SetOut.hour,&car[i].SetOut.minutes);
fscanf(fp,"%s%s%f%d%d",&car[i].DeparturePoint,&car[i].TerminalPoint,&car[i].LastTime,&car[i].FixNumber,&car[i].FixedNumber);
}
int count=i;
printf("班次\t發車時間\t起點\t終點\t行車時間(小時)\t額定載量\t已定票人數\n");
for(i=0;i<count;i++)
{
printf("%d\t%d:%d\t\t",car[i].SerialNumber,car[i].SetOut.hour,car[i].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[i].DeparturePoint,car[i].TerminalPoint,car[i].LastTime,car[i].FixNumber,car[i].FixedNumber);
}
return count;
}
void SearchMenu(void)
{
system("color 1f");
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 SearchNumber;
printf("請輸入要查詢的班次號:");
scanf("%d",&SearchNumber);
printf("班次\t發車時間\t起點\t終點\t行車時間(小時)\t額定載量\t已定票人數\n");
printf("%d\t%d:%d\t\t",car[SearchNumber-1].SerialNumber,car[SearchNumber-1].SetOut.hour,car[SearchNumber-1].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[SearchNumber-1].DeparturePoint,car[SearchNumber-1].TerminalPoint,car[SearchNumber-1].LastTime,car[SearchNumber-1].FixNumber,car[SearchNumber-1].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<RecordNumber;i++)
{
//對比終點站記錄,找到並輸出
if((strcmp(Address,car[i].TerminalPoint))==0)
{
printf("%d\t%d:%d\t\t",car[i].SerialNumber,car[i].SetOut.hour,car[i].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[i].DeparturePoint,car[i].TerminalPoint,car[i].LastTime,car[i].FixNumber,car[i].FixedNumber);
}
}
}
void TicketManagement(void)
{
char functionNumber;
system("color 1f");
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)
{
int i;
printf("請輸入要訂購的車票的班次:");
scanf("%d",&i);
if(i<0||i>RecordNumber)
{
printf("對不起,今天沒有這趟車,請明天再來,謝謝使用!\n");
printf("按任意鍵回主菜單......\n");
getchar();//getchar();
TicketManagement();
}

time_t tval;
struct tm *now;
tval = time(NULL);
now = localtime(&tval);
if((now->tm_hour==car[i].SetOut.hour&&now->tm_min<car[i].SetOut.minutes)||(now->tm_hour<car[i].SetOut.hour))
{
if(car[i].FixedNumber<car[i].FixNumber)
{
car[i].FixedNumber++;
printf("你的訂票成功,請按時上車,謝謝使用!\n");
}
else printf("對不起,今天的這趟車的票已賣完,請明天再來,謝謝合作!\n");
}
else printf("對不起,今天的這趟車已發出,請明天再來,謝謝合作!\n");

printf("班次\t發車時間\t起點\t終點\t行車時間(小時)\t額定載量\t已定票人數\n");
printf("%d\t%d:%d\t\t",car[i-1].SerialNumber,car[i-1].SetOut.hour,car[i-1].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[i-1].DeparturePoint,car[i-1].TerminalPoint,car[i-1].LastTime,car[i-1].FixNumber,car[i-1].FixedNumber);
//printf("按任意鍵回主菜單......\n");
//getchar();getchar();
}
void TicketDelete(void)
{
int i;
printf("請輸入要退購的車票的班次:");
scanf("%d",&i);
if(i<0||i>RecordNumber)
{
printf("對不起,今天沒有這趟車,無法完成退票.謝謝使用!\n");
getchar();
//getchar();
TicketManagement();
getchar();
}
time_t tval;
struct tm *now;
tval = time(NULL);
now = localtime(&tval);
if((now->tm_hour==car[i].SetOut.hour&&now->tm_min<car[i].SetOut.minutes)||(now->tm_hour<car[i].SetOut.hour))
{
if(car[i].FixedNumber>=1)
{
car[i].FixedNumber--;
printf("退訂車票成功,謝謝使用!\n");
}
else printf("對不起,今天的這趟車的票尚未賣出,無法完成退票!\n");
}
else printf("對不起,今天的這趟車已發出,無法完成退票!\n");

printf("班次\t發車時間\t起點\t終點\t行車時間(小時)\t額定載量\t已定票人數\n");
printf("%d\t%d:%d\t\t",car[i-1].SerialNumber,car[i-1].SetOut.hour,car[i-1].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[i-1].DeparturePoint,car[i-1].TerminalPoint,car[i-1].LastTime,car[i-1].FixNumber,car[i-1].FixedNumber);
getchar();//getchar();
}
void exit(void)
{
printf("\n\n*********************謝謝使用本系統,歡迎下次繼續使用***********************\n");
exit(0);
}

㈣ 用C語言編寫火車售票系統

如果誰能用C語言能把這么題目就這樣順利的編出來的話,他已經是編程高手了,這太高級了

㈤ 用C語言寫一個模擬火車票管理系統。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#define N 1000
typedef struct TICKET
{
char num[10];
char hour[3];
char min[3];
char from[10];
char to[10];
float hours;
int max;
int now;
}CLASS;
int class_num=0;
CLASS records[N];
int system_time();
void NewMessage();
void ShowTable1();
void ShowTable2(int i);
void Display();
void add();
void save();
void load();
void search();
void change();
void quit();
void Ticketorder();
void Ticketdelete();
int menu_select();
int whether(int);
void find(char s1[],char s2[]);
void deletemessage();
int findnum(char s1[]);
void get(int,int);
char *menu[]={"*****************歡迎使用車票管理系統*****************",
"\n*******************MENU功能菜單***********************",
"\n 1. 錄入班次 ",
"\n 2. 顯示所有班次 ",
"\n 3. 查詢班次 ",
"\n 4. 增加班次 ",
"\n 5. 售票 ",
"\n 6. 退票 ",
"\n 7. 修改班次 ",
"\n 8. 刪除班次 ",
"\n 9. 退出 "};

/**主函數**/
void main()
{
system("cls");
while(1)
{
switch(menu_select())
{
case 1: NewMessage();break;
case 2: Display();break;
case 3: search();break;
case 4: add();break;
case 5: Ticketorder();break;
case 6: Ticketdelete();break;
case 7: change();break;
case 8: deletemessage();break;
case 9: quit();break;
}
}
}

/**菜單函數**/
int menu_select()
{
char s[5];
int c,i;
system("cls");
for(i=0;i<11;i++)
{
printf("%s",menu[i])) ;
}
i=0;
printf("\n");

printf("******************************************************");
printf("\n請選擇(1-9):");
scanf("%s",s);
c=atoi(s);
while(i<0||i>9)
{
printf("\n");

printf("******************************************************");
printf("\n請選擇(1-9):");
scanf("%s",s);
c=atoi(s);
}
return c;
}

void NewMessage()
{
int i=0,j=5,h;
char s[5];
FILE *fp;
system("cls");
if((fp=fopen("d:number.dat","rb"))!=NULL)
{
printf("車票信息已經存在請選擇增加功能!\n");
printf("任意輸入則返回菜單\n");
scanf("%s",s);
i=1; //通過是1
}
if(i==0)
{
system("cls");
printf("請輸入要錄入班次總數:\n");
scanf("%d",&class_num);
system("cls");
for(i=0;i<class_num;i++)
{
system("cls");
printf("請輸入第%d個班次信息:\n",i+1);
h=-1;
for(;h!=i;)
{
printf("請輸入班次:");
scanf("%s",records[i].num);
for(h=0;h<i;h++)
if(strcmp(records[h].num,records[i].num)==0)
//判斷字元串比較是否相等,, 待比較的字元串
{
printf("輸入錯誤!該班次已存在!\n");
break;
}
}
get(i,j);
j=5;
}
save();
}
}

void Display() //顯示所有函數
{
int i,j;
system("cls"); //刷屏
load(); // 調用按班次查詢函數
ShowTable1(); //線框調用1,,,不用每次輸
for(i=0,j=0;i<class_num;i++,j+=2) /////按班次順序輸出
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
if(whether(i))
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,
records[i].min, records[i].from,records[i].to,records[i].hours,
records[i].max,records[i].now);
else
printf("|%10s| 已發車 |%10s|%10s|%8.1f|%8d|%8d|",records[i].num,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);

}
ShowTable2(j); //線框調用2
printf("\n按任意鍵繼續....\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
}

/**列印表頭**/
void ShowTable1()
{
int i=2;
system("cls");
printf("**************************車票信息系統**********************************\n");
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("\n| 班次 | 發車時間 | 起點站 | 終點站 |行車時間|額定載量| 已售票 |\n");
}

void ShowTable2(int i)
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
}

void search()
{
int i;
char s1[10]={'\0'},s2[10]={'\0'};
system("cls");
printf("1. 按班次查詢\n")
printf("2. 按終點站查詢\n");
printf("3. 退出\n");
printf("請選擇(1-3):\n");
scanf("%d",&i);
load();
switch(i)
{
case 1: printf("請輸入要查詢的班次:");
scanf("%s",s1);
find(s1,s2);
break;
case 2: printf("請輸入要查詢終點站:");
scanf("%s",s2);
find(s1,s2);
break;
case 3: break;
default : printf("輸入錯誤!\n");
break;
}
printf("按任意鍵繼續....\n");
getch();
}

void find(char s1[],char s2[])
{
int i,h=0,m;
ShowTable1();
if(s2[0]=='\0')
m=1;
else m=0;
for(i=0;i<class_num;i++)
if(strcmp(s1,records[i].num)==0||strcmp(s2,records[i].to)==0)
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,records[i].min,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
h+=1;
if(m==1)
break;
}
ShowTable2(h);
if(h==0)
printf("要查找的班次不存在!\n");

}

/**增加函數**/
void add()
{
int i,j=5;
load();
system("cls");
printf("1. 增加班次");
printf("2. 返回\n");
printf("請選擇(1-2)\n");
scanf("%d",&i);
if(i==1)
{
system("cls"); //刷屏
printf("1. 請輸入要增加的班次:");
scanf("%s",records[class_num].num);
for(i=0;i<class_num;i++)
if(strcmp(records[class_num].num,records[i].num)==0)
//判斷字元串比較是否相等,待比較的字元串,判斷車次沒重復
{
printf("輸入錯誤!\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
break;
}
if(i==class_num)
{
get(i,j); ////修改及增加班次*
class_num++; ///使班次數加1
save(); //調用保存函數
}
}
}

/**售票函數**/
void Ticketorder() //*售票函數
{
int i;
char num[10];
system("cls"); //刷屏
printf("1. 售票\n");
printf("2. 返回\n");
printf("請選擇(1-2):\n");
scanf("%d",&i);
if(i==1)
{
load(); // 載入函數
search(); //查找函數
printf("請輸入要訂票的班次(若無請輸入0):");
scanf("%s",num);
for(i=0;i<class_num;i++)
if(strcmp(num,records[i].num)==0)//判斷字元串比較是否相等,, 待比較的字元串
if(records[i].max>records[i].now&&whether(i)==1)
//判斷時間是否超出函數並且沒超出最大客量
{
records[i].now++; ///使已售票加1
printf("通向%s班次為%s的票訂票成功!\n",records[i].to,records[i].num);
save(); //調用保存函數
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
break;
}
else
{
printf("該班次已滿或已發出!\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
}
}
}

/**退票函數**/
void Ticketdelete() //刪除函數*
{
int i;
char num[10];
system("cls"); //刷屏
printf("1. 退票\n");
printf("2. 返回\n");
printf("請選擇(1-2)\n:");
scanf("%d",&i);
if(i==1)
{
system("cls"); //刷屏
load(); // 調用按班次查詢函數
printf("請輸入要退票的班次:\n");
scanf("%s",num);
i=findnum(num); //調用班次查詢函數
if(strcmp(num,records[i].num)==0) //判斷字元串比較是否相等 待比較的字元串
if(whether(i)) //判斷時間是否超出函數***
{
printf("確定(Y/N)?");
scanf("%s",num);
if(num[0]=='y'||num[0]=='Y')
{
records[i].now--; //使已售票減1
printf("退票成功!\n");
save(); //調用保存函數
getch(); //從控制台讀取一個字元,但不顯示在屏幕上
}
}
else
{
printf("該班車已發出,無法退票!\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
}
if(i==class_num)
{ printf("輸入錯誤!\n");
getch(); /////從控制台讀取一個字元,但不顯示在屏幕上
}
}
}
字數超了。。。。

㈥ 用C語言寫一個火車票管理系統

定義一個結構體就可以了。可以從放在文件中,從文件中讀寫。