手机通讯录管理系统课程设计报告模板

高级语言程序设计

课程设计报告

 

题目:   手机通讯录管理系统                             

专    业  :电子信息工程

班    级  :电子112

学    号  :

                  姓    名  :

指导教师  :

日    期:   2012 年 7月 9日至 20## 年7 月 14 日

山东工商学院信电学院


注:用户名和密码均为dianzi112

1、程序基本功能要求

  

手机通信录采用文件存储,因而要提供文件的输入输出操作;查看功能要提供显示操作;增加新数据的过程要检查是否有重复,存储空间是否已满,且录入的新数据能按递增的顺序自动进行条目编号,因而要提供查找、统计和排序操作;要提供修改与删除和自动调整编号功能;另外还要提供键盘式选择菜单以实现功能选择。

(1)数据查看模块

通过菜单选择查看信息,然后选择办公类、个人类或者商务类,则显示所选类信息列表。这是一个查找与显示的过程,在手机通信录文件中查找type类型符合的记录,输出。

   (2)数据添加模块

    提示输入一条记录,将对通信录执行查找操作,查找姓名和电话号码字段,如不存在相同的记录,则用以追加方式写入文件,并给记录的条目字段赋值(在检查有无重复的过程中启动计数),否则提示“数据已经存在,请重新输入或者取消!”。

   (3)数据修改模块

    修改通信录信息,则需要读文件,判断信息是否是要修改的信息,如果是,修改,重新写入文件;否则直接重新写入文件。

   (4)数据删除模块

通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。

2、总体设计(功能模块说明,如函数功能、参数说明,函数调用关系描述等,并注明各模块的具体成员分工)

建立结构体来储存和整合各个信息。然后利用模块来分别实现程序的各个功能。各个模块用函数来实现。在通过主函数来判断输入数字,从而调动函数,实现所需功能。最后将输入的文件保存在文件里,以便重复使用。

整个系统可以设计为数据查看模块、数据添加模块、数据修改模块、数据删除模块。

函数体构造和查看模块编写人-------------张睿

数据添加和修改模块编写人--------------闫君

数据删除和switch函数模块-------------杨留洋

3、详细设计(程序设计组成框图、流程图)

1)数据查看模块

通过菜单选择查看信息,然后选择办公类、个人类或者商务类,则显示所选类信息列表。这是一个查找与显示的过程,在手机通信录文件中查找type类型符合的记录,输出。

void Query_a_record(Person per[],int n)               //查找记录函数

{    

int m;

printf("\t\n请选择查询方式:\n");

    printf("\t                 \n");

    printf("\t  1------姓名     \n");

    printf("\t  2------电话     \n");

    printf("\t  3------地址     \n");

    printf("\t  4------返回     \n");

    printf("\t                  \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("\t请输入想查询的姓名:");

    scanf("\t%s",s);

    while(strcmp(per[i].name,s)!=0&&i<n) i++;

    if(i==n)

    {

       printf("\t通讯录中没有此人!\n");

       return;

    }

    printf("\t此人编号: %d\n",per[i].num);

    printf("\t此人年龄: %s\n",per[i].age);

    printf("\t电话号码: %s\n",per[i].tel);

    printf("\t通讯地址: %s\n",per[i].adds);

    printf("\t电子邮箱: %s\n",per[i].email);

} ;

if(m==2)

{

    char s[20];

    int i=0;

    printf("\t请输入想查询的电话:");

    scanf("\t%s",s);

    while(strcmp(per[i].tel,s)!=0&&i<n) i++;

    if(i==n)

    {

       printf("\t通讯录中没有此人!\n");

       return;

    }

    printf("\t此人编号: %d\n",per[i].num);

    printf("\t此人姓名: %s\n",per[i].name);

    printf("\t此人年龄: %s\n",per[i].age);

    printf("\t通讯地址: %s\n",per[i].adds);

    printf("\t电子邮箱: %s\n",per[i].email);

} ;

if(m==3)

{

    char s[20];

    int i=0;

    printf("\t请输入想查询的地址:");

    scanf("\t%s",s);

    while(strcmp(per[i].adds,s)!=0&&i<n) i++;

    if(i==n)

    {

       printf("\t通讯录中没有此人!\n");

       return;

    }

    printf("\t此人编号: %d\n",per[i].num);

    printf("\t此人姓名: %s\n",per[i].name);

    printf("\t此人年龄: %s\n",per[i].age);

    printf("\t电话号码: %s\n",per[i].tel);

    printf("\t电子邮箱: %s\n",per[i].email);

} ;

}

   (2)数据添加模块

     提示输入一条记录,将对通信录执行查找操作,查找姓名和电话号码字段,如不存在相同的记录,则用以追加方式写入文件,并给记录的条目字段赋值(在检查有无重复的过程中启动计数),否则提示“数据已经存在,请重新输入或者取消!”。

