学生管理系统课程设计_第1页
学生管理系统课程设计_第2页
学生管理系统课程设计_第3页
学生管理系统课程设计_第4页
学生管理系统课程设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

重庆理工大学课程设计课程 程序设计基础C题目 C语言综合程序设计院系名称商贸信息学院班级 计算机应用技术一班学生姓名吴昊学号20920310119指导教师 卢玲 评阅教师 时间2010年6月1问题描述5.4题目五:学生成绩管理系统设计学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)。主要功能:(1) 能按学期、按班级完成对学生成绩的录入、修改(2) 能按班级统计学生的成绩,求学生的总分及平均分,设计并输出统计报表(3) 能查询学生成绩,不及格科目及学生名单(4) 能按班级输出学生的成绩单(5) 能按班级,按课程,对学生成绩进行排序。要求:使用二进制文件方式存储数据,系统以菜单方式工作2系统分析2.1题目要求本系统可以对学生的成绩信息进行简单的管理操作:主菜单包括9个选项:学生成绩浏览如果未导入学生成绩,系统会提示导入成绩,成绩导入后,可以用本功能浏览成绩。学生成绩录入当学生成绩未导入是会自动提示对学生成绩的录入,可以按学期,按班级完成对学生成绩的录入。学生成绩修改当需要修改学生成绩时,本功能可以修改学生的成绩,可以按学期,按班级完成对学生成绩的修改。按班级统计学生成绩的总分和平均分可以对计算学生的成绩的总分和平均分,并按班级统计出来。学生成绩查询完成对学生成绩的查询,本功能是按照学号查询。学生成绩保存可以将学生成绩存入磁盘文件,并从磁盘里读出学生成绩,信息保存在e:\\wh.dat。学生成绩未存盘时导入当磁盘文件不存在会提示导入学生的成绩。按班级输出学生成绩可以按班级输出学生的成绩单,其中包括学生的四门课的成绩不及格科目和学生的名单。学生成绩排序能按班级,按课程,对学生成绩进行排序。按班级排序时可以对某个班级学生的成绩排序,按课程排序时是对某一门课的排序。2.2算法设计模块一:学生成绩浏览模块该模块实现对学生成绩的浏览功能,但前提是学生的信息已经保存,实现算法如下:输出学生信息的标题检索信息数组用循环实现对学生信息的对应输出模块二:学生成绩录入模块该模块实现对学生成绩的录入功能,通过菜单的选择,调用两个子函数实现成绩的录入。输出按不同方式录入学生成绩的选择菜单,一是按学期录入,二是按班级录入调用按学期录入的函数选择学期用循环完成对学生信息的录入保存学生信息,并回到录入函数调用按班级录入的函数选择班级用循环完成对学生信息的录入保存学生信息,并回到录入函数模块三:学生成绩修改模块该模块实现对学生成绩的修改功能,通过菜单的选择,调用两个子函数实现对学生的成绩的修改。输出按不同方式修改学生成绩的选择菜单,一是按学期修改,二是按班级修改调用按学期修改的函数选择学期用循环完成对学生成绩的修改,修改的科目包括语文,数学,英语,计算机保存学生成绩信息,并回到修改函数调用按班级修改的函数选择班级用循环完成对学生成绩的修改,修改的科目包括语文,数学,英语,计算机保存学生成绩信息,并回到修改函数模块四:按班级统计学生成绩的总分和平均分模块该模块可以计算学生成绩的总分和平均分输出选择的班级通过检索数组选出某个班通过循环输出这个班的每个学生的总分和平均分模块五:学生成绩查询模块该模块能通过学生的学号查询学生的成绩输入要查询的学生的学号通过检索数组选出对应的学生调用输出函数输出学生相关的信息模块六:学生成绩保存模块该模块可以保存学生信息的导入,修改,录入定义文件的保存位置通过数组写入要保存的文件关闭磁盘文件模块七:学生成绩为存盘时导入模块该模块可以在学生成绩为存盘是完成对学生成绩的导入并存盘输出是否创建的提示选择是否创建提示已经导入,并关闭磁盘文件模块八:按班级输出学生成绩模块该模块可以从多个班级里选择某班学生的成绩并输出输入要选择的班级检索数组选出该班输出该班学生的相关信息模块九:学生成绩排序模块该模块可以对学生的成绩按不同的方式排序输出排序方式的菜单调用按班级排序的函数输出菜单后用冒泡法对总分进行比较,按从大到小的顺序输出保存并回到排序函数调用按课程对学生排序的函数通过冒泡法分别对语文数学,英语,计算机的成绩进行对比,按从大到小输出通过冒泡法分别对语文数学,英语,计算机的成绩进行对比,按从大到小输出保存并回到排序的函数模块十:退出模块开始退出系统开始2.3流程图读取文件*分4和均生绩存繇成保为盘导生绩序捋成排*分4和均生绩存繇成保为盘导生绩序捋成排从大到小2.4关键问题2.4关键问题这个系统最主要是要掌握各个函数的方法,比比如说成绩的录入,修改,成绩的查询等。这个系统最主要是要在对学生成绩的录入,修改,求平均分和总分,输出学生的成绩时都要求按不同的方式完成,比如录入,修改,输出成绩拄等。这里我写一个菜单,用一个主函数,分别调用两个子函数。在成绩修改时注意输出的数据的对应,最后哟啊保存修改的数据,这里最容易被忽略,如果不保存的话,就白费心机啦。注意自己定义的头文件的数据类型和源文件里面的数据类型要符合,这个函数有点大,随意这种细节一般容易出错。在输入一个函数数据的时候,应该清空键盘区,很容易出错。总之来说,编译的时候会有很多错,但是经过改正过后,发现很多都是不必要的或是细节问题。3系统实现3.1题目一#include<stdio.h>#include<windows.h>#include<string.h>#include<stdlib.h>#include"student.h”intnumber;voidview(structstudentpeople]])(inti;printf("\t\t\t\t学生成绩管理系统\n〃);printf(〃\t\t\n〃);printf(〃\t\t\n〃);printf("学期\t学号\t班别\t姓名\t语文\t数学\t英语\t计算机\n〃);printf(〃****************************************************************\n〃);for(i=0;i<=number-1;i++)(printf(〃%s\t〃,people[i].sem);printf(〃%s\t〃,people[i].num);printf(〃%d\t〃,people[i].clas);printf(〃%s\t〃,people[i].name);printf(〃%4d\t〃,people[i].chinese);printf(〃%4d\t〃,people[i].math);printf(〃%4d\t〃,people[i].english);printf(〃%4d\t〃,people[i].computer);printf(〃\n〃);printf(〃 \n〃);}}//********************************************************************************************〃按班级统计学生总分和平均分//********************************************************************************************voidgrade(structstudentpeople]])(intclas;intaver=0;intsum=0;scanf(〃%d〃,&clas);for(inti=0;i<number;i++)(if(people[i].clas==clas) 〃查找班级(sum二people[i].chinese+people[i].math+people[i].english+people[i].computer;aver=sum/4;printf("第%d个学生总分为:%d\n〃,i+1,sum);printf("第%d个学生的平均分为:%d\n〃,i+1,aver);}}}//********************************************************************************************〃输出某一个学生的信息//********************************************************************************************voidprnt(structstudentpeople口,inti)(printf(" \n");printf("姓名\t语文\t数学\t英语\t计算机\t不及格科目\七学生名单\n〃);printf(" \n〃);for(i=0;i<number;i++)(printf(〃%s\t〃,people[i].name);printf(〃%.1f\t〃,people[i].chinese);printf(〃%.1f\t〃,people[i].math);printf(〃%.1f\t〃,people[i].english);printf(〃%.1f\t〃,people[i].computer);while(1) 〃输出不及格的学生的成绩(if(people[i].chinese<60)printf(〃语文,〃);if(people[i].math<60)printf("数学,”);if(people[i].english<60)printf(〃英语,〃);if(people[i].computer<60)printf(〃计算机\t〃);break;}printf(〃%s〃,people[i].name); //输出学生的名单}printf(〃\n〃);printf(〃 \n〃);}//********************************************************************************************// 按照学号查询学生信息//********************************************************************************************voidsearch(structstudentpeople口)(charnum[20];inti;printf(-\n请输入你要查询的学生学号:〃);fflush(stdin);gets(num);for(i=0;i<number;i++)(if(strcmp(people[i].num,num)==0)(prnt(people,i);}}}//********************************************************************************************// 按班级输出学生的成绩单//********************************************************************************************voidsearch_clas(structstudentpeople]])intclas;printf("请输入班级:〃);fflush(stdin);scanf(〃%d〃,&clas);for(inti=0;i<number;i++)(if(people[i].clas==clas)(prnt(people,i); 〃调用prnt函数输出成绩单}}}//********************************************************************************************// 将信息存入磁盘文件//********************************************************************************************voidsave(structstudentpeople口)(FILE*fp;inti;fp二fopen(〃e:\\wh.dat〃,〃wb+〃);for(i=0;i<number;i++)(fwrite(&people[i],sizeof(student),1,fp);}fclose(fp); //关闭磁盘文件}//***********************************************// 按学期修改学生成绩//***********************************************voidxiugai_sem(structstudentpeople口)intchinese,math,english,computer; //定义新的成绩变量charsem[20];printf("输入学期:");fflush(stdin);scanf(〃%s〃,sem);for(inti=0;i<number;i++)(if(strcmp(people[i].sem,sem)==0)(prnt(people,i);}printf("修改语文,数学,英语,计算机的成绩:〃);scanf(〃%f%f%f%f〃,&chinese,&math,&english,&computer);people[i].chinese二chinese;people[i].math二math;people[i].english二english;people[i].computer二computer; //把新的成绩赋给people[i]}save(people);}//***********************************************// 按班级修改学生成绩//***********************************************voidxiugai_clas(structstudentpeople]])(intchinese,math,english,computer;intclas;printf("输入班级:〃);fflush(stdin);scanf(〃%d〃,&clas);for(inti=0;i<number;i++)if(people[i].clas==clas)(prnt(people,i);}printf(〃修改语文,数学,英语,计算机的成绩:〃);scanf(〃%f%f%f%f〃,&chinese,&math,&english,&computer);people[i].chinese二Chinese;people[i].math二math;people[i].english二english;people[i].computer二computer;}save(people);}voidxiugai(structstudentpeople口) //修改学生成绩(intxuan;while(1)(printf(〃************1按学期修改学生成绩\n〃);printf(〃************2按班级修改成绩\n〃);printf(〃************0返回上一级目录\n〃);printf(〃请选择:\n〃);scanf(〃%d〃,&xuan);switch(xuan)(case1:xiugai_sem(people);break;case2:xiugai_clas(people);break;}if(xuan==0)break;}}//*********************************************// 按学期录入学生成绩//*********************************************voidluru_sem(structstudentpeople口)(structstudenttemp;printf(〃请输入学生人数\n〃);scanf(〃%d〃,&number);〃选择要输入学生的学期printf("学期\n〃);〃选择要输入学生的学期fflush(stdin);scanf(〃%s〃,temp.sem);for(inti=0;i<number;i++)(printf("请输入学生信息:\n〃);printf(〃学号:〃);fflush(stdin);gets(temp.num);printf("班别:〃);fflush(stdin);scanf(〃%d〃,&temp.clas);printf("姓名:〃);fflush(stdin);gets();printf("学生成绩:〃);fflush(stdin);scanf(〃%d〃,&temp.chinese);fflush(stdin);scanf(〃%d〃,&temp.math);fflush(stdin);scanf(〃%d〃,&temp.english);fflush(stdin);scanf(〃%d〃,&puter);printf(〃\n〃);people[i]=temp;}save(people);}//***********************************************// 按班级录入学生成绩//***********************************************voidluru_clas(structstudentpeople]])(structstudenttemp;printf(〃请输入学生人数:〃);scanf(〃%d〃,&number);//输入要录入的学生的班级printf(〃班级:〃);//输入要录入的学生的班级fflush(stdin);scanf(〃%d〃,&temp.clas);inti;for(i=0;i<number;i++)(printf("请输入学生信息:\n〃);printf("学期:〃);scanf(〃%s〃,temp.sem);printf(〃学号:〃);fflush(stdin);gets(temp.num);printf("姓名:〃);fflush(stdin);gets();printf("学生成绩:〃);fflush(stdin);scanf(〃%d〃,&temp.chinese);fflush(stdin);scanf(〃%d〃,&temp.math);fflush(stdin);scanf(〃%d〃,&temp.english);fflush(stdin);scanf(〃%d〃,&puter);printf(〃\n〃);people[i]=temp;}save(people); //保存}voidluru(structstudentpeople口) //录入学生成绩(intxuan;while(1)(printf(〃************1按学期录入学生成绩\n〃);printf(〃************2按班级录入学生成绩\n〃);printf(〃************0返回上一级目录\n〃);scanf(〃%d〃,&xuan);switch(xuan)(printf(〃请选择:\n〃);case1:luru_sem(people);break;case2:luru_clas(people);break;}if(xuan==0)break;}}//*****************************************// 导入磁盘文件信息//*****************************************voidload(structstudentpeople口)(FILE*fp;if((fp二fopen(〃e:\\wh.dat〃,〃rb+〃))==NULL)(printf("磁盘并不存在,是否创建?(y/n)〃);if(getchar()=='y')(luru(people);return;}elseexit(0);}inti=0;printf("\n正在导入数据,请等待 \n〃);while(!feof(fp))(fread(&people[i],sizeof(student),1,fp);i++;}fclose(fp); //关闭磁盘文件number=--i;printf("\n导入成功!\n〃);}//*****************************************// 按班级对学生成绩排序//*****************************************voidpaixu_clas(structstudentpeople口)(structstudentarry[1024],temp; 〃新定义一个数组arry[]intclas,j=0;printf("请输入班级:〃);fflush(stdin);scanf(〃%d〃,&clas);for(inti=0;i<number;i++)(if(people[i].clas==clas)(arry[j]=people[i];j++;}printf(〃\t\n〃);printf(〃学期\t学号\t班别\t姓名\t语文\t数学\t英语\t计算机\t总分\n〃);printf(〃***********************************************************************\n〃);for(intm=0;m<j-1;m++)(for(intn=0;n<j-1-m;n++)if(arry[n].chinese+arry[n].computer+arry[n].math+arry[n].english<arry[n+1].chinese+arry[n+1].computer+arry[n+1].math+arry[n+1].english)(temp=arry[n];arry[n]=arry[n+1];arry[n+1]=temp;}}for(i=0;i<j;i++)(printf(〃%s\t〃,arry[i].sem);printf(〃%s\t〃,arry[i].num);printf(〃%d\t〃,arry[i].clas);printf(〃%s\t〃,arry[i].name);printf(〃%4d\t〃,arry[i].chinese);printf(〃%4d\t〃,arry[i].math);printf(〃%4d\t〃,arry[i].english);printf(〃%4d\t〃,arry[i].computer);printf(〃%4d\t〃,arry[i].computer+arry[i].chinese+arry[i].math+arry[i].english);printf(〃\n〃);printf(〃 \n");}}//*****************************************// 按课程对学生成绩排序//*****************************************voidpaixu_ke(structstudentpeople口)(structstudenttemp;for(inti=0;i<number-1;i++)for(intj=0;j<number-1-i;j++)(if(people[j].chinese<people[j+1].chinese)(temp二people[j];people[j]=people[j+1];people[j+1]=temp;}}printf(〃\t\t\n〃);printf("学期\t学号\t班别\t姓名\t语文\n〃);printf(〃**************************************\n〃);for(i=0;i<number;i++)(printf(〃%s\t〃,people[i].sem);printf(〃%s\t〃,people[i].num);printf(〃%d\t〃,people[i].clas);printf(〃%s\t〃,people[i].name);printf(〃%4d\t\n〃,people[i].chinese);}for(i=0;i<number-1;i++)for(intj=0;j<number-1-i;j++)if(people[j].chinese<people[j+1].chinese)(temp二people[j];people[j]=people[j+1];people[j+1]=temp;}}printf(〃\t\t\n〃);printf("学期\t学号\t班别\t姓名\t数学\n〃);printf(〃***************************************\n〃);for(i=0;i<number;i++)(printf(〃%s\t〃,people[i].sem);printf(〃%s\t〃,people[i].num);printf(〃%d\t〃,people[i].clas);printf(〃%s\t〃,people[i].name);printf(〃%4d\t\n〃,people[i].math);}for(i=0;i<number-1;i++)for(intj=0;j<number-1-i;j++)(if(people[j].math<people[j+1].math)(temp二people[j];people[j]=people[j+1];people[j+1]=temp;}}printf("学期\t学号\t班别\t姓名\t英语\n〃);printf(〃*****************************************\n〃);for(i=0;i<number;i++)(printf(〃%s\t〃,people[i].sem);printf(〃%s\t〃,people[i].num);printf(〃%d\t〃,people[i].clas);printf(〃%s\t〃,people[i].name);printf(〃%4d\t\n〃,people[i].english);}for(i=0;i<number-1;i++)for(intj=0;j<number-1-i;j++)(if(people[j].english<people[j+1].english)(temp二people[j];people[j]=people[j+1];people[j+1]=temp;}}printf("学期\t学号\t班别\t姓名\t计算机\n〃);printf(〃*****************************************\n〃);for(i=0;i<number;i++)(printf(〃%s\t〃,people[i].sem);printf(〃%s\t〃,people[i].num);printf(〃%d\t〃,people[i].clas);printf(〃%s\t〃,people[i].name);printf(〃%4d\t\n〃,people[i].computer);}for(i=0;i<number-1;i++)for(intj=0;j<number-1-i;j++)(if(people[j].computer<people[j+1].computer)(temp二people[j];people[j]=people[j+1];people[j+1]=temp;}}voidpaixu(structstudentpeople]])//对学生成绩排序(intxuan;while(1)(printf(〃************1按班级对学生成绩排序\n〃);printf(〃************2按课程对学生成绩排序\n〃);printf(〃************0返回上一级目录\n〃);printf(〃请选择:\n〃);scanf(〃%d〃,&xuan);switch(xuan)(case1:paixu_clas(people);break;case2:paixu_ke(people);break;}if(xuan==0)break;}}//***********************************// 主函数//***********************************voidmain()(intsel;system(〃cls〃);system("colorF9〃);structstudentpeople[1024];load(people);(printf(〃\t\t\n〃);printf(〃\n〃);printf(〃\t\t 学生成绩管理系统\n〃);printf(〃\t\t\n〃);printf(〃\t\t\n〃);printf(〃\t\t***********************************\n〃);printf("\t\t\t1学生成绩浏览\n〃);printf("\t\t\t2学生成绩录入\n〃);printf("\t\t\t3学生成绩修改\n〃);printf("\t\t\t4按班级统计学生成绩的总分和平均分\n〃);printf("\t\t\t5学生成绩查询\n〃);printf("\t\t\t6学生成绩保存\n〃);printf("\t\t\t7学生成绩未存盘时导入\n〃);printf("\t\t\t8按班级输出学生成绩\n〃);printf("\t\t\t9学生成绩排序\n〃);printf(〃\t\t\n〃);printf("\t\t\t0谢谢使用再见!\n〃);printf(〃\t\t\n〃);}printf(〃请选择:\n〃);scanf(〃%d〃,&sel);switch(sel)(case1:view(people);break;case2:luru(people);break;case3:xiugai(people);break;case4:grade(people);break;case5:search(people);break;case6:save(people);break;case7:load(people);break;case8:search_clas(people);break;case9:paixu(people);break;case0:printf("谢谢使用再见!\n");break;}if(sel==0)break;}}4系统测试4.1如何设计测试数据我是按顺序编写每个函数的每个功能的,每写完一个就输入数据运行测试,输入数据时数据类型要准确,以避免错误,有些函数往往要重新写好几遍,应为有时不确定是否正确,就要输入数据进行测试,看是否正确,有很多的函数都要调用其他的函数,所以函数的关联很大,输入数据时就要考虑清楚。4.2系统测试过程(1)对学生成绩的录入测试ructstundient ;ad(people)i『'"kEJAlDmkmjA学生fi阂管理段\血5爪学生物皆哩至蝶,ec" 〔1=1I回I< 附盘并不存在,是否创建也¥加〉 J叩pr:pripripr:DFl输入数据对系统进行测试磁盘开不存在,是直财KJCKJCKJCKJCKJCKJCj.■*■*■*■*■*■*2割球录入学生■JC-JC-JC-JC-JC-JC0j底回奴目46■'C:\UsersABOAADesktop\学生雌管理至她W

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论