C语言实训通讯录设计.docx

上传人:b****2 文档编号:24591248 上传时间:2023-05-29 格式:DOCX 页数:29 大小:85.76KB
下载 相关 举报
C语言实训通讯录设计.docx_第1页
第1页 / 共29页
C语言实训通讯录设计.docx_第2页
第2页 / 共29页
C语言实训通讯录设计.docx_第3页
第3页 / 共29页
C语言实训通讯录设计.docx_第4页
第4页 / 共29页
C语言实训通讯录设计.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

C语言实训通讯录设计.docx

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

C语言实训通讯录设计.docx

C语言实训通讯录设计

实训报告

 

题目:

通讯录

院系:

专业:

姓名:

学号:

指导教师:

日期:

2009-09-18

 

桂林电子科技大学信息科技学院

目录

1问题定义…………………………………………………………………………..3

2系统设计……………………………………………………………………3

2.1总体设计………………………………………………………………………………3

2.2详细设计………………………………………………………………………………4

2.2.1主控流程…………………………………………………………………………4

2.2.2数据结构设计……………………………………………………………………5

2.2.3输入记录模块……………………………………………………………………5

2.2.4查询记录模块…………………………………………………………………5

2.2.5删除记录模块……………………………………………………………………5

2.2.6显示所有记录模块…………………………………………………………….6

3系统实现………………………………………………………………………6

3.1编码………………………………………………………………………6

3.1.1程序源代码……….……………………………………………………………6

3.1.2主函数main()……….………………………………………………………10

3.1.3主菜单界面………….………………………………………………………14

3.1.4读取文件中的记录……………………………………………………………….14

3.1.5排序后显示所有记录……………………………………………………………15

3.1.6删除学生记录………….…………………………………………………………15

3.1.7查找学生记录………….……………………………………………………….15

3.1.8插入记录………….……………………………………………………………..16

3.1.9写入记录到文件中………….………………………………………………….16

3.2测试与调试………………………………………………………………………17

3.2.1概述………….……………………………………………………………17

3.2.2程序测试………….……………………………………………………………18

4系统维护………………………………………………………………………20

5归纳总结…………………………………………………………………………20

5.1开发经验…………………………………………………………………………20

5.2实训中遇到的问题及解决方法………………………………………………20

5.3设计中的不足之处……………………………………………………………………20

5.4感想和心得体会……………………………………………………………………21

6参考资料………………………………………………………………………21

 

通讯录

本题目设计目的是训练学生的基本编程能力,了解通讯录的开发流程,熟悉C语言的文件的各种基本操作。

本程序中涉及结构体、各种语句的运用如for();switch();if….else等方面的知识。

通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,初步掌握链表的一些结构及构成。

掌握利用结构体实现对通讯录的原理,为进一步开发出高质量的通讯录打下坚实的基础。

1、问题定义

创建一个通讯录。

假设系统中每个学生记录包括姓名、性别、联系地址、联系电话,生日信息的修改、删除和查询等程序的运行效果如下图所示,选择任意菜单后,实现相应功能。

在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。

2、系统设计

2.1总体设计

采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。

需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。

可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。

图2.1通讯录系统功能模块图

本通讯录由实现,如图2.1所示,它由如下四大功能模块组成:

●输入记录模块。

完成将数据存入结构体的工作。

记录可以从文件中读入,也可从键盘逐个输入朋友信息。

朋友信息由朋友的姓名、性别、联系地址、联系电话构成。

当从数据文件中读入记录时,也就是把在以记录为单位存储的数据文件中。

●查询记录模块。

完成在结构体中查找满足相关条件的学生记录。

在此通讯录中,用户可以按照姓名在中进行查找。

若找到该学生的记录,则返回指向该学生的记录的指针。

否则返回一个值为NULL的空指针,并打印出未找到该学生记录的提示信息。

●插入记录模块。

完成对朋友信息的更新。

在此通讯录中,它实现了对好友记录的增加和排序操作,并将追加后的数据存入源数据文件。

●输出记录模块。

实现对朋友信息的存盘,即将记录写入数据文件中;

2.2详细设计

2.2.1主控main()函数执行流程

2.2.2数据结构设计

结构体

sstructaddr/*通讯地址结构定义*/

{charpost_num[10];/*邮编*/

charaddr[40];/*家庭地址*/

};

structbirth/*出生年月结构定义*/

{intyear;/*年份*/

intmonth;/*月份*/

intday;/*日期*/

};

structfriend1/*电子通讯录结构定义*/

{intnumber;/*序号*/

charname[20];/*姓名*/

charsex;/*性别*/

structbirthbirth;/*出生年月*/

structaddraddr;/*通信地址*/

chartelephone[13];/*联系电话*/

}friends[50];

FILE*fp;

inti;

图2.2主控函数执行流程图

2.2.3输入记录模块

输入记录模块主要实现将数据存入结构体中。

,用户应选择2,调用Data_Inpu()函数,进行朋友姓名、电话、地址、性别的输入,即完成在结构体中添加记录的操作。

