程序设计语言课程设计通讯录.docx

上传人:b****5 文档编号:7321185 上传时间:2023-01-22 格式:DOCX 页数:17 大小:338.18KB
下载 相关 举报
程序设计语言课程设计通讯录.docx_第1页
第1页 / 共17页
程序设计语言课程设计通讯录.docx_第2页
第2页 / 共17页
程序设计语言课程设计通讯录.docx_第3页
第3页 / 共17页
程序设计语言课程设计通讯录.docx_第4页
第4页 / 共17页
程序设计语言课程设计通讯录.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

程序设计语言课程设计通讯录.docx

《程序设计语言课程设计通讯录.docx》由会员分享,可在线阅读,更多相关《程序设计语言课程设计通讯录.docx(17页珍藏版)》请在冰豆网上搜索。

程序设计语言课程设计通讯录.docx

程序设计语言课程设计通讯录

程序设计语言课程设计报告

通讯录

1.添加

2.查询

3.删除

4.修改

5.排序

6.输出全部信息

7.写入文件

8.读取文件

0.退出

程序的主界面

1课程设计目的和要求

1.1设计要求:

基本功能:

a)添加个人信息

b)查询个人信息

c)删除个人信息

d)修改个人信息

e)信息排序

f)输出全部信息

拓展功能:

采用文件形式对通讯录进行操作,包括:

g)写入文件

h)读取文件

创新(自拟)功能:

程序实现的其它功能由个人自拟。

1.2设计要求具体说明

通讯录至少应该有以下数据项:

姓名,家庭住址,手机号码,邮编,E-mail。

输入信息时要检查数据项手机、邮编、E-mail的合法性,手机号码:

11位数字;邮编:

6位数字;E-mail:

包含@字符,且@两边都非空。

对通讯录应该包含有以下操作(包括基本功能和拓展功能):

a)向通讯录中添加信息;

b)在通讯录中按姓名或手机号查找个人信息;

c)删除通讯录中的个人信息;

d)修改通讯录中的个人信息,并保存入文件;

e)按不同数据项排序后列表输出通讯录中所有人的信息。

通讯录中记录的数量没有限制。

f)将通讯录中的数据写入文件和从文件读入数据。

程序启动时先从文件读入数据,如果文件中没有数据则给出提示;写入文件时有两种方式,一为覆盖所有原有的内容;二为只将本次操作所修改的个人信息写入文件

g)程序启动时先从文件读入数据,如果文件中没有数据则给出提示退出程序。

1.3设计提示

定义合适的结构体类型,使用链表或数组的方式组织数据。

2通讯录概述

通讯录包括能够实现添加、查询、删除、修改、排序、输出全部信息以及写入文件、读取文件。

这里的学生通讯记录为姓名、家庭地址、手机号码、邮箱、邮编。

2.1程序的基本功能

a)添加个人信息

b)查询个人信息

c)删除个人信息

d)修改个人信息

e)信息排序

f)输出全部信息

2.2拓展功能:

g)写入文件

h)读取文件

3通讯录的分析

通讯录程序分析如结构图所示。

3.1主程序

定义结构体数组,使用循环,让程序能够通过选择进行各种操作。

3.2(主界面)输入学生信息

输入学生的姓名、手机号码、家庭地址、邮箱、邮编。

每次输入学生信息时判断其合法性。

根据要求进入主菜单,并选择其相应的选项(1、显示2、查询3、删除4、插入5、排序6、保存7、退出)进行运行

3.3写入文件

将所输入的信息以二进制方式存入文件,需输入所选择的文件所在全路径。

3.4读取文件

读取文件并在屏幕上打印文件所储存的信息,需输入所选择的文件所在全路径。

3.5退出

退出系统。

4通讯录详细设计

通讯录设计分为两个部分:

一、主函数;二、功能函数。

此次设计使用结构体数组的方式编写,定义结构体数组,链表,全局变量,主函数,功能函数。

#include

#include//主要有malloc,calloc,free,realloc函数时

#include//在运用字符串处理函数时

#include//定义结构体

typedefstructstudent//用typedef制定类型名FILE

{

charphonenum[15],name[20],add[35],email[10],postcode[35];

}elemtype;//定义结点或指定新类型名为elemtype

structnode

{

elemtypedata;node*next;

};//定义整体变量

charPRINT='0',DESE='0',SEARCH='0',C;

//PRINT=='Y'表示显示所有时的标志,作为控制空格之用

//SEARCH=='N'表示在通讯录中没找到相应的信息

//DESE=='D'表示使用删除功能时要输出的提示语

