飞机航班订票系统C语言程序设计报告

《程序设计》

课程设计说明书

课程名称 《程序设计》

设计题目 飞机航班订票系统 专业班级 计算机应用技术201221

学生姓名

指导教师

起止日期2013年6月8日至2013年6月14日

福建林业职业技术学院自动化工程

目录

1 设计内容、任务以及要求 ................................................................. 1

1.1设计题目的内容 ................................................ 1

1.2要求 .......................................................... 1 2总体设计思路 ................................................................................. 2

2.1系统基本功能 .................................................. 2

2.2具体设计思想 .................................................. 2

2.3系统的总体流程图 ............................................... 3 3 .功能模块的详细设计 . ..................................................................... 5

3.1结构的定义 .......................................................................................................... 5

3.2各个函数的设计具体设计思想和流程图 ...................................................................... 5

4.功能模块的调试及测试 . ................................................................ 27

4.1添加函数的测试 ............................................... 27

4.2判断函数的测试 ............................................................................................... 28

4.3 删除函数的测试 ............................................... 28

4.4统计函数的测试 ............................................................................................... 28

4.5 密码确认函数的测试 ...................................................................................... 14

4.6密码的修改函数 ............................................... 31

4.7 主函函数的测试 ............................................... 32 5 总结 . .......................................................................................... 34 6致谢 ........................................................................................... 35 参考文献 . ....................................................................................... 36 原程序代码: ................................................................................. 21

1 设计内容、任务以及要求

1.1设计题目的内容、任务

主要利用c 语言的文件操作能力设计开发一个小型的飞机订票系统,至少具有如下功能:信息读出,可以查看全部航班信息和查询一个航班信息。可以进行添加(再添加过程中有重复显示提示信息)、删除、订票等基本操作。操作界面要能使使用者看懂,以便使使用者正确使用。

具体内容如下:

程序属于非数值计算型算法设计,学生需要设计出飞机订票系统所需要的基本功能,并设计简单的界面。

(1)通过提示菜单选择可以进行的操作。

(2)将航班的信息存入文件中,并命名为FlightInfo.txt 。

(3)将订票情况信息存入文件中,并命名为SelectInfo.txt 。

(4)在本系统中可以进行管理系统包含的基本操作,其中包括

a) 查看所有航班的信息

b) 输入一条航班的航班编号,从当前航班中进行查找,如果找到则显

示该航班的相关信息,如果没有找到则给出提示信息

c) 添加一条航班的基本信息,通过输入航班编号,首先查找是否存在

该航班编号的航班,如果存在则提示重新输入,否则将该航班按照顺序插入到相应位置

d) 删除一条航班的基本信息,通过输入航班编号,首先查找是否存在

该航班编号的航班,如果存在则将该航班删除,否则给出提示信息,提示该航班不存在

e) 选择一条航班,需要给出学号和航班编号,如果航班编号不存在则

重新输入,直到输入正确为止,并将学号和相应的航班编号存入SelectInfo.txt 文件中

(5)航班基本信息包括航班编号、起点、终点、飞行时间和订票额度这些简单信息。

(6)航班信息文件中每一行存放一条航班的信息。

1.2要求

要求:明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识; 提高学生用高级语言进行程序设计的能力,重点提高用C 语言进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤; 提高撰写技术文档的能力。

2总体设计思路

2.1系统基本功能

外部操作:根据要求系统要有查看全部航班信息,查询一个航班,添加航班(再添加过程中如有重复显示提示信息),删除航班(在删除过程中如果没有查找到要删除的显示提示信息),选择航班订票。

内部操作:将航班的信息存入文件中,并命名为FlightInfo.txt 。将订票情况信息存入文件中,并命名为SelectInfo.txt 。相应的航班编号存入SelectInfo.txt 文件中

为了接近实战模拟飞机航班订票系统,增加了一些功能。增加功能有把系统分为了两个部分,一个是官方操作,一个是客户端。官方操作有密码认定和密码修改,密码的以文件形式存储在硬盘里,以只读认定客户,以只写修改密码。官方还有查看订票情况,由函数统计出来的。客户端增加了机票显示(显示包括统计出来的座位号,以及航班号和学号)。

2.2具体设计思想

(1)以结构化各个功能模块,函数间的调用精简整个函数。

(2)以全局结构来随时定义结构数组以及机构。

(3)以写一个信息存一个的思想,实现多个添加功能。

(4)以读一个打印一个的思想,实现显示全部信息。

(5)以先判断(以判断函数给定是否有此航班)再打印的思想,来实现查找是否有这个航班。

(6)以先判断(以判断函数给定是否有此航班)再添加的思想,(添加中引用了删除函数以供用户选择),实现添几功能。

(7)以先判断(以判断函数给定是否有此航班)再删除的思想,删除航班

信息。

(8)以循环统计(以统计函数统计给定航班号)订票文件的的情况返回值的思想,以显示当前订票情况。

(9)以统计(以统计函数统计给定航班号)来返回值的思想,以显示座位号。

(10)密码的确认以及修改,是利用文件存储的永久性来实现的,以只读来确认密码,以只写来修改密码的思想,来实现的官方操作 。

2.3系统的总体流程图

2.2系统的总体流程图(2)

3 .功能模块的详细设计

3.1结构的定义

为了方便使用结构此系统结构均为全局类型定义,其定义有如下两个: typedef struct flight //航班信息机构

{

char fnumber[5]; char start[20]; char destination[20]; int time; //时间 以小时为单位 int money;

} Fl;

typedef struct consumer //顶票信息机构

{

char no[5]; //航班号 char xuehao[10]; //学号 int n; //座位号

} select;

3.2各个函数的设计具体设计思想和流程图

此系统一共十四个函数如下所示:

(1)int judge_have_or_no_a_flight(char[]);//判断是否有这个航班

(2)void delete_a_filght(char ch[]); //删除函数

(3)void add_many_hangban() ; //新建(添加)航班信息

(4)void view_all(); //察看所有的航班信息

(5)void scan_a_filght( char ch[]); //查看一个航班函数

(6)int mima_hanshu(); //密码确认函数

(7)void xiugai_hanshu(); //密码修改函数

(8)void tongji_han_shu() ; //飞机航班统计函数

(9)int zuowei_hao_sure(char hangban[]); //座位确定函数

(10) void select_a_filght(); //订票函数

(11)void printf_han_shu(); //官方界面美化函数

(12)void printf_han_shu_comsouer(); //顾客端界面美化函数

(13)void time_han_shU() ; //时间函数

3.2.1判断是否有这个航班函数

根据要求在添加的时候要先判断是否已有此航班信息,给出相应的提示。所以以判断函数的返回值来提示是否要对原有的航班信息进行操作,因此判断函数的类型为整型。其功能具体设计如下:

① 具体流程如下所示

②代码说明 图3.1

以下代码说明请对照程序附件。 ch[]为字符型字符串,添加函数在调用时引入的实参的值付给它,然后引入函数中应用。

FILE *fp :文件指针指向航班信息(FlightInfo.txt )存储文本的缓存地址。

If 语句是对文本是否打开做出判断。文件以只读方式打开。 Fl dp;是定义的航班信此结构。

While 语句是把文件里的数据读到内存里,然后和ch 字符串比较,如果相等m==0,不相等它就不是一个定值了。

strcmp(dp.fnumber,ch);判断是否读出来的数据和已知数据是否相等。 If 语句是用来确定返回值,如果有与已知数据n 就是1否则为0; fclose(fp);关闭文件指针。 返回n

return n;

3.2.2 删除函数

删除一个航班的基本思想是,把文件中的数据全部读出来,然后再放回去,与已知数据进行比较,如果相等说明就是删除的数据,就不放回文件中。

① 具体流程如下所示

图3.2

②代码说明

Ch 为引用的字符串。

Fl all[100];定义的结构数组,来控制变量。把文件中的数据全部读出来,放到结构数组里以便操作。 if((fp=fopen("FlightInfo.txt","r"))==NULL)判断文件是否打开。以只读的方式。

