C语言课程设计实验报告参考

时间:2024.4.5

C语言课程设计实验报告

题目:学生成绩管理系统

学号:

专业:

姓名:

指导教师:

完成日期:20##年7月8日

一、目标

1.进一步掌握和利用C语言进行程设计的能力;

2、进一步理解和运用结构化程设计的思想和方法;

3、初步掌握开发一个小型实用系统的基本方法;

4、学会调试一个较长程序的基本方法;

5、学会利用流程图或N-S图表示算法;

6、掌握书写程设计开发文档的能力(书写课程设计报告);

二、内容及功能

1、每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩。

2、输入功能:可以一次完成无数条记录的输入。

3、输出功能:完成全部学生记录的显示。

4、查找功能:完成按姓名查找学生记录,并显示。

5、排序功能:按学生平均成绩进行排序。

6、有一个清晰美观界面来调用各个功能

三、各功能模块的算法处理流程及相关说明

整个系统除了主函数外,另外还有4个函数,实现四大功能:输入功能、输出功能、查找功能、排序功能。各个函数的详细设计说明分别如下:

1主函数 int main()

主要实现“功能选择”的界面,利用switch()语句实现各函数的调用,系统根据输入的数字选项来调用相应的函数。在这个界面里有显示系统的四大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,按回车键回到主界面。流程如图3.1:

2、输入函数void input(struct student *p)

主要实现对学生信息的输入,利用do while 语句实现对多个学生信息的输入,用字符y/n来判断是否继续输入下一个学生的信息。如果输入字符y,则继续输入学生的信息;如果输入字符n,则退出输入界面回到主界面。流程如图3.2:

3、输出函数void shuchu(struct student *p)

    主要实现对学生信息的输出,首先利用flag==0来判断是否存储有学生信息,如果没有,则输出“无学生成绩,请先录入学生信息“;如果已存在学生信息,则从主界面进入输出界面,显示出所有学生的相关信息。按回车键可返回主界面。流程如图3.3:

4、排序函数void aveg(struct student *p)

    主要实现对学生成绩的排序,首先利用flag==0来判断电脑中是否存储有学生信息,如果没有,则输出“无学生成绩,请先录入学生信息“;如果有,则按照选择排序的方法按平均分由高到低对所有学生信息进行排序,然后输出排序后所有学生的信息。按回车键可返回主界面。流程如图3.4:

5、查找函数void find(struct student *p) 

主要实现对学生信息的查找,利用for循环和strcmp函数来实现查找功能,利用j>=flag来判断是否找到该学生的信息。如果该学生信息已找到,则输出该学生的相关信息;如果未找到,则输出"未找到该学生纪录,请核对后重新查找!"。按回车键可返回主界面。流程如图3.5:

                                      图3.1

                            图 3.2

                         图3.3

                            图3.4

                                图3.5

四、程序源代码

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define N 100               /*定义符号常量,代表学生人数最大值*/

int flag=0;                /*全局变量,用于记录数组的当前位置*/

struct student              /*定义结构体类型,代表学生信息*/  

{

 char name[9];             /*学生姓名*/

 char number[10];          /*学生学号*/

 float score[3];           /*一个学生三门课的成绩*/

 float ave;               /*求平均分*/

};

void input(struct student *p);      /*定义输入学生信息函数*/

void shuchu(struct student *p);       /*定义输出函数*/

void aveg(struct student *p);       /*定义按平均分排序函数*/

void find(struct student *p);      /*定义查找函数*/

/*********************系统界面************************/  

void main()

{

 char bianhao;                 /*定义局部变量,用于记录用户选择的功能编号*/

 struct student stu[N];       /*定义结构体数组,用于记录学生信息*/

 do                            /*利用循环显示界面*/

 {

  system("cls");              /*清屏函数*/

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

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

  printf("\t\t   *          学生成绩管理系统         *\n");

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

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

  printf("\t\t   *          1.输入学生信息           *\n");

  printf("\t\t   *          2.输出学生信息           *\n");

  printf("\t\t   *          3.按平均分排序           *\n");

  printf("\t\t   *          4.查找学生信息           *\n");

  printf("\t\t   *          5.退出                   *\n");

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

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

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

  printf("\t\t请输入功能选择编号(1-5):");

  fflush(stdin);             /*清空输入缓冲区*/

  scanf("%c",&bianhao);     /*接受用户选择的功能编号*/

  switch(bianhao)             /*输入不同功能编号调用相应函数来完成功能*/

  {

  case'1':

      input(stu);break;       /*调用输入学生信息函数,参数为学生信息数组名*/

  case'2':

      shuchu(stu);break;        /*调用输出函数*/

  case'3':

     aveg(stu); break;         /*调用按平均分排序函数,参数是数组名*/

  case'4':

      find(stu); break;      /*调用按学号查找学生信息函数*/

  }

 }while(bianhao!='5');            /*判断是否退出*/

 printf("\n\n\t\t  ---------------谢谢使用----------------\n\n"); 

}

