武汉理工大学华夏学院课程设计报告书课程名称:数据结构题目:用C语言实现成绩统计程序的设计系名:信息工程系专业班级:软件工程1121姓名:****:***2013 年 6月 28日课程设计任务书设计题目:用C语言实现成绩统计程序的设计设计目的1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法;2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现一个班的成绩统计3. 提高程序设计能力、加强查阅、运用资料的能力、算法分析与程序设计素质培养;设计任务(在规定的时间内完成下列任务)〔问题描述〕给出n个学生的m门课程的考试成绩信息,每条信息由姓名、课程代号与分数组成,要求设计算法:(1)输入每个人的各门课程的成绩,计算每人的平均成绩;(2)按平均成绩的高低次序,打印出出个人的名次,平均成绩相同的为同一名次;(3)按名次列出每个学生的姓名和各科成绩;〔基本要求〕学生的考试成绩必须通过键盘输入,且需对输出进行格式控制;〔算法提示〕可以用选择排序、冒泡排序等多种排序算法求解;具体要完成的任务是:A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。
B. 写出规范的课程设计报告书;时间安排:6月24日---28日第一天布置题目,确定任务、查找相关资料第二天~第四天功能分析,编写程序,调试程序、运行系统;第五天程序验收、答辩;撰写设计报告。
具体要求1. 课程设计报告按统一通用格式书写,具体内容如下:①设计任务与要求②总体方案与说明③软件主要模块的流程图④源程序清单与注释⑤问题分析与解决方案(包括调式报告,即在调式过程中遇到的主要问题、解决方法及改进设想);⑥小结与体会附录:①源程序(必须有简单注释)②使用说明③参考资料2.每位学生应独立完成各自的任务且每天至少在设计室工作半天;指导教师签名: 2013 年 6月 22日教研室主任(或责任教师)签名: 2013年 6月 24日1.设计题目及要求1.1设计题目用C语言实现成绩统计程序的设计。
1.2具体任务对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。
假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。
学习相关开发工具和应用软件,熟悉系统建设过程。
2.系统设计思想2.1 系统设计思想在编写成绩统计管理系统程序的过程中运用结构体,把问题中所涉及的变量定义在结构体中,利用函数来管理学生成绩,循环语句控制所选择的选择界面,case语句进行选择。
然后利用相关变量函数把学生成绩记录下来,利用循环语句再回到选择界面,利用查找函数,统计函数来查找统计学生成绩,利用冒泡排序法来对学生平均成绩进行排序。
然后按成绩高低对学生进行排名。
2.2 系统算法设计2.2.1系统模块结构图系统结构如图2-1所示2.2.2主函数流程图主函数如图2-2所示图2-2 主函数流程图3.系统调试与运行3.1开发环境Visual C++6.0,Microsoft Windows XP3.2程序调试3.2.1主界面调试选择界面如图3-1所示图3-1 选择界面截图3.2.2成绩录入模块成绩录入界面录入界面如图3-2所示图3-2 成绩录入模块3.2.3成绩查询模块成绩查询界面如图3-3所示图3-3 成绩查询模块3.2.4成绩统计模块成绩统计界面如图3-4所示图3-4 成绩统计模块4.设计评价与修改在数据结构课程设计过程中,许多知识点都没有学过,都要靠自己到课外的资料中去查找。
在用的时候难免出现这样那样的错误。
如开始设计出来的菜单不是预想的那样,而是窗中出现混乱,要经过自己一遍遍的调试与修改,和老师同学的帮助下逐渐改进完善,最后才渐渐的成型。
运行的也基本达到所需要的运算要求。
5.心得与体会回顾起此次课程设计,我感慨颇多,从拿到题目到完成整个编程,从理论到实践,在整整一个礼拜的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体。
通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。
学到了设计一个简单的系统。
要注意哪些方面。
也使我们知道自己哪些方面做得还不够。
这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团队合作的可贵.编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。
每一次的课程设计都是一次对自己曾经学习知识的检验,通过每次的实践,使自己认识之前的不足与缺点,利于以后的改正与今后学习的发展方向,希望每一次的课程设计都能有一个很好的提高参考文献[1]詹春华李小艳黄启荃•《计算机应用基础》•科学出版社 2011.5[2]詹春华杨沙•《C语言程序设计》•科学出版社2011.8[3]谭浩强·C语言程序设计·北京·清华大学出版社,2000年1月。
[4]徐孝凯魏荣•《数据结构》•机械工业出版社•1996年[5]徐孝凯•《数据结构简明教程》•清华大学出版社•1995年[6]陈文博朱青•《数据结构与算法》•机械工业出版社•1996年附录:程序代码#include <stdlib.h>#include <stdio.h>#include <string.h>#define MAXN 35#define MAX_NAME 256typedef struct student //学生信息{int no;char name[MAX_NAME];double Chinese;double math;double English;double mark_ave;double mark_tot;} STUDENT;/*-----------输入信息子程序---------*/void input(STUDENT *data, int *len){int no;putchar('\n');printf("%s\n", "请输入新的记录,如果需要退出当前菜单请输入-1.");printf("%s\n", "格式:\n学号\n");printf("%s\n", "姓名语文数学英语");putchar('\n');printf("如:\n");printf("1\n");printf("小明 93 95 89\n");scanf("%d", &no);while(no != -1) {data[*len].no = no;scanf("%s %lf %lf %lf", data[*len].name,&data[*len].Chinese, &data[*len].math,&data[*len].English);data[*len].mark_ave=(data[*len].Chinese+data[*len].math+data[*len ].English)/3.0;data[*len].mark_tot=data[*len].Chinese+data[*len].math+data[*len] .English;(*len)++;scanf("%d", &no);}}/*---------------输出信息子程序---------------*/void output(STUDENT *data, int len){int i;system("cls");printf("%8s", "学号");printf("%8s", "姓名");printf("%8s", "语文");printf("%8s", "数学");printf("%10s", "英语");printf("%12s", "平均分");printf("%10s", "总分");putchar('\n');for (i =0; i < 80; i++)putchar('=');putchar('\n');for (i = 0; i< len; i++){printf("%8d", data[i].no);printf("%8s", data[i].name);printf("%8.1lf", data[i].Chinese);printf("%8.1lf", data[i].math);printf("%10.1lf", data[i].English);printf("%12.1lf", data[i].mark_ave);printf("%10.1lf", data[i].mark_tot);putchar('\n');}for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("按回车键继续.");getchar();getchar();}/*--------------排序子程序------------*/void sort(STUDENT *data, int len){int i,j,k;STUDENT temp;for (i=0; i<len-1; i++) {for (k=i, j=i+1; j<len; j++)if (data[k].mark_ave > data[j].mark_ave) k=j;if (k != i) {temp = data[i];data[i] = data[k];data[k] = temp;}}}/*--------------------搜索子程序-----------------------*/void find(STUDENT *data, int len){int find_no, result ;int i;lab: result=0;printf("%s\n", "请输入需要查找的学生的学号,退出当前菜单请输入 -1.");scanf("%d", &find_no);if (find_no == -1) return; /*exit the fine sub program*/while( data[result].no != find_no && result < len) result ++;if (result >= len ) {printf("%s\n", "未查询到相关信息");goto lab;}else {system("cls");printf("%s\n", "查询信息如下:");for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("%8s", "学号");printf("%8s", "姓名");printf("%8s", "语文");printf("%8s", "数学");printf("%10s", "英语");printf("%12s", "平均分");printf("%10s", "总分");putchar('\n');printf("%8d", data[result].no);printf("%8s", data[result].name);printf("%8.1lf", data[result].Chinese);printf("%8.1lf", data[result].math);printf("%10.1lf", data[result].English);printf("%12.1lf", data[result].mark_ave);printf("%10.1lf", data[result].mark_tot);putchar('\n');for (i =0; i < 80; i++)putchar('=');putchar('\n');goto lab;}}/*-----------------插入子程序-------------*/void insert(STUDENT *data, int *len){int no, pos;double Chinese, math, English, mark_ave, mark_tot;int i;char name[MAX_NAME];lab: printf("%s\n", "输入新的记录,退出当前菜单请输入-1.");printf("%s\n", "格式:学号");printf("%s\n", " 姓名语文数学英语");scanf("%d", &no);if (no == -1) return;data[*len].no = no;scanf("%s %lf %lf %lf", name, &Chinese, &math, &English);mark_ave=(Chinese+math+English)/3.0;mark_tot=Chinese+math+English;pos = 0;while ((data[pos].mark_ave < mark_ave) && (pos < *len) ) pos ++;for (i = *len-1; i >= pos; i--)data[i+1] = data[i];data[pos].no = no;strcpy(data[pos].name, name);data[pos].Chinese = Chinese;data[pos].math = math;data[pos].English = English;data[pos].mark_ave = mark_ave;data[pos].mark_tot = mark_tot;(*len)++;goto lab;}/*-------------删除子程序--------------*/void delete_item(STUDENT *data, int *len){int no, i, pos;lab: pos=0;printf("%s\n", "输入需要删除的学生的学号,退出当前菜单请输入-1.");scanf("%d", &no);if (no == -1) return;while( (data[pos].no != no) && (pos < *len) ) pos = pos +1;if (pos >= *len) {printf("%s\n", "未找到需要删除的学生");goto lab;}else {for (i = pos+1;i < *len; i++)data[i-1] = data[i];*len = *len -1;if (*len == 0) {printf("%s\n", "没有任何记录,请按回车键返回.");getchar();getchar();return;}goto lab;}}/*---------------统计子程序------------*/void stat(STUDENT *data, int len){int no_59=0, no_69=0, no_79=0, no_89=0, no_100=0;int i;for (i = 0;i < len; i++) {if (data[i].mark_ave <=59) no_59++;else if (data[i].mark_ave <=69) no_69++;else if (data[i].mark_ave <=79) no_79++;else if (data[i].mark_ave <= 89) no_89++;else no_100++;}system("cls");for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("%10s", "分数");printf("%10s", "0--59");printf("%10s", "60--69");printf("%10s", "70--79");printf("%10s", "80--89");printf("%10s", "90--100");putchar('\n');putchar('\n');printf("%10s", "学生");printf("%10d", no_59);printf("%10d", no_69);printf("%10d", no_79);printf("%10d", no_89);printf("%10d", no_100);putchar('\n');for (i =0; i < 80; i++)putchar('=');putchar('\n');printf("按回车键返回");getchar();getchar();}/*---------------显示信息子程序------------*/void paint(){int i;system("cls");printf("%55s\n", "武汉理工大学华夏学院学生成绩管理系统\n");printf(" 制作者:武汉理工大学华夏学院软件1121班钟伟 \n");for (i = 0; i < 80; i++)putchar('=');putchar('\n');printf(" 1 输入信息 2 输出信息\n");printf(" 3 按平均分排序 4 按学号查找\n");printf(" 5 插入 6 按学号删除\n");printf(" 7 按平均分输出统计信息 8 保存到文件\n");printf(" 0 退出\n");for (i = 0; i<= 79; i++)putchar('=');putchar('\n');printf("%s\n", "请输入各操作对应的序号:");}void save(STUDENT *data, int len)//将数据保存到文件{int i;FILE *fp;fp=fopen("成绩统计表.txt","w");fprintf(fp,"%8s", "学号");fprintf(fp,"%8s", "姓名");fprintf(fp,"%8s", "语文");fprintf(fp,"%8s", "数学");fprintf(fp,"%10s", "英语");fprintf(fp,"%12s", "平均分");fprintf(fp,"%10s\n", "总分");fprintf(fp,"========================================================= ===============\n");putchar('\n');for (i = 0; i< len; i++){fprintf(fp,"%8d", data[i].no);fprintf(fp,"%8s", data[i].name);fprintf(fp,"%8.1lf", data[i].Chinese);fprintf(fp,"%8.1lf", data[i].math);fprintf(fp,"%10.1lf", data[i].English);fprintf(fp,"%12.1lf", data[i].mark_ave);fprintf(fp,"%10.1lf\n", data[i].mark_tot);}fprintf(fp,"========================================================= ===============\n");fclose(fp);printf("文件已保存到\"成绩统计表.txt\"");getchar();getchar();}/*-----------主程序--------------*/void main(){STUDENT data[MAXN];int len = 0;char ctrl_ch;paint();scanf("%c", &ctrl_ch);while (ctrl_ch != '0') {switch(ctrl_ch) {case '1':input(data, &len);break;case '2':output(data, len);break;case '3':sort(data, len);break;case '4':find(data, len);break;case '5':insert(data, &len);break;case '6':delete_item(data, &len);break;case '7':stat(data, len);break;case '8':save(data, len);break;default:if (ctrl_ch != '\n') printf("%s\n", "输入错误!");break;}if (ctrl_ch != '\n') paint();scanf("%c", &ctrl_ch);}}。