通讯录c语言报告及源程序

时间:2024.5.4

通讯录c语言报告及源程序

《编程实习》报告

洪珊珊 20xx年09月13日 学院:专业:班级:学号:姓名:导师:

一、功能分析

1.1 需求概述

设计并实现一个通讯录管理工具软件,管理用户通信联系人的名片信息。名片包 含的主要信息有:姓名、地址、固定电话、手机、QQ等。

1.2 功能需求

1、系统启动时,如果不存在名片文件则视为首次运行,名片文件产生,此时需要输

入注册号(本设计中注册号采用设计者的学号),文件头包含用户注册号(8位)和名片数量。否则,需自动加载名片信息,并显示“欢迎(注册号),您共有N张名片!”的信息,其中“注册号”为注册号码,“N”为实际的名片数量。

2、显示全部名片功能。

3、添加新名片功能。添加新名片时,需要输入姓名的拼音缩写,如“张雨生”缩写

为“ZYS”。新名片信息中,姓名和单位是必须输入的。系统必须保证不会出现相同E-Mail的名片。

4、查询功能。可通过姓名查询,以及号码查询,显示时自动依次编号,如1、2、3、??。

在查询时,也可以显示所有的名片信息。

5、删除功能。对查询的结果,可以选择名片(输入编号)来删除该名片,删除前需

要确认。

6、修改功能。对查询的结果,可以选择名片(输入编号)来修改该名片。修改时逐

项修改,最后需要确认。

7、系统完成每个名片的添加、删除和修改后,需要及时保存到名片文件中,以防数

据的丢失。

8、采用文本文件自动记录操作日志。日志中包括3类操作:系统的启动和停止、用

户选择的功能、名片的操作。日志中的时间格式为:YYYY-MM-DD hh24:mm:ss。要求系统运行期间,日志文件依然能够打开查看。

1.3 功能的设计

1.1功能结构图

2

二、主要技术设计

2.1名片文件操作的实现技术

1、 Readfile:读取名片信息

2、 menu_select:显示主菜单

3、 Delete:将指定的名片从文件中删除

4、 onedelete:按姓名删除单个名片

5、 alldelete:删除全部名片

6、 Change:修改指定名片信息

7、 namechange:按姓名查找后修改名片信息

8、 telchange:按电话查找后修改名片信息

9、 addschange:按地址查找后修改名片信息 10、

11、

12、

13、

14、

15、

16、 Input:添加新名片 Find:按照用户的要求进行查询 namefind:按姓名查询名片 telind:按电话查询名片 addsfind:按地址查询名片 Display:显示所有通讯录信息 Save:对通讯录信息进行保存

2.2 通讯录内存的表示结构

struct Data

{

char name[10];

char tel[15]; char age[8]; char adds[20];

char qq[20];

};Data dat[200];

3

2.3 人机交互的设计技术

菜单选择界面:

通讯录c语言报告及源程序

格式化输出界面:

通讯录c语言报告及源程序

4

三、详细设计

3.1 名片文件的设计

数据项

姓名 char name[10]

电话 char tel[15]

年龄 char age[8]

地址 char adds[20]

QQ号 char qq[20]

3.2 系统启动的设计

通讯录c语言报告及源程序

3.1系统启动程序流程图

首先通过if((fp=fopen("cards.Dat","rb"))==NULL)判断是否是新用户。若是,在输入注册码后,建立新的通讯录。否则,自动加载名片信息,进入主菜单,并显示“欢迎(注册号),您共有N张名片!”的信息,其中“注册号”为注册号码,“N”为实际的名片数量。

5

3.3 添加名片的设计

3.2添加名片程序流程图

进入添加界面根据提示输入姓名,电话,年龄,地址及QQ号码,通讯录联系人数增加一个,完成后回答是否继续添加名片,回答Y进行循环,回答N返回主菜单。

通讯录c语言报告及源程序

6

3.4名片查询的设计

3.3名片查询程序流程图

细分为按姓名,电话和地址三种方式来进行查询名片,并能对查询记录不存在进行提示,遍历所有结构体找出符合的输出。 查询完成后提示是否继续查询,是则继续原来方式查询,否则返回主菜单。

通讯录c语言报告及源程序

7

3.5

通讯录c语言报告及源程序

首先选择单个删除或全部删除,单个删除要判断用户要删除的成员姓名是否存在,进行相

应的系统提示,然后遍历所有记录找出符合的删除,并将后面的所有数据向前移动一个位

置,记录数减一并返回。全部删除一次性删除所有名片,返回n为0.

8

3.6 修改名片的设计

3.5修改名片程序流程图