/**************************输入函数************************/

void input(struct student *p)       /*定义输入学生信息函数*/

{

 char ch;                        /*用于接收用户指令*/

 do                              /*利用循环,由用户控制输入学生成绩*/

 {

  system("cls");

  printf("\n输入第%d个学生的信息:\n输入学号:",flag+1);

  scanf("%s",p[flag].number);

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

  scanf("%s",p[flag].name);

  printf("\n输入数学成绩:");

  scanf("%f",&p[flag].score[0]);

  printf("\n输入英语成绩:");

  scanf("%f",&p[flag].score[1]);

  printf("\n输入C语言成绩:");

  scanf("%f",&p[flag].score[2]);

  p[flag].ave=(p[flag].score[0]+p[flag].score[1]+p[flag].score[2])/3;

  printf("总分为:%.1f\n",p[flag].score[0]+p[flag].score[1]+p[flag].score[2]);

  printf("平均分为:%.1f",p[flag].ave);

  flag++;                  /*记录当前输入的学生资料的个数*/

  printf("\n是否继续输入(y/n)\n");

  fflush(stdin);               /*清空输入缓冲区*/

  ch=getchar();

 }while(ch=='y'||ch=='Y');     /*判断用户指令,是否继续输入*/

}

/*********************输出函数**********************/

void shuchu(struct student *p)   /*输出学生信息*/

{

 int i  ;                  /*定义循环变量i,j*/    

 if(flag==0)               /*判断数组中学生成绩是否存在*/

  printf("无学生成绩,请先录入学生信息\n");

 else

 {

  printf("\t学号\t姓名\t数学\t英语\tC语言\t总分\t平均分\n");

  for(i=0;i<flag;i++)     /*输出学生成绩*/

   printf("\t%-6s\t%-4s\t%-6.1f\t%-6.1f\t%2.1f\t%4.1f\t%4.1f\n",p[i].number,p[i].name,

   p[i].score[0],p[i].score[1],p[i].score[2],p[i].score[0]+p[i].score[1]+p[i].score[2],p[i].ave);

 }

 printf("\n回车键返回主程序\n");

 fflush(stdin);            /*清空输入缓冲区*/

 getchar(); 

}

/********************排序函数************************/

void aveg(struct student *p)   /*定义按平均分排序函数*/

{

 int i,j,k;                 /*定义循环变量i,j,最小数位置k*/    

 struct student t;          /*定义交换临时变量*/

 if(flag==0)               /*判断数组中学生成绩是否存在*/

  printf("无学生成绩,请先录入学生信息\n");

 else

 {

  for(i=0;i<flag-1;i++)     /*用选择法按平均分对学生成绩排序*/

  {

   k=i;

   for(j=i+1;j<flag;j++)    /*k为p[i]到p[flag-1]中最小数的位置*/

    if((p[k].score[0]+p[k].score[1]+p[k].score[2])/3<(p[j].score[0] +p[j].score[1]+p[j].score[2])/3)

   k=j;

    if(k!=i)           /*如果最小数不是比较数列中第一个,对调*/

    {

     t=p[k];

     p[k]=p[i];

     p[i]=t;

    }

  }

  printf("\n按平均分排序:\n\n");

  printf("\t学号\t姓名\t数学\t英语\tC语言\t总分\t平均分\t名次\n");

  for(j=0;j<flag;j++)     /*输出按平均分排序后的学生成绩和名次*/

   printf("\t%-6s\t%-4s\t%-6.1f\t%-6.1f\t%2.1f\t%4.1f\t%4.1f\t%-5d\n",p[j].number,

  p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],

  p[j].score[0]+p[j].score[1]+p[j].score[2],p[j].ave,j+1);

 }

 printf("\n回车键返回主程序\n");

 fflush(stdin);                   /*清空输入缓冲区*/

 getchar();

}

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

void find(struct student *p)            /*定义查找函数*/

