c语言通讯录课程设计报告.doc

时间:2024.4.20

引言

当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。

尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理而设计的。

通讯录管理系统的建立是可以有效节省同学、朋友、客户间日常交流的投资(指时间、精力),其设计理念很简单,变传统的纸张与笔录方式为计算机自动化进行通讯录信息管理系统,既省时间又提高效率。因此在系统构建时,只要我们本着丰富通讯录的信息资源,为用户提供最为方便的快捷的信息阅览途径和管理手段,去吸引用户,那么通讯录管理系统是完全可行的。

通讯录软件设计的灵感来源于生活和工作中的需要。如今,随着社会的飞速发展,信息时代改变着人们的各种生活方式。人们的联系信息,联系方式变得复杂而多样化,以前所使用的各种电话簿、通讯本等小册子由于查找不方便、功能单一等缺陷已经无法胜任它的“时代使命”,而现在各种手机,商务通内设的电话簿尽管携带方便却又挥之不去其“记录量少,界面小,浏览不方便”的缺点。工作中看到有些人巧妙地利用excell或者word制表格来建立通讯录,每逢用时再打开,可是查找极其不便,维护起来也麻烦。

通讯录系统设计,它的内容对于计算机来说是至关重要的,通讯录系统为计算机的使用者提供充足的信息和快捷的查询手段。用c语言构建的通讯录系统设计,通过课上学到的和查阅一些文献的一些关于结构体[1]、数组、指针、函数以及循环函数的运用[1]和字符串的处理[2]等基本知识可以初步的实现通讯录的输入、显示、查找、删除、快速查询等通讯录简单而用的一些实用的功能,给人们带来更多的方便。本管理系统设计合理、操作方便、运行稳定、功能完备,具有较高的实用价值。

本课程设计主要运用C语言中的结构体、数组、链表、等数据结构,设计一个简单的管理系统应用程序。本程序设计出了通讯录管理系统的基本功能,并设计了简单的界面,主要考察对自定义函数的熟悉程度,使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。通过完成本课题进一步熟悉C语言基本知识,并掌握数据结构的一些基本算法思想,进一步熟悉指针的用法,数组的建立运用和函数调用,加深对数据结构的理解,提高算法设计的能力,锻炼编程的能力。用C语言编程的通讯录管理系统,要求实现通讯录系统中,添加新记录、删除记录、显示记录信息、按名字查找信息和退出系统等功能。

①录入人员的编号、姓名、个人邮箱、地址、联系电话。

②显示所有人员的信息。

③通过输入姓名查找人员信息。

④通过输入姓名查找到要删除的人员信息,然后可以进行删除,回显当前通讯录信息。 

⑤通过输入姓名查找到要修改的人员信息,然后依次进行信息修改。

⑥添加人员信息。

二 系统总体设计

本系统设计的函数是由一个主函数几个子函数组成的。首先构思大局编出一个主函数,然后根据要实现的功能逐步细分设计,分别解决输入、显示、查找、删除、修改,退出功能的子函数编程中遇到的问题。首先通过结构体的定义,确定通讯录的项目和大小。首先通过输入函数添加信息,然后再逐步编写和验证其它功能。显示函数的设计利用C语言的循环功能依次输出信息。查找是用一个字符串比较得出两个相同的字符串的方法找出用户要查找的人。删除函数的设计是通过指定位置以后的数组下标减一实现删除目的的,for循环和 while循环在这此设计中也起了很大的作用。

1概要设计

系统功能模块图如图1所示:

                         

                                                                                                                                                                                                                                                         

2 系统流程图                                                                                        

                                                                                       

三 详细设计

1 菜单函数

菜单函数首先标出欢迎使用通讯录管理系,然后给出用户可选择的项目,用户可以通过选择该项前的代码来实现想要实现的功能,其流程图如图3所示:

                                                                                                                                          

                                                                                                                      

 

2 输入通讯录                                        

将结构体数组分成几个数组分别对每个数组赋值,用for循环对不同地址的数组分别赋值。其流程图如图4所示:

 

3 显示通讯录

显示通讯录通过循环函数将全部的通讯录信息以此显示出来,其流程图如图5所示:                                                                                               

4 find函数

find函数通过输入姓名与原通讯录中存储的姓名,两字符串的比较,找到与输入姓名相同的姓名的位置,其流程图如图6所示:

 

5 删除通讯录

删除通讯录通过数组中该位置之后的数据存放位置向前移一位来实现删除功能,其流程图如图7所示:

6 查找通讯录

