通讯录管理系统课程设计报告

设计课题题目

一、课程设计目的与要求

1.课程设计目的

(1)       综合运用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件等)来完成一个简单的信息管理程序的设计。

(2)       充分体现和体会函数在程序设计中的必要性和实用性,并反映主函数main()在程序设计中的实现思路和方法。

2. 课程设计要求

制作一个通讯录系统。

(1)该程序具有查找、添加、修改、删除功能。

(2)通讯录包括:姓名、电话、街道、城市、省、邮编等。

二、总体设计

根据系统的要求,系统总体设计如图1所示。

 


  

   

  

三、详细设计

1、数据结构设计

#include<stdio.h>             /*标准输入输出函数库*/

#include<stdlib.h>            /*标准函数库*/

#include<string.h>            /*字符串函数库*/

#define FILENAME "phone.dat"

struct date                //定义一个结构体类型数组

         {     char name[10];            /*姓名*/

                    char phone[12];           /*电话*/

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

                    char QQ[20];             /*QQ*/

        

         }     per[10];    

          int menu()               //主菜单选择函数

      

2.函数说明

(1) 主函数

main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能

(2) 其他各功能函数包括

四、程序清单

1、头文件

#include<stdio.h>             /*标准输入输出函数库*/

#include<stdlib.h>            /*标准函数库*/

#include<string.h>            /*字符串函数库*/

#define FILENAME "phone.dat"

2、主函数

void main()                                         //主函数

{

int n=0,i;

while(1)

{ switch (menu())

{ case 1:         {       printf("\n\t 通讯信息录入\n");                    //信息录入

                     n=Input(per, n);

                            }

            break;

case 2:

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

                   Display(per,n);

                   break;

                  

case 3:

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

                   WritetoText(per,n);                                                                                       //保存数据

                   printf("\t");

                   system("pause");           //操作完成后进行暂停

                   break;

case 4:

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

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

                   printf("\t");

                   system("pause");

                   break;

case 5:

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

                   Change(per,n);                                                                                                  //修改数据

                   printf("\t");

                   system("pause");

                   break;

                  

case 6:

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

                   n=Input(per,n);

                   break;

       

case 7:

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

                   Query_a_record(per,n);                                                                                    //查找记录

                   printf("\t");

                   system("pause");                                      //从程序里调用”pause”命令

                   break;

                  

case 0:

                   printf("\n\t\t谢谢使用,再见!\n");                         //结束程序

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

                   system("pause");

                   exit(0);

                   }

五、总程序和分工执行结果

#include<stdio.h>             /*标准输入输出函数库*/

#include<stdlib.h>            /*标准函数库*/

#include<string.h>            /*字符串函数库*/

#define FILENAME "phone.dat"

struct date                //定义一个结构体类型数组

         {      char name[10];            /*姓名*/

                   char phone[12];

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

                   char QQ[20];

          }per[10];    

                  

int menu()               //主菜单选择函数

         {      int c;                  //定义一个整型变量

                   do{

                   system("cls");                       //清屏

             printf("\t*******通讯录*******\n");

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

                   printf("\t   1、通讯信息录入  \n");

                   printf("\t   2、通讯信息显示  \n");

                   printf("\t   3、通讯信息保存  \n");

        printf("\t   4、通讯信息删除  \n");

        printf("\t   5、通讯信息修改  \n");

        printf("\t   6、通讯信息增加  \n");

        printf("\t   7、通讯信息查询  \n");

        printf("\t   0. 退出          \n");

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

                   printf("\t请您选择(0-7):");

         scanf("%d",&c);            

                   }while(c>7&&c<0);

                   return(c);

         }

int Input(struct date per[10],int n)

{       int i=0;

         char sign,x[10];                     

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

         {   printf("\t姓名:");

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

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

                   scanf("%s",per[n+i].phone);

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

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

                   printf("\tQQ:");

                   scanf("%s",per[n+i].QQ);

                   gets(x);  

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

                   fflush(stdin);                                                    //清空缓存

                   scanf("%c",&sign);

                   i++;

         }

         return(n+i);

}

void writeToFile(struct date per[10],int n)

{       FILE *fp=NULL;

         int i=0;

         fp=fopen("phone.dat","wb");

         if(fp==NULL)

         {       printf("打开文件出错!\n");

                   exit(0);

         }

         for(i=0;i<10;i++)

                   fwrite(&per[i],sizeof(per),1,fp);                          //把字节为1的信息写入文件

         fclose(fp);

}

void Display(struct date per[10],int n)                                        

{      int i;

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

         printf("  姓名       电话号码        QQ          电子邮箱\n");

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

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

         {

                   printf("%-15s%-14s%-14s%-14s\n",per[i-1].name,per[i-1].phone,per[i-1].QQ,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(struct date per[10],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].phone,per[j+1].phone);

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

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

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

         }

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

         return(n-1);

}

void Query_a_record(struct date per[10],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└──────┘\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此人QQ: %s\n",per[i].QQ);

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

                   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].phone,s)!=0&&i<n) i++;

                   if(i==n)

                   {

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

                            return;

                   }

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

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

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

         } ;

}