{

 int j;

 char number[10];            /*用于接收用户输入的学生学号*/

 system("cls");              /*清屏函数*/

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

 scanf("%s",number);

  for(j=0;j<flag;j++)           /*使用字符串比较函数查找出符合条件的学生成绩*/

 {

  if(strcmp(number,p[j].number)==0)

  {

   printf("\n\t学号\t姓名\t数学\t英语\tC语言\t总分\t平均分\t名次\n");

  p[j].ave=(p[j].score[0]+p[j].score[1]+p[j].score[2])/3;

   printf("\t%-4s\t%-6s\t%-6.1f\t%-6.1f\t%-8.1f%-6.1f\t%.1f\t%d\n",p[j].number,p[j].name,

 p[j].score[0],p[j].score[1],p[j].score[2],p[j].score[0]+p[j].score[1]+p[j].score[2],p[j].ave,j+1);

   break;

  }

 }

 if(j>=flag)                   /*如果没找到,会从循环条件退出*/

  printf("\n未找到该学生纪录,请核对后重新查找!\n");

 fflush(stdin);                 /*清空输入缓冲区*/

 printf("\n回车键返回上一功能菜单\n");

 getchar();

}

五、心得体会

    学习这门课程后,我有许多的心得与体会。下面我就来谈一谈我上这门课后所得的收获。

经过一个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

通过这次课程设计我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。

    上这门课后,我还明白了,一个软件有很多模块,每个模块又会有许多功能。当你在准备开发一个软件的时候,你首先想到的就是要完整的把这件事做完,不要做的半途而废,那样的话你干脆就不要打"开发"这个两个字的主意了,更谈不上什么是开发,在开发之前还要想想我是否有能力完成这个事情,是否需要他人的帮助,说通俗一点就是看你有没有底气,如果你不具备以上的一些基本要求的话就最好自己做一些小控件多锻炼自己的动手能力以提升自己的技术,不要急于进行"开发",那样没多大好处,因为你的底气就不足,怎么做事,更谈不上进行IT行业中的"软件开发"。

在开发软件的时候,首先的第一个任务就是你准备开发的这个软件的整个框架图,这一步应多征求组内成员的意见,最后设计出这个软件的大体框架,做到心中有数.接下来的任务是和组内成员一起讨论我们所想开发的这个软件是否能完成,是否和我们现实中的物理模型相同。

六、参考书目:

谭浩强  《C程序设计》(第二版)清华大学出版社  1999.12

谭浩强  《C程序设计题解和上机指导》(第二版) 2000.9

杨路明  《C语言程序设计教程》(第2版)北京邮电大学出版社  2005.12

更多相关推荐:
《C语言程序设计》课程设计报告(小组)

东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:##组长:##同组成员:##目录一、目的....................…

c语言课程设计报告

C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体设计四详细设计五运行结果六课程设计体会一实验目的1通过课程设计加深对结构化程序设...

C语言课程设计报告

河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名学号专业班级计算机07-2班指导教师20XX年9月12日目录1.设计任务书21.…

C语言课程设计报告范例

C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的难点及解决办法四小结五附录原程序2一课程设计题目及所涉及知识点一课程设计题目1基...

厦门理工学院11级C语言C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求1二方案实现与调试221掷骰子游戏222射击游戏323汽车...

C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期专业计算机科学与技术班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求3二方案实现与调试321掷骰子游戏322汽车加...

c语言程序贪吃蛇课程设计报告

山东工商学院信电学院自动111班第一组贪吃蛇课程设计报告高级语言程序设计课程设计报告ExperimentDesigningreporter课程名称高级语言程序设计英文名称CProgramExperimentDe...

C语言程序设计基础课程设计报告

程序设计基础课程设计报告课程名称课程设计题目程序设计基础课程设计学生信息管理系统姓名系专业年级学号指导教师职称计算机科学技术系计算机网络技术讲师20xx年1月1日一设计题目及要求1题目学生信息管理系统2要求1建...

《C语言程序设计》课程设计报告格式 (2)

C语言程序设计课程设计报告20xx20xx学年第1学期专业软件工程软件测试服务班级1班姓名学号陈家汀指导教师谢小竹成绩计算机与信息工程学院20xx年1月12日目录一课程设计的目的与要求页码二方案实现与调试页码2...

C语言课程设计报告---学籍信息管理系统

中国地质大学本科生课程论文封面1课程设计评语注1无评阅人签名成绩无效2必须用钢笔或圆珠笔批阅用铅笔阅卷无效3如有平时成绩必须在上面评分表中标出并计算入总成绩2目录课程设计评语2目录31课程论文题目42程序设计思...

C语言课程设计报告_运动会分数统计系统

C语言课程设计报告_运动会分数统计系统一.需求分析1问题描述运动会分数统计系统参加运动会有n个系,系编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前…

C语言课程设计报告-图书管理系统

课程设计报告图书馆管理系统目录1题目与要求22系统总体设计要给出必要的文字说明及必要的图示321功能需求分析明确选题的功能需求322系统功能模块划分要给出系统功能模块图43详细设计431重要数据的数据结构设计即...

c语言程序设计课程设计报告(34篇)