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

C语言程序设计课程设计报告设计题目:通讯录学号2010211766班级通信与信息类0101012班姓名万同堂2011年12月03日录入联系人信息(包括姓名、电话号码、地址等信息);通讯录管理系统要求实现以下功能:1、输入每一位联系人记录,将其信息存入文件中。
2、查询所有联系人的信息,并按可选的自定义规则进行排序;3、记录修改,将修改的记录信息保存于文件中。
1、设一个通信录由以下几项数据信息构成:数据项类型姓名字符串地址字符串邮政编码字符串电话号码字符串试为通信录数据定义类型和定义通信录变量,实现功能:存取、显示、删除记录、查询记录等功能。
2、要求:界面友好,易于操作系统功能模块图:添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱等后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询:可以选择用姓名、电话、地址三种方式查询修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件(1).通讯录:主要代码struct user{char name[20];//用户名char adr[20];//地址char numb[20];//手机号char code[20];//邮政编码};typedef struct user user;int main(){int key,m ;int n = 0;user u[N];char num[20];// double insert;printf("\n\n\n"); /*欢迎界面*/printf("\t\t\t\t欢迎光临 \n");printf("\t\t\t 我的个人通讯管理系统\n");printf("\t\t\t 完成日期:2011年12月4日\n\n");using namespace std;time_t t = time(0);printf("\t\t\t您正进入添加界面...\r");Sleep(1000);printf(" \r");char tmp[64];int i=1;while(i<2){i++;strftime( tmp, sizeof(tmp), "\t %Y/%m/%d %X %A 本年第%j 天 %z",localtime(&t) );printf("%s",tmp); /*输出系统时间*/ }printf("\n\n\n\t\t\t\t正在进入...\n\n\n");Sleep(800);printf("\t 本产品已经通过金山、卡巴、江民、360等多款杀毒软件检测,\n");Sleep(800);printf("\t 安全无毒,绿色无插件,请大家放心使用。
简易通讯录系统 C语言程序设计报告

程序设计报告( 2012 / 2013 学年第 2 学期)题目:简易通讯录管理系统专业应用物理学生姓名于浩班级学号 B12080507指导教师骆健指导单位计算机学院计算机科学与技术系日期 2013.3.27简易通讯录管理系统程序设计报告一、课题内容和要求本课题设计是对基础课《面向对象程序设计》课程知识的进一步巩固并加强解决实际问题的能力。
目的是通过实习,一方面使学生加深对课内所学的有关面向对象概念的理解;另一方面,在具体的程序设计中掌握基于C语言的程序设计方法。
通过进行计算机实践,更加系统地理解和掌握C语言的基本概念、语言特点和编程技巧。
利用系统提供的标准函数和自定义函数进行程序设计,培养利用C语言设计综合程序的能力。
通过该课程设计使学生掌握一种程序设计开发环境,提高同学们自己学习、查阅资料、独立分析问题和解决问题的能力。
二、需求分析设计通讯录系统,其信息中包括姓名、电话、地址等数据项。
所设计的系统要有简单的DOS界面,方便用户进行操作,显示以下功能:(1)建立通讯录。
(2)插入、删除、修改通讯录记录(3)查询通讯录记录,要求可按姓名和电话号码查询(4)可按姓名或电话号码对通讯录进行排序(5)信息记录要存放在文件中,因而要实现文件的输入/输出功能三、概要设计系统功能模块图:建立:可以一次性输入多个人的相应信息显示:可以输出通讯录里所有的记录查询:可以选择用姓名、电话两种方式查询信息修改:输入欲修改的那个人的名字后,再依次输入姓名、电话号码、地址即可完成修改添加:可以添加通讯录记录,依次输入姓名、电话号码、地址即可完成删除:输入欲删除的那个人的名字后,会自动删除其相应的记录内容排序:可以按姓名或电话号码对通讯录进行排序保存:将通讯录信息保存到文件四、源程序代码#define N 100#define SIZE 30#include <stdio.h>#include <string.h> //字符函数和字符串函数#include <conio.h> //字符模式函数#include <process.h>struct student{char name[SIZE];char tel[SIZE];char adress[SIZE];}; //函数声明void myprint(); // 显示菜单int mycreat(struct student*p,int n); // 输入通讯录void mydisplay(struct student*p,int n); // 显示通讯录void mysearch(struct student*p,int n); // 查找void mymodify(struct student*p,int n); // 修改通讯录int myadd(struct student*p,int n); // 增加通讯录int mydelete(struct student*p,int n); // 删除void mysort(struct student*p,int n); // 排序void sch_tel(struct student*p,int n); // 按电话号码查找void sch_name(struct student*p,int n); // 按姓名查找int loadinfo(struct student*p,int n); // 载入通讯录信息int saveinfo(struct student*p,int n); // 保存通讯录信息void main(){ // 文件定义char yes_no ;int choose; //定义choose为整形struct student record[N]; // 存放通讯录信息,共100 条int total=0,flag ; // 通讯录总数total=loadinfo(record,N); // 从文件读取记录信息,不超过100 条do{myprint(); // 显示菜单printf(" 请选择:");scanf("%d",&choose); //输入数据switch(choose){case 1 :total=mycreat(record,total);break ;case 2 :mydisplay(record,total);break ;case 3 :mysearch(record,total);break ;case 4 :mymodify(record,total);break ;case 5 :total=myadd(record,total);break ;case 6 :total=mydelete(record,total);break ;case 7 :mysort(record,total);break ;case 8 :flag=saveinfo(record,total);if(flag==1)printf("\n 保存失败!\n");elseprintf("\n 保存成功!\n");break ;case 0 :exit(0);break ;default :printf("\n %c 为非法选项!\n",choose); }if(choose==0)break ;printf("\n 要继续选择吗(Y/N)?");do{yes_no=getchar();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');}while(yes_no!='N'&&yes_no!='n');}void myprint() // 显示菜单信息{printf(" \n");printf(" 请输入选项编号(0--7) \n");printf(" 1---建立通讯录\n");printf(" 2---显示通讯录\n");printf(" 3---查询通讯录\n");printf(" 4---修改通讯录\n");printf(" 5---添加通讯录\n");printf(" 6---删除通讯录\n");printf(" 7---排序通讯录\n");printf(" 8---保存通讯录\n");printf(" 0---退出\n");printf(" \n"); }int mycreat(struct student*p,int n) // 批量输入学生信息{int i=0 ;int m ;printf("添加前的记录,共有<%d>个:\n",n);printf("\n 记录号姓名电话号码地址\n");i=0 ;while((i<n)&&(strcmp(p->name,"")!=0)){printf("%d: %15s%15s%15s\n",i+1,p->name,p->tel,p->adress);i++;p++;}printf("\n 请输入要输入的学生人数(< %d): ",N-n);scanf("%d",&m);i=0 ;while(i<m){printf("\n");printf("请输入第%d 个记录:\n",i+1);printf("姓名:");do{gets(p->name);}while(strcmp(p->name,"")==0);printf("电话号码:");gets(p->tel);printf("地址:");gets(p->adress);p++;i++;}return m+n ;}void mydisplay(struct student*p,int n) // 显示学生信息{//clrscr();int i=0 ;printf("\n 记录号姓名电话号码地址\n");while(i<n){printf("%d: %15s%15s%15s\n",i+1,p->name,p->tel,p->adress);p++;i++;}}void mymodify(struct student*p,int n) // 修改学生信息{char c;int i ;char nam[10];mydisplay(p,n);printf("\n 请输入要修改记录的姓名:");c=getchar();gets(nam);for(i=0;i<n;i++,p++)if(strcmp(nam,p->name)==0)break ;if(i==n)printf("无此人!\n");else{printf("请输入正确的电话号码:");do{gets(p->tel);}while(strcmp(p->tel,"")==0);printf("请输入正确的姓名:");gets(p->name);printf("请输入正确的地址:");gets(p->adress);}}void mysearch(struct student*p,int n) // 查找指定学生{char c ;mydisplay(p,n);printf("\n 按电话号码查询(h),还是按姓名查询(m)?");c=getchar();c=getchar();if(c=='h'||c=='H')sch_tel(p,n);else if(c=='m'||c=='M')sch_name(p,n);elseprintf("\n 非法字符!\n");}void sch_tel(struct student*p,int n) // 按电话号码查询{char c ;int i,flag=0 ;char tel[10];printf("\n 请输入要查询记录的电话号码:");c=getchar();gets(tel);for(i=0;i<n;i++)if(strcmp(tel,p[i].tel)==0){printf("\n 姓名电话号码地址\n");printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);flag=1 ;}if(flag==0)printf("无此人!\n");}void sch_name(struct student*p,int n) // 按姓名查询{char c ;int i,flag=0 ;char nam[10];printf("\n 请输入要查询记录的姓名:");c=getchar();gets(nam);for(i=0;i<n;i++)if(strcmp(nam,p[i].name)==0){printf("\n 姓名电话号码地址\n");printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);flag=1 ;}if(flag==0)printf("无此人!\n");}int myadd(struct student*p,int n) //增加学生信息{int i=0 ;char c ;struct student t,*q ;printf("添加前的记录:\n");printf("\n 姓名电话号码地址\n");i=0 ;q=p ; // 显示原有记录信息while(i<n){printf("%15s%15s%15s\n",q->name,q->tel,q->adress);i++;q++;}do{printf("请输入新记录的姓名:\n");do{gets();}while(strcmp(,"")==0); // 姓名不能为空printf("请输入新记录的电话号码:");gets(t.tel);printf("请输入新记录的地址:");gets(t.adress);{*(p+i)=t ;printf("添加后的记录:\n");printf("\n 姓名电话号码地址\n");for(i=0;i<n+1;i++)printf("%15s%15s%15s\n",(p+i)->name,(p+i)->tel,(p+i)->adress);break ;}}while(c=='y'||c=='Y');return n+1 ;}int mydelete(struct student*p,int n) // 删除学生信息{int i,x ;char c,tel[10],nam[10];printf("删除前的记录:\n");printf(" \n 姓名电话号码地址\n");for(i=0;i<n;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);printf("按电话号码删除(h),还是按姓名删除(m)?");c=getchar();c=getchar();if(c=='h'||c=='H'){printf("\n 请输入要删除记录的电话号码:");c=getchar();gets(tel);for(x=0;x<n;x++)if(strcmp(tel,p[x].tel)==0)break; //说明提前结束循环,找到人if(x<n){for(i=x;i<n-1;i++){p[i]=p[i+ 1];}printf("删除后的记录:\n");printf(" 姓名电话号码地址\n");for(i=0;i<n-1;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);}elseprintf("无此人\n");}elseif(c=='m'||c=='M'){printf("\n 请输入要删除记录的姓名:");c=getchar();gets(nam);for(x=0;x<n;x++)if(strcmp(nam,p[x].name)==0)break ;if(x<n){for(i=x;i<N-1;i++){p[i]=p[i+1];}printf("删除后的记录:\n");printf(" 姓名电话号码地址\n");for(i=0;i<n-1;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);}elseprintf("无此人\n");}elseprintf("\n 非法字符\n");return n-1 ;}void mysort(struct student*p,int n) // 排序函数{char c;int j,i,k ;char c1;struct student temp ;printf("\n 排序前的记录:\n");printf("\n 姓名电话号码地址\n");for(i=0;i<n;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);printf("\n 按电话号码排序(h),还是按姓名排序(m)?");c=getchar();c1=getchar();if(c1=='h'||c1=='H') //按号码排序{for(i=0;i<n-1;i++){k=i ;for(j=i+1;j<n;j++)if(strcmp(p[k].tel,p[j].tel)>0)k=j;if(k!=i){temp=p[k];p[k]=p[i];p[i]=temp;}}printf("\n 排序后的记录:\n");printf("\n 姓名电话号码地址\n");for(i=0;i<n;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);}else if(c1=='m'||c1=='M') // 按姓名排序{for(i=0;i<n-1;i++){k=i ;for(j=i+1;j<n;j++)if(strcmp(p[k].name,p[j].name)>0)k=j ;if(k!=i){temp=p[k];p[k]=p[i];p[i]=temp;}}printf("排序后的记录:\n");printf("\n 姓名电话号码地址\n");for(i=0;i<n;i++)printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress);}}int loadinfo(struct student*p,int n) // 载入通讯录信息{FILE*fp ;int i,all=0 ;char filename[30]="txl.txt" ;fp=fopen(filename,"rb");if(fp==NULL){printf("\n***不能打开文件%s,或%s 文件不存在!***",filename,filename);return 0 ;}fscanf(fp,"%d\n",&all);if(all>N) // 读取记录总数{printf("文件记录数太多,不能读取");return 0;}for(i=0;i<all;i++) // 读取记录信息{fscanf(fp,"%s %s %s\n",p[i].name,p[i].tel,p[i].adress);}fclose(fp); // 关闭文件return all ;}int saveinfo(struct student*p,int n) //保存{FILE*fp ;int i,all=0 ;char filename[30]="txl.txt" ; //文件可以用记事本打开fp=fopen(filename,"w");if(fp==NULL){printf("\n***不能建立或打开文件%s!***",filename);return 0 ;}fprintf(fp,"%d\n",n);for(i=0;i<n;i++)fprintf(fp,"%s %s %s\n",p[i].name,p[i].tel,p[i].adress);fclose(fp);return 0;}五、测试数据及其结果分析测试数据时,刚开始都比较顺利,如图:开始不久就出现问题,我发现当号码位数不一致时,排序就乱了,如下图:后来我与同学讨论调试后,发现原因是排序函数是按号码从左到右的顺序依次比较各个数字进行排序。
通讯录管理系统c语言课程设计报告(一)

通讯录管理系统c语言课程设计报告(一)通讯录管理系统C语言课程设计报告1. 简介通讯录管理系统是一款基于C语言开发的软件,旨在帮助用户方便地存储、查找、编辑和删除联系人信息。
本报告将对该系统的功能和设计进行详细介绍。
2. 系统功能通讯录管理系统具备以下主要功能:•添加联系人:用户可以输入联系人的姓名、电话号码、电子邮件等信息,并将其添加到通讯录中。
•查找联系人:用户可以根据姓名或电话号码等方式,快速查找通讯录中的联系人信息。
•编辑联系人:用户可以修改通讯录中已有联系人的信息,如电话号码、电子邮件等。
•删除联系人:用户可以从通讯录中删除特定联系人。
•显示通讯录:用户可以查看通讯录中的所有联系人信息。
•退出系统:用户可以选择退出通讯录管理系统。
3. 系统设计数据结构通讯录管理系统主要使用以下数据结构存储联系人信息:•结构体:定义了一个联系人的数据结构,包括姓名、电话号码、电子邮件等字段。
•数组:用于存储多个联系人信息,构成通讯录。
数组的每个元素对应一个联系人的结构体。
主要函数添加联系人函数void addContact(struct Contact contacts[], int *num Contacts)•功能:向通讯录中添加一个联系人。
•输入参数:通讯录数组contacts、通讯录中联系人数量numContacts的指针。
•输出:无。
查找联系人函数void searchContact(struct Contact contacts[], int n umContacts)•功能:根据用户提供的关键词在通讯录中查找联系人。
•输入参数:通讯录数组contacts、通讯录中联系人数量numContacts。
•输出:无。
编辑联系人函数void editContact(struct Contact contacts[], int num Contacts)•功能:根据用户选择的联系人在通讯录中编辑联系人信息。
C语言课程设计通讯录实验报告

C语言课程设计通讯录实验报告实验目的:本实验旨在通过设计一个通讯录程序,加深理解和掌握结构体、函数和文件操作等C语言知识,并培养学生的实践能力和解决问题的能力。
实验要求:设计一个通讯录程序,能够实现添加联系人、删除联系人、查找联系人、修改联系人信息等基本功能,并能够将联系人信息保存到文件中,实现数据的持久化存储。
实验原理:通讯录程序的数据结构可以设计为一个结构体数组,每个元素表示一个联系人,结构体包含姓名、电话号码、地址等信息。
通过使用不同的函数实现不同的功能,如添加联系人函数addContact()、删除联系人函数deleteContact()、查找联系人函数searchContact()等。
实验步骤:1. 定义一个结构体类型,包含姓名、电话号码和地址等信息。
2. 声明并实现各个功能函数,如添加联系人函数addContact()、删除联系人函数deleteContact()、查找联系人函数searchContact()等。
3. 在主函数中使用循环菜单来实现用户的各种操作选择。
4. 将联系人信息保存到文件中,实现数据的持久化存储。
5. 编译并运行程序,验证程序的正确性和功能完整性。
实验结果:通过实验,成功设计并实现了一个通讯录程序,能够实现添加联系人、删除联系人、查找联系人、修改联系人信息等基本功能,并能够将联系人信息保存到文件中,实现数据的持久化存储。
实验总结:本实验通过设计一个通讯录程序,加深了对结构体、函数和文件操作等C语言知识的理解和掌握,同时也培养了解决问题的能力和实践能力。
通过实验,我进一步理解了结构体的定义和使用、函数的声明和调用、文件的打开和关闭等操作。
在实验过程中,我也遇到了一些问题,如如何优化查找联系人的算法、如何处理文件打开失败的情况等,通过思考和调试逐步解决了这些问题。
实验过程中的问题和解决方法不仅加深了对C 语言的理解,也提高了解决问题的能力。
通讯录管理程序设计报告

{
cin>>>>e.sex>>e.phone>>e.group>>e.addr>>e.e_mail;
ListInsert_Sq(L,e);
wfile.write((char *)(&e),sizeof(ElemType));
}
wfile.close();
{
ElemType *p=new ElemType[L.listsize+L.incrementsize];
for(int i=0;i<L.length;i++)
p[i]=L.elem[i];
delete [] L.elem;
tsize+L.incrementsize;
保存通讯录
将保存在线性表的联系人信息存入指定的磁盘文件。
调用通讯录
将保存在磁盘文件中的通讯录调入内存的线性表中。
4测试结果
在VC++6.0下运行程序,屏幕提示新建通讯录,输入文件名及若干联系人后,出现程序主菜单,如下图所示
(1)保存与打开通讯录功能测试
在上图中,选出5保存通讯后,退出重新运行通讯录,结果如下图,说明存盘的内容已调入内存并显示。
通过对通讯录管理的需求分析,系统应包括以下功能:
⑴添加联系人信息
⑵编辑修改联系人信息
⑶查询联系人信息,能根据姓名、电话号码、群组等进行查询
⑷删除联系人信息
⑸以某种顺序输出联系人信息
⑹文件操作:能将联系人的信息保存到磁盘文件,并且可以从文件中读出所有信息
⑺排序:能够对所有联系人按姓名、电话号码等进行排序。
C语言通讯录程序设计

}
break;
}
if(mark>0)
{
printf("\t\t请输入修改联系人信息\n\n");
printf("\t\t请输入联系人姓名:");
scanf("%s",p->name);
printf("\t\t请输入联系人电话:");
scanf("%s",p->phone);
printf("\t\t请输入联系人地址:");
printf("\n*************************************************************************\n\n");
printf ("\t\t输入要修改联系人的姓名:");
gets(name);
if(p!=NULL)
{
for(i=1;i<=len;++i,p=p->pNext)
printf("请按Enter键继续");
printf ("\n*************************************************************************\n");
getchar();
return 0;
}
int len=number(pHead);
《程序设计综合实习[软]》
实 习报告
学 号
姓 名
班 级
指导教师
*******大学
2016年9月
课程设计题目:个人通讯录管理系统
C++通讯录程序报告

宁波工程学院电信学院课程设计报告书二○一二~二○一三学年第一学期课程名称:面向对象程序设计班级:计科11-3学号:11401010306姓名:汪梦莹指导教师:盛啸涛二○一二年九月一、题目能够利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:1、实现个人通讯信息的存储,用文件来实现。
2、编程实现个人通讯信息的添加、删除、修改、浏览和查询等功能。
二、实验目的目的是了解程序设计语言的基础知识,掌握面向对象程序设计的基本思路和方法,掌握用VC++开发应用程序的的一般步骤和方法。
一方面通过对程序算法的设计和分析提高我们对问题进行文字论述和文字表达的能力并且培养我们进行知识综合,软件开发和软件的调试技术,开发较大程序的能力。
另一方面培养了我们相互合作的精神并培养了我们的创新意识。
三、组员与权重汪梦莹1四、需求分析本通讯录可实现以下功能:1) 通讯录编辑(添加、删除);2) 按不同的项进行查找;3) 对已存在的通讯录按不同的项排序;4) 将通讯录写入文件;5) 从文件读入通讯录。
五、模块设计本次程序设计主要设计了六个模块(主要是:a.add(),a.del(),a.correct(),a.find1(),a.list1(),a.read(),a.write())数据流程图a.add()函数用于通讯录中的信息进行添加,主要流程如下:a.del()函数用于通讯录中的信息进行删除,主要流程如下:a.correct()函数用于通讯录中的信息进行修改,主要流程如下:a.find1()函数用于通讯录中的信息进行查找,主要流程如下:a.list1()函数用于通讯录中的信息进行排序,主要流程如下:a.read()函数用于从文本文件中读取信息,主要流程如下:a.write()函数用于将信息写入文本文件,主要流程如下:六、流程图七、详细设计结构数组:struct student //结构体{char no[13]; //学号char name[20]; //姓名char address[100]; //地址char tel_no[12]; //电话char post_code[7]; //邮编char e_mail[40]; //E-mail}class inter //派生类{private: //派生类增加或替代的私有成员student st[35];public: //派生类增加或替代的公有成员void add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40]);//成员函数,添加联系人void del(char name[20]);//成员函数,删除联系人void find1(char no[13]);//成员函数,按学号查找联系人void find2(char name[20]);//成员函数,按姓名查找联系人void list1();//成员函数,排序联系人void list2();//成员函数,排序联系人int correct(char name[20]);//成员函数,修改联系人void read();//成员函数,读取文本文件void write();//成员函数,写入文本文件void format();//成员函数,格式化内存保存的数据int back()//成员函数,返回首页void print(int i)//成员函数,输出显示}八、实验结果运行程序,首页显示如下:按1选择通讯录编辑,编辑通讯录,显示(1)添加联系人,(2)删除联系人,(3)修改联系人,运行后结果如下:第一次使用,按1添加联系人,填入相关信息,运行图如下:返回首页,按2可以查找联系人,可以根据姓名查找和学号查找返回首页,按4可以进行排序,可以根据姓名和学号排序,按姓名排序需要自己编辑的姓氏排序规则才能使用将资料写入文件功能是将编辑好的通讯录写入文本文件,文本文件的名字可以自己输入。
通讯录C语言程序设计报告书