2.2.4查询记录模块2.2.4

查询记录模块主要实现了在结构体中按姓名查找满足相关条件的信息记录。

在查询函数search()中,找到相同名字则打印出记录。

2.2.5删除记录模块

该操作完成删除指定姓名的记录,

输入要删除的序号,输入后调用函数若找到该记录,询问是否继续寻找相同姓名的记录。

2.2.6显示所有记录模块

该操作完成显示所有记录信息,它分两步完成。

第一步,按照数组中序号进行排序。

第二步,逐条显示出来。

 

3、系统实现

3.1编码

3.1.1程序源代码

#include

#include

#include

#include

#include

structaddr/*通讯地址结构定义*/

{charpost_num[10];/*邮编*/

charaddr[40];/*家庭地址*/

};

structbirth/*出生年月结构定义*/

{intyear;/*年份*/

intmonth;/*月份*/

intday;/*日期*/

};

structfriend1/*电子通讯录结构定义*/

{intnumber;/*序号*/

charname[20];/*姓名*/

charsex;/*性别*/

structbirthbirth;/*出生年月*/

structaddraddr;/*通信地址*/

chartelephone[13];/*联系电话*/

}friends[50];

FILE*fp;

inti;

voidData_Load()

{intj;

longk;

fp=fopen("friend.txt","r+t");/*打开文件friend.txt*/

if(fp!

=NULL)

{for(i=1;i<50;i++)

{j=fgetc(fp);

if(j==EOF)/*判断是否到了文件尾*/

return;

k=i-1;

fseek(fp,k*sizeof(structfriend1),SEEK_SET);

fread(&friends[i],sizeof(structfriend1),1,fp);/*从文件中读取一条记录*/

}

}

else

{fp=fopen("friend.txt","w");

i=1;

}

}

voidData_Show(intj)/*打印记录的详细资料*/