首先选择通过何种方式查找要修改的名片,以姓名为例,先判断用户要修改的成员姓名是否存在,进行相应的系统提示,然后遍历所有记录找出符合的,按照菜单选择不同的修改项目进行修改,返回记录值不变(没增加也没减少),修改结束后提示是否继续,Y为继续,N返回主菜单。

通讯录c语言报告及源程序

9

3.7 保存信息的设计

通讯录c语言报告及源程序

3.6保存信息程序流程图

每次名片信息变化就运行一次保存函数,先判断是否打开文件,再判断输入方式是否正确,保存完成后进入主菜单界面。

四、程序编码和调试

4.1 编译链接错误及其解决方法

错误一:

error C2601: 'Change' : local function definitions are illegal

error C2601: 'Readfile' : local function definitions are illegal

error C2601: 'Save' : local function definitions are illegal

error C2601: 'main' : local function definitions are illegal

由于粗心少加了个“}”,导致了一系列函数错误

10

错误二:

error C2562: 'Delete' : 'void' function returning a value

see declaration of 'Delete'

warning C4390: ';' : empty controlled statement found; is this the intent? warning C4390: ';' : empty controlled statement found; is this the intent? warning C4390: ';' : empty controlled statement found; is this the intent? 删除函数定义错误,应该用“int”,而不是“void”

4.2 系统错误及其调试方法

每次选择子程序操作完毕后,想要返回主菜单,却总是直接退出程序。

后来在主函数里添加了一个无限循环“for(;;){ }”,这个问题就解决了。

五、心得体会

通过此次的C++编程实习课学到了很多,对C语言也有了更好的了解,同时对C程序的操作和调试也有了进一步的掌握。尽管程序中的一部分是从网上复制过来的,但其中都加入了自己手动修改的元素,并且把一些以前不懂的弄懂了。

编译过程中经常出现各种各样的错误,以上罗列的只是其中很小的一部分,有的小错误却导致运行不出结果,使我纠结了半天,后来还是请教实验室的同学才解决的。我深切感受到调试程序的经验不足,在输入源代码时一定要仔细、认真。几天过后我对C语言渐渐的不再感到陌生,许多大一学的知识也都回忆起来了,后来调试中出现的错误基本都可以自己解决了。通讯录最基本的功能基本都实现了,但是还有很多需要完善的地方,比如说系统日志没有添加,只能说我能力不够,其他的功能也存在或多或少不尽如人意的地方。通过深切的感受到编程的辛苦,一个问题解决后又会冒出另一个问题,没有问题后又会去想给如何完善程序的各种功能,感觉永远都编不完似的。

一个星期很快就过去了,C++编程实习课也接近尾声了,我在发现问题然后解决问题的过程中体会到了不一样的快乐,特别是自己发现并解决的时候会有一种小小的成就感!虽然有时会为了一个小小的错误苦恼不已,但当解决后却是异常的兴奋!

现在回想来看这个通讯录程序并不是很复杂,但我却不能很顺利的完成,因此我还要好好的学习C语言,只有做了多了才会熟练。

11

六、源程序

#include<stdio.h> //标准输入、输出函数

#include<stdlib.h> //常用函数库

#include<string.h> //字符串处理函数

#include<conio.h>

struct Data

{

char name[10]; //姓名

char tel[15]; //电话 char age[8]; //年龄 char adds[20]; //地址 char qq[20]; //QQ号

};Data dat[200];

char c;

char Key[20];

int n=0; /*n为联系人个数*/ FILE *fp; /*指向文件的指针*/ char menu_select(); /*主菜单函数*/ int Input(Data dat[],int n); /*添加新联系人*/

void Display(Data dat[],int n); /*显示联系人*/

int Delete(Data dat[],int n); /*删除联系人*/

int onedelete(Data dat[],int n); /*删除单个联系人*/ int alldelete(Data dat[],int n); /*删除全部联系人*/

void Find(Data dat[],int n); /*查询联系人*/

void Change(Data dat[],int n); /*修改联系人信息*/ void Readfile(); /*读取文件*/

void Save(int n); /*保存文件*/

void namefind(Data dat[],int n); /*姓名查询联系人*/ void telfina(Data dat[],int n); /*电话查询联系人*/ void addsfind(Data dat[],int n); /*地址查询联系人*/ 12

void namechange(Data dat[],int n); /*按姓名查找后修改*/

void telchange(Data dat[],int n); /*按电话查找后修改*/

void addschange(Data dat[],int n); /*按地址查找后修改*/

/*************************主菜单*************************/

char menu_select()

{

}

/*************************添加新联系人函数*************************/ int Input(Data dat[],int n)

