《C语言课程设计报告—手机通讯录管理系统.doc》由会员分享,可在线阅读,更多相关《C语言课程设计报告—手机通讯录管理系统.doc(21页珍藏版)》请在三一办公上搜索。
1、C程序课程设计报告 -手机通讯录管理系统组长: 学院:电子信息工程学号:10071050班级:电二 成员: 一 课程设计目的和内容概述1.目的:加深对C语言课程所学知识的理解,进一步巩固C语言编程方法。学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力,加强动手能力。2.内容:设计一个简易的手机通讯录管理系统。该题目要求在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数
2、的应用,包括时间函数、绘图函数,以及文件的读写操作等。其中结构体,函数的调用,算法的设计是尤为重要的。二 题目 手机通讯录管理系统。问题描述 该系统模拟手机通讯录管理系统,实现对手机中的通讯录进行管理 基本要求 要能提供以下几种功能: (1)查看功能:选择此功能时,列出下列三类选择:A:办公类B:个人类C:商务类 (2)当选中某类时,显示出此类所有数据中的姓名和电话号码 (3)添加数据功能:能录入新数据,每个结点包括:姓名,电话号码,分类(可能选项有:w为办公类 p为个人类b为商务类),电子邮件。 例如:杨春13589664454商务类chuny 当录入重复的姓名和电话号码时,则提示数据录入重
3、复并取消录入;当通讯录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。 (4)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改。 (5)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。三 程序设计1.总体设计 首先,因为每个个体有多种信息,所以要建立结构体来储存和整合各个信息。然后利用模块来分别实现程序的各个功能。各个模块用函数来实现。在通过通过主函数来判断输入字母,从而调动函数,实现所需功能。最后将输入的文件保存在文件里,以便重复使用。2.详细设计根据功能需要建立显示,添加,查看,删除,修改,保存五个
4、模块。在模块中通过调用各个函数来实现功能。详细设计如下:(1)构建结构体,写入文件FILE *fp;int i; struct address char a40; /email地址;struct ffriend int num; char name20; char kind20; long telephone; struct address address; friends50; void Load() int j,k; fp=fopen(friend.txt,a+); if(fp!=NULL) for(k=0;k50;k+) j=fgetc(fp); if(j=EOF) i=k-1;retu
5、rn; fseek(fp,k*sizeof(struct ffriend),SEEK_SET); fread(&friendsk,sizeof(struct ffriend),1,fp); else fp=fopen(friend.txt,w); i=1; system(cls); (2)构造函数与模块构造显示模块,增加模块,删除模块,修改模块,查询模块。程序如下:void Show(int j) system(cls); /实现分屏操作的函数 printf(nnt编号-Nnumber: %3d,friendsj.num); printf(nt姓名-Name:%-20s,friendsj.na
6、me); printf(nt性别-kind:%s,friendsj.kind); printf(nt联系电话-Telephone:%-13ld,friendsj.telephone); printf(ntemail-address:%-40s,friendsj.address.a);void Append(int j) system(cls); friendsj.num=j; printf(nttt序号-Number : %d,j); printf(nttt姓名-Name : ); scanf(%s,friendsj.name); printf(ttt类别-kind : ); scanf(%s
7、,&friendsj.kind); printf(ttt联系电话-telephone : ); scanf(%ld,&friendsj.telephone); while(friendsj.telephone16000000000) printf(电话号码不合法!请重新输入 : ); scanf(%ld,&friendsj.telephone); printf(tttemail-Address : ); scanf(%s,friendsj.address.a); getchar();void Delete() int k;int j; system(cls); printf(ntDelete
8、序号-Number : ); scanf(%d,&k); if(k-1=i) for(j=k-1;ji+1;j+) /*插入位置后的元素顺序后移*/ strcpy(friendsj.name,friendsj+1.name); /*交换元素内容*/ strcpy(friendsj.kind,friendsj+1.kind); friendsj.telephone=friendsj+1.telephone; strcpy(friendsj.address.a,friendsj+1.address.a); i-; else printf(输入的序号太大!); void Modify(int j)
9、system(cls); Append(j);void Save() int k,j; system(cls); printf(nntt请耐心等待,信息正在保存!n); printf(nnnntttSaving); for(k=0;k20;k+) Sleep(300); printf(.); printf(nn信息已经保存成功!n); fp=fopen(friend.txt,w); for(j=0;j=i;j+) fwrite(&friends0,sizeof(struct ffriend),1,fp); fclose(fp);(3)主函数调用各个模块用switch语句判断输入者要使用的功能,
10、然后调用函数,模块实现功能。程序如下:void main() int j;char a;char x; char grade; char searchkind20;char searchname20;load();system(cls); do printf(nnttt=n); printf(tttt手机通讯录 n); printf(tttt功能选择 n); /输出主界面 printf(ttt=n); printf(ttt A.查看 *n); printf(ttt B.增添 *n); printf(ttt C.删除 *n);printf(ttt D.查询 *n); printf(ttt E.修
11、改 *n); printf(ttt F.保存 *n); printf(ttt=n); printf(ttn请选择(Choice)nntt注:输入ah或AH的字母:); scanf(%c,&grade); switch(grade) /用switch判断使用者要选择的功能 case a: case A: j=0; while(getchar()!=0x1b&ji) if(j=0)printf(nt空文档,无任何记录-Empty Noten); else printf(nt记录已全部显示n); printf(nn请按回车键继续!); getchar(); break; printf(ntttttt
12、t此次操作结束); printf(nt-ttn); break; case b: case B: while(i50) i+; Append(i); printf(t是否继续增加?(y/n); a=getchar(); if(a=n) break; if(i=50) printf(nt文档已满,无法增加记录-note full); printf(nttttttt此次操作结束); printf(nt-ttn); getchar(); break; case c: case C: Delete(); if(i1) printf(n没有记录-No recordsn); printf(nn请按回车键继
13、续!); getchar(); getchar(); printf(nttttttt此次操作结束); printf(nt-ttn); break; case d: case D: system(cls); printf(nt请输入要查询记录的相关类别: p.个人类 b.商务类 w.办公类); scanf(%s,searchkind); for(j=0;j=i;j+) if(strcmp(searchkind,friendsj.kind)=0) Show(j); getchar(); break; case e: case E: printf(nt请输入要修改记录的相关姓名:); gets(se
14、archname); scanf(%s,searchname); for(j=0;j=i;j+) if(strcmp(searchname,friendsj.name)=0) Modify(j); if(i1) printf(n 没有您所要修改的记录-No records); printf(n 请按回车键继续!); getchar(); getchar(); printf(nttttttt此次操作结束); printf(nt-ttn); break; case f: case F: system(cls); Save(); getchar(); printf(nttttttt此次操作结束);
15、printf(nt-ttn); break; default: printf(nt输入有误,请输入正确的序列号!); printf(n请按回车键继续!); getchar(); printf(nttttttt此次操作结束); printf(nt-ttn); while(1);上述三部分实现整个程序的功能。四 程序源代码#include #include #include #include FILE *fp;int i; struct address char a40; ;struct ffriend int num; char name20; char kind20; long telepho
16、ne; struct address address; friends50; void Load() int j,k; fp=fopen(friend.txt,a+); if(fp!=NULL) for(k=0;k50;k+) j=fgetc(fp); if(j=EOF) i=k-1;return; fseek(fp,k*sizeof(struct ffriend),SEEK_SET); fread(&friendsk,sizeof(struct ffriend),1,fp); else fp=fopen(friend.txt,w); i=1; system(cls); void Show(i
17、nt j) system(cls); printf(nnt编号-Nnumber: %3d,friendsj.num); printf(nt姓名-Name:%-20s,friendsj.name); printf(nt性别-kind:%s,friendsj.kind); printf(nt联系电话-Telephone:%-13ld,friendsj.telephone); printf(ntemail-address:%-40s,friendsj.address.a);void Append(int j) system(cls); friendsj.num=j+1;printf(nttt类别:p
18、.个人类 b.商务类 w.办公类); printf(nttt序号-Number : %d,j+1); printf(nttt姓名-Name : ); scanf(%s,friendsj.name); printf(ttt类别-kind : ); scanf(%s,&friendsj.kind); printf(ttt联系电话-telephone : ); scanf(%ld,&friendsj.telephone); while(friendsj.telephone16000000000) printf(电话号码不合法!请重新输入 : ); scanf(%ld,&friendsj.teleph
19、one); printf(tttemail-Address : ); scanf(%s,friendsj.address.a); getchar();void Delete() int k;int j; system(cls); printf(ntDelete 序号-Number : ); scanf(%d,&k); if(k-1)=i) for(j=k-1;ji+1;j+) strcpy(friendsj.name,friendsj+1.name); strcpy(friendsj.kind,friendsj+1.kind); friendsj.telephone=friendsj+1.te
20、lephone; strcpy(friendsj.address.a,friendsj+1.address.a); i-; else printf(输入的序号太大!); void Modify(int j) system(cls); Append(j);void Save() int k,j; system(cls); printf(nntt请耐心等待,信息正在保存!n); printf(nnnntttSaving); for(k=0;k20;k+) Sleep(300); printf(.); printf(nn信息已经保存成功!n); fp=fopen(friend.txt,w); for
21、(j=0;j=i;j+) fwrite(&friendsj,sizeof(struct ffriend),1,fp); fclose(fp);void main() int j;char a;char x; char grade; char searchkind20;char searchname20; Load(); system(cls); do printf(nnttt=n); printf(tttt手机通讯录 n); printf(tttt功能选择 n); printf(ttt=n); printf(ttt A.查看 *n); printf(ttt B.增添 *n); printf(t
22、tt C.删除 *n);printf(ttt D.查询 *n); printf(ttt E.修改 *n); printf(ttt F.保存 *n);printf(ttt g.推出 *n); printf(ttt=n); printf(ttn请选择(Choice)nntt注:输入ah或AH的字母:); scanf(%c,&grade); switch(grade) case a: case A: j=0; while(getchar()!=0x1b&ji) if(j=0)printf(nt空文档,无任何记录-Empty Noten); else printf(nt记录已全部显示n); print
23、f(nn请按回车键继续!); getchar(); break; printf(nttttttt此次操作结束); printf(nt-ttn); break; case b: case B: while(i50) i+; Append(i); printf(t是否继续增加?(y/n); a=getchar(); if(a=n) break; if(i=50) printf(nt文档已满,无法增加记录-note full); printf(nttttttt此次操作结束); printf(nt-ttn); getchar(); break; case c: case C: Delete(); if
24、(i0) printf(n没有记录-No recordsn); printf(nn请按回车键继续!); getchar(); getchar(); printf(nttttttt此次操作结束); printf(nt-ttn); break; case d: case D: system(cls); printf(nt请输入要查询记录的相关类别: p.个人类 b.商务类 w.办公类); scanf(%s,searchkind);getchar(); for(j=0;j=i;j+) if(strcmp(searchkind,friendsj.kind)=0) Show(j);printf(nt按回车请继续);getchar(); break; case e: case E: printf(nt请输入要修改记录的相关姓名:); gets(searchname); scanf(%s,searchname); for(j=0;j=i;j+) if(strcmp(searchname,friendsj.name)=0) Modify(j); if(i0) printf(n 没有您所要修改的记录-No records); printf(n 请按回车键继续!); getchar(); getchar(); printf(nttttttt此次操作结束); printf(nt-