《数据结构课程设计报告1.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告1.doc(32页珍藏版)》请在三一办公上搜索。
1、数据结构课程设计报告姓 名: 学 号: 班 级: 设计时间: 审阅教师: 目录第一章 设计目的3第二章 设计任务及要求4一、基本要求:4二、内容:4第三章 题目分析与解答5一、通讯录管理系统51)题目要求52)应用程序功能53)主要算法模块描述64)源程序代码9二、停车场管理系统161)题目要求16要求设计停车管理系统,实现车辆的进入、离开并根据停车时间计费。172)应用程序功能173)主要算法模块描述184)源程序代码18三、猴子选大王241)题目要求242)应用程序功能243)主要算法模块描述244)源程序代码25四、二叉树运算271)题目要求272)应用程序功能273)主要算法模块描述2
2、74)源程序代码27第四章 设计心得31第五章 参考文献32第一章 设计目的1、培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。2、培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。3、培养学生初步的软件设计及软件测试的能力。第二章 设计任务及要求一、 基本要求:学生必须仔细阅读数据结构课程设计指导书,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。课程设计按照教学要求需要一周时间完成,一周中每天
3、(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序15小时。根据设计报告要求编写设计报告,主要内容包括目的、意义、原理和实现方法简介、过程分析及说明、实验结果情况说明、结论。每个人必须有可运行的程序,学生能对自己的程序面对教师提问并能熟练地解释清楚,学生回答的问题和程序运行的结果作为评分的主要衡量标准;(周二下午开始逐一检查)二、 内容:本次课程设计完成如下模块(共11个模块,学生可以在其中至少挑选4个功能块完成,但有*号的模块是必须要选择的,多做可以加分)第三章 题目分析与解答一、 通讯录管理系统1) 题目要求通讯录一般包括通讯者的编号、姓名、性别、电话及地址
4、等信息,设计一个通讯录要求实现通讯者的插入、查询、删除、更新、排序操作。 struct node char num5; /编号 char name8; /姓名 char sex; /性别 char tel8; /电话 char address100; /地址;2) 应用程序功能明确用户的需求,如操作界面需求,系统功能需求,数据的具体流程等。添加界面:显示界面:删除界面:修改界面: 3) 主要算法模块描述 工作流程图:添加:添加通讯录记录显示:显示通讯录记录删除:删除通讯录记录查询:查询通讯录记录先选择查询方式,以姓名查询方式为例修改:修改通讯录记录4) 源程序代码#include #inclu
5、de#include typedef struct char score; /*编号*/char name10; /*姓名*/ char num15; /*号码*/ char email20;/*邮箱*/char age8;/*年龄*/char adds20;/*住址*/Person; Person pe80; int menu_select() char c; do system(cls); printf(tt *通讯录* n); printf(ttn); printf(tt 1. 添加记录 n); printf(tt 2. 显示记录 n); printf(tt 3. 删除记录 n); pr
6、intf(tt 4. 查询记录 n); printf(tt 5. 修改记录 n); printf(tt 6. 保存记录 n);printf(tt 0. 退出程序 n); printf(ttn); printf(tt请您选择(0-6):); c=getchar(); while(c6); return(c-0); int Input(Person per,int n) int i=0; char sign,x10; while(sign!=n&sign!=N) printf(t编号:); scanf(t%d,&pern+i.score); printf(t姓名:); scanf(t%s,pern
7、+i.name); printf(t年龄:); scanf(t%s,pern+i.age);printf(t电话号码:); scanf(t%s,pern+i.num); printf(t通讯住址:); scanf(t%s,pern+i.adds);printf(t电子邮箱:);scanf(t%s,pern+i.email);gets(x); printf(nt是否继续添加?(Y/N); scanf(t%c,&sign); i+; return(n+i); void Display(Person per,int n) int i; printf(-n); /*格式*/ printf(编号 姓名
8、年龄 电话号码 通讯地址 电子邮箱n); printf(-n); for(i=1;i1&i%10=0) printf(t-n); printf(t); system(pause); printf(t-n); printf(-n);system(pause); int Delete_a_record(Person per,int n) char s20; int i=0,j; printf(t请输入想删除记录中的名字:); scanf(%s,s); while(strcmp(peri.name,s)!=0&in) i+; if(i=n) printf(t通讯录中没有此人!n); return(n
9、); for(j=i;jn-1;j+) strcpy(perj.num,perj+1.num); strcpy(perj.name,perj+1.name); strcpy(perj.age,perj+1.age);strcpy(perj.adds,perj+1.adds);strcpy(perj.email,perj+1.email);perj.score=perj+1.score; printf(ttt已经成功删除!n); return(n-1); void Query_a_record(Person per,int n) int m;printf(tn请选择查询方式:n); printf
10、(tn); printf(t1-姓名 n); printf(t2-电话 n); printf(t3-地址 n); printf(t4-返回 n); printf(tn); printf(请选择:); scanf(%d,&m); while(m!=1&m!=2&m!=3&m!=4) printf(输入错误,请重新选择:);scanf(%d,&m);if(m=1)char s20; int i=0; printf(t请输入想查询的姓名:); scanf(t%s,s); while(strcmp(peri.name,s)!=0&in) i+; if(i=n) printf(t通讯录中没有此人!n);
11、 return; printf(t此人编号: %dn,peri.score);printf(t此人年龄: %sn,peri.age); printf(t电话号码: %sn,peri.num); printf(t通讯地址: %sn,peri.adds);printf(t电子邮箱: %sn,peri.email); ;if(m=2)char s20; int i=0; printf(t请输入想查询的电话:); scanf(t%s,s); while(strcmp(peri.num,s)!=0&in) i+; if(i=n) printf(t通讯录中没有此人!n); return; printf(t
12、此人编号: %dn,peri.score);printf(t此人姓名: %sn,peri.name);printf(t此人年龄: %sn,peri.age); printf(t通讯地址: %sn,peri.adds);printf(t电子邮箱: %sn,peri.email); ;if(m=3)char s20; int i=0; printf(t请输入想查询的地址:); scanf(t%s,s); while(strcmp(peri.adds,s)!=0&in) i+; if(i=n) printf(t通讯录中没有此人!n); return; printf(t此人编号: %dn,peri.s
13、core);printf(t此人姓名: %sn,peri.name);printf(t此人年龄: %sn,peri.age); printf(t电话号码: %sn,peri.num); printf(t电子邮箱: %sn,peri.email); ;void Change(Person per,int n) char s20; int i=0; printf(t请输入想修改的记录中的名字:); scanf(%s,s); while(strcmp(peri.name,s)!=0&in) i+; if(i=n) printf(t通讯录中没有此人!n); return; printf(t编号:);
14、scanf(t%d,&peri.score); printf(t姓名:); scanf(t%s,peri.name); printf(t年龄:); scanf(t%s,peri.age);printf(t电话号码:); scanf(t%s,peri.num); printf(t通讯住址:); scanf(t%s,peri.adds);printf(t电子邮箱:);scanf(t%s,peri.email);printf(t修改成功!);void WritetoText(Person per,int n) int i=0; FILE *fp; /*定义文件指针*/ char filename20
15、; /*定义文件名*/ printf(t保存到文件n); /*输入文件名*/ printf(t请输入所保存的文件名:); scanf(t%s,filename); if(fp=fopen(filename,w)=NULL) printf(t无法打开文件n); system(pause); return; fprintf(fp,*通讯录*n);fprintf(fp,编号 姓名 年龄 电话号码 通讯地址 电子邮箱n);fprintf(fp,-n);while(in) fprintf(fp,%-3dt%-6st%-3st%-13st%-20st%-20sn,peri.score,peri.name,
16、peri.age,peri.num,peri.adds,peri.email); i+; fprintf(fp,-n);fprintf(fp,*共有%d条记录*n,n); fclose(fp); /*关闭文件*/ printf(保存成功!n); void main() /*主函数*/ int n=0; for(;) switch(menu_select() case 1: printf(nt添加记录到通讯录n); /*添加记录*/ n=Input(pe,n); break; case 2: printf(nttt 通讯录记录表n); /*显示记录*/ Display(pe,n); break;
17、case 3: printf(nt从通讯录中删除记录n); n=Delete_a_record(pe,n); /*删除记录*/ printf(t); system(pause); break; case 4: printf(nt在通讯录中查找记录n); Query_a_record(pe,n); /*查找记录*/ printf(t); system(pause); break;case 5: printf(nt修改通讯录中的记录n); Change(pe,n); /*修改数据*/ printf(t); system(pause); break; case 6: printf(nt保存功能n);
18、 WritetoText(pe,n); /*保存数据*/ printf(t); system(pause); break; case 0: printf(ntt谢谢使用,再见!n); /*结束程序*/ printf(ntt); system(pause); exit(0); 二、 停车场管理系统1) 题目要求某停车场可以停放n辆汽车,该停车场只有一个大门, 每辆汽车离开停车场都要求之前的汽车必须先退出停车场为它让道,而后让道的汽车再次驶入停车场,停车场示意图如下:要求设计停车管理系统,实现车辆的进入、离开并根据停车时间计费。2) 应用程序功能 明确用户的需求,如操作界面需求,系统功能需求,数据
19、的具体流程等。运行时界面如下:车辆到达:车场信息:3) 主要算法模块描述4) 源程序代码#include#include#include#include #define MAX 10 /*车库容量*/ #define price 3 /*每车每时刻费用*/typedef struct node int num; int reachtime; int leavetime; CarNode; /*车辆信息结点*/ typedef struct NODE CarNode *stackMAX+1; int top; SeqStackCar; /*模拟车站*/typedef struct car Car
20、Node *data; struct car *next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模拟通道*/*-*/ /*函数声明部分*/ void InitStack(SeqStackCar *); /*初始化栈*/ int InitQueue(LinkQueueCar *); /*初始化便道*/ int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackC
21、ar *,LinkQueueCar *); /*车辆离开*/ void List(SeqStackCar,LinkQueueCar); /*显示存车信息*/ void PRINT(CarNode *p) ;/*-*/ void option() int i; char choice; printf(nnnn); printf( 停车场管理系统); printf(nnnn); printf(n*); printf(t1.车辆到达-1 2.车辆离开-2 3.车辆信息-3 4.退出程序-4); printf(n*); printf(nnnt 是否进入该系统(y/n)? ); choice=getch
22、ar(); if(choice=N|choice=n) exit(0); void main() SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch; system(graftabl 936); option();InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) system(cls); printf(nnttt1. 车辆到达 请选择 1); printf(nnttt2. 车辆离开 请选择 2); pr
23、intf(nnttt3. 车辆信息 请选择 3); printf(nnttt4. 退出程序 请选择 4); printf(nnttt现在请选择以上信息 : );while(1) scanf(%d,&ch); printf(n); if(ch=1&chtop=0; for(i=0;istacks-top=NULL; int InitQueue(LinkQueueCar *Q) /*初始化便道*/ Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; retur
24、n(1); else return(-1); void PRINT(CarNode *p) /*打印出站车的信息*/ int A1,A2; printf(nttt请输入离开时间: ); scanf(%d,&(p-leavetime); printf(nttt离开车辆的车牌号: %d,p-num); printf(nnttt离开车辆到达时间: %d ,p-reachtime); printf(nnttt离开车辆离开时间: %d,p-leavetime); A1=p-reachtime; A2=p-leavetime; printf(nnttt停车场管理费用: %d,(A2-A1)*price);
25、 free(p); int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(ttt请输入到达车辆车牌号: ); scanf(%d,&(p-num); if(Enter-toptop+; printf(nttt该车辆在停车场的位置是: %dn,Enter-top); printf(nttt请输入该车辆到达的时间: ); scanf(%d,&(p-reachtime); Ente
26、r-stackEnter-top=p; return(1); else /*车场已满,车进便道*/ printf(nttt停车场已满 该车辆需在便道上等待!); getch(); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1); void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*车辆离开*/ int i, room; CarNode *p,*t; QueueNod
27、e *q; /*判断车场内是否有车*/ if(Enter-top0) /*有车*/ while(1) /*输入离开车辆的信息*/ printf(ttt停车场里停放的车辆总数: %d,Enter-top); printf(nnttt请输入要离开车辆的位置: ); scanf(%d,&room); if(room=1&roomtop) break; while(Enter-toproom) /*车辆离开*/ Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; while(Temp-top=1) Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-; PRINT(p);/*判断通道上是否有车及车站是否已满*/ if(W-head!=W-rear)&Enter-tophead-next; t=q-data; Enter-top+; printf(nntt