while 语句把文件里的数据读到结构数组里,以i 的自增来确保数据的完整。 len=i;作为下面while(i

fp=fopen("FlightInfo.txt","w");语句以只写的方式打开。将文件里的书局全部覆盖掉。

If 语句中的:strcmp(all[i].fnumber,ch)!=0判断但当前字符串是否和已知字符串是否相等,并以此来确定是否打印数据到文件中。如果哦相等说明与已知字符串相等。就不打印到文件中以此来删除航班信息。 fclose(fp);对打印到文件中数据保证存储。

3.2.3新建(添加)航班信息函数

以追加方式打开文件,先输入要输入的个数,再在for 循环中输入航班号,在for 循环中先判断是否已有次航班,如果已有做出相应的提示。没有则接续输入。

① 流程图

图3.3

②代码说明

printf("\n\n\n\t\t请输入要添加的航班个数:");显示提示信息,以增加程序的美观。

scanf("%d",&n)语句是要输入的航班个数。

if((fp=fopen("FlightInfo.txt","a+"))==NULL){printf("file can not open!");exit(0);} 语句以追加(既可以读也可以写,读重文件头开始读,写重文件末尾写进)的方式打开文件。

m=judge_have_or_no_a_flight(dp.fnumber); //判断是否有这个航班:把实参dp.fnumber 引入判断函数,返回一个值。

If 语句:根据m 的值来提示是否当前添加的航班号是否已有,并提示做相应的操作. 有放弃删除重新输入,有删除后重新输入。

if(h==1):语句调用相应的删除函数,把dp.fnumber 作为实参引用到删除函数。然后用函数递归应用在执行循环操作。

if(h==2):语句直应用函数递归,应用添加函数执行添加循环。

在for 循环中没有应用结构数组,直接输入一个,就把这个放到文件中。 fprintf :语句是把内存中的数据打印到文件中。

view_all();是查看全部航班函数,为了直接显示是否添加成功,显示文件中的全部信息。

3.2.4察看所有的航班信息

以只读方式打开,以文件结束为标志结束,从文件中读一个就打印一个的思想。

① 流程图

图3.4 ② 代码说明

printf("航班号 起飞地点 终点 飞行时间(小时) 票价(元)\n\n");:此语句是对航班总体的说明

while :语句为控制循环,然后就读一个打印一个,直到文件结束。 printf("%5s %10s %10s %10d %10d\n\n",dp.fnumber,dp.start,dp.destination,dp.time,dp.money) 打印内容间的距离控制。

fclose(fp);关闭文件指针。

3.2.5查看一个航班函数

和查看全部航班信息思想一样,只是打印出来的时候只准与查找的航班信息打印。用一个if 语句条件限制为m =strcmp(dp.fnumber,ch);m的值为0才打印出来。

① 流程图

② 代码说明

ch 导入字符要找的航班号。 while(!feof(fp))控制循环。

m =strcmp(dp.fnumber,ch); break; 如果打印了就跳出循环。

if(m==0) 控制是够打印。

根据if (n==0)判断是否有与给定数据相等的,如果没有会显示提示信息

3.2.6 密码确认函数

先给定初始密码,可以利用密码修改函数进行修改,密码认定是把文件中的字符读出来和输入的进行对比,是否相等来实现的。 ① 程序流程图

② 代码说明

char mima[20];密码最多有20个字符。

while (!feof(fp)){ fscanf(fp,"%s",yuanmima);

}从文件中不把密码拿出来。

if(strcmp(mima,yuanmima)==0)与输入字符进行比较。等则输入密码正确,不等则输入密码不正确。

返回值说明是否输入正确,正确返回1,不对返回0. 。

3.2.7密码修改函数

设计思想先用密码确认函数确认是否密码正确,正确才让进入下一个环节,修改是文件以只写的方式打开,然后保存。 ①函数流程图

n=mima_hanshu();/引入密码确认函数。 If 语句判断是否密码正确。

正确系统让进行密码修改,不正确不让修改。

fclose(fp);关闭文件。

3.2.8飞机航班订票统计函数

以只读方式打开文件,读出每个航班号的订票情况,然后打印出来。 ① 程序流程

图3.8

②代码说明

printf("\t%s\t\t%d\n\n",dp[i].fnumber,n);

if((rp=fopen("FlightInfo.txt","r"))==NULL)以只读方式打开文件 打印出来,航班信息。

while(!feof(rp)):控制循环,把文件中的数据读到数组中。 i++;为后面的for 循环做控制。

在for 循环中没统计一次,指针就指到文件末尾,所以每次统计都要重新打开文件。

统计到一个则座位号加一,最终结果多以就是当请客户的座位号。 fclose(fp);关闭文件指针。

3.2.9 座位确定函数

用的是统计的思想,只要文件中有何已知数据相等的票,那么统计变量自增一。然后打印出来。

① 程序流程

图3.9

② 代码说明

“a+”可写可读。

while(!feof(fp)控制一次一次的读出来, if(strcmp(hangban,piao.no)==0)

和已知数据进行比较,符合自增。不符合进行下一次。 fclose(fp);关闭文件 return n;返回座位号。

3.2.10订票函数

以先判断再预定,成功输入后把飞机票存入文件中。

②代码说明

view_all();为了订票方便引入了查看全部函数。 while (m==1);要求直道输入正确为止 n=judge_have_or_no_a_flight(stu.no) ;//判断函数; 判断是否有此航班 if(stu.n>100)控制飞机票的数量不能超过限制人数。 m=0;跳出循环。 else { printf("\t无此次航班号,请重新输入!\n\n\n"); }};提示重新输入。

fprintf(fp,"\n%10s\t%10s\t%d",stu.no,stu.xuehao,stu.n);fclose(fp);

保存已预定的飞机票。

printf("\t%s\t\t%s\t\t%d\n\n",stu.no,stu.xuehao,stu.n); 打印飞机票。

3.2.10 官方界面美化函数 顾客端界面美化函数 时间函数

为了主函数的简洁,所以引入两个显示提示信息函数。而时间函数是为了模拟真实系统而引用的系统函数,以显示当前时间。然后保存到文件中,以便查询操作时间。

4.功能模块的调试及测试

4.1添加函数的测试

图 4.1 添加函数的测试

4.1.1 文本文档中的信息

图4.2 添加后文本中的信息

由文本中的信息的出,函数代码有误,原代码为:fprintf(fp,"\n%5s%10s%10s%10d%10d\n",

dp.fnumber,dp.start,dp.destination,&dp.time,&dp.money); 应该改为:fprintf(fp,"\n%5s\t%10s\t%10s\t%10d\t%10d",dp.fnumber,dp.start,dp.destination,dp.time,dp.money); 原因是写道文件中的事整型数的地址。所以在文本中显示的是乱码。调试成功。

4.2判断函数的测试(判断输入的航班号是否已有,给出相应的提示)

图4.3判断函数的测试

图4.4判断函数的测试

4.3 删除函数的测试(引入删除航班,先通过判断函数,再进行删除)

图4.5删除函数的测试

输入1后查看全部图示为

图4.6删除函数的测试

成功的删除航班。(以拿出来,再放回去的操作,设置是否打印,以此来实现删除)

4.4统计函数的测试(统计处已订航班的票数)

图4.7统计函数的测试

原代码为if((fp=fopen("SelectInfo.txt","r"))==NULL){ printf("file can not open2 !\n"); exit(0); }

for(i=0;i

fscanf(fp,"%s%s%d",piao.no,piao.xuehao,&piao.n);if(strcmp(dp[i].fnumber,piao.no)==0) n=n+1; }

printf("\t%s\t\t%d\n\n",dp[i].fnumber,n); n=0;

fclose(fp); }

说明文件指针已经一到文件末尾,可以改变指针位置,或者是重复打开文件指针。所以改为:for(i=0;i

if((fp=fopen("SelectInfo.txt","r"))==NULL){ printf("file can not open2 !\n"); exit(0); }

while(!feof(fp)){

fscanf(fp,"%s%s%d",piao.no,piao.xuehao,&piao.n);

if(strcmp(dp[i].fnumber,piao.no)==0) n=n+1; }

printf("\t%s\t\t%d\n\n",dp[i].fnumber,n); n=0;

fclose(fp); } }

图4.8统计函数的测试

说明修改成功,证明文件每读一次文件指针就会指到文件末尾。

4.5 密码确认函数的测试

密码函数利用文本文档的长期存储,以只读的方式打开文件,和输入字符串进行比较。

以是否相等来判断密码的对错。以实现密码确认函数。

图4.9密码确认函数的测试

根据设想密码确认函数成功实现。

图4.10密码确认函数的测试

4.6密码的修改函数

模拟密码操作,先用密码判断函数判断是否是正确的密码,然后只写的方式把新密码打印进去在保存的思想,来实现密码修改。

图4.11密码的修改函数的测试

根据设计思想,符合事实。成功地 完成了密码修改函数的实现。

4.7 主函函数的测试

图4.12 主函函数的测试

根据if 语句的判断功能,系统可供官方操作,和客户端。客户端直接进入,官方操作,为模拟真实系统设计了密码认定,才允许进入。时间函数就在这时显示和存储。进入官方操作后可以有如图4.13所示的操作,进入客户端有如图4.14的操作。