void Change(struct date per[10],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("姓名:");

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

         printf("电话号码:");

         scanf("%s",per[i].phone);

         printf("QQ:");

         scanf("%s",per[i].QQ);

         printf("电子邮箱:");

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

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

}

void WritetoText(struct date per[10],int n)            

{    int i=0;

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

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

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

         if((fp=fopen("phone.dat","w"))==NULL)                  

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

                   system("pause");

                   return;

         }

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

         fprintf(fp,"     姓名         电话号码           QQ            电子邮箱\n");

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

         while(i<n)

         { fprintf(fp,"%-10s\t%-3s\t%-20s\t%-20s\n",per[i].name,per[i].phone,per[i].QQ,per[i].email);

                   i++;

         }

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

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

         fclose(fp);                                                 //关闭文件

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

}

void main()                                                     //主函数

{ int n=0,i;

while(1)

{ switch (menu())

{ case 1:         {       printf("\n\t 通讯信息录入\n");                  //信息录入

                     n=Input(per, n);

                            }

            break;

case 2:

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

                   Display(per,n);

                   break;

                  

case 3:

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

                   WritetoText(per,n);                                                                //保存数据

                   printf("\t");

                   system("pause");                                      //操作完成后进行暂停

                   break;

case 4:

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

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

                   printf("\t");

                   system("pause");

                   break;

case 5:

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

                   Change(per,n);                                                                          //修改数据

                   printf("\t");

                   system("pause");

                   break;

                  

case 6:

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

                   n=Input(per,n);

                   break;

       

case 7:

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

                  Query_a_record(per,n);                                                                 //查找记录

                   printf("\t");

                   system("pause");

                   break;

                  

case 0:

                   printf("\n\t\t谢谢使用,再见!\n");                        //结束程序

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

                   system("pause");

                   exit(0);

                   }

}      

}

1 通讯录主菜单结果

2 信息录入

3 通讯信息显示

4 通讯信息保存

五、调试与测试

所谓程序调试是对程序的查错和排错。对此程序我们进行了以步骤:

人工检查,即静态检查。此过程我们对于写好的程序进行了排查,并且进行了注释。

上机调试。通过上机调试发现的错误为动态检查,这时发现了许多错误和警告,我们根据提示逐一改正。

运行程序。这一步骤我们逐一检查每个菜单是否运行正常与正确,在这个过程中我们出现了许多格式不正确,我们细心的进行修改。

总之,在我们对程序进行了细心的调试和测试之后,我们的程序正常运行了,但是其中还是有很多不足的地方。比如我们的修改成绩这一向就是不完善的,要是程序里出现了不同班但学号相同时这个问题就没有解决,在以后我们会进行改善。

六、结语

心得体会:

通过这一周的课程设计,我对一些专业知识和程序设计有了更深的了解,同时也尝试着, 去应用自己的所掌握的知识。本次高级程序课程设计主要是对本学年学习的C程序知识,同时加上基础知识,设计一些课题。

经过几天的奋战,我感受很深。在设计的过程中不可避免的遇到了很多的问题.尤其是在调试过程中,会因为某些原因出不来结果,也会因为个别错误而导致运行不出来,在这个过程中,遇到问题是不可避免的,但是在遇到困难是我们不退缩。在老师和同学的帮助与指导下,我们顺利的完成了本次课程设计,并调试出结果。

在调试结果出来时,我更是无比的兴奋,无比的自豪。总之,通过这次高级程序课程设计,我对自己的知识有了更好的掌握和应用,在以后的学习和生活中受用终身。在以后的学习中我们更多的要投身于实践中,多动手,多动脑,才能更好的把学习学好。

七、参考文献

 [1]袁志祥主编 数据结构(C语言版)例题详解与课程设计指导第二版 中国科技大学出版社 

[2]刘甫迎 刘光会 王蓉主编 程序设计教程(第二版) 北京电子工业出版社2008

[3]郭胜主编  程序设计 清华大学出版社  2002

[4]施燕妹 陈培 陈发吉主编  C#语言程序设计教程 中国水利水电出版社 2001

相关推荐