课程名称: C语言课程设计
班 级:
学 号:
姓 名:
指导老师:
手机名片管理系统
一.设计要求和目的
二.概要设计
系统功能模块图:
添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录
删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容
查询:可以选择用姓名、电话、地址三种方式查询
修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改
保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件
一.详细设计
(1).通讯录:
typedef struct
{
char score; /*编号*/
char name[10]; /*姓名*/
char num[15]; /*号码*/
char email[20]; /*邮箱*/
char age[8]; /*年龄*/
char adds[20]; /*住址*/
}Person;
void main() /*主函数*/
{
int n=0;
for(;;)
{
switch(menu_select())
{
case 1:
printf("\\n\添加记录到通讯录\\n"); /*添加记录*/
n=Input(pe,n);
break;
case 2:
printf("\\n\\\ 通讯录记录表\\n"); /*显示记录*/
Display(pe,n);
break;
case 3:
printf("\\n\从通讯录中删除记录\\n");
n=Delete_a_record(pe,n); /*删除记录*/
printf("\");
system("pause");
break;
case 4:
printf("\\n\在通讯录中查找记录\\n");
Query_a_record(pe,n); /*查找记录*/
printf("\");
system("pause");
break;
case 5:
printf("\\n\修改通讯录中的记录\\n");
Change(pe,n); /*修改数据*/
printf("\");
system("pause");
break;
case 6:
printf("\\n\保存功能\\n");
WritetoText(pe,n); /*保存数据*/
printf("\");
system("pause");
break;
case 0:
printf("\\n\\谢谢使用,再见!\\n"); /*结束程序*/
printf("\\n\\");
system("pause");
exit(0);
}
}
}
(2).工作流程图:
①添加:添加通讯录记录
②显示:显示通讯录记录
③删除:删除通讯录记录 ④查询:查询通讯录记录
先选择查询方式,以姓名查询方式为例
⑤修改:修改通讯录记录
二.源程序代码
#include #include #include typedef struct { char score; /*编号*/ char name[10]; /*姓名*/ char num[15]; /*号码*/ char email[20]; /*邮箱*/ char age[8]; /*年龄*/ char adds[20]; /*住址*/ }Person; Person pe[80]; int menu_select() { char c; do{ system("cls"); printf("\\ *****通讯录***** \\n"); printf("\\┌───────┐\\n"); printf("\\│ 1. 添加记录 │\\n"); printf("\\│ 2. 显示记录 │\\n"); printf("\\│ 3. 删除记录 │\\n"); printf("\\│ 4. 查询记录 │\\n"); printf("\\│ 5. 修改记录 │\\n"); printf("\\│ 6. 保存记录 │\\n"); printf("\\│ 0. 退出程序 │\\n"); printf("\\└───────┘\\n"); printf("\\请您选择(0-6):"); c=getchar(); }while(c<'0'||c>'6'); return(c-'0'); } int Input(Person per[],int n) { int i=0; char sign,x[10]; while(sign!='n'&&sign!='N') { printf("\编号:"); scanf("\%d",&per[n+i].score); printf("\姓名:"); scanf("\%s",per[n+i].name); printf("\年龄:"); scanf("\%s",per[n+i].age); printf("\电话号码:"); scanf("\%s",per[n+i].num); printf("\通讯住址:"); scanf("\%s",per[n+i].adds); printf("\电子邮箱:"); scanf("\%s",per[n+i].email); gets(x); printf("\\n\是否继续添加?(Y/N)"); scanf("\%c",&sign); i++; } return(n+i); } void Display(Person per[],int n) { int i; printf("----------------------------------------------------------------------\\n"); /*格式*/ printf("编号 姓名 年龄 电话号码 通讯地址 电子邮箱\\n"); printf("----------------------------------------------------------------------\\n"); for(i=1;i printf("%-5d%-8s%-6s%-13s%-15s%-15s\\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email); if(i>1&&i%10==0) { printf("\-----------------------------------\\n"); printf("\"); system("pause"); printf("\-----------------------------------\\n"); } } printf("----------------------------------------------------------------------\\n"); system("pause"); } int Delete_a_record(Person per[],int n) { char s[20]; int i=0,j; printf("\请输入想删除记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i { printf("\通讯录中没有此人!\\n"); return(n); } for(j=i;j strcpy(per[j].num,per[j+1].num); strcpy(per[j].name,per[j+1].name); strcpy(per[j].age,per[j+1].age); strcpy(per[j].adds,per[j+1].adds); strcpy(per[j].email,per[j+1].email); per[j].score=per[j+1].score; } printf("\\\已经成功删除!\\n"); return(n-1); } void Query_a_record(Person per[],int n) { int m; printf("\\\n请选择查询方式:\\n"); printf("\┌──────┐\\n"); printf("\│1------姓名 │\\n"); printf("\│2------电话 │\\n"); printf("\│3------地址 │\\n"); printf("\│4------返回 │\\n"); printf("\└──────┘\\n"); printf("请选择:"); scanf("%d",&m); while(m!=1&&m!=2&&m!=3&&m!=4) { printf("输入错误,请重新选择:"); scanf("%d",&m); } if(m==1) { char s[20]; int i=0; printf("\请输入想查询的姓名:"); scanf("\%s",s); while(strcmp(per[i].name,s)!=0&&i { printf("\通讯录中没有此人!\\n"); return; } printf("\此人编号: %d\\n",per[i].score); printf("\此人年龄: %s\\n",per[i].age); printf("\电话号码: %s\\n",per[i].num); printf("\通讯地址: %s\\n",per[i].adds); printf("\电子邮箱: %s\\n",per[i].email); } ; if(m==2) { char s[20]; int i=0; printf("\请输入想查询的电话:"); scanf("\%s",s); while(strcmp(per[i].num,s)!=0&&i { printf("\通讯录中没有此人!\\n"); return; } printf("\此人编号: %d\\n",per[i].score); printf("\此人姓名: %s\\n",per[i].name); printf("\此人年龄: %s\\n",per[i].age); printf("\通讯地址: %s\\n",per[i].adds); printf("\电子邮箱: %s\\n",per[i].email); } ; if(m==3) { char s[20]; int i=0; printf("\请输入想查询的地址:"); scanf("\%s",s); while(strcmp(per[i].adds,s)!=0&&i { printf("\通讯录中没有此人!\\n"); return; } printf("\此人编号: %d\\n",per[i].score); printf("\此人姓名: %s\\n",per[i].name); printf("\此人年龄: %s\\n",per[i].age); printf("\电话号码: %s\\n",per[i].num); printf("\电子邮箱: %s\\n",per[i].email); } ; } void Change(Person per[],int n) { char s[20]; int i=0; printf("\请输入想修改的记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i { printf("\通讯录中没有此人!\\n"); return; } printf("\编号:"); scanf("\%d",&per[i].score); printf("\姓名:"); scanf("\%s",per[i].name); printf("\年龄:"); scanf("\%s",per[i].age); printf("\电话号码:"); scanf("\%s",per[i].num); printf("\通讯住址:"); scanf("\%s",per[i].adds); printf("\电子邮箱:"); scanf("\%s",per[i].email); printf("\修改成功!"); } void WritetoText(Person per[],int n) { int i=0; FILE *fp; /*定义文件指针*/ char filename[20]; /*定义文件名*/ printf("\保存到文件\\n"); /*输入文件名*/ printf("\请输入所保存的文件名:"); scanf("\%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("\无法打开文件\\n"); system("pause"); return; } fprintf(fp,"******************************************通讯录******************************************\\n"); fprintf(fp,"编号 姓名 年龄 电话号码 通讯地址 电子邮箱\\n"); fprintf(fp,"------------------------------------------------------------------------------------------\\n"); while(i fprintf(fp,"%-3d\%-6s\%-3s\%-13s\%-20s\%-20s\\n",per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds,per[i].email); i++; } fprintf(fp,"------------------------------------------------------------------------------------------\\n"); fprintf(fp,"***************************************共有%d条记录****************************************\\n",n); fclose(fp); /*关闭文件*/ printf("保存成功!\\n"); } void main() /*主函数*/ { int n=0; for(;;) { switch(menu_select()) { case 1: printf("\\n\添加记录到通讯录\\n"); /*添加记录*/ n=Input(pe,n); break; case 2: printf("\\n\\\ 通讯录记录表\\n"); /*显示记录*/ Display(pe,n); break; case 3: printf("\\n\从通讯录中删除记录\\n"); n=Delete_a_record(pe,n); /*删除记录*/ printf("\"); system("pause"); break; case 4: printf("\\n\在通讯录中查找记录\\n"); Query_a_record(pe,n); /*查找记录*/ printf("\"); system("pause"); break; case 5: printf("\\n\修改通讯录中的记录\\n"); Change(pe,n); /*修改数据*/ printf("\"); system("pause"); break; case 6: printf("\\n\保存功能\\n"); WritetoText(pe,n); /*保存数据*/ printf("\"); system("pause"); break; case 0: printf("\\n\\谢谢使用,再见!\\n"); /*结束程序*/ printf("\\n\\"); system("pause"); exit(0); } } } 三.测试数据及其结果分析 测试: 1).显示的主菜单界面 2).添加界面: 3).显示界面: 4).删除界面: 删除后,通讯录里的显示记录: 5).查询界面: 以姓名查询方式为例: 6).修改界面: 修改后,通讯录里的显示记录: 7).保存界面: 四.课程设计总结下载本文