图4.13主函函数的测试

图4.14主函函数的测试

进入一个操作后就是自身的循环操作,根据wehile(n==1) 来反复的界面刷

新和循环操作。

在while 的语句中改变n 的值来控制循环的结束。

5 总结

经过十天的程序设计,基本掌握程序设计的基本方法和步骤。

在这十天中悟出:程序设要求有一定的基础是必须的,但是更多的是无论你

设计什么程序,在设计前一定要有自己的设计理念、设计思想,也可以说是中心思想。否则在做程序的时候,请教一个高手,就有一种不同的方法。结果最终的程序不伦不类,设计完后会发现会有不同的漏洞。在设计过程中要大胆的发挥自己的想象力,要敢于不断的创新,要敢于尝试,我认为这也是一种进步的好方法。

另外我还有一个小小的建议,老师们给初学这门课程的学生尽量不这门课的

神奇的地方讲讲,我觉得会对那些对这门课感兴趣的同学会更感兴趣。记得上次老师第一次演示文件时,有点相见恨晚,象被注射了兴奋剂一样。

6致谢

在这十天的时间里,我学到了很多知识,这些少不了老师辛苦指导。同

学之间的帮助,相互鼓励,以及相互探讨,给了自己很大的信心,和跨域式的进步。所以首先要感谢各位老师和我一起奋斗的同学们。

还要感谢我的父母,是他们给了我机会来学习。

还要感谢所有为教育事业作出奉献的人。

参考文献

[1] 杨路明 . C语言程序设计基础. 北京邮电大学出版社.2005.

[2] 何钦铭,颜晖. C语言程序设计基础. 高等教育出版社.2008.

[3]

[4] KOCHANSG . C

[5]

社,2004.

张引. C 程序设计基础课程设计. 杭州. 浙江大学出版社,2007. 语言编程. 电子工业出版社. 2006. 高福成,c 语言程序设局,清华大学出版社、北方交通大学出版

原程序代码:

#include

#include

#include

#include

int judge_have_or_no_a_flight(char[]);//判断是否有这个航班

void select_a_filght(); //订票函数

void xiugai_hanshu(); //密码修改函数

void view_all(); //察看所有的航班信息

void scan_a_filght( char ch[]); //查看一个航班函数

void add_many_hangban() ; //新建航班信息

void delete_a_filght(char ch[]); //删除函数

void printf_han_shu(); //官方界面美化函数

void printf_han_shu_comsouer(); //顾客端界面美化函数

int mima_hanshu(); //密码确认函数

int zuowei_hao_sure(char hangban[]); //座位确定函数

void time_han_shU() ; //时间函数

void tongji_han_shu() ; //飞机航班统计函数

typedef struct flight //航班信息机构

{

char fnumber[5];

char start[20];

char destination[20];

int time; //时间 以小时为单位

int money;

} Fl;

typedef struct consumer //顶票信息机构

{

char no[5]; //航班号

char xuehao[10]; //学号

int n; //座位号

} select;

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&主函数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void main()//主函数

{

int choice,n=1,m,t,w;

char ch[5];

time_han_shU();

printf("\n\t\t\t欢迎进入飞机订票系统!\n\n");

printf("\t\t& 官方操作。 \n\n");

printf("\t\t& 客户端 。 \n\n");

printf("\t\t& 退出系统。 \n\n");

printf("\t\t请输入你的选择:");

scanf("%d",&t);

if(t==1){

chongxin:

w=mima_hanshu();//密码确认函数

while(n==1){

if(w==1){

printf_han_shu();//官方界面美化函数

printf("\t请输入你选择的功能:");

scanf("%d",&choice);

printf("\n\n");

switch(choice){

case 1: system("cls");

view_all(); break; // 察看所有的航班信息

case 2:system("cls");

view_all();//查看全部

printf("\n\n\t\t请输入你要查找的航班号:");

scanf("%s",&ch);

scan_a_filght ( ch); //察看一个航班信息 break;

case 3: system("cls");

add_many_hangban(); break; //新建航班信息(添加函数)

case 4:system("cls");

printf("\n\n\t\t请输入你要删除的航班号:"); scanf("%s",&ch);

m=judge_have_or_no_a_flight( ch) ;//判断是否有这个航班

if(m==1) {

delete_a_filght( ch); //删除函数

printf("\t\t成功删除!\n\n");

}

if(m!=1) printf("无此次航班!\n");

break;

case 5: system("cls");

select_a_filght(); break; //订票函数 case 6: system("cls");

xiugai_hanshu(); break; //密码修改函数 case 7: system("cls");

tongji_han_shu(); break;//航班统计函数

case 0: n=0;break;

default:printf("请重新输入没有你输入的选择\n\n");break;

}

}

else {

printf("\t\t密码错误!\n");

printf("\t\t请重新输入密码!\n\n");

goto chongxin;

}

}

}

else if(t==2)

{

while(n==1){

printf_han_shu_comsouer();//顾客端界面美化函数

printf("\t请输入你选择的功能:");

scanf("%d",&choice);

printf("\n\n");

switch(choice){

case 1: system("cls");

view_all(); break; // 察看所有的航班信息

case 2:system("cls");

view_all();//显示全部

printf("\t请输入你要查找的航班号:");

scanf("%s",&ch);

scan_a_filght ( ch); //察看一个航班信息 break;

case 3:system("cls");

select_a_filght(); break; //订票函数

case 0: n=0;break;

default:

printf("\n\n\t\t请重新输入没有你输入的选项:\n"); break;

}

}

}

}

/*&&&&&&&&&&&&&&&&&&&&新建航班信息&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void add_many_hangban() //新建航班信息

{

int n ,i,m,h;

FILE *fp;

Fl dp;

printf("\n\n\n\t\t请输入要添加的航班个数:");

scanf("%d",&n);

if((fp=fopen("FlightInfo.txt","a+"))==NULL){

printf("file can not open!");

exit(0);

}

for(i=1;i

printf("请输入第%d次航班\n\n",i);

printf("\t航班号:");scanf("%s",dp.fnumber);

printf("\n");

m=judge_have_or_no_a_flight(dp.fnumber); //判断是否有这个航

if(m==1){

printf("\t此次航班已有是否删除!\n\n");

printf("\t删除重新输入它请输入\n\n");

printf("\t不删除重新输入请输入\n\n");

printf("\t请输入:");

scanf("%d",&h);

if(h==1){

delete_a_filght(dp.fnumber); //删除函数

n=n-1;

add_many_hangban() ;//添加函数

}

if(h==2) {

add_many_hangban() ;//添加函数

}

}

printf("\t起飞地:");scanf("%s",dp.start);

printf("\t目的地:");scanf("%s",dp.destination);

printf("\t飞行时间:");scanf("%d",&dp.time);

printf("\t票价:"); scanf("%d",&dp.money);

fprintf(fp,"\n%5s\t%10s\t%10s\t%10d\t%10d",dp.fnumber,dp.start,dp.destination,dp.time,dp.money);

}

fclose(fp);

view_all();

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&察看全部航班信息&&&&&&&&&&&&&&&&&&&&&*/

void view_all()

