C语言课程设计实验报告文档格式.docx
- 文档编号:7063293
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:48
- 大小:401.63KB
C语言课程设计实验报告文档格式.docx
《C语言课程设计实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验报告文档格式.docx(48页珍藏版)》请在冰点文库上搜索。
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];
intt;
//类别标记
charfenlei[30];
//分类
};
structaddress_list1px[200];
structaddress_list1temp;
if(head==NULL)
printf("
通讯录为空,无法排序!
\n"
);
return(head);
}
p1=head;
for(i=0;
i<
n,p1!
=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<
n-1;
j++)
for(i=j+1;
n;
if(strcmp(px[i].name,px[j].name)<
0)
temp=px[i];
px[i]=px[j];
px[j]=temp;
p1=(structaddress_list*)malloc(LEN);
strcpy(p1->
name,px[0].name);
work,px[0].work);
handset,px[0].handset);
phone,px[0].phone);
email,px[0].email);
address,px[0].address);
QQ,px[0].QQ);
p1->
t=px[0].t;
fenlei,px[0].fenlei);
head=p1;
for(i=1;
name,px[i].name);
work,px[i].work);
handset,px[i].handset);
phone,px[i].phone);
email,px[i].email);
address,px[i].address);
QQ,px[i].QQ);
t=px[i].t;
fenlei,px[i].fenlei);
p2->
next=p1;
next=NULL;
按姓名排序后为:
print(head);
}
四、调试与测试
一、主页面
二、创建通讯录
1、输入信息
2、创建成功后自动输出所有信息
三、按照名字排序
四、综合操作
1、综合操作主页面
2、分类显示
五、保存
六、打开
七、删除
五、本次课程设计的心得体会
该程序的新颖性在于结构体和文件的使用上,这两个章节都是老师在课堂上没有讲过的,因此也是在不断的实践,不断的调试中实现的。
结构体和文本的使用保证了这个程序可以存储大量的信息。
该程序具备一个基本的员工通讯录所需要的功能。
我不仅巩固《C语言程序设计》课程学习的内容,掌握设计的基本方法,强化上机动手能力,还进一步掌握以下了知识:
数据类型、分支控制、循环控制、函数的定义及调用、结构体及数组、指针、文件操作、编译预处理等;
通过课程设计,掌握了程序的局部测试、调试方法,建立程序系统调试、测试的基本概念和思想,学会较大程序的系统测试和调试方法。
团队精神不可少,分工合作也是必须的,身为组长就要以身作则,带领好小组,做好各项工作。
在开始,对本组人员进行整理,分析其特点,再分配任务,然后进行综合应用,最后对所需资料及要编的程序进行整理得出最后程序。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
六、附录
【源程序】
#include<
stdio.h>
malloc.h>
//得到指向大小为Size的内存区域的首字节的指针//
string.h>
stdlib.h>
//标准库函数//
#defineNULL0
#defineLENsizeof(structaddress_list)//计算字节//
intn;
structaddress_list
structaddress_list*next;
};
structaddress_list*shifang(structaddress_list*head);
//释放内存函数声明
//创建函数,不带头结点的链表
structaddress_list*creat(void)
structaddress_list*head,*p1,*p2;
charname[20];
n=0;
//强制内存转换
请输入通讯录的内容!
\n姓名输入为0时表示创建完毕!
请输入姓名:
"
gets(name);
if(strcmp(name,"
0"
)!
=0)
name,name);
请输入单位:
gets(p1->
请输入手机:
请输入固定电话:
请输入电子邮件:
请输入QQ号码:
请输入通讯地址:
请输入分类(1.同事2.朋友3.同学4.家人5.其他):
scanf("
%d"
&
p1->
t);
switch(p1->
t)
case1:
strcpy(p1->
fenlei,"
同事"
break;
case2:
朋友"
case3:
同学"
case4:
家人"
case5:
其他"
head=NULL;
while
(1)
n=n+1;
//记录通讯录人数个数
if(n==1)
else
%s"
name);
)==0)
returnhead;
return0;
//输出函数
voidprint(structaddress_list*head)
structaddress_list*p;
if(head!
=NULL)
p=head;
本通讯录现在共有%d人:
n);
---姓名-------单位--------手机-------固定电话-------Email--------QQ--------通讯地址--------类别--\n"
==================================\n"
do
==%s"
p->
"
\n"
p=p->
}while(p!
=NULL);
通讯录为空,无法输出!
//增加函数
structaddress_list*insert(structaddress_list*head)
structaddress_list*p0,*p1,*p2;
请输入增加的内容:
姓名不能为0,增加失败!
p0=(structaddress_list*)malloc(LEN);
strcpy(p0->
gets(p0->
p0->
switch(p0->
strcpy(p0->
head=p0;
p0->
while(strcmp(p0->
name,p1->
name)>
0&
&
(p1->
next!
=NULL))
if(strcmp(p0->
name)<
0||strcmp(p0->
name)==0)
if(head==p1)
next=p0;
structaddress_list*delete_txl(structaddress_list*head)
structaddress_list*p,*q;
通讯录为空,无法显示!
请输入需要删除的人的姓名:
if(strcmp(head->
name,name)==0)
head=head->
free(p);
删除操作成功!
q=head,p=head->
while(p!
if(strcmp(p->
q->
next=p->
q=q->
//显示函数
structaddress_list*display(structaddress_list*head)
intm;
m=0;
请输入需要显示人的姓名:
while(p1!
while((strcmp(p1->
name,name))!
=0&
if(strcmp(p1->
m++;
%s的通讯内容如下:
---姓名----单位----手机----固定电话----Email----QQ----通讯地址----类别--\n"
p1->
name
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 实验 报告