数据结构课程设计报告

目 录

第一章 课程设计的目的和意义 ................................................................................ 1

第二章 需求分析 .................................................................... 错误!未定义书签。

第三章 系统设计 ...................................................................................................... 3

3.1 概要设计 .......................................................................................................... 3

3.2 详细设计 ...................................................................................................... 5

第四章 系统测试 ........................................................................................................ 5

4.1系统运行初始界面 ........................................................................................... 6

4.2录入航班、客户信息界面 ............................................................................... 6

4.3 查看所有航班信息界面 .............................................................................. 6

4.4 买票、退票界面 ............................................................................................ 7

第五章 心得体会 ...................................................................................................... 7

第六章 参考文献 ........................................................................................................ 8

致谢 ................................................................................................................................ 8

附录 ................................................................................................................................ 9

源程序: ................................................................................................................. 9

第一章 课程设计的目的和意义

《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。

学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:

一:了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 二:初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

三:提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

四:训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

五:锻炼动手操作能力,培养我们的创新思维能力。

从编写代码,到调试程序,再到运行程序,这是设计的最重要环节,它需要我们用逻辑思维将我们所学知识和实际相结合,并在对方案的分析过程中能够有所创新,从而使运行方案更严谨更简洁。

培养好良好的思维,便要将这种思维赋予实践,即动手操作能力。目前,市场上关于计算机运用、计算机软件和电子类相关专业的人才辈出,但毕业生在走进企业公司政府机构或研究单位之后,感觉到缺乏实际开发设计项目的经验,所以我们在课程设计中能够多训练,提高我们将知识融会贯通的能力

六: 培养我们严谨治学的态度,以及认清自己学知识、运用知识的能力。 不管是编写代码,调试代码,还是运行代码,需要我们严谨的思维和态度去对待,这样才能真正起到此设计的作用。我们也能够在设计中认识到自己对数据结构这门课程学习的欠缺,对以后我们的学习有着很大的指导和帮助。

学习课程设计,编写程序,将数据结构和算法相结合,了解到数据结构、算法和 1

程序之间的关系,更学习到数据结构和算法的最佳定位

第二章 需求分析

一个飞机订票系统,自然就必须拥有查询航班信息以及客户订票信息的功能,然后还必须拥有退票功能,一旦客户因个人问题不能及时赶到机场,则客户需要进行退票手续,或者是因为航空公司的问题导致客户需要退票。这时就是考验退票功能是否完善了。

通过同组成员间的讨论,我们为我们的系统设计了如下功能:

录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)

查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。修改航班信息:当航班信息改变可以修改航班数据文件

要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;

以下为系统总框图:

2

包括以下5个功能:

1.录入航班信息

2.查看所有航班信息

3.查找航班信息

4.保存信息

5.读取信息

其中查找航班信息中有:买票、退票功能,以及查看操作信息。

第三章 系统设计

3.1 概要设计

通过小组成员的商议,我们大致描绘了该系统应该拥有的功能,以及怎样使得该系统操作起来更方便。该系统主要需要实现以下几个功能:

1. 航班、客户的信息的录入以及保存

数据结构课程设计报告

3

2. 查询航班信息功能以及买票、退票功能

在编写程序过程中,运用了c语言知识以及数据结构知识。

为了方便买票,我们将买票与退票操作放在查找航班信息模块中,客户在查找航班信息时,如果查询到自己要坐的航班时就可以直接进行买票操作,而无需重新回到买票菜单界面,从而提高效率。同样,对于客户要求退票,我们也可以通过查找到该客户的订票信息后进行退票操作。

买票操作流程图如下:

在查找航班信息这块,我们设计了按航班起飞时间,航班号,航班目的地三种方式进行查询,使查看信息更明了。

数据结构课程设计报告

数据结构课程设计报告

4

3.2 详细设计

买票功能主要是通过比对输入的信息是否与系统录入的航班和客户信息相吻合,如果相同则提示该航班可以进行买票操作,如果不同则提示没有该航班的记录,请核对后再输入。以下是退票这一模块的源程序:

void back()