查找通讯录通过find函数找到所查通讯录的位置,再将该位置的通讯录信息显示出来,其流程图如图8所示:

                                                                                                 

 

7 修改通讯录

修改通讯录通过find函数找到所要修改通讯录位置,显示出信息,确认修改后,即可逐项修改,其流程图如图9所示:                                                   

 

8 添加通讯录

在存储未满的情况下,用find函数找到要添加的位置后即可逐项添加通讯录信息,其流程图如图10所示:                                                                          

 

9 退出通讯录

在使用完通讯录后,按6键便会退出系统,其流程图如图11所示:                                        

                                                                                          

                                                                                        

10测试结果

进入系统后,系统会出现图12所示菜单

 

在主菜单中输入3后,输入要找的姓名。在系统没有要找信息时,系统会给出提示,确认用户是否继续查找,如图13所示:

 

在确认修改后,按系统提示依次修改便可修改

在确认修改并输入修改后信息以后,系统便能按用户意愿修改的通讯录信息,如图14所示:

 

在主菜单中输入1后输入要删除的姓名,再按1键确定,系统便自动删除要删除的通讯录信息,如图15所示:

 

在主菜单中按6键,便可退出系统,如图16所示:

 


四 总结

紧紧张张的一周实习即将过去,从刚开始的不只如何下手到最后看到自己的程序按自己的想法运行,心里时不时的有一种喜悦。通过这一周的实习,我认识到书上和老师教的内容是有限的,要想掌握更多的知识我们必须多动脑,多思考,不断地靠自己去学习,同时我们还应向他人请教,从而了解更多自己不知道的知识。回头看来,编写这个程序并不像原来想像的那么难,我们要相信自己,无论做什么事,只要我们仔细的思考了,认真的去做了,我们就一定能做好。

通过这周的编程我发现了自己的一些不足,在编写时经常犯一些低级错误,由于自己的马虎而浪费了不少时间。在不知如何进行的时候有一种不自信,总想别人正在做什么,这些不足既然被发现就得在以后的做事中注意,争取改掉。

经过一周的努力我掌握了一些基本的C语言进行程序设计的技巧,更深的理解和运用结构化程序设计的思想和方法,掌握开发一个小型实用系统的基本方法,同时学会了一些调试一个较长程序的基本方法,提高了书写程序设计开发文档的能力(书写课程设计报告)。这一周的实践让我受益匪浅,在此我要感谢孜孜不倦指导我们的老师,感谢在我困惑时给我帮助的同学,感谢学校给我们一个这样动手动脑的机会,使我们在理论与实践相结合方面又得到了一次很好的锻炼,让我们得到很大的收获。

参考文献

[1]谭浩强,张基温.C语言程序设计教程[M].第3版.高等教育出版社,2006

[2]刘振安.C语言程序设计[M].机械工业出版社,2007

附录1

#include<stdio.h>

#include<string.h>

#define N   80

/****************************************定义通讯录************************************/

 typedef   struct    

  {  

char num[N];

        char   name[20]; 

char   tele[15];   

char   add[20];

char   emal[15];

 }STUDENT;STUDENT  stu[N] ;

int menu();

int shuru(STUDENT  stu[N]);

void xianshi(STUDENT  stu[],int n);

int shanchu(STUDENT  stu[],int n);

void chazhao(STUDENT  stu[],int n);

void xiugai(STUDENT  stu[],int n);

int tianjia(STUDENT  stu[],int n);

int tuichu();

/***************************主函数****************************************/

int main()

{int   length,m=0;

       while(m>=0)

{switch (menu())

{case 0:length=shuru(stu);break;

case 1: xianshi(stu,length);break;

case 2:length=shanchu(stu,length);break;

case 3:chazhao(stu,length);break;

case 4:xiugai(stu,length);break;

case 5:length=tianjia(stu,length);break;

case 6:m=tuichu();break;

default:printf("输入错误,请重新输入\n");       }}

return 0;}

/***********************************主菜单**********************************/

int menu()

{int m;

printf("**************************欢迎使用通讯录管理系统***********************\n");

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

printf("\t\t\t   0.输入通讯录\n");

printf("\t\t\t   1.显示通讯录\n");

printf("\t\t\t   2.删除通讯录\n");

printf("\t\t\t   3.查找通讯录\n");

printf("\t\t\t   4.修改通讯录\n");

printf("\t\t\t   5.添加通讯录\n");

printf("\t\t\t   6.退出通讯录\n");

do {printf("\t\t\t 请输入选项0-6\n");

scanf("%d",&m);}

while(m<0||m>6);

return m;}

