c语言课程设计总结报告

附表2

C++(或C)语言课程设计总结报告

注:该表格由学生填写,内容采用小四号宋体。

源代码:

/*  学生通讯录管理系统,能够实现对通讯录的内容进行创建、显示、查询、删除以及

     修改等功能  */

# include<stdio.h>

# include<string.h>

# include<conio.h>

# include<ctype.h>

# define N 100

void myprint();

void mycreate(char num[N][12],char name[N][12],char tel[N][15],int *n);

void mydisplay(char num[N][12],char name[N][12],char tel[N][15],int n);

void mysearch(char num[N][12],char name[N][12],char tel[N][15],int n);

void mydelete(char num[N][12],char name[N][12],char tel[N][15],int *n);

void mymodify(char num[N][12],char name[N][12],char tel[N][15],int n);

/* 主函数  */

void main()

{

 char choose,yes_no,num[N][12],name[N][12],tel[N][15];

 int n=0;

 do{

    myprint();

   

    choose=getch();

    switch(choose)

    {

      case '1':mycreate(num,name,tel,&n);

                  break;

      case '2':if(n==0)

                        {

                         printf("\n  无记录,请创建通讯录!\n");

                   break;

                        }

                   mydisplay(num,name,tel,n);

                      break;

      case '3':if(n==0)

                        {

                            printf("\n  无记录,请创建通讯录!\n");

                   break;

                        }

                 mysearch(num,name,tel,n);

                      break;

      case '4':if(n==0)

                        {

                            printf("\n  无记录,请创建通讯录!\n");

                   break;

                        }

                   mydelete(num,name,tel,&n);

                      break;

      case '5':if(n==0)

                        {

                            printf("\n  无记录,请创建通讯录!\n");

                   break;

                        }

                   mymodify(num,name,tel,n);

                      break;

      case '0': break;

      default: printf("\n   %c为非法选项!\n",choose);

   }

    if(choose=='0')

    break;

    printf("\n  要继续选择吗(Y/N)?\n");

    do

       {

         yes_no=getch();

       }

    while(yes_no!='Y' && yes_no!='y' && yes_no!='N' && yes_no!='n');

 }

    while(yes_no=='Y'&& yes_no=='y');

}

/*  定义显示菜单界面的函数 */

void myprint()

{

  printf(" 请输入选项编号(0-5): \n");

  printf(" 1 创建通讯录  \n");

  printf(" 2 显示通讯录  \n");

  printf(" 3 查询通讯录  \n");

  printf(" 4 删除通讯录中的记录  \n");

  printf(" 5 修改通讯录   \n");

  printf(" 0 退出  \n");

}

/*  定义创建通讯录的函数  */

void mycreate(char num[N][12],char name[N][12],char tel[N][15],int *n)

{

  int i=0;

  char tempnum[12],tempname[12],temptel[15];

  printf("\n  请输入第1个记录: \n");

  printf("   学号(用#结束输入):");

 do

 {

  gets(tempnum);

 }

  while(strcmp(tempnum," ")==0);

  printf("  姓名(用#结束输入):");

  gets(tempname);

  printf("  电话号码(用#结束输入):");

  gets(temptel);

 while(tempnum[0]!='#' && tempname[0]!='#' && temptel[0]!='#')

 {

       strcpy(num[i],tempnum);

    strcpy(name[i],tempname);

    strcpy(tel[i],temptel);

    i++;

    printf("\n  请输入第%d个记录:\n",i+1);

    printf("  学号(用#结束输入):");

    do

       {

       gets(tempnum);

       }

   while(strcmp(tempnum,"  ")==0);

   printf("  姓名(用#结束输入):");

   gets(tempname);

   printf("  电话号码(用#结束输入):");

   gets(temptel);

   if(!isdigit(temptel[strlen(temptel)-1]))

          break;

 }

  (*n)=i;

}

/*  定义显示通讯录的函数  */

void mydisplay(char num[N][12],char name[N][12],char tel[N][15],int n)

  int i;

  printf("   学号  姓名  电话号码 \n");

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

  printf("%12s%12s%15s\n",num[i],name[i],tel[i]);

}

/*  定义按学号查询通讯录的函数  */

void mysearch(char num[N][12],char name[N][12],char tel[N][15],int n)

{

  int i;

  char tempnum[12];

  printf("\n   请输入要查询记录的学号:");

  gets(tempnum);

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

  if (strcmp(tempnum,num[i])==0)

  {

  

   printf(" 学号  姓名  电话号码\n");

   printf("%12s%12s%15s\n",num[i],name[i],tel[i]);

  

  }

  else printf("  无此人!\n");

}

/*  定义按学号删除通讯录中记录的函数  */

void mydelete(char num[N][12],char name[N][12],char tel[N][15],int *n)

