C语言课程设计实验报告(模板)

西安科技大学

C语言课程设计报告

题目: 学生成绩管理系统

班级: 测控技术与仪器1102班 学号:

姓名:

20xx年6月

C语言课程设计实验报告

-------------------------------------------------------------------------------------------

C语言课程设计说明书

一、课程设计的目的和要求

1.熟练掌握模块化程序设计的方法和过程。

2.熟练掌握文件和指针的使用方法。

3.熟练掌握链表的使用方法。

4.培养解决综合性实际问题的能力。

二、课程设计任务

1.基本要求

设计一个学生成绩管理系统,能够实现以下功能:

(1) 系统以菜单(字符界面菜单即可)方式工作;

(2) 学生信息录入功能(学生信息要求用文件保存);

(3) 学生信息浏览功能;

(4) 学生信息查询功能(至少一种查询方式,如:按学号、按姓名等);

(5) 学生信息删除功能;

(6) 学生信息修改功能;

(7) 学生成绩总分统计功能;

(8) 学生成绩总分排序功能。

2.创新要求

在达到基本要求的基础上,可以进行创新设计,例如对菜单进行美化。

3.信息描述

学生信息包括学号、姓名、性别、若干门课程(课程名可以自定义,至少3门)、出生年月等。

4.功能描述

(1) 录入学生信息并保存;

(2) 显示所有学生信息(以一定的格式);

(3) 查询学生信息(以一种或多种方式);

(4) 修改学生信息并保存;

(5) 删除学生信息。

三、课程设计要求:查阅资料,完成程序设计,提交一份课程设计报告。

四、时间安排:2周

- 1 -

C语言课程设计实验报告

-------------------------------------------------------------------------------------------

题目 学生成绩管理系统

一、设计目的

二、总体设计(程序设计组成框图、程序流程图)

三、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等))

四、调试与测试(调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施)

五、执行结果和源程序清单(程序清单中应有足够的注释)

六、总结

- 2 -

 

第二篇:C语言课程设计实验报告模板

《程序设计基础》

课程设计报告

课程设计题目

通讯录管理系统

           

指导教师:____李    萍____

班    级:__   0903班_ _ __

学生姓名:2009100333_ 闫  晓

2009100334  皇  倩

2009100335  翟少平

2009100336  谢成龙

2009100337  姚  琳

           

    完成日期: 20##年9月16日  

   

运城学院计算机科学与技术系

目录

一、课程设计目的. 3

二、课程设计内容. 3

三、总体设计. 4

四、详细设计. 4

五、调试与测试. 11


《C语言课程设计》

通讯录管理系统

一、课程设计目的

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

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

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

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

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

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

二、课程设计内容

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

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

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

(3)            浏览:按姓名为序进行通讯录信息浏览。

(4)            查询:能实现指定联系人信息查询或指定课题组人员查询功能。

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

三、总体设计

模块化设计

为实现系统功能,本程序主要分为六个模块。它们分别为:输入一个学生信息、删除一个学生信息、查询一个学生信息、插入一个学生信息、输出所有的学生信息、保存并且退出该程序。这六个函数再通过主函数调用分别得以实现。

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

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

creat函数用于对通讯录中的数据以文件的方式

进行读入及函数用于录入通讯录中学生的信息;

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

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

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

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

exit函数用于保存通讯录信息并且退出。

四、详细设计

(1)数据结构设计

本程序中,运用了多种数据结构。首先对于学生通讯录中各项详细信息的记录用了结构数组的形式,然后又运用链表动态地分配内存单元,在creat函数中,把保存在数组中的值再赋值给其中的一个结点,通过指针的后移,把多个数据连成一个链,形成一个链表。在这过程当中,还运用了数据文件的方式,每一次从终端输入的数据都以数据文件的形式保存到了磁盘。

对于主要数据结构的举例如下:

结构数组:

 struct person

     { char name[10];

      char addr[30];

      char tel[15];

    };

