《程序设计》
课程设计说明书
课程名称 《程序设计》
设计题目 飞机航班订票系统 专业班级 计算机应用技术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);