C语言课程设计实验报告.docx

上传人:b****3 文档编号:4953652 上传时间:2023-05-07 格式:DOCX 页数:48 大小:401.63KB
下载 相关 举报
C语言课程设计实验报告.docx_第1页
第1页 / 共48页
C语言课程设计实验报告.docx_第2页
第2页 / 共48页
C语言课程设计实验报告.docx_第3页
第3页 / 共48页
C语言课程设计实验报告.docx_第4页
第4页 / 共48页
C语言课程设计实验报告.docx_第5页
第5页 / 共48页
C语言课程设计实验报告.docx_第6页
第6页 / 共48页
C语言课程设计实验报告.docx_第7页
第7页 / 共48页
C语言课程设计实验报告.docx_第8页
第8页 / 共48页
C语言课程设计实验报告.docx_第9页
第9页 / 共48页
C语言课程设计实验报告.docx_第10页
第10页 / 共48页
C语言课程设计实验报告.docx_第11页
第11页 / 共48页
C语言课程设计实验报告.docx_第12页
第12页 / 共48页
C语言课程设计实验报告.docx_第13页
第13页 / 共48页
C语言课程设计实验报告.docx_第14页
第14页 / 共48页
C语言课程设计实验报告.docx_第15页
第15页 / 共48页
C语言课程设计实验报告.docx_第16页
第16页 / 共48页
C语言课程设计实验报告.docx_第17页
第17页 / 共48页
C语言课程设计实验报告.docx_第18页
第18页 / 共48页
C语言课程设计实验报告.docx_第19页
第19页 / 共48页
C语言课程设计实验报告.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言课程设计实验报告.docx

《C语言课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验报告.docx(48页珍藏版)》请在冰点文库上搜索。

C语言课程设计实验报告.docx

C语言课程设计实验报告

中南大学

二○一三~二○一四学年第一学期

信息科学与工程学院

程序设计基础实践

设计报告

 

课程名称:

程序设计基础实践

班级:

2013级信息安全1302班

学号:

0906130221

姓名:

张振宇

指导教师:

杨希

二○一三年十二月

一、需求分析

通过课程设计使学生综合使用所学过的C语言程序设计知识,掌握结构化程序设计的基本思路和方法,在所掌握的基本知识和技能的基础上,进一步提高自学能力和查找资料的能力,解决一定程度的复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。

课程设计的目的和要求:

1、使学生巩固和加强《C语言程序设计》课程的理论知识。

2、使学生掌握C语言的基本概念、语法、语义和数据类型的使用特点。

3、使学生掌握C语言程序设计的方法及编程技巧,能正确使用C语言编写程序。

4、进一步理解和运用结构化程序设计的思想和方法;学会利用传统流程图或N-S图表示算法。

5、使学生掌握调试程序的基本方法及上机操作方法。

6、掌握书写程序设计开发文档的能力,使学生学会撰写课程设计总结报告。

课程设计的思想和方法还可以作为学生做毕业论文时的参考资料。

7、通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。

为学生做毕业设计打好基础。

8、初步掌握开发一个小型实用系统的基本方法:

结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。

通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。

9、培养学生的创新能力和创新思维。

学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。

10、培养学生良好的程序设计风格。

在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。

学生在课程设计书写代码时,应该严格按要求处理,以便建立良好的程序设计风格。

11、课程设计题目及内容

员工通讯管理系统:

通讯录信息为:

姓名、地址、单位、固定电话、移动手机、分类(包括同事、朋友、同学、家人等)、EMAIL、QQ等。

1.通讯录的增加;

2.通讯录的修改、删除;

3.按姓名、电话、QQ查询;

4.通讯录的排序;

5.分类统计;

6.通讯录输出。

二、总体设计

1.设计环境

⑴硬件:

一般PC机。

⑵软件:

操作系统为WindowsXP或Windows2000,设计语言为VisualC++或TurboC2.0。

2.基本要求

⑴课程设计题目可以协商合作,但每名同学必须完成每个功能函数,甚至每条语句的作用。

只有了解了整个程序设计思路,每个函数、设置每条语句的作用,才达到开“计算机与程序设计语言”这门课的目的。

⑵由于上机时间有限,要求在没上机时事先写好代码,再在上机时进行调试。

⑶要求利用结构化程序设计方法以及C的编程思想来完成系统的设计;