{

FILE *fp;

Fl dp;

if((fp=fopen("FlightInfo.txt","r"))==NULL){

printf("file can not open!\n");

exit(0);

}

printf("航班号 起飞地点 终点 飞行时间(小时) 票价(元)\n\n");

while(!feof(fp)){

fscanf(fp,"%s%s%s%d%d",dp.fnumber,dp.start,dp.destination,&dp.time,&dp.money);

printf("%5s %10s %10s %10d %10d\n\n",dp.fnumber,dp.start,dp.destination,dp.time,dp.money);

}

fclose(fp);

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&查看一个航班函数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void scan_a_filght( char ch[])//查看一个航班函数

{

int m,n=0;

FILE *fp;

Fl dp;

if((fp=fopen("FlightInfo.txt","r"))==NULL){

printf("file can not open!");

exit(0);

}

while(!feof(fp)){

fscanf(fp,"%s%s%s%d%d\n",dp.fnumber,dp.start,dp.destination,&dp.time,&dp.money);

m =strcmp(dp.fnumber,ch);

if(m==0) {

printf("航班号 起飞地点 终点 飞行时间(小时) 票价(元)\n\n");

printf("%5s%10s %10s %10d %10d\n\n",dp.fnumber,dp.start,dp.destination,dp.time,dp.money);

n=1;

break;

}

}

if (n==0){

printf("没有你查找的航班号!\n");

}

fclose(fp);

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&删除函数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void delete_a_filght(char ch[])//删除函数

{

int i,len;

FILE *fp;

Fl all[100];//航班最多有100班

if((fp=fopen("FlightInfo.txt","r"))==NULL){

printf("file can not open!");

exit(0);

}

i=0;

while(!feof(fp)){

fscanf(fp,"%s%s%s%d%d",all[i].fnumber,all[i].start,all[i].destination,&all[i].time,&all[i].money);

i++;

}

len=i;

fclose(fp);

fp=fopen("FlightInfo.txt","w");

i=0;

while(i

{

if(strcmp(all[i].fnumber,ch)!=0)

{

fprintf(fp,"\n%5s%10s%10s%10d%10d",all[i].fnumber,all[i].start,all[i].destination,all[i].time,all[i].money);

}

i++;

}

fclose(fp);

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&判断是否有这个航班&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

int judge_have_or_no_a_flight(char ch[]) //判断是否有这个航班 {

int m,n=0;

FILE *fp;

Fl dp;

if((fp=fopen("FlightInfo.txt","r"))==NULL){

printf("file can not open!");

exit(0);

}

while(!feof(fp)){

fscanf(fp,"%s%s%s%d%d\n",dp.fnumber,dp.start,dp.destination,&dp.time,&dp.money);

m =strcmp(dp.fnumber,ch);

if(m==0) {

n=1;//此次航班已有

break;

}

}

fclose(fp);

return n;

}

/*&&&&&&&&&&&&&&&&&&&&&&&&官方界面美化函数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void printf_han_shu()//官方界面美化函数

{

printf("=========================================================================\n");

printf(" 欢迎使用飞机订票系统 !\n\n\n\n "); printf(" 本系统有以下功能供你选择.\n\n"); printf(" & 察看全部航班信息.\n\n");

printf(" & 查找一个航班信息.\n\n");

printf(" & 添加航班信息.\n\n");

printf(" & 删除航班信息.\n\n");

printf(" & 预定你所要的航班.\n\n");

printf(" & 密码修改.\n\n");

printf(" & 航班订票统计显示.\n\n");

printf(" & 退出系统.\n");

printf("=========================================================================\n\n");

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void printf_han_shu_comsouer()//顾客端界面美化函数

{

printf("=========================================================================\n");

printf(" 欢迎使用飞机订票系统 !\n\n\n\n "); printf(" 本系统有以下功能供你选择.\n\n"); printf(" & 察看全部航班信息.\n\n");

printf(" & 查找一个航班信息.\n\n");

printf(" & 预定你所要的航班.\n\n");

printf(" & 推出系统.\n");

printf("=========================================================================\n\n");

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&订票函数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void select_a_filght() //订票函数

{

FILE *fp;

int n,m=1;

select stu;

view_all();

while (m==1){

printf(" \t请输入你要预定的航班:");

scanf("%s",stu.no);

printf("\n\n");

n=judge_have_or_no_a_flight(stu.no) ;//判断函数

stu.n=zuowei_hao_sure(stu.no);//座位号确定函数

if(stu.n>100){

printf("对不起你所预定的航班已全部被预订!"); exit(0);

}

if(n==1) {

printf("\t请输入你的学号:");

scanf("%s",stu.xuehao);

printf("\n\n");

m=0;

}

else {

printf("\t无此次航班号,请重新输入!\n\n\n");

}

}

if((fp=fopen("SelectInfo.txt","a+"))==NULL){

printf("file can not open!");

exit(0);

}

fprintf(fp,"\n%10s\t%10s\t%d",stu.no,stu.xuehao,stu.n); fclose(fp);

printf("\t成功预定航班!\n\n");

printf("\t你的飞机票信息是:\n\n");

printf("\t航班号\t\t学号\t\t 座位号\n\n");

printf("\t%s\t\t%s\t\t%d\n\n",stu.no,stu.xuehao,stu.n);

}

/* &&&&&&&&&&&&&&&&密码确认函数&&&&&&&&&&&&&&&&&&&&&&&&*/

int mima_hanshu()//密码确认函数

{

char mima[20];

FILE *fp;

char yuanmima[20];

int n;

printf("\t请输入(原)密码:");

scanf("%s",mima);

printf("\n");

if((fp=fopen("mima.txt","r"))==NULL){

printf("file can not open1 !\n");

exit(0);

}

while (!feof(fp)){

fscanf(fp,"%s",yuanmima);

}

fclose (fp);

if(strcmp(mima,yuanmima)==0) n=1;

else n=0;

return n;

}

/* &&&&&&&&&&&&&&&&密码修改函数&&&&&&&&&&&&&&&&&&&&&&&&*/ void xiugai_hanshu() //密码修改函数

{

int n;

FILE *fp;

char gaihoumima[20];

n=mima_hanshu();//密码确认函数

if (n==1) {

printf("\t请输入你的新密码:");

scanf("%s",gaihoumima);

if((fp=fopen("mima.txt","w"))==NULL){

printf("file can not open!");

exit(0);

}

fprintf(fp,"%s",gaihoumima);

fclose(fp);

printf("\t修改成功!\n");

}

else printf("对不起你密码输入错误!\n\n");

}

/*&&&&&&&&&&&&座位确定函&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/ int zuowei_hao_sure(char hangban[])//座位确定函

{

FILE *fp;

select piao;

int n=1;

if((fp=fopen("SelectInfo.txt","a+"))==NULL){

printf("file can not open1 !\n");

exit(0);

}

while(!feof(fp)){

fscanf(fp,"%s%s%d",piao.no,piao.xuehao,&piao.n);

if(strcmp(hangban,piao.no)==0)

{

n++;

}

}

fclose(fp);

return n;

}

/*&&&&&&&&&&&&&&&&&&&&时间函数&&&&&&&&&&&&&&&&*/

void time_han_shU()//时间函数

{

FILE *fp;

time_t now; //实例化time_t结构

struct tm *timenow; //实例化tm 结构指针

time(&now);

timenow = localtime(&now);

printf("New time is %s\n",asctime(timenow));

if((fp=fopen("time.txt","a+"))==NULL){

printf("file can not open1 !\n");

exit(0);

}

fprintf(fp,"\n%s",asctime(timenow));

fclose(fp);

}

/*&&&&&&&&&&&&&&&&&统计函数&&&&&&&&&&&&&&&&&&&&&&&-*/

void tongji_han_shu() //飞机航班统计函数

{

FILE *fp; //订票文件指针

FILE *rp; //航班信息文件指针

Fl dp[100];//航班结构数组

select piao;

int n=0,i,len;

if((rp=fopen("FlightInfo.txt","r"))==NULL){

printf("file can not open2 !\n");

exit(0);

}

printf("\t航班号\t\t已定票数\n\n");

i=0;

while(!feof(rp)){

fscanf(rp,"%s%s%s%d%d",dp[i].fnumber,dp[i].start,dp[i].destination,&dp[i].time,&dp[i].money);

i++;

}

len=i;

fclose(rp);

for(i=0;i

if((fp=fopen("SelectInfo.txt","r"))==NULL){

printf("file can not open2 !\n");

exit(0);

}

while(!feof(fp)){

fscanf(fp,"%s%s%d",piao.no,piao.xuehao,&piao.n);

}

}

}

if(strcmp(dp[i].fnumber,piao.no)==0) n=n+1; printf("\t%s\t\t%d\n\n",dp[i].fnumber,n); n=0; fclose(fp);

《程序设计》

课程设计说明书

课程名称 《程序设计》

设计题目 飞机航班订票系统 专业班级 计算机应用技术201221

学生姓名

指导教师

起止日期2013年6月8日至2013年6月14日

福建林业职业技术学院自动化工程

目录

1 设计内容、任务以及要求 ................................................................. 1

1.1设计题目的内容 ................................................ 1

1.2要求 .......................................................... 1 2总体设计思路 ................................................................................. 2

2.1系统基本功能 .................................................. 2

2.2具体设计思想 .................................................. 2

2.3系统的总体流程图 ............................................... 3 3 .功能模块的详细设计 . ..................................................................... 5

3.1结构的定义 .......................................................................................................... 5

3.2各个函数的设计具体设计思想和流程图 ...................................................................... 5

4.功能模块的调试及测试 . ................................................................ 27

4.1添加函数的测试 ............................................... 27

4.2判断函数的测试 ............................................................................................... 28

4.3 删除函数的测试 ............................................... 28

4.4统计函数的测试 ............................................................................................... 28

4.5 密码确认函数的测试 ...................................................................................... 14

4.6密码的修改函数 ............................................... 31

4.7 主函函数的测试 ............................................... 32 5 总结 . .......................................................................................... 34 6致谢 ........................................................................................... 35 参考文献 . ....................................................................................... 36 原程序代码: ................................................................................. 21

1 设计内容、任务以及要求

1.1设计题目的内容、任务

主要利用c 语言的文件操作能力设计开发一个小型的飞机订票系统,至少具有如下功能:信息读出,可以查看全部航班信息和查询一个航班信息。可以进行添加(再添加过程中有重复显示提示信息)、删除、订票等基本操作。操作界面要能使使用者看懂,以便使使用者正确使用。

具体内容如下:

程序属于非数值计算型算法设计,学生需要设计出飞机订票系统所需要的基本功能,并设计简单的界面。

(1)通过提示菜单选择可以进行的操作。

(2)将航班的信息存入文件中,并命名为FlightInfo.txt 。

(3)将订票情况信息存入文件中,并命名为SelectInfo.txt 。

(4)在本系统中可以进行管理系统包含的基本操作,其中包括

a) 查看所有航班的信息

b) 输入一条航班的航班编号,从当前航班中进行查找,如果找到则显

示该航班的相关信息,如果没有找到则给出提示信息

c) 添加一条航班的基本信息,通过输入航班编号,首先查找是否存在

