C课程设计文档格式.docx

上传人:b****7 文档编号:22318195 上传时间:2023-02-03 格式:DOCX 页数:47 大小:1.31MB
下载 相关 举报
C课程设计文档格式.docx_第1页
第1页 / 共47页
C课程设计文档格式.docx_第2页
第2页 / 共47页
C课程设计文档格式.docx_第3页
第3页 / 共47页
C课程设计文档格式.docx_第4页
第4页 / 共47页
C课程设计文档格式.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

C课程设计文档格式.docx

《C课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《C课程设计文档格式.docx(47页珍藏版)》请在冰豆网上搜索。

C课程设计文档格式.docx

*3……通讯者的删除*

*4……通讯者的查询*

*0……退出*

2).编程实现通讯录单链表的建立、通讯者的插入、通讯者的删除、通讯者的查询、通讯录的输出。

工作计划与进度安排:

第1天:

1、指导教师布置课程设计题目及任务

2、查找相关资料

第2~4天:

1、根据具体设计题目进行具体分析

2、对设计题目进行编码和调试

3、指导教师进行验收

第5天:

1、指导教师针对课程设计进行答辩

2、完成课程设计报告

指导教师:

2013年月日

专业负责人:

2013年月日

学院教学副院长:

2013年月日

一、课程设计目的------------------------------------------------------------1

二、课程设计内容和要求---------------------------------------------------1

三、题目一设计过程---------------------------------------------------------2

四、题目二设计过程--------------------------------------------------------24

五、设计总结-----------------------------------------------------------------36

六、参考文献-----------------------------------------------------------------36

题目栈子系统、通讯录管理系统

一、课程设计的目的

本学期我们对《数据结构》这门课程进行了学习。

这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。

这次课程设计不但要求学生掌握《数据结构》中的各方面知识,还要求学生具备一定的C语言基础和编程能力。

(1)题目一的目的:

1.掌握栈的特点及其描述方法

2.掌握链式存储结构实现一个栈

3.掌握链栈的各种基本操作

4.掌握栈的典型应用的算法

(2)题目二的目的:

1.掌握线性表的特点

2.掌握线性表的顺序存储结构和链式存储结构的基本运算

3.掌握线性表的基本操作

二、课程设计的内容和要求

三、题目一设计过程

1、题目分析

本题要求合理地设计一个栈的结构及入栈、出栈、删除、查找等基本操作,并运用此结构实现数制转换。

2、算法描述

首先定义一个结点结构体,指针域包括两个指针,分别指向前驱结点和后继结点,数据域为一个DataType类型的变量,其中DataTYpe类型为宏定义;

在定义一个栈结构体,结构体内包括两个指针,分别为栈顶指针和栈低指针,还有一个int型记录栈的长度。

欢迎界面后,进入主菜单,主菜单用switch设计,其中调用函数NUM,该函数可返回有效的菜单号,可屏蔽并提示错误信息及重新输入,菜单下调用了其他功能函数,菜单内除退出和初始化函数外所有的功能函数均存放在FUN.c.下。

下面仅详细阐述一下各功能模块的工作原理。

入栈为栈的首次赋值,利用do{}while();

可按需求循环输入多组信息,并及时退出返回到主菜单,在实现循环多组输入时调用了函数Push,Push为机械入栈一个新元素,将参数nn,入栈到栈tt内,栈的长度加一。

出栈函数Pop中,首先判断栈是否为空,为空时,不可出栈;

非空时,输出栈顶元素及栈的长度,并删除栈顶节点,栈的长度减一。

信息输出完毕后按任意键返回主菜单。

显示函数Show中,即利用do...while循环多次调用出栈函数,每次输出时要按任意键继续一次,以保障画面整洁。

数制转换函数chang中,大体结构包括一个大的do...while允许多次使用信息转换,do中首先输入数及其进制和预期进制,然后判断是否为十进制,经费是禁止的数字转换为十进制,再将其循环除以预期进制,将其余数存在新建号的栈中,直到余数为零,停止循环,然后依次出栈,将栈顶元素依次显示出来,即转换结束。

可选N或Y,继续下一次转换,或者返回主菜单。

3、源代码

ST.h:

#ifndefST_H

#defineST_H

#include<

stdio.h>

stdlib.h>

conio.h>

windows.h>

typedefintDataType;

typedefstructNode

{

structNode*pro;

DataTypedata;

structNode*next;

}NN;

