数据结构课程设计报告佘远程文档格式.docx

上传人:b****5 文档编号:20530351 上传时间:2023-01-23 格式:DOCX 页数:31 大小:204.25KB
下载 相关 举报
数据结构课程设计报告佘远程文档格式.docx_第1页
第1页 / 共31页
数据结构课程设计报告佘远程文档格式.docx_第2页
第2页 / 共31页
数据结构课程设计报告佘远程文档格式.docx_第3页
第3页 / 共31页
数据结构课程设计报告佘远程文档格式.docx_第4页
第4页 / 共31页
数据结构课程设计报告佘远程文档格式.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告佘远程文档格式.docx

《数据结构课程设计报告佘远程文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告佘远程文档格式.docx(31页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告佘远程文档格式.docx

charname[100];

charsex[100];

chariphone[100];

charaddr[100];

(2)用到的主要函数:

intmenu_select();

//菜单程序

linklistcreatelist(void);

//创建通讯录链表

voidinsertnode(linklisthead,listnode*p);

//插入通讯录链表结点

listnode*listfind(linklisthead);

//查找通讯录结点

voiddelnode(linklisthead);

//删除链表结点

voidprintlist(linklisthead);

//输出链表

voidchangelist(linklisthead);

//修改

voidmain()//主函数

(3)各个模块之间的关系:

主函数调用这会儿其他所有的函数

五、详细设计(要有注释)

/*主控菜单处理测试程序*/

#include<

stdio.h>

string.h>

stdlib.h>

#include<

conio.h>

//头文件代表什么意思?

typedefstruct{//通讯录结点类型

charnum[100];

//编号

charname[100];

//姓名

//性别

//电话

charaddr[100];

//地址

}datatype;

typedefstructnode{//结点类型定义

datatypedata;

//结点数据域

structnode*next;

//结点指针域

}listnode;

typedeflistnode*linklist;

linklisthead;

listnode*p;

//子函数的声明

//主函数

voidmain()

{

for(;

;

){

switch(menu_select())

{

case1:

printf("

***************************\n"

);

*通讯录链表信息的录入*\n"

****************************\n"

head=createlist();

//?

creatlist函数赋给头结点?

break;

case2:

*通讯录成员信息的插入*\n"

******************************************\n"

编号*姓名*性别*电话*地址*\n"

*******************************************\n"

p=(listnode*)malloc(sizeof(listnode));

//创建头结点

scanf("

%s%s%s%s%s"

p->

data.num,p->

data.name,p->

data.sex,p->

data.iphone,p->

data.addr);

insertnode(head,p);

case3:

*************************************\n"

*通讯录成员信息的查询*\n"

***************************************\n"

p=listfind(head);

if(p!

=NULL){

printf("

编号姓名性别联系电话地址\n"

----------------------------------------------------------------------------------\n"

%s,%s,%s,%s,%s\n"

}

else

查询的通讯录成员不存在!

\n"

case4:

************************************\n"

*通讯录成员信息的删除*\n"

delnode(head);

case5:

*通讯录链表成员信息的输出*\n"

printlist(head);

case6:

*通讯录链表成员信息的修改*\n"

changelist(head);

case0:

\t欢迎再次使用本程序!

return;

}

}

}

//菜单选择函数程序

intmenu_select()

intsn;

printf("

通讯录管理系统\n"

============================\n"

1.通讯录链表的建立\n"

2.通讯录结点的插入\n"

3.通讯录结点的查询\n"

4.通讯录结点的删除\n"

5.通讯录链表的输出\n"

6.通讯录链表的修改\n"

0.退出管理系统\n"

请选择0-6:

"

{

scanf("

%d"

&

sn);

if(sn<

0||sn>

6)

\n\t输入错误,重选0-6:

else

returnsn;

}

//用尾插法建立通讯录链表函数

linklistcreatelist(void)

{//尾插法建立带头结点通讯录链表算法

linklisthead=(listnode*)malloc(sizeof(listnode));

//创建头结点

listnode*p,*rear;

intflag=0;

//结束标志置0

rear=head;

//尾指针初始指向头结点

while(flag==0)

{p=(listnode*)malloc(sizeof(listnode));

//申请新结点

----------------------------------------------------------------\n"

scanf("

rear->

next=p;

//新结点连接到尾结点之后

rear=p;

//尾指针指向新结点

是否继续建立?

(1/0):

"

//这是什么意思啊?

flag);

//读入一个标志数据

next=NULL;

//终端结点指针域置空

returnhead;

//返回链表头指针

voidinsertnode(linklisthead,listnode*p)

listnode*p1,*p2;

p1=head;

p2=p1->

next;

while(p2!

=NULL&

&

strcmp(p2->

data.num)<

0)//strcmp函数,比较字符串

p1=p2;

//p1指向刚访问过的结点

p2=p2->

//p2指向表的下一个结点

p1->

//插入p所指向的结点

p->

next=p2;

//连接表中剩余部分

listnode*listfind(linklisthead)

listnode*p;

charnum[5];

charname[9];

intxz;

=====================\n"

1.按编号查询\n"

2.按姓名查询\n"

请选择:

p=head->

//假定通讯录表带头结点

xz);

if(xz==1){

printf("

请输入要查找者的编号:

%s"

num);

while(p&

strcmp(p->

data.num,num)<

0)//比较字符串比较,编号晓得指向下一个。

p=p->

if(p==NULL||strcmp(p->

data.num,num)>

0)

p=NULL;

//没有查到要查找的通讯者

else

if(xz==2){

请输入要查找者的姓名:

name);

while(p&

data.name,name)!

=0)

p=p->

returnp;

voiddelnode(linklisthead)

charjx;

listnode*p,*q;

//调用查找函数

if(p==NULL){

没有查到要删除的通讯者!

return;

真的要删除该结点吗?

(y/n)"

%c"

jx);

if(jx=='

y'

||jx=='

Y'

){

q=head;

while(q!

q->

next!

=p)

q=q->

q->

next=p->

//删除结点

free(p);

//释放被删除的结点空间

通讯者已被删除!

voidprintlist(linklisthead)

//因为链表带头接点,使P指向链表开始结点

-----------------------------------------------------------------------\n"

while(p!

=NULL)

{printf("

%s,%s,%s,%s,%s\n"

-------------------------------------------------------\n"

voidchangelist(linklisthead)//修改

linklistp;

charch[20];

输入要修改人姓名:

gets(ch);

p=head;

//用来判断是否修改

if(strcmp(p->

data.name,ch)==0)//比较函数比较两个数据

{

输入新num:

gets(p->

data.num);

输入新name:

data.name);

输入新sex:

data.sex);

输入新phone:

data.iphone);

输入新addres:

flag=1;

//找到并修改成功

if(flag==1)

修改完成\n"

对不起,无此记录!

请重新输入。

六、测试分析

七、使用说明

(1)首先运行程序,包括六个选项,0.退出系统.1.成绩录入2.成绩查询.3.成绩修改4.删除成绩.5.输出所有人成绩.6.统计各科总成绩.

(2)然后可以根据不同的需要选择不同的选项进行操作,

(3)最后退出程序。

八、运行程序过程中产生的问题及采取的措施

(1)在本次试验中我觉得我遇见了一些技术上的难点,刚开始是通讯录的建立,要用到数据结构中的知识,主要要用到链表和结构体。

在通讯录的插入的时候主要是用到学号的升值法插入,在此过程中要申请结点m和n,而且将要插入结点p插在两结点之间。

在通讯录的查询当中主要分为四类:

1).按学号查找的函数;

2).按姓名查找的函数;

3).按电话查找的函数;

4).按住址查找的函数。

其实原理一样,只是使用strcmp()函数匹配出和要查找的通讯者信息相同的结点,并且将其所有的信息输出。

在删除函数我开始觉得删除的时候很困难,后来我是按学号删除的,因为学号是关键字,主要注意在删除后对一些结点需要改变p=p->

next->

next;

free(q);

如果没找到则q=q->

next。

5).遇到问题XX是非常好的老师,我的程序在修改功能上总是出现一些难以察觉的问题,很伤脑筋。