该航班编号的航班,如果存在则提示重新输入,否则将该航班按照顺序插入到相应位置

d) 删除一条航班的基本信息,通过输入航班编号,首先查找是否存在

该航班编号的航班,如果存在则将该航班删除,否则给出提示信息,提示该航班不存在

e) 选择一条航班,需要给出学号和航班编号,如果航班编号不存在则

重新输入,直到输入正确为止,并将学号和相应的航班编号存入SelectInfo.txt 文件中

(5)航班基本信息包括航班编号、起点、终点、飞行时间和订票额度这些简单信息。

(6)航班信息文件中每一行存放一条航班的信息。

1.2要求

要求:明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识; 提高学生用高级语言进行程序设计的能力,重点提高用C 语言进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤; 提高撰写技术文档的能力。

2总体设计思路

2.1系统基本功能

外部操作:根据要求系统要有查看全部航班信息,查询一个航班,添加航班(再添加过程中如有重复显示提示信息),删除航班(在删除过程中如果没有查找到要删除的显示提示信息),选择航班订票。

内部操作:将航班的信息存入文件中,并命名为FlightInfo.txt 。将订票情况信息存入文件中,并命名为SelectInfo.txt 。相应的航班编号存入SelectInfo.txt 文件中

为了接近实战模拟飞机航班订票系统,增加了一些功能。增加功能有把系统分为了两个部分,一个是官方操作,一个是客户端。官方操作有密码认定和密码修改,密码的以文件形式存储在硬盘里,以只读认定客户,以只写修改密码。官方还有查看订票情况,由函数统计出来的。客户端增加了机票显示(显示包括统计出来的座位号,以及航班号和学号)。

2.2具体设计思想

(1)以结构化各个功能模块,函数间的调用精简整个函数。

(2)以全局结构来随时定义结构数组以及机构。

(3)以写一个信息存一个的思想,实现多个添加功能。

(4)以读一个打印一个的思想,实现显示全部信息。

(5)以先判断(以判断函数给定是否有此航班)再打印的思想,来实现查找是否有这个航班。

(6)以先判断(以判断函数给定是否有此航班)再添加的思想,(添加中引用了删除函数以供用户选择),实现添几功能。

(7)以先判断(以判断函数给定是否有此航班)再删除的思想,删除航班

信息。

(8)以循环统计(以统计函数统计给定航班号)订票文件的的情况返回值的思想,以显示当前订票情况。

(9)以统计(以统计函数统计给定航班号)来返回值的思想,以显示座位号。

(10)密码的确认以及修改,是利用文件存储的永久性来实现的,以只读来确认密码,以只写来修改密码的思想,来实现的官方操作 。

2.3系统的总体流程图

2.2系统的总体流程图(2)

3 .功能模块的详细设计

3.1结构的定义

为了方便使用结构此系统结构均为全局类型定义,其定义有如下两个: typedef struct flight //航班信息机构

{

char fnumber[5]; char start[20]; char destination[20]; int time; //时间 以小时为单位 int money;

} Fl;

typedef struct consumer //顶票信息机构

{

char no[5]; //航班号 char xuehao[10]; //学号 int n; //座位号

} select;

3.2各个函数的设计具体设计思想和流程图

此系统一共十四个函数如下所示:

(1)int judge_have_or_no_a_flight(char[]);//判断是否有这个航班

(2)void delete_a_filght(char ch[]); //删除函数

(3)void add_many_hangban() ; //新建(添加)航班信息

(4)void view_all(); //察看所有的航班信息

(5)void scan_a_filght( char ch[]); //查看一个航班函数

(6)int mima_hanshu(); //密码确认函数

(7)void xiugai_hanshu(); //密码修改函数

(8)void tongji_han_shu() ; //飞机航班统计函数

(9)int zuowei_hao_sure(char hangban[]); //座位确定函数

(10) void select_a_filght(); //订票函数

(11)void printf_han_shu(); //官方界面美化函数

(12)void printf_han_shu_comsouer(); //顾客端界面美化函数

(13)void time_han_shU() ; //时间函数

3.2.1判断是否有这个航班函数

根据要求在添加的时候要先判断是否已有此航班信息,给出相应的提示。所以以判断函数的返回值来提示是否要对原有的航班信息进行操作,因此判断函数的类型为整型。其功能具体设计如下:

① 具体流程如下所示

②代码说明 图3.1

以下代码说明请对照程序附件。 ch[]为字符型字符串,添加函数在调用时引入的实参的值付给它,然后引入函数中应用。

FILE *fp :文件指针指向航班信息(FlightInfo.txt )存储文本的缓存地址。

If 语句是对文本是否打开做出判断。文件以只读方式打开。 Fl dp;是定义的航班信此结构。

While 语句是把文件里的数据读到内存里,然后和ch 字符串比较,如果相等m==0,不相等它就不是一个定值了。

strcmp(dp.fnumber,ch);判断是否读出来的数据和已知数据是否相等。 If 语句是用来确定返回值,如果有与已知数据n 就是1否则为0; fclose(fp);关闭文件指针。 返回n

return n;

3.2.2 删除函数

删除一个航班的基本思想是,把文件中的数据全部读出来,然后再放回去,与已知数据进行比较,如果相等说明就是删除的数据,就不放回文件中。

① 具体流程如下所示

图3.2

②代码说明

Ch 为引用的字符串。

Fl all[100];定义的结构数组,来控制变量。把文件中的数据全部读出来,放到结构数组里以便操作。 if((fp=fopen("FlightInfo.txt","r"))==NULL)判断文件是否打开。以只读的方式。

