C程序课程设计报告--手机通讯录管理系统**:**学院:珠宝学院学号:649班级:141082一课程设计目的和内容概述1.目的:加深对《C语言》课程所学知识的理解,进一步巩固C语言编程方法。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力,加强动手能力。
2.内容:设计一个简易的手机通讯录管理系统。
该题目要求在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。
进一步掌握各种函数的应用,包括时间函数、、绘图函数,以及文件的读写操作等。
其中结构体,函数的调用,算法的设计是尤为重要的。
二题目手机通讯录管理系统。
[问题描述]该系统模拟手机通讯录管理系统,实现对手机中的通讯录进行管理[基本要求]要能提供以下几种功能:(1)查看功能:选择此功能时,列出下列三类选择:A:办公类B:个人类C:商务类(2)当选中某类时,显示出此类所有数据中的姓名和电话号码(3)添加数据功能:能录入新数据,每个结点包括:姓名,电话号码,分类(可能选项有:w为办公类p为个人类b为商务类),电子邮件。
例如:杨春商务类当录入重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通讯录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。
(4)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改。
(5)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。
三程序设计1.总体设计首先,因为每个个体有多种信息,所以要建立结构体来储存和整合各个信息。
然后利用模块来分别实现程序的各个功能。
各个模块用函数来实现。
在通过通过主函数来判断输入字母,从而调动函数,实现所需功能。
最后将输入的文件保存在文件里,以便重复使用。
2.详细设计根据功能需要建立显示,添加,查看,删除,修改,保存五个模块。
在模块中通过调用各个函数来实现功能。
详细设计如下:(1)构建结构体,写入文件FILE *fp;int i;struct address{ char a[40]; um);printf("\n\t姓名-Name:%-20s",friends[j].name);printf("\n\t性别-kind:%s",friends[j].kind);printf("\n\t联系电话-Telephone:%-13ld",friends[j].telephone);printf("\n\temail-address:%-40s",friends[j].;}void Append(int j){system("cls");friends[j].num=j;printf("\n\t\t\t序号-Number : %d",j);printf("\n\t\t\t姓名-Name : ");scanf("%s",friends[j].name);printf("\t\t\t类别-kind : ");scanf("%s",&friends[j].kind);printf("\t\t\t联系电话-telephone : ");scanf("%ld",&friends[j].telephone);while(friends[j].telephone<0||friends[j].telephone>){printf("电话号码不合法!请重新输入: ");scanf("%ld",&friends[j].telephone);}printf("\t\t\temail-Address : ");scanf("%s",friends[j].;getchar();}void Delete(){int k;int j;system("cls");printf("\n\tDelete 序号-Number : ");scanf("%d",&k);if(k<=i){for(j=k;j<i+1;j++) /*插入位置后的元素顺序后移*/{strcpy(friends[j].name,friends[j+1].name); /*交换元素内容*/strcpy(friends[j].kind,friends[j+1].kind);friends[j].telephone=friends[j+1].telephone;strcpy(friends[j].,friends[j+1].;}i--;}else{printf("输入的序号太大!");}}void Modify(int j){system("cls");Append(j);}void Save(){int i,j;system("cls");printf("\n\n\t\t请耐心等待,信息正在保存!\n");printf("\n\n\n\n\t\t\tSaving");for(i=0;i<20;i++){Sleep(300);printf(".");}printf("\n\n信息已经保存成功!\n");fp=fopen("","w");for(j=1;j<=i;j++){fwrite(&friends[j],sizeof(struct ffriend),1,fp);}fclose(fp);}(3)主函数调用各个模块用switch语句判断输入者要使用的功能,然后调用函数,模块实现功能。
程序如下:void main(){int j;char a;char x;char grade;char searchkind[20];char searchname[20];i--;system("cls");do{printf("\n\n\t\t\t=========================================\n");printf("\t\t\t\t手机通讯录\n");printf("\t\t\t\t功能选择\n"); 看*\n");printf("\t\t\t B.增添*\n");printf("\t\t\t C.删除*\n");printf("\t\t\t D.查询*\n");printf("\t\t\t E.修改*\n");printf("\t\t\t F.保存*\n");printf("\t\t\t=========================================\n");printf("\t\t\n请选择(Choice)\n\n\t\t注:输入a~h或A~H的字母:");scanf("%c",&grade);switch(grade) 人类b.商务类w.办公类");scanf("%s",searchkind);for(j=0;j<=i;j++){if(strcmp(searchkind,friends[j].kind)==0){Show(j);}}getchar();break;case 'e':case 'E':printf("\n\t请输入要修改记录的相关姓名:");gets(searchname);scanf("%s",searchname);for(j=0;j<=i;j++){if(strcmp(searchname,friends[j].name)==0){Modify(j);}}if(i<1){ printf("\n 没有您所要修改的记录-No records");printf("\n 请按回车键继续!");getchar();getchar();}printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");break;case 'f':case 'F':system("cls");Save();getchar();printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");break;default:printf("\n\t输入有误,请输入正确的序列号!");printf("\n请按回车键继续!");getchar();printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");}}while(1);}上述三部分实现整个程序的功能。
四程序源代码#include <>#include <>#include <>#include <>#include <>#include <>#include <>void Menu();FILE *fp;int i;struct address{ char a[40];};struct ffriend{ int num;char name[20];char kind[20];long telephone;struct address address;}friends[50];void Load(){int j;long k;fp=fopen("","a+");if(fp!=NULL){for(i=1;i<50;i++){j=fgetc(fp);if(j==EOF)return;k=i-1;fseek(fp,k*sizeof(struct ffriend),SEEK_SET);fread(&friends[i],sizeof(struct ffriend),1,fp);}}else{fp=fopen("","w");i=1;}system("cls");}void Show(int j){system("cls");printf("\n\n\t编号-Nnumber: %3d",friends[j].num);printf("\n\t姓名-Name:%-20s",friends[j].name);printf("\n\t性别-kind:%s",friends[j].kind);printf("\n\t联系电话-Telephone:%-13ld",friends[j].telephone);printf("\n\temail-address:%-40s",friends[j].;}void Append(int j){system("cls");friends[j].num=j;printf("\n\t\t\t序号-Number : %d",j);printf("\n\t\t\t姓名-Name : ");scanf("%s",friends[j].name);printf("\t\t\t类别-kind : ");scanf("%s",&friends[j].kind);printf("\t\t\t联系电话-telephone : ");scanf("%ld",&friends[j].telephone);while(friends[j].telephone<0||friends[j].telephone>) {printf("电话号码不合法!请重新输入: ");scanf("%ld",&friends[j].telephone);}printf("\t\t\temail-Address : ");scanf("%s",friends[j].;getchar();}void Delete(){int k;int j;system("cls");printf("\n\tDelete 序号-Number : ");scanf("%d",&k);if(k<=i){for(j=k;j<i+1;j++){strcpy(friends[j].name,friends[j+1].name);strcpy(friends[j].kind,friends[j+1].kind);friends[j].telephone=friends[j+1].telephone;strcpy(friends[j].,friends[j+1].;}i--;}else{printf("输入的序号太大!");}}void Modify(int j){system("cls");Append(j);}void Save(){int i,j;system("cls");printf("\n\n\t\t请耐心等待,信息正在保存!\n");printf("\n\n\n\n\t\t\tSaving");for(i=0;i<20;i++){Sleep(300);printf(".");}printf("\n\n信息已经保存成功!\n");fp=fopen("","w");for(j=1;j<=i;j++){fwrite(&friends[j],sizeof(struct ffriend),1,fp);}fclose(fp);}void main(){int j;char a;char x;char grade;char searchkind[20];char searchname[20];i--;system("cls");do{printf("\n\n\t\t\t=========================================\n");printf("\t\t\t\t手机通讯录\n");printf("\t\t\t\t功能选择\n");printf("\t\t\t=========================================\n");printf("\t\t\t A.查看*\n");printf("\t\t\t B.增添*\n");printf("\t\t\t C.删除*\n");printf("\t\t\t D.查询*\n");printf("\t\t\t E.修改*\n");printf("\t\t\t F.保存*\n");printf("\t\t\t=========================================\n");printf("\t\t\n请选择(Choice)\n\n\t\t注:输入a~h或A~H的字母:");scanf("%c",&grade);switch(grade){case 'a':case 'A': j=0;while(getchar()!=0x1b&&j<=i){Show(j++);printf("\n\n请按回车键继续!");}while(getchar()==0x1b||j>i){printf("\n\t空文档,无任何记录-Empty Note\n");printf("\n\n请按回车键继续!");getchar();break;}printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");break;case 'b':case 'B':while(i<=50){i++;Append(i);printf("\t是否继续增加(y/n)");a=getchar();if(a=='n')break;}if(i==51)printf("\n\t文档已满,无法增加记录-note full");printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");getchar();break;case 'c':case 'C':Delete();if(i<1)printf("\n没有记录-No records\n");printf("\n\n请按回车键继续!");getchar();getchar();printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");break;case 'd':case 'D':system("cls");printf("\n\t请输入要查询记录的相关类别: p.个人类 b.商务类w.办公类"); ind)==0){Show(j);}}getchar();break;case 'e':case 'E':printf("\n\t请输入要修改记录的相关姓名:");gets(searchname);scanf("%s",searchname);for(j=0;j<=i;j++){if(strcmp(searchname,friends[j].name)==0){Modify(j);}}if(i<1){ printf("\n 没有您所要修改的记录-No records");printf("\n 请按回车键继续!");getchar();getchar();}printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");break;case 'f':case 'F':system("cls");Save();getchar();printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");break;default:printf("\n\t输入有误,请输入正确的序列号!");printf("\n请按回车键继续!");getchar();printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");}}while(1);}五流程图六运行截图1 主界面:2 按顺序添加数据:3 按顺序查看:4 查询,输入要查询的类别:显示该种类的所有信息5 删除(按序号):6 修改,输入要修改的的人名:输入新的数据7 保存:七个人心得与总结这次课程设计是大学以来的第一次课程设计。