通信录管理系统C语言程序设计_第1页
通信录管理系统C语言程序设计_第2页
通信录管理系统C语言程序设计_第3页
通信录管理系统C语言程序设计_第4页
通信录管理系统C语言程序设计_第5页
已阅读5页,还剩38页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计

—-通讯录管理系统

实

习

报

告

组长:

南京邮电大学电气信息工程B100509班

2011年9月14日

※实习前论:

实习的目的、要求与内容

一、实习的目的和要求

经过了一个学期对C语言的学习,大家对C语言有了一定的

认识。在此基础上,为了加深对C语言课程所学知识的理解,进

一步巩固C语言算法规则,学会编制结构清晰、风格良好、数据

结构适当的C程序,从而具备解决综合性问题的能力,特设此课

程实习内容,通过完成一项具体的程序来检验对所学知识的掌

握情况。要求能够完成一项完整并且具有初步实用性,经编写调

试,确保能够正常运行的小型程序。

二、实习所涉及的内容

实习内容所涉及的均为C语言的基础知识,包括:数据类型(整

型、实型、字符型、指针、数组、结构等);运算类型(算术运算、

逻辑运算、白增白减运算、赋值运算等);程序结构(顺序结构、

判断选择结构、循环结构);大程序的功能分解方法(即函数定义

与调用)等,以及进一步掌握各种函数的应用以及文件的读写操

作等。

※实习细述:

通讯录管理系统

一、程序功能:

1、完成通讯录信息的管理,包括添加、修改、删除、查询

功能。尽量丰富联系人的各项信息。

2.能够根据联系人的信息单独或分类查询。

3.联系人的生日提醒功能。

二、设计思路

所有成员的记录用结构体数组存储,每个结构体包括姓名、

性别、生日、电话号码、电子邮箱、家庭住址及分类七个字符型

数组;上述的各项功能由定义函数分别实现,由主函数控制各个

函数的调用;整个程序产生于文本界面,通过一些字符简单对界

面进行装饰。具体的各个函数设计思路如下:

1.导入通讯录函数:通过fopen函数打开指定文件,并用

fread函数将文件内的数据读入结构体数组中,这两个标准库函

数都定义在stdio.h头文件中。整个函数的返回值为整型i,用

来并表示导入的数据成员个数,而后将该值赋给全局变量count

用来计数。

2.保存文件函数:通过将文件名字符串作为参数传入,用

fwrite函数将当前结构体数组中的全部数据写入文件中并关闭

文件。该函数无返回值。

3.分类显示成员信息函数:无参数传入,无返回值,用户

根据提示输入指令,用switch语句分析指令并遍历所有结构体

数据,将符合的数据输出。该函数也没有返回值。

4.录入新成员信息函数:该函数没有参数,通过提示用户

输入数据;当输入的姓名或电话号码重复时,提示用户重复并重

新输入;被录入一个完整的新数据后让全局变量n自增,并将其

作为函数的返回值返回。

5.查找记录函数:将用户要找的成员姓名作为参数传入,

遍历所有结构体并找出符合的输出,若输出成功则可以继续查

找,用户所输姓名不存在则输出用户名不存在。

6.删除记录函数:将用户要删除的成员姓名作为参数传入,

遍历所有结构体并找出符合的删除,并将后面的所有数据向前

移动一个位置,返回值同查找记录函数。

7、修改记录函数:将用户要修改的成员姓名作为参数传入,

遍历所有结构体并找出符合的,依次提示修改项目,由用户输

新数据并保存,返回值同查找记录函数。

8、拨号功能函数:无参数传入,显示已存入的所有成员的姓名,

由用户选择拨打电话的姓名,依次显示电话号码的各个数字,

并用Sleep函数设置一定时间的延时以表现号码依次输出的效

果,该函数包含在windows,h头文件中。成功拨号则返回整数

1,输入了错误的姓名则返回0。

9、主函数:用switch语句来判断用户输入的指令,转向具体的

函数来执行,并根据函数的返回值判断执行结果并予以提示。主

函数中用exit(0);语句结束程序,并在结束前提示用户保存

数据。

整个程序由上述9个函数组成。此外,源程序将结构体数组和计

数变量count以及文件指针fp设为全局变量,目的是为了让所

有函数都能正常使用这儿个变量,保证整个程序的正常运行。