while 语句把文件里的数据读到结构数组里,以i 的自增来确保数据的完整。 len=i;作为下面while(i

fp=fopen("FlightInfo.txt","w");语句以只写的方式打开。将文件里的书局全部覆盖掉。

If 语句中的:strcmp(all[i].fnumber,ch)!=0判断但当前字符串是否和已知字符串是否相等,并以此来确定是否打印数据到文件中。如果哦相等说明与已知字符串相等。就不打印到文件中以此来删除航班信息。 fclose(fp);对打印到文件中数据保证存储。

3.2.3新建(添加)航班信息函数

以追加方式打开文件,先输入要输入的个数,再在for 循环中输入航班号,在for 循环中先判断是否已有次航班,如果已有做出相应的提示。没有则接续输入。

① 流程图

图3.3

②代码说明

printf("\n\n\n\t\t请输入要添加的航班个数:");显示提示信息,以增加程序的美观。

scanf("%d",&n)语句是要输入的航班个数。

if((fp=fopen("FlightInfo.txt","a+"))==NULL){printf("file can not open!");exit(0);} 语句以追加(既可以读也可以写,读重文件头开始读,写重文件末尾写进)的方式打开文件。

m=judge_have_or_no_a_flight(dp.fnumber); //判断是否有这个航班:把实参dp.fnumber 引入判断函数,返回一个值。

If 语句:根据m 的值来提示是否当前添加的航班号是否已有,并提示做相应的操作. 有放弃删除重新输入,有删除后重新输入。

if(h==1):语句调用相应的删除函数,把dp.fnumber 作为实参引用到删除函数。然后用函数递归应用在执行循环操作。

if(h==2):语句直应用函数递归,应用添加函数执行添加循环。

在for 循环中没有应用结构数组,直接输入一个,就把这个放到文件中。 fprintf :语句是把内存中的数据打印到文件中。

view_all();是查看全部航班函数,为了直接显示是否添加成功,显示文件中的全部信息。

3.2.4察看所有的航班信息

以只读方式打开,以文件结束为标志结束,从文件中读一个就打印一个的思想。

① 流程图

图3.4 ② 代码说明

printf("航班号 起飞地点 终点 飞行时间(小时) 票价(元)\n\n");:此语句是对航班总体的说明

while :语句为控制循环,然后就读一个打印一个,直到文件结束。 printf("%5s %10s %10s %10d %10d\n\n",dp.fnumber,dp.start,dp.destination,dp.time,dp.money) 打印内容间的距离控制。

fclose(fp);关闭文件指针。

3.2.5查看一个航班函数

和查看全部航班信息思想一样,只是打印出来的时候只准与查找的航班信息打印。用一个if 语句条件限制为m =strcmp(dp.fnumber,ch);m的值为0才打印出来。

① 流程图

② 代码说明

ch 导入字符要找的航班号。 while(!feof(fp))控制循环。

m =strcmp(dp.fnumber,ch); break; 如果打印了就跳出循环。

if(m==0) 控制是够打印。

根据if (n==0)判断是否有与给定数据相等的,如果没有会显示提示信息

3.2.6 密码确认函数

先给定初始密码,可以利用密码修改函数进行修改,密码认定是把文件中的字符读出来和输入的进行对比,是否相等来实现的。 ① 程序流程图

② 代码说明

char mima[20];密码最多有20个字符。

while (!feof(fp)){ fscanf(fp,"%s",yuanmima);

}从文件中不把密码拿出来。

if(strcmp(mima,yuanmima)==0)与输入字符进行比较。等则输入密码正确,不等则输入密码不正确。

返回值说明是否输入正确,正确返回1,不对返回0. 。

3.2.7密码修改函数

设计思想先用密码确认函数确认是否密码正确,正确才让进入下一个环节,修改是文件以只写的方式打开,然后保存。 ①函数流程图

n=mima_hanshu();/引入密码确认函数。 If 语句判断是否密码正确。

正确系统让进行密码修改,不正确不让修改。

fclose(fp);关闭文件。

3.2.8飞机航班订票统计函数

以只读方式打开文件,读出每个航班号的订票情况,然后打印出来。 ① 程序流程

图3.8

②代码说明

printf("\t%s\t\t%d\n\n",dp[i].fnumber,n);

if((rp=fopen("FlightInfo.txt","r"))==NULL)以只读方式打开文件 打印出来,航班信息。

while(!feof(rp)):控制循环,把文件中的数据读到数组中。 i++;为后面的for 循环做控制。

在for 循环中没统计一次,指针就指到文件末尾,所以每次统计都要重新打开文件。

统计到一个则座位号加一,最终结果多以就是当请客户的座位号。 fclose(fp);关闭文件指针。

3.2.9 座位确定函数

用的是统计的思想,只要文件中有何已知数据相等的票,那么统计变量自增一。然后打印出来。

① 程序流程

图3.9

② 代码说明

“a+”可写可读。

while(!feof(fp)控制一次一次的读出来, if(strcmp(hangban,piao.no)==0)

和已知数据进行比较,符合自增。不符合进行下一次。 fclose(fp);关闭文件 return n;返回座位号。

3.2.10订票函数

以先判断再预定,成功输入后把飞机票存入文件中。

②代码说明

view_all();为了订票方便引入了查看全部函数。 while (m==1);要求直道输入正确为止 n=judge_have_or_no_a_flight(stu.no) ;//判断函数; 判断是否有此航班 if(stu.n>100)控制飞机票的数量不能超过限制人数。 m=0;跳出循环。 else { printf("\t无此次航班号,请重新输入!\n\n\n"); }};提示重新输入。

fprintf(fp,"\n%10s\t%10s\t%d",stu.no,stu.xuehao,stu.n);fclose(fp);

保存已预定的飞机票。

printf("\t%s\t\t%s\t\t%d\n\n",stu.no,stu.xuehao,stu.n); 打印飞机票。

3.2.10 官方界面美化函数 顾客端界面美化函数 时间函数

为了主函数的简洁,所以引入两个显示提示信息函数。而时间函数是为了模拟真实系统而引用的系统函数,以显示当前时间。然后保存到文件中,以便查询操作时间。

4.功能模块的调试及测试

4.1添加函数的测试

图 4.1 添加函数的测试

4.1.1 文本文档中的信息

图4.2 添加后文本中的信息

由文本中的信息的出,函数代码有误,原代码为:fprintf(fp,"\n%5s%10s%10s%10d%10d\n",

dp.fnumber,dp.start,dp.destination,&dp.time,&dp.money); 应该改为:fprintf(fp,"\n%5s\t%10s\t%10s\t%10d\t%10d",dp.fnumber,dp.start,dp.destination,dp.time,dp.money); 原因是写道文件中的事整型数的地址。所以在文本中显示的是乱码。调试成功。

4.2判断函数的测试(判断输入的航班号是否已有,给出相应的提示)

图4.3判断函数的测试

图4.4判断函数的测试

4.3 删除函数的测试(引入删除航班,先通过判断函数,再进行删除)

图4.5删除函数的测试

输入1后查看全部图示为

图4.6删除函数的测试

成功的删除航班。(以拿出来,再放回去的操作,设置是否打印,以此来实现删除)

4.4统计函数的测试(统计处已订航班的票数)

图4.7统计函数的测试

原代码为if((fp=fopen("SelectInfo.txt","r"))==NULL){ printf("file can not open2 !\n"); exit(0); }

for(i=0;i

fscanf(fp,"%s%s%d",piao.no,piao.xuehao,&piao.n);if(strcmp(dp[i].fnumber,piao.no)==0) n=n+1; }

printf("\t%s\t\t%d\n\n",dp[i].fnumber,n); n=0;

fclose(fp); }

说明文件指针已经一到文件末尾,可以改变指针位置,或者是重复打开文件指针。所以改为:for(i=0;i

if((fp=fopen("SelectInfo.txt","r"))==NULL){ printf("file can not open2 !\n"); exit(0); }

while(!feof(fp)){

fscanf(fp,"%s%s%d",piao.no,piao.xuehao,&piao.n);

if(strcmp(dp[i].fnumber,piao.no)==0) n=n+1; }

printf("\t%s\t\t%d\n\n",dp[i].fnumber,n); n=0;

fclose(fp); } }

图4.8统计函数的测试

说明修改成功,证明文件每读一次文件指针就会指到文件末尾。

4.5 密码确认函数的测试

密码函数利用文本文档的长期存储,以只读的方式打开文件,和输入字符串进行比较。

以是否相等来判断密码的对错。以实现密码确认函数。

图4.9密码确认函数的测试

根据设想密码确认函数成功实现。

图4.10密码确认函数的测试

4.6密码的修改函数

模拟密码操作,先用密码判断函数判断是否是正确的密码,然后只写的方式把新密码打印进去在保存的思想,来实现密码修改。

图4.11密码的修改函数的测试

根据设计思想,符合事实。成功地 完成了密码修改函数的实现。

4.7 主函函数的测试

图4.12 主函函数的测试

根据if 语句的判断功能,系统可供官方操作,和客户端。客户端直接进入,官方操作,为模拟真实系统设计了密码认定,才允许进入。时间函数就在这时显示和存储。进入官方操作后可以有如图4.13所示的操作,进入客户端有如图4.14的操作。

图4.13主函函数的测试

图4.14主函函数的测试

进入一个操作后就是自身的循环操作,根据wehile(n==1) 来反复的界面刷

新和循环操作。

在while 的语句中改变n 的值来控制循环的结束。

5 总结

经过十天的程序设计,基本掌握程序设计的基本方法和步骤。

在这十天中悟出:程序设要求有一定的基础是必须的,但是更多的是无论你

设计什么程序,在设计前一定要有自己的设计理念、设计思想,也可以说是中心思想。否则在做程序的时候,请教一个高手,就有一种不同的方法。结果最终的程序不伦不类,设计完后会发现会有不同的漏洞。在设计过程中要大胆的发挥自己的想象力,要敢于不断的创新,要敢于尝试,我认为这也是一种进步的好方法。

另外我还有一个小小的建议,老师们给初学这门课程的学生尽量不这门课的

神奇的地方讲讲,我觉得会对那些对这门课感兴趣的同学会更感兴趣。记得上次老师第一次演示文件时,有点相见恨晚,象被注射了兴奋剂一样。

6致谢

在这十天的时间里,我学到了很多知识,这些少不了老师辛苦指导。同

学之间的帮助,相互鼓励,以及相互探讨,给了自己很大的信心,和跨域式的进步。所以首先要感谢各位老师和我一起奋斗的同学们。