(2)模块接口设计

     由于本程序中存在很多指针,所以这个程序中被调用的函数都是空类型的,但这并没有影响最终结果的输出,反而使得函数调用的过程更加简便。

     本程序执行的入口是main函数,然后在main函数中首先调用了creat函数,这就实现了对通讯录中的数据以文件的方式进行读入。接下来在while语句中再套用switch语句实现对各个函数的调用。最后,再从main函数中结束整个程序的运行。

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

void creat33();

void output34();

void search34();

void append36();

void modify35();

void delete37();

(3)流程图

creat函数:

void creat33()

{

 struct person one;

    long s1;

    printf("\n请输入通讯簿名:");

    scanf("%s",filename);

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

    {

  printf("\n不能建立通讯簿!");

  exit();

    }

    fprintf(fp,"%-20s%-30s%-50s\n","姓名","电话号码","住址");

    printf("\n请输入姓名、电话号码及住址(以0结束)\n");

    scanf("%s",one.name);

    while(strcmp(one.name,"0"))

    {

  scanf("%s%s",one.tel,one.addr);

  fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);

  scanf("%s",one.name);

    }

    fclose(fp);

}

output函数:

void output34()

{

 struct person one;

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

    {

  printf("\n不能打开通讯簿!");

  exit();

    }

    printf("\n\n%20s\n","通 讯 簿");

    while(!feof(fp))

    {

  fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);

  printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);

    }

    fclose(fp);

}

append 函数:

void append36()

{

 struct person one;

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

    {

  printf("\n不能打开通讯簿!");

  exit();

    }

    printf("\n请输入添加的姓名、电话号码及住址\n");

    scanf("%s%s%s",one.name,one.tel,one.addr);

    fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);

    fclose(fp);

}

search函数:

void search34()

 int k=0;

    char namekey[8];

    struct person one;

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

    scanf("%s",namekey);

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

    { 

  printf("\n不能打开通讯簿!");

  exit();

    }

    while(!feof(fp))

    { 

  fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);

  if(!strcmp(namekey,one.name))

  {

   printf("\n\n已查到,记录为:");

   printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);

   k=1;

        }

    }

    if(!k) 

  printf("\n\n对不起,通讯簿中没有此人的记录。");

fclose(fp);

modify函数

void modify35()

    int m,k=0;

    long offset;

    char namekey[8];

    struct person one;

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

    scanf("%s",namekey);

    if((fp=fopen(filename,"r+"))==NULL)

    { 

  printf("\n不能打开通讯簿!");

  exit();

    }

    while(!feof(fp))

    { 

  offset=ftell(fp);

  fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);

  if(!strcmp(namekey,one.name))

  {

   k=1;

   break; 

  }

    }

    if(k)

 { 

  printf("\n已查到,记录为:");

        printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);

        printf("\n请输入新姓名、电话号码及住址:");

  scanf("%s%s%s",one.name,one.tel,one.addr);

  fseek(fp,offset,SEEK_SET);

  printf("%ld",ftell(fp));

  fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);

 }

    else

  printf("\n对不起,通讯簿中没有此人的记录。");

    fclose(fp);

}

delete函数

void delete37()

    int m,k=0,flag;

    long offset1,offset2;

    char namekey[8], valid[4];

    struct person one;

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

    scanf("%s",namekey);

    if((fp=fopen(filename,"r+"))==NULL)

    { 

  printf("\n不能打开通讯簿!");

  exit();

    }

    while(!feof(fp))

    { 

  offset1=ftell(fp);

  fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);

  if(!strcmp(namekey,one.name))

  {  

   k=1;

   break;

  }

    }

    if(k)

 {

  printf("\n已查到,记录为");

        printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);

        printf("\n确实要删除,按1;不删除,按0:");

        scanf("%d",&m);

        if(m)

  {  

   fseek(fp,offset1,SEEK_SET);

   fprintf(fp,"%-10s%-20s%-50s\n","","","");

  }

 }

    else

  printf("\n对不起,通讯簿中没有此人的记录。");

    fclose(fp);

}

五、调试与测试

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

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

(2)  测试结果的分析与讨论

①  用户界面

②  输入学生信息

③  查找学生信息

④  删除学生信息

⑤  添加学生信息

⑥  浏览学生信息

相关推荐