/******************************输入通讯录*******************************/

  int shuru(STUDENT  stu[N])  

  {  

        int   i,n;     

        printf("\n请输入要加入通讯录的数目 \n");   

        scanf("%d",&n);     

        printf("其输入信息 \n");     

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

        {    printf("请输入编号:\n");

              scanf("%s",stu[i].num);

                       printf("\n请输入姓名\n:");

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

                             printf(" \n请输入电话:\n");

                       scanf("%s",stu[i].tele);

                             printf(" \n请输入地址:\n");

                             scanf("%s",stu[i].add);

                             printf(" \n请输入emal:\n");

                             scanf("%s",stu[i].emal);

              printf("编号:%s\n姓名:%s\n电话:%s\n地址:%s\nemal:%s\n",stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal);

}

       

        return   n;  }  

/******************************显示通讯录********************************/

void xianshi(STUDENT  stu[],int n)

{int i;

for(i=0;i<=n-1

;i++)

{

printf("编号:%s\n姓名:%s\n电话:%s\n地址:%s\nemal:%s\n",stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal);

}

}

 /******************************查找函数********************************/

 int   find(STUDENT  stu[],int n)  

  {       int   i;

char   s[20];    

        printf("请输入的姓名\n"); 

        scanf("%s",s);  

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

         

              if(strcmp(s,stu[i].name)==0)

                              return i;

                       return i;       

  } 

     

/*******************************删除通讯录********************************/

int shanchu(STUDENT  stu[],int n)

{   int i,j,ch;

        i=find(stu,n);

if(i>n-1)   

{printf("没有找到要删除的记录,是否重新输入1/0\n");

scanf("%d",&ch);

if(ch==1)n=shanchu(stu,n);}

              else  

        {  

              printf("编号:%s\n姓名:%s\n电话:%s\n地址:%s\nemal:%s\n",stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal);

     

              printf("是否确定要删除:%d是%2d否\n",1,0);}      

              scanf("%d",&ch);    

              if(ch==1)      

              {  

    for(j=i+1;j<N;j++)     

    {  

          strcpy(stu[j-1].name,stu[j].name);   

          strcpy(stu[j-1].tele,stu[j].tele);

                strcpy(stu[j-1]. add,stu[j]. add);

                strcpy(stu[j-1].emal,stu[j].emal);

         

              }

       n--; 

 printf("删除成功\n");

        }  return n;

       

  }  

/*******************************查找通讯录********************************/

void chazhao(STUDENT  stu[],int n)

{ int i,ch;

        i=find(stu,n);

        if(i>n-1)   

              {printf("没有找到要查找的记录,是否重新输入1/0\n");

scanf("%d",&ch);

if(ch==1)chazhao(stu,n);}  

        else  

         

              printf("编号:%s\n姓名:%s\n电话:%s\n地址:%s\nemal:%s\n",stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal);}

/*******************************修改通讯录********************************/

void xiugai(STUDENT  stu[],int n)

