河北科技大学数据结构课程设计.docx
- 文档编号:4752449
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:22
- 大小:202.13KB
河北科技大学数据结构课程设计.docx
《河北科技大学数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《河北科技大学数据结构课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
河北科技大学数据结构课程设计
XX科技大学
课程设计报告
学生XX:
X振学号:
100702128
专业班级:
计算机101
课程名称:
数据构造
学年学期:
2012—2013学年第二学期
指导教师:
白云飞
2021年6月
课程设计成绩评定表
学生XX
X振
学号
100702128
成绩
专业班级
计算机101
起止时间
2013/6/24--2013/6/28
设计题目
航空订票系统
指
导
教
师
评
语
指导教师:
年月日
一、需求分析说明
航空售票系统的总体要求:
1.数据构造课程设计是综合运用数据构造课程中学到的几种典型数据构造,以及程序设计语言〔C语言〕,自行实现一个较为完整的应用系统的设计与开发
2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据构造在软件开发中的应用。
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
航空空订票系统:
〔1〕熟练掌握链表存储构造及其建立过程和常用操作;
〔2〕熟练掌握队列的建立过程和常用操作;
〔3〕学会自己调试程序的方法并掌握一定的技巧。
4.每条航线所涉及的信息有:
终点站名、航班号、飞机号、飞行日〔星期几〕、乘员定额、余票量、已订票的客户〔包括XX、订票量、舱位等级1,2或3〕以及等候替补的客户〔包括XX、所需票量〕;
5.全部数据可以只放在内存中;
6.系统能实现的操作和功能如下:
a)浏览航线信息:
可以根据需要浏览当前所有航线的信息。
b)浏览订票客户信息:
可以根据需要查看订票客户的信息及订票信息。
c)查询航线:
根据旅客提出的终点站名输出以下信息:
航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
d)承办订票业务:
根据客户提出的要求〔航班号、订票数额〕查询该航班票额情况,假设尚有余票,那么为客户办理订票手续,
输出座位号;假设已满员或余票额少于定票额,那么需重新询问客户要求。
假设需要,可登记排队候补;
e)退票业务:
根据客户提供的情况〔日期、航班〕,为客户办理退票手续,然后查询该航班是否有人排队候补,首先询
问排在第一的客户,假设所退票额能满足他的要求,那么为他办理订票手续,否那么依次询问其他排队候补的客户。
f)录入和修改航班业务:
根据机场要求增加航班或对航班的航班号、飞机号、星期几飞行等信息进展更新。
二、概要设计说明
系统构造图:
航空售票系统抽象数据类型定义为:
ADTairplanelist
{
数据对象:
D={A[i]|A[i]∈Integer,i=1,2,…,n,n>=0}
数据关系:
根本操作:
}
#defineMAXSIZE10/*定义航线量的最大值*/
intlength=3;//当前航班数
charhangbanhao[10];//航班号
inthbh_xiabiao=0;//航班号的下标即air数组的下标
voiddisplay(structairline*info)/*打印每条航线的根本信息*/
voidlist()/*打印全部航线信息*/
voidsearch()/*根据客户提出的终点站名输出航线信息*/
structairline*find()/*根据系统提出的航班号查询并以指针形式返回*/
voidprtlink()/*打印订票乘员域的客户信息*/
linklist*insertlink(linklist*head,intamount,charname[],intgrade)/*增加订票乘员域的客户信息*/
linkqueueappendqueue(linkqueueq,charname[],intamount)/*增加排队等候的客户域*/
voidorder()/*办理订票业务*/
voidreturn_tkt()/*退票模块*/
voidchange()/*录入和修改航班信息*/
intmenu_select()/*菜单界面*/
三、详细设计说明
1.主函数模块
首先调用menu_select()函数显示菜单界面。
根据用户选择的效劳转入相应的处理函数。
2.浏览航班信息子模块
通过调用display〔〕函数打印当前全部的航班信息,流程图如图二。
3.浏览已订票客户子模块
通过调用find〔〕函数,浏览已订票客户信息,流程图如图三
4.查询航线子模块
根据客户提出的终点站名,调用find〔〕函数寻找航线信息,调用list〔〕函数输出航线信息,流程图如图四。
5.办理订票业务子模块
根据客户提供的航班号进展查询航线信息,假设客户订票额超过乘员定票总额,退出。
假设客户订票额末超过余票量,订票成功并登记信息,在订票乘员域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,那么在等候队列增加该客户的订票信息,流程图如图五。
6.录入和修改航班信息子模块
根据机场要求增加航班或对航班的航班号、飞机号、星期几飞行等信息进展更新,流程图如图六。
7.办理退票业务子模块
四、调试分析
我遇到的问题:
●getchar()与getch()的区别
由于对这两个函数的区别没有搞懂致使在程序调试中经常出现“感觉没有输入〞,却又信息输入的情况。
●c语言的语法与其他语言的混淆
由于忘记了一些c语言的标准使得在调试过程中一些错误没有发现。
例如,调用函数时,数组只需要传递数组名即可;字符‘0’和整形的0是不同的文明不可以直接对其画等号。
字符串复制需要用strcpy()函数等问题。
●出现溢出错误
为了修正这些溢出错误,消耗了大量的时间,修正解释之后再看源程序,才发现原来只是因为开场的函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了后期大量的纠错工作,
●空指针问题
在函数调用时经常出现返回的空指针,然而还使其指向某个变量,致使出现错误。
五、用户使用说明
运行后按照提示,根据需要选择不同的业务运行状态如图八、图九所示。
如果不小心未按照提示正确操作,程序也不会出错——或者让用户重新输入或者返回主菜单。
六、课程设计总结
经过这次课程设计,我对调试掌握的更加熟练了,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,意识到了程序语言的标准性以及我们在编程时要有严谨的态度,同时在写程序时如果加一定量的注释,既增加了程序的可读性,也可以使自己在读程序时更容易。
掌握学习了c语言中的几个细节问题。
改变了之前单纯c编程的思维,增加了数据类的定义与算法设计,使我直观的理解数据构造书中的线性表,队列。
七、测试结果
八、参考书目
[1]严蔚敏,吴伟民.数据构造〔C语言版〕.:
清华大学1997.4
[2]李春葆.数据构造——习题与解析.:
清华大学,2021
[3]MarkAllenWeiss.DataStructuresandAlgorithmAnalysisinC:
SecondEdition.NewYork:
MITPress,2007
[4]郭翠英.C语言课程设计案例精编.:
中国水利,2021
附录程序源代码
/*航空票务管理系统源代码*/
#include
#include
#include
#defineMAXSIZE10/*定义航线量的最大值*/
intlength=3;//当前航班数
charhangbanhao[10];//航班号
inthbh_xiabiao=0;//航班号的下标即air数组的下标
typedefstructwat_ros
{charname[10];/*XX*/
intreq_amt;/*订票量*/
structwat_ros*next;
}qnode,*qptr;
typedefstructpqueue
{qptrfront;/*等候替补客户域的头指针*/
qptrrear;/*等候替补客户域的属指针*/
}linkqueue;
typedefstructord_ros
{charname[10];/*客户XX*/
intord_amt;/*订票量*/
intgrade;/*舱位等级*/
structord_ros*next;
}linklist;
structairline
{charter_name[10];/*终点站名*/
charair_num[10];/*航班号*/
charplane_num[10];/*飞机号*/
charday[7];/*飞行周日〔星期几〕*/
inttkt_amt;/*乘员定额*/
inttkt_sur;/*余票量*/
linklist*order;/*乘员域,指向乘员链表的头指针*/
linkqueuewait;/*等候替补的客户域,分别指向排队等候队头队尾的指针*/
}lineinfo;
structairlineair[MAXSIZE]={{"beijing","1","B8571","SUN",50,50},
{"shanghai","2","S1002","MON",100,100},
{"london","3","L1003","FRI",80,80}};/*初始化航线信息*/
structairline*start;
voiddisplay(structairline*info)/*打印每条航线的根本信息*/
{printf("%8s\t%3s\t%s\t%4s\t\t%3d\t%10d\n",info->ter_name,info->air_num,info->plane_num,info->day,info->tkt_amt,info->tkt_sur);
}
voidlist()/*打印全部航线信息*/
{structairline*info;
inti=0;
info=start;
printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");
while(i display(info); info++; i++; } printf("\n\n"); } voidsearch()/*根据客户提出的终点站名输出航线信息*/ {structairline*info,*find(); charname[10]; inti=0,flag=0; info=start; printf("请输入终点站名: "); scanf("%s",name); while(i if(! strcmp(name,info->ter_name)) { printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n"); display(info); flag=1; } info++; i++; } if(flag==0) printf("对不起,该航线未找到! \n"); else{ //printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n"); //display(info); } } structairline*find()/*根据系统提出的航班号查询并以指针形式返回*/ {structairline*info; info=start; printf("请输入航班号: "); scanf("%s",hangbanhao); while(hbh_xiabiao if(! strcmp(hangbanhao,info->air_num))returninfo; info++; //if(info==NULL)break; hbh_xiabiao++; } returnNULL; } voidprtlink() /*打印订票乘员域的客户信息*/ {linklist*p; structairline*info; info=find(); if(info==NULL)//说明没有该航线 { printf("对不起,该航线末找到! \n"); return; } p=info->order; if(p! =NULL){ printf("客户XX订票数额舱位等级\n"); while(p){ printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade); p=p->next; } } else printf("该航线没有客户信息! ! \n"); } linklist*insertlink(linklist*head,intamount,charname[],intgrade)/*增加订票乘员域的客户信息*/ {linklist*p1,*new; p1=head; new=(linklist*)malloc(sizeof(linklist)); if(! new){printf("\nOutofmemory! ! \n");returnNULL;} strcpy(new->name,name);//字符的复制 new->ord_amt=amount; new->grade=grade; new->next=NULL; if(head==NULL)/*假设原无订票客户信息*/ {head=new;new->next=NULL;} else head=new; new->next=p1; returnhead; } linkqueueappendqueue(linkqueueq,charname[],intamount)/*增加排队等候的客户域*/ {qptrnew; new=(qptr)malloc(sizeof(qnode)); strcpy(new->name,name); new->req_amt=amount; new->next=NULL; if(q.front==NULL)/*假设原排队等候客户域为空*/ q.front=new; else q.rear->next=new; q.rear=new; returnq; } voidorder() /*办理订票业务*/ {structairline*info; intamount,grade; charname[10]; info=start; if(! (info=find())) { printf("对不起,该航线末找到! \n"); return; }/*根据客户提供的航班号进展查询,如为空,退出该模块*/ printf("请输入你订票所需要的数量: "); scanf("%d",&amount); if(amount>info->tkt_amt)/*假设客户订票额超过乘员定票总额,退出*/ {printf("\n对不起,您输入的票的数量已经超过乘员定额! "); return; } if(amount<=info->tkt_sur)/*假设客户订票额末超过余票量,订票成功并等记信息*/ { inti; printf("请输入您的XX〔订票客户〕: "); scanf("%s",name); do{ printf("请输入%s票的舱位等级(1-3): ",name); scanf("%d",&grade); }while(grade>3||grade<0); info->order=insertlink(info->order,amount,name,grade);/*在订票乘员域中添加客户信息*/ for(i=0;i printf("%s的座位号是: %d\n",name,info->tkt_amt-info->tkt_sur+i+1); info->tkt_sur-=amount;/*该航线的余票量应减掉该客户的订票量*/ printf("\n祝您乘坐愉快! \n"); } else/*假设满员或余票额少于订票额,询问客户是否需要进展排队等候*/ {charr; printf("\n已经没有更多的票,您需要排队等候吗? (Y/N)"); r=getch(); printf("%c",r); if(r=='Y'||r=='y') {printf("\n请输入您的XX〔排队订票客户〕: "); scanf("%s",name); info->wait=appendqueue(info->wait,name,amount);/*在排队等候乘员域中添加客户信息*/ printf("\n注册成功! \n"); } elseprintf("\n欢送您下次再次订购! \n"); } } voidreturn_tkt() /*退票模块*/ {structairline*info; qnode*t,*back,*f,*r; intgrade; linklist*p1,*p2,*head; charcusname[10]; if(! (info=find())){ printf("对不起,该航线末找到! \n"); return;/*调用查询函数,根据客户提供的航线进展搜索*/ } head=info->order; p1=head; printf("请输入你的XX〔退票客户〕: "); scanf("%s",cusname); while(p1! =NULL){/*根据客户提供的XX到订票客户域进展查询*/ if(! strcmp(cusname,p1->name))break; p2=p1;p1=p1->next; } if(p1==NULL){printf("对不起,你没有订过票! \n");return;}/*假设未找到,退出本模块*/ else{/*假设信息查询成功,删除订票客户域中的信息*/ if(p1==head)head=p1->next; elsep2->next=p1->next; info->tkt_sur+=p1->ord_amt; grade=p1->grade; printf("%s成功退票! \n",p1->name); free(p1); } info->order=head;/*重新将航线域指向订票单链表的头指针*/ f=(info->wait).front;/*f指向排队等候队列的头结点*/ r=(info->wait).rear;/*r指向排队等候队列的尾结点*/ t=f;/*t为当前满点条件的排队候补域*/ while(t) { if(info->tkt_sur>=info->wait.front->req_amt){/*假设满足条件者为头结点*/ inti; info->wait.front=t->next; printf("%s订票成功! \n",t->name); for(i=0;i printf("%s的座位号是: %d\n",t->name,(info->tkt_sur)-i); info->tkt_sur-=t->req_amt; info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到订票客户链表中*/ free(t); break; } back=t;t=t->next; if((info->tkt_sur)>=(t->req_amt)&&t! =NULL)/*假设满足条件者不为头结点*/ {inti; back->next=t->next; printf("%s订票成功! \n",t->name); for(i=0;i printf("<%s>'sseatnumberis: %d\n",t->name,(info->tkt_sur)-i); info->tkt_sur-=t->req_amt; info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到订票客户链表中*/ free(t);break; } if(f==r)break; } } voidchange() { inttype; structairline*info; do{ printf("1.录入航班请按1\n"); printf("2.修改航班请按2\n"); scanf("%d",&type); }while(type! =1&&type! =2); if(type==1) { if(length>MAXSIZE-1) { printf("本机场最多可容纳%d个航班",MAXSIZE); return; } //scanf("%s",hangbanhao); if((info=find())! =NULL) { printf("该航班已存在,如需修改返回后按步骤重新操作"); return; } printf("\n开场录入\n"); printf("输入终点站名: "); scanf("%s",air[length].ter_name); //printf("请再次输入航班号: "); strcpy(air[length].air_num,hangbanhao); printf("输入飞机号: "); scanf("%s",air[length].plane_num); printf("飞行周日〔星期几〕: "); scanf("%s",air[length].day); printf("乘员定额: "); scanf("%d",&air[length].tkt_amt); air[length].tkt_sur=air[length].tkt_amt;//初始化时票数余额等于成员定额 length++; printf("\n\n录入完毕! ! "); } if(type==2)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 河北 科技大学 数据结构 课程设计