一、实践的目的和要求加深对C语言课程所学知识的理解,进一步巩固C语言算法规则.学会编制结构清晰.风格良好.数据结构适当的C程序,从而具备解决综合性问题的能力.二、内容在熟练掌握C语言的基础知识:数据类型(整型.实型.字符型.指针.数组.结构等);运算类型(算术运算.逻辑运算.自增自减运算.赋值运算等);程序结构(顺序结构.判断选择结构.循环结构);大程序的功能分解方法(即函数的使用)等.进一步掌握各种函数的应用以及文件的读写操作等.三、实验任务:通讯录设计要求:实现菜单设计,使用数据文件保存和修改,应用结构体和指针功能要求:通讯录信息生成,存储,查询,修改,插入,删除,打印等.四、设计思路1.通讯录的主要信息包括:编号,姓名,性别,联系电话.住址,邮编.2.用结构体数组来存储信息,有Data_Input函数来实现信息的录入,用Data_Show函数来显示打印信息,用Data_Sreach函数来查找信息,用Data_Insert函数来插入信息,用Data_Alter 函数来修改信息,用Data_Delete函数来删除信息,用Data_Save函数来保存信息,用Exit函数来退出通讯录.3.小组分工,每个人分配几个函数,按情况进行分配任务.五、程序代码#include<string.h>/*字符函数和字符串函数*/#include<conio.h>/*字符模式函数(调用getch()函数)*/#include<stdio.h>/*输入输出函数*/int i;struct friend/*电子通讯录结构定义*/{char num[5]; /*编号*/char name[11]; /*名字*/char sex[2]; /*性别*/char phone[12]; /*电话*/char address[26]; /*地址*/char post_num[11]; /*邮编*/}friends[50];FILE *fp;void Data_load() /*数据载入函数*/{int j;fp=fopen("friend.txt","r+"); /*打开文件friend.txt*/if(fp==NULL) /*判断是否存在friend.txt,如果不存在则创建*/{ fp=fopen("friend.txt","w");i=0;}else{for(i=0;i<50;i++){ j=fgetc(fp);if(j==EOF) /*判断是否到了文件尾*/return;fseek(fp,i*sizeof(struct friend),0);fread(&friends[i],sizeof(struct friend),1,fp); /*从文件中读取一条记录*/ }}}void Menu_Select() /*显示菜单界面*/{printf(" \n");printf(" \n");printf(" \n");printf(" Address Book Management System \n");printf(" \n");printf(" ======================\n");printf(" 1.Address book data Entry\n"); /*数据输入*/ printf(" 2.Address Book data Show\n"); /*数据显示*/ printf(" 3.Address Book data Search\n"); /*数据查找*/ printf(" 4.Address Book data Alter\n"); /*数据修改*/ printf(" 5.Address Book data Insert\n"); /*数据插入*/ printf(" 6.Address Book data Delete\n"); /*数据删除*/ printf(" 7.Address Book data Save\n"); /*数据保存*/ printf(" 0.Exit\n"); /*退出*/ printf(" ======================\n");printf( " Please chioce 0-7 \n\n");}int Data_check(int k,char ID[5]) /*检查通讯录中是否存在相同ID或ID输入格式错误*/ {int j;if(ID[0]=='0')k=1;for(j=0;ID[j]!='\0';j++){if(ID[j]>'9'||ID[j]<'0')k++;}for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0)k++;}return k;}void Data_Input() /*数据输入函数*/ {char yes_no='1';char ID[5];int k=0;if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){printf("************************************************************************\n"); printf(" ******************* Add Address Book Information***********************\n");printf("************************************************************************\n"); printf("************************************************************************\n");}for(;i<50;i++){do{switch(yes_no){case'1': /*如果输入为'1',则进行数据输入*/ printf(" ****** No.(4) Name(10) Sex(M/F) Phone(11) Address(25)Zip_Code(10)*******\n");scanf("%s%s%s%s%s%s",ID,friends[i].name,friends[i].sex,friends[i].phone,friends [i].address,friends[i].post_num);Data_check(k,ID);while(Data_check(k,ID)>0) /*检查输入的ID是否已存在,如果存在重新输入*/ {printf("The No. already exists Or The No. isn't correct, please re-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID);if(i<49){printf("\n\n Whether to be continue? Y(1)/N(0) \n\n");yes_no=getch();}if(i>=49)printf("\n\n Storage full!\n\n");break;case'0':break;default:yes_no=getch();}}while(yes_no!='1'&&yes_no!='0'); /*如果输入的不是'1'或'0'则重新输入*/ if(yes_no=='0') /*如果输入'0'则退出输入函数*/{i++;break;}}}int The_Size(char a[],char b[]) /*比较两个ID的大小*/ {int j,t;if((j=strlen(a)-strlen(b))>0) t=1;if((j=strlen(a)-strlen(b))<0) t=-1;if((j=strlen(a)-strlen(b))==0){if(strcmp(a,b)>0) t=1;if(strcmp(a,b)<0) t=-1;if(strcmp(a,b)==0) t=0;}return t;}void Data_Show() /*数据输出函数*/ {int j,k;char m;struct friend t;printf("********************************************************************\n");printf(" No. Name Sex Phone AddressZip_Code \n");printf("********************************************************************\n");for(j=0;j<i-1;j++) /*对数据进行排序*/ {for(k=0;k<i-1-j;k++){if(The_Size(friends[k].num,friends[k+1].num)==1){t=friends[k];friends[k]=friends[k+1];friends[k+1]=t;}}}for(j=0;j<i;j++) /*数据输出*/{printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,friends[j ].sex,friends[j].phone,friends[j].address,friends[j].post_num);m=getch();if(m==’’)break;}printf("\n\n There are %d data in the book .\n\n",i); }void Data_Search() /*数据查找函数*/{char k;int j,a,b;char ID[5];char NAME[11];printf("Search by No. : 1\n");printf("Search by name : 2\n");k=getch();switch(k){case'1': /*按ID查找*/a=0;printf("\n\n Please enter the No.\n\n");scanf("%s",ID);for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0){a++;printf(" No. Name Sex Phone Address Zip_Code \n");printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,frien ds[j].sex,friends[j].phone,friends[j].address,friends[j].post_num);}}if(a==0)printf(" Do not have to find the No.!\n\n");break;case'2': /*按姓名查找*/b=0;printf("\n\n Please enter the Name\n\n");scanf("%s",NAME);for(j=0;j<i+1;j++){if(strcmp(NAME,friends[j].name)==0){b++;printf(" No. Name Sex Phone Address Zip_Code \n");printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,friends[j ].sex,friends[j].phone,friends[j].address,friends[j].post_num);}}if(b==0)printf(" Do not have to find the Name!\n\n");break;default:printf("\n\n Error!\n");break;}}void Data_Insert() /*数据插入函数*/{if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){char ID[5];int k=0;printf("Please enter the No. that you want to insert.\n");scanf("%s",ID);Data_check(k,ID);printf("%d",Data_check(k,ID)); /*检查所需插入的ID是否已存在,如果存在重新输入*/while(Data_check(k,ID)>0){printf("The No. already exists Or The No. isn't correct, pleasere-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID); /*插入数据*/ printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30)Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[i].name,friends[i].sex,friends[i].phone,friends[i].a ddress,friends[i].post_num);i++;}}void Data_Delete() /*数据删除函数*/{int k,t=0;char ID[5];printf("\n\n Please enter the No. need to be deleted\n\n");scanf("%s",ID);for(k=0;k<i;k++){if(strcmp(friends[k].num,ID)==0){t++;break;}}if(t==0)printf("\n\n The No. does not Exist!\n\n");if(t>0){for(;k<i;k++) /*删除位置前的元素顺序前移*/{friends[k]=friends[k+1];}printf("\n\n Delete success!\n\n");i=i-1;}}void Data_Alter() /*修改函数*/{int k,t=0;char ID[5];printf("\n\n Please enter the No. to be Amended\n\n");scanf("%s",ID);for(k=0;k<i;k++){if(strcmp(friends[k].num,ID)==0){t++;break;}}if(t==0)printf("\n\n The No. does not Exist!\n\n");if(t>0){strcpy(friends[k].num,ID);printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30)Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[k].name,friends[k].sex,friends[k].phone,friends[k].a ddress,friends[k].post_num);printf("\n\n Alter Success!\n\n");}}void Data_Save() /*数据保存函数*/{int j;fp=fopen("friend.txt","w");for(j=0;j<=i-1;j++){fwrite(&friends[j],sizeof(struct friend),1,fp);}printf("\n\n Save Success!\n\n");}void Exit() /*退出函数*/{char flag;printf(" Save or Not? (Y/N)\n"); /*判断是否保存*/do{flag=getch();switch(flag){case'Y': /*保存*/Data_Save();break;case'y': /*保存*/Data_Save();break;case'N':break;case'n':break;}}while(flag!='Y'&&flag!='y'&&flag!='N'&&flag!='n');}void main(){char choose,yes_no;Data_load();do{Menu_Select();choose=getch();switch(choose){case'1': Data_Input(); break; /*输入*/case'2': Data_Show(); break; /*显示*/case'3': Data_Search(); break; /*查找*/case'4': Data_Alter(); break; /*修改*/case'5': Data_Insert(); break; /*插入*/case'6': Data_Delete(); break; /*删除*/case'7': Data_Save(); break; /*保存*/case'0': Exit(); break; /*退出*/default : printf(" Error!\n");}if(choose=='0')break;printf(" Would you like to be continue? (Y/N)\n");do{yes_no=getch();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');if(yes_no=='N'||yes_no=='n'){Exit();break;}}while(yes_no!='Y'||yes_no!='y');六、函数说明本人所写函数为: Data_check , Data_Input, The_Size, Data_Show,main.以下为各函数的功能说明,代码以及流程图:Data_check:本函数的功能是判断输入的编号是否以存在及格式是否正确.首先定义一个整型形参,一个字符数组形参.首先判断编号的首位是否为0,如果为0则整型形参赋值为1.反之没有动作,然后判断编号内是否含义字母及其他字符,如果有则整型形参自增,反之没有动作,在使用strcmp判断输入的编号在原文件中是否以存在,如果存在则整型形参自增.最后返回整型形参的值.源代码:/*检查通讯录中是否存在相同ID或ID输入格式错误*/int Data_check(int k,char ID[5]){int j;if(ID[0]=='0')k=1;for(j=0;ID[j]!='\0';j++){if(ID[j]>'9'||ID[j]<'0')k++;}for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0)k++;}return k;}流程图:Data_Input:首先判断储存是否已满,如果满了,则提示是否回到主菜单,如果没满,则提输入信息,然后调用Data_check函数,判断编号是否已经存在以及格式是否正确.如果均无误则提示是否继续输入信息,反之则重新输入编号直到编号无误为止.如果输入信息后,储存变满,则提示储存已满,不再提示是否继续输入.最后提示是否回到主菜单.源代码:void Data_Input() /*数据输入函数*/{char yes_no='1';char ID[5];int k=0;if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){printf("************************************************************************\n"); printf(" ******************* Add Address Book Information***********************\n");printf("************************************************************************\n"); printf("************************************************************************\n");}for(;i<50;i++){do{switch(yes_no){case '1': /*如果输入为'1',则进行数据输入*/printf(" ****** No.(4) Name(10) Sex(M/F) Phone(11) Address(25)Zip_Code(10)*******\n");scanf("%s%s%s%s%s%s",ID,friends[i].name,friends[i].sex,friends[i].phone,friends [i].address,friends[i].post_num);Data_check(k,ID);while(Data_check(k,ID)>0) /*检查输入的ID是否已存在,如果存在重新输入*/{printf("The No. already exists Or The No. isn't correct, please re-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID);if(i<49){printf("\n\n Whether to be continue? Y(1)/N(0) \n\n");yes_no=getch();}if(i>=49)printf("\n\n Storage full!\n\n");break;case '0':break;default:yes_no=getch();}}while(yes_no!='1'&&yes_no!='0'); /*如果输入的不是'1'或'0'则重新输入*/ if(yes_no=='0') /*如果输入'0'则退出输入函数*/{i++;break;}}}流程图:The_Size:首先定义两个字符数组形参,一个整型变量.首先利用strlen比较两个字符数组的长度,如果前者长于后者,整型变量赋值为1如果前者短于后者,整型变量赋值为-1,如果两者长度相等,则再利用strcmp比较两个字符数组的大小,如果前者大于后者,则整型变量赋值为1,如果前者小于后者,则整型变量赋值为-1,如果两者大小相等,则整型变量赋值为0.最后返回整型变量的值.源代码:int The_Size(char a[],char b[]) /*比较两个ID的大小*/{int j,t;if((j=strlen(a)-strlen(b))>0) t=1;if((j=strlen(a)-strlen(b))<0) t=-1;if((j=strlen(a)-strlen(b))==0){ if(strcmp(a,b)>0) t=1;if(strcmp(a,b)<0) t=-1;if(strcmp(a,b)==0) t=0;}return t; }流程图:Data_Show:首先调用The_Size函数再利用冒泡法对通讯录的信息根据编号进行排列.然后再对信息进行输出,输出完一条信息后按空格停止打印,按其他任意键继续打印下一条.然后输出通讯录中信息的条数,最后提示是否回到主菜单源代码:void Data_Show() /*数据输出函数*/{ int j,k;char m;struct friend t;printf("********************************************************************\n");printf(" No. Name Sex Phone Address Zip_Code \n");printf("********************************************************************\n");for(j=0;j<i-1;j++) /*对数据进行排序*/{ for(k=0;k<i-1-j;k++){ if(The_Size(friends[k].num,friends[k+1].num)==1){ t=friends[k];friends[k]=friends[k+1];friends[k+1]=t;}}}for(j=0;j<i;j++) /*数据输出*/{ printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,frien ds[j].sex,friends[j].phone,friends[j].address,friends[j].post_num);m=getch();if(m==' ')break;}printf("\n\n There are %d data in the book .\n\n",i);} 流程图:main:调用Menu_Selec函数打印出主菜单.利用switch实现对菜单功能的选择.利用do-while来实现功能选择是输入不正确的纠错.源代码:void main(){char choose,yes_no;Data_load();do{Menu_Select();choose=getch();switch(choose){case'1': Data_Input(); break; /*输入*/case'2': Data_Show(); break; /*显示*/case'3': Data_Search(); break; /*查找*/case'4': Data_Alter(); break; /*修改*/case'5': Data_Insert(); break; /*插入*/case'6': Data_Delete(); break; /*删除*/case'7': Data_Save(); break; /*保存*/case'0': Exit(); break; /*退出*/default : printf(" Error!\n");}if(choose=='0')break;printf(" Would you like to be continue? (Y/N)\n");do{yes_no=getch();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');if(yes_no=='N'||yes_no=='n'){Exit();break;}}while(yes_no!='Y'||yes_no!='y');流程图:七、程序调试1.启动程序2.输入数据3.显示数据4.查找数据5.修改数据6.插入数据7.删除数据8.保存数据9.退出八、实验心得C语言是国内外广泛使用的计算机语言,学会、学好、使用C语言进行程序设计是时代的要求,也是计算机工作者的一项基本功。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南文理学院电信学院课程设计报告题目:通讯录管理**:**学院:电气与信息工程学院专业:通信工程班级:三班学号:************指导教师:***完成日期:2010年9月 28 日课程设计任务书目录1.1.设计目的 (4)2.概论 (5)3.算法分析 (6)4.程序源代码 (6)5.测试及输出结果使用方法 (11)6.心得体会 (13)7.参考文献 (14)1.设计目的通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识;C语言程序这门课程并不简单,是需要用心去学习,慢慢体会的,这一次的小程序让我学到了很多很多,使我对C语言有了更深的认识,虽然只学了一学期,然后就编了这个程序,是有点辛苦,但是我感觉最深的是我学习到了更多的知识,在这里我要感谢我的C语言老师李书涛老师以及指导老师谭忠兵老师,因为他们的指导我才能有如此大的进步2.概论课程设计目的:1. 进一步掌握和利用C语言进行程序设计的能力;2. 进一步理解和运用结构化程序设计的思想和方法;3. 初步掌握开发一个小型实用系统的基本方法;4. 学会调试一个较长程序的基本方法;5. 学会利用流程图或N-S图表示算法;6. 掌握书写程设计开发文档的能力 (书写课程设计报告) 。
主要内容:1.添加数据:输入姓名、电话号码及地址,即可添加数据。
2.查找数据:输入所要查找的姓名即可查询。
3.修改数据:输入所要修改的姓名,进行修改,保存后即成功。
4.删除数据:输入所要删除的姓名,确定后即成功。
5.输出数据:点击后即可查看所有保存的通讯录数据。
0.退出程序。
3.算法分析:此程序运用了for while语句、switch语句、break语句等。
知识有函数结构,函数的调用,指针等知识。
4.程序源代码:#include<stdio.h>struct person{char name[8];char tel[15];char addr[50];};char filename[20];FILE *fp;void creat();void append();void search();void modify();void delete1();void output();main(){int m;creat();while(1){printf("\n\nappend,please press1"); /*添加,请按1*/printf("\nsearch,please press2"); /*查找,请按2*/printf("\nmodify,please press3"); /*修改,请按3*/printf("\ndelete,please press4"); /*删除,请按4*/printf("\noutput,please press5"); /*输出,请按5*/printf("\nexit,please press0\n"); /*退出,请按6*/scanf("%d",&m);if(m>=0&&m<=5){switch(m){case 1: append();break;case 2: search();break;case 3: modify();break;case 4: delete1();break;case 5: output();break;case 0: exit();}printf("\n\nFinsh please choose again!");/*操作完毕,请再次选择*/ }elseprintf("\n\nYou choose wrong please press other key!");/*选择错误,请再次选择*/}}void creat(){struct person one;long s1;printf("\nPlease enter the name of communication book:");/*请输入通讯簿名*/scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("\nCan't build up the communication book !");/*不能建立通讯簿*/exit();}fprintf(fp,"\n%-10s%-20s%-50s\n","name","telephone","address");printf("\nPlease input the name, telephone number and addresses( with 0 end) \n");/*请输入姓名、电话号码及住址(以0结束)*/scanf("%s",);while(strcmp(,"0")){scanf("%s%s",one.tel,one.addr);fprintf(fp,"%-10s%-20s%-50s\n",,one.tel,one.addr);scanf("%s",);}fclose(fp);}void append(){struct person one;if((fp=fopen(filename,"a"))==NULL){printf("\nCan't open the communication book!");/*不能打开通讯簿*/exit();}printf("\nPleasa enter the name,telephone number and addersses that to increase \n");/*请输入添加的姓名、电话号码及住址*/scanf("%s%s%s",,one.tel,one.addr);fprintf(fp,"%-10s%-20s%-50s\n",,one.tel,one.addr);fclose(fp);}void search(){int k=0;char namekey[8];struct person one;printf("\nPlease input the name:");scanf("%s",namekey);if((fp=fopen(filename,"rb"))==NULL){printf("\nCan't open the communication book!");exit();}while(!feof(fp)){fscanf(fp,"%s%s%s\n",,one.tel,one.addr);if(!strcmp(namekey,)){printf("\n\nHave already check,the record is:");/*已查到,记录为*/printf("\n%-10s%-18s%-50s",,one.tel,one.addr);k=1;}}if(!k)printf("\n\nsorry,this person record is not in the communication book .");/*对不起,通讯簿中没有此人的记录*/fclose(fp);}void modify(){int m,k=0;long offset;char namekey[8];struct person one;printf("\nPlease input the name:");scanf("%s",namekey);if((fp=fopen(filename,"r+"))==NULL){printf("\nCan't open the communication book !");/*不能打开通讯簿*/exit();}while(!feof(fp)){offset=ftell(fp);fscanf(fp,"%s%s%s\n",,one.tel,one.addr);if(!strcmp(namekey,)){k=1;break;}}if(k){printf("\nHave already check,the record is:");printf("\n%-10s%-18s%-50s",,one.tel,one.addr);printf("\nPlease input new the name, telephone number and addresses:");/*请输入新姓名、电话号码及住址*/scanf("%s%s%s",,one.tel,one.addr);fseek(fp,offset,SEEK_SET);printf("%ld",ftell(fp));fprintf(fp,"%-10s%-20s%-50s\n",,one.tel,one.addr);}elseprintf("\nsorry,this person record is not in the communication book.");/*对不起,通讯簿中没有此人的记录*/fclose(fp);}void delete1(){int m,k=0,flag;long offset1,offset2;char namekey[8], valid[4];struct person one;printf("\nPlease input the name:");scanf("%s",namekey);if((fp=fopen(filename,"r+"))==NULL){printf("\nCan't open the communication book!");exit();}while(!feof(fp)){offset1=ftell(fp);fscanf(fp,"%s%s%s\n",,one.tel,one.addr);if(!strcmp(namekey,)){k=1;break;}}if(k){printf("\nHave already check,the record is:");printf("\n%-10s%-18s%-50s",,one.tel,one.addr);printf("\nReally need to delete,press1;don't delete,press0 :");/*确实要删除,按1;不删除,按0*/scanf("%d",&m);if(m){fseek(fp,offset1,SEEK_SET);fprintf(fp,"%-10s%-20s%-50s\n","","","");}}elseprintf("\nsorry,this person record is not in the communication book.");fclose(fp);}void output(){struct person one;if((fp=fopen(filename,"r"))==NULL){printf("\nCan't open the communication book!");/*不能打开通讯簿*/exit();}printf("%20s\n","COMMUNICATION BOOK ");while(!feof(fp)){fscanf(fp,"%s%s%s\n",,one.tel,one.addr);printf("%-10s%-20s%-50s",,one.tel,one.addr);}fclose(fp);}5.测试及输出结果使用方法:1.添加数据2.查找数据3.修改数据4.删除数据5.输出数据6.心得体会:经过不到两个星期的课程设计,使我对C语言有了更进一步的认识和了解,要学好它要重在实践,要通过不断的上机操作才能更好的学习好它。