三、程序源代码及注释

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<time.h>

#definecount20

typedefstructBirthday

{

intday;

intmonth;

intyear;

}Birthday;

typedefstructStudent

charname[10];

charsex[5];

Birthdaydate;

charphone[10];

charemail[10];

charaddress[10];

charothers[10];

}stud;

FILE*fp;

FILE*fp2;

FILE*fp3;

intn=0;

inti=0;

intq=0;

studs[count];

voidWRITEO;

voidwriteO;

voidREAD();

voidread();

voiddisplay(studs);

voidAddinfoO;

voidChangeinfo();

voidDelinfo();

voidConsult();

voidmenu();

voidRemindO;

voidmain()

{

Remind();

menu();

)

voidmenu()

{

intchoice;

intsign=0;

do

(

printfCWn#############################欢迎使用

#############################Wn");

printfCWn1»»»»»»»»»添加信息

<<<<<<<<<<<<<<<<<<<<<");

printfCWn2»>>»>»>>»>:»>:>修改信息

««««<««««««");

printfCWn3>>>>>>>>»»>>>»>删除信息

<<<<<<<<<<<<<<<<<<<<<");

printf("Wn4»»»»»»»»»查询信息

<<<<<<<<<<<<<<<<<<<<<");

printf("Wn5»»»»»»»»»退出系统

<««««««««««");

printf("WnWn请输入您的选择口〜5]:Wn");

scanfCftd",&choice);

switch(choice)

case1:

AddinfoO;

sign=1;

break;

case2:

Changeinfo();

sign=1;

break;

case3:

Delinfo();

sign=1;

break;

case4:

Consult();

sign=1;

break;

case5:

sign=0;

default:

「门讨耳'附请重新选择!!!“);

}

}while(sign);

system("cis");

printf("WnWnWnWnttnWn

♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦

♦");

printf("WnWn感谢你使用通信录管

理系统!!!!!!WnWnWn");

printfC

♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦

♦WnWn");

getcharO;

getcharO;

)

voidWRITEO

{

FILE*fp2;

if((fp2=fopen("count.txt11,"w"))==NULL)

{

printf("无法创建文件!Wn”);

getcharO;

return;

)

fprintf(fp2,"%d",n);

fclose(fp2);

)

voidwrite()

FILE*fp3;

if((fp3=fopen("deIete.txt","w"))==NULL)

printf("无法创建文件!Wn“);

getcharO;

return;

)

fprintf(fp3,"%d",q);

fclose(fp3);

)

voidread()

FILE*fp3;

if((fp3=fopen("delete.txt","rb"))=NULL)

printf("无法打开文件卅Wn");

getcharO;

return;

)

fscanf(fp3,"%d",&q);

fclose(fp3);

)

voidREAD()

if((fp2=fopen("count.txt","rb"))==NULL)

printf("无法打开文件!WnWn");

getcharO;

return;

)

fscanf(fp2,"%d",&n);

fclose(fp2);

)

voiddisplay(studs)

printfC$$$$$$$$$$$$$$$$$$$通信录信息

①①①①①①①①①①①①①①①①①①①0III•

o)Q)o)Q)\T)Q)J,

printf("Wn姓名:%s",);