XX了一下相关的情况,误打误撞的还找到了解决的方法,清空缓存。

遇到难点,直接XX学习,也是非常好的办法!

(2)在开始菜单中对应的功能数字是0-6。

可以按照自己想要操作的动作选择对应的数字实现相应的功能。

对于插入主要是按学号的升序来插入通讯者的信息。

在查找中分为四个查找方式:

1)按学号查询2)按姓名查询3)按号码查询4)按地址查询。

在删除中由于学号是主关键字,是唯一的,所以删除按学号来删除会比较方便。

而输出是按一个指针p指向头指针haed,按循环来输出直到p=NULL则结束输出。

参考文献

[1]李建学等著.数据结构课程设计案例精编.清华大学出版社,2007

[2]唐宁九等主编.数据结构与算法(C++版)实验和课程设计教程.清华大学出版社,2008)

设计题目二:

学生成绩管理系统

一.实习目的

二.问题描述

实现功能:

输入、输出、查找、读入、显示、保存、排序、退出。

三.需求分析

该程序所做的工作是对学生的成绩的管理,为师生进行学生成绩的记录、查询提供方便。

此程序规定:

1.在成绩录入是,姓名为20个字母以内的字符串;

各科成绩为整形;

学号长整型,性别和出生日期为字符型;

2.程序的输出主要为:

输出学生的各科成绩及统计数据;

3.程序的功能包括:

成绩的录入、修改、查找、输出和统计;

四.概要设计

1.用到的数据有:

intchinese;

//语文

intenglish;

//英语

intmath;

//数学

longnum;

//学号

charname[20];

charsex[20];

chardate[20];

//出生日期

scores;

//成绩

2.用到的主要函数:

(1)inthash(intkey);

//用除留余数法构造哈希函数

(2)intBuild_Hash(Hash*H,stust);

//输入一组关键字,建立Hash表,用链地址法处理冲突

(3)intSearch(Hash*H,intkey);

//成绩查询

(4)voidHeapAdjust(HeapType&

H,ints,intm);

//筛选

(5)voidHeapSort(HeapType&

H);

//堆排序。

(6)voidSegment(HeapTypeh);

//统计各个分数段的人数

(7)intSort(Hash*H);

//使用堆排序对各科成绩按从高到低排列输出

(8)voidadd(Hash*H);

//录入学生信息

(9)voiddoSearch(Hash*H);

//查询学生信息

(10)voiddoSort(Hash*H);

//分段统计及排序

(11)voidsavedata(student*&

p);

(12)student*getdata();

(13)voidmain();

//主函数

3.各程序模块之间的调用关系:

主函数13可以调用所有系统中的子函数。

五.详细设计(要有注释)

malloc.h>

typedefstruct//成绩结构体定义

intchinese;

//语文

//英语

//数学

}score;

typedefstructstudent//学生信息结构体定义

longnum;

structstudent*next;

}student,*stu;

typedefstuHash;

//定义哈希表的类型

typedefstruct//堆结构定义

intr[20];

//记录分数

intlength;

//长度

}HeapType;

inthash(intkey);

//用除留余数法构造哈希函数

intBuild_Hash(Hash*H,stust);

//输入一组关键字,建立Hash表,用拉链法处理冲突

intSearch(Hash*H,intkey);

//成绩查询

voidHeapAdjust(HeapType&

//筛选

voidHeapSort(HeapType&

//堆排序。

voidSegment(HeapTypeh);

//统计各个分数段的人数

intSort(Hash*H);

//使用堆排序对各科成绩按从高到低排列输出

voidadd(Hash*H);

//录入学生信息

voiddoSearch(Hash*H);

//查询学生信息

v

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1