还要感谢我的父母,是他们给了我机会来学习。

还要感谢所有为教育事业作出奉献的人。

参考文献

[1] 杨路明 . C语言程序设计基础. 北京邮电大学出版社.2005.

[2] 何钦铭,颜晖. C语言程序设计基础. 高等教育出版社.2008.

[3]

[4] KOCHANSG . C

[5]

社,2004.

张引. C 程序设计基础课程设计. 杭州. 浙江大学出版社,2007. 语言编程. 电子工业出版社. 2006. 高福成,c 语言程序设局,清华大学出版社、北方交通大学出版

原程序代码:

#include

#include

#include

#include

int judge_have_or_no_a_flight(char[]);//判断是否有这个航班

void select_a_filght(); //订票函数

void xiugai_hanshu(); //密码修改函数

void view_all(); //察看所有的航班信息

void scan_a_filght( char ch[]); //查看一个航班函数

void add_many_hangban() ; //新建航班信息

void delete_a_filght(char ch[]); //删除函数

void printf_han_shu(); //官方界面美化函数

void printf_han_shu_comsouer(); //顾客端界面美化函数

int mima_hanshu(); //密码确认函数

int zuowei_hao_sure(char hangban[]); //座位确定函数

void time_han_shU() ; //时间函数

void tongji_han_shu() ; //飞机航班统计函数

typedef struct flight //航班信息机构

{

char fnumber[5];

char start[20];

char destination[20];

int time; //时间 以小时为单位

int money;

} Fl;

typedef struct consumer //顶票信息机构

{

char no[5]; //航班号

char xuehao[10]; //学号

int n; //座位号

} select;

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&主函数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void main()//主函数

{

int choice,n=1,m,t,w;

char ch[5];

time_han_shU();

printf("\n\t\t\t欢迎进入飞机订票系统!\n\n");

printf("\t\t& 官方操作。 \n\n");

printf("\t\t& 客户端 。 \n\n");

printf("\t\t& 退出系统。 \n\n");

printf("\t\t请输入你的选择:");

scanf("%d",&t);

if(t==1){

chongxin:

w=mima_hanshu();//密码确认函数

while(n==1){

if(w==1){

printf_han_shu();//官方界面美化函数

printf("\t请输入你选择的功能:");

scanf("%d",&choice);

printf("\n\n");

switch(choice){

case 1: system("cls");

view_all(); break; // 察看所有的航班信息

case 2:system("cls");

view_all();//查看全部

printf("\n\n\t\t请输入你要查找的航班号:");

scanf("%s",&ch);

scan_a_filght ( ch); //察看一个航班信息 break;

case 3: system("cls");

add_many_hangban(); break; //新建航班信息(添加函数)

case 4:system("cls");

printf("\n\n\t\t请输入你要删除的航班号:"); scanf("%s",&ch);

m=judge_have_or_no_a_flight( ch) ;//判断是否有这个航班

if(m==1) {

delete_a_filght( ch); //删除函数

printf("\t\t成功删除!\n\n");

}

if(m!=1) printf("无此次航班!\n");

break;

case 5: system("cls");

select_a_filght(); break; //订票函数 case 6: system("cls");

xiugai_hanshu(); break; //密码修改函数 case 7: system("cls");

tongji_han_shu(); break;//航班统计函数

case 0: n=0;break;

default:printf("请重新输入没有你输入的选择\n\n");break;

}

}

else {

printf("\t\t密码错误!\n");

printf("\t\t请重新输入密码!\n\n");

goto chongxin;

}

}

}

else if(t==2)

{

while(n==1){

printf_han_shu_comsouer();//顾客端界面美化函数

printf("\t请输入你选择的功能:");

scanf("%d",&choice);

printf("\n\n");

switch(choice){

case 1: system("cls");

view_all(); break; // 察看所有的航班信息

case 2:system("cls");

view_all();//显示全部

printf("\t请输入你要查找的航班号:");

scanf("%s",&ch);

scan_a_filght ( ch); //察看一个航班信息 break;

case 3:system("cls");

select_a_filght(); break; //订票函数

case 0: n=0;break;

default:

printf("\n\n\t\t请重新输入没有你输入的选项:\n"); break;

}

}

}

}

/*&&&&&&&&&&&&&&&&&&&&新建航班信息&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void add_many_hangban() //新建航班信息

{

int n ,i,m,h;

FILE *fp;

Fl dp;

printf("\n\n\n\t\t请输入要添加的航班个数:");

scanf("%d",&n);

if((fp=fopen("FlightInfo.txt","a+"))==NULL){

printf("file can not open!");

exit(0);

}

for(i=1;i

printf("请输入第%d次航班\n\n",i);

printf("\t航班号:");scanf("%s",dp.fnumber);

printf("\n");

m=judge_have_or_no_a_flight(dp.fnumber); //判断是否有这个航

if(m==1){

printf("\t此次航班已有是否删除!\n\n");

printf("\t删除重新输入它请输入\n\n");

printf("\t不删除重新输入请输入\n\n");

printf("\t请输入:");

scanf("%d",&h);

if(h==1){

delete_a_filght(dp.fnumber); //删除函数

n=n-1;

add_many_hangban() ;//添加函数

}

if(h==2) {

add_many_hangban() ;//添加函数

}

}

printf("\t起飞地:");scanf("%s",dp.start);

printf("\t目的地:");scanf("%s",dp.destination);

printf("\t飞行时间:");scanf("%d",&dp.time);

printf("\t票价:"); scanf("%d",&dp.money);

fprintf(fp,"\n%5s\t%10s\t%10s\t%10d\t%10d",dp.fnumber,dp.start,dp.destination,dp.time,dp.money);

}

fclose(fp);

view_all();

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&察看全部航班信息&&&&&&&&&&&&&&&&&&&&&*/

void view_all()