{

do{ system("cls"); printf("\n\t\t欢迎%s,您的通讯录中共有%d张名片\n",Key,n); printf("\n\t\t*******通讯录******* \n"); printf("\t\t┌────────┐\n"); printf("\t\t│ 1.添加名片 │\n"); printf("\t\t│ 2.显示名片 │\n"); printf("\t\t│ 3.删除名片 │\n"); printf("\t\t│ 4.查询名片 │\n"); printf("\t\t│ 5.修改名片 │\n"); printf("\t\t│ 6.保存名片 │\n"); printf("\t\t│ 0.退出程序 │\n"); printf("\t\t└────────┘\n"); printf("\t\t********************\n"); printf("\t\t请您选择(0-6):"); c=getchar(); }while(c<'0'||c>'6'); return(c-'0'); int i=0,j=0; char s[10]; 13

char ch,m; while(ch!='n'&&ch!='N') { printf("*********************添加新联系人**********************\n"); printf("\t姓名:"); scanf("\t%s",s); while(strcmp(dat[j].name,s)!=0&&j<n) } if(j==n) { strcpy(dat[n+i].name,s); printf("\t电话:"); scanf("\t%s",&dat[n+i].tel); printf("\t年龄:"); 14 j++; if(strcmp(dat[j].name,s) == 0) { printf("\n\t通讯录中已有此人!\n"); printf("\n\t是否继续添加?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { } if(m!='n'&&m!='N') { } return(n); Input(dat,n); printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m);

} } } scanf("\t%s",&dat[n+i].age); printf("\t地址:"); scanf("\t%s",&dat[n+i].adds); printf("\tQQ号:"); scanf("\t%s",&dat[n+i].qq); i++; printf("\n\t是否继续添加?(Y/N)"); scanf("\t%c",&ch); while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y') { } printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&ch); printf("\n\t添加成功!\n"); return(n+i);

/*************************显示联系人函数*************************/

void Display(Data dat[],int n)

{

printf("***************************

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

printf("┌─────────────────────────────┐共%d条记录int i; if(n!=0) { \n");

printf("│ 姓名 │ 电话 │ 年龄 │ 地址 │ QQ │15

\n");

printf("└─────────────────────────────┘\n");

for(i=0;i<n;i++) {

printf("%-13s%-15s%-10s%-11s%-10s\n",dat[i].name,dat[i].tel,dat[i].age,dat[i].adds,dat[i].qq);

}

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

} else printf("\n名片数为0!\n");

printf("\n按任意键返回主菜单:");

}

/*************************删除联系人函数*************************/

int onedelete(Data dat[],int n)

{

getch(); //按任意键退出 return; char s[20],r; /*要删除记录的姓名*/ int i=0,j; printf("**************************************************************\n"); printf("\t请输入想删除联系人的姓名:"); scanf("%s",&s); while(strcmp(dat[i].name,s)!=0&&i<n) i++; /*对比字符,查找要删除的记录姓名*/ if(i==n) { printf("\n\t通讯录中没有此人!\n"); 16

} return(n); if(strcmp(dat[i].name,s) == 0) { printf("┌─────────────────────────────┐\n");

printf("│ 姓名 │ 电话 │ 年龄 │ 地址 │ QQ │\n");

printf("└─────────────────────────────┘\n");

q);

printf("**************************************************************\n"); } printf("%-13s%-15s%-10s%-11s%-10s\n",dat[i].name,dat[i].tel,dat[i].age,dat[i].adds,dat[i].q

printf("\t确认删除?(Y/N):");

scanf("\t%c",&r); while(r!='n'&&r!='N'&&r!='y'&&r!='Y') { } printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&r); if(r=='y'||r=='Y') { for(j=i;j<n-1;j++) //数据交换 { strcpy(dat[j].name,dat[j+1].name); //依次将下一条信息复制到上一条的位置

strcpy(dat[j].tel,dat[j+1].tel); 17

} } } n--; strcpy(dat[j].age,dat[j+1].age); strcpy(dat[j].adds,dat[j+1].adds); strcpy(dat[j].qq,dat[j+1].qq); printf("\n\t已经成功删除!\n"); return(n); if(r=='n'||r=='N') { return(n); }

/*************************全部删除函数*************************/ int alldelete(Data dat[],int n)

{

char r; int j; printf("\n\t确认删除?(Y/N):"); scanf("\t%c",&r); while(r!='n'&&r!='N'&&r!='y'&&r!='Y') { } printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&r); if(r=='y'||r=='Y') { for(j=1;n=0;j=1) //数据交换 { strcpy(dat[j].name,dat[j+1].name); //依次将下一条信息复制到上一18

条的位置

}

/*************************删除联系人函数*************************/

int Delete(Data dat[],int n)

