C语言实训报告(模版)

《C语言程序设计》实训报告

课题名称:  学生成绩管理系统  

    业:   软件技术    

    级:   软件A091   

    号:               

    名:               

指导教师:               

20##-7-2

       

一  课程设计目的…………………………………………… 2

二  课程设计题目…………………………………………… 3

三  课程设计报告内容……………………………………… 3

四  总结……………………………………………………7

心得与感想………………………………………………8

附录:(源程序)………………………………………… 10


一、课程设计的目的

(1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。

(2)掌握C的基本概念和基础知识。

(3)通过训练能够读懂较为复杂的C语言源程序并具备基本C语言程序设计的能力。

(4)熟练掌握各种常用类的定义,继承,文件的应用,为更好的理解面向对象打下更好的基础。

(5)通过实训,培养自己编写、调试、分析大型应用程序的能力。

(6)掌握面向对象的基本原理,提高学生综合程序设计的能力。

(7)培养自己独立解决问题,查找资料的能力。同学之间相互帮助,相互交流,相互合作的团队精神。

(8) 培养自己良好的学习兴趣,独立的编程风格。

(9) 通过实训检查自己学习上的不足,达到熟练掌握C语言的基本知识和技能。

(10)《C语言程序设计》是计算机专业重要的课程,C语言功能丰富、表达能力强,使用灵活方便、可以编写实用的应用软件。

(11)灵活使用C语言进行程序编写,巩固有关语句,变量定义、输入、输出、结构体,指针、文件操作等概念和方法。

(12)提高调试程序的技能,提高软件编写的能力。学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力。

 

二、课程设计的题目:学生成绩管理系统

三、课程设计报告内容

1.学生成绩数据包括:学号,姓名,语文,数学,英语,总分

2.使用结构体数组存放学生成绩

typedef  struct stud    /*学生成绩数据结构*/

 {char id[10];

  Char name[20];

  Int  yuwen;

  Int  shuxue;

  Int  yingyu

  Int  totalscore;

}stud;

stud  st[N];   /* 学生成绩数组*/

#define  N  60

3.实现功能:
    ● 输入数据
    ● 删除数据
    ● 查询数据
    ● 修改数据
    ● 显示数据
    ● 数据可保存在文件中
    ● 数据可从文件中读出
        ● 有命令菜单提示
4.编写的程序要求完整实现功能,用户介面友好,程序运行可靠。

5. 设计的步骤

(1)需求分析:了解基本原理,确定软件的基本功能,查找相关资料;

(2)总体设计:确定软件的总体结构、模块关系和总体流程;

(3)详细设计:确定模块内部的流程和实现算法。

(4)上机编码和调试;

(5)实际数据运行测试。

6.各个功能模块和函数命名

     

7.各个功能模块介绍

(1).输入成绩

指定班级名称和学期

输入若干条记录

添加存入指定成绩文件尾部

(2).删除某同学的成绩信息

指定班级名称和学期

输入学生的学号

打开该班该学期的成绩文件读入所有数据

查找指定学号的成绩记录,找到则删除该记录

把所有数据写回原数据成绩文件

(3). 查询某学生成绩

指定班级名称和学期

输入学生的学号

打开该班该学期的成绩文件读入所有数据

查找指定学号的成绩记录并显示该记录

(4). 修改某学生成绩

指定班级名称和学期

输入学生的学号

打开该班该学期的成绩文件读入所有数据

查找指定学号的成绩记录,找到显示该记录

输入该生正确的成绩

把所有数据写回原数据成绩文件

(5). 退出系统

8.处理流程

学生成绩系统主界面模块流程图

四.总结

学生成绩管理系统的编写,看似杂乱无头绪,实际上却并不如此。它的每一个功能都能分成模块,有句话说的好,大事化小,小事化了。C语言编程也正式如此,把一个大的程序分为若干相互独立的模块,这样使完成每一个模块的工作变得单纯而明确,这样不仅降低了难度还使得思路清晰,很容易编写出要做的程序,从而为设计一些较大的软件打下了良好的基础。

分析问题:

学生成绩管理的整体功能都包括输入数据、删除数据、查询数据、修改数据、显示数据
五大板块。

设计的数据对象包括整形:各科成绩和总成绩  字符型:姓名、学号。

程序的编译与运行

(1)   查找错误是一件让人闹心的事,但是要注重技巧,注意平时经验的积累。才能在最快的时间找出错误

(2)   用心去查找,也许你会发现错误并不是很难找

(3)   程序编译成功不要满足现状,要积极测试程序的可用性,对功能不理想,存在缺点的地方,积极的改进,完善。

  

五.心得与感想

一周的C语言实训,虽然时间略显仓促,但却让我学到了很多实际运用的技能!

首先,在实训中的第一步是编写功能较为单一的小程序,虽然是小程序,但所用的知识却都是我们本学期学习的重点知识。在做题的过程中让我们把这些知识复习了一遍,强化了知识!

其次,这次作中所碰到的题目,在实训中已经接触过,所我们都比较深知这些题目的要求和算法,因次在编写小程序时比较快,而且算法也是比较简化,运算准确。鉴次我明白很多编程题要经过多次编写修改与调试,才会得到最简略的算法。

再次,平时我们学C语言视乎都是为了考试或者做一些比较常规的题目,而这次实训却给我们的将所学知识运用于解决实际问题的机会,让人更有激情,这就是编写软件的在雏形,也让我们感受到了编写软件程序的乐趣。但是不仅仅是如此,更为重要的是在运用所学知识的过程中,记住这些知识,并能够广泛的运用!

虽然我这次是编写一个菜单的程序,但是如果我么留心的话,我们身边有许多电子设备都是内置有程序的,我们也可以在此次专题实训过后,自行确定其他的专题进行编写程序,这样可以让我们的知识更加深化丰富!

这次实训似乎是对我巨大的考验,程序在不慌不忙的进行着,按照我自身的进度,提前完成是没有问题的,但是很多客观条件让我不得不在最后的时间里才上交的作业。每当我把程序写完以后,却由于每一台电脑的识别格式不一样而导致我所写的文件一次次的被损坏,尽管这样,我仍然没有放弃,最后还赶在截止时间到来之前上交了我的作业!

这一次编写大作业的程序又让我感受到学程序可以锻炼缜密的思维了。因为平时练习的都是小程序,所以句段比较少,一些错误都很容易被检查出来,但是这次实训却是上百段的语句,难以检查,似乎也没有经验去怎么检查,那一刹那感觉到很急,但又不知如何是好,可是又不轻易的向老师询问,因为好像蛮简单,相信自己能够检查出来,所以我一般都是独立思考的完成的,只有少部分是在老师和与同学讨论下完成的。

在编写程序中,真的是细节决定成败,因为不管程序的语句是多是少,但是只要有一条语句或语法不正确,就不能使程序得到所需要的结果。没能够使自己编写出来的程序等到想要的结果,意味着这是一个不理想的程序,对于本次编写来说则是失败的。

在实训过程中,使我良好的锻炼了自己,首先是兴趣方面,通过编写通讯录管理系统使我更加喜欢编程,使我从以前的迷茫状态中解脱出来,使我了解了编程的真正意义。我想这对我以后的人生有着很大的帮助。其次通过编写通讯录管理系统使我对写程序有了一定的思路,不像以前无从下手,使我理解了算法的意义,使我懂得了模块化思想的好处。

通过一个星期的编写代码,使我对书本上的知识有了更深的理解,甚至有很多不懂的问题在这过程中自然而然的理解了。对期末考试更有了信心。在黄爽老师的悉心指导下,我对C语言有了更深刻的理解,对程序的算法,数据的定义,程序的改错等方面的能力有了很大提高,自身的注意力,耐心,和对编程的兴趣有了很大增长,使我获益匪浅。

六.C语言源程序

#include "string.h"

#include "stdlib.h"

#include "stdio.h"

#include "ctype.h"

#define N 60

typedef struct stud

{

 char id[10];

 char name[20];

 int yuwen;

 int shuxue;

 int yingyu;

 int totalscore;

}stud;

stud st[N];

int menu_select();

void add_class_term_score();

void class_term(char filename[20]);

int inputscore(stud st[],char filename[]);

void addtotext(stud *st,int i,char filename[20]);

int inputfromtext(stud *st,char filename[20]);

void writetotext(stud *st,int i,char filename[20]);

void delect_a_record();

int queryrecord(stud st[],int n,char num[10]);

void deleterecord(stud st[],int n,int i);

void query_a_record();

void revise_a_record();

void creatfile();

main()

{

     for(;;)

     {switch (menu_select())

      {

         case 1:creatfile();break;

         case 2:add_class_term_score();break;

         case 3:delect_a_record();break;

         case 4:query_a_record();break;

         case 5:revise_a_record();break;

         case 0:printf("\tHave a good luck!Bye-Bye!\n ");

           system("pause");

           exit(0);

       }

      }

}

int menu_select()

{

  char c;

  do

    {

      system("cls");

      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    | 0.退出      |  \n");

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

      printf("\tGIVE YOUR CHOICE(0-5):");

      c=getchar();

     }

  while (c<'0'||c>'5');

     return(c-'0');

}

void add_class_term_score()

{

        int number;

        stud st[N];

        char filename[20];

        class_term (filename);

        printf("输入若干学生成绩\n");

        number=inputscore(st,filename);

        addtotext(st,number,filename);

}

void class_term(char filename[20])

{

       char class[10],term[2];

       printf("\n input  classname and term :");

       scanf("%s",class);

       scanf("%s",term);

       strcat(class,"_");

       strcpy(filename,class);

}

int inputscore(stud st[],char filename[])

{

      int i=0;

      char sign='Y';

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

      {

         printf("\tstudent\'s   id:");

         scanf("%s",st[i].id);

         printf("\tstudent\'s   name:");

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

         printf("\tstudent\'s   yuwen:");

         scanf("%s",st[i].yuwen);

         printf("\tstudent\'s   shuxue:");

         scanf("%s",st[i].shuxue);

         printf("\tstudent\'s   yingyu:");

         scanf("%s",st[i].yingyu);

         gets(filename);

         st[i].totalscore=st[i].yuwen+st[i].shuxue+st[i].yingyu;

         printf("\n input any more records?(Y/N)");

         scanf("%c",&sign);

         i++;

         }

         return (i);

}

void addtotext(stud *st,int n,char filename[20])

{

        int i=0;

        FILE *fp;

        printf("write records to text file.\n");

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

           {

            printf("cann\'t open the file\n");

            system("pause");

            return;

            }

         while (i<n)

           {

            fwrite(&st[i],sizeof(stud),1,fp);

            i++;

            }

         fclose(fp);

         printf("successed!\n");

}

int inputfromtext(stud *st,char filename[20])

{

       int i=0,num;

       FILE *fp;

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

         {

           printf("cann\'t open the file\n");

           system("pause");

           return(0);

         }

       while(!feof(fp))

       {

          fscanf(fp,"%s%s%d%d%d%d",st[i].id,st[i].name,

           &st[i].yuwen,&st[i].shuxue,&st[i].yingyu,&st[i].totalscore);

           i++;

       }

       fclose(fp);

       printf("successed!\n");

       system("pause");

       return(i);

}

void writetotext(stud *st,int n,char filename[20])

{

       int i=0;

       FILE *fp;

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

         {

           printf("cann\'t open the file\n");

           system("pause");

           return;

          }

       fprintf(fp,"%d\\n",n);

       while(i<n)

        {

         fwrite(&st[i],sizeof(stud),1,fp);

         i++;

         }

        fclose(fp);

        printf("successed!\n");

}

void delect_a_record()

{

       char filename[20],stuid[10],ch;

       stud st[N];

       FILE *fp;

       int n,i;

       class_term(filename);

       printf("输入删除的学生的学号\n");

       scanf("%s",stuid);

       n=inputfromtext(st,filename);

       i=queryrecord(st,n,stuid);

       if (i>=0)printf("确认删除吗?Y\N");

       ch=getchar();

       if(ch=='Y'||'y')

       deleterecord(st,n,i);

       writetotext(st,n-1,filename);

}

int queryrecord(stud st[],int n,char num[10])

{

      int i=0;

      while(strcmp(st[i].id,num)!=0&&i<n) i++;

      if (i==n)

        {

         printf("not find!\n");

         return(-1);

         }

      printf("his(her) name is %s\n",st[i].name);

      printf("his(her) score is : yuwen=%5d  shuxue=%5d  yingyu=%5d  totalscore=%d\n",

      st[i].yuwen,st[i].shuxue,st[i].yingyu,st[i].totalscore);

      return(i);

}

void deleterecord(stud stud[],int n,int i)

{

      int j;

      if(i<1||i>n-1)

      {printf("位置错误\n");return;}

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

      {

           strcpy(stud[j].id,stud[j+1].id);

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

           stud[j].yuwen=stud[j+1].yuwen;

           stud[j].shuxue=stud[j+1].shuxue;

           stud[j].yingyu=stud[j+1].yingyu;

           stud[j].totalscore=stud[j+1].totalscore;

      }

      printf("delete successed!\n");

      return;

}

void query_a_record()

{     char filename[20],stuid[10];

      stud st[N];

      FILE *fp;

      int n,i;

      class_term(filename);

      printf("输入查找学生的学号\n");

      scanf("%s",stuid);

      n=inputfromtext(st,filename);

      queryrecord(st,n,stuid);

}

void revise_a_record()

{

         char filename[20],stuid[10];

         stud st[N];

         FILE *fp;

         int i,n;

         class_term(filename);

         printf("输入需要修改的学生学号\n");

         scanf("%s",stuid);

         n=inputfromtext(st,filename);

         i=queryrecord(st,n,stuid);

         if(i>0)printf("输入正确的成绩\n");

         printf("\tstudent\'s   id:");

         scanf("%s",st[i].id);

         printf("\tstudent\'s   name:");

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

         printf("\tstudent\'s   yuwen:");

         scanf("%s",st[i].yuwen);

         printf("\tstudent\'s   shuxue:");

         scanf("%s",st[i].shuxue);

         printf("\tstudent\'s   yingyu:");

         scanf("%s",st[i].yingyu);

         gets(filename);

         st[i].totalscore=st[i].yuwen+st[i].shuxue+st[i].yingyu;

         writetotext(st,n,filename);

}

void creatfile()

{

   FILE *fp;

   if( (fp=fopen( "baibai.txt", "wb"))==NULL)

  {

    printf( "文件创建失败\n" );

    return;

   }

fclose( fp );

}来源:(http://blog.sina.com.cn/s/blog_661bd1ad0100j5p5.html) - C语言实训心得体会_青春的记忆_新浪博客

相关推荐