C语言程序设计实训报告课程名称 C语言程序设计实训课题名称通讯录管理专业软件工程班级 K软件151学号姓名指导教师2016年 1 月 1 日湖北汽车工业学院科技学院C语言程序设计实训任务书课程名称 C语言程序设计实训课题通讯录管理专业班级软件工程学生姓名学号指导老师审批一、设计内容与设计要求1.设计内容:设计课题:通讯录管理一、问题描述:该设计实现对通讯录得管理功能,具体包括从键盘输入通讯录的信息、从指定的文件中读入通讯录的信息、按姓名查询通讯录的信息、按分类查询通讯录的信息、删除指定姓名的通讯录的信息、将通讯录信息保存在指定的文件中等。
二、功能要求:1)能从键盘输入通讯录的信息(增加,输入时需要能检查该姓名的通讯录的记录是否已经存在,如果存在,需要询问是否是覆盖还是增加,需要判断输入的类型是否存在)2)能从指定的文件中读入通讯录的信息3)能按姓名查询通讯录的信息4)能按分类查询通讯录的信息5)能删除指定姓名的通讯录的信息6)能将通讯录信息保存在指定的文件中7)所有数据符合实际应用要求2.设计要求:1)设计正确,方案合理。
2)界面友好,使用方便。
3)程序精炼,结构清晰。
4)上机演示。
3.设计报告要求:课程设计报告格式如下:1)正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体,行距为22。
2)正文的内容:课题的主要功能、课题的功能模块的划分、主要功能的实现、程序调试、总结、附件(所有程序的源代码,要求对程序写出必要的注释)。
3)课程设计报告装订顺序:封面、任务书、目录、正文、评分、程序清单附件。
二、进度安排湖北汽车工业学院科技学院2015年12月 20 日目录1 系统需求分析........................... 错误!未定义书签。
2 概要设计............................... 错误!未定义书签。
3 详细设计............................... 错误!未定义书签。
4 系统测试............................... 错误!未定义书签。
5课程设计总结错误!未定义书签。
1 系统需求分析本系统首先设计出了主函数,然后根据去要实现的功能分别设计,添加、显示、删除、查找、修改功能的子函数。
在现实的函数设计过程中首先运用文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。
添加函数在设计时通过申请一片空间,然后通过指针将需要添加进去,从而实现添加功能。
删除函数的设计是首先从文件找到要删除的人,然后通过写一个实现删除目的的for循环将人从内存里面删除,然后在用写的方式打开文件,将内存的信息写入文件,实现删除。
查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。
修改也大体和删除相同。
2 概要设计系统功能模块图:3 详细设计数据结构本系统主要采用链表结构类型来表示储存在“通讯录管理系统”中的信息。
其中,链表结点由四个分量构成:编号、联系人姓名、电话号码、指向该结构体的指针。
主菜单模块:本系统设置了5个子功能菜单,5个子功能的设计描述如下。
(1)通讯录信息的输入。
可以一次输入多个通讯成员的信息,建立通讯录。
该功能由insert()函数实现。
(2) 通讯录信息的显示。
可以查看通讯录中所有的通讯录成员记录。
该功能由output()函数实现。
(3) 通讯录信息的保存。
可以将输入的通讯录成员的信息进行保存。
该功能由save()函数实现。
(4) 通信记录的删除。
可以对通讯录中不再需要的信息进行删除。
该功能由del()函数实现。
(要彻底删除,必须要删除和通讯录.txt 中的内容。
如下图:)(5) 通信记录的修改。
可以将通讯录中的联系成员的信息进行修改,并保存。
该功能由modify()函数实现。
(6) 通信记录的查找。
可以通过3种方式进行对通讯信息进行查找。
该功能由found(found_code()、found_name()、found_tele())函数实现。
struct tele ode,p->code);printf("\t 姓名:"); scanf("%s",p->name);strcpy(person[counter+1].name,p->name); printf("\t 电话:"); scanf("%s",p->tele);strcpy(person[counter+1].tele,p->tele); printf("\n\t ************************************");counter++;free(p); ode,person[i].name,person[i].tele);printf("\t");开始 从0~6调用insert 函数 k=1保存调用save 函数返回主菜单 结束 选择显示功显示所有记返回主菜单}elseprintf("\n\n\n\n\n\t\t记录为空,请输入联系人信息!");getchar();getchar();system("cls");menu();}删除模块此模块先利用查找模块找到所要删除的信息,然后根据用户的选择来确定是否删除信息,此种调用到save函数。
其流程图如下:【程序】/***************************信息删除函数***************************/void del() ame)){c=k-1;break;}}if(c){printf("\t\t\t已查到,记录为:\n\n\n");printf("\t%-10s%-20s%-20s\n",person[0].code,person[0].name,person[0].tel e);printf("\t%-10s%-20s%-20s\n",person[c].code,person[c].name,person[c].tel e);printf("\n\n\t\t\t确定要删除吗(Y/N):");scanf("%s",&m);if(m=='y'||m=='Y'){if(c==counter){strcpy(person[counter].code,"\0");strcpy(person[counter].name,"\0");strcpy(person[counter].tele,"\0");counter--;}else{for(k=c;k<=counter;k++)ode,person[k+1].code);strcpy(person[k].code,person[k+1].name);strcpy(person[k].code,person[k+1].tele);}strcpy(person[counter].code,"\0"); ame,"\0");strcpy(person[counter].tele,"\0");counter--;}printf("\t\t\t删除成功!");getchar();getchar();system("cls");save();xt","r"))==NULL) xt","w"); xt","r"))!=NULL) ode,person[i].name,person[i].tele); ode,p->code);printf("\t 姓名:");scanf("%s",p->name);strcpy(person[counter+1].name,p->name);printf("\t 电话:");scanf("%s",p->tele);strcpy(person[counter+1].tele,p->tele);printf("\n\t ************************************");counter++;free(p);ode,person[i].name,person[i].tele);printf("\t");}elseprintf("\n\n\n\n\n\t\t记录为空,请输入联系人信息!");getchar();getchar();system("cls");menu();}/************保存、修改、删除只针内存中的数组进行操作*************//************************通讯信息保存函数*************************/void save(){int i;system("cls");if((fp=fopen("","w"))==NULL) ;exit(1);}fprintf(fp,"%d",counter); xt","w"))!=NULL)fprintf(fp,"%s","\0");fclose(fp);if((fp=fopen("通讯录.txt","a"))!=NULL)for(i=0;i<=counter;i++)fprintf(fp,"%-10s%-20s%-20s",person[i].code,person[i].name,person[i].tel e);fclose(fp);system("cls");}/***************************信息删除函数***************************/ void del() ame)){c=k-1;break;}}if(c){printf("\t\t\t已查到,记录为:\n\n\n");printf("\t%-10s%-20s%-20s\n",person[0].code,person[0].name,person[0].tel e);printf("\t%-10s%-20s%-20s\n",person[c].code,person[c].name,person[c].tel e);printf("\n\n\t\t\t确定要删除吗(Y/N):");scanf("%s",&m);if(m=='y'||m=='Y'){if(c==counter){strcpy(person[counter].code,"\0");strcpy(person[counter].name,"\0");strcpy(person[counter].tele,"\0");counter--;}else{for(k=c;k<=counter;k++)ode,person[k+1].code);strcpy(person[k].code,person[k+1].name);strcpy(person[k].code,person[k+1].tele);}strcpy(person[counter].code,"\0"); ame,"\0");strcpy(person[counter].tele,"\0");counter--;}printf("\t\t\t删除成功!");getchar();getchar();system("cls");save(); ode))break;k++;}if(k<=counter){printf("\n\t\t\t 已查到,记录为:\n");printf("\n%-10s%-20s%-20s","编号","姓名","电话号码");printf("\t\t\n%-10s%-20s%-20s\n",person[k].code,person[k].name,person[k].te le);printf("\t\t\t 确定要修改吗(Y/N):");scanf("%s",&m);if(m=='y'||m=='Y'){printf("\n\t\t\t 请输入新的信息:\n\n");printf("\t******************************\n\n");printf("\t 编号:");scanf("%s",person[k].code);printf("\t 姓名:");scanf("%s",person[k].name);printf("\t 电话:");scanf("%s",person[k].tele);printf("\n\t**********************************");printf("\n\n\t\t\t 修改成功!");getchar();getchar();system("cls");save(); xt","r"))==NULL){printf("\n 不能打开通讯录!\n");exit(0);}while(!feof(fp)) xt","r"))==NULL){printf("\n 不能打开通讯录!\n");exit(0);}while(!feof(fp)) xt","r"))==NULL){printf("\n不能打开通讯录!\n");exit(0);}while(!feof(fp)) //当文件结束时,feof()返回值为1{fscanf(fp,"%s%s%s\n",p->code,p->name,p->tele);if(!strcmp(telekey,p->tele)){k=1;break; //k=1,说明已经查到}}if(k){printf("\n\t\t%-10s%-20s%-20s\n","编号","姓名","电话号码");printf("\n\t\t%-10s%-20s%-20s",p->code,p->name,p->tele);}elseprintf("\n\t\t您查询的号码不存在!");fclose(fp);getchar();getchar();system("cls");}/****************************退出系统****************************/void quit() //调试合适{printf("\t\t");exit(0);}C语言程序设计实训评分表课程名称:C语言程序设计实训教师签名:日期:。