{

int m; } if(r=='n'||r=='N') { return(n); } } printf("\n\t已经成功删除全部名片!\n"); return(n); strcpy(dat[j].tel,dat[j+1].tel); strcpy(dat[j].age,dat[j+1].age); strcpy(dat[j].adds,dat[j+1].adds); strcpy(dat[j].qq,dat[j+1].qq); n--;

printf("**************************************************************\n"); printf("\n\t请选择删除方式:\n");

printf("\t┌──────┐\n");

printf("\t│1--单个删除 │\n");

printf("\t│2--全部删除 │\n");

printf("\t│0--返回菜单 │\n");

printf("\t└──────┘\n");

printf("\t请选择(0-2):");

scanf("%d",&m); while(m!=1&&m!=2&&m!=0) { 19

} } printf("\n\t输入错误,请重新选择:"); scanf("%d",&m); if(m==1) { } if(m==2) { } if(m==0) { } return(n); alldelete(dat,n); onedelete(dat,n);

/*************************姓名查询联系人函数*************************/ void namefind(Data dat[],int n)

{

char s[20]; int i=0; char m; printf("\n*************************按姓名查找**************************\n"); printf("\n\t请输入想查询的姓名:"); scanf("\t%s",&s); while(strcmp(dat[i].name,s)!=0&&i<n) i++; if(i==n) { printf("\n\t通讯录中没有此人!\n"); 20

} printf("\n\t是否继续查询?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { } if(m!='n'&&m!='N') { } return; namefind(dat,n); printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m); if(strcmp(dat[i].name,s) == 0) { printf("┌─────────────────────────────┐\n");

printf("│ 姓名 │ 电话 │ 年龄 │ 地址 │ QQ │\n");

printf("└─────────────────────────────┘\n");

q);

printf("%-13s%-15s%-10s%-11s%-10s\n",dat[i].name,dat[i].tel,dat[i].age,dat[i].adds,dat[i].q printf("**************************************************************\n"); printf("\n\t查询完成!\n"); printf("\n\t是否继续查询?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') 21

} } { } if(m!='n'&&m!='N') { } return; namefind(dat,n); printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m);

/*************************电话查询联系人函数*************************/ void telfina(Data dat[],int n)