int Input(Person per[],int n)                           //添加记录函数

{

    int i=0;

    char sign,x[10];                     

    while(sign!='n'&&sign!='N')            

    {

       printf("\t编号:");

       scanf("\t%d",&per[n+i].num);

       printf("\t姓名:");

       scanf("\t%s",per[n+i].name);

       printf("\t年龄:");

       scanf("\t%s",per[n+i].age);

       printf("\t电话号码:");

       scanf("\t%s",per[n+i].tel);

       printf("\t通讯住址:");

       scanf("\t%s",per[n+i].adds);

       printf("\t电子邮箱:");

       scanf("\t%s",per[n+i].email);

       gets(x);  

       printf("\n\t是否继续添加?(Y/N)");

       scanf("\t%c",&sign);

       i++;

    }

    return(n+i);

}

   (3)数据修改模块

修改通信录信息,则需要读文件,判断信息是否是要修改的信息,如果是,修改,重新写入文件;否则直接重新写入文件。

void Change(Person per[],int n)              //修改记录函数 

{

   char s[20];

   int i=0;

   printf("\t请输入想修改的记录中的名字:");

   scanf("%s",s);

   while(strcmp(per[i].name,s)!=0&&i<n) i++;

   if(i==n)

   {

       printf("\t通讯录中没有此人!\n");

       return;

   }

   printf("\t编号:");

   scanf("\t%d",&per[i].num);

   printf("\t姓名:");

   scanf("\t%s",per[i].name);

   printf("\t年龄:");

   scanf("\t%s",per[i].age);

   printf("\t电话号码:");

   scanf("\t%s",per[i].tel);

   printf("\t通讯住址:");

   scanf("\t%s",per[i].adds);

   printf("\t电子邮箱:");

   scanf("\t%s",per[i].email);

   printf("\t修改成功!");

}

   (4)数据删除模块

通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。

int Delete_a_record(Person per[],int n)           //删除记录函数   

{

    char s[20];

    int i=0,j;

    printf("\t请输入想删除记录中的名字:");

    scanf("%s",s);

    while(strcmp(per[i].name,s)!=0&&i<n) i++;

    if(i==n)

    {

       printf("\t通讯录中没有此人!\n");

       return(n);

    }

    for(j=i;j<n-1;j++)

    {

       strcpy(per[j].tel,per[j+1].tel);

       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].num=per[j+1].num;

    }

    printf("\t\t\t已经成功删除!\n");

    return(n-1);

}

4、程序运行结果(截图)

注:用户名和密码均为dianzi112

5、源程序代码(代码中注明每段代码的完成人)

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef struct

    {

       char num;               /*编号*/

       char name[20];            /*姓名*/

       char tel[20];             /*号码*/

       char email[20];          /*邮箱*/

       char age[20];            /*年龄*/

       char adds[20];              /*住址*/

    }Person;

Person pe[300];                       

