C语言课程设计-学生综合测评系统

  • 格式:doc
  • 大小:97.95 KB
  • 文档页数:24

课程设计报告课程名称C语言程序设计课题名称学生综合测评系统专业通信工程班级1503学号**********, **********姓名汤华贝,佘旭升,郭梦婷,雍甜甜指导教师毛德梅编写 2016年6月一、需求分析一、问题描述:每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。

考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。

二、功能描述:A、学生信息处理(1) 输入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。

提示:学生信息可先输入到数组中,排序后可写到文件中。

(2) 插入(修改)同学信息:提示:先输入将插入的同学信息,然后再打开源文件并建立新文件,把源文件和输入的信息合并到新文件中(保持按学号有序)若存在该同学则将新记录内容替换源内容,(3) 删除同学信息:提示:输入将删除同学号,读出该同学信息,要求对此进行确认,以决定是否删除将删除后的信息写到文件中。

(4) 浏览学生信息:提示:打开文件,显示该文件的学生信息。

B、学生数据处理:(1) 按考试科目录入学生成绩并且按公式:考试成绩=(语文+数学+外语)/3 计算考试成绩,并计算考试名次,提示:先把学生信息读入数组,然后按提示输入每科成绩,计算考试成绩,求出名次,最后把学生记录写入一个文件中。

(2) 学生测评数据输入并计算综合测评总分及名次。

提示:综合测评总分=(考试成绩)*0.6+(同学互评分)*0.1+品德成绩*0.1+任课老师评分*0.2。

(3) 学生数据管理提示:输入学号,读出并显示该同学信息,输入新数据,将改后信息写入文件(4) 学生数据查询:提示:输入学号或其他信息,即读出所有数据信息,并显示出来。

C、学生综合信息输出提示:输出学生信息到屏幕。

三、算法提示:1、数据结构:结构体类型数组2、数据库结构:下表构成该系统的基本数据库。

二.总体设计方案1.总体流程图三.程序源代码#include<stdio.h>#include<stdlib.h>#define N 100void init();char welcome();void InputInfo();void view();void xiugai();void DeleteInfo();void paiming1(struct student_info student[]);void paiming2(struct student_info student[]);void ViewAll();void clean();void PaimingView();void exits();struct student_info input();void SortInfo(struct student_info student[]);void ViewInfo(struct student_info *sp);void SaveStruct(struct student_info *sp,int size,int n,char filename[20]);void LoadStruct(struct student_info *sp,int size,int n,char filename[20]); void SaveInt(int *p,int size,int n,char filename[20]);void LoadInt(int *p,int size,int n,char filename[20]);int NumExist(struct student_info student[],int num);struct student_info{int num; //学号char name[6]; //姓名char sex[5]; //性别char adress[20]; //家庭住址char tel[10]; //电话int chinese,math,english,huping,pingde,jiaoping,paiming1,paiming2;//语文数学英语互评品德教评double ave,zhongping;struct student_info student[N];int counter,PM;void main(){char select;init(); //调用初始化函数while(1){select=welcome();switch(select){case '1': s ystem("cls"); InputInfo(); break; //选项1:输入学生信息case '2': s ystem("cls"); view(); break; //选项2:浏览学生信息case '3': s ystem("cls"); xiugai(); break; //选项3:修改学生信息case '4': s ystem("cls"); DeleteInfo(); break; //选项4:删除学生信息case '5': s ystem("cls"); paiming1(student);paiming2(student);PM=1;getchar();getchar(); system("cls"); break; //选项5:学生信息排名case '6': system("cls"); ViewAll();break; //选项6:浏览全部学生信息case '7': system("cls"); clean();break; //选项7:清除所有信息case '8': system("cls"); PaimingView();break; //选项8:查询排名case '0': s ystem("cls"); exits(); break; //选项9:退出}}}void init(){FILE *fp;fp=fopen("counter.dat","rb"); //打开计数变量counter文件if(fp!=NULL) //载入counter{fclose(fp);LoadInt(&counter,sizeof(counter),1,"counter.dat");}else{fp=fopen("counter.dat","wb"); //若没有counter文件,则创建一个,counter初始为0。