{

char s[20]; int i=0; char m; printf("\n*************************按电话查找**************************\n"); printf("\n\t请输入想查询的电话:"); scanf("\t%s",&s); while(strcmp(dat[i].tel,s)!=0&&i<n) i++; if(i==n) { printf("\n\t通讯录中没有此人!\n"); printf("\n\t是否继续查询?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { printf("\n\t输入错误!请重新输入:"); 22

} } scanf("\t%c",&m); if(m!='n'&&m!='N') { } return; telfina(dat,n); if(strcmp(dat[i].tel,s) == 0) { printf("┌─────────────────────────────┐\n");

printf("│ 姓名 │ 电话 │ 年龄 │ 地址 │ QQ │\n");

printf("└─────────────────────────────┘\n");

q);

printf("%-13s%-15s%-10s%-11s%-10s\n",dat[i].name,dat[i].tel,dat[i].age,dat[i].adds,dat[i].q printf("**************************************************************\n"); printf("\n\t查询完成!\n"); printf("\n\t是否继续查询?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { } if(m!='n'&&m!='N') 23 printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m);

} } { } return; telfina(dat,n);

/*************************地址查询联系人函数*************************/ void addsfind(Data dat[],int n)

{

char s[20]; int i=0; char m; printf("\n*************************按地址查找**************************\n"); printf("\n\t请输入想查询的地址:"); scanf("\t%s",&s); while(strcmp(dat[i].adds,s)!=0&&i<n) i++; if(i==n) { printf("\n\t通讯录中没有此人!\n"); printf("\n\t是否继续查询?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { } if(m!='n'&&m!='N') { addsfind(dat,n); 24 printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m);

} } return; if(strcmp(dat[i].adds,s) == 0) { printf("┌─────────────────────────────┐\n");

printf("│ 姓名 │ 电话 │ 年龄 │ 地址 │ QQ │\n");

printf("└─────────────────────────────┘\n");

q);

printf("%-13s%-15s%-10s%-11s%-10s\n",dat[i].name,dat[i].tel,dat[i].age,dat[i].adds,dat[i].q printf("**************************************************************\n"); } 25 printf("\n\t查询完成!\n"); printf("\n\t是否继续查询?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { } if(m!='n'&&m!='N') { } return; addsfind(dat,n); printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m);

}

/*************************查询联系人函数*************************/

void Find(Data dat[],int n)

{

int m;

printf("**************************************************************\n"); printf("\n\t请选择查询方式:\n");

printf("\t┌──────┐\n");

printf("\t│1------姓名 │\n");

printf("\t│2------电话 │\n");

printf("\t│3------地址 │\n");

printf("\t│0------返回 │\n");

printf("\t└──────┘\n");

printf("\t请选择(0-3):");

scanf("%d",&m); while(m!=1&&m!=2&&m!=3&&m!=0) { } if(m==1) { } if(m==2) { } if(m==3) { 26 printf("\n\t输入错误,请重新选择:"); scanf("%d",&m); namefind(dat,n); telfina(dat,n);

} } addsfind(dat,n); if(m==0) { } menu_select();

/*************************按姓名查找后修改函数*************************/ void namechange(Data dat[],int n)

{

char s[20]; char m,ch; int i=0,k; printf("**************************************************************\n"); printf("\n\t请输入想修改的联系人的姓名:"); scanf("%s",&s); while(strcmp(dat[i].name,s)!=0&&i<n) i++; if(i==n) { printf("\n\t通讯录中没有此人!\n"); printf("\n\t是否继续修改?(Y/N)"); scanf("\t%s",&ch); while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y') { } if(ch!='n'&&ch!='N') { 27 printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&ch);

} } namechange(dat,n); return; if(strcmp(dat[i].name,s) == 0) { printf("┌─────────────────────────────┐\n");

printf("│ 姓名 │ 电话 │ 年龄 │ 地址 │ QQ │\n");

printf("└─────────────────────────────┘\n");

q);

printf("%-13s%-15s%-10s%-11s%-10s\n",dat[i].name,dat[i].tel,dat[i].age,dat[i].adds,dat[i].q printf("**************************************************************\n"); printf("\t\t┌────────┐\n"); printf("\t\t│ 1.修改姓名 │\n"); printf("\t\t│ 2.修改电话 │\n"); printf("\t\t│ 3.修改年龄 │\n"); printf("\t\t│ 4.修改地址 │\n"); printf("\t\t│ 5.修改QQ号 │\n"); printf("\t\t│ 0.返回菜单 │\n"); printf("\t\t└────────┘\n"); printf("\t\t请您选择(0-5):"); scanf("%d",&k); while(k!=1&&k!=2&&k!=3&&k!=4&&k!=5&&k!=0) { printf("\n\t\t输入错误,请重新选择:"); 28

} scanf("%d",&k); switch(k) { } printf("\n\t修改成功!\n"); printf("\n\t是否继续修改?(Y/N)"); scanf("\t%s",&m); 29 case 1: printf("\n\t\t请输入新的姓名:"); scanf("\t\t%s",&dat[i].name); break; case 2: printf("\n\t\t请输入新的电话:"); scanf("\t\t%s",&dat[i].tel); break; case 3: printf("\n\t\t请输入新的年龄:"); scanf("\t\t%s",&dat[i].age); break; case 4: printf("\n\t\t请输入新的地址:"); scanf("\t\t%s",&dat[i].adds); break; case 5: printf("\n\t\t请输入新的QQ号:"); scanf("\t\t%s",&dat[i].qq); break; case 0: return;

while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { } for(m;m=='y'||m=='Y';){ printf("\t\t请您选择(0-5):"); scanf("%d",&k); while(k!=1&&k!=2&&k!=3&&k!=4&&k!=5&&k!=0) { } switch(k) { case 1: printf("\n\t\t请输入新的姓名:"); scanf("\t\t%s",&dat[i].name); break; printf("\n\t\t输入错误,请重新选择:"); scanf("%d",&k); printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m); case 2: printf("\n\t\t请输入新的电话:"); scanf("\t\t%s",&dat[i].tel); break; case 3: printf("\n\t\t请输入新的年龄:"); scanf("\t\t%s",&dat[i].age); break; case 4: printf("\n\t\t请输入新的地址:"); scanf("\t\t%s",&dat[i].adds); 30

} } } } break; case 5: printf("\n\t\t请输入新的QQ号:"); scanf("\t\t%s",&dat[i].qq); break; case 0: return; printf("\n\t修改成功!\n"); printf("\n\t是否继续修改?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { } printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m); if(m=='n'||m=='N'); return;

/*************************按电话查找后修改函数*************************/ void telchange(Data dat[],int n)

{

char s[20]; char m,ch; int i=0,k; printf("**************************************************************\n"); printf("\n\t请输入想修改的联系人的电话:"); 31

scanf("%s",&s); while(strcmp(dat[i].tel,s)!=0&&i<n) i++; if(i==n) { } if(strcmp(dat[i].tel,s) == 0) { printf("┌─────────────────────────────printf("\n\t通讯录中没有此人!\n"); printf("\n\t是否继续修改?(Y/N)"); scanf("\t%s",&ch); while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y') { } if(ch!='n'&&ch!='N') { } return; telchange(dat,n); printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&ch); ┐\n");

printf("│ 姓名 │ 电话 │ 年龄 │ 地址 │ QQ │\n");

printf("└─────────────────────────────┘\n");

q);

32 printf("%-13s%-15s%-10s%-11s%-10s\n",dat[i].name,dat[i].tel,dat[i].age,dat[i].adds,dat[i].q

printf("**************************************************************\n"); printf("\t\t┌────────┐\n"); printf("\t\t│ 1.修改姓名 │\n"); printf("\t\t│ 2.修改电话 │\n"); printf("\t\t│ 3.修改年龄 │\n"); printf("\t\t│ 4.修改地址 │\n"); printf("\t\t│ 5.修改QQ号 │\n"); printf("\t\t│ 0.返回菜单 │\n"); printf("\t\t└────────┘\n"); printf("\t\t请您选择(0-5):"); scanf("%d",&k); while(k!=1&&k!=2&&k!=3&&k!=4&&k!=5&&k!=0) { } switch(k) { case 1: printf("\n\t\t请输入新的姓名:"); scanf("\t\t%s",&dat[i].name); break; printf("\n\t\t输入错误,请重新选择:"); scanf("%d",&k); case 2: printf("\n\t\t请输入新的电话:"); scanf("\t\t%s",&dat[i].tel); break; case 3: printf("\n\t\t请输入新的年龄:"); scanf("\t\t%s",&dat[i].age); 33

} break; case 4: printf("\n\t\t请输入新的地址:"); scanf("\t\t%s",&dat[i].adds); break; case 5: printf("\n\t\t请输入新的QQ号:"); scanf("\t\t%s",&dat[i].qq); break; case 0: return; printf("\n\t修改成功!\n"); printf("\n\t是否继续修改?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { } for(m;m=='y'||m=='Y';){ printf("\t\t请您选择(0-5):"); scanf("%d",&k); while(k!=1&&k!=2&&k!=3&&k!=4&&k!=5&&k!=0) { } switch(k) { 34 printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m); printf("\n\t\t输入错误,请重新选择:"); scanf("%d",&k);

} case 1: printf("\n\t\t请输入新的姓名:"); scanf("\t\t%s",&dat[i].name); break; case 2: printf("\n\t\t请输入新的电话:"); scanf("\t\t%s",&dat[i].tel); break; case 3: printf("\n\t\t请输入新的年龄:"); scanf("\t\t%s",&dat[i].age); break; case 4: printf("\n\t\t请输入新的地址:"); scanf("\t\t%s",&dat[i].adds); break; case 5: printf("\n\t\t请输入新的QQ号:"); scanf("\t\t%s",&dat[i].qq); break; case 0: return; printf("\n\t修改成功!\n"); printf("\n\t是否继续修改?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m); 35

} } } } if(m=='n'||m=='N'); return;