int menu_select()

    {

       char c;

       do{

       system("cls");

       printf("\t ***********************欢迎使用手机通讯录********************\t \n");                         

       printf("\t\t***************************菜单*************************\t\n");                  

       printf("\t\t1. 添加记录\n");

       printf("\t\t2. 显示记录\n");

       printf("\t\t3. 删除记录\n");

       printf("\t\t4. 查询记录\n");

       printf("\t\t5. 修改记录\n");

       printf("\t\t6. 保存记录\n");

       printf("\t\t0. 退出程序\n");

     

       printf("\t\t请输入您选择的操作(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("\t编号:");

       scanf("\t%d",&per[n+i].num);

       printf("\t姓名:");

       scanf("\t%s",per[n+i].name);

       printf("\t年龄:");

       scanf("\t%s",per[n+i].age);

       printf("\t电话号码:");

       scanf("\t%s",per[n+i].tel);

       printf("\t通讯住址:");

       scanf("\t%s",per[n+i].adds);

       printf("\t电子邮箱:");

       scanf("\t%s",per[n+i].email);

       gets(x);  

       printf("\n\t是否继续添加?(Y/N)");

       scanf("\t%c",&sign);

       i++;

    }

    return(n+i);

}

void Display(Person per[],int n)                        //显示记录函数                    

{

    int i;

    printf("----------------------------------------------------------------------\n");                          /*格式*/

    printf("编号  姓名  年龄    电话号码     通讯地址        电子邮箱\n");

    printf("----------------------------------------------------------------------\n");

    for(i=1;i<n+1;i++)                                                           

    {

       printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].num,per[i-1].name,per[i-1].age,per[i-1].tel,per[i-1].adds,per[i-1].email);

       if(i>1&&i%10==0)                                                          

       {

           printf("\t-----------------------------------\n");

           printf("\t");

           system("pause");

           printf("\t-----------------------------------\n");

       }

    }

    printf("----------------------------------------------------------------------\n");

    system("pause");

}

int Delete_a_record(Person per[],int n)           //删除记录函数   

{

    char s[20];

    int i=0,j;

    printf("\t请输入想删除记录中的名字:");

    scanf("%s",s);

    while(strcmp(per[i].name,s)!=0&&i<n) i++;

    if(i==n)

    {

       printf("\t通讯录中没有此人!\n");

       return(n);

    }

    for(j=i;j<n-1;j++)

    {

       strcpy(per[j].tel,per[j+1].tel);

       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].num=per[j+1].num;

    }

    printf("\t\t\t已经成功删除!\n");

    return(n-1);

}

void Query_a_record(Person per[],int n)               //查找记录函数

{

   

    int m;

    printf("\t\n请选择查询方式:\n");

    printf("\t                 \n");

    printf("\t  1------姓名     \n");

    printf("\t  2------电话     \n");

    printf("\t  3------地址     \n");

    printf("\t  4------返回     \n");

    printf("\t                  \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("\t请输入想查询的姓名:");

       scanf("\t%s",s);

       while(strcmp(per[i].name,s)!=0&&i<n) i++;

       if(i==n)

       {

           printf("\t通讯录中没有此人!\n");

           return;

       }

       printf("\t此人编号: %d\n",per[i].num);

       printf("\t此人年龄: %s\n",per[i].age);

       printf("\t电话号码: %s\n",per[i].tel);

       printf("\t通讯地址: %s\n",per[i].adds);

       printf("\t电子邮箱: %s\n",per[i].email);

    } ;

    if(m==2)

    {

       char s[20];

       int i=0;

       printf("\t请输入想查询的电话:");

       scanf("\t%s",s);

       while(strcmp(per[i].tel,s)!=0&&i<n) i++;

       if(i==n)

       {

           printf("\t通讯录中没有此人!\n");

           return;

       }

       printf("\t此人编号: %d\n",per[i].num);

       printf("\t此人姓名: %s\n",per[i].name);

       printf("\t此人年龄: %s\n",per[i].age);

       printf("\t通讯地址: %s\n",per[i].adds);

       printf("\t电子邮箱: %s\n",per[i].email);

    } ;

    if(m==3)

    {

       char s[20];

       int i=0;

       printf("\t请输入想查询的地址:");

       scanf("\t%s",s);

       while(strcmp(per[i].adds,s)!=0&&i<n) i++;

       if(i==n)

       {

           printf("\t通讯录中没有此人!\n");

           return;

       }

       printf("\t此人编号: %d\n",per[i].num);

       printf("\t此人姓名: %s\n",per[i].name);

       printf("\t此人年龄: %s\n",per[i].age);

       printf("\t电话号码: %s\n",per[i].tel);

       printf("\t电子邮箱: %s\n",per[i].email);

    } ;

}

void Change(Person per[],int n)              //修改记录函数 

