




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課程設計報告課程名稱應用軟件實踐設計題目火車票售票系統專業、班級學號姓名指導教師設計時間2021年9月16日--2021年10月11日2021年10月11日引言〔簡要說明設計題目的目的、意義、內容、主要任務等〕隨著市場經濟的不斷飛速開展,交通道路環境的不斷改善,人們的出行次數不斷增多,人口流動頻繁,數量不斷加大,車站信息量迅猛增長,車站售票售票系統在人們的日常生活中發揮著越來越重要的作用。本系統實現了線路信息,汽車信息,票務信息的查詢和售票,滿足人們的需求。編寫目的掌握數據庫設計原理及相關軟件的使用。實現方便、快速售票;是用戶準確了解售票情況,提供多種查詢和統計功能;實現系統的平安性設置,使系統本身具有一定的維護功能。背景系統名稱:火車票售票系統本工程的提出者及開發者是客戶售票系統軟件開發小組,用戶是火車站售票員本工程立足于售票實際,著眼于未來開展,建成符合標準化協議、通用性較強、實用的系統,以提高客戶信息的現代化售票水平,實現信息資源的共享。系統概述1、功能簡介本軟件是一個簡單的火車票訂票售票系統,軟件窗口為DOS頁面。火車票訂票售票信息售票系統的功能主要是實現火車票訂票的信息化售票。通過火車票訂票售票系統,火車站售票人員可以實現對火車票信息的輸入、訂票、查找、修改和查詢等操作。并且在原來根本要求功能的根底上新增了:增加數據功能。本系統最大的優點就是操作簡便快捷等。設計思路將火車票信息定義為一個ticket類,在類中包含私有數據成員intnum;stringorigin;stringdestination;stringstart;stringend;intprice;intcount;分別表示車次號、出發城市、目的城市、出發時間、到達時間、票價、票數。公有成員函數包括set(),book(),search(),change(),add(),display(),分別用來實現對學生信息的數據初始錄入、訂購火車票、查詢數據、修改數據、增加數據,顯示所有數據功能。然后定義了一個menu()菜單函數,使功能菜單顯示在運行窗口以提示用戶如何進行操作。主函數是一個程序必不可少的,在主函數中,使用一個switch語句來選擇調用主菜單中的各個功能函數。正文〔課程設計的主要內容,包括實驗與觀測方法和結果、儀器設備、計算方法、編程原理、數據處理、設計說明與依據、加工整理和圖表、形成的論點和導出的結論等。正文內容必須實事求是、客觀真切、準確完備、符合邏輯、層次清楚、語言流暢、結構嚴謹,符合各學科、專業的有關要求。〕在本章中,主要是介紹各個功能函數的設計思路和實現方法。3.1初始錄入功能此函數實現的功能主要是,對火車票信息的初始化錄入功能,在初始時,文件中沒有任何數據,可以通過次函數輸入任意個火車票的信息,在輸入時通過一個if條件語句來實現控制循環,當輸入的出發城市是“0〞時使用break語句就跳出循環,即停止輸入火車票信息。在此函數中使用文件處理的方式先建立一個文件輸出流對象,以寫的方式翻開f1.txt文件,使輸入的車票信息都寫入文件。3.2訂票函數此函數實現的功能主要是,輸入目的城市顯示所有相關信息,按1或2可實現新增功能票價從低到高和新增功能票數從多到少顯示出來,可根據自己情況選擇相應車次,此時會顯示剩余票數,輸入個人信息〔ID和姓名〕及訂票數即可完成訂票。3.3查找函數在查詢功能中,可以按多條件查詢,本系統分為兩個查詢條件,即按車次查詢和按目的城市查詢。使用if語句來選擇查詢條件。3.3.1按車次查詢根據提示信息輸入車次號后,然后使用一個for循環語句,從第一個火車號開始檢索,如果該次火車的車次號和輸入的車次號相等,那么輸出該次火車的信息,當無查詢結果時,會輸出一條提示信息“無此車次!〞。3.3.2按目的城市查詢根據提示信息輸入目的城市后,然后使用一個for循環語句,從第一個目的城市開始檢索,如果該目的城市和輸入的目的城市一樣,那么輸出該目的城市的信息,由于目的城市的名字有可能重復出現,所以不能使用break語句跳出循環,應該從第一個目的城市開始檢索直到最后一個目的城市。當無查詢結果時,會輸出一條提示信息“無此目的城市!〞。3.4修改函數此函數實現的功能主要是,修改一次火車票的信息。應用的思想是將火車票的信息重新寫入文件的方法,將原有數據覆蓋。3.5增加函數此函數實現的功能主要是,添加屢次火車的信息,也就是說調用一次這個函數能添加屢次火車的信息,直至按0退出循環。在此函數中也使用文件處理的方式,但使用的是以追加的方式翻開文件,使輸入的火車票信息寫在文件里原有信息的后面。3.6顯示函數此函數實現的功能主要是,顯示所有車次的信息。先是從文件中讀取火車的信息,然后在輸出到顯示窗口中。用一個for循環語句,來把所有火車的信息都輸出2.7退出系統當輸入“0〞時,就能退出系統,這是通過while語句來控制實現的。3.7代碼如下:
#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
{
char
SerialNumber[10];
struct
time
SetOut;
char
DeparturePoint[MAX];
char
TerminalPoint[MAX];
float
LastTime;
int
FixNumber;
int
FixedNumber;
}train[N];
int
RecordNumber;
-
int
FLAG=FALSE;
/**********************************************/
int
ShowMessage(void);
//載入原始數據
void
mainmenu(void);
//主菜單
void
InsertMessage(void);
//錄入班次信息
void
SearchMenu(void);
//查詢路線子菜單
void
SearchByNumber(void);
//按班次號查詢
void
SearchByAddress(void);
//按終點站查詢
void
cancle(void);//刪除數據
void
selection(ticket
*pa,int
n);//排序
void
TicketManagement(void);
//車票售出與退回
void
TicketOrder(void);
//售票
void
TicketDelete(void);
//退票
void
exit(void);
//退出該系統
VoidSaveRecord(ticket
x);
//儲存信息到文件中
/********************************************/
int
main(void)
{
do{
mainmenu();
}while(FLAG==FALSE);
return
0;
}
void
mainmenu(void)
{
system("mode
con:
cols=140
lines=130");
char
functionNumber;
printf("
火車票管理系統\n\n");
printf("============================================================================\n");
printf("1.錄入班次信息\t\n");printf("2.顯示所有車票信息列表\t\n");printf("3.查詢火車票數據\t\n");printf("4.刪除火車票數據記錄\t\n");printf("5.按行車時間排序\t\n");printf("6.售票與退票系統\t\n");printf("退出該系統\t\n");printf("============================================================================\n");printf("請選擇你所需要的功能:");scanf("%c",&functionNumber);switch(functionNumber){case'1':{InsertMessage();printf("\n按任意鍵回主菜單......\n");getchar();getchar();}break;case'2':{RecordNumber=ShowMessage();printf("\n按任意鍵回主菜單......\n");getchar();getchar();}break;case'3':{SearchMenu();printf("\n按任意鍵回主菜單......\n");getchar();getchar();}break;case'4':{cancle();printf("\n按任意鍵回主菜單......\n");getchar();getchar();}break;case'5':{selection(train,RecordNumber);printf("班次\t發車時間\t起點\t終點\t行車時間(小時)\t額定載量\t已定票人數\n");inti;for(i=0;i<RecordNumber;i++){printf("%s\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes);printf("%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber);}printf("\n按任意鍵回主菜單......\n");getchar();getchar();}break;case'6':{TicketManagement();getchar();getchar();}break;case'7':{inti;FLAG=TRUE;for(i=0;i<RecordNumber;i++){SaveRecord(*(train+i));}exit();}break;default:{printf("輸入錯誤,請確保你的輸入為1--7.\n");printf("按任意鍵回主菜單......\n");getchar();-getchar();}}//switchendsFLAG=FALSE;}voidInsertMessage(void){FILE*fp;charfilename[MAXFILENAME];inti;printf("請輸入文件名或者文件路徑名:");scanf("%s",filename);if((fp=fopen(filename,"r"))==NULL){printf("文件%s不可讀,請確認文件%s存在或者文件路徑正確.\n\n",filename,filename);mainmenu();}for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++){fscanf(fp,"%s%d%d",&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes);fscanf(fp,"%s%s%f%d%d",&train[i].DeparturePoint,&train[i].TerminalPoint,&train[i].LastTime,&train[i].FixNumber,&train[i].FixedNumber);}RecordNumber=i;/*******************************輸出更新后的訂票記錄************************************************************/printf("%s\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes);printf("%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber);}}}voidSearchByAddress(void){inti;charAddress[MAX];printf("請輸入終點站的名稱:");scanf("%s",&Address);printf("班次\t發車時間\t起點\t終點\t行車時間(小時)\t額定載量\t已定票人數\n");for(i=0;i<RecordNumber;i++){//比照終點站記錄,找到并輸出if((strcmp(Address,train[i].TerminalPoint))==0){printf("%s\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes);printf("%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber);}-}}voidcancle(void){SearchMenu();inti,j;charm[MAX];printf("請輸入要刪除的班次:");scanf("%s",&m);for(i=0;i<RecordNumber&&(strcmp(m,train[i].SerialNumber))!=0;i++){if(i==RecordNumber){printf("對不起,沒有這趟車\n");}}for(j=i;j<RecordNumber-1;j++){train[j]=train[j+1];}printf("刪除成功\n");}voidselection(ticket*pa,intn){inti,k,index;structtickettemp;for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++)if(pa[i].LastTime<pa[index].LastTime)index=i;if(index!=k){temp=pa[index];pa[index]=pa[k];pa[k]=temp;}}}voidTicketManagement(void){charfunctionNumber;system("modecon:cols=140lines=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();}}}voidTicketOrder(void){SearchMenu();inti,j;chara[MAX];printf("請輸入要訂購的車票的班次:");-scanf("%s",&a);printf("請輸入要訂購的車票的張數:");scanf("%d",&j);for(i=0;i<RecordNumber;i++){if((strcmp(a,train[i].SerialNumber))==0){if(train[i].FixedNumber<train[i].FixNumber){(train[i].FixedNumber)+=j;printf("你的訂票成功,請按時上車,謝謝使用!\n");printf("班次\t發車時間\t起點\t終點\t行車時間(小時)\t額定載量\t已定票人數\n");printf("%s\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes);printf("%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber);}elseprintf("對不起,票已賣完\n");}}}voidTicketDelete(void){SearchMenu();inti,j;charb[MAX];printf("請輸入要退購的車票的班次:");-scanf("%s",&b);printf("請輸入要退購的車票的張數:");scanf("%d",&j);for(i=0;i<RecordNumber;i++){if((strcmp(b,train[i].SerialNumber))==0){if(train[i].FixedNumber>=1){train[i].FixedNumber-=j;printf("退訂車票成功,謝謝使用!\n");printf("班次\t發車時間\t起點\t終點\t行車時間(小時)\t額定載量\t已定票人數\n");printf("%s\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes);printf("%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber);}elseprintf("對不起,今天的這趟車的票尚未賣出,無法完成退票!\n");}}}voidexit(void){printf("\n\n*********************謝謝使用本系統,歡送下次繼續使用***********************\n");exit(0);}-voidSaveRecord(ticketx){FILE*fp;if((fp=fopen("add.txt","a"))==NULL){printf("翻開文件%s失敗\n","add.txt");exit(-1);}fprintf(fp,"\n%s\t%d\t%d\t\t",x.SerialNumber,x.SetOut.hour,x.SetOut.minutes);fprintf(fp,"%s\t%s\t\t%.1f\t%d\t\t%d",x.DeparturePoint,x.TerminalPoint,x.LastTime,x.FixNumber,x.FixedNumber);}測試數據及其結果分析顯示的主菜單界面:主菜單:2.按5顯示全部信息:3.1增加前:按0退出:3.2增加后:進入主菜單按3進入修改按要求填寫修改火車票115信息后:4.按4進入查詢功能:按車次查詢進入主菜單按2進入買票功能6.訂票后票數會減去相應的票數結論〔應當準確、完整、明確精練;也可以在結論或討論中提出建議、設想、尚待解決問題等。〕出錯處理對策對于本程序的幾種可能的問題進行了分析,分別進行了不同的處理。主要的問題可能有:程序設計、調試過程中遇到的問題:①在調試“修改功能〞時,開始時中選擇3,修改的車次不存在時,再選6原先的數據不能再顯示出來,且文本f1中也沒有記錄;故在if(c!=num[d]){cout<<"車次不存在"<<endl;}中參加for(i=0;i<N;i++){outfile<<num[i]<<"";outfile<<origin[i]<<"";outfile<<destination[i]<<"";outfile<<start[i]<<"";
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工人j計件合同協議書
- 中國牙科彎機行業市場占有率及投資前景預測分析報告
- 酒店租賃轉讓合同協議書
- 超市門面買賣合同協議書
- 員工合同協議書全部怎么寫
- 婚紗店合同協議書招聘
- 大學生創新創業商業計劃書5
- 買賣當歸合同協議書范本
- 家政公司轉讓合同協議書
- 2025年土霉素市場調查報告
- 國開2024年秋《機械制圖》形考作業1-4答案
- 2024年國防知識競賽考試題庫500題(含答案)
- 中職教育二年級全學期《新能源汽車運用維修-交流充電接口的檢測》課件
- 初二數學《數據的分析》公開課說課
- 22套20以內加減法口算練習題(直接打印)
- 內蒙古旅游旅行文化介紹
- DB34T-村務公開標準化建設規范
- 2024北京高考政治+歷史+地理試卷(真題+答案)
- 招標代理機構選取技術標投標方案(技術方案)
- 中遠海運 行測
- 快遞代發合同范本
評論
0/150
提交評論