.数据构造实验报告〔实验一〕实验人:颜建学班级: 4101090703 实验时间:实验学时: 4 实验地点:260**经济学院 信息工程学院实验题目:学生成绩管理系统实验目的:1. 掌握线性表的逻辑构造和根本操作2. 理解线性表的存储构造,特别是用单链表的实现和相应操作3. 通过实用系统的编写更进一般认识线性表这种数据构造的应用实验内容:实现学生成绩管理系统,根本功能要求:1. 添加学生信息:学号〔整型〕,**〔字符数组〕,高数,英语,数据构造〔double〕2. 输出所有同学信息3. 求平均成绩〔按各个科目,求总平均〕4. 统计成绩及格以及不及格的人数5. 删除学生信息6. 查找学生信息〔按学号,按**〕实验用到数据构造:逻辑构造:线性表存储构造:顺序构造定义,功能函数声明如下:typedef struct student{ int num ; char name[10] ; double math,english,struture ;} elemtype ;typedef srtuct list{ elemtype *elem ; int lenth ; int size ;} list ;typedef int status ;status initlist(list &la ); //初始化顺序表status inserlist(list &la ,int i, elemtype e) ; //添加元素〔即:学生信息〕status deletlist(list &la ,int i) ;//删除元素〔即:学生信息〕int findlistname(list &la,char name[]) ;//按**查找,找的返回位置,否那么返回0int findlistnum(list &la,int num) ;//按学号查找,找的返回位置,否那么返回0double avg(list &la ) ;//求平均分status statistic(list &la) ; //统计status prin(list &la);//输出全部学生信息实验源程序:#include #include#include#include typedef struct STUDENT { char studentNumber[20];/*学生学号*/ char studentName[20];/*学生***/ char className[20];/*班级名称*/ float math;/*数学成绩*/ float english;/*英语成绩*/ float struture;/*数据构造成绩*/ struct STUDENT *next; }STUDENT; STUDENT *headLink; /*链表表头指针*/ /*函数声明*/ void ReadInfoFormFile(); void Menu(); void CreateHeadLink(); STUDENT *Malloode(); void GetInformation(STUDENT *t); void OutputInformation(); void DesplayInfoBystudentName(); void DesplayInfoBystudentNumber(); void DesplayOneNode(STUDENT *t); void InsertOneNode(STUDENT *t); void DeleteNodeBystudentNumber(); void ChangeMarkByName(); void ChangeMarkByNumber(); void SaveLinkToFile();void paixu();void DesplayMarkSegment(); int choose;/*用于承受用户的选择*/ /*主函数*/ void main() {printf("\n\t\t\t欢送进入学生成绩管理系统\n\n\n");printf("\t\t\t\tO(∩_∩)O\n\n\n\n");printf("\t\t\t^_^\t\t\t^_^\n\n");printf("\n\t\t 注意:请按照要求输入相应的信息,谢谢您的合作!\n\n\n\n\n");printf("\tPress any key to enter the performance management system......");getch();CreateHeadLink();ReadInfoFormFile();Menu();} /*从文件中读学生信息到链表中*/ void ReadInfoFormFile(void) { FILE *fp; STUDENT *p; fp=fopen("student.txt","r"); if(!fp) { printf("\n"); return; } p=Malloode(); while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,p->className,&(p->math),&(p->english),&(p->struture))>0) { InsertOneNode(p); p=Malloode(); } fclose(fp); } /*显示菜单,根据用户的输入完成相应的功能*/ void Menu(void) { STUDENT *p; printf("\t\t (^o^)欢送使用学生成绩管理系统(^o^)\n\n");printf("\t ※--------------------请选择相应功能---------------------※\n\n"); printf("\t 1: 显示所有学生的信息 "); printf(" \t 2: 按**查询 \n\n"); printf("\t 3: 按学号查询 "); printf(" \t\t 4: 增加学生 \n\n"); printf("\t 5: 删除学生 "); printf(" \t\t 6: 按**修改学生成绩 \n\n"); printf("\t 7: 按学号修改学生成绩 "); printf(" \t 8: 保存所有学生信息 \n\n"); printf("\t 9: 按成绩输出学生信息 "); printf("\t 10: 显示不及格及优秀学生 \n\n");printf("\t 11: 返回主菜单 "); printf("\t\t 12: 退出 \n\n");printf("\t ※----------------------O(∩_∩)O------------------------※\n\n");printf("\t 请输入对应数字:");scanf("%d",&choose);/*取得用户的选择*/ switch(choose) { case 1:OutputInformation();/*显示所有学生的信息*/ break; case 2: DesplayInfoBystudentName(); break; case 3: DesplayInfoBystudentNumber();/*根据用户输入的学号显示该学生的信息*/ break; case 4: p=Malloode();/*先申请一个新结点*/ GetInformation(p);/*要求用户输入信息到新结点中*/ InsertOneNode(p);/*将新结点加到链表中*/ break; case 5: DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/ break; case 6: ChangeMarkByName();/*根据用户输入的**修改学生成绩*/ break; case 7: ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/ break; case 8: SaveLinkToFile();/*保存数据*/ break;case 9: paixu();break;case 10: DesplayMarkSegment();break;case 11: break;case 12: SaveLinkToFile();/*保存数据后再退出*/ free(headLink); break; default: break;} Menu();/*递归调用*/} /*建立链表表头*/ void CreateHeadLink(void) {STUDENT *p; p=(STUDENT*)malloc(sizeof(STUDENT)); headLink=p; p->next=NULL; } /*申请一个新结点,并将其初始化*/ STUDENT *Malloode(void) { STUDENT *p; int i; p=(STUDENT*)malloc(sizeof(STUDENT)); if(p==NULL) return NULL; for(i=0;i<10;i++) memset(p->studentNumber,NULL,20); for(i=0;i<20;i++) memset(p->studentName,NULL,20); for(i=0;i<20;i++) memset(p->className,NULL,20); p->math=0.0; p->english=0.0; p->struture=0.0; p->next=NULL; return p; } /*取得用户输入的学生信息*/ void GetInformation(STUDENT *t) { printf("请输入学生学号:"); scanf("%s",t->studentNumber); printf("请输入学生**:"); scanf("%s",t->studentName); printf("请输入该生所在班级:"); scanf("%s",t->className); printf("请输入数学成绩:"); scanf("%f",&(t->math)); printf("请输入英语成绩:"。