//DESE=='S'表示使用查询功能时要输出的提示语

//子函数

voidbeginmenu();//开始菜单

voidmodmenu();//模式选择

voidimportmenu();//菜单--导入文件

voidreadfromfile();//文件导入

voidcreatesl();//产生一个单链表

voidmainmenu();//主菜单选择

voidshowall();//输出单链表

voidsearchmemu();//查询菜单

node*searchnum();//按序号查询

node*searchbynpa();//按名字、电话号码、地址、邮箱、邮编查询

voiddeletemenu();//删除菜单

voiddeletebynpan();//按名字、电话号码、地址、序号、邮箱、邮编删除

voiddeleteall();//删除所有信息

voidinsertmenu();//插入菜单----插入一条信息(按序号插入)

voidlistmenu();//排序菜单

voidsavemenu();//菜单--保存到文件

voidwritetofile();//写入文件

voidexitmenu();//退出菜单选择

用户界面如图所示:

%%%%%%欢迎使用通讯录%%%%%%

***********************************

***********************************

是否导入已有文件TXT.txt--Y/N--

-

文本框4.1用户操作界面

4.1主程序

先定义结构体数组后,用switch循环实现菜单选择。

4.2输入学生信息

输入姓名、手机号码(11位)、地址、邮箱、邮编(6位),而每次输入的学生信息使用do......whlie判断其合法性。

下面举例:

voidpread(elemtype*x)//fread要设置输入4个信息,而pread可直接读取其中内容