{

printf("\n\n\tNo:

%3d\n",friends[j].number);

printf("\n\tBirthday(y/m/d):

%4d%2d%2d",friends[j].birth.year,friends[j].birth.month,friends[j].birth.day);

printf("\n\tPostnum:

%-10s",friends[j].addr.post_num);

printf("\n\taddress:

%-40s",friends[j].addr.addr);

printf("\n\tTele%-13s",friends[j].telephone);

}

voidData_Input(intj)/*记录插入函数*/

{

fflush(stdin);

friends[j].number=j;

printf("\n\n\n\tNo%drecord",j);

printf("\n\n\tName:

");/*读入姓名*/

scanf("%s",friends[j].name);

fflush(stdin);

printf("\n\tSex(m/f):

");/*读入性别*/

scanf("%c",&friends[j].sex);

printf("\n\t---birthday---");/*读入出生年月*/

printf("\n\tyear:

");

scanf("%d",&friends[j].birth.year);

printf("\n\t\tmonth:

");

scanf("%d",&friends[j].birth.month);

printf("\n\t\tday:

");

scanf("%d",&friends[j].birth.day);

printf("\n\tPost_number:

");/*读入邮编*/

scanf("%s",friends[j].addr.post_num);

printf("\n\tAddress:

");/*读入家庭地址*/

scanf("%s",friends[j].addr.addr);

printf("\n\ttelephone:

");/*读入联系电话*/

scanf("%s",friends[j].telephone);

printf("y/n");

if(getch()=='n')

main();

}

voidData_Save()

{

intj;

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

for(j=1;j<=i;j++)

{fwrite(&friends[j],sizeof(structfriend1),1,fp);

}

}

voidmain()

{

intj,k;

charch;

char*search_name;

clrscr();

Data_Load();

i--;

do

{printf("\n\n\n\tFunctionchoose:

");

printf("\n\t1.Read");

printf("\n\t2.Append");

printf("\n\t3.Delete");

printf("\n\t4.Search");

printf("\n\t5.Insert");

printf("\n\t6.SaveandExit");

printf("\n\t7.Quit");

printf("\n\n");

printf("\tChoice:

");

ch=getche();

switch(ch)

{case'1':

j=1;/*显示通讯录中的所有记录*/

while(getch()!

=0x1b&&j<=i)Data_Show(j++);

if(j>i)printf("\n\tEndofe_note\n");

break;

case'2':

/*增加通讯录中的记录*/

while(getch()!

=0x1b&&i<50)

{i++;

Data_Input(i);

}

if(i==50)printf("\n\te_noteisfilled\n");

break;

case'3':

/*删除通讯录中的记录*/

if(i<1)

{printf("\n\tNorecords\n");

break;

}

printf("\n\tDeleteNo:

");/*读入删除位置*/

scanf("%d",&k);

for(j=k;j

{strcpy(friends[j].name,friends[j+1].name);

friends[j].sex=friends[j=1].sex;

friends[j].birth.year=friends[j+1].birth.year;

friends[j].birth.month=friends[j+1].birth.month;

friends[j].birth.day=friends[j+1].birth.day;

strcpy(friends[j].addr.post_num,friends[j+1].addr.post_num);

strcpy(friends[j].addr.addr,friends[j+1].addr.addr);

strcpy(friends[j].telephone,friends[j+1].telephone);

}

i--;/*元素总数减1*/

break;

case'4':

/*通讯录查询功能*/

printf("\n\tPleaseinputname:

");

gets(search_name);

for(j=1;j<=i;j++)

{

if(strcmp(search_name,friends[j].name)==0)/*比较字符串*/

{Data_Show(j);/*查询成功,打印记录结束循环*/

break;

}

}

if(j>1)/*查询失败*/

printf("\n\tNosuchrecords");

break;

case'5':

printf("\n\tInsertNo:

");/*录入插入位置*/

scanf("%d",&k);

for(j=i+1;j

{strcpy(friends[j].name,friends[j-1].name);/*交换元素内容*/

friends[j].sex=friends[j-1].sex;

friends[j].birth.year=friends[j-1].birth.year;

friends[j].birth.month=friends[j-1].birth.month;

friends[j].birth.day=friends[j-1].birth.day;

strcpy(friends[j].addr.post_num,friends[j-1].addr.post_num);

strcpy(friends[j].addr.addr,friends[j-1].addr.addr);

strcpy(friends[j].telephone,friends[j-1].telephone);

}

Data_Input(k);

i++;

break;

case'6':

Data_Save();

exit(0);break;

case'7':

printf("\n\tDoyouwanttosavee_note:

(y/n)");

ch=getch();

if(ch=='y')Data_Save();

fclose(fp);

exit(0);

default:

printf("Pleasechoosenum1-4\n"

);

}

}while

(1);

}

3.1.2主函数main()

main()函数主要实现了对整个程序的运行控制,以及相关功能模块的调用。

voidmain()

{

intj,k;

charch;

char*search_name;

clrscr();

Data_Load();

i--;

do

{printf("\n\n\n\tFunctionchoose:

");

printf("\n\t1.Read");

printf("\n\t2.Append");

printf("\n\t3.Delete");

printf("\n\t4.Search");

printf("\n\t5.Insert");

printf("\n\t6.SaveandExit");

printf("\n\t7.Quit");

printf("\n\n");

printf("\tChoice:

");

ch=getche();

switch(ch)

{case'1':

j=1;/*显示通讯录中的所有记录*/

while(getch()!

=0x1b&&j<=i)Data_Show(j++);

if(j>i)printf("\n\tEndofe_note\n");

break;

case'2':

/*增加通讯录中的记录*/

while(getch()!

=0x1b&&i<50)

{i++;

Data_Input(i);

}

if(i==50)printf("\n\te_noteisfilled\n");

break;

case'3':

/*删除通讯录中的记录*/

if(i<1)

{printf("\n\tNorecords\n");

break;

}

printf("\n\tDeleteNo:

");/*读入删除位置*/

scanf("%d",&k);

for(j=k;j

{strcpy(friends[j].name,friends[j+1].name);

friends[j].sex=friends[j=1].sex;

friends[j].birth.year=friends[j+1].birth.year;

friends[j].birth.month=friends[j+1].birth.month;

friends[j].birth.day=friends[j+1].birth.day;

strcpy(friends[j].addr.post_num,friends[j+1].addr.post_num);

strcpy(friends[j].addr.addr,friends[j+1].addr.addr);

strcpy(friends[j].telephone,friends[j+1].telephone);

}

i--;/*元素总数减1*/

break;

case'4':

/*通讯录查询功能*/

printf("\n\tPleaseinputname:

");

gets(search_name);

for(j=1;j<=i;j++)

{

if(strcmp(search_name,friends[j].name)==0)/*比较字符串*/

{Data_Show(j);/*查询成功,打印记录结束循环*/

break;

}

}

if(j>1)/*查询失败*/

printf("\n\tNosuchrecords");

 

break;

case'5':

printf("\n\tInsertNo:

");/*录入插入位置*/

scanf("%d",&k);

for(j=i+1;j

{strcpy(friends[j].name,friends[j-1].name);/*交换元素内容*/

friends[j].sex=friends[j-1].sex;

friends[j].birth.year=friends[j-1].birth.year;

friends[j].birth.month=friends[j-1].birth.month;

friends[j].birth.day=friends[j-1].birth.day;

strcpy(friends[j].addr.post_num,friends[j-1].addr.post_num);

strcpy(friends[j].addr.addr,friends[j-1].addr.addr);

strcpy(friends[j].telephone,friends[j-1].telephone);

}

Data_Input(k);

i++;

break;

case'6':

Data_Save();

exit(0);break;

case'7':

printf("\n\tDoyouwanttosavee_note:

(y/n)");

ch=getch();

if(ch=='y')Data_Save();

fclose(fp);

exit(0);

default:

printf("Pleasechoosenum1-4\n"

);

}

}while

(1);

}

3.1.3主菜单界面

用户进入通讯录系统时,需要显示主菜单,提示用户进行选择,完成相应任务。

此代码被main()函数调用。

voidmai

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

当前位置:首页 > 医药卫生 > 基础医学

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

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