青岛农业大学课程设计报告题目:学生成绩管理系统姓名:田世强元成张斌学院:工程系专业:电子信息工程技术班级:2班学号:200806013 200806015 200806023指导教师:曹红波2010年9月16日六详细设计(各功能模块的具体实现算法——流程图) (3)一设计目的进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。
掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。
二课程设计的内容对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。
假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。
学习相关开发工具和应用软件,熟悉系统建设过程。
三课程设计的要求与数据1、用C语言实现系统;2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:(1) 每一条记录包括一个学生的学号、姓名、3门课成绩(2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。
)(3)、成绩信息显示浏览功能:完成全部学生记录的显示。
(4)、查询功能:完成按姓名查找学生记录,并显示。
(5)成绩信息的删除:按学号进行删除某学生的成绩.(6)、排序功能:按学生平均成绩进行排序。
(7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!四课程设计应完成的工作(1)编写算法;(2)算法测试,并有具体的测试结果和结果分析;(3)撰写课程设计报告。
内容包括:1)封面扉页2)设计任务书3)目录4)总体设计方案(包括流程图)5)使用说明及运行实例(包括界面)6)成员设计内容简介7)项目源程序代码(注意注释的使用)8)指导教师评语五总体设计(包含几大功能模块)1、成绩录入功能2、成绩输出功能3、成绩查询功能4、删除模块5、排序功能6、统计功能7、退出系统六详细设计(各功能模块的具体实现算法——流程图)6.1各函数的功能和实现1、输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数void input(STUDENT *data, int *len)来实现此操作。
2、成绩输出模块:输出学生的信息以及成绩void output(STUDENT *data, int len):通过学生的姓名来查看学生的相关成绩,同时也可以分别通过caverage() 、maverage() 、eaverage() 和comaverage() 来输出成绩的平均分数、最高和最低分数。
3、成绩查询模块:可用void find(STUDENT *data, int len) 来实现。
找到就输出此学生全部信息。
4、删除模块:用函数void delete_item(STUDENT *data, int *len)来实现5、排序模块:用函数void sort(STUDENT *data, int len)来实现6、统计功能能:用函数void stat(STUDENT *data, int len) 来实现7、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
如图6.1图 6.1七调试分析(包含各模块的测试用例,及测试结果)7.1源程序#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(" 制作者: \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') {; 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);}}7.2调试与测试7.2.1算法调试过程中出现的问题及解决方法(以下为其中一例)--------------------Configuration: Cpp1 - Win32 Debug--------------------Compiling...Cpp1.cppC:\Documents and Settings\Administrator\桌面\Cpp1.cpp(9) : error C2065: 'MAX_MAME' : undeclared identifierC:\Documents and Settings\Administrator\桌面\Cpp1.cpp(9) : error C2057: expected constant expressionC:\Documents and Settings\Administrator\桌面\Cpp1.cpp(10) : error C2229: struct 'student' has an illegal zero-sized array执行cl.exe 时出错.Cpp1.obj - 1 error(s), 0 warning(s)解决方法:把“MANE”改成“NAME”---拼写错误。