c语言通讯录管理实验报告及源程序代码之欧阳音创编.docx

上传人:b****5 文档编号:6337424 上传时间:2023-01-05 格式:DOCX 页数:19 大小:60.80KB
下载 相关 举报
c语言通讯录管理实验报告及源程序代码之欧阳音创编.docx_第1页
第1页 / 共19页
c语言通讯录管理实验报告及源程序代码之欧阳音创编.docx_第2页
第2页 / 共19页
c语言通讯录管理实验报告及源程序代码之欧阳音创编.docx_第3页
第3页 / 共19页
c语言通讯录管理实验报告及源程序代码之欧阳音创编.docx_第4页
第4页 / 共19页
c语言通讯录管理实验报告及源程序代码之欧阳音创编.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

c语言通讯录管理实验报告及源程序代码之欧阳音创编.docx

《c语言通讯录管理实验报告及源程序代码之欧阳音创编.docx》由会员分享,可在线阅读,更多相关《c语言通讯录管理实验报告及源程序代码之欧阳音创编.docx(19页珍藏版)》请在冰豆网上搜索。

c语言通讯录管理实验报告及源程序代码之欧阳音创编.docx

c语言通讯录管理实验报告及源程序代码之欧阳音创编

C语言程序设计实训报告

时间:

2021.03.11

创作:

欧阳音

课程名称C语言程序设计实训

课题名称通讯录管理

专业软件工程

班级K软件151

学号

姓名

指导教师

2016年1月1日

湖北汽车工业学院科技学院

C语言程序设计实训任务书

课程名称C语言程序设计实训

课题通讯录管理

专业班级软件工程

学生姓名

学号

指导老师

审批

一、设计内容与设计要求

1.设计内容:

设计课题:

通讯录管理

一、问题描述:

该设计实现对通讯录得管理功能,具体包括从键盘输入通讯录的信息、从指定的文件中读入通讯录的信息、按姓名查询通讯录的信息、按分类查询通讯录的信息、删除指定姓名的通讯录的信息、将通讯录信息保存在指定的文件中等。

二、功能要求:

1)能从键盘输入通讯录的信息(增加,输入时需要能检查该姓名的通讯录的记录是否已经存在,如果存在,需要询问是否是覆盖还是增加,需要判断输入的类型是否存在)

2)能从指定的文件中读入通讯录的信息

3)能按姓名查询通讯录的信息

4)能按分类查询通讯录的信息

5)能删除指定姓名的通讯录的信息

6)能将通讯录信息保存在指定的文件中

7)所有数据符合实际应用要求

2.设计要求:

1)设计正确,方案合理。

2)界面友好,使用方便。

3)程序精炼,结构清晰。

4)上机演示。

3.设计报告要求:

课程设计报告格式如下:

1)正文的格式:

一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体,行距为22。

2)正文的内容:

课题的主要功能、课题的功能模块的划分、主要功能的实现、程序调试、总结、附件(所有程序的源代码,要求对程序写出必要的注释)。

3)课程设计报告装订顺序:

封面、任务书、目录、正文、评分、程序清单附件。

二、进度安排

星期

时间

班级

内容

地点

6:

30-8:

30

K软件151

熟悉课题的任务和要求,查阅相关资料,做好编码准备

2601

6:

30-8:

30

K软件151

程序编码、调试

2601

6:

30-8:

30

K软件151

程序编码、调试和测试,书写报告

2601

6:

30-8:

30

K软件151

答辩、检查、验收、提交设计报告

2601

湖北汽车工业学院科技学院

2015年12月20日

1系统需求分析

本系统首先设计出了主函数,然后根据去要实现的功能分别设计,添加、显示、删除、查找、修改功能的子函数。

在现实的函数设计过程中首先运用文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。

添加函数在设计时通过申请一片空间,然后通过指针将需要添加进去,从而实现添加功能。

删除函数的设计是首先从文件找到要删除的人,然后通过写一个实现删除目的的for循环将人从内存里面删除,然后在用写的方式打开文件,将内存的信息写入文件,实现删除。

查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。

修改也大体和删除相同。