{

char id[20];

int i,w=0;

char nam[10];

printf("请输入客户名:")

scanf("%s",&nam);

for(i=0;i<N;i++)

if(pe[i].tag!=0)

{

if(strcmp(nam,pe[i].name)==0)

{

printf("航班代号:");

scanf("%s",id);

if(strcmp(id,p[i].ID)==0)

{

p[i].Buy_num--;

pe[i].buynum--;

if(pe[i].buynum==0)

pe[i].tag=0;

printf("退票成功");

w=1;

}

}

数据结构课程设计报告

5

} } if(w==0) printf("退票失败"); getchar(); printf("按任意键继续..."); scanf("%c",&a); menu1();

第四章 系统测试

4.1系统运行初始界面

经过几天不停的查找资料然后编写程序,最终经过调试,程序无误,进入系统后的操作界面如下图:

图4-1 系统运行界面

4.2录入航班、客户信息界面 进入系统后由于初始运行没录入信息,所以应当先选择1选项,录入航班和客户信息

图4-2 录入航班信息

图4-3 录入用户信息

4.3 查看所有航班信息界面 为了能够让客户查看到所有航班的信息,我们设计了查看所有航班这一功能

6

图4-4 查看航班信息界面

4.4 买票、退票界面

图4-8 买票界面

图4-9 退票界面

}

第五章 心得体会

通过这次课程设计,我才深知数据结构灵活,对于相同的问题模型可以用多种不同的存储结构来实现。在刚刚结束的一个学期里,我对数据结构的学习才仅仅是个入门,通过这次的课程设计,我才发现自己在以往学习中的诸多问题,比如对队列的学习不够深入,只是局限于书本上的某一种队列的理论学习,对循环队列的学习和应用还远远不够,对于同一问题没有多角度的思考,仅仅局限于一种方法,根本没有思考是否还有别的更简单更快捷的方法,不能做到举一反三,还有太注重理论学习而忽视了上机实践,结果就是理论知识不扎实上机动手能力差,编译出现错误时不能很快的找出错误。在这次课设的编程过程中,我尽量把以往学过的知识全部用上,对于同一个问题从不同的角度考虑实现方法,所以我才发现了自己很多的问题,而且借此寒假,我会改正这些问题,并且深入学习数据结构和C++。在这次课程中,除了达到了课设目的,我想我最大的收获就是以上的发现并且能及时的解决。

数据结构是整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由哪些成分构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映

数据结构课程设计报告

7

数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。数据结构是数据存在的形式。数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。数据结构课程的主要目的是介绍一些常用的数据结构,阐明数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种数据结构,讨论对它们实行的各种运算的实现算法。

这次课程设计,通过自己掌握的知识以及查找资料总算是完成了,收获是有滴,努力是必须滴!

第六章 参考文献

[1]严蔚敏、吴伟民 .《数据结构(C语言版)》 清华大学出版社

[2]严蔚敏、吴伟民、米宁.《数据结构题集(C语言版)》清华大学出版社

[3]谭浩强、张基温 《C语言程序设计教程》 高等教育出版社

[4]苏仕华 等 《数据结构课程设计》 机械工业出版社

致谢

在这次课程设计的撰写过程中,我得到了许多人的帮助。首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。

在学习中,老师严谨的治学态度、丰富渊博的知识、敏锐的学术思维、精益求精的工作态度以及侮人不倦的师者风范是我终生学习的楷模,老师们的高深精湛的造诣与严谨求实的治学精神,将永远激励着我。这三年中还得到众多老师的关心支持和帮助。在此,谨向老师们致以衷心的感谢和崇高的敬意!

其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。同时,感谢校方给予我这样一次机会,能够独立地完成一个课程设计,并在这个过程当中,给予我们各种方便,使我们在这学期快要结课的时候,能够将学到的只是应用到实践中,增强了我们实践操作和动手应用能力,提高了 8

独立思考的能力。

感谢所有任课老师和所有同学在这两年来给自己的指导和帮助,是他们教会了我专业知识,教会了我如何学习。正是由于他们,我才能在各方面取得显著的进步,在此向他们表示我由衷的谢意。

附录

源程序:

#include <stdio.h>

#include <string.h>