printf("Wn性另,s.sex);

printf("Wn生

日:%d%d%d",s.date.year,s.date.month,s.date.day);

printf("Wn电话:%s",s.phone);

printf("Wn邮箱地址:%s",s.emaiI);

printf("Wn住址:%s",s.address);

printf("Wn备注:%s",s.others);

)

voidAddinfoO

{

charc;

READO;

read();

printf("您已有联系人:”);

fscant(fp2,"%d,,,&n);

fprintf(stdout,"%dl',n);

printfC'Wn");

if(!fp2)

(

printfd打开文件时出错!!!”);

exit(1);

)

printfC'Wn欢迎使用通信录管理系

统!!!”);

do

fp=fopen("stud.dat","ab+");

getcharO;

printfCWn请输入姓名:");

gets(s[i].name);

printf("Wn请输入性别(male/fmale):");

gets(s[i].sex);

printfCWn请输入生日(年/月/日):”);

scant("%d%d%d",&s[i].date.year,&s[i].date.month,&s[i].dat

e.day);

getcharO;

printfCWn请输入电话:");

gets(s[i].phone);

printfCWn请输入邮箱地址:“);

gets(s[i].email);

printfCWn请输入居住地:");

gets(s[i].address);

printfC'Wn请输入备注(friend/common):");

gets(s[i].others);

fwrite(&s[i],sizeof(s[i]),1,fp);

fclose(fp);

n++;

i++;

printfCWn是否继续新建(W‘or,N')?Wn");

scant("%c",&c);

}while(c=='Y,||c=,y,);

WRITEO;

printf("Wn添加成功!!!Wn”);

system("cis");

)

voidChangeinfo()

{

inth=0,j=1,t,choice,sign=0;

FILE*fp;

charnum[20];

charname[20];

「门讨£(冷”,按号码查找肺”);

p门ntf(”Wt2.按姓名查找Wn”);

printf("请选择..........Wn");

scanf("%d",&t);

switch(t)

case1:

while(j==1)

(

READO;

fp=fopen(11stud.dat","rb+");

printf("请输入想查找的电话号码:Wn");

scant("%s":num);

for(h=0;h<n;h++)

{

fread(&s[h],sizeof(s[h]),1,fp);

if(!strcmp(num,s[h].phone))

(

printf("Wn您想修改的内容:1.姓名2.号码3.

生日4,居住地5.邮箱地址6.备注Wn“);

scanfC^d",&choice);

switch(choice)

(

case1:

sign=1;

printf("请输入修改后的姓名:Wn");

getchar();

gets(s[h].name);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

case2:

sign=1;

printf(”请输入修改后的号码:Wn”);

getchar();

gets(s[h].phone);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

case3:

printf(”请输入修改后的生日:Wn");

sign=1;

getchar();

scanf(,,%d%d%d",&s[h].date.year,&s[h].date.month,&s[h].dat

e.day);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h].sizeof(s[h]),1,fp);

fclose(fp);

break;

case4:

printf("请输入修改后的居住地:Wn”);

sign=1;

getchar();

gets(s[h].address);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

case5:

printf("请输入修改后的邮箱:Wn”);

sign=1;

getcharO;

gets(s[h].emaiI);

fseek(fp,-sizeof(s[hj),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

case6:

printf("请输入修改后的备注:Wn”);

sign=1;

getcharO;

gets(s[h].others);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

)

printf("Wn

display(s[h]);

j=0;

break;

)

fclose(fp);

}

if(strcmp(num,s[h].phone)&&sign=0)

printfCWn你输入的号码有误!!IWn请重新输入Wn”);

j=1;

)

)

case2:

while(j==1)

(

READ();

printf("请输入想查找的姓名:Wn”);

scanf("%s",name);

fp=fopen("stud.dat","rb+");

for(h=0;h<n;h++)

(

fread(&s[h],sizeof(s[h]),1,fp);

if(!strcmp(name,s[h].name))

(

printfCWn您想修改的内容:1.姓名2.号码3.

生日4.居住地5.邮箱地址6.备注Wn”);

scanf("%d",&choice);

switch(choice)

case1:

sign=1;

printf("请输入修改后的姓名:Wn");

getcharO;

gets(s[h].name);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

case2:

sign=1;

printf("请输入修改后的号码:Wn”);

getcharO;

gets(s[h].phone);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

case3:

printf("请输入修改后的生日:Wn”);

sign=1;

getcharO;

scanf("%d%d%cl",&s[h].date.year,&s[h].date.month,&s[h].dat

e.day);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

case4:

printf("请输入修改后的居住地:Wn”);

sign=1;

getchar();

gets(s[h].address);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

case5:

printf("请输入修改后的邮箱:Wn”);

sign=1;

getchar();

gets(s[h].emaiI);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

case6:

printf("请输入修改后的备注:Wn”);

sign=1;

getcharO;

gets(s[h].others);

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h],sizeof(s[h]),1,fp);

fclose(fp);

break;

)

printf(11*****************修改

后的通讯录*****************Wn");

display(s[h]);

j=0;

break;

)

}

if(strcmp(name,s[h].name)&&sign=0)

printf(•你输入的姓名有误!!!Wn请重新输入Wn”);

j=1;

)

h=0;

)

fclose(fp);

)

menu();

)

voidDelinfo()

{

intj=1,h=0,k,sign=0;

charname[20];

READ();

read();

FILE*fp;

fp=fopen("stud.dat","rb+")J

printf("请输入想删除的姓名:Wn");

while(j==1)

FILE*fp;

scant("Xs",name);

fp=fopen("stud.dat","rb+");

while(!feof(fp))

(

fread(&s[h],sizeof(s[h]),1,fp);

if(!strcmp(name,s[h].name))

(

for(k=h;k<n;k++)

(

fseek(fp,-sizeof(s[h]),1);

fwrite(&s[h+1],sizeof(s[h]),1,fp);

)

n—;

WRITEO;

q++;

write();

j=0;

sign=1;

break;

)

)

if(strcmp(name,s[h].name)&&sign=O)

printf(•你输入的姓名有误!!!加请重新输入Wn”);

j=1;

)

h=0;

)

fclose(fp);

printf("删除成功!!!!!!!");

)

voidConsult()

(

intnum,j=1,h=0,con=1,sign=0;

charch;

charname[20];

charaddress[20];

charsex[2];

charphonecalI[20];

FILE*fp;

READO;

if(n==O)

printfCWn您目前还没有联系人!!!Wn");

menu();

return;

}

fp=fopen("stud.dat",11rb");

do

(

j=1;

sign=0;

口^讨武号12.按姓名查找的“);

口^讨武”阳3.按地址查找的”);

口「1讨£("阳4.按性别查找的“);

printf("请选择..........Wn");

scanf("%d",&num);

switch(num)

(

case1:

whiIe(j==1)

fp=fopen("stud.dat","rb");

p门ntf(”请输入想查找的电话号码:Wn”);

scanf("%s",phonecalI);

for(;h<n;h++)

(

fread(&s[h],sizeof(s[h]),1,fp);

if(!strcmp(phonecalI,s[h].phone))

{

display(s[h]);

j=0;

sign=1;

h=0;

}

)

if(strcmp(phonecalI,s[h].phone)&&sign==0)

(

p「intf(“Wn你输入的号码有误!!!Wn请重新输入

WnM);

j=1;

h=0;

)

)

fclose(fp);

printf「Wn您想继续查找吗?(YORN)Wn");

getcharO;

scanf("%c",&ch);

if(ch=Y111ch=='y1)

con=1;

else

con=0;

break;

case2:

while(j==1)

(

fp=fopen("stud.dat","rb");

printf("请输入想查找的姓名:Wn");

scant("%s",name);

for(;h<n;h++)

(

fread(&s[h],sizeof(s[h]),1,fp);

if(!strcmp(name,s[h].name))

(

display(s[h]);

j=0;

sign=1;

h=0;

break;

}

)

if(strcmp(name,s[h].name)&&sign=O)

(

intf("Wn你输入的姓名有误!!!Wn请重新输入

Wn");

j=1;

h=0;

)

)

fclose(fp);

printf「Wn您想继续查找吗?(YORN)Wn");

getcharO;

scanf(11%c",&ch);

if(ch=Y,||ch=='y,)

con=1;

else

con=0;

break;

case3:

while(j==1)

(

printf("请输入想查找的地址:Wn”);

scanf("%s",address);

fp=fopen("stud.dat","rb");

for(;h<n;h++)

(

fread(&s[h],sizeof(s[h]),1,fp);

if(!strcmp(address,s[h].address))

{

display(s[h]);

sign=1;

j=0;

break;

)

)

if(strcmp(address,s[h].address)&&sign==O)

p「intf("Wn你输入的地址有误!!!Wn请重新输入

Wn");

j=1;

)

h=0;

)

fclose(fp);

printf('Wn您想继续查找吗?(YORN)Wn");

getcharO;

scant("%c",&ch);

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

con=1;

else

con=0;

break;

case4:

while(j=1)

(

printf("请输入想查找的性别:Wn");

scanf("%s",sex);

fp=fopen("stud.dat","rb");

for(;h<n;h++)

fread(&s[h],sizeof(s[h]),1,fp);

if(!strcmp(sex,s[h].sex))

(

display(s[h]);

sign=O;

j=0;

break;

}

)

if(strcmp(sex,s[h].sex)&&sign==O)

(

p「intf(“Wn你输入的性别有误!!!Wn请重新输入

Wn");

j=1;

)

h=0;

)

fclose(fp);

printf('Wn您想继续查找吗?(YORN)Wn");

getcharO;

scant("Sc",&ch);

if(ch=Y,||ch=='y')

con=1;

else

con=0;

break;

)

}whiIe(con=1);

printf("Wn%%%%%%%%%%%%%%谢谢您

的使用!!!%%%%%%%%%%%%%%Wn");

)

voidRemind()

(

inth;

FILE*fp;

time_tnowtime;

structtm*timeinfo;

time(&nowtime);

timeinfo=localtime(&nowtime);

intmonth,day;

month=timeinfo->tm_mon+1;

day=timeinfo->tm_mday;

fp=fopen("stud.dat","rb");

READO;

for(h=0;h<n;h++)

{

fread(&s[h],sizeof(s[h]),1,fp);

if(month=s[h].date.month&&day==s[h].date,day)

(

printf("Wn★★★★★★★★★★★温馨提

醒★★★★★★★★★★★★★★Wn");

printf("Wn今天是您好友%s的生日,祝%s生日

快乐Wrf,s[h].name,s[h].name);

break;

}

)

)

四、程序运行

主界面:

添加一个人的信息,界面如下:

添加另一个人的信息,界面如下:

实现查询功能之号码查询:

»»»»»»»»»<言息<<<<<<<<<<<<<<<<<<<<<

»»»»»»»»»iF言息<<<<<<<<<<<<<<<<<<<<<

>»»»»»>»»»8言息<<<<<<<<<<<<<<<<<<<<<

»»»»»»»»»i音息<<<<<<<<<<<<<<<<<<<<<

>>>>>〉〉〉〉>>>>>>>>>退出系统<<<<<<<<<<<<<<<<<<<<<

您的选择1:

食S

_查

查

情输入想查找的电话号码:

610925

ss$$s$ssss$s$ssssss通信录信息s$ssssss$ss$$sss$$ss

悻别:male

用口912

南话:61加25

睥布地址:y@

隹址:nj

后汪:friend

猊想继绫查找吗?(丫ORN>

实现查询功能之姓名查询:

■'F:\^讯录\Debug\通讯录.exe"

您想继续查找吗?<VORH>

1、

3、

请选择

2

一拄1tR查找的姓名:

$$$$$$$$$$$$$$$$$$$通信录信息$$$$$$$$$$$$$$$$$$$$

姓名:hu

LiQllSma_le

:1992320

电话:686858

邮箱地址:}362.coc

隹址:nj

备注:friend

您想继续查找吗?<YORH>

实现查询功能N地珏查询:

■'F:谑讯录\Debug\通讯录.exe"

$$$$$$$$$$$$$$$$$$$通信录信息$$$$$$$$$$$$$$$$$$$$

姓石:hu

性别:male

军R:1992320

电话:686850

邮箱地址:h0162.con

隹址:nj

官注:friend

愚想继续查找吗?(丫ORN>

塞

1、s

香

3、查

4、

请输入想查找的地址:

$$$$$$$$$$$$$$$$$$$通信录信息$$$$$$$$$$$$$$$$$$$$

桂百:yao

性别:male

fR:1992912

电话:610925

邮籍地址:yRqq.com

住址:nj

[注:friend

嫌想继续查找吗?<vORN>

实现查询功能之性别查询:

退出通讯录管理系统:

重新打开主界面,实现生日提醒功能:

实现修改功能之生日修改:

•'F途讯录\Debug\通讯录.exe'

■★温馨提醍★★★★★★★★★★★★★★

今天是您好友vao的生日,祝ya。生日快乐

〉〉〉>〉〉〉〉〉〉〉〉〉>〉〉>>遂加信息<<<«<<<<<<<<<<<<<<<<

2»..»..»..»..»...»..»..»..».以一信息<<<<<<<<<<<<<<<<<<<<<

»»»»»»»»»|5S<<<<<<<<<<<<<<<<<<<<<

言息<<<<<<<<<<<<<<<<<<<<<

>>>>>>>>>>>>>>>>>>退出索统I<<<<<<<<<<<<<<<<<<<<<

请输入您的选择HF】:

2

2、

情选择

请输入想查找的电话号码:

610925

您想修改的内容:1.姓名2.号码3.生日4.居住地5.邮箱地址6.备注

修改后的个人信息:

»'F:谑讯录\Debug\®汨信exe"

您想修改的内容:1.姓名

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论