C语言链表在统计班级成绩的应用
【问题描述】
学期考试结束,统计某班每个人的平均成绩,每门课的平均成绩,并按个人平均成绩从高到低的顺序输出成绩,输出不及格人名单。输入、输出格式自定。
【实现提示】
考试课程有:高等数学、物理、外语、C语言4门课程。
录入所有同学的成绩,对数据进行处理,输出所要求的内容,程序的功能主要包括以下几个方面:
①输入成绩
②修改记录
③删除记录
④输出成绩并按平均成绩排序,并标记平均分不及格的学生。
⑤界面提供上述功能选择。
代码#include
#include
#include
int menu=0;
typedef struct CLASS{
char name[15];
int maths;
int physics;
int english;
int c_language;
struct CLASS* next;
}linkNode;
struct AVERAGE{
char name[15];
float per_average;
struct AVERAGE* aver_next;
};
typedef struct AVERAGE* Average;
typedef linkNode* Class;
Average create_average_list(Class info_list_head);
Class add_student_info(Class head);
Class delete_student_info(Class head,char *stu_name);
void modify_student_info(Class head,char *stu_name);
void sort_average(Average);
void print_student_info(Class head);
void print_average_score(Average head);
void caculate_class_average(Class info_list_head);
void main_menu(void);
int main(void)
{
linkNode * link_list_head=NULL;
struct AVERAGE *pAver_head=NULL;
char *student_name;
while(1)
{
switch(menu){
case 0:{
main_menu();
}break;
case 1:{
link_list_head = add_student_info(link_list_head);
menu =0;
}break;
case 2:{
if(link_list_head!=NULL)
{
printf("If you want to modify student's information,please input the name: ");
scanf("%s",student_name);
}
modify_student_info(link_list_head,student_name);
menu =0;
}break;
case 3:{
if(link_list_head!=NULL)
{
printf("If you want to delete student's information,please input the name: ");
scanf("%s",student_name);
}
link_list_head=delete_student_info(link_list_head,student_name);
menu =0;
}break;
case 4:{
print_student_info(link_list_head);
menu =0;
}break;
case 5:{
pAver_head=create_average_list(link_list_head);
if(pAver_head==NULL)
{
menu =0;
break;
}
sort_average(pAver_head);
print_average_score(pAver_head);
caculate_class_average(link_list_head);
menu =0;
}break;
default:{
menu =0;
}break;
}
}
}
Average create_average_list(Class info_list_head)
{
Average aver_list_head,aNode,newNode;
Class cNode;
cNode=info_list_head->next;
if(info_list_head==NULL)
{
printf("The link list of student's information is not exist!\n");
return NULL;
}
aNode=aver_list_head=(Average)malloc(sizeof(struct AVERAGE));
aNode->aver_next=NULL;
while(cNode!=NULL)
{
newNode=(Average)malloc(sizeof(struct AVERAGE));
strcpy(newNode->name,cNode->name);
newNode->per_average=(float)(((cNode->maths)+(cNode->physics)+
(cNode->english)+(cNode->c_language))/4.0);
aNode->aver_next=newNode;
newNode->aver_next=NULL;
aNode = newNode;
cNode=cNode->next;
}
return aver_list_head;
}
Class add_student_info(Class head)
{
linkNode *pTail =NULL,*pNew=NULL;
int cnt;
int len;
if(head==NULL)
{
pTail =head = (Class)malloc(sizeof(struct CLASS));
pTail->next=NULL;
}
else
{
pTail = (Class)malloc(sizeof(struct CLASS));
pTail =head;
}
printf("please input student's number of people: ");
scanf("%d",&len);
while( pTail !=NULL)
{
if(pTail->next==NULL)
{
for(cnt=0;cnt { pNew = (linkNode *)malloc(sizeof(struct CLASS)); printf("please input student's name ande score in correct order by :\n"); printf("name math physical English C_language\n"); scanf("%s %d %d %d %d",pNew->name ,& pNew->maths, & pNew->physics,&pNew->english,& pNew ->c_language); pNew->next=NULL; pTail->next=pNew; pTail = pNew; } printf("add student's information successfully!\n"); return head; } pTail =pTail ->next; } } Class delete_student_info(Class head,char *stu_name) { Class pNode=NULL,temp=NULL; pNode = head->next; if( head==NULL) { printf("The link list of student's information is not exist!\n"); return NULL; } else { while(pNode!=NULL) { if(strcmp(pNode->name,stu_name)==0) { if(pNode==head->next) { if(pNode->next==NULL) { head->next=pNode->next; printf("delete student's information successfully!\n"); return NULL; } head->next=pNode->next; printf("delete student's information successfully!\n"); return head; } else if(pNode->next==NULL) { temp->next=NULL; printf("delete student's information successfully!\n"); return head; } else { temp->next=pNode->next; printf("delete student's information successfully!\n"); return head; } } else if(pNode->next==NULL) { printf("System not found student's information by your input it just\n"); return head; } temp=pNode; pNode= pNode->next; } } } void modify_student_info(Class head,char *stu_name) { Class cNode; cNode=head->next; if(head==NULL) { printf("The link list of student's information is not exist!\n"); return; } while(cNode!=NULL) { if(strcmp(cNode->name,stu_name)==0) { printf("please input you need to modify student's information in correct order by :\n"); printf("math physical English C_language\n"); scanf("%d %d %d %d",& cNode->maths, & cNode->physics,&cNode->english,&cNode->c_language); printf("modify student's information successfully!\n"); break; } else if(cNode->next==NULL) { printf("System not found student's information by your input it just\n"); } cNode=cNode->next; } } void sort_average(Average aver_list_head) { Average aNode1,aNode2; char name_temp[10]; float aver_temp; int cnt=0,num=0; aNode1=aver_list_head->aver_next; if(aver_list_head==NULL) { printf("The link list of score average is not exist!\n"); return; } while(aNode1!=NULL) { aNode2=aNode1; while(aNode2!=NULL) { aNode2=aNode2->aver_next; cnt++; } aNode2=aNode1; for(num=0;num { aNode2= aNode2->aver_next; if((aNode1->per_average)<(aNode2->per_average )) { strcpy(name_temp ,aNode1->name); aver_temp = aNode1->per_average; strcpy(aNode1->name ,aNode2->name); aNode1->per_average = aNode2->per_average; strcpy(aNode2->name , name_temp); aNode2->per_average = aver_temp; } } cnt=0; aNode1=aNode1->aver_next; } } void caculate_class_average(Class info_list_head) { Class cNode; int maths_sum=0,physics_sum=0,english_sum=0,c_language_sum=0; float total_people; cNode=info_list_head->next; if(info_list_head==NULL) { printf("The link list of student's information is not exist!\n"); return; } while(cNode!=NULL) { maths_sum=maths_sum+cNode->maths; physics_sum=physics_sum+cNode->physics; english_sum=english_sum+cNode->english; c_language_sum=c_language_sum+cNode->c_language; cNode=cNode->next; total_people++; } printf("maths_average=%.2f physics_average=%.2f english_average=%.2f c_language_average=%.2f \n", (float)(maths_sum/total_people),(float)(physics_sum/total_people),(float)( english_sum/total_pe ople), (float)(c_language_sum/total_people)); } void print_student_info(Class head) { linkNode *pNode = head->next; if(head==NULL) { printf("The link list of student's information is not exist!\n"); return; } while(pNode!=NULL) { printf("%s %d %d %d %d\n",pNode->name,pNode->maths,pNode->physics, pNode->english,pNode->c_language); pNode = pNode->next; } } void print_average_score(Average head) { Average pNode = head->aver_next; if(head==NULL) { printf("The link list of student's information is not exist!\n"); return; } while(pNode!=NULL) { printf("%s %.2f",pNode->name,pNode->per_average); if((pNode->per_average)<60.0) printf(" fail \n"); else printf("\n"); pNode = pNode->aver_next; } } void main_menu(void) { printf("************************************************************************* ******* \n"); printf("************************************************************************* ******* \n"); printf("Main menu direction: \n"); printf("0 main menu interface\n"); printf("1 enter student's information\n"); printf("2 modify student's information\n"); printf("3 delete student's information\n"); printf("4 print student's score information\n"); printf("5 print everyone's average score and class's average score\n"); printf("************************************************************************* *******\n"); printf("************************************************************************* *******\n"); printf( "please input your choice:"); scanf("%d",&menu); printf( "\n"); } #include<> #include<> #include<> #include<> /* strcmp函数原型包含*/ #define N 100 /*定义最大学生人数为100*/ struct student /*学生结构体定义*/ { char no[11]; /*学号,10位*/ char name[10];/*姓名,3个汉字*/ char grade[10];/*班级*/ char pro[20];/*专业*/ float score[5];/*储存5门功课的成绩*/ float ave;/*储存平均分*/ int year;/*入学年*/ }stu[N]; int num; void panduani(int); /*通过i的值,判断信息要查找的信息是否存在*/ void output(); /*输出学生成绩函数(公共函数)*/ void init(); /*系统初始化函数*/ void newfile(); /*建立新的数据文件*/ void read1(); /*从数据文件中读取数据*/ void weihu(); /*维护界面函数*/ void new1(); /*新增一个学生成绩函数*/ void xiugai(); /*修改学生成绩*/ void xgcj(int); /*修改成绩*/ void delete1(); /*删除学生信息函数*/ void tongji(); /*统计界面函数*/ void tongji1(); /*计算每个学生平均分*/ void tongji2(); /*计算每门课程的平均分*/ void paixu1(); /*排序函数*/ void paino(); /*按学号排序*/ void paiave(); /*按平均分排序*/ void paidkcj(); /*按单科成绩排序*/ void change(int,int); /*交换结构体数组中的两个记录*/ void outputx(int); /*选择输出单科成绩*/ void find1(); /*查找界面函数*/ int find(char sno[]); /*按学号查找*/ int findname(char cname[]);/*按姓名查找*/ void findyear(int cyear); /*按入学年查找*/ void save(); /*保存文件*/ void stop(); /*停顿函数*/ void stop() /*停顿函数(公共函数)*/ { printf("Press Any Key To Continue...\n"); getchar(); } void output() /*输出学生成绩函数(公共函数)*/ { int i,j; C 语言程序设计作业 一设计项目:学生成绩管理系统 二总体设计: 2:模块功能说明: 1 输入功能:输入学生姓名学号及成绩。 2 查看功能:输出姓名学号及各科成绩。 3 查询功能:通过学号查询学生姓名及各科成绩。 4 统计功能:统计班级学生及格率,优秀率,各个学生成绩方差等。 5 修改功能:通过输入学号修改指定学生的错误信息。 6添加功能:添加学生信息。 7删除功能:通过输入学号输入指定学生信息。 8保存功能:将学生信息保存。 9 退出系统。 3:主要函数之间的调用关系及各自功能: 主要函数的函数原型 void inputscore(void); void savescore(void); void avergescore(void); void modifyscore(void); void lookscore(void); void searchscore(void); void statistic(void); void add(void); void modify(void); void delscore(void); void menu(void); i.在菜单界面输入1,调用函数inputscore( )实现输入学生成绩信息功能。ii.在菜单界面2,调用函数lookscore( )实现学生成绩按平均分高低排序输。 出,同时lookscore()函数调用avergescore()函数实现各个学生平均分的计 算。 iii.在菜单界面输入3,调用searchscore()函数实现通过学号查找学生成绩信息功能。 iv.在菜单界面输入4,调用statistic()函数输出班级及格率,优秀率,学生成绩方差,不及格学生名单。 v.在菜单界面输入5,调用modify()函数实现通过学号修改学生成绩的功能vi.在菜单界面输入6,调用add()函数实现添加学生成绩。 vii.在菜单界面输入7,调用delscore()函数实现删除指定学生成绩。 viii.在菜单界面输入8,调用savescore()函数将学生成绩信息保存。 ix.在菜单界面输入9,退出成绩管理系统。 /* Note:Your choice is C IDE */ #include "stdio.h" #include "stdlib.h" #include "string.h" typedef struct student // 定义学生 { char name[10]; int number; char sex[2]; int math; int eglish; int clanguge; int average; } student; typedef struct unit // 定义接点 { student date; struct unit * next; } unit; unit * build() // 建立链表并返回指针 { unit *p; if ((p =(unit * )malloc( sizeof (unit))) ==NULL) { printf( "=>初始化失败!"); return 0; } else { p-> next =NULL; p-> date . number=0; // 头结点存放学生人数printf( " 初始化成功!\n" ); return p; } } void add(unit * head) // 增加学生 { unit *p,*q; int m,n =0; q=head-> next; p=(unit * )malloc( sizeof (unit)); printf( "=>请输入新生姓名!\n" ); gets(p ->date . name);fflush(stdin); printf( "=>请输入学号!\n" ); while (n ==0) C语言综合实验设计报 告 C语言成绩管理系统 班级:************ 任课教师:******** 实验老师:******** 小组成员:姓名:******** 姓名:******** 姓名:******** 一、实验目的 开发一个c语言成绩管理系统来统计分析大家的c语言学习情况。本程序主要实现对大家的学号,姓名,c语言平时成绩、实验成绩、期末考试成绩,综合评价的成绩。以及通过求平均分,方差,标准差来对大家的学习情况进行分析总结。 二、设计分工说明 组长:********** 组员:****** 组员:******* 本程序开发过程,小组成员分工如下: 录入学生成绩的数据结构和名称由全体组员共同商讨确定; 学生成绩的录入和显示在屏幕上的模块由组员***完成; 学生成绩的方差的计算和排序模块由组员***完成; 学生成绩的保存函数设计和主调用函数的模块的设计由组员***完成。 三、问题概述 要实现这样一个学生成绩信息管理系统,程序的开发中应该涉及到以下的内容: 1、编写一个统一的函数来调用各功能函数; 2、处理新增学生信息的操作; 3、显示输出全部记录的信息; 4、计算学生成绩的平均值、方差和标准差的函数设计; 5、根据学生记录的某一属性对记录排序; 6、对所录入的信息的保存函数设计; 同时,还应有合适的数据变量和结构参与各功能的运算。 四、问题分析 由于信息管理系统中的数据通常是不确定的多条记录,并且我们小组成员的能力有限,所以只是选择了管理一个班级(数据有限)的程序设计。 程序设计中主要是采用了结构体的数据形式,主函数调用,文件的写入,以及子函数配合的组合设计。主要录入了本班学生的学号、姓名、平时成绩、实验成绩、期末成绩等。其中由于我们学校的学号比较长(由15位),因此用双精度实数类型(double)类型,但在输出的时候控制称“15.0lf”的形式输出;姓名为字符型(char);平时成绩、实验成绩、期末成绩等都是单精度实数类型(float)。 由于信息管理这类系统,数据通常是不确定多条记录,故本系统应采用链表的结构来维持整个数据集,同时,根据题目要求,学生成绩信息包含学号、姓名、班级、计算机、专业英语、总分等属性,各属性中,学号为整型,姓名和班级为字符串,计算机、专业英语和总分应为浮点型,对一个学生记录应设置一个结构体,同时学生记录链表应包含这样的结构体,以及指向下一条记录的指针。为了便于各功能模块对整个链表的操作,链表的头指针要定义为全局变量。 下面具体分析各功能模块操作: 新建录入函数实际上就是一个for循环和标准输入输出函数的组合,现要求输入人数,然后就是标准输入输出进行数据的输入。最后再综合算一下总评成绩。完成数据的输入。 显示信息函数实际就是for语句和标准输出函数的结合,完成对刚才录入数据的显示输出。 一、学生成绩分析系统 1、系统概述 学生成绩分析系统提供多角度的学生成绩统计分析,以清晰、直观的图表形式显示统计结果,并可以方便的导出数据进行传阅和存档保存。 2、功能说明 ①具有新增考试权限的用户新增一次考试。 ②对考试进行管理,包括考试的开启,考试的删除等,如果在新增考试时,对 科目设置的满分和成绩录入人员有变动,也可以在这里重新设置和修改。③开启成绩录入的考试,拥有成绩录入权限的用户看到考试时,可以为考试录 入成绩,成绩的录入可以逐个录入也可以通过Excel文件批量导入,导入成绩的模板可以在“导出成绩模板”处导出。 ④成绩录入结束后,具有考试管理权限的用户可以结束考试。结束考试时对学 生成绩进行分析汇总,生成报表形式。 ⑤不同权限的教师用户登录系统后,可以对学生成绩进行查询统计,比如:任 课教师查询统计、班主任查询统计、教务处查询统计等;学生也可以登录系统后查询自己的成绩。 ⑥一次考试结束,系统将永久保存此次学生成绩分析的结果。 2.1新增考试 用于新增一次考试,拥有新增考试权限的用户可以新增考试,具体步骤如下:?设置考试标题 通过选择考试时间,参考年级和考试类型,系统自动生成考试标题,如下图所示: 点击日期输入框,弹出日期输入控件选择考试日期;通过下来列表框选择参考年级和此次考试的类型,选择完成后,进入下一步,选择考试班级。 ?选择考试班级 班级列表根据考试标题选择的年级显示当前年级下的所有班级,如下图所示: 复选框为?的为选中的班级,选中班级可以通过鼠标单击复选框逐个选中,也可以通过“全选| 反选| 取消全部”控制日志的选中状态: ?点击“全选”选中当前页所有班级 ?点击“取消全部”取消所有选中班级 ?点击“反选”选中当前未选中的班级,取消当前选中的班级 选择完成后,进入下一步,选择考试科目。 程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:(1)主菜单学生成绩管理系统 1、成绩录入 2、成绩查询 3、成绩统计 4、退出(2)各菜单项功能① 成绩录入:输入学生的学号、姓名及三门课的成绩;② 成绩查询:(至少一种查询方式)。 v 按学号查询学生记录。 v 查询不及格学生的记录。③成绩统计: v 计算学生的平均分; v 根据学生的平均分高低,对学生的数据进行排序后输出; v 对学生单科成绩排序,输出学生姓名与该科成绩;④退出系统:退出整个系统(即主菜单)。(3)结构体数组: #define N 30 struct student {int num; /* 定义学号*/ char name[20]; /* 定义姓名*/ float score[3]; /* 定义存贮三门课成绩的数组*/ float average; /* 定义平均成绩*/ };struct student stu[N]; /* 定义结构体数组,存贮多个学生的记录*/ . #include #include 目录 ——学生成绩管理程序题目要求 (2) 设计目的 (2) 总体设计 (3) 详细设计 (3) 调试与测试 (12) 源程序 (14) 总结 (30) 学生成绩管理程序 一.题目要求 1.问题描述: 对在校学生几门课程的考试成绩进行统一管理.每个学生记录包括学号,姓名,年龄,数学,英语,物理成绩,默认以学号为序存放. 2.要求: (1)一个文件按以班为单位存储学生记录. (2)将允许的操作分为四种,以A,B ,C,D,E,F为标志: A:插入一个学生记录; B:修改学生记录; C:删除一个学生记录; D:查找一个学生记录; E:浏览学生成绩: F:退出 3.计算学生的总成绩. 4.按学号排序输出全班学生成绩表 . 二.设计目的 根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择. 三.总体设计 根据上面的需求分析,可以将这个系统分为以下模块:输入模块,修改模块,删除模块,查找模块,显示模块. 四.详细设计 1.主函数: 主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择. 流程图: [程序]: //#include "head.h" int menu_select() { char c; printf("\n\n"); printf(" | 1. 增加学生记录 5.统计信息|\n"); printf(" | 2. 查询学生记录 6.打开文件|\n"); printf(" | 3. 修改学生记录7.保存文件|\n"); printf(" | 4. 学生纪录排序8.显示记录|\n"); printf(" | 0. 退出系统|\n"); printf("\n\n"); printf("请选择(0-8):"); c=getchar(); getchar(); return (c-'0'); } 2.输入模块: [分析]: 单独看各数据信息,学号,姓名是字符型,可以采用字符型数组;分数为整数,采用整数;数据信息存放在文件中,一条记录对应一个学生,既符合习惯又方便信息管理. 如果要存放若干学生信息就用结构体数组: void addrecord(student stud[]) { int i=0,j,num; char str[5]; if(numstus!=0) { 学生成绩综合统计表 4.6 学生成绩综合统计表(一)案例背景 期末考试后,除了要统计各个分数段人数分布情况外(前面章节已经介绍了多种统计分数段的方法)可能还要统计年级和各班的及格人数与及格率,优秀人数与优秀率,以及各班里前、后若干名(如年级前20名和后20名)的人数和比例等。 本案例以某中学高一年级4个教学班100名学生的期末考试的3科成绩和总分为样本,统计全年级4个班级学生的期末考试及格人数与及格率,优秀人数与优秀率,以及各班里年级前20名和后20名的人数和比例,以便进行综合分析。同时将前20名和后20名学生的成绩在统计表中标示出来,以使得前、后20名的成绩能够在成绩表突出显示。 要实现本案例中的功能,学员应该掌握以下EXCEL技术点 ●基础知识条件格式 ●函数应用ISNUMBER函数SUM函数,LARGE函数,SMALL函数 ●综合应用函数嵌套数组公式。 最总效果展示 4.6.1创建原始数据表 Step 1创建工作簿、重名工作表 创建工作簿“综合统计表.xls”,然后将工作表重命名为“统计表”,删除多余工作表。 Step2输入原始成绩 ①在单元格A49输入表格标题:“高一年级期末考试成绩统计表”,选择你好单元格区域A49:G49,单击“合并及居中”按钮,字体、字型、字号设置为黑体加粗16号。 ②在单元格区域A50:G50输入字段名:“班级”,“学号”,“姓名”,“语文”,“数学“,“英语”和“总分“。 ③在单元格区域A51:F150输入全年级4个班100名学生的“语文”,“数学“,“英语”成绩 “=SUM(D51:F51) ”,④在单元格G51输入公式: 然后按键确认,计算出第一个学生的“总分”。 ⑤选中单元格G51,双击单元格G51右下角的填充柄即可完成其余学生“总分”的统计工作。 ⑥选中单元格区域A50:G150,按图2样式设 学院 课程设计报告 C语言程序设计课程设计 专业电气工程及其自动化班级 姓名 学号 指导教师 年月 新能源与动力工程学院课程设计任务书课程名称:C语言程序设计课程设计指导教师(签名): 班级:姓名学号: 指导教师评语及成绩评定表 指导教师签字: 年月日 目录 一.引言........................................................ - 1 - 1.1 设计目的.......................................... - 1 - 1.2意义............................................... - 1 - 1.3内容............................................... - 1 - 1.4主要任务........................................... - 2 - 二.主要功能和功能.............................................. - 3 - 2.1主要功能........................................... - 3 - 2.2要求............................................... - 3 - 三.系统的数据需求及性能分析..................................... - 4 - 3.1 数据需求.......................................... - 4 - 3.2系统的性能分析..................................... - 4 - 四. 输入输出要求................................................ - 5 - 五.整体框架结构................................................ - 6 - 六.学生成绩业务管理图.......................................... - 7 - 七.系统概要设计................................................ - 8 - 7.1 程序的模块组成.................................... - 8 - 7.2 学生信息结构数组.................................. - 8 - 7.3 各个程序的主要功能介绍:.......................... - 9 - 八.系统详细设计................................................ - 10 - 8.1函数介绍.......................................... - 10 - 九. 调试与测试................................................. - 13 - 9.1系统调试.......................................... - 13 - 9.2系统测试.......................................... - 13 - 十.总结....................................................... - 20 - 参考文献....................................................... - 22 - 附录源代码................................................... - 23 - #include 武汉理工大学华夏学院课程设计报告书 课程名称:数据结构 题目:用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日 C语言学生成绩管理系统实验报告 HUNAN UNIVERSITY 程序设计训练 报告 题目学生成绩管理系统 学生姓名 学生学号 专业班级 指导老师 湖南大学程序设计训练报告 目录 一程序功能简介 (3) 二本人完成的主要工作 (3) 三设计方案 (3) 1)设计分析 (3) 2)模块的功能及程序分析 (4) 3)核心算法流程图 (7) 4)核心源程序模块 (8) 5)操作方法简 介 (8) 6)实验结果 (9) 8)设计体会 (11) 四附录 (12) 一、程序功能简介; 本程序作为一个学生成绩管理系统,用户能够首先使用管 理员模式初始化该系统。初始化完成之后,用户能够选择使用成绩记录人模式进入系统,对学生成绩进行记录。系统自动储存所记录的学生成绩,然后用户可根据不同需要来选择不同的功能来使用程序,其中包括成绩查询与增减,成绩排序,成绩分析等功能。 二、本人完成的主要工作; 程序设计分析,绘制程序流程图,写出大致结构算法以及各个核心算法模块,写出核心源程序,对源程序进行算法优化,对源代码进行多次试验验证其正确性,完成源代码的测试以及代码书写规范检测。 三、设计方案; 1)设计分析; 首先拿到这个题目,我就开始思考如何将这个看似简单的系统做的较为完善,而不是简简单单的学生成绩管理 系统,学生管理系统自然是这个题目的核心,从中发散思 维,我想到了几个比较细小的地方。例如:如何很好的将 程序中的功能步骤化,系统化以及便利化。基于C语言程 序的特点,我还联想到了对信息的保存问题。这些问题都 随着代码的一步一步完善而解决。管理员系统与查询系统 的选择很好的解决了这些问题。 2)模块的功能及程序说明; 一、原始分和标准分的定义 原始分是考试后直接从卷面上得到的分数。 标准分是指通过原始分转化而得到的一种地位量数,它反映考生成绩在全体考生成绩中的位置。因此,无论试题难或易,无论整体原始分偏高或偏低,整体标准分都没有什么变化。 二、标准分的计算 根据教育统计学的原理,标准分Z是原始分与平均分的离差以标准差为单位的分数,用公式表示为:Z=(X-A)/S 其中:X为该次考试中考生个人所得的原始分;A为该次考试中全体考生的平均分;S为该次考试分数的标准差。 通过转换后得到的标准分Z在一般情况下都带小数,而且会出现负值,实际使用时不太方便,所以还要对Z分数进行线性变换(T变换):T=500+100Z 这就是我们通常所说的标准分。这种标准分的平均值为500,也就是说,如果某考生的标准分为500,则该生的成绩处于此次考试的中间位置。 标准分有如下性质: ⑴平均值为0,标准差为1; ⑵分数之间等距,可以作加减运算; ⑶原始分转换为标准分是线性转换,不会改变原始分的分布形状,也不改变原来分数的位置次序。 三、使用标准分比使用原始分有什么好处? 根据教育统计学的原理,原始分转换成标准分的意义可以从下面的比较中反映出来: ⑴单个标准分能够反映考生成绩在全体考生成绩中的位置,而单个原始分则不能。 例如,某考生某科的原始成绩为85分,无法说明其这科成绩究竟如何,因为这与试题的难度有关,与总体考生的分数有关。如果某考生某科的标准分为650,即Z分数为1.5,则通过查正态分布表,查得对应的百分比为0.9332,于是我们知道,该考生的成绩超过了93.32%的考生的成绩,这就是分数解释的标准化。 ⑵不同学科的原始分不可比,而不同学科的标准分是可比的。 不同的学科,由于试题的难易程度不同,各学科的分数价值也就不同。例如某考生的语文原始成绩为80分,数学原始成绩为70分,从原始分看,其语文成绩优于数学成绩。但如果这次考试全体考生的语文原始分平均为86分,而数学原始分平均为60分,则该考生的语文成绩处于全体考生的平均水平之下,而数学成绩处于全体考生的平均水平之上,即该生的数学成绩实质上优于语文成绩。从标准分的角度来衡量,其语文标准分小于500分,而数学标准分大于500分。由于标准分代表了原始分在整体原始分中的位置,因此是可比的。 ⑶不同学科的原始分不可加,而不同学科的标准分之间具有可加性。 既然不同学科的原始分不可比,那么也就不可加。多学科成绩,只有在各科成绩的平均值相同、标准差也相同的条件下,才能相加,否则是不科学的。各学科原始分的平均值以及标准差一般都不相同,而各学科的标准分的平均值以及标准差都基本相同,因此,各科的标准分是可加的。 四、什么是增值? 教学增值就是评价时将学生原有基础一并考虑,用以比较原有基础与接受教师教育后成绩增进的幅度。增值评价分为两步:首先根据原有基础得到一个 一、课程设计的内容(1)信息维护: 要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息 (2)信息查询: 要求:查询时可实现按姓名查询、按学号查询 (3)成绩统计: 要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。 (4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分) (二)其它要求: (1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读 (2)至少采用文本菜单界面(如果能采用图形菜单界面更好) (3)学生可自动增加新功能模块(视情况可另外加分) (4)写出课程设计报告,具体要求见相关说明文档 二、课程设计的要求与数据 1、进一步掌握和利用C语言进行程设计的能力; 2、进一步理解和运用结构化程序设计的思想和方法; 3、初步掌握开发一个小型实用系统的基本方法; 4、学会调试一个较长程序的基本方法; 5、学会利用流程图或N-S图表示算法; 6、掌握书写程序设计开发文档的能力。 三、课程设计应完成的工作 1、编写完成相应题目的程序; 2、编写课程设计报告,课程设计报告的内容应包括以下6个部分: 1) 需求分析:包括设计题目、设计要求以及系统功能需求分析; 2) 总体设计:包括系统总体设计框架和系统功能模块图; 3) 详细设计:包括主要功能模块的算法设计思路以及对应的工作流程 图; 4) 调试分析过程描述:包括测试数据、测试输出结果,以及对程序调 试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解 决方法及效果等,适当的包含结果截图); 5) 总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些 地方需要改进?课程设计过程中的学习体会与收获、对本次课程设计 的认识以及自己的建议等内容; 6) 附录:主要源程序代码,含必要的注释。 3、答辩:在实验室建立程序运行的环境,并在指导教师的监督下,独立解 决问题、运行程序和回答教师提出的问题。 目录 1 设计目的与要求………………………………………………………………P4 2 总体设计………………………………………………………………………P4 3 详细设计………………………………………………………………………P5 3.1功能模块设计………………………………………………………………P5 3.1.1 XX功能模块(可选) …………………………………………………P5 3.1.2 YY功能模块(可选) …………………………………………………P6 3.1.3 ZZ功能模块(可选)…………………………………………………P7 3.2数据结构设计……………………………………………………………P8 4调试分析……………………………………………………………………P9 4.1结构体……………………………………………………………………P9 4.2链表………………………………………………………………………P11 5遇到的问题及解决方法分析…………………………………………………P12 6 总结……………………………………………………………………………P13 7源文件…………………………………………………………………………P13 7.1链表………………………………………………………………………P13 7.2结构体……………………………………………………………………P28 1、目的与要求 一目的:编制一程序实现对学生成绩的管理,让自己既动手又动脑,独立实 长清区教师培训模块五 班级成绩统计与分析 长清实验中学王长泉 ●主要内容: 以任务驱动的方式,通过完善“学生成绩表”中的数据,并计算出学生的总分、平均分,统计出优秀率、及格率、优秀人数、及格人数、最高分和最低分,给学生排出名次,并以等级方式显示。掌握利用EXCEL进行班级成绩统计与分析的方法。 ●快速操作技巧 1、快速得到合适列宽和行高 如果各列中数据宽度一致的话,我们可以选中各列,然后把鼠标移至列标题的右边框,待鼠标变成双向箭头时拖动至合适的宽度,这样就可以得到统一列宽的各列了。如果各列中数据宽度不一致的话,我们经常要逐列进行调整,非常麻烦。此时可以选中含有数据的各列,同样将鼠标移至其中一个列标题的右边框,当鼠标指针变成双向箭头时双击鼠标左键,可以立刻将各列的列宽设置为“最适合的列宽”,即各列宽度为恰好可以完整显示单元格数据,用这个方法也可以得到“最适合的行高”,只是要双击行标题的下边框。 2、快速移动活动单元格 经常要在数据区域的最开始和最末尾处、最左端和最右端处来回折腾吗?其实,用不着多次单击滚动条,也不用多次滚动鼠标的滚轮的。只要将鼠标指向当前单元格的下边框,当鼠标指针变为四个箭头的十字形时双击,就可以使活动单元格迅速定位于当前数据区域中当前列的最后一行。双击单元格的上边框可以到达最上一行,而双击左边框和右边框则可以分别迅速到达最左端和最右端。 3、快速选中单元格区域 选中单元格区域快速的方法是利用名称框。如果我们清楚地知道应该选择哪些区域,那么直接在编辑栏左侧的“名称框”内填写选择区域是最简便的了。比如我们要同时选中A2:D15单元格区域和H列,那么就可以在名称框内直接输入“A2:D15,H:H”,按下回车键,则这些区域就被直接选中了。 4、快速拆分窗口 为方便查看表格的不同部分,我们经常要对工作表进行垂直或水平拆分。快速拆 目录 第一章绪论-------------------------------------------------------- 第二章需求分析-------------------------------------------------- 2.1 程序的功能------------------------------------------ 2.2 输入输出的要求------------------------------------ 第三章概要设计-------------------------------------------------- 3.1程序的模块组成------------------------------------- 3.2学生信息结构数组---------------------------------- 3.3各个程序的功能介绍-------------------------------第四章详细设计-------------------------------------------------- 4.1总流程图---------------------------------------------- 4.2统计函数流程图-------------------------------------第五章测试-------------------------------------------------------- 5.1系统调试---------------------------------------------- 5.2结果分析----------------------------------------------第六章使用说明-------------------------------------------------- 第七章总结-------------------------------------------------------- 附录--------------------------------------------------------------------- 评分表------------------------------------------------------------------ C程序学生管理系统 以下是用c语言编写的学生成绩管理系统的简单代码,可以用vc运行(供参考)#include"stdio.h" #include"stdlib.h" #include"string.h" typedef struct student//定义学生 { char name[10]; int number; char sex[2]; int math; int eglish; int clanguge; int average; }student; typedef struct unit//定义接点 { student date; struct unit *next; }unit; unit* build()//建立链表并返回指针 { unit *p; if((p=(unit*)malloc(sizeof(unit)))==NULL) { printf("=>初始化失败!"); return 0; } else {p->next=NULL; p->date.number=0;//头结点存放学生人数 printf("初始化成功!\n"); return p; } } void add(unit *head)//增加学生 { unit *p,*q; int m,n=0; q=head->next; p=(unit*)malloc(sizeof(unit)); printf("=>请输入新生姓名!\n"); gets(p->https://www.360docs.net/doc/ab14434332.html,);fflush(stdin); printf("=>请输入学号!\n"); while(n==0) { scanf("%d",&m);fflush(stdin); if(q==NULL) n=1; while(q) { if(q->date.number==m) { printf("=>你输入的学号与已有同学的学号相同,请重新输入!\n"); q=head->next; break; } else { q=q->next; if(q==NULL) n=1; } } } p->date.number=m; printf("=>请输入性别!\n"); gets(p->date.sex);fflush(stdin); printf("=>请输入数学成绩\n"); scanf("%d",&m);fflush(stdin); p->date.math=m; printf("=>请输入英语成绩\n"); scanf("%d",&m);fflush(stdin); p->date.eglish=m; printf("=>请输入c语言成绩\n"); scanf("%d",&m);fflush(stdin); p->date.clanguge=m; p->date.average=(p->date.math+p->date.eglish+p->date.clanguge); q=head->next; head->next=p;C语言课程设计-学生成绩管理系统-完整版
c语言学生成绩管理系统含源代码
学生成绩管理系统代码c语言编写
c语言成绩管理系统
学生成绩分析系统
用c语言编写一个成绩管理系统
c语言学生成绩管理系统代码
c语言课程设计学生成绩管理系统
学生成绩综合统计表
C语言班级成绩管理系统
学生成绩管理系统C语言版
C语言实现学生成绩管理系统
C语言学生成绩管理系统实验报告
如何对学生考试成绩进行数据分析解读
C语言课程设计成绩管理系统
班级成绩统计与分析
C语言课程设计-班级成绩管理系统 10块!
学生成绩管理系统c语言代码(供参考)