C语言课程设计报告(报告+代码=班级通讯录系统)Word格式文档下载.doc
《C语言课程设计报告(报告+代码=班级通讯录系统)Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《C语言课程设计报告(报告+代码=班级通讯录系统)Word格式文档下载.doc(16页珍藏版)》请在冰豆网上搜索。
实现通讯录信息的添加、修改、删除和查询。
(二)、设计内容与步骤
1.分析并建立满足上述要求的数据结构
2.算法设计与分析
3.程序设计、实现、调试
4.课程设计说明书
二、算法设计分析
因为一个班级里面有很多学生,而且每个学生又包含很多信息如姓名、学号、电话、邮箱等,这些信息又分别属于不同的数据类型,但是每个学生所包含的数据信息成分相同,所以要用到构造数据类型:
结构体。
用到结构体,应为要能实现查找、修改、删除等,所以又要用到链表的知识!
要实现这些功能,要用到模块化设计思想,用函数来解决问题!
三、具体函数分析
(一)、插入新结点
在插入新结点之前,先创建一个只有指针域的头结点,又指针p扫描全链表,实现尾插法,并返回头指针。
(二)、删除结点
用连个指针p,q扫描全链表,先通过学号找到要删除的结点q,然后将q结点从链表中删除,然后释放此结点!
(三)、修改结点内容
通过学号找到此学生,通过switch语句选择要修改的项目,然后进行修改。
(四)、查找并输出
通过学号找到此学生,然后分别访问并输出此结点各项内容。
(五)、输出通讯录
顺序访问链表各个结点,并输出结点信息。
(六)、保存为文件
现在d盘里面创建一个读写类型文件“班级通讯录.txt”,然后通过文件类型指针fp访问此文件并写入通讯录信息。
(七)、释放结点并结束程序
从头结点开始,使头结点不断后移,并将前面的结点释放。
四、算法流程图
goto:
start
开始
start:
输入操作符cz
cz=?
1
新建
2
删除
3
修改
4
查询
5
输出
7
退出系统
结束
6
保存
五、函数运行情况及部分代码
(一)、主函数框架
主函数要用到基本输入输出、switch语句转换操作命令,然后用goto语句实现循环操作。
具体如下:
intmain()
{
intcz;
//操作符
structstu*head,*q;
head=(structstu*)malloc(sizeof(structstu));
head->
next=NULL;
system("
color2e"
);
//修改dos窗口前背景色,用两个十六进制数表示
printf("
\n********************************C语言课程设计***********************************\n"
***************★班级通讯录★*****************\n\n\n"
* 1:
新建通讯录 *\n"
* 2:
删除通讯录 *\n"
* 3:
修改通讯录 *\n"
* 4:
查询通讯录 *\n"
* 5:
显示全部记录 *\n"
* 6:
保存为文件 *\n"
* 7:
释放链表并结束程序 *\n"
*********************************************************\n"
start:
printf("
输入操作符1-7:
"
scanf("
%d"
&
cz);
switch(cz)
{
case1:
q=(structstu*)malloc(sizeof(structstu));
printf("
\t输入姓名:
scanf("
%s"
q->
name);
\t输入学号:
q->
xh);
\t输入班级:
grade);
\t手机号:
cel);
\t家庭电话:
tel);
\t输入电子邮件:
mail);
\t通讯录地址:
add);
\t输入邮编:
post);
charu(head,q);
插入成功!
!
\n"
break;
case2:
//删除
head=del(head);
break;
case3:
change(head);
case4:
search(head);
case5:
printall(head);
break;
case6:
printf("
baoc(head);
case7:
sf(head);
exit(0);
default:
printf("
输入操作错误,重新"
}
gotostart;
return0;
}
其中用到输出*来美化系统运行页面,然后用system("
语句来修改dos界面前背景颜色,如;
(二)、插入函数
structstu*charu(structstu*head,structstu*q)//插入新结点
structstu*p;
for(p=head;
p->
next!
=NULL;
p=p->
next);
p->
next=q;
q->
returnhead;
运行界面如图:
本部分采用尾插法。
(三)、删除结点
代码如下:
structstu*del(structstu*head)//删除结点
structstu*p,*q;
inta;
//要删除学生的学号
if(head->
next==NULL)
printf("
**********************************通讯录为空!
*********************************\n\n\n"
else
\t输入要删除学生学号:
scanf("
a);
for(p=head,q=p->
next;
xh!
=a&
&
)
{
p=p->
q=p->
}
if(q->
xh==a)
p->
next=q->
free(q);
删除成功!
elseprintf("
nopeoplehavefound!
运行界面:
通讯录为空时:
不为空时:
(四)、查找
输入要查找学生学号,找到后将其输出,如图:
(五)修改学生信息
先通过学号找到该学生,然后用switch语句选择修改项,再用switch和goto语句实现是否循环,运行如图:
(六)、保存文件
在D:
盘中创建一个读写文件,顺序将各节点信息保存进去,代码为:
structstu*baoc(structstu*head)//保存文件
FILE*fp;
structstu*p=head;
else
if((fp=fopen("
D:
\\班级通讯录.txt"
"
w"
))==NULL)
can'
topenfile!
exit(0);
while(p->
=NULL)
fwrite(p->
next,sizeof(structstu),1,fp);
p=p->
fclose(fp);
保存文件成功!
\n\n"
运行如图:
(七)、释放结点退出系统
用指针p扫描链表,头指针逐步后移,释放结点p,代码如下:
voidsf(structstu*head)
structstu*p=head;
释放链表:
while(p!
head=head->
free(p);
p=head;
释放链表成功!
运行如图;
六、附录:
完整原代码
#include<
stdio.h>
string.h>
stdlib.h>
windows.h>
structstu
charname[100];
//姓名
intxh;
//学号
intgrade;
//年级
charcel[15];
//手机
chartel[50];
//电话
charmail[50];
//邮件
charadd[100];
//地址
charpost[15];
//邮编
structstu*next;
};
voidsearch(structstu*head)//查找结点并输出
{
//要查找学生的学号
\t输入要查询学生学号:
for(p=head->
next)
if(p->
{
要查找的学生信息为:
p