/*************************按地址查找后修改函数*************************/ void addschange(Data dat[],int n)

{

char s[20]; char m,ch; int i=0,k; printf("**************************************************************\n"); printf("\n\t请输入想修改的联系人的电话:"); scanf("%s",&s); while(strcmp(dat[i].adds,s)!=0&&i<n) i++; if(i==n) { printf("\n\t通讯录中没有此人!\n"); printf("\n\t是否继续修改?(Y/N)"); scanf("\t%s",&ch); while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y') { } if(ch!='n'&&ch!='N') { 36 printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&ch);

} } addschange(dat,n); return; if(strcmp(dat[i].adds,s) == 0) { printf("┌─────────────────────────────┐\n");

printf("│ 姓名 │ 电话 │ 年龄 │ 地址 │ QQ │\n");

printf("└─────────────────────────────┘\n");

q);

printf("%-13s%-15s%-10s%-11s%-10s\n",dat[i].name,dat[i].tel,dat[i].age,dat[i].adds,dat[i].q printf("**************************************************************\n"); printf("\t\t┌────────┐\n"); printf("\t\t│ 1.修改姓名 │\n"); printf("\t\t│ 2.修改电话 │\n"); printf("\t\t│ 3.修改年龄 │\n"); printf("\t\t│ 4.修改地址 │\n"); printf("\t\t│ 5.修改QQ号 │\n"); printf("\t\t│ 0.返回菜单 │\n"); printf("\t\t└────────┘\n"); printf("\t\t请您选择(0-5):"); scanf("%d",&k); while(k!=1&&k!=2&&k!=3&&k!=4&&k!=5&&k!=0) { printf("\n\t\t输入错误,请重新选择:"); 37

} scanf("%d",&k); switch(k) { } printf("\n\t修改成功!\n"); printf("\n\t是否继续修改?(Y/N)"); scanf("\t%s",&m); 38 case 1: printf("\n\t\t请输入新的姓名:"); scanf("\t\t%s",&dat[i].name); break; case 2: printf("\n\t\t请输入新的电话:"); scanf("\t\t%s",&dat[i].tel); break; case 3: printf("\n\t\t请输入新的年龄:"); scanf("\t\t%s",&dat[i].age); break; case 4: printf("\n\t\t请输入新的地址:"); scanf("\t\t%s",&dat[i].adds); break; case 5: printf("\n\t\t请输入新的QQ号:"); scanf("\t\t%s",&dat[i].qq); break; case 0: return;

while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { } for(m;m=='y'||m=='Y';){ printf("\t\t请您选择(0-5):"); scanf("%d",&k); while(k!=1&&k!=2&&k!=3&&k!=4&&k!=5&&k!=0) { } switch(k) { case 1: printf("\n\t\t请输入新的姓名:"); scanf("\t\t%s",&dat[i].name); break; printf("\n\t\t输入错误,请重新选择:"); scanf("%d",&k); printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m); case 2: printf("\n\t\t请输入新的电话:"); scanf("\t\t%s",&dat[i].tel); break; case 3: printf("\n\t\t请输入新的年龄:"); scanf("\t\t%s",&dat[i].age); break; case 4: printf("\n\t\t请输入新的地址:"); scanf("\t\t%s",&dat[i].adds); 39

} } } } break; case 5: printf("\n\t\t请输入新的QQ号:"); scanf("\t\t%s",&dat[i].qq); break; case 0: return; printf("\n\t修改成功!\n"); printf("\n\t是否继续修改?(Y/N)"); scanf("\t%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { } printf("\n\t输入错误!请重新输入:"); scanf("\t%c",&m); if(m=='n'||m=='N'); return;

/*************************修改联系人信息函数*************************/ void Change(Data dat[],int n)

{

int m;

printf("**************************************************************\n"); printf("\n\t请选择查询方式:\n");

printf("\t┌──────┐\n");

printf("\t│1------姓名 │\n");

40

printf("\t│2------电话 │\n");

printf("\t│3------地址 │\n");

printf("\t│0------返回 │\n");

printf("\t└──────┘\n");

printf("\t请选择(0-3):");

}

/*************************读取文件函数*************************/ void Readfile()

41 scanf("%d",&m); while(m!=1&&m!=2&&m!=3&&m!=0) { } if(m==1) { } if(m==2) { } if(m==3) { } if(m==0) { } return; addschange(dat,n); telchange(dat,n); namechange(dat,n); printf("\n\t输入错误,请重新选择:"); scanf("%d",&m);

{ if((fp=fopen("Key.Dat","rb"))!=NULL) { } fclose(fp); if((fp=fopen("Cards.Dat","rb"))==NULL) //以只读方式打开二进制文件 { fscanf(fp,"%s",Key); printf("\n\t\t通讯录文件不存在!"); //如果文件打开失败 if ((fp=fopen("Cards.Dat","wb"))==NULL) //不存在则进行创建 { } else { if ((fp=fopen("Key.Dat","wb"))==NULL) //不存在则进行创建 { } else { printf("\n\t\t输入注册号(8位数):"); gets(Key); while(strlen(Key)!=8) { } 42 printf("\n\t\t建立失败"); exit(0); printf("\n\t\t建立失败"); exit(0); printf("\n\t\t注册号输入错误!请重新输入:"); gets(Key);

} } } fprintf(fp,"%8s",Key); fclose(fp); printf("\n\t\t通讯录文件已建立\n"); printf("\n\t\t按任意键进入主菜单"); getch(); return; exit(0); //退出 fseek(fp,0,2); //文件位置指针移动到文件末尾 if (ftell(fp)>0) //文件不为空,获取的是文件长度 { fseek(fp,0,0); //文件位置指针移动到文件开始位置 for (n=0; !feof(fp) && fread(&dat[n],sizeof(struct Data),1,fp);n++); //从文件流中读取数据,以Data结构体接收读取的数据,并由n记录下文件中联系人个数

}