{ int i,ch;

        i=find(stu,n);

        if(i>n-1)   

              {printf("没有找到要修改的记录,是否重新输入1/0\n");

scanf("%d",&ch);

if(ch==1)xiugai(stu,n);}      

        else  

        {  

              printf("编号:%s\n姓名:%s\n电话:%s\n地址:%s\nemal:%s\n",stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal);

     

              printf("是否确定要修改:%d是%2d否\n",1,0);}      

              scanf("%d",&ch);    

              if(ch==1)

                       { printf("编号:\n");

              scanf("%s",stu[i].num);

                       printf("\n姓名\n:");

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

                             printf(" \n电话:\n");

                       scanf("%s",stu[i].tele);

                             printf(" \n地址:\n");

                             scanf("%s",stu[i].add);

                             printf(" \nnemal:\n");

                             scanf("%s",stu[i].emal);

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

/*******************************添加通讯录********************************/

 int   tianjia(STUDENT  stu[],int n) 

  {   int i,j;

 if(N<=n+1)

        printf("储存已满");

 else

     { 

        printf("请输入要插入的位置\n");

              scanf("%d",&i);     

        for(j=n-1;j>=i;j--)        

        {  

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

          strcpy(stu[j+1].tele,stu[j].tele);

                strcpy(stu[j+1]. add,stu[j]. add);

                strcpy(stu[j+1].emal,stu[j].emal);

        }  

        printf("其输入要插入的信息 \n");        

          printf("编号:\n");

              scanf("%s",stu[i].num);

                       printf("\n请输入姓名:\n");

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

                             printf(" \n请输入电话:\n");

                       scanf("%s",stu[i].tele);

                             printf(" \n请输入地址:\n");

                             scanf("%s",stu[i].add);

                             printf(" \n请输入emal:\n");

                             scanf("%s",stu[i].emal); 

                             printf("添加成功");

                             n++;    }   

        return   n;   

  }

/*******************************退出通讯录********************************/

 int tuichu()

{

int n;

n=-1;

printf("**********************************谢谢使用**************************************");

return n;}

                     附 录 2

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

typedef struct{

 char num[6];

 char name[10];

 char unit[20];

 char phone[13];

 char addr[30];

}datatype;

typedef struct node{

 datatype data;

 struct node * next;

}listnode;

typedef listnode * linklist;

linklist head;

listnode *p;

int menu_select( );

linklist createlist(void);

void insertnode(linklist head,listnode *p);

listnode *listfind(linklist head);

void delnode(linklist head);

void printlist(linklist head);

void main()

{

 for( ; ; ){

  switch(menu_select() )

  {

  case 1:

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

   printf(" ************** 通讯录链表的建立 ***************\n");

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

   head=createlist();

   break;

  case 2:

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

   printf(" ************** 通讯录信息添加 *****************\n");

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

   printf(" ** 编号(4) 姓名(8) 单位(20) 电话(11) 地址(30)**\n");

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

   p=(listnode *)malloc(sizeof(listnode));

   scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.unit,p->data.phone,p->data.addr);

   insertnode(head,p);

   break;

  case 3:

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

   printf(" ******* 通讯录信息查询 *******\n");

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

   p=listfind(head);

   if(p!=NULL){

   printf(" ** 编号  姓名 单位 电话 地址**\n");

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

   printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.unit,p->data.phone,p->data.addr);

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

   }

   else

    printf("没有你要找的人 ! \n");

   break;

   case 4:

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

             printf(" **********通讯信息的删除***********\n");

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

    delnode(head);

    break;

  case 5:

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

             printf(" **********通讯录链表的输出*********\n");

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

    printlist(head);

    break;

  case 0:

   printf("\t 谢谢您的使用! \n");

   return;

  }

 }

}

int menu_select()

{

 int sn;

 printf("   \n");

 printf("  \n");

 printf(" \n");

 printf("                               通讯录管理系统   \n");

 printf(" \n");

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

 printf("                           1.通讯录链表的建立\n");

 printf("                           2.通讯者结点的插入\n");

 printf("                           3.通讯录链表的查询\n");

 printf("                           4.通讯者结点的删除\n");

 printf("                           5.通讯录链表的输出\n");

 printf("                           0.退出通讯录管理系统\n");

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

 printf( "                            请选择操作0-5  \n\n");

 for(; ;)

 {

  scanf("%d",&sn);

  if(sn<0||sn>5)

   printf("\t输入错误\n");

  else

   break;

 }

 return sn;

}

linklist createlist(void)

{

 linklist head=(listnode *)malloc(sizeof(listnode));

    listnode *p,*rear;

    int flag=1;

    rear=head;

    while(flag==1)

 {

  p=(listnode *)malloc(sizeof(listnode));

        printf(" 编号(4) 姓名(8)  单位(20) 电话(11) 地址(31) \n");

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

        scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.unit,p->data.phone,p->data.addr);

        rear->next=p;

        rear=p;

        printf(" 继续建表吗? (1.是/0.不):");

        scanf("%d",&flag);

 

 }

 if(flag==1)

   printf("创建成功!\n");

    rear->next=NULL;

    return head;

}

void insertnode(linklist head,listnode *p)

{

 listnode *p1,*p2;

 p1=head;

 p2=p1->next;

 while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0)

 {

  p1=p2;

  p2=p2->next;

 }

 p1->next=p;

 p->next=p2;

 printf("插入成功!\n");

}

listnode * listfind(linklist head)

{

 listnode * p;

 char num[6];

 char name[10];

 int xz;

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

 printf(" 1.编号查询\n");

 printf(" 2.姓名查询\n");

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

 printf("请选择: \n");

 p=head->next;

 scanf("%d",&xz);

 if (xz==1){

  printf(" 请输入要查找的编号: ");

     scanf("%s",num);

     while(p && strcmp(p->data.num,num)<0)

  p=p->next;

     if (p==NULL || strcmp(p->data.num,num)>0)

      p=NULL;

 }

 else

     if(xz=2){

      printf("请输入要查询者的姓名: ");

      scanf("%s",name);

      while(p && strcmp(p->data.name,name)!=0)

       p=p->next;

     }

 return p;

}