2概要设计

系统功能模块图:

3详细设计

3.1数据结构

本系统主要采用链表结构类型来表示储存在“通讯录管理系统”中的信息。

其中,链表结点由四个分量构成:

编号、联系人姓名、电话号码、指向该结构体的指针。

3.2主菜单模块:

本系统设置了5个子功能菜单,5个子功能的设计描述如下。

(1)通讯录信息的输入。

可以一次输入多个通讯成员的信息,建立通讯录。

该功能由insert()函数实现。

(2)通讯录信息的显示。

可以查看通讯录中所有的通讯录成员记录。

该功能由output()函数实现。

(3)通讯录信息的保存。

可以将输入的通讯录成员的信息进行保存。

该功能由save()函数实现。

(4)通信记录的删除。

可以对通讯录中不再需要的信息进行删除。

该功能由del()函数实现。

(要彻底删除,必须要删除counter.txt和通讯录.txt中的内容。

如下图:

(5)通信记录的修改。

可以将通讯录中的联系成员的信息进行修改,并保存。

该功能由modify()函数实现。

(6)通信记录的查找。

可以通过3种方式进行对通讯信息进行查找。

该功能由found(found_code()、found_name()、found_tele())函数实现。

structtele//定义数据结构

{

charcode[8];//编号

charname[20];//姓名

chartele[16];//电话号码

};

/*********************函数声明********************/

voidcreat();//创建通讯录

voidload();//加载数据

voidmenu();//菜单显示

voidchoose_1(int);//选择功能

voidinsert();//1、通讯录信息的输入

voidoutput();//2、通讯录信息的显示

voidsave();//3、通讯录信息的保存

voiddel();//4、通信记录的删除

voidmodify();//5、通信记录的修改

voidfound();//6、记录的查找(3种方式)

voidchoose_2(int);//选择查询的方式

voidfound_code();//6.1、按编号查询

voidfound_name();//6.2、按姓名查询

voidfound_tele();//6.3、按电话号码查询

voidquit();//7、退出系统

3.3添加模块

此模块为添加信息模块,添加后再调用保存所添加的数据,支持多条信息的添加。

YN

 

【程序】

/*************************通讯信息录入函数**********************/

/**************将函数写入内存中,由person[N]数组保存着**********/

voidinsert()

{

structtele*p;

system("cls");

p=(structtele*)malloc(sizeof(structtele));//将动态分配的内存首地址赋给p

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

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

printf("\t编号:

");

scanf("%s",p->code);

strcpy(person[counter+1].code,p->code);

printf("\t姓名:

");

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

strcpy(person[counter+1].name,p->name);

printf("\t电话:

");

scanf("%s",p->tele);

strcpy(person[counter+1].tele,p->tele);

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

counter++;

free(p);//释放空间

getchar();

getchar();

system("cls");

menu();

}

3.4显示模块

此模块为显示所有记录,流程图如下:

 

【程序】

/**********************通讯信息显示函数****************************/

/***********从内存中将数据显示在屏幕上,不用打开文件***************/

voidoutput()

{

inti=1;

system("cls");

if(counter)

{

for(i=0;i<=counter;i++)

printf("\n\t%-8s%-20s%-16s\n",person[i].code,person[i].name,person[i].tele);

printf("\t");

}

else

printf("\n\n\n\n\n\t\t记录为空,请输入联系人信息!

");

getchar();

getchar();

system("cls");

menu();

}

3.5删除模块

此模块先利用查找模块找到所要删除的信息,然后根据用户的选择来确定是否删除信息,此种调用到save函数。

其流程图如下:

YN

 

YN

 

【程序】

/***************************信息删除函数***************************/

voiddel()//根据姓名删除,根据显示选择要删除的内容

{

intk=1;

intc=0;

charm;

charnamekey[20];

system("cls");

printf("\n\n\n\n\n\n\t\t\t请输入要删除的姓名:

");

scanf("%s",namekey);

while(k<=counter)

{

if(!

strcmp(namekey,person[k++].name))

{

c=k-1;

break;

}

}

if(c)

{

printf("\t\t\t已查到,记录为:

\n\n\n");

printf("\t%-10s%-20s%-20s\n",person[0].code,person[0].name,person[0].tele);

printf("\t%-10s%-20s%-20s\n",person[c].code,person[c].name,person[c].tele);

printf("\n\n\t\t\t确定要删除吗?

(Y/N):

");

scanf("%s",&m);

if(m=='y'||m=='Y')

{

if(c==counter)

{

strcpy(person[counter].code,"\0");

strcpy(person[counter].name,"\0");

strcpy(person[counter].tele,"\0");

counter--;

}

else

{

for(k=c;k<=counter;k++)//后面的信息将前面的信息覆盖掉

{

strcpy(person[k].code,person[k+1].code);

strcpy(person[k].code,person[k+1].name);

strcpy(person[k].code,person[k+1].tele);

}

strcpy(person[counter].code,"\0");//最后的信息为空

strcpy(person[counter].name,"\0");

strcpy(person[counter].tele,"\0");

counter--;

}

printf("\t\t\t删除成功!

");

getchar();

getchar();

system("cls");

save();//用sava()函数将删除后的信息重新保存

menu();

}

else

{

system("cls");

menu();

}

}

else

{

printf("\n\t\t\t对不起没有此人记录!

");

getchar();

getchar();

system("cls");

menu();

}

}

4系统测试

4.1菜单显示

主菜单具有所有函数的功能实现的选择功能,通过主菜单的操作进入各个功能。

主菜单主要由主函数提供,其功能由子函数实现。

运行结果如下图所示:

4.2添加

在主菜单界面,用户输入1并回车,然后按照提示建立通讯录,分别输入通讯录成员的编号,姓名,电话号码,运行结果如下图所示:

4.3显示

在主菜单下,用户输入2并回车,可以查看通讯录中所有成员信息。

运行结果如下图所示:

5课程设计总结

通过这次的课程设计,我对很多的函数有了新的认识,也学会了很多,学会了运用多种函数,我也明白了编写软件的基本过程和方法。

在这个过程中我学会了很多平时编程不会使用的函数,还有编写的方法。

特别是文件的开启和关闭,读与写,总的来说,这次课程设计让我受益匪浅啊!

其实在编写软件的过程中也遇到了很多的困难,每一个自定义函数都是经过多次的调试和改正错误,曾经想过要放弃的,但是为了完成这个任务还是拼命的坚持了下来,毫不畏惧困难才是真正的我,还有就是编写和改错的过程中受到许多同学的帮助,在一番折腾之后,我总算是顺利的完成了这次的《通讯录管理》的程序设计。

虽然在调试程序的过程中,遇到过很多很多的困难,但是当软件调试成功时那种喜悦的感觉没有什么东西可以代替。

在程序的编写过程中我发现我自己有很多的知识漏洞和缺陷,以至于编写完后,一经过编译,发现了好多的错误,所以我需要进一步的来完善我自己。

在这几天的编写过程中,对我而言,我的C语言是有了很大的进步和了解。

在此次的编写过程中,我知道和掌握了很多的经验,它们肯定是能够促进我学习的。

此次的课程设计不仅给了我很多很好的经验,也让我体会到了失败时的焦虑、无助和难受,当然我更喜欢成功后的兴奋和喜悦咯~~~啦啦啦~~~

附录:

源程序代码:

#include

#include

#include

#include

#defineN35//改变N的值,就可以改变记录的联系人个数

structtele//定义数据结构

{

charcode[8];//编号

charname[20];//姓名

chartele[16];//电话号码

};

/*********************定义全局变量*********************/

FILE*fp;//文件指针

structteleperson[N];//记录联系人信息

intcounter;//统计记录个数(联系人个数)

/*********************函数声明********************/

voidcreat();//创建通讯录

voidload();//加载数据

voidmenu();//菜单显示

voidchoose_1(int);//选择功能

voidinsert();//1、通讯录信息的输入

voidoutput();//2、通讯录信息的显示

voidsave();//3、通讯录信息的保存

voiddel();//4、通信记录的删除

voidmodify();//5、通信记录的修改

voidfound();//6、记录的查找(3种方式)

voidchoose_2(int);//选择查询的方式

voidfound_code();//6.1、按编号查询

voidfound_name();//6.2、按姓名查询

voidfound_tele();//6.3、按电话号码查询

voidquit();//7、退出系统

/***********************MAIN函数*******************/

intmain()

{

system("cls");//清屏

creat();//为程序创建文件

fp=fopen("counter.txt","r");//r只读(打开)

fscanf(fp,"%d",&counter);//将数据赋值给counter

fclose(fp);//关闭打开的文件

load();//数据装载至内存中

menu();

return0;

}

/***********************创建通讯录******************/

voidcreat()

{

if((fp=fopen("通讯录.txt","r"))==NULL)//r只读(打开)

{

fp=fopen("通讯录.txt","w");//w为只写建立一个新的文件

fprintf(fp,"%-10s%-20s%-20s\n","编号","姓名","电话");//写入基本信息person【0】

fclose(fp);

}

if((fp=fopen("counter.txt","r"))==NULL)//r只读(打开)

{

fp=fopen("counter.txt","w");

fprintf(fp,"%d",0);//写入初值(自有文件新建时才有)

fclose(fp);

}

}

voidload()

{

inti;

if((fp=fopen("通讯录.txt","r"))!

=NULL)//r只读(打开),打开文件成功

for(i=0;i<=counter;i++)

fscanf(fp,"%s%s%s",person[i].code,person[i].name,person[i].tele);//将文件中的信息加载到内存中,供操作使用

else

printf("打开文件失败!

\n");

fclose(fp);

}

/*************************界面菜单显示函数************************/

voidmenu()

{

intk;

printf("\n");

printf("\n");

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

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

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

printf("\t**********1、通讯录信息的输入:

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

printf("\t**********2、通讯录信息的显示:

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

printf("\t**********3、通讯录信息的保存:

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

printf("\t**********4、通信记录的删除:

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

printf("\t**********5、通信记录的修改:

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

printf("\t**********6、通信记录的查找:

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

printf("\t**********0、退出系统:

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

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

printf("\tNowPleaseEnteryourchoose(0-6):

");

scanf("%d",&k);

choose_1(k);

}

/***************************函数功能选择函数***************************/

voidchoose_1(intk)

{

switch(k)

{

case1:

insert();break;

case2:

output();break;

case3:

save();system("cls");printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t保存成功!

");

getchar();getchar();system("cls");menu();break;

case4:

del();break;

case5:

modify();break;

case6:

found();break;

case0:

quit();break;

default:

;break;

}

}

/*******************************OK******************************/

/*************************通讯信息录入函数**********************/

/**************将函数写入内存中,由person[N]数组保存着**********/

voidinsert()

{

structtele*p;

system("cls");

p=(structtele*)malloc(sizeof(structtele));//将动态分配的内存首地址赋给p

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

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

printf("\t编号:

");

scanf("%s",p->code);

strcpy(person[counter+1].code,p->code);

printf("\t姓名:

");

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

strcpy(person[counter+1].name,p->name);

printf("\t电话:

");

scanf("%s",p->tele);

strcpy(person[counter+1].tele,p->tele);

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

counter++;

free(p);//释放空间

getchar();

getchar();

system("cls");

menu();

}

/**********************通讯信息显示函数****************************/

/***********从内存中将数据显示在屏幕上,不用打开文件***************/

voidoutput()

{

inti=1;

system("cls");

if(counter)

{

for(i=0;i<=counter;i++)

printf("\n\t%-8s%-20s%-16s\n",person[i].code,person[i].name,person[i].tele);

printf("\t");

}

else

printf("\n\n\n\n\n\t\t记录为空,请输入联系人信息!

");

getchar();

getchar();

system("cls");

menu();

}

/************保存、修改、删除只针内存中的数组进行操作*************/

/************************通讯信息保存函数*************************/

voidsave()

{

inti;

system("cls");

if((fp=fopen("counter.txt","w"))==NULL)//w只写覆盖原来的数据

{

pri

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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