{

  int i,k;

  char tempnum[12];

  printf("\n  请输入要删除记录的学号:");

  gets(tempnum);

  for(k=0;k<(*n);k++)

  if(strcmp(tempnum, num[k])==0)

  break;

  if(k<(*n))

 {

  for(i=k; i<(*n)-1;i++)

  {

   strcpy(num[i],num[i+1]);

   strcpy(name[i],name[i+1]);

   strcpy(tel[i],tel[i+1]);

  }

  (*n)--;

 }

  else printf(" 无此人!\n");

}

/*   定义修改通讯录的内容的函数  */

void mymodify(char num[N][12],char name[N][12],char tel[N][15],int n)

{

  int i,find;

  char c,tempnum[12], tempname[12], temptel[15];

  printf("\n   请输入要修改记录的学号:");

  gets(tempnum);

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

  if(strcmp(tempnum,num[i])==0)

  {

   find=i; break;}

   if(i==n)

   printf("无此人!\n");

  else

  {

         do

              {

              printf("\n  请输入正确的学号:");

              do

              {

                gets(tempnum);

              }

              while(strcmp(tempnum," ")==0);

              printf("     请输入正确的学号:");

              gets(tempname);

              printf("     请输入正确的电话号码:");

              gets(temptel);

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

              if((strcmp(tempnum,num[i])==0) && (i!=find))

              {

               printf("   学号重复,要重新输入码(Y/N)?");

               do

               {

                c=getche();

               }

                while(c!='Y' && c!='y' && c!='N' && c!='n');

                           

                break;

              }

              if(i==n)

              {

                strcpy(num[find],tempnum);

                  strcpy(name[find],tempname);

                  strcpy(tel[find],temptel);

                break;

              }

       }

              while(c=='y' && c=='Y');

  }

}

 

第二篇:C语言课程设计报告

  

(一)          设计目的…………………………………3

(二)          设计内容…………………………………3

(三)          总体设计…………………………………4

(四)          详细设计…………………………………5-10

(五)          调试与测试………………………………11

(六)          设计总结…………………………………12

C语言课程设计》

通讯录管理系统

一、课程设计目的

1、  通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。

2、  通过课程设计,学会设计数据结构。其中包括对结构数组、数据文件等知识的运用。

3、  通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。

4、  通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。

5、  通过课程设计,开发一个中小型系统,掌握系统研发全过程。

6、  通话课程设计,培养分析问题、解决实际问题的能力。

二、课程设计内容及要求:

设计一个实用的通讯录管理系统,能以简便高效的方式对通讯录进行管理和检索,具体要示:

(1)               录入:联系人信息包括:姓名,地址,电话。以结构数组或数据文件的形式存放通讯录信息。

(2)               更新:能插入、修改、删除通讯录信息。

(3)               浏览:按录入先后为序进行通讯录信息浏览。

(4)               查询:能实现指定联系人信息查询或指定电话号码查询功能。

(5)               系统以菜单方式工作,界面友好,易于操作,容错性好。

三、总体设计

1、模块化设计

为实现系统功能,本程序主要分为六个模块。它们分别为:录入联系人信息、删除联系人信息、查询联系人信息、增加联系人信息、浏览所以联系人信息、退出该程序。这六个函数再通过主函数调用分别得以实现。

主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。

其它各个函数的功能分别如下:

Enter函数用于录入通讯录中学生的信息;

Delet函数用于对通讯录中指定信息的删除;

Search函数用于对通讯录中指定信息的查询;

Add函数用于在通讯录中插入信息;

Modify函数用于对联系人进行修改;

Load函数用于对通讯录中所有信息进行浏览;

Quit函数用于退出系统。

2、模块调用图

                

 

四、详细设计

1)数据结构设计

本程序中,运用了多种数据结构。首先对于通讯录中各项详细信息的记录用了结构体数组的形式,然后又运用switch语句来实现对分函数调用的开关功能,在文件的保存过程当中,还运用了数据文件的方式,每一次从终端输入的数据都以数据文件的形式保存到了磁盘,也可以从磁盘中讲文件内容读入内存中。

结构体及其成员如下:

struct people

      {

       char name[10];

       char num[20];

       char addr[50];

   }pe[100];

2)模块接口设计

     本程序执行的入口是main函数,然后是菜单函数,在菜单函数中对选项进行选择以后,接下来在do-while语句中再套用switch语句实现对各个函数的调用。被调用的函数都是没有形参的,但是通过对数据文件的使用,可以使得每一次的函数调用都能够讲忘记保存到磁盘中,而不需要返回值。最后,再从main函数中结束整个程序的运行。

      其中涉及到被调用的函数有:

     void enter();                         //录入函数

     void delet();                         //删出函数

     void add();                           //增加函数

     void modify();                       //修改函数

        void search();                        //查找函数

     void load();                         //浏览函数

        void quit();                         //退出函数