/*************************保存文件函数*************************/

void Save(int n)

{

43 printf("\n\t\t文件导入成功\n"); printf("\n\t\t按任意键进入主菜单:"); getch(); return; } printf("\n\t\t文件导入成功\n"); printf("\n\t\t文件中没有数据\n"); printf("\n\t\t按任意键进入主菜单:"); getch();//按任意键退出 return;

int i;

if ((fp=fopen("cards.Dat","wb"))==NULL)

{

printf("\n\t\t文件打开失败");

}

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

{

if (fwrite(&dat[i],sizeof(struct Data),1,fp)!=1)

{

printf("\n\t\t文件保存错误!\n");

}

}

fclose(fp);

printf("\n\t按任意键返回主菜单:");

getch();//按任意键退出

return;

}

/*************************主函数*************************/

void main()

{

Readfile();

for(;;)

{

switch(menu_select())

{

case 1:system("cls");printf("\n添加名片到通讯录\n");n Input(dat,n);Save(n);break;

case 2:system("cls");printf("\n显示所有名片\n");Display(dat,n);break;

case 3:system("cls");printf("\n从通讯录中删除名片\n");n Delete(dat,n);Save(n);break;

44 = =

case 4:system("cls");printf("\n在通讯录中查找名片\n");Find(dat,n);break; case 5:system("cls");printf("\n修改通讯录中的名片\n");Change(dat,n);Save(n);break;

}

特别注意!主菜单页面输入111这类数字,进入相应页面,但会才出现错误。

子菜单页面选择时输入字母会出现刷屏??

} } case 6:system("cls");printf("\n\t文件保存成功!\n");Save(n);break; case 0:printf("\n\t\t谢谢使用,再见!\n");exit(0); default:menu_select();