//双向链栈的结点

typedefstruct

NN*top;

NN*base;

intsize;

}ST;

//栈

//main.c:

主函数

//Menu.c:

框架界面函数和初始化退出函数

voidInitiate(ST*tt);

//栈的初始化及双向链的初始化

voidJM();

//界面

intNum();

//菜单序号选择

voidExit();

//退出

//FUN.c:

具体功能函数

voidInput(ST*tt);

//入栈

voidPush(ST*tt,DataTypenn);

//机械入栈

intPop(ST*tt);

//机械出栈

voidShow(STtt);

//显示

voidchange(STtt);

//数制转换

#endif

Menu.c:

#include"

ST.H"

voidJM()//界面函数

intch;

STtt;

Initiate(&

tt);

printf("

\n\n\n\n\n\n\n\n\t\t欢迎您使用《栈子系统》!

\n\n\n"

);

\t\t\t\t设计者:

马舒阳(1203070102)\n"

getch();

do

{

system("

cls"

printf("

\n\n\t\t\t\t栈子系统\n"

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

\t*1……入栈*\n"

\t*2……出栈*\n"

\t*3……显示*\n"

printf("

\t*4……数制转换*\n"

\t*0……返回*\n"

\t*提示:

本系统仅可用于整型数数据的储存,望谅解。

*\t\n"

ch=Num();

switch(ch)

{

case1:

Input(&

break;

case2:

Pop(&

case3:

Show(tt);

case4:

change(tt);

case0:

Exit();

case-1:

;

}

}while(ch);

}

intNum()//判断菜单号

intk;

\n\t\t请选择菜单号(0…4):

"

scanf("

%d"

&

k);

getchar();

if(k<

0||k>

5)

printf("

\n\t\t输入错误!

按任意键继续..."

getch();

return(-1);

}

else

returnk;

voidInitiate(ST*tt)

//栈空的初始化注意:

此函数内的tt为栈型指针,不同于JM内的tt

tt->

base=(NN*)malloc(sizeof(NN));

top=tt->

base;

size=0;

voidExit()//退出

system("

\n\n\n\n\n\n\t\t谢谢使用程序退出!

\n\n\n\n\n\n\t\t\t"

main.c:

intmain()

JM();

return0;

FUN.c:

voidInput(ST*tt)//栈的初始化

DataTypenn;

\n\n\t\t老师早安!

开始入栈!

\n\n"

\n\t\t请输入新栈顶数据:

"

scanf("

nn);

//%d

getchar();

Push(tt,nn);

//调用入栈函数

do

printf("

\n\t\t继续?

<

YorN>

ch=getchar();

getchar();

if(ch!

='

N'

&

&

ch!

Y'

printf("

\n\t\t请输入Y或N!

\n"

else

break;

}while

(1);

}while(ch=='

voidPush(ST*tt,DataTypenn)

//将nn入栈到tt所指栈(栈中top指向还未赋值的结点)

NN*p;

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

top->

data=nn;

p->

pro=tt->

top;

(tt->

top)->

next=p;

top=p;

size++;

intPop(ST*tt)//出栈

if(tt->

size==0)

\n\t\t对不起,此栈已空!

return0;

\n\t\t栈顶元素为%d\n"

tt->

pro->

data);

p=tt->

tt->

pro;

free(p);

next=NULL;

if(!

(tt->

next))

{

tt->

size--;

\n\t\t出栈成功!

栈中还有%d个元素!

按任意键继续...\n"

size);

getch();

return1;

voidShow(STtt)//显示全部出栈

tt.size)

else

}while

(1);

\n\t\t马舒阳汇报完毕完毕!

voidchange()//数值转换

STcc;

inti,nn,zz,yy,tem_1,tem_2,tem_3;

charch;

cc);

\n\n\t\t欢迎进入数据转换!

\n\n\t\t(请注意:

系统暂不支持十以上进制转换!

)\n"

\n\n\t\t请输入一个数字!

scanf("

\n\n\t\t请问已输入的数字是什么进制呢?

zz);

\n\n\t\t请问您想要转换到几进制的呢?

yy);

if(zz>

10||yy>

10)

\n\t\t待转换的数字进制输入不合理!

按任意键回到主菜单..."

getch();

return;

if(zz!

=10)//若不是十进制要转换成十进制

tem_3=1;

//变量含义:

进制数的n次方

tem_2=0;

暂时存放和

tem_1=1;

各项数

for(i=0;

nn;

nn/=10)

{

tem_1=(nn%10)*tem_3;

tem_2+=tem_1;

tem_3*=zz;

}

nn=tem_2;

for(;

nn/=yy)//大除法入栈

if(nn%yy<

zz)

Push(&

cc,nn%yy);

\n\n\t\t转换结果为"

cc.base!

=cc.top;

)//出栈

p=cc.top->

p->

cc.top=p;

free(p->

next);

cc.size--;

\n\n\t\t继续?

4、运行结果

欢迎界面,如图所示。

图1-1

按任意键继续后进入主菜单,选择菜单号1,进入入栈模块,如图所示。

图1-2

开始入栈,输入新的栈顶元素(整型),并输入Y或N选择是否继续,此过程中,输入错误有提示,如图所示,以1,3,5,7,9,2,4,6,8,入栈为例。

图1-3

图1-4

图1-5

选择N,输入结束,然后回到主菜单,下面选择菜单号2,进入出栈模块。

图1-6

按任意键继续后,回到主菜单,选择菜单号3,显示栈内剩余信息。

图1-7

图1-8

其间,每一次输出可按需要按任意键输出,并显示剩余信息。

图1-9

图1-10

汇报完毕后,即栈已空,按任意键返回到主函数,选择菜单号4,进入数制转换模块。

图1-11

输入被转换的数字,被转换数字的数制及预期数制,并可按需求输入Y或N选择继续或退出。

图1-12

图1-13

退出后返回主菜单,选择0,即可退出程序

图1-14

图1-15

四、题目二设计过程

1、题目分析

本题要求建立链表,以存储联系人信息,并设计出对其的建立,插入删除显示等基本操作即可。

首先定义一个链表结点结构体,指针域包括一个next指针,数据域包括个人姓名及联系方式。

欢迎界面后,进入主菜单,主菜单用switch设计,其中调用函数NUM,该函数可返回有效的菜单号,可屏蔽并提示错误信息及重新输入,菜单下调用了其他功能函数,菜单内除退出和初始化函数外所有的功能函数均存放在Fx.c.下。

下面仅具体阐述一下各功能模块的工作原理。

函数Build,首先判断该表是否已建立过,即表内是否有一个空结点(头结点),表未初始化时便建立一个空表,否则提示“表已存在,无需建立”。

提示后延时2

s自动跳转到主菜单。

插入函数Insert,首先输入有效信息,然后利用头插法将其插入到头指针的下一个结点,再输出提示,提示用户选择N或Y,判断是否继续,若要继续,则递归本函数,否,直接返回主菜单。

删除函数Delete,首先判断表是否为空,表为空时,不允许删除,并弹出提示,按任意键继续后后跳转到主菜单;

表非空时,输入要删除人的姓名,利用循环查找表中人的信息(暂不支持多元素的查找与删除),若查找成功则输出提示,询问是否确定删除,按需求,删除该结点(暂不支持误删恢复)或取消操作;

若查找失败,不存在该联系人,则输出提示。

最后按任意键退回到主菜单。

查询函数Search,首先判断表是否为空,表为空时,不允许查找,并弹出提示,按任意键继续后后跳转到主菜单;

表非空时,输入要查询人的姓名,利用循环查找表中人的信息(暂不支持多元素的查找),然后输出信息,按任意键退回到主菜单。

退出函数Exit,先输出表内所有信息,信息输出完毕后,按任意键结束程序。

MSY.h:

#ifndefMSY_H

#defineMSY_H

#include<

//#include<

#defineN20

charname[N];

charnum[N];

}NODE;

voidWelcome();

voidjiemian();

voidBuild(NODE**head);

voidinsert(NODE**head);

voidDelete(NODE*head);

voidFind(NODE*head);

voidExit(NODE*head);

//待改进:

多元素查询

当head没有初始化,要直接关闭,不允许进行插入和删除等操作

Fx.c:

#include"

MSY.h"

voidjiemian()

staticNODE*head=NULL;

\n\n\t\t\t\t通讯录管理系统\n"

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

*1……通讯录单链表的建立*\n"

*2……通讯者的插入*\n"

*3……通讯者的删除*\n"

*4……通讯者的查询*\n"

*0……退出*\n"

\t提示:

在2,3,4

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

当前位置:首页 > 党团工作 > 思想汇报心得体会

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

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