3)流程图

enter函数:

 

                                                  N

 

                                        Y

 

此函数的主要功能是将联系人添加到通讯录中;首先要确定将要输入的联系人的数量n,然后再根据j<n这一条件来循环输入联系人的信息,最好将联系人信息保存到文件中去,就完成了整个过程。

delet函数:

 

                                                   N

 

                                        Y

 

                         N

 

                                        Y

 

                                                     Y

                                        N

 

此函数要实现的功能是将选择的已有的联系人信息删除;首先用一个P<i为条件将已有信息全部显示出来,再由用户选择的联系人序号来确定要删除的联系人,当用户输入“y”、“Y”的时候就进行删除操作,否则就结束删除操作;在删除完一个联系人信息以后,如果选择继续删除,则又调用删除函数本身以实现循环删除功能。

add函数:

  

 

                          Y

                                       N

 

此函数的功能是在原有联系人信息的基础上添加新的联系人信息;首先要讲文件指针指向文件末尾没有联系人的位置,然后在输入新的联系人信息,用标志变量flag的值来控制

循环添加新联系人信息,当添加完成后,保存信息并关闭文件,再返回主函数。

modify函数:

 

                                               Y                      N

 

                                  Y                    N

 

                                                Y                   N

 

此函数的功能主要是给用户修改联系人信息,其中可以信息进行全部信息的修改和部分信息的修改;当输入要修改的联系人姓名时,系统将在已有联系人中查找匹配的姓名,要是没找到匹配姓名就退出修改程序,要是找到匹配项就进入修改选项,按提示执行就能完成对信息的修改。

Search函数


                                    Y                 N

 

                       N                                         N

 

                               Y                           Y

 

                   N                    Y       Y                    N

                 N                                                    

 

这一函数的功能主要是查找联系人信息的功能;其中有通过姓名查找和通过电话查找两种方式;要的按姓名查找,系统会在已有信息中查找匹配信息,要是找到就显示出来,要是在原有信息中不存在,就显示失败提示;同样,当按电话查找时也是先由系统查找匹配信息,要是未找到就显示查找失败,找到就将匹配信息显示出来;查询完成后还需要将信息保存到文件中去,再关闭文件完成查找工作,最好返回主函数。

五、调试与测试

(1)       调试过程中的主要问题

由于本程序是分模块设计的,所以运行时选择完任务并且执行完任务后,又会继续回到用户选择界面,供用户继续选择任务并执行任务,整个程序以文件形式读写,所以每次都可对输入的数据进行保存。对于本程序的调试运行,总体上情况良好。但是,其中也出现了一些小问题:

在这次程序调试中我还发现了return; 与break;的不同作用,其中break是只能用来结束它本身所在的本层循环,而return则是结束调用函数,让程序返回到主函数;还有用getchar()来接收输入字符时的回车符及让系统暂停,用system(“cls”)来清理屏幕显示,用system("pause")来让系统暂停等。

六、课程设计总结:

我想说课程设计真是一件很累人很伤脑筋的事情,在一周的时间里,我们每天几乎都要面对着电脑十个小时以上,上课时去机房写程序,回到宿舍还要继续奋斗;要是只是在电脑面前坐着也没有什么难过的,但是在电脑面前还要想着怎么去写代码,怎么去安排程序结构,怎么去实现想要的程序功能等等一系列的事情;特别是在调试程序的时候更是让人头痛,辛辛苦苦的写好了函数,等到调试运行就出现一堆错误,真的拿它没办法呀;有的时候还真是后悔当初自己选择了这样一个费精力的专业,不过还好有书本的基础知识、发达的网络通信、知识渊博的老师以及热心的同学的帮助,才使我能将那些问题一一解决!

虽然课程设计很苦很累,有时候还很令人抓狂,不过现在回想起来它给我的并不只是痛苦的回忆,它不仅让拉近了我和同学间的距离,而且对我们学习计算机语言还是很有意义的。

在还没有进行课程设计实训之前,我对C语言知识的掌握真的只能说是很肤浅,我只知道分开来使用那些语句和语法,对他们根本没有整体感念,所以在学习C语言时经常会感觉很盲目,甚至不知道自己学这些东西是为了什么。通过一周的课程设计,我对C语言有了更深入的了解,同时也建立起了一个对C语言的整体架构和编程思想;我还学到了很多课本上没有学到的东西,也了解了很多以前不了解的计算机语言方面的知识;他扩充了我的知识,也开拓了我的视野,让我们了解了我们学习计算机语言的目的和将来发展的方向。

通过这次的课程设计,让我明确了学习C语言的目的和重要性,在以后的时间里,我会更加努力的把C语言学好,为以后学习更高级的计算机语言打下好的基础,并通过与老师同学的交流来不断的提升自己的编程和开发能力!

相关推荐