数据结构课程设计报告1.doc_第1页
数据结构课程设计报告1.doc_第2页
数据结构课程设计报告1.doc_第3页
数据结构课程设计报告1.doc_第4页
数据结构课程设计报告1.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计报告姓 名: 学 号: 班 级: 设计时间: 审阅教师: 目录第一章 设计目的3第二章 设计任务及要求4一、基本要求:4二、内容:4第三章 题目分析与解答5一、通讯录管理系统51)题目要求52)应用程序功能53)主要算法模块描述64)源程序代码9二、停车场管理系统161)题目要求16要求设计停车管理系统,实现车辆的进入、离开并根据停车时间计费。172)应用程序功能173)主要算法模块描述184)源程序代码18三、猴子选大王241)题目要求242)应用程序功能243)主要算法模块描述244)源程序代码25四、二叉树运算271)题目要求272)应用程序功能273)主要算法模块描述274)源程序代码27第四章 设计心得31第五章 参考文献32第一章 设计目的1、培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。2、培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。3、培养学生初步的软件设计及软件测试的能力。第二章 设计任务及要求一、 基本要求:学生必须仔细阅读数据结构课程设计指导书,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。课程设计按照教学要求需要一周时间完成,一周中每天(按每周5天)至少要上3-4小时的机来调试c语言设计的程序,总共至少要上机调试程序15小时。根据设计报告要求编写设计报告,主要内容包括目的、意义、原理和实现方法简介、过程分析及说明、实验结果情况说明、结论。每个人必须有可运行的程序,学生能对自己的程序面对教师提问并能熟练地解释清楚,学生回答的问题和程序运行的结果作为评分的主要衡量标准;(周二下午开始逐一检查)二、 内容:本次课程设计完成如下模块(共11个模块,学生可以在其中至少挑选4个功能块完成,但有*号的模块是必须要选择的,多做可以加分)第三章 题目分析与解答一、 通讯录管理系统1) 题目要求通讯录一般包括通讯者的编号、姓名、性别、电话及地址等信息,设计一个通讯录要求实现通讯者的插入、查询、删除、更新、排序操作。 struct node char num5; /编号 char name8; /姓名 char sex; /性别 char tel8; /电话 char address100; /地址;2) 应用程序功能明确用户的需求,如操作界面需求,系统功能需求,数据的具体流程等。添加界面:显示界面:删除界面:修改界面: 3) 主要算法模块描述 工作流程图:添加:添加通讯录记录显示:显示通讯录记录删除:删除通讯录记录查询:查询通讯录记录先选择查询方式,以姓名查询方式为例修改:修改通讯录记录4) 源程序代码#include #include#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); printf(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+); 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(编号 姓名 年龄 电话号码 通讯地址 电子邮箱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(,s)!=0&in) i+; if(i=n) printf(t通讯录中没有此人!n); return(n); for(j=i;jn-1;j+) strcpy(perj.num,perj+1.num); strcpy(,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(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(,s)!=0&in) i+; if(i=n) printf(t通讯录中没有此人!n); 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此人编号: %dn,peri.score);printf(t此人姓名: %sn,);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.score);printf(t此人姓名: %sn,);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(,s)!=0&in) i+; if(i=n) printf(t通讯录中没有此人!n); return; printf(t编号:); scanf(t%d,&peri.score); printf(t姓名:); scanf(t%s,); 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; /*定义文件名*/ 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.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;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); writetotext(pe,n); /*保存数据*/ printf(t); system(pause); break; case 0: printf(ntt谢谢使用,再见!n); /*结束程序*/ printf(ntt); system(pause); exit(0); 二、 停车场管理系统1) 题目要求某停车场可以停放n辆汽车,该停车场只有一个大门, 每辆汽车离开停车场都要求之前的汽车必须先退出停车场为它让道,而后让道的汽车再次驶入停车场,停车场示意图如下:要求设计停车管理系统,实现车辆的进入、离开并根据停车时间计费。2) 应用程序功能 明确用户的需求,如操作界面需求,系统功能需求,数据的具体流程等。运行时界面如下:车辆到达:车场信息: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 carnode *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 *,seqstackcar *,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=getchar(); 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); printf(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; return(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); 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); enter-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; queuenode *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(nnttt便道的%d号车进入车场第%d位置.,t-num,enter-top); printf(nnttt请输入现在的时间:); scanf(%d,&(t-reachtime); w-head-next=q-next; if(q=w-rear) w-rear=w-head; enter-stackenter-top=t; free(q); else printf(nnttt便道里没有车.n); else printf(nnttt车场里没有车.); /*没车*/ void list1(seqstackcar *s) /*列表显示车场信息*/ int i; if(s-top0) /*判断车站内是否有车*/ printf(nttt车场:); printf(nnttt位置 到达时间 车牌号n); for(i=1;itop;i+) printf(%26d,i); printf(%6d,s-stacki-reachtime); printf(%10d,s-stacki-num); printf(n); else printf(nttt车场里没有车); void list2(linkqueuecar *w) /*列表显示便道信息*/ queuenode *p; p=w-head-next; if(w-head!=w-rear) /*判断通道上是否有车*/ printf(nttt等待车辆的号码为: ); while(p!=null) printf(%-10d,p-data-num); p=p-next; printf(n); else printf(nttt便道里没有车.); void list(seqstackcar s,linkqueuecar w) int flag,tag; flag=1; while(flag) printf(nttt请选择 1|2|3:); printf(nnttt1.车场nnttt2.便道nnttt3.返回nnttt); while(1) scanf(%d,&tag); if(tag=1|tag=3) break; else printf(nttt请选择 1|2|3:); switch(tag) case 1:list1(&s);break; /*列表显示车场信息*/ case 2:list2(&w);break; /*列表显示便道信息*/ case 3:flag=0;break; default: break; 三、 猴子选大王1) 题目要求任务:一堆猴子都有编号,编号是1,2,3 .m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。要求:输入数据:输入m,n m,n 为整数,ndata = 1; for (i = 2; i data = i; p-next = q; p = q; p-next =(*l);void king(linklist *l, int n, int m) node *p, *q; int k; int j = 1; p = (*l); printf(n); for (; m 1; m-) k = 1; while (k != n) p = p-next; k+; printf(第%d个出队的是%d号猴子,n, j+, p-data); p-data = p-next-data; q = p-next; p-next = p-next-next; free(q); printf(n最终结果:大王是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论