#include"windows.h"

#define N 2 //每次输入两次航班信息或用户信息

char a;

typedef struct plane

{

char ID[10]; //航班代号

char Start_Place[10];

char End_Place[10];

float price;

int Buy_num;

int Max_num;

char time[20];

}PLANE;

PLANE p[N];

void menu();

void menu1();

typedef struct person

{

char name[10];

int tag;

int ID;

int buynum;

char planenum[10];

}Person;

Person pe[N];

void browse()

{

int i,w;

printf("1.查看航班信息\n2.查看用户信息\n");

printf("请输入要进行操作的序号>");

scanf("%d",&w);

9

if(w==1)

{printf("浏览所有航班信息:\n");

printf("航班代号\t起始地点\t目的地\t票价\t已售\t乘客容量\t起飞时间\n"); for(i=0;i<N;i++)

{

printf("%s\t\t%s\t\t%s\t%7.2f\t%d\t%d\t\t%s\n",p[i].ID,p[i].Start_Place,p[i].End_Place,p[i].price,p[i].Buy_num,p[i].Max_num,p[i].time);

}

}

if(w==2)

{

printf("浏览用户信息:\n");

printf("用户名\t\t证件号\t\t购票数量\t\t航班信息\t\t");

for(i=0;i<N;i++)

{if(pe[i].tag==1)

printf("%s\t\t%d\t\t%d\t\t %s\t\t\n",pe[i].name,pe[i].ID,pe[i].buynum,pe

[i].planenum);

else if(pe[i].tag==0)

printf("%s\t\t%d\t\t0\t\t 0 \t\t\n",pe[i].name,pe[i].ID); }

}

else if(w!=1&&w!=2)

printf("您输入有误!");

getchar();

printf("按任意键继续...");

scanf("%c",&a);

menu();

}

void count()

{

char a[10];

int i,num=0;

printf("请您输入目的地:");

scanf("%s",a);

printf("航班代号\t起始地点\t目的地\t票价\t已售\t乘客容量 时间\n"); for(i=0;i<N;i++)

{

if(strcmp(a,p[i].End_Place)==0)

{

num++;

printf("%s\t %s\t%s\t%7.2f\t%d\t%d\t%d\n",p[i].ID,p[i].Start_Place,p[i].End_Pla 10

ce,p[i].price,p[i].Buy_num,p[i].Max_num,p[i].time); }

}

printf("\n飞往该目的地的航班有%d条!\n",num); getchar();

printf("按任意键继续....");

scanf("%c",&a);

menu1();

}

void order()