⑷要求有欢迎界面、命令选择菜单、录入的数据保存在文件中,对数据的操作通过链表(每条记录保存在一个节点中(每个节点是一个结构体类型的数据),将节点链接在一起构成链表)、数组、结构体等数据结构实现;

⑸模块化程序设计:

要求在设计的过程中,按功能定义函数或书写多个源程序文件,按照从顶向下逐步细化的模块化原则进行程序设计,各个功能模块用函数的形式来实现;

⑹学生所选课题必须上机通过,并获得满意的结果;

3.设计步骤

⑴根据问题描述,设计数据存储方式;

⑵分析系统功能,划分功能模块,确定各模块函数名称;

⑶主程序算法设计和各模块算法设计;

⑷编程实现;

⑸调试和测试;

三、详细设计

1.算法分析

以上所给的课程设计的题目,每一个对象都包括多个属性。

所以要考虑数据的存储形式要用结构体类型来实现。

首先,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式:

是定义一个数组来存储,还是定义一个链表呢?

在这里假如我们以数组的方式来存储,当然可以,但是我们知道,假如我们定义一个数组的话,我们首先必须知道学生人数大概是多少,以便我们确定数组的大小,但是题目中没有给出,而且题目要求中有大量的删除、插入操作,所以用链表的方式比较方便。

对于菜单的实现,首先我们用printf函数把程序的功能列出来,然后等待用户选择而执行不同的函数,执行完了一个功能后又回到菜单。

保存数据要通过文件来实现。

2.设计流程图

3.我的任务

在简单的分工之后,我的任务是完成通讯录的排序,因为主题是用链表来实现通讯录之间的连接,而链表是不好直接进行排序的,所以我想到了数组。

即把链表中指针指向的内容赋给一个数组,利用我们学到的冒泡排序法对其进行排序,排序结束之后重新赋回去。

思路虽然听起来很简单,但是在实际操作起来总存在这样那样的错误,比如说变量名不统一等合作性问题,而由于链表不是授课内容,不能很好的掌握,在写的过程中总是出现考虑不周全的情况。

但是在XX的帮助下和不懈的努力下,在预期时间完成了我的任务并且还参与了最终程序的合并调试。

structaddress_list*paixu(structaddress_list*head)

