2252309------對飛機(jī)(航空)訂票系統(tǒng)(C語言)進(jìn)行逆向?qū)W習(xí)、分析、思考、設(shè)計(jì)構(gòu)思、改進(jìn)............................
**飛機(jī)訂票系統(tǒng)**
一、資料來源
CSDN博主吳朋奉閱讀量最高的一篇博文--飛機(jī)訂票系統(tǒng)(C語言)----https://blog.csdn.net/weixin_47774641/article/details/111398063?spm=1001.2014.3001.5506
二、運(yùn)行環(huán)境
Windows 11 + DEVC++
三、源代碼(來自博主吳朋奉)
點(diǎn)擊查看代碼
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 9999
struct flight // 航班
{
char fliname[10]; // 航班號
char sp[36]; // 起飛地點(diǎn)
char de[36]; // 目的地
int num1; // 座位數(shù)
int num2; // 已訂出票數(shù)
};
struct book // 預(yù)定
{
char fliname[10]; // 航班號
char na[50]; // 姓名
char id[19]; // 身份證號(至多18位數(shù))
char ph[30]; // 手機(jī)號
int st; // 狀態(tài)(1表示已經(jīng)預(yù)約,0則表示已經(jīng)退訂)
};
FILE * fp1;
FILE * fp2;
int count1 = 0;
int count2 = 0;
struct flight A[M];
struct book B[M];
void init() // 初始化
{
fp1 = fopen("flightfile.txt", "r");
if(fp1 == NULL)
printf("can't open the flightfile! \n");
else
{
// 將文件指針移動(dòng)到文件開頭
fseek(fp1, 0, SEEK_SET);
// 從文件flightfile.txt中格式化讀取數(shù)據(jù)
while(fscanf(fp1, "%s %s %s %d %d", A[count1].fliname, A[count1].sp, A[count1].de, &A[count1].num1, &A[count1].num2) == 5) count1 ++ ;
}
fclose(fp1);
fp2= fopen("bookfile.txt", "r");
if(fp2 == NULL)
printf("can't open the bookfile! \n");
else
{
// 將文件指針移動(dòng)到文件開頭
fseek(fp2, 0, SEEK_SET);
// 從文件bookfile.txt中格式化讀取數(shù)據(jù)
while(fscanf(fp2, "%s %s %s %s %d", B[count2].fliname, B[count2].na, B[count2].id, B[count2].ph, &B[count2].st) == 5) count2 ++ ;
}
fclose(fp2);
}
void menu() // 菜單
{
printf("請輸入你的選擇:\n");
printf("1.輸入航班信息\n");
printf("2.輸出航班信息\n");
printf("3.查找航班信息\n");
printf("4.訂票預(yù)約\n");
printf("5.退訂\n");
printf("6.訂票信息查詢\n");
printf("7.退出系統(tǒng)\n\n");
}
void save1() // 保存1(向flightfile.txt中保存)
{
int i;
fp1 = fopen("flightfile.txt", "w+");
fseek(fp1, 0, SEEK_SET); // 將文件指針移動(dòng)到文件開頭
for(i=0; i<count1; i++) // 將數(shù)據(jù)格式化輸出到文件flightfile.txt中
fprintf(fp1, "%s %s %s %d %d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1, A[i].num2);
fclose(fp1);
}
void save2() // 保存2(向bookfile.txt中保存)
{
int i;
fp2 = fopen("bookfile.txt", "w+");
fseek(fp2, 0, SEEK_SET); // 將文件指針移動(dòng)到文件開頭
for(i=0; i<count2; i++) // 將數(shù)據(jù)格式化輸出到文件bookfile.txt中
fprintf(fp2, "%s %s %s %s %d\n", B[i].fliname, B[i].na, B[i].id, B[i].ph, B[i].st);
fclose(fp2);
}
void input() // 輸入航班信息
{
int i,flag=1;
printf("請輸入航班號:");
scanf("%s", A[count1].fliname);
for(i=0; i<count1; i++) // 判定航班號是否已經(jīng)存在!
if(strcmp(A[count1].fliname, A[i].fliname) == 0)
{
printf("該航班號已存在,請重新選擇輸入航班信息并輸入!\n\n");
flag = 0;
break;
}
if(flag == 1)
{
printf("起飛地點(diǎn):");
scanf("%s", A[count1].sp);
printf("目的地:");
scanf("%s", A[count1].de);
printf("座位數(shù):");
scanf("%d", &A[count1].num1);
printf("已訂出票數(shù):");
scanf("%d", &A[count1].num2);
printf("\n");
count1 ++ ;
save1();
}
}
void show() // 輸出航班信息
{
int i;
printf("航班號\t起飛地點(diǎn)\t目的地\t剩余座位數(shù)\n");
for(i=0; i<count1; i++)
{
printf("%s\t%s \t%s \t%d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1-A[i].num2);
}
printf("\n");
}
void find() // 查找航班信息(按線路查詢)
{
int i, num=0, flag=1;
char sp[36];
char de[36];
printf("請輸入起飛地點(diǎn):");
scanf("%s", sp);
printf("請輸入目的地:");
scanf("%s", de);
printf("航班號\t起飛地點(diǎn)\t目的地\t剩余座位數(shù)\n");
for(i=0; i<count1; i++)
{
if(strcmp(sp, A[i].sp)==0 && strcmp(de, A[i].de)==0) // 按照用戶輸入的起飛地點(diǎn)和目的地到結(jié)構(gòu)體flight數(shù)組A中查找相應(yīng)的航班
{
printf("%s\t%s \t%s \t%d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1-A[i].num2);
num ++ ;
flag = 0;
}
}
if(flag == 1)
{
printf("無 %s %s 0\n", sp, de);
}
printf("本次共計(jì)為您查詢到%d次航班!\n\n", num);
}
void booking() // 訂票預(yù)約
{
int i, flag = 0;
printf("請輸入航班號:");
scanf("%s", B[count2].fliname);
for(i=0; i<count1; i++)
if( strcmp(B[count2].fliname, A[i].fliname)==0 && A[i].num1-A[i].num2>0 )
{
flag = 1;
break;
}
if(flag == 1)
{
int j = -1;
printf("姓名:");
scanf("%s", B[count2].na);
printf("身份證號:");
scanf("%s", B[count2].id);
printf("手機(jī)號:");
scanf("%s", B[count2].ph);
printf("請您確認(rèn)輸入的信息:\n航班號:%s\n姓名:%s\n身份證號:%s\n手機(jī)號:%s\n", B[count2].fliname, B[count2].na, B[count2].id, B[count2].ph);
printf("輸入數(shù)字1確認(rèn)預(yù)約該航班,輸入數(shù)字2重新選擇訂票預(yù)約:");
scanf("%d", &j);
if(j == 1)
{
B[count2].st=1;
count2 ++ ;
A[i].num2 ++ ; // 預(yù)約成功后相應(yīng)的航班的已訂出票數(shù)++
save2();
save1();
printf("您已成功預(yù)約航班號為%s從%s出發(fā)到達(dá)%s的航班!祝您旅途愉快!\n\n", B[count2-1].fliname, A[i].sp,A[i].de);
}
else
printf("請您重新選擇訂票預(yù)約!\n\n");
}
else
printf("該航班不存在或是該航班已無可預(yù)約座位,請重新選擇訂票預(yù)約并輸入存在的航班號!\n\n");
}
void unsubscribe() // 退訂
{
int i, flag=0;
char fliname[10]; // 航班號
char na[50]; // 姓名
char id[19]; // 身份證號
char ph[30]; // 手機(jī)號
int st; // 狀態(tài)(1表示已經(jīng)預(yù)約,0則表示已經(jīng)退訂)
printf("請輸入航班號:");
scanf("%s", fliname);
printf("姓名:");
scanf("%s", na);
printf("身份證號:");
scanf("%s", id);
printf("手機(jī)號:");
scanf("%s", ph);
for(i=0; i<count2; i++)
if( strcmp(fliname, B[i].fliname)==0 && strcmp(na, B[i].na)==0 && strcmp(id, B[i].id)==0 && strcmp(ph, B[i].ph)==0 )
{
flag = B[i].st;
break;
}
if(flag == 1)
{
printf("請輸入數(shù)字0確認(rèn)退訂該航班:");
scanf("%d", &B[i].st);
while(B[i].st != 0)
{
printf("請輸入數(shù)字0確認(rèn)退訂該航班:");
scanf("%d",&B[i].st);
}
save2();
for(i=0; i<count1; i++)
if(strcmp(fliname, A[i].fliname) == 0)
break;
A[i].num2 -- ; // 退訂成功后相應(yīng)的航班的已訂出票數(shù)--
save1();
printf("您已成功退訂航班號為%s從%s出發(fā)到達(dá)%s的航班!\n\n", fliname,A[i].sp, A[i].de);
}
else
printf("該航班未被您預(yù)約,請重新選擇退訂并輸入您已預(yù)約的航班號!\n\n");
}
void information() // 訂票信息查詢
{
int i,j,flag = 1;
char fliname[10]; // 航班號
char na[50]; // 姓名
char id[19]; // 身份證號
char ph[30]; // 手機(jī)號
printf("航班號:");
scanf("%s", fliname);
printf("姓名:");
scanf("%s", na);
printf("身份證號:");
scanf("%s", id);
printf("手機(jī)號:");
scanf("%s", ph);
for(i=0; i<count2; i++)
if(strcmp(fliname, B[i].fliname)==0 && strcmp(na, B[i].na)==0 && strcmp(id, B[i].id)==0 && strcmp(ph, B[i].ph)==0 && B[i].st==1)
{
flag = 0;
for(j=0; j<count1; j++)
if(strcmp(fliname, A[j].fliname)==0)
{
printf("訂票信息查詢成功,信息如下:\n");
printf("航班號\t起飛地點(diǎn)\t目的地\n");
printf("%s\t%s\t %s\n\n", A[j].fliname, A[j].sp, A[j].de);
break;
}
break;
}
if(flag) printf("未查詢到您的航班,請重新輸入信息查詢!\n\n");
}
int main()
{
init(); // 初始化
int choice;
while(1)
{
menu(); // 菜單
scanf("%d", &choice);
switch(choice)
{
case 1: input(); break; // 輸入航班信息
case 2: show(); break; // 輸出航班信息
case 3: find(); break; // 查找航班信息
case 4: booking(); break; // 訂票預(yù)約
case 5: unsubscribe(); break; // 退訂
case 6: information(); break; // 訂票信息查詢
case 7: exit(0); break; // 退出系統(tǒng)
}
}
return 0;
}
四、源代碼運(yùn)行截圖






五、思考與見解
1、結(jié)構(gòu)體設(shè)計(jì)小問題:個(gè)人認(rèn)為飛機(jī)航班信息必不可少的除了博主設(shè)置的這幾項(xiàng)之外,預(yù)定機(jī)票的用戶一定要知道的是飛機(jī)起降時(shí)間和票價(jià);
解決:在航班結(jié)構(gòu)體中加上起飛時(shí)間st、降落時(shí)間et和票價(jià)price,將相應(yīng)的文件輸入、輸出也做相應(yīng)的改變;
2、(增加功能)修改航班信息:航班信息的改動(dòng)是不可避免的,因此決定添加此功能。
3、(增加功能)刪除航班信息:飛機(jī)的飛行是由很多因素決定的,例如,天氣情況對飛行也有著決定性的作用,因此,航空人員會修改航班飛行時(shí)間,或者直接暫停此飛行路線。
4、(增加功能)修改訂票信息:從用戶的角度考慮,預(yù)定機(jī)票(搶票)是在很快速的時(shí)間段內(nèi)完成的,一般搶票成功之后都需要查看一下自己的訂單,用戶因此也無法很確切地知道自己地訂票信息是否是正確的,為了保證用戶自己出行便利,如有差錯(cuò),可使用此功能修改自己地訂票信息。
六、改動(dòng)后的代碼(對原來的代碼大部分都有改動(dòng),所以全部代碼都被附上)
點(diǎn)擊查看代碼
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 9999
struct flight // 航班
{
int fliname; // 航班號
char sp[36]; // 起飛地點(diǎn)
char de[36]; // 目的地
int num1; // 座位數(shù)
int num2; // 已訂出票數(shù)
char st[10]; //起飛時(shí)間
char et[10]; //降落時(shí)間
int price; //票價(jià)
};
struct book // 預(yù)定
{
int fliname; // 航班號
char na[50]; // 姓名
char id[19]; // 身份證號(至多18位數(shù))
char ph[30]; // 手機(jī)號
int st; // 狀態(tài)(1表示已經(jīng)預(yù)約,0則表示已經(jīng)退訂)
};
FILE * fp1;
FILE * fp2;
int count1 = 0;
int count2 = 0;
struct flight A[M];
struct book B[M];
void init() // 初始化
{
fp1 = fopen("flightfile.txt", "r");
if(fp1 == NULL)
printf("can't open the flightfile! \n");
else
{
// 將文件指針移動(dòng)到文件開頭
fseek(fp1, 0, SEEK_SET);
// 從文件flightfile.txt中格式化讀取數(shù)據(jù)
while(fscanf(fp1, "%d %s %s %d %d %s %s %d", A[count1].fliname, A[count1].sp, A[count1].de, &A[count1].num1, &A[count1].num2, A[count1].st, A[count1].et, &A[count1].price) == 8) count1 ++ ;
}
fclose(fp1);
fp2= fopen("bookfile.txt", "r");
if(fp2 == NULL)
printf("can't open the bookfile! \n");
else
{
// 將文件指針移動(dòng)到文件開頭
fseek(fp2, 0, SEEK_SET);
// 從文件bookfile.txt中格式化讀取數(shù)據(jù)
while(fscanf(fp2, "%d %s %s %s %d", B[count2].fliname, B[count2].na, B[count2].id, B[count2].ph, &B[count2].st) == 5) count2 ++ ;
}
fclose(fp2);
}
void menu() // 菜單
{
printf("請輸入你的選擇:\n");
printf("1.輸入航班信息\n");
printf("2.輸出航班信息\n");
printf("3.查找航班信息\n");
printf("4.訂票預(yù)約\n");
printf("5.退訂\n");
printf("6.訂票信息查詢\n");
printf("7.刪除飛機(jī)信息\n");
printf("8.退出\n");
}
void save1() // 保存1(向flightfile.txt中保存)
{
int i;
fp1 = fopen("flightfile.txt", "w+");
fseek(fp1, 0, SEEK_SET); // 將文件指針移動(dòng)到文件開頭
for(i=0; i<count1; i++) // 將數(shù)據(jù)格式化輸出到文件flightfile.txt中
fprintf(fp1, "%d %s %s %d %d %s %s %d\n", &A[i].fliname, A[i].sp, A[i].de, A[i].num1, A[i].num2, &A[i].st, &A[i].et, &A[i].price);
fclose(fp1);
}
void save2() // 保存2(向bookfile.txt中保存)
{
int i;
fp2 = fopen("bookfile.txt", "w+");
fseek(fp2, 0, SEEK_SET); // 將文件指針移動(dòng)到文件開頭
for(i=0; i<count2; i++) // 將數(shù)據(jù)格式化輸出到文件bookfile.txt中
fprintf(fp2, "%d %s %s %s %d\n", B[i].fliname, B[i].na, B[i].id, B[i].ph, B[i].st);
fclose(fp2);
}
void input() // 輸入航班信息
{
int i,flag=1;
printf("請輸入航班號:");
scanf("%d", A[count1].fliname);
for(i=0; i<count1; i++) // 判定航班號是否已經(jīng)存在!
if(A[count1].fliname==A[i].fliname)
{
printf("該航班號已存在,請重新選擇輸入航班信息并輸入!\n\n");
flag = 0;
break;
}
if(flag == 1)
{
printf("起飛地點(diǎn):");
scanf("%s", A[count1].sp);
printf("目的地:");
scanf("%s", A[count1].de);
printf("座位數(shù):");
scanf("%d", &A[count1].num1);
printf("已訂出票數(shù):");
scanf("%d", &A[count1].num2);
printf("起飛時(shí)間:");
scanf("%s", A[count1].st);
printf("落地時(shí)間:");
scanf("%s", A[count1].et);
printf("票價(jià):");
scanf("%d", &A[count1].price);
printf("\n");
count1 ++ ;
save1();
}
}
void show() // 輸出航班信息
{
int i;
for(i=0; i<count1; i++)
{
printf("航班號:%s 起飛時(shí)間:%s 目的地:%s 剩余座位數(shù):%d 起飛時(shí)間:%s 降落時(shí)間:%s 票價(jià):%d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1-A[i].num2,A[i].st,A[i].et,A[i].price);
}
printf("\n");
}
void find() // 查找航班信息(按線路查詢)
{
int i, num=0, flag=1;
char sp[36];
char de[36];
printf("請輸入起飛地點(diǎn):");
scanf("%s", sp);
printf("請輸入目的地:");
scanf("%s", de);
//printf("航班號\t起飛地點(diǎn)\t目的地\t剩余座位數(shù)\t起飛時(shí)間\t落地時(shí)間\t票價(jià)\n");
for(i=0; i<count1; i++)
{
if(strcmp(sp, A[i].sp)==0 && strcmp(de, A[i].de)==0) // 按照用戶輸入的起飛地點(diǎn)和目的地到結(jié)構(gòu)體flight數(shù)組A中查找相應(yīng)的航班
{
printf("航班號:%s 起飛地點(diǎn):%s 目的地:%s 剩余座位數(shù):%d 起飛時(shí)間:%s 落地時(shí)間:%s 票價(jià):%d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1-A[i].num2,A[i].st,A[i].et,A[i].price);
num ++ ;
flag = 0;
}
}
if(flag == 1)
{
printf("無 %s %s 0\n", sp, de);
}
printf("本次共計(jì)為您查詢到%d次航班!\n\n", num);
}
void booking() // 訂票預(yù)約
{
int i, flag = 0;
printf("請輸入航班號:");
scanf("%s", B[count2].fliname);
for(i=0; i<count1; i++)
if( (B[count2].fliname==A[i].fliname) && A[i].num1-A[i].num2>0 )
{
flag = 1;
break;
}
if(flag == 1)
{
int j = -1;
printf("姓名:");
scanf("%s", B[count2].na);
printf("身份證號:");
scanf("%s", B[count2].id);
printf("手機(jī)號:");
scanf("%s", B[count2].ph);
printf("請您確認(rèn)輸入的信息:\n航班號:%s\n姓名:%s\n身份證號:%s\n手機(jī)號:%s\n", B[count2].fliname, B[count2].na, B[count2].id, B[count2].ph);
printf("輸入數(shù)字1確認(rèn)預(yù)約該航班,輸入數(shù)字2重新選擇訂票預(yù)約:");
scanf("%d", &j);
if(j == 1)
{
B[count2].st=1;
count2 ++ ;
A[i].num2 ++ ; // 預(yù)約成功后相應(yīng)的航班的已訂出票數(shù)++
save2();
save1();
printf("您已成功預(yù)約航班號為%s從%s出發(fā)到達(dá)%s的航班!祝您旅途愉快!\n\n", B[count2-1].fliname, A[i].sp,A[i].de);
}
else
printf("請您重新選擇訂票預(yù)約!\n\n");
}
else
printf("該航班不存在或是該航班已無可預(yù)約座位,請重新選擇訂票預(yù)約并輸入存在的航班號!\n\n");
}
void unsubscribe() // 退訂
{
int i, flag=0;
int fliname; // 航班號
char na[50]; // 姓名
char id[19]; // 身份證號
char ph[30]; // 手機(jī)號
int st; // 狀態(tài)(1表示已經(jīng)預(yù)約,0則表示已經(jīng)退訂)
printf("請輸入航班號:");
scanf("%d", fliname);
printf("姓名:");
scanf("%s", na);
printf("身份證號:");
scanf("%s", id);
printf("手機(jī)號:");
scanf("%s", ph);
for(i=0; i<count2; i++)
{
if (fliname==B[i].fliname)
{
if(strcmp(na, B[i].na)==0 && strcmp(id, B[i].id)==0 && strcmp(ph, B[i].ph)==0 )
{
flag = B[i].st;
break;
}
}
}
if(flag == 1)
{
printf("請輸入數(shù)字0確認(rèn)退訂該航班:");
scanf("%d", &B[i].st);
while(B[i].st != 0)
{
printf("請輸入數(shù)字0確認(rèn)退訂該航班:");
scanf("%d",&B[i].st);
}
save2();
for(i=0; i<count1; i++)
if(fliname==A[i].fliname)
break;
A[i].num2 -- ; // 退訂成功后相應(yīng)的航班的已訂出票數(shù)--
save1();
printf("您已成功退訂航班號為%d從%s出發(fā)到達(dá)%s的航班!\n\n", fliname,A[i].sp, A[i].de);
}
else
printf("該航班未被您預(yù)約,請重新選擇退訂并輸入您已預(yù)約的航班號!\n\n");
}
void information() // 訂票信息查詢
{
int i,j,flag = 1;
int fliname; // 航班號
char na[50]; // 姓名
char id[19]; // 身份證號
char ph[30]; // 手機(jī)號
printf("航班號:");
scanf("%d", fliname);
printf("姓名:");
scanf("%s", na);
printf("身份證號:");
scanf("%s", id);
printf("手機(jī)號:");
scanf("%s", ph);
for(i=0; i<count2; i++)
{
if(fliname==B[i].fliname)
{
if(strcmp(na, B[i].na)==0 && strcmp(id, B[i].id)==0 && strcmp(ph, B[i].ph)==0 )
{
if(B[i].st==1)
{
flag = 0;
for(j=0; j<count1; j++)
if(fliname==A[j].fliname)
{
printf("訂票信息查詢成功,信息如下:\n");
printf("航班號\t起飛地點(diǎn)\t目的地\n");
printf("%d\t%s\t %s\n\n", A[j].fliname, A[j].sp, A[j].de);
break;
}
break;
}
}
}
}
if(flag) printf("未查詢到您的航班,請重新輸入信息查詢!\n\n");
}
void deleteflight() //刪除模塊
{
int fliname; // 航班號
char sp[36]; // 起飛地點(diǎn)
char de[36]; // 目的地
int num1; // 座位數(shù)
//int num2; // 已訂出票數(shù)
char st[10]; //起飛時(shí)間
//char et[10]; //降落時(shí)間
int price; //票價(jià)
char sp1[20];
char de1[20];
char sysm[]="jim007";
char youm[20];
int i,w,p,q,k=0;
printf("請輸入密碼: ");
scanf("%s",youm) ;
if(strcmp(sysm,youm)!=0)
{
printf("輸入密碼錯(cuò)誤!請確認(rèn)您是否是票務(wù)人員,如不是,請按任意鍵返回菜單重新選擇" );
getchar();
//getchar();
//home();
}
else
printf("1.按航班號刪除 \n");
printf("2.按航線刪除 \n");
printf("請?jiān)?-2中選擇刪除方式: ");
scanf("%d",&q);
switch(q)
{
case 1:
printf("請輸入航班號: ");
scanf("%d",&p);
break;
case 2:
printf("請輸入起飛地點(diǎn): ");
scanf("%s",&sp);
printf("請輸入降落地點(diǎn): ");
scanf("%s",&de);
break;
}
printf("\n\n航班號\t起飛地點(diǎn)\t降落地點(diǎn)\t起飛時(shí)間\t票價(jià)\t機(jī)票數(shù) \n\n");
for(i=0;i<=2;i++)
{
if(q==1&&A[i].fliname==p)
{
k++;
printf("\n\n%d\t%s\t%s\t%s\t%lf\t%d\n",A[i].fliname,A[i].sp,A[i].de,A[i].st,A[i].price,A[i].num1);
}
if(q==2&&strcmp(A[i].sp,sp1)==0&&strcmp(A[i].de,de1)==0)
{
k++;
printf("\n\n%d\t%s\t%s\t%s\t%lf\t%d\n",A[i].fliname,A[i].sp,A[i].de,A[i].st,A[i].price,A[i].num1);
}
}
if(k=0)
printf("沒有找到此航班,無法刪除!");
else
printf("確定刪除請按 1 否則請按 0:\n\n");
scanf("%d",&w);
if(w==1)
for(i=0;i<=k;i++)
{
A[i].fliname=0;
strcpy(A[i].sp,"0");
strcpy(A[i].de,"0");
strcpy(A[i].st,"0");
A[i].price=0;
A[i].num1=0;
}
getchar();
//getchar();
//home();
}
int main()
{
init(); // 初始化
int choice;
while(1)
{
menu(); // 菜單
scanf("%d", &choice);
switch(choice)
{
case 1: input(); break; // 輸入航班信息
case 2: show(); break; // 輸出航班信息
case 3: find(); break; // 查找航班信息
case 4: booking(); break; // 訂票預(yù)約
case 5: unsubscribe(); break; // 退訂
case 6: information(); break; // 訂票信息查詢
case 7: deleteflight();break; // 退出系統(tǒng)
case 8: exit(0); break;
}
return 0;
}
}
七、測試截圖


八、總結(jié)反思
1、首先是此次逆向軟件工程學(xué)習(xí)的不足之處,沒有做出來修改飛機(jī)訂票系統(tǒng)的修改航空信息這一項(xiàng),原因是:原作者的所有代碼里沒有使用指針,這使得修改這一操作編寫起來有難度,沒有做出來,就先編寫出了刪除飛機(jī)信息的功能,這功能在一定程度上彌補(bǔ)了修改信息的功能,如需要修改航班信息,可先直接刪除,再重新錄入;
2、逆向軟件工程的優(yōu)缺點(diǎn):優(yōu)點(diǎn)是不用從0開始完成系統(tǒng)的編寫,看到初步形成的代碼,利于自己著力于思考提升的空間;缺點(diǎn)是每個(gè)代碼編寫者的思路和標(biāo)識方式都是不同的,還是需要花費(fèi)時(shí)間去整理出整個(gè)源代碼的思路;
3、就我個(gè)人而言,目前來說,最難的點(diǎn)是編寫代碼這部分,需要多加練習(xí);就這次的自己整改,雖然添加的新功能不多,但是由于添加了新的結(jié)構(gòu)體元素進(jìn)去,需要改動(dòng)的地方較多,加上后續(xù)添加的刪除功能,調(diào)試花費(fèi)了最長的時(shí)間,總結(jié)來說,我的代碼編寫能力需得努力提高。
posted on 2024-03-06 23:14 MMMmmmmmm·Tt 閱讀(66) 評論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號