fclose(fp);counter=0;}if(counter!=0) //载入学生数据LoadStruct(student,sizeof(struct student_info),counter,"student_info.dat");}char welcome(){char select;while(1){system("cls");printf("\t\t欢迎使用学生信息管理系统 \n");printf("\n");printf("1.录入学生信息\n\n");printf("2.浏览学生信息\n\n");printf("3.修改学生信息\n\n");printf("4.删除学生信息\n\n");printf("5.排名学生成绩\n\n");printf("6.浏览所有学生信息\n\n");printf("7.清除所有数据\n\n");printf("8.查询排名\n\n");printf("0.退出\n\n");printf("输入相应的功能序号:");select=getchar();if(select=='1'||select=='2'||select=='3'||select=='4'||select=='5'||select=='6'||select=='7'||select= ='8'||select=='0')return select;system("cls");continue;}}void InputInfo(){int i,n;printf("需要录入多少位学生的信息:");scanf("%d",&n);system("cls");for(i=1;i<=n;i++){student[counter]=input();counter++;}PM=0;SortInfo(student);SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");SaveInt(&counter,sizeof(counter),1,"counter.dat");}void view(){int i,num;printf("请输入需要游览的学生信息的学号:");scanf("%d",&num);getchar();if((i=NumExist(student,num))==-1){printf("不存在该学号,按回车键返回...");getchar();system("cls");return;}ViewInfo(&student[i]);printf("\n按回车键返回...");getchar();system("cls");return;}void xiugai(){int i,num;char YN,select;printf("请输入需要修改的学生信息的学号:");scanf("%d",&num);getchar();if((i=NumExist(student,num))==-1){printf("不存在该学号,按回车键返回...");getchar();system("cls");return;}ViewInfo(&student[i]);printf("是否要修改?(Y/N):");scanf("%c",&YN);getchar();if(YN !='Y'&& YN !='y'){printf("修改取消.");getchar();system("cls");return;}system("cls");printf("1.学号 \n");printf("2.性别 \n");printf("3.家庭住址 \n");printf("4.联系电话 \n");printf("5.语文成绩 \n");printf("6.数学成绩 \n");printf("7.外语成绩 \n");printf("8.同学互评分 \n");printf("9.品德成绩 \n");printf("0.任课教师教师评分 \n");scanf("%c",&select);switch(select){case '1':printf("修改学号:");scanf("%d",&student[i].num);break;case '2':printf("修改性别:");scanf("%s",&student[i].sex);break;case '3':printf("修改家庭住址:");scanf("%s",&student[i].adress);break;case '4':printf("修改联系电话:");scanf("%s",&student[i].tel);break;case '5':printf("修改语文成绩:");scanf("%d",&student[i].chinese);break;case '6':printf("修改数学成绩:");scanf("%d",&student[i].math);break;case '7':printf("修改外语成绩:");scanf("%d",&student[i].english);break;case '8':printf("修改同学互评分:");scanf("%d",&student[i].huping);break;case '9':printf("修改品德成绩:");scanf("%d",&student[i].pingde);break;case '0':printf("修改任课教师评分:");scanf("%d",&student[i].jiaoping);break;}SortInfo(student);SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");PM=0;getchar();printf("修改完成...");getchar();system("cls");}void DeleteInfo(){int i,j,num;char YN;printf("请输入要删除的学生信息学号:");scanf("%d",&num);getchar();if((i=NumExist(student,num))==-1) {printf("没有该学号,按回车键返回...");getchar();system("cls");return;}ViewInfo(&student[i]);printf("\n确认删除(Y/N):");scanf("%c",&YN);getchar();if(YN!='Y' && YN!='y'){printf("删除取消...");}else{for(j=i;j<counter-1;j++)student[j]=student[j+1];counter--;PM=0;SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");SaveInt(&counter,sizeof(counter),counter,"counter.dat");printf("删除完成...");}getchar();system("cls");}void paiming1(struct student_info student[]){struct student_info *p[N],*temp;int i,j;for(i=0;i<counter;i++)p[i]=&student[i];for(i=0;i<counter-1;i++)for(j=i+1;j<counter;j++){if(p[i]->ave < p[j]->ave){temp=p[i];p[i]=p[j];p[j]=temp;}}for(i=0;i<counter;i++)p[i]->paiming1=i+1;printf("平均分排名完成...\n");}void paiming2(struct student_info student[]) {struct student_info *p[N],*temp;int i,j;for(i=0;i<counter;i++)p[i]=&student[i];for(i=0;i<counter-1;i++)for(j=i+1;j<counter;j++){if(p[i]->zhongping < p[j]->zhongping){temp=p[i];p[i]=p[j];p[j]=temp;}}for(i=0;i<counter;i++)p[i]->paiming2=i+1;printf("综合测评分排名完成...\n");}void ViewAll(){int i;for(i=0;i<counter;i++){ViewInfo(&student[i]);printf("\n");}getchar();printf("回车键返回...");getchar();system("cls");}void clean(){counter=0;SaveInt(&counter,sizeof(counter),1,"counter.dat");printf("清除完毕...");getchar();getchar();system("cls");}void PaimingView(){int i,num;printf("输入要查询的学号:");scanf("%d",&num);getchar();i=NumExist(student,num);if(i==-1){printf("该学号不存在...");getchar();return;}if(PM==0){printf("请先进行成绩排名...");getchar();return;}printf("%s的平均分排名%d\n",student[i].name,student[i].paiming1);printf("%s的综合测评分排名%d\n",student[i].name,student[i].paiming2);printf("按回车键返回...");getchar();return;}void exits(){printf("谢谢使用!\n");}struct student_info input(){struct student_info stu,*sp;char YN;sp=&stu;while(1){while(1){printf("录入学号:");scanf("%d",&sp->num);getchar();if(NumExist(student,sp->num)!=-1){printf("该学号已存在,请重新输入...");getchar();system("cls");continue;}break;}printf("录入姓名:");gets(sp->name);printf("录入性别:");gets(sp->sex);printf("录入家庭住址:");gets(sp->adress);printf("录入联系电话:");gets(sp->tel);printf("\n接下来录入成绩\n");printf("语文:");scanf("%d",&sp->chinese);printf("数学:");scanf("%d",&sp->math);printf("英语:");scanf("%d",&sp->english);sp->ave=(sp->chinese+sp->math+sp->english)/3.0;printf("同学互评:");scanf("%d",&sp->huping);printf("品德分数:");scanf("%d",&sp->pingde);printf("教师评价:");scanf("%d",&sp->jiaoping);getchar();sp->zhongping=(sp->ave*0.6+sp->huping*0.1+sp->pingde*0.1+sp->jiaoping*0.2);printf("录入完毕,确认信息是否正确(Y/N)");YN=getchar();getchar();if(YN=='Y'|| YN=='y')break;else{printf("按回车键重新录入信息。