45

更多相关推荐:
c语言通讯录课程设计报告.doc

一引言当今时代是飞速发展的信息时代在各行各业中离不开信息处理这正是计算机被广泛应用于信息管理系统的环境计算机的最大好处在于利用它能够进行信息管理使用计算机进行信息控制不仅提高了工作效率而且大大的提高了其安全性尤...

C语言课程设计报告(通讯录)

设计说明书通讯录系统起止日期20xx年01月03日至20xx年01月08日学班学成生姓名级号绩XXX指导教师签字计算机与通信学院20xx年01月08日一课题任务设计一个通讯录管理系统课题的主要任务是1对通讯录信...

C语言通讯录课程设计报告

高级语言课程设计题目通讯录设计班级软件学生学号20xx31000511学生姓名指导老师提交时间成绩20年4月15日1系统分析11问题描述设计一个通讯录程序该程序具有以下功能用户登录输入用户名和密码密码正确才允许...

C语言课程设计报告—手机通讯录管理系统

C程序课程设计报告手机通讯录管理系统姓名谢骏学院珠宝学院学号20xx1002649班级141082一课程设计目的和内容概述1目的加深对C语言课程所学知识的理解进一步巩固C语言编程方法学会编制结构清晰风格良好数据...

C语言通讯录课程设计报告

C语言课程设计通讯录管理系统C语言课程设计C语言课程设计通讯录管理系统目录摘要3一课程设计目的4二课程设计内容4三总体设计4四详细设计51数据结构设计52模块接口设计63流程图7五调试与测试91调试过程中的主要...

C语言课程设计报告—手机通讯录管理系统

目录摘要2第一章绪论311课程设计目的和内容概述312题目手机通讯录管理系统3第二章程序分析421总体设计422详细设计423总流程图4第三章模块介绍和总体实现731构建结构体写入文件732构造函数与模块833...

c语言 课程设计报告(通讯录)

数据结构课程设计通讯录管理系统中南大学信息科学与工程学院课程设计报告设计名称数据结构课程设计通讯录管理系统系院信息科学与工程学院设计时间20xx年6月27日至7月1日设计地点综合实验楼四楼指导老师漆华妹132数...

c语言程序设计——通讯录

C语言课程设计报告题目设计者专业班级学号指导教师年月日河南理工大学计算机学院1题目与要求左对齐宋体粗四号建立通讯录信息信息至少包含编号姓名年龄电话通讯地址电子邮箱等能够提供添加删除和修改通讯录信息的功能能够提供...

c语言程序设计__学生通讯录信息管理系统 - 副本

西安邮电学院高级语言课程设计实验报告系别:电信系专业班级:科技0701班学号:班内序号:07姓名:指导老师:黄茹实验课题:学生通讯信息管理系统实验时间:20##.6.10~20##.6.2020##年6月17日…

c语言通讯录课设.doc

河南理工大学计算机科学与技术学院课程设计报告20112012学年第1学期课程名称c语言课程设计设计题目班级通讯录管理系统学生姓名刘帅学号专业班级指导教师于金霞20xx年9月8日1系统总体设计本系统设计的函数是由...

C语言程序设计——通讯录

目录课程设计任务书错误未定义书签目录1一目的2二基本情况2三时间安排3四设计和调试过程规范化要求3五设计内容和设计要求4六考核方式5一通讯录的主要功能6一问题描述6二功能要求6三算法提示6四测试数据7二课题的主...

c语言个人通信录管理系统课程设计报告

高级语言程序设计报告个人通信录管理系统院系班级成员时间通信与信息工程学院杨文刚1107020xx020xx年7月2日基于链表的个人通信录管理系统课程设计任务书目录1设计目的12总体设计23详细设计34程序调试与...

c语言通讯录课程设计报告(29篇)