{

printf("\t请输入学生的内容:

\n\n");

printf("----------姓名:

");

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

do

{

printf("----------手机号码(11位):

");

scanf("%s",x->phonenum);

}while(strlen(x->phonenum)!

=11);

printf("----------地址:

");

scanf("%s",x->add);

printf("----------邮箱:

");

scanf("%s",x->email);

do

{

printf("----------邮编(6位):

");

scanf("%s",x->postcode);

}while(strlen(x->postcode)!

=6);

fflush(stdin);//清空缓存

};

4.3显示、查询、删除、插入、排序学生通讯录信息

显示、查询、删除、插入、排序学生通讯录信息的函数结构相似,放在一起来说明。

输入学生的姓名、手机号码、地址、邮箱、邮编,用do{……}while()确保选择正确,使用switch循环,可以按姓名,手机号码,地址,邮箱,邮编查询(删除、插入、排序)。

下面是以查询方式为例的举例:

//查询菜单

voidsearchmenu(node*h)

{

DESE='S';//表示使用查询功能时要输出的提示语

if(h->next==NULL)

{

printf("\n\n\n\t\t通讯录为空!

!

!

");

getch();

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

}

printf("\n\n\t\t[查询]");

printf("\n\t\t1--按名字查询2--按手机号码查询");

printf("\n\t\t3--退出查询");

get_C();

printf("\n");

switch(C)

{

case'1':

case'2':

searchbynpa(h,C);break;

case'3':

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

default:

error();searchmenu(h);break;

}

DESE='0';

}

删除前的通讯录为:

[通讯录]

序号姓名手机号码地址邮箱邮编

1zhang11111111111shanghai111111111@123456123456

共1信息

请输入:

zhang

删除后的通讯录为空

请按任意键进入主菜单...

4.4写入文件、读取文件、保存文件和退出

写入文件:

定义文件指针,让用户输入储存信息的文件全路径,打开文件(打开文件时,须判断文件是否存在,但因为是写入文件,所以会直接生成一个新文件,但如果原文件已存在,则会在上一次写入后的末尾接下去写),写入信息,关闭文件。

读取文件:

定义文件指针,让用户输入储存信息的文件全路径,打开文件(打开文件时,须判断文件是否存在,若原文件不存在则打印找不到的字样),

//从文件导入

voidreadfromfile(node**h)

{

FILE*fp;//定义文件型指针变量

inti=0;

if((fp=fopen("TXL.txt","r"))==NULL)//打开输入文件TXL.txt

{

printf("\n\n\t\t通讯录文件不存在");

if((fp=fopen("TXL.txt","w"))==NULL)//打开输出文件

{

printf("\n\n\t\t建立失败");

exit(0);//终止程序

}

else

{

printf("\n\n\t\t通讯录文件已建立");

printf("\n\n\t\t按任意键开始创建通讯录");

getch();

*h=NULL;

return;

}

}

fseek(fp,0,2);//文件位置指针从文件开始移动到文件末尾

if(ftell(fp)>0)//文件不为空

{

node*p,*k;

elemtypex;

rewind(fp);//使文件位置指针重新置于文件开头

fscanf(fp,"%s\n",x.name);

fscanf(fp,"%s\n",x.phonenum);

fscanf(fp,"%s\n",x.add);

fscanf(fp,"%s\n",x.email);

fscanf(fp,"%s\n",x.postcode);

*h=(node*)malloc(sizeof(node));

k=(node*)malloc(sizeof(node));

*h=k;

while(!

feof(fp))//feof(of)将文件指针重新指向一个流的开头

{

p=(node*)malloc(sizeof(node));//在内存的动态存储区中分配一块长度为"size"字节的连续区域。

函数的返回值为该区域的首地址。

fscanf(fp,"%s\n",p->data.name);

fscanf(fp,"%s\n",p->data.phonenum);

fscanf(fp,"%s\n",p->data.add);

fscanf(fp,"%s\n",p->data.email);

fscanf(fp,"%s\n",p->data.postcode);

k->next=p;

k=p;

p->next=NULL;

p=p->next;//使p指向下一个结点

}

printf("\n\n\t\t文件导入成功");

printf("\n\n\t\t按任意键进入模式选择");

getch();

return;

}

printf("\n\n\t\t文件导入成功");

printf("\n\n\t\t通讯录文件中无任何纪录");

printf("\n\n\t\t按任意键开始创建通讯录");

*h=NULL;

fclose(fp);

getch();

return;

}

这里使用了while(!

feof(fp))判断,使读入数据时避免读入乱码信息,当与文件结束时,feof(fp)=1,!

feof(fp)=0时就不再执行while循环。

而在fread后面加入if(feof(fp))的判断也是此用意。

最后m=f是为了下次输入时,能在文件后面继续写入而加的,因为每次使用结束之后m值会变化。

5通讯录程序设计总结

5.1完成情况

1.本上已经完成基本功能,拓展功能。

并进行适当的运行,运行情况良好。

2.于时间的原因,还没有更加完善本次通讯录的设计程序。

3.能正确的判断邮箱的正确性,导致输出时出现乱码。

4.让用户任意选择按姓名,手机号码,地址,邮箱,邮编进行排序,排序可以使用冒泡排序法和指针实现。

本程序中使用的是冒泡指针法排序。

5.果可以,希望能在程序中添加更多的学生信息,如学生的各科成绩等。

5.2遇到的问题及解决

1.对手机号码,邮编的位数进行判断时出错,经过不断地运行与实验,解决了此问题,用do…..while循环结构进行判断。

2.strlen(phonenum)!

=11错误的,应为Strlen(x->phonenum)!

=11

3.数组不可>或<

4.strcpy()用于字符串,int只需赋值

5.Break;是跳出循环

6.两重循环不用同一变量

7.NULL表示“空地址”

6程序清单

#include

#include//主要有malloc,calloc,free,realloc函数时

#include//在运用字符串处理函数时

#include//定义结构体

typedefstructstudent//用typedef制定类型名FILE

{

charphonenum[15],name[20],add[35],email[10],postcode[8];

}elemtype;//定义结点或指定新类型名为elemtype

structnode

{

elemtypedata;node*next;

};//定义整体变量

charPRINT='0',DESE='0',SEARCH='0',C;

//PRINT=='Y'表示显示所有时的标志,作为控制空格之用

//SEARCH=='N'表示在通讯录中没找到相应的信息

//DESE=='D'表示使用删除功能时要输出的提示语

//DESE=='S'表示使用查询功能时要输出的提示语

//子函数

voidbeginmenu();//开始菜单

voidmodmenu();//模式选择

voidimportmenu();//菜单--导入文件

voidreadfromfile();//文件导入

voidcreatesl();//产生一个单链表

voidmainmenu();//主菜单选择

voidshowall();//输出单链表

voidsearchmemu();//查询菜单

node*searchnum();//按序号查询

node*searchbynpa();//按名字、电话号码、地址、邮箱、邮编查询

voiddeletemenu();//删除菜单

voiddeletebynpan();//按名字、电话号码、地址、序号、邮箱、邮编删除

voiddeleteall();//删除所有信息

voidinsertmenu();//插入菜单----插入一条信息(按序号插入)

voidlistmenu();//排序菜单

voidsavemenu();//菜单--保存到文件

voidwritetofile();//写入文件

voidexitmenu();//退出菜单选择

7参考文献

XX知道,XX文献,XX空间,c语言大全,c语言程序设计教程

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

当前位置:首页 > 求职职场 > 笔试

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

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