{

    char s[20];

    int i=0;

    printf("\t请输入想修改的记录中的名字:");

    scanf("%s",s);

    while(strcmp(per[i].name,s)!=0&&i<n) i++;

    if(i==n)

    {

       printf("\t通讯录中没有此人!\n");

       return;

    }

    printf("\t编号:");

    scanf("\t%d",&per[i].num);

    printf("\t姓名:");

    scanf("\t%s",per[i].name);

    printf("\t年龄:");

    scanf("\t%s",per[i].age);

    printf("\t电话号码:");

    scanf("\t%s",per[i].tel);

    printf("\t通讯住址:");

    scanf("\t%s",per[i].adds);

    printf("\t电子邮箱:");

    scanf("\t%s",per[i].email);

    printf("\t修改成功!");

}

void WritetoText(Person per[],int n)                 //存储记录函数  

{

    int i=0;

    FILE *fp;                                         /*定义文件指针*/

    char filename[20];                                  /*定义文件名*/

    printf("\t保存到文件\n");                          /*输入文件名*/

    printf("\t请输入所保存的文件名:");

    scanf("\t%s",filename);

    if((fp=fopen(filename,"w"))==NULL)                  

    {

       printf("\t无法打开文件\n");

       system("pause");

       return;

    }

    fprintf(fp,"******************************************通讯录******************************************\n");

    fprintf(fp,"编号     姓名   年龄      电话号码           通讯地址             电子邮箱\n");

    fprintf(fp,"------------------------------------------------------------------------------------------\n");

    while(i<n)

    {

       fprintf(fp,"%-3d\t%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n",per[i].num,per[i].name,per[i].age,per[i].tel,per[i].adds,per[i].email);

       i++;

    }

    fprintf(fp,"------------------------------------------------------------------------------------------\n");

    fprintf(fp,"***************************************共有%d条记录****************************************\n",n);

    fclose(fp);                                         /*关闭文件*/

    printf("保存成功!\n");

}

void main()                                         /*主函数*/

{

   

   

char name[10],code[10];

 printf("\n");printf("\n");printf("\n");printf("\n");

printf("       请输入用户名:");

scanf("%s",name);

printf("       请输入密码:");

scanf("%s",code);

if (!strcmp(name,"dianzi112")&&!strcmp(code,"dianzi112"))

{

    printf ("        welcome!!!!! \n");}

else

{

printf ("用户名或密码错误,请重新输入!\n");

}

int n=0;

    for(;;)

    {

       switch(menu_select())

        {

       case 1:

       printf("\n\t添加记录到通讯录\n");                /*添加记录*/

       n=Input(pe,n);

       break;

       case 2:

       printf("\n\t\t\t    通讯录记录表\n");             /*显示记录*/

       Display(pe,n);

       break;

      

       case 3:

       printf("\n\t从通讯录中删除记录\n");

       n=Delete_a_record(pe,n);                         /*删除记录*/

       printf("\t");

       system("pause");

       break;

       case 4:

       printf("\n\t在通讯录中查找记录\n");

       Query_a_record(pe,n);                            /*查找记录*/

       printf("\t");

       system("pause");

       break;

      

       case 5:

       printf("\n\t修改通讯录中的记录\n");

       Change(pe,n);                                    /*修改数据*/

       printf("\t");

       system("pause");

       break;

       case 6:

       printf("\n\t保存功能\n");

       WritetoText(pe,n);                               /*保存数据*/

       printf("\t");

       system("pause");

       break;

       case 0:

        printf("\n\t\t");                                 //结束程序

       system("pause");

       exit(0);

       }

    }

}

6、个人体会

忙碌了三天,在大家的共同努力下,我们总算将此程序设计出来。尽管不是自己

独立完成,但仍然很高兴,因为在设计的过程中,我了解到要设计一个大程序查

找资料有多困难。

另外平时扎实的基础也很关键,因为如果你平时学的就不怎么样,那你面对一个

大程序就会望而却步,看他人的都是难点更何况是自己设计。通过三天的努力我

看到了大家的团结,团队力量难能可贵。

总之这次设计让我受益良多,我会好好珍惜这种难能可贵的机会。

8、指导教师评语

                                     课程设计成绩:

                                     指导教师签字:

相关推荐