{

structaddress_list*p1,*p2;

inti,j;

structaddress_list1

{

charname[30];//名字

charwork[50];//单位

charhandset[30];//手机

charphone[30];//固定电话

charemail[30];//电子邮件

charaddress[30];//通讯地址

charQQ[20];//QQ

intt;//类别标记

charfenlei[30];//分类

};

structaddress_list1px[200];

structaddress_list1temp;

if(head==NULL)

{

printf("通讯录为空,无法排序!

\n");

return(head);

}

p1=head;

for(i=0;i

=NULL;i++)

{

strcpy(px[i].name,p1->name);

strcpy(px[i].work,p1->work);

strcpy(px[i].handset,p1->handset);

strcpy(px[i].phone,p1->phone);

strcpy(px[i].email,p1->email);

strcpy(px[i].address,p1->address);

strcpy(px[i].QQ,p1->QQ);

px[i].t=p1->t;

strcpy(px[i].fenlei,p1->fenlei);

p2=p1;

p1=p1->next;

}

head=shifang(head);

for(j=0;j

{

for(i=j+1;i

{

if(strcmp(px[i].name,px[j].name)<0)

{

temp=px[i];

px[i]=px[j];

px[j]=temp;

}

}

}

p1=(structaddress_list*)malloc(LEN);

p2=p1;

strcpy(p1->name,px[0].name);

strcpy(p1->work,px[0].work);

strcpy(p1->handset,px[0].handset);

strcpy(p1->phone,px[0].phone);

strcpy(p1->email,px[0].email);

strcpy(p1->address,px[0].address);

strcpy(p1->QQ,px[0].QQ);

p1->t=px[0].t;

strcpy(p1->fenlei,px[0].fenlei);

head=p1;

for(i=1;i

{

p1=(structaddress_list*)malloc(LEN);

strcpy(p1->name,px[i].name);

strcpy(p1->name,px[i].name);

strcpy(p1->work,px[i].work);

strcpy(p1->handset,px[i].handset);

strcpy(p1->phone,px[i].phone);

strcpy(p1->email,px[i].email);

strcpy(p1->address,px[i].address);

strcpy(p1->QQ,px[i].QQ);

p1->t=px[i].t;

strcpy(p1->fenlei,px[i].fenlei);

p2->next=p1;

p2=p1;

}

p2->next=NULL;

printf("按姓名排序后为:

\n");

print(head);

return(head);

}

四、调试与测试

一、主页面

二、创建通讯录

1、输入信息

2、创建成功后自动输出所有信息

三、按照名字排序

四、综合操作

1、综合操作主页面

2、分类显示

五、保存

六、打开

七、删除

五、本次课程设计的心得体会

该程序的新颖性在于结构体和文件的使用上,这两个章节都是老师在课堂上没有讲过的,因此也是在不断的实践,不断的调试中实现的。

结构体和文本的使用保证了这个程序可以存储大量的信息。

该程序具备一个基本的员工通讯录所需要的功能。

我不仅巩固《C语言程序设计》课程学习的内容,掌握设计的基本方法,强化上机动手能力,还进一步掌握以下了知识:

数据类型、分支控制、循环控制、函数的定义及调用、结构体及数组、指针、文件操作、编译预处理等;通过课程设计,掌握了程序的局部测试、调试方法,建立程序系统调试、测试的基本概念和思想,学会较大程序的系统测试和调试方法。

团队精神不可少,分工合作也是必须的,身为组长就要以身作则,带领好小组,做好各项工作。

在开始,对本组人员进行整理,分析其特点,再分配任务,然后进行综合应用,最后对所需资料及要编的程序进行整理得出最后程序。

 

通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

六、附录

【源程序】

#include

#include//得到指向大小为Size的内存区域的首字节的指针//

#include

#include//标准库函数//

#defineNULL0

#defineLENsizeof(structaddress_list)//计算字节//

intn;

structaddress_list

{

charname[30];//名字

charwork[50];//单位

charhandset[30];//手机

charphone[30];//固定电话

charemail[30];//电子邮件

charaddress[30];//通讯地址

charQQ[20];//QQ

intt;//类别标记

charfenlei[30];//分类

structaddress_list*next;

};

structaddress_list*shifang(structaddress_list*head);//释放内存函数声明

//创建函数,不带头结点的链表

structaddress_list*creat(void)

{

structaddress_list*head,*p1,*p2;

charname[20];

n=0;

p1=(structaddress_list*)malloc(LEN);

p2=p1;//强制内存转换

printf("请输入通讯录的内容!

\n姓名输入为0时表示创建完毕!

\n");

printf("请输入姓名:

");

gets(name);

if(strcmp(name,"0")!

=0)

{

strcpy(p1->name,name);

printf("请输入单位:

");gets(p1->work);

printf("请输入手机:

");gets(p1->handset);

printf("请输入固定电话:

");gets(p1->phone);

printf("请输入电子邮件:

");gets(p1->email);

printf("请输入QQ号码:

");gets(p1->QQ);

printf("请输入通讯地址:

");gets(p1->address);

printf("请输入分类(1.同事2.朋友3.同学4.家人5.其他):

");scanf("%d",&p1->t);

switch(p1->t)

{

case1:

strcpy(p1->fenlei,"同事");break;

case2:

strcpy(p1->fenlei,"朋友");break;

case3:

strcpy(p1->fenlei,"同学");break;

case4:

strcpy(p1->fenlei,"家人");break;

case5:

strcpy(p1->fenlei,"其他");break;

}

head=NULL;

while

(1)

{

n=n+1;//记录通讯录人数个数

if(n==1)

head=p1;

else

p2->next=p1;

p2=p1;

printf("请输入姓名:

");scanf("%s",name);

if(strcmp(name,"0")==0)

{

break;

}

else

{

p1=(structaddress_list*)malloc(LEN);

strcpy(p1->name,name);

printf("请输入单位:

");scanf("%s",&p1->work);

printf("请输入手机:

");scanf("%s",&p1->handset);

printf("请输入固定电话:

");scanf("%s",&p1->phone);

printf("请输入电子邮件:

");scanf("%s",&p1->email);

printf("请输入QQ号码:

");scanf("%s",&p1->QQ);

printf("请输入通讯地址:

");scanf("%s",&p1->address);

printf("请输入分类(1.同事2.朋友3.同学4.家人5.其他):

");scanf("%d",&p1->t);

switch(p1->t)

{

case1:

strcpy(p1->fenlei,"同事");break;

case2:

strcpy(p1->fenlei,"朋友");break;

case3:

strcpy(p1->fenlei,"同学");break;

case4:

strcpy(p1->fenlei,"家人");break;

case5:

strcpy(p1->fenlei,"其他");break;

}

}

}

p2->next=NULL;

returnhead;

}

else

return0;

}

//输出函数

voidprint(structaddress_list*head)

{

structaddress_list*p;

if(head!

=NULL)

{

p=head;

printf("本通讯录现在共有%d人:

\n",n);

printf("---姓名-------单位--------手机-------固定电话-------Email--------QQ--------通讯地址--------类别--\n");

printf("==================================\n");

do

{

printf("==%s",p->name);printf("");

printf("%s",p->work);printf("");

printf("%s",p->handset);printf("");

printf("%s",p->phone);printf("");

printf("%s",p->email);printf("");

printf("%s",p->QQ);printf("");

printf("%s",p->address);printf("");

printf("%s",p->fenlei);printf("\n");

p=p->next;

}while(p!

=NULL);

printf("==================================\n");

}

else

printf("通讯录为空,无法输出!

\n");

}

//增加函数

structaddress_list*insert(structaddress_list*head)

{

structaddress_list*p0,*p1,*p2;

charname[20];

p1=head;

printf("请输入增加的内容:

\n");

printf("请输入姓名:

");gets(name);

if(strcmp(name,"0")==0)

{

printf("姓名不能为0,增加失败!

\n");

return(head);

}

else

{

p0=(structaddress_list*)malloc(LEN);

strcpy(p0->name,name);

printf("请输入单位:

");gets(p0->work);

printf("请输入手机:

");gets(p0->handset);

printf("请输入固定电话:

");gets(p0->phone);

printf("请输入电子邮件:

");gets(p0->email);

printf("请输入QQ号码:

");gets(p0->QQ);

printf("请输入通讯地址:

");gets(p0->address);

printf("请输入分类(1.同事2.朋友3.同学4.家人5.其他):

");scanf("%d",&p0->t);

switch(p0->t)

{

case1:

strcpy(p0->fenlei,"同事");break;

case2:

strcpy(p0->fenlei,"朋友");break;

case3:

strcpy(p0->fenlei,"同学");break;

case4:

strcpy(p0->fenlei,"家人");break;

case5:

strcpy(p0->fenlei,"其他");break;

}

n=n+1;

if(head==NULL)

{

head=p0;

p0->next=NULL;

returnhead;

}

else

{

while(strcmp(p0->name,p1->name)>0&&(p1->next!

=NULL))

{

p2=p1;

p1=p1->next;

}

if(strcmp(p0->name,p1->name)<0||strcmp(p0->name,p1->name)==0)

{

if(head==p1)

{

head=p0;

}

else

{

p2->next=p0;

}

p0->next=p1;

}

else

{

p1->next=p0;

p0->next=NULL;

}

returnhead;

}

}

}

structaddress_list*delete_txl(structaddress_list*head)

{

structaddress_list*p,*q;

charname[30];

if(head==NULL)

{

printf("通讯录为空,无法显示!

\n");

returnhead;

}

p=head;

printf("请输入需要删除的人的姓名:

");

gets(name);

if(strcmp(head->name,name)==0)

{

head=head->next;

free(p);

printf("删除操作成功!

\n");

returnhead;

}

else

{

q=head,p=head->next;

while(p!

=NULL)

{

if(strcmp(p->name,name)==0)

{

q->next=p->next;

free(p);

printf("删除操作成功!

\n");

returnhead;

}

p=p->next;

q=q->next;

}

}

}

//显示函数

structaddress_list*display(structaddress_list*head)

{

structaddress_list*p1,*p2;

charname[30];

intm;

if(head==NULL)

{

printf("通讯录为空,无法显示!

\n");

returnhead;

}

p1=head;

m=0;

printf("请输入需要显示人的姓名:

");

gets(name);

while(p1!

=NULL)

{

while((strcmp(p1->name,name))!

=0&&p1->next!

=NULL)

{

p2=p1;

p1=p1->next;

}

if(strcmp(p1->name,name)==0)

{

m++;

printf("%s的通讯内容如下:

\n",name);

printf("---姓名----单位----手机----固定电话----Email----QQ----通讯地址----类别--\n");

printf("==================================\n");

printf("==%s",p1->name

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2