void delnode(linklist head)

   {

    int jx;

    listnode *p,*q;

    p=listfind(head);

    if(p==NULL){

     printf("没有要删除的通讯者!:\n");

     return;

    }

    printf ("真的要删除该结点吗?(1.是/0.不):");

    scanf("%d",&jx);

    if (jx==1){

     q=head;

     while(q!=NULL && q->next!=p)

      q=q->next;

     q->next=p->next;

     free(p);

     printf("通讯者已被删除!\n");

    }

   }

void printlist(linklist head)

{

 listnode * p;

    p=head->next;

    printf(" 编号  姓名  单位  电话  地址\n");

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

    while(p!=NULL)

 {

   printf("   %s,   %s,   %s,   %s,   %s\n",p->data.num,p->data.name,p->data.unit,p->data.phone,p->data.addr);

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

   p=p->next;

 }

}

更多相关推荐:
C语言课程设计报告(通讯录)

设计说明书通讯录系统起止日期20xx年01月03日至20xx年01月08日学班学成生姓名级号绩XXX指导教师签字计算机与通信学院20xx年01月08日一课题任务设计一个通讯录管理系统课题的主要任务是1对通讯录信...

C语言课程设计报告通讯录

C语言程序设计课程设计报告书题目通讯录程序设计系别计算机工程系专业计算机网络设计班级网12姓名胡玉婷学号10503101215指导教师赵耀军杨新爱二一一年六月七日1一课程设计论文的内容编写学生通讯录程序包括以下...

C语言通讯录课程设计报告

高级语言课程设计题目通讯录设计班级软件学生学号20xx31000511学生姓名指导老师提交时间成绩20年4月15日1系统分析11问题描述设计一个通讯录程序该程序具有以下功能用户登录输入用户名和密码密码正确才允许...

C语言课程设计报告—手机通讯录管理系统

C程序课程设计报告手机通讯录管理系统姓名谢骏学院珠宝学院学号20xx1002649班级141082一课程设计目的和内容概述1目的加深对C语言课程所学知识的理解进一步巩固C语言编程方法学会编制结构清晰风格良好数据...

C语言通讯录课程设计报告

C语言课程设计通讯录管理系统C语言课程设计C语言课程设计通讯录管理系统目录摘要3一课程设计目的4二课程设计内容4三总体设计4四详细设计51数据结构设计52模块接口设计63流程图7五调试与测试91调试过程中的主要...

C语言课程设计报告—手机通讯录管理系统

目录摘要2第一章绪论311课程设计目的和内容概述312题目手机通讯录管理系统3第二章程序分析421总体设计422详细设计423总流程图4第三章模块介绍和总体实现731构建结构体写入文件732构造函数与模块833...

c语言 课程设计报告(通讯录)

数据结构课程设计通讯录管理系统中南大学信息科学与工程学院课程设计报告设计名称数据结构课程设计通讯录管理系统系院信息科学与工程学院设计时间20xx年6月27日至7月1日设计地点综合实验楼四楼指导老师漆华妹132数...

C语言课程设计报告—通讯录管理系统_

C语言课程设计名称通信录管理系统班级姓名闵德顺学号指导老师谷老师1前言课程设计目的C语言编程实践是学习C语言的一个重要环节为提高学生的程序设计能力通过课堂和上机实践使学生的程序设计能力有一个上升的台阶通过前四单...

学生通讯录管理系统(C语言课程设计实验报告)

C语言课程设计报告刘显安C语言课程设计姓名刘显学号09041131班级090411专业计算机科学与技术设计题目学生通讯录管理系统指导教师宋文琳提交时间20xx年9月4日课程题目学生通讯录管理系统要求学生通讯录信...

C语言程序设计报告书_通讯录

101040140docJIANGXIAGRICULTURALUNIVERSITYJAVA课程设计报告题目通讯录学院软件学院姓名学号20xx20xx专业年级指导教师二0年月1101040140doc一实践的目的...

C语言程序设计 通讯录程序

目录课程设计任务书错误未定义书签目录1一目的2二基本情况2三时间安排3四设计和调试过程规范化要求3五设计内容和设计要求4六考核方式5一通讯录的主要功能6一问题描述6二功能要求6三算法提示6四测试数据7二课题的主...

学生通讯录管理系统(C语言课程设计实验报告)1

C语言课程设计报告刘显安C语言课程设计姓名刘显安学号09041131班级090411专业计算机科学与技术学院信息工程学院设计题目学生通讯录管理系统指导教师宋文琳提交时间20xx年9月4日课程题目学生通讯录管理系...

c语言通讯录课程设计报告(29篇)