C语言课程设计报告报告+代码班级通讯录系统.docx

上传人:b****4 文档编号:24128143 上传时间:2023-05-24 格式:DOCX 页数:22 大小:110.93KB
下载 相关 举报
C语言课程设计报告报告+代码班级通讯录系统.docx_第1页
第1页 / 共22页
C语言课程设计报告报告+代码班级通讯录系统.docx_第2页
第2页 / 共22页
C语言课程设计报告报告+代码班级通讯录系统.docx_第3页
第3页 / 共22页
C语言课程设计报告报告+代码班级通讯录系统.docx_第4页
第4页 / 共22页
C语言课程设计报告报告+代码班级通讯录系统.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告报告+代码班级通讯录系统.docx

《C语言课程设计报告报告+代码班级通讯录系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告报告+代码班级通讯录系统.docx(22页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告报告+代码班级通讯录系统.docx

C语言课程设计报告报告+代码班级通讯录系统

理工大学

计算机科学与技术学院

课程设计报告

课程名称:

高级语言程序设计

设计题目:

班级通讯录

学生:

传华

学   号:

7

专业班级:

信管1002班

指导教师:

于金霞

2010年 09 月 10  日

一、设计题目及要求

设计题目:

班级通讯录

对象:

信管10级

(一)、技术参数和设计要求:

1.该系统主要处理通讯录的相关信息。

2.通讯录信息主要包括:

、班级、手机、家庭、电子、通讯录地址、邮编等容。

3.完成以下的操作:

实现通讯录信息的添加、修改、删除和查询。

(二)、设计容与步骤

1.分析并建立满足上述要求的数据结构

2.算法设计与分析

3.程序设计、实现、调试

4.课程设计说明书

二、算法设计分析

因为一个班级里面有很多学生,而且每个学生又包含很多信息如、学号、、等,这些信息又分别属于不同的数据类型,但是每个学生所包含的数据信息成分相同,所以要用到构造数据类型:

结构体。

用到结构体,应为要能实现查找、修改、删除等,所以又要用到链表的知识!

要实现这些功能,要用到模块化设计思想,用函数来解决问题!

三、具体函数分析

(一)、插入新结点

在插入新结点之前,先创建一个只有指针域的头结点,又指针p扫描全链表,实现尾插法,并返回头指针。

(二)、删除结点

用连个指针p,q扫描全链表,先通过学号找到要删除的结点q,然后将q结点从链表中删除,然后释放此结点!

(三)、修改结点容

通过学号找到此学生,通过switch语句选择要修改的项目,然后进行修改。

(四)、查找并输出

通过学号找到此学生,然后分别访问并输出此结点各项容。

(五)、输出通讯录

顺序访问链表各个结点,并输出结点信息。

(六)、保存为文件

现在d盘里面创建一个读写类型文件“班级通讯录.txt”,然后通过文件类型指针fp访问此文件并写入通讯录信息。

(七)、释放结点并结束程序

从头结点开始,使头结点不断后移,并将前面的结点释放。

四、算法流程图

五、函数运行情况及部分代码

(一)、主函数框架

主函数要用到基本输入输出、switch语句转换操作命令,然后用goto语句实现循环操作。

具体如下:

intmain()

{

intcz;//操作符

structstu*head,*q;

head=(structstu*)malloc(sizeof(structstu));

head->next=NULL;

system("color2e");//修改dos窗口前背景色,用两个十六进制数表示

printf("\n********************************C语言课程设计***********************************\n");

printf("***************★班级通讯录★*****************\n\n\n");

printf("*1:

新建通讯录*\n");

printf("*2:

删除通讯录*\n");

printf("*3:

修改通讯录*\n");

printf("*4:

查询通讯录*\n");

printf("*5:

显示全部记录*\n");

printf("*6:

保存为文件*\n");

printf("*7:

释放链表并结束程序*\n");

printf("*********************************************************\n");

start:

printf("输入操作符1-7:

");

scanf("%d",&cz);

switch(cz)

{

case1:

q=(structstu*)malloc(sizeof(structstu));

printf("\t输入:

");scanf("%s",q->name);

printf("\t输入学号:

");scanf("%d",&q->xh);

printf("\t输入班级:

");scanf("%d",&q->grade);

printf("\t手机号:

");scanf("%s",q->cel);

printf("\t家庭:

");scanf("%s",q->tel);

printf("\t输入电子:

");scanf("%s",q->mail);

printf("\t通讯录地址:

");scanf("%s",&q->add);

printf("\t输入邮编:

");scanf("%s",&q->post);

charu(head,q);

printf("插入成功!

!

!

\n");break;

case2:

//删除

head=del(head);break;

case3:

change(head);break;

case4:

search(head);break;

case5:

printall(head);

break;

case6:

printf("\n");

baoc(head);break;

case7:

sf(head);

exit(0);

default:

printf("输入操作错误,重新");

}

gotostart;

return0;

}

其中用到输出*来美化系统运行页面,然后用system("color2e");语句来修改dos界面前背景颜色,如;

(二)、插入函数

structstu*charu(structstu*head,structstu*q)//插入新结点

{

structstu*p;

for(p=head;p->next!

=NULL;p=p->next);

p->next=q;

q->next=NULL;

returnhead;

}

运行界面如图:

本部分采用尾插法。

(三)、删除结点

代码如下:

structstu*del(structstu*head)//删除结点

{

structstu*p,*q;

inta;//要删除学生的学号

if(head->next==NULL)

printf("**********************************通讯录为空!

!

!

*********************************\n\n\n");

else

{

printf("\t输入要删除学生学号:

");

scanf("%d",&a);

for(p=head,q=p->next;q->xh!

=a&&q->next!

=NULL;)

{

p=p->next;

q=p->next;

}

if(q->xh==a)

{

p->next=q->next;

free(q);

printf("删除成功!

!

!

\n");

}

elseprintf("nopeoplehavefound!

!

!

");

}

returnhead;

}

运行界面:

通讯录为空时:

不为空时:

(四)、查找

输入要查找学生学号,找到后将其输出,如图:

(五)修改学生信息

先通过学号找到该学生,然后用switch语句选择修改项,再用switch和goto语句实现是否循环,运行如图:

(六)、保存文件

在D:

盘中创建一个读写文件,顺序将各节点信息保存进去,代码为:

structstu*baoc(structstu*head)//保存文件

{

FILE*fp;

structstu*p=head;

if(head->next==NULL)

printf("**********************************通讯录为空!

!

!

*********************************\n\n\n");

else

{

if((fp=fopen("D:

\\班级通讯录.txt","w"))==NULL)

{

printf("can'topenfile!

!

!

\n");

exit(0);

}

while(p->next!

=NULL)

{

fwrite(p->next,sizeof(structstu),1,fp);

p=p->next;

}

fclose(fp);

printf("保存文件成功!

!

!

\n\n");

}

returnhead;

}

运行如图:

(七)、释放结点退出系统

用指针p扫描链表,头指针逐步后移,释放结点p,代码如下:

voidsf(structstu*head)

{

structstu*p=head;

printf("释放链表:

\n");

while(p!

=NULL)

{

head=head->next;

free(p);

p=head;

}

printf("释放链表成功!

!

!

\n");

}

运行如图;

六、附录:

完整原代码

#include

#include

#include

#include

structstu

{

charname[100];//

intxh;//学号

intgrade;//年级

charcel[15];//手机

chartel[50];//

charmail[50];//

charadd[100];//地址

charpost[15];//邮编

structstu*next;

};

structstu*charu(structstu*head,structstu*q)//插入新结点

{

structstu*p;

for(p=head;p->next!

=NULL;p=p->next);

p->next=q;

q->next=NULL;

returnhead;

}

voidsearch(structstu*head)//查找结点并输出

{

structstu*p;

inta;//要查找学生的学号

if(head->next==NULL)

printf("**********************************通讯录为空!

!

!

*********************************\n\n\n");

else

{

printf("\t输入要查询学生学号:

");

scanf("%d",&a);

for(p=head->next;p->next!

=NULL;p=p->next)

{

if(p->xh==a)

{

printf("要查找的学生信息为:

\n");

printf("★:

");puts(p->name);

printf("\t学号:

");printf("%d",p->xh);

printf("\t年级:

");printf("%d\n",p->grade);

printf("\t手机:

");puts(p->cel);

printf("\t:

");puts(p->tel);

printf("\t:

");puts(p->mail);

printf("\t地址");puts(p->add);

printf("\t邮编:

");puts(p->post);

printf("\t查找成功!

!

!

"):

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

break;

}

}

if(p->xh==a)

{

printf("要查找的学生信息为:

\n");

printf("★:

");puts(p->name);

printf("\t年级:

");printf("%d\n",p->grade);

printf("\t手机:

");puts(p->cel);

printf("\t:

");puts(p->tel);

printf("\t:

");puts(p->mail);

printf("\t地址");puts(p->add);

printf("\t邮编:

");puts(p->post);

printf("\t查找成功!

!

!

"):

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

}

elseprintf("nopeoplehavefound!

!

!

\n");

}

}

structstu*del(structstu*head)//删除结点

{

structstu*p,*q;

inta;//要删除学生的学号

if(head->next==NULL)

printf("**********************************通讯录为空!

!

!

*********************************\n\n\n");

else

{

printf("\t输入要删除学生学号:

");

scanf("%d",&a);

for(p=head,q=p->next;q->xh!

=a&&q->next!

=NULL;)

{

p=p->next;

q=p->next;

}

if(q->xh==a)

{

p->next=q->next;

free(q);

printf("删除成功!

!

!

\n");

}

elseprintf("nopeoplehavefound!

!

!

");

}

returnhead;

}

structstu*change(structstu*head)//修改结点容

{

intb,a,c;

structstu*p;

if(head->next==NULL)

printf("**********************************通讯录为空!

!

!

*********************************\n\n\n");

else

{

printf("输入要修改学生学号:

");

scanf("%d",&a);

for(p=head->next;p!

=NULL;p=p->next)

{

if(p->next->xh==a)

{

start:

printf("输入想要修改什么?

\n");

printf("\t\t\t1:

修改\n");

printf("\t\t\t2:

修改学号\n");

printf("\t\t\t3:

修改年级\n");

printf("\t\t\t4:

手机\n");

printf("\t\t\t5:

\n");

printf("\t\t\t6:

\n");

printf("\t\t\t7:

地址\n");

printf("\t\t\t8:

邮编\n");

printf("请输入你的选择:

");

scanf("%d",&b);

switch(b)

{

case1:

printf("\t输入新:

");

scanf("%s",p->name);break;

case2:

printf("\t输入新学号:

");

scanf("%d",&p->xh);break;

case3:

printf("\t输入新的班级:

");

scanf("%d",&p->grade);break;

case4:

printf("\t输入新的手机号:

");

scanf("%s",p->cel);break;

case5:

printf("\t输入新的号:

");

scanf("%s",p->tel);break;

case6:

printf("\t输入新的:

");

scanf("%s",p->mail);break;

case7:

printf("\t输入新的地址:

");

scanf("%s",p->add);break;

case8:

printf("\t输入新的邮编;");

scanf("%s",p->post);break;

default:

printf("输入操作错误,请重新输入:

");

}

printf("修改成功!

!

!

\n");

printf("是否要修改其他项?

1:

是2:

否\n");

printf("请输入你的选择:

");

scanf("%d",&c);

switch(c)

{

case1:

gotostart;

case2:

break;

}

}

}

}

returnhead;

}

voidprintall(structstu*head)//输出全部通讯录

{

structstu*p=head->next;

while

(1)

{

if(p==NULL)

{

printf("**********************************通讯录为空!

!

!

*********************************\n\n\n");

break;

}

elseif(p->next==NULL)

{

printf("★:

");puts(p->name);

printf("\t学号:

");printf("%d\n",p->xh);

printf("\t年级:

");printf("%d\n",p->grade);

printf("\t手机:

");puts(p->cel);

printf("\t:

");puts(p->tel);

printf("\t:

");puts(p->mail);

printf("\t地址:

");puts(p->add);

printf("\t邮编:

");puts(p->post);

printf("输出成功!

!

!

\n");

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

break;

}

else

{

printf("★:

");puts(p->name);

printf("\t学号:

");printf("%d\n",p->xh);

printf("\t年级:

");printf("%d\n",p->grade);

printf("\t手机:

");puts(p->cel);

printf("\t:

");puts(p->tel);

printf("\t:

");puts(p->mail);

printf("\t地址:

");puts(p->add);

printf("\t邮编:

");puts(p->post);

printf("\n");

p=p->next;

continue;

}

printf("输出成功!

!

!

\n");

}

}

structstu*baoc(structstu*head)//保存文件

{

FILE*fp;

structstu*p=head;

if(head->next==NULL)

printf("**********************************通讯录为空!

!

!

*********************************\n\n\n");

else

{

if((fp=fopen("D:

\\班级通讯录.txt","w"))==NULL)

{

printf("can'topenfile!

!

!

\n");

exit(0);

}

while(p->next!

=NULL)

{

fwrite(p->next,sizeof(structstu),1,fp);

p=p->next;

}

fclose(fp);

printf("保存文件成功!

!

!

\n\n");

}

returnhead;

}

voidsf(structstu*head)

{

structstu*p=head;

printf("释放链表:

\n");

while(p!

=NULL)

{

head=head->next;

free(p);

p=head;

}

printf("释放链表成功!

!

!

\n");

}

intmain()

{

intcz;//操作符

structstu*head,*q;

head=(structstu*)malloc(sizeof(structstu));

head->next=NULL;

system("color2e");//修改dos窗口前背景色,用两个十六进制数表示

printf("\n********************************C语言课程设计***********************************\n");

printf("***************★班级通讯录★*****************\n\n\n");

printf("*1:

新建通讯录*\n");

printf("*2:

删除通讯录*\n");

printf("*3:

修改通讯录*\n");

printf("*4:

查询通讯录*\n");

printf("*5:

显示全部记录*\n");

printf("*6:

保存为文件*\n");

printf("*7:

释放链表并结束程序*\n");

printf("*********************************************************\n");

start:

printf("输入操作符1-7:

");

scanf("%d",&cz);

switch(cz)

{

case1

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

当前位置:首页 > 总结汇报 > 学习总结

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

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