{

FILE *fp;

Fl dp;

if((fp=fopen("FlightInfo.txt","r"))==NULL){

printf("file can not open!\n");

exit(0);

}

printf("航班号 起飞地点 终点 飞行时间(小时) 票价(元)\n\n");

while(!feof(fp)){

fscanf(fp,"%s%s%s%d%d",dp.fnumber,dp.start,dp.destination,&dp.time,&dp.money);

printf("%5s %10s %10s %10d %10d\n\n",dp.fnumber,dp.start,dp.destination,dp.time,dp.money);

}

fclose(fp);

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&查看一个航班函数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void scan_a_filght( char ch[])//查看一个航班函数

{

int m,n=0;

FILE *fp;

Fl dp;

if((fp=fopen("FlightInfo.txt","r"))==NULL){

printf("file can not open!");

exit(0);

}

while(!feof(fp)){

fscanf(fp,"%s%s%s%d%d\n",dp.fnumber,dp.start,dp.destination,&dp.time,&dp.money);

m =strcmp(dp.fnumber,ch);

if(m==0) {

printf("航班号 起飞地点 终点 飞行时间(小时) 票价(元)\n\n");

printf("%5s%10s %10s %10d %10d\n\n",dp.fnumber,dp.start,dp.destination,dp.time,dp.money);

n=1;

break;

}

}

if (n==0){

printf("没有你查找的航班号!\n");

}

fclose(fp);

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&删除函数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void delete_a_filght(char ch[])//删除函数

{

int i,len;

FILE *fp;

Fl all[100];//航班最多有100班

if((fp=fopen("FlightInfo.txt","r"))==NULL){

printf("file can not open!");

exit(0);

}

i=0;

while(!feof(fp)){

fscanf(fp,"%s%s%s%d%d",all[i].fnumber,all[i].start,all[i].destination,&all[i].time,&all[i].money);

i++;

}

len=i;

fclose(fp);

fp=fopen("FlightInfo.txt","w");

i=0;

while(i

{

if(strcmp(all[i].fnumber,ch)!=0)

{

fprintf(fp,"\n%5s%10s%10s%10d%10d",all[i].fnumber,all[i].start,all[i].destination,all[i].time,all[i].money);

}

i++;

}

fclose(fp);

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&判断是否有这个航班&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

int judge_have_or_no_a_flight(char ch[]) //判断是否有这个航班 {

int m,n=0;

FILE *fp;

Fl dp;

if((fp=fopen("FlightInfo.txt","r"))==NULL){

printf("file can not open!");

exit(0);

}

while(!feof(fp)){

fscanf(fp,"%s%s%s%d%d\n",dp.fnumber,dp.start,dp.destination,&dp.time,&dp.money);

m =strcmp(dp.fnumber,ch);

if(m==0) {

n=1;//此次航班已有

break;

}

}

fclose(fp);

return n;

}

/*&&&&&&&&&&&&&&&&&&&&&&&&官方界面美化函数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void printf_han_shu()//官方界面美化函数

{

printf("=========================================================================\n");

printf(" 欢迎使用飞机订票系统 !\n\n\n\n "); printf(" 本系统有以下功能供你选择.\n\n"); printf(" & 察看全部航班信息.\n\n");

printf(" & 查找一个航班信息.\n\n");

printf(" & 添加航班信息.\n\n");

printf(" & 删除航班信息.\n\n");

printf(" & 预定你所要的航班.\n\n");

printf(" & 密码修改.\n\n");

printf(" & 航班订票统计显示.\n\n");

printf(" & 退出系统.\n");

printf("=========================================================================\n\n");

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void printf_han_shu_comsouer()//顾客端界面美化函数

{

printf("=========================================================================\n");

printf(" 欢迎使用飞机订票系统 !\n\n\n\n "); printf(" 本系统有以下功能供你选择.\n\n"); printf(" & 察看全部航班信息.\n\n");

printf(" & 查找一个航班信息.\n\n");

printf(" & 预定你所要的航班.\n\n");

printf(" & 推出系统.\n");

printf("=========================================================================\n\n");

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&订票函数&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

void select_a_filght() //订票函数

{

FILE *fp;

int n,m=1;

select stu;

view_all();

while (m==1){

printf(" \t请输入你要预定的航班:");

scanf("%s",stu.no);

printf("\n\n");

n=judge_have_or_no_a_flight(stu.no) ;//判断函数

stu.n=zuowei_hao_sure(stu.no);//座位号确定函数

if(stu.n>100){

printf("对不起你所预定的航班已全部被预订!"); exit(0);

}

if(n==1) {

printf("\t请输入你的学号:");

scanf("%s",stu.xuehao);

printf("\n\n");

m=0;

}

else {

printf("\t无此次航班号,请重新输入!\n\n\n");

}

}

if((fp=fopen("SelectInfo.txt","a+"))==NULL){

printf("file can not open!");

exit(0);

}

fprintf(fp,"\n%10s\t%10s\t%d",stu.no,stu.xuehao,stu.n); fclose(fp);

printf("\t成功预定航班!\n\n");

printf("\t你的飞机票信息是:\n\n");

printf("\t航班号\t\t学号\t\t 座位号\n\n");

printf("\t%s\t\t%s\t\t%d\n\n",stu.no,stu.xuehao,stu.n);

}

/* &&&&&&&&&&&&&&&&密码确认函数&&&&&&&&&&&&&&&&&&&&&&&&*/

int mima_hanshu()//密码确认函数

{

char mima[20];

FILE *fp;

char yuanmima[20];

int n;

printf("\t请输入(原)密码:");

scanf("%s",mima);

printf("\n");

if((fp=fopen("mima.txt","r"))==NULL){

printf("file can not open1 !\n");

exit(0);

}

while (!feof(fp)){

fscanf(fp,"%s",yuanmima);

}

fclose (fp);

if(strcmp(mima,yuanmima)==0) n=1;

else n=0;

return n;

}

/* &&&&&&&&&&&&&&&&密码修改函数&&&&&&&&&&&&&&&&&&&&&&&&*/ void xiugai_hanshu() //密码修改函数

{

int n;

FILE *fp;

char gaihoumima[20];

n=mima_hanshu();//密码确认函数

if (n==1) {

printf("\t请输入你的新密码:");

scanf("%s",gaihoumima);

if((fp=fopen("mima.txt","w"))==NULL){

printf("file can not open!");

exit(0);

}

fprintf(fp,"%s",gaihoumima);

fclose(fp);

printf("\t修改成功!\n");

}

else printf("对不起你密码输入错误!\n\n");

}

/*&&&&&&&&&&&&座位确定函&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/ int zuowei_hao_sure(char hangban[])//座位确定函

{

FILE *fp;

select piao;

int n=1;

if((fp=fopen("SelectInfo.txt","a+"))==NULL){

printf("file can not open1 !\n");

exit(0);

}

while(!feof(fp)){

fscanf(fp,"%s%s%d",piao.no,piao.xuehao,&piao.n);

if(strcmp(hangban,piao.no)==0)

{

n++;

}

}

fclose(fp);

return n;

}

/*&&&&&&&&&&&&&&&&&&&&时间函数&&&&&&&&&&&&&&&&*/

void time_han_shU()//时间函数

{

FILE *fp;

time_t now; //实例化time_t结构

struct tm *timenow; //实例化tm 结构指针

time(&now);

timenow = localtime(&now);

printf("New time is %s\n",asctime(timenow));

if((fp=fopen("time.txt","a+"))==NULL){

printf("file can not open1 !\n");

exit(0);

}

fprintf(fp,"\n%s",asctime(timenow));

fclose(fp);

}

/*&&&&&&&&&&&&&&&&&统计函数&&&&&&&&&&&&&&&&&&&&&&&-*/

void tongji_han_shu() //飞机航班统计函数

{

FILE *fp; //订票文件指针

FILE *rp; //航班信息文件指针

Fl dp[100];//航班结构数组

select piao;

int n=0,i,len;

if((rp=fopen("FlightInfo.txt","r"))==NULL){

printf("file can not open2 !\n");

exit(0);

}

printf("\t航班号\t\t已定票数\n\n");

i=0;

while(!feof(rp)){

fscanf(rp,"%s%s%s%d%d",dp[i].fnumber,dp[i].start,dp[i].destination,&dp[i].time,&dp[i].money);

i++;

}

len=i;

fclose(rp);

for(i=0;i

if((fp=fopen("SelectInfo.txt","r"))==NULL){

printf("file can not open2 !\n");

exit(0);

}

while(!feof(fp)){

fscanf(fp,"%s%s%d",piao.no,piao.xuehao,&piao.n);

}

}

}

if(strcmp(dp[i].fnumber,piao.no)==0) n=n+1; printf("\t%s\t\t%d\n\n",dp[i].fnumber,n); n=0; fclose(fp);


相关文章

  • 航空客运订票系统(论文)
  • 信息科学与工程学部 数据结构课程设计 题 目 航空客运订票系统 姓 名 学 号 [1**********]894 学 院 信息科学与工程学院 专业.年级 软件工程1101班 指 导 教 师 2012 年 11月 27 日 摘 要 随着科技与 ...查看


  • 航空客运订票系统课程设计
  • 目 录 一.设计任务说明 . ......................................................... 2 二.需求分析 . .................................... ...查看


  • 航班信息管理系统说明书2014
  • ******************* 实践教学 ******************* 兰州理工大学 计算机与通信学院 2014年春季学期 题 目: 航班信息管理系统 专业班级:姓 名: 学 号: 指导教师:成 绩: 今年来随着人们生活水 ...查看


  • 机票预订系统--数据库课程设计--设计报告
  • 机票预订系统 一.需求分析 调查机票预定系统应用领域涉及的内容,对涉及到领域的各个应用的信息要求和操 作要求进行详细分析,形成需求分析说明书.最重要的是调查.收集信息.分析购票人信息和飞机预定流程.通过网络实际查询,理解机票预订系统的基本构 ...查看


  • 信息管理系统 1
  • <管理信息系统>结课报告 班级:08级工程管理1班 姓名:曾政 学号:[1**********]7 系统名称:航空预订票系统 目 录 1 系统分析---------------1 1.1建立新系统的必要性-----------1 ...查看


  • 飞机订票系统课程设计报告
  • 数 据 结 构 课 程 设 计 报 告 院系: 信息管理学院 专业:班级: 软件Q1141 学号: 11150132 姓名: 王毅 教师: 邓沌华 时间: 一.问题描述 题目:飞机订票系统 题目要求: (1)可以录入航班情况 (2)可以查询 ...查看


  • 民航订票系统
  • 1 绪论 1.1 系统设计的目的 为了方便机场工作人员对机票的管理,提高飞机票的管理效率,降低飞机票管理中的出错率,减少信息交流及其带来不必要的开销.需要设计一个民航订票系统,该系统能及时反映航班及机票的剩余数量等信息,可快速的帮乘客订到想 ...查看


  • 航班信息的管理
  • 成 绩 评 定 表 课程设计任务书 目 录 一.题目概述(内容及要求) ............................... 2 二.功能分析 ........................................... ...查看


  • 民航售票系统课程设计报告
  • 2009-2010 学年<软件工程> 课程设计报告 学 院 专业.班级 姓 名 组 别 指导老师 小组成绩 ____________ 2010年 7 月 2 号 目录 1. 简介 2. 需求获取 2.1业务需求 2.2用户需求 ...查看


热门内容