{

int i,j;

PLANE temp;

for(i=0;i<N;i++)

{

for(j=i;j<N;j++)

{

if(strcmp(p[i].time,p[j].time)>0) {

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

}

browse();

}

void enter()

{

int i,a;

system( "cls" ); printf("1.输入航班信息\n2.输入用户信息\n"); printf("请输入要进行的操作序号>");

scanf("%d",&a);

if(a==1){ printf("请您输入航班信息:\n");

for(i=0;i<N;i++)

{

printf("航班代号:");

scanf("%s",p[i].ID);

printf("起飞地点:");

scanf("%s",p[i].Start_Place);

printf("目的地点:");

11 //清屏

scanf("%s",p[i].End_Place);

printf("票价:");

scanf("%f",&p[i].price);

p[i].Buy_num=0;

printf("乘客容量:");

scanf("%d",&p[i].Max_num);

printf("起飞时间:");

scanf("%s",p[i].time);

}}

if(a==2)

{

for(i=0;i<N;i++)

{pe[i].tag=0;

printf("请输入客户姓名:");

scanf("%s",&pe[i].name);

printf("请输入证件号:");

scanf("%d",&pe[i].ID);

}

}

getchar();

printf("按任意键继续...");

scanf("%c",&a);

menu();

}

void buy()

{

char t[20],place[20];

int i,w=0,num;

char nam[10];

printf("请输入客户名字:");

scanf("%s",&nam);

for(int k=0;k<2;k++)

if(strcmp(nam,pe[k].name)==0)

{

pe[k].tag=1;

printf("时间:");

scanf("%s",t);

printf("地点:");

scanf("%s",place);

for(i=0;i<N;i++)

{

if(strcmp(t,p[i].time)==0&&strcmp(place,p[i].End_Place)==0) {

w=1;

12

printf("%s %s %s %7.2f %d %d %s\n",p[i].ID,p[i].Start_Place,p[i].End_Place,p[i].price,p[i].Buy_num,p[i].Max_num,p[i].time);

printf("买几张票:");

scanf("%d",&num);

if(p[i].Buy_num+num>p[i].Max_num)

{

printf("当前余票不足,只剩%d张",p[i].Max_num-p[i].Buy_num);

}

else

{

p[i].Buy_num=p[i].Buy_num+num;

pe[k].buynum=p[i].Buy_num;

strcpy(pe[k].planenum,p[i].ID);

printf("购票成功!");

}

}

}

if(w==0)

printf("没有您要的票!");

getchar();

if(strcmp(nam,pe[k].name)!=0)

printf("您输入的姓名有误!");}

printf("按任意键继续...");

scanf("%c",&a);

menu1();

}

void back()

{

char id[20];

int i,w=0;

char nam[10];

printf("请输入客户名:");

scanf("%s",&nam);

for(i=0;i<N;i++)

if(pe[i].tag!=0)

{

if(strcmp(nam,pe[i].name)==0)

{

printf("航班代号:");

scanf("%s",id);

if(strcmp(id,p[i].ID)==0)

13

{

p[i].Buy_num--;

pe[i].buynum--;

if(pe[i].buynum==0)

pe[i].tag=0;

printf("退票成功");

w=1;

}

}

}

if(w==0)

printf("退票失败");

getchar();

printf("按任意键继续...");

scanf("%c",&a);

menu1();

}

void bowse_time()

{

char a[20];

int i,w=0;

printf("请您输入要查询的飞机起飞时间:");

scanf("%s",a);

printf("航班代号\t起始地点\t目的地\t票价\t已售\t乘客容量 时间\n"); for(i=0;i<N;i++)

{

if(strcmp(a,p[i].time)==0)

{

w=1;

printf("%s\t\t%s\t\t%s\t%7.2f\t%d\t%d\t%s\n",p[i].ID,p[i].Start_Place,p[i].End_Place,p[i].price,p[i].Buy_num,p[i].Max_num,p[i].time);

}

}

if(w==0)

printf("没有您想查询的航班!\n");

getchar();

printf("按任意键继续...");

scanf("%c",&a);

menu1();

}

void bowse_palce()

{

char a[10];

14

int i,w=0;

printf("请您输入要查询的飞机目的地:");

scanf("%s",a);

printf("航班代号\t起始地点\t目的地\t票价\t已售\t乘客容量 时间\n"); for(i=0;i<N;i++)

{

if(strcmp(a,p[i].End_Place)==0)

{

w=1;

printf("%s\t\t%s\t\t%s\t%7.2f\t%d\t%d\t%s\n",p[i].ID,p[i].Start_Place,p[i].End_Place,p[i].price,p[i].Buy_num,p[i].Max_num,p[i].time);

}

}

if(w==0)

printf("没有您想查询的航班!\n");

getchar();

printf("按任意键继续...");

scanf("%c",&a);

menu1();

}

void bowse_ID()

{

char a[10];

int i,w=0;

printf("请您输入要查询的飞机航班号:");

scanf("%s",a);

printf("航班代号\t起始地点\t目的地\t票价\t已售\t乘客容量 时间\n"); for(i=0;i<N;i++)

{

if(strcmp(a,p[i].ID)==0)

{

w=1;

printf("%s\t\t%s\t\t%s\t%7.2f\t%d\t%d\t%s\n",p[i].ID,p[i].Start_Place,p[i].End_Place,p[i].price,p[i].Buy_num,p[i].Max_num,p[i].time);

}

}

if(w==0)

printf("没有您想查询的航班!\n");

getchar();

printf("按任意键继续...");

scanf("%c",&a);

menu1();

15

}

void menu1()

{

int n,w1;

do

{

system( "cls" ); //清屏

puts("\t\t\t\t飞机售票操作\n\n");

puts("\t\t*********************MENU*********************\n\n"); puts("\t\t\t\t1.买票");

puts("\t\t\t\t2.退票");

puts("\t\t\t\t3.按起飞时间查询");

puts("\t\t\t\t4.按目的地查询");

puts("\t\t\t\t5.按航班代号查询");

puts("\t\t\t\t6.返回主菜单");

puts("\n\n\t\t**********************************************\n"); printf("请选择操作(1-6): [ ]\b\b");

scanf("%d",&n);

if(n<0||n>6) //对选择的数字作判断

{

w1=1;

printf("选择有误,请重新选择:");

getchar();

}

else w1=0;

} while(w1==1);

//选择功能

switch(n)

{

case 1:buy();break; //输入模块

case 2:back();break; //浏览模块

case 3:bowse_time();break; //查找模块

case 4:bowse_palce();break; //输入模块

case 5:bowse_ID();break; //浏览模块

case 6:menu();

}

}

int save() //保存函数,保存n个记录

{

int w=1;

int k=1;

FILE *fp,*fb;

int i;

16

system( "cls" );

if((fp=fopen("c:\\ticket.txt","wb"))==NULL) //以输出打开方式,在此前的记录被覆盖

{

printf("\n无记录!\n");

return NULL;

}

for(i=0;i<N;i++)

if(fwrite(&p[i],sizeof(struct plane),1,fp)!=1)

{

printf("输入有误!\n");

w=0;

}

if(w==1)

{

printf("成功输入!\n");

}

fclose(fp);

if((fb=fopen("c:\\Person.txt","wb"))==NULL) //以输出打开方式,在此前的记录被覆盖

{

printf("\n无记录!\n");

return NULL;

}

for(i=0;i<N;i++)

if(fwrite(&pe[i],sizeof(struct person),1,fb)!=1)

{

printf("输入有误!\n");

k=0;

}

if(k==1)

{

printf("成功输入!\n");

}

fclose(fb);

getchar();

printf("按任意键继续...");

scanf("%c",&a);

menu();

return 1;

}

int load() //加载记录或可以计算记录个数的函数 17

{

FILE *fp,*fb;

int i,w;

w=1;

//system( "cls" );

if((fp=fopen("c:\\ticket.txt","rb"))==NULL) //以输出打开方式,在此前的记录被覆盖

{

printf("\n无记录!\n");

w=0;

return NULL;

}

for(i=0;!feof(fp);i++)

{

fread(&p[i],sizeof(struct plane),1,fp);

}

fclose(fp);

if((fb=fopen("c:\\Person.txt","rb"))==NULL)

的记录被覆盖

{

printf("\n无记录!\n");

w=0;

return NULL;

}

for(i=0;!feof(fb);i++)

{

fread(&pe[i],sizeof(struct person),1,fb);

}

fclose(fb);

if(w==1)

printf("Load file ok!");

getchar();

printf("按任意键继续...");

scanf("%c",&a);

menu();

return 1; //返回记录个数

}

void main()

{

menu();

}

void menu()

18 //以输出打开方式,在此前

{

int n,w1;

do

{

system( "cls" ); //清屏

puts("\t\t\t\t飞机售票系统\n\n");

puts("\t\t*********************MENU*********************\n\n"); puts("\t\t\t\t1.录入");

puts("\t\t\t\t2.浏览");

puts("\t\t\t\t3.查找");

puts("\t\t\t\t4.保存");

puts("\t\t\t\t5.加载");

puts("\t\t\t\t6.退出");

puts("\n\n\t\t**********************************************\n"); printf("请选择操作(1-6): [ ]\b\b");

scanf("%d",&n);

if(n<0||n>6) //对选择的数字作判断

{

w1=1;

printf("输入有误,请重新输入!");

getchar();

}

else w1=0;

} while(w1==1);

//选择功能

switch(n)

{

case 1: enter();break; //输入模块

case 2: browse();break; //浏览模块

case 3: menu1();break; //查找模块

case 4: save();break; //保存模块

case 5: load();break; //加载模块

case 6: exit(0);

}

19

相关推荐