数据结构课程设计-学生成绩管理系统
数据结构课程设计-学生成绩管理系统
广东学院《数据结构课程设计》题目:学生成绩管理系统学号:姓名:年级:计算机科学与技术6班学院:智能制造学院专业:指导教师:目录一、问题描述与基本要求 (3)1.1问题描述 (3)1.2基本要求 (3)二、数据结构的设计 (3)2.1数据结构的选择 (3)2.2单链表的定义 (3)2.3重要函数的定义及说明 (4)三、软件模块结构图....................... 错误!未定义书签。
3.1大体模块关系图 (13)3.2各模块具体分析..................... 错误!未定义书签。
四、程序流程图 (15)五、源程序 (17)六、调试分析............................. 错误!未定义书签。
6.1程序错误修改及完善的过程 (37)6.2最终程序所有功能运行结果........... 错误!未定义书签。
6.3测试数据 (39)七、用户使用手册 (40)八、心得体会............................. 错误!未定义书签。
一、问题描述与基本要求1.1问题描述设计一个学生管理系统,建立初始学生成绩,添加/插入,查找,修改,删除学生成绩。
1.2基本要求系统设计要求:1、能比较迅速地实现添加学生的学号,姓名和成绩2、能比较迅速地通过学生的学号或姓名查询、修改或删除学生成绩3、当有学生时,输出所有学生的成绩信息,包括语文,数学,英语的成绩二、数据结构的设计2.1数据结构的选择课程设计题目的要求是,要较简单迅速地实现添加、查询、修改、删除学生成绩的的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。
2.2单链表的定义先定义单链表结点的数据域,数据域包括学生姓名、学生学号、学生成绩等学生信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
数据结构课程设计__学生成绩管理系统
数据结构课程设计报告学生成绩管理系统学院:信息与工程学院专业:计算机科学与技术班级:090412姓名:邓军学号:09041220指导老师:谢老师日期:2011-06-22目录第一章需求分析1.1课程设计题目及要求1.2课程设计思想及开发环境第二章概要设计2.1总体方案2.2 模板功能分析及其外部设计2.3主要数据结构第三章详细设计第四章调试与操作说明4.1主要模板调试4.2 系统缺陷及原因第五章课程设计总结与体会第六章参考文献第一章 需求分析1.1课程设计题目及要求 题目:学生成绩管理系统 学生成绩表:要求如下:1) 实现对两个文件数据进行合并,生成新文件3.txt2) 抽取出三科成绩中有补考的学生并保存在一个新文件4.txt 3) 对合并后的文件3.txt 中的数据按总分降序排序(至少采用两种排序方法实现)4) 输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5) 要求使用结构体,链或数组等实现上述要求.1.2课程设计思想及开发环境设计思想:本课题的实质是完成对学生成绩表的合并、提取、排序、查询等功能,可以首先定义项目的数据结构,然后将每个功能写学生成绩信息文件1(1.txt ),内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47…. .. .. ..学生成绩信息文件2(2.txt ),内容如下:姓名 学号 语文 数学 英语 陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 47 58 77…. .. .. ..成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。
可将此系统分为如下模块,合并两个信息表、从表中提取信息、降序排序模块、按条件进行查询、退出系统。
大数据结构课程设计学生成绩管理系统
数据结构课程设计题目名称:学生成绩管理系统计算机科学与技术学院数据结构综合实验设计———————学生成绩管理系统1.需求分析系统主要管理学生信息及成绩信息排序等事项。
根据需要可以查询学生的信息。
主要功能包括如下。
(1)使用中文菜单,界面升级和用户输入要人性化。
(2)将学生信息保存到文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后在对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。
(3)具有数据输入功能,输入的数据能最终保存在文件中。
(4)具有数据删除功能,能最终从文件中删除。
(5)排序功能,根据自己设计的数据结构,升级排序算法。
(6)具有多种查询及输出功能。
(7)其他功能。
(8)学生信息的修改。
本程序要求设计一个学生信息管理程序,即用计算机来管理一个学校的各个班级成员的各种信息,实现学生信息管理。
(9)数据的输入形式和输入值得范围:首先输入的是菜单的序号,选择你想要进行的操作,其次根据提示输入相关的班级或学生信息。
(10)结果的输出形式:输出的是班级信息或学生信息。
2.设计概要输入学生成绩输出学生成绩查询学生成绩插入学生成绩按总分排名删除学生信息退出系统3函数Struct Student//结构体{Int term;//学期Int num;//学号Char name[12];姓名Float mrak1;成绩Float mark2;Float mark3;Float sum;//总分Float average;//平均分};void input(list *head) 输入函数void output(list *h) 输出函数void sortsum(list *head) 总成绩排名void sortnum(list *head)按学号排名void find (list *h)查找主函数list *del (list *h)删除函数list *insert(list *h)插入函数全部的功能函数可以实现所有的功能4详细设计:程序代码:#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define MAXLEN 100#define Null 0/**************************/int count = 0;/**************************/typedef struct node {int num; // 学号char name[MAXLEN]; // 姓名/******************************/ char sex[2]; ///性别//char sex;/****************************/float sum; //总分float ave; ///平均分int computer; ///计算机成绩int english; ///英语成绩int math; ///数学成绩int chinese; //语文分数struct node *next; // 指针域}list;/*************************/void input(list *head) ///输入函数/*************************/{list *p,*r;int i,n; // n 为学生人数/*p=(list *)malloc(sizeof(list));p->next=Null;*/r=head;printf("请输入学生人数.\n");scanf("%d",&n);for(i=1;i<=n;i++){p=(list *)malloc(sizeof(list));printf("请输入学生学号:\n");scanf("%d",&p->num);printf("请输入学生性别:\n");scanf("%s",&p->sex);printf("请输入学生姓名:\n");scanf("%s",&p->name);printf("请输入语文成绩:\n");scanf("%d",&p->chinese);printf("请输入英语成绩:\n");scanf("%d",&p->english);printf("请输入数学成绩:\n");scanf("%d",&p->math);printf("请输入计算机成绩:\n");scanf("%d",&p->computer);(p->sum)=(p->chinese)+(p->computer)+(p->math)+(p->english);(p->ave)=(p->sum)/4;p->next=Null;r->next=p;r=r->next;/********************/count ++;/********************/}}void output(list *h) //输出函数{/************************/if (h == NULL)printf("记录为空!");/*************************/list *p;printf("学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均分\t总成绩\t\n");p=h->next;while (p!=NULL){printf("%d\n\t%s\t%s\t%d\t%d\t%d\t%d\t%5.1f\t%5.1f\n", p->num,p->name,p->sex,p->chinese,p->math,p->english,p->computer,p ->ave,p->sum);p=p->next;}}输出函数void sortsum(list *head) ///总成绩排序{// struct node temp;// const int n=20;// int i,j,k;// printf("按照总成绩排序:\t");// for(i=0;i<n;i++)// {// k=i;// for(j=i+1;j<n;j++)// if(list[j].sum<list[k].sum)// k=j;// temp=list[k];list[k]=list[i];list[i]=temp; // output(p);// }int i=count, j, k;printf("按照总成绩排序:\n");if (count==0 || count==1){return;}list *p, *temp;while(i > 0){p=head;for(j=0; j<i-1; j++){if(p->next->sum > p->next->next->sum){temp = p->next ;p->next = p->next->next;temp->next = p->next->next;p->next->next = temp;}p = p->next;}i--;}}/*******************************************/利用了冒泡排序的方法把成绩排序:void sortnum(list *head){int i=count, j, k;printf("按照学号排序:\n");if (count==0 || count==1){return;}list *p, *temp;while(i > 0){p=head;for(j=0; j<i-1; j++){if(p->next->num > p->next->next->num){temp = p->next ;p->next = p->next->next;temp->next = p->next->next;p->next->next = temp;}p = p->next;}i--;}}/*******************************************/ /*利用了冒泡排序的方法把学号排序:int sortnum(node *list) ///学号排序{struct node temp;const int n=20;int i,j,k;printf("按照总成绩排序:\t");for(i=0;i<n;i++){k=i;for(j=i+1;j<n;j++)if(list[j].num<list[k].num){k=j;temp=list[k];list[k]=list[i];list[i]=temp;}}return 0;}*/void find (list *h) ///查找函数{int k; // 要找的学生学号list *p;p=h->next;printf("请输入要查找的学生学号:\n");scanf("%d",&k);while (p && p->num!=k)p=p->next;if(p){printf("学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\t总成绩\n");printf("%d\t%s\t%s\t%d\t%d\t%d\t%d%5.1f\t%5.1f\n",p->num,p->name, p->sex,p->chinese,p->math,p->english,p->computer,p->ave,p->sum);}elseprintf("目标没找到\n");}利用遍历按要求查找相应的学生:list *del (list *h) ///删除函数{int k; // 要删除的学生学号list *p,*q;q=h;p=h->next;printf("请输入待删除的学生学号:\n");scanf("%d",&k);while (p && p->num!=k){q=p;p=p->next;}if(p){q->next=p->next;free(p);count --;}elseprintf("没有此学生的记录,无法删除!\n");return (h);}list *insert(list *h) //插入函数{list *p,*q,*r,*head;head=h;r=h;p=h->next; // 下面构造一个学生的信息q=(list *)malloc(sizeof(list));printf("请输入待插入学生的学号:\n");scanf("%d",&q->num);printf("请输入待插入学生性别:\n");scanf("%s",&q->sex);printf("请输入待插入学生的姓名:\n");scanf("%s",&q->name);printf("请输入待插入的语文成绩:\n");scanf("%d",&q->chinese);printf("请输入待插入的英语成绩:\n");scanf("%d",&q->english);printf("请输入待插入的数学成绩:\n");scanf("%d",&q->math);printf("请输入待插入的计算机成绩:\n");scanf("%d",&q->computer);(q->sum)=(q->chinese)+(q->computer)+(q->math)+(q->english);(q->ave)=(q->sum)/4;q->next=Null; // 找到链表的结尾结点count --;while(p!=Null){r=p;p=p->next;} // 将新结点插入表尾r->next=q;r=r->next;return (head);}voidmain() //主函数{list *p;/*****************************/p=(list *)malloc(sizeof(list));p->next=Null;/*****************************/int k; // 控制循环的标志while (1){printf(" ---------------------------------------\n");printf(" | 学生成绩管理系统 |\n");printf(" ---------------------------------------\n");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(" ---------------------------------------\n");printf("请输入你的选择\n");scanf("%d",&k);switch(k){case 1:// p=input();/****************/input(p);/****************/break;case 2:find(p);break;case 3:p=insert(p);break;case 4:p=del(p);break;case 5:sortnum(p);output(p);break;case 6:sortsum(p);output(p);break;case 7:output(p);break;case 8:exit(0);default:printf("选择错误,重新开始\n");}}}4调试分析(1):调试过程中在选择功能也就是简易界面出遇到了问题后才去switch case的方法也决问题,在设计函数时第一次只进行了成绩排序,这样使得程序不够完整没有满足要求,之后加上了学号排序这样方便了查找,也方便了阅读。
数据结构课程设计学生成绩管理系统
课程设计报告课程设计题目:1:学生成绩管理系统2:joseph环3:猴子选大王姓名洪军学号201420180706班级1421807指导教师邹国华2015年12月17日1:学生成绩管理系统1, 问题分析;定义一个学生管理系统实现对学生基本数据的管理,录入:输入每位学生的信息;输出:输出每位学生的信息;查询:可以按3学号和4姓名查询某个学生的信息;修改:可以修改学生(按1学号修改,按2成绩修改)的信息;插入:可以插入一个学生的信息;删除:可以删除(按1学号删除,按2成绩删除)满足条件的学生信息;排序:可以按学生的总成绩排序。
2 结构分析首先分析结果我采用的是单链表的存储结构通过此系统可以实现如下功能:定义一个学生类型student(学号,姓名,四门课程成绩),学生链表student,含有学生数组和学生数。
3 实现流程分析定义数据类型typedef struct student⇩初始化结构体并输入学生的数据inputstu(stu &s,int n)⇩重载运算符便于输入输出学生的成绩⇩输出函数输出全部学生的信息output(stu s)⇩查找学生3按学号查找getstu1(stu s,char i[]) 4按姓名查找getstu2(stu s,char c[])⇩插入学生insetstu(stu &s,int i,char nu[],char na[],char se[],int sc[])⇩1按学号删除学生deletestu1(stu &s),2按姓名删除学生deletestu2(stu &s)⇩1按学号修改学生的信息update1(stu &s) 2按姓名修改学生的信息update2(stu &s)⇩对总成绩排序sort(stu &s,struct shu shuzu[])⇩CPP文件实现所有功能4 算法实现头文件status.htypedef int status;#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2#define N 10typedef struct student{ //学生结构体(链表)char num[9];char name[15];char sex[2];int score[4];student *next;}student,*stu;struct shu{ //辅助结构体数组存储学生总成绩和学号便于排序float allscore;char num[9];}shuzu[10];ostream &operator<<(ostream &os,stu &s); //运算符的重载istream &operator>>(istream &is,stu &s); //运算符的重载void inputstu(stu &s,int n) //初始化并且输入函数{student *p,*r;int i;s=(stu)malloc(sizeof(student)); //申请头节点r=s;for(i=0;i<n;i++){p=(student *)malloc(sizeof(student)); //申请链表空间}status insetstu(stu &s,int i,char nu[],char na[],char se[],int sc[]) //插入学生{student *p=s,*q;int j=0,m;while(j<i-1&&p->next) //找到学生的位置{p=p->next;j++;}if(j==i-1){q=(student*)malloc(sizeof(student)); //申请新结点if(!q)return OVERFLOW; //申请失败返回错误{strcpy(q->name,na); //赋值strcpy(q->num,nu);for(m=0;m<4;m++)q->score[m]=sc[m];strcpy(q->sex,se);q->next=p->next;p->next=q;return OK;}}elsereturn ERROR;}status deletestu1(stu &s) //按学号删除学生{char i[10];cout<<"请输入你要删除学生的学号"<<endl;cin>>i;student *p=s,*r;while(strcmp(p->next->num,i)!=0) //找到修改学生{p=p->next;}if(p) //存在就删除不存在就返回错误{r=p->next;p->next=r->next;free(r);return 0;}elsereturn ERROR;}status deletestu2(stu &s) //按姓名删除学生{char i[10];cout<<"请输入你要删除学生的姓名"<<endl;cin>>i;student *p=s,*r;while(strcmp(p->next->name,i)!=0) //找到修改学生{p=p->next;}if(p){r=p->next;p->next=r->next;free(r);return 0;}elsereturn ERROR;}status update1(stu &s) //按学号修改学生的信息{char i[10];cout<<"请输入你要修改学生的学号"<<endl;cin>>i;student *p=s;while(strcmp(p->num,i)!=0) //找到修改学生{p=p->next;}if(p){cin>>p;return 0;}elsereturn ERROR;}status update2(stu &s) //按姓名修改学生的信息{char i[10];cout<<"请输入你要修改学生的姓名"<<endl;cin>>i;student *p=s;while(strcmp(p->name,i)!=0) //找到修改学生{p=p->next;}if(p){cin>>p;return 0;}elsereturn ERROR;}void sort(stu &s,struct shu shuzu[]) //对总成绩排序{int n=0,i,j,k;student *p=s->next;while(p){ //获取多少个人数n++;p=p->next;};p=s->next;for(i=1;i<=n;i++) //对结构体进行赋值{ shuzu[i].allscore=0;for(j=0;j<4;j++)shuzu[i].allscore=shuzu[i].allscore+p->score[j];strcpy(shuzu[i].num,p->num);p=p->next;}for(i=1;i<n;i++){ //对结构体进行排序k=i;for(j=i+1;j<=n;j++)if(shuzu[j].allscore>shuzu[k].allscore)k=j;if(k!=j){shuzu[0].allscore=shuzu[i].allscore;strcpy(shuzu[0].num,shuzu[i].num);shuzu[i].allscore=shuzu[k].allscore;strcpy(shuzu[i].num,shuzu[k].num);shuzu[k].allscore=shuzu[0].allscore;strcpy(shuzu[k].num,shuzu[0].num);}}for(i=1;i<=n;i++){ //对总成绩从大到小输出p=s->next;while(strcmp(p->num,shuzu[i].num)!=0) //按学号查找相对应的学生信息{p=p->next;}cout<<p<<" 总成绩为:"<<shuzu[i].allscore<<endl;}}ostream &operator<<(ostream &os,stu &s) //输出函数的重载{os<<"学号:"<<s->num<<" 姓名:"<<s->name<<" 性别:"<<s->sex<<"科目 1 "<<s->score[0]<<"科目 2 "<<s->score[1]<<"科目3 "<<s->score[2]<<"科目4 "<<s->score[3]<<endl;return os;}istream &operator>>(istream &is,stu &s) //输入函数的重载{ cout<<""<<"学号"<<"姓名"<<"性别"<<"科目1 "<<"科目2 "<<"科目3 "<<"科目4 "<<endl; is>>s->num>>s->name>>s->sex>>s->score[0]>>s->score[1]>>s->score[2]>>s->score[3];return is;}CPP文件#include<iostream.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#include"Status.h"void menu(){cout<<"* * * * * * * *学生管理系统* * * * * * *"<<endl;cout<<"* * * 1:添加学生* * *"<<endl;cout<<"* * * 2:显示信息* * *"<<endl;cout<<"* * * 3:按学号查找* * *"<<endl;cout<<"* * * 4:按姓名查找* * *"<<endl;cout<<"* * * 5: 插入学生* * *"<<endl;cout<<"* * * 6: 删除学生* * *"<<endl;cout<<"* * * 7: 修改学生* * *"<<endl;cout<<"* * * 8: 学生总成绩排序* * *"<<endl;cout<<"* 其他:返回主菜单"<<endl;cout<<"请选择";}int main(){ stu s;struct shu shuzu[10];int i,k[4],j;char c[9],p[9];char x[20],o[20];char l[3];menu();while(1){static int n;scanf("%d",&n);switch(n){case 1:cout<<"输入多少个学生"<<endl;cin>>n;inputstu(s,n);break;case 2:output(s);break;case 3:cout<<"请输入你要找的学生学号:";cin>>c;getstu1(s,c);break;case 4:cout<<"请输入你要找的学生姓名:";cin>>x;getstu2(s,x);break;case 5:cout<<"需要插入位置,学号,姓名,性别,科目1,科目2,科目3,科目4"<<endl;cin>>i>>p>>o>>l;for(j=0;j<4;j++)cin>>k[j]; insetstu(s,i,p,o,l,k);break;case 6:cout<<"1:按学号删除学生的信息;2:按姓名删除学生的信息"<<endl;cin>>j;switch(j){case 1:deletestu1(s);break;case 2:deletestu2(s);break;};break;case 7:cout<<"1:按学号修改学生的信息;2:按姓名修改学生的信息"<<endl;cin>>j;switch(j){case 1:update1(s);break;case 2:update2(s);break;};break;case 8:sort(s,shuzu);break;default:return 0;}}调试结果5 课程小结我采用的是链表来存储学生的信息,最大的难点就是总成绩的排序,其他的功能实现还是比较简单,总成绩排序我用啦一个辅助结构体struct shu 来存储每个学生的学号char num来记录学生以及便于排序的时候查找,还有总成绩float allscore,且用结构体数组来存储首先对每个学生的学号及总成绩赋值给结构体数组shuzu[],然后对结构体数组进行从大到小排序(选择排序)然后对结构体一一查找相应的信息。
数据结构课程设计-学生成绩管理系统(C++)
课程设计(论文)任务书软件学院学院专业班一、课程设计(论文)学生成绩管理系统的设计与实现二、课程设计(论文)工作自2014年12月22日起至2012年12月27日止三、课程设计(论文) 地点: 创新大楼机房四、课程设计(论文)内容要求:1.本课程设计的目的⑴训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题;⑵初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;⑶提高综合运用所学的理论知识和方法独立分析和解决问题的能力,巩固、深化学生的理论知识,提升编程水平。
2.课程设计的任务及要求1)基本要求:⑴要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编写上机程序和上机调试等若干步骤完成题目,最终写出完整的报告;⑵在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率;⑶程序设计语言推荐使用C/C++,程序书写规范,源程序需必要的注释;⑷每位同学需提交可独立运行的程序和规范的课程设计报告。
2)课程设计论文编写要求⑴理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进行书写和装订;⑵课程设计报告(论文)包括中文目录、设计任务、需求分析、概要设计、详细设计、编码实现、调试分析、总结、谢辞、参考文献、附录等;⑶设计部分应包含系统功能模块图,调试分析应包括运行截图等。
3)课程设计评分标准:⑴学习态度:10分;⑵系统设计:20分;⑶编程调试:20分;⑷回答问题:20分;⑸论文撰写:30分。
4)参考文献:⑴严蔚敏,吴伟民. 数据结构(C语言版)[M]. 清华大学出版社. 2010.3⑵严蔚敏,吴伟民. 数据结构题集(C语言版)[M]. 清华大学出版社. 1999.2⑶何钦铭,冯燕等. 数据结构课程设计[M]. 浙江大学出版社. 2007.85)课程设计进度安排⑴准备阶段(4学时):选择设计题目、了解目的要求、查阅相关资料;⑵程序模块设计分析阶段(4学时):程序概要设计、详细设计;⑶代码编写调试阶段(8学时):程序模块代码编写、调试、测试;⑷撰写论文阶段(4学时):总结设计任务和设计内容,撰写设计论文。
学生成绩管理系统数据结构课程设计
学生成绩管理系统数据结构课程设计学生成绩管理系统是一个用于管理学生学习成绩的软件系统。
它通常用于学校、教育机构或教师们来跟踪和记录学生的学习进展,并生成报告和分析数据。
在数据结构课程设计中,学生成绩管理系统需要设计合适的数据结构来存储和操作学生成绩数据。
在设计学生成绩管理系统时,可以使用以下数据结构:1. 数组:可以使用数组来存储学生成绩数据。
每个学生的成绩可以用一个数组元素表示,可以将学生按照学号或者其他标识符按顺序存储在数组中。
这样可以方便地通过索引来访问和修改学生成绩。
2. 链表:链表是另一种常用的数据结构,可以用于存储学生成绩数据。
每个学生的成绩可以用一个节点表示,节点可以包含学生的信息和成绩,同时包含指向下一个节点的指针。
这样可以方便地插入、删除和查找学生成绩。
3. 树:树可以用于组织学生成绩数据。
可以使用二叉搜索树或平衡二叉树来存储学生成绩,其中学生的学号或者姓名可以作为关键字。
这样可以方便地进行查找、插入和删除操作,并可支持对学生成绩进行排序。
以上是一些常用的数据结构,用于存储学生成绩管理系统的数据。
在具体的设计中,还可以根据实际需求选择其他合适的数据结构。
除了数据结构,学生成绩管理系统还可能包括其他功能,例如:1. 添加学生:可以通过输入学生的基本信息和成绩,将学生添加到系统中。
2. 删除学生:可以通过学生的学号或其他标识符,从系统中删除某个学生的信息和成绩。
3. 修改成绩:可以根据学生的学号或其他标识符,修改学生的成绩信息。
4. 查询成绩:可以根据学号、姓名或其他条件,查询学生的成绩信息。
5. 成绩统计和分析:可以对学生的成绩进行统计和分析,生成报告和图表,帮助教师或学校了解学生的学习情况。
以上只是学生成绩管理系统可能包含的一些基本功能,具体的设计和实现还需要根据实际需求和要求进行进一步的扩展和深入分析。
通过合适的数据结构和功能设计,可以实现一个高效、易用和功能完善的学生成绩管理系统。
数据结构之学生成绩管理系统
学生成绩管理系统一、试验目旳1. 通过本次课程设计中学生成绩管理系统旳题目,掌握链表等数据构造旳基本操作方面旳知识,并能灵活旳处理某些基本旳问题,加深对其性质及各项操作旳理解;2. 将所学数据构造方面旳知识与一门详细旳语言——C语言来进行实现, 感受数据构造旳强大作用, 加深理解。
二、试验规定(1)管理系统中有五个规定: 输入查找修改插入删除存储(2)输入规定: 可以通过键盘输入和文献输入两种(3)查找规定:可以根据学生号查找单个学生旳信息, 也可以遍历所有学生信息(4)修改规定: 可以根据学生号修改单个学生所有信息(5)插入规定: 可以实现头插和尾插(6)删除规定: 可以根据学生号删除单个学生信息三、存储规定: 通过链表存储所有信息四、算法旳思想与算法实现环节1. 基本思想通过链表数据类型进行基本操作, 重要有三个模块: 分别是主函数模块、重要操作函数及基本操作函数。
其中, 主函数负责其他子函数旳调用实现以及基本界面旳操作重要函数包括:void StuInput(Student *); //学生成绩管理系统旳输入函数, 由主函数调用void StuSelect(Student *); //学生成绩管理系统旳查找函数, 由主函数调用void StuAlter(Student *); //学生成绩管理系统旳修改函数, 由主函数调用void StuInsert(Student *); //学生成绩管理系统旳插入函数, 由主函数调用void StuDelect(Student *); //学生成绩管理系统旳删除函数, 由主函数调用void StuSave(Student *); //学生成绩管理系统旳存储函数, 由主函数调用基本操作函数:void StuOutput(Student *p); //输出函数int StuImport(Student *head,Student *p); //输入函数void StuInputHand(Student *head); //学生成绩管理系统旳手动输入函数, 由输入函数调用void StuInputFile(Student *head); //学生成绩管理系统旳文献输入函数, 由输入函数调用void StuSelectErg(Student *head); //学生成绩管理系统旳遍历函数, 由查找函数调用void StuSelectNumFind(Student *head); //学生成绩管理系统旳按学号查找函数, 由查找函数调用void StuSelectSubFind(Student *head); //学生成绩管理系统旳按科目查找函数, 由查找函数调用2. 实现环节首先, 分析题目规定划分实现模块, 定义基本数据类型, 诸如构造体、链表等;另一方面, 针对上述旳基本操作实现详细需要进行旳操作, 详细实现每个环节需要进行旳基本操作, 即详细编写每个小函数实现功能;最终, 编写主函数对每个实现进行按需调用, 实现操作。
数据结构课程设计报告-学生成绩管理系统设计
广东某某学院《数据结构课程设计》题目:学生成绩管理系统设计学号:姓名:年级:学院:专业:指导教师:目录一、问题描述与需求分析 (3)1.1问题描述 (3)1.2需求分析 (3)二、数据结构的设计 (3)2.1数据结构的选择 (3)2.2单链表定义和创建 (3)三、软件模块结构图及程序流程图 (4)3.1大体模块关系图 (4)3.2程序流程图 (5)四、运行界面及用户使用手册 (10)4.1运行界面 (10)4.2测试数据 (15)4.3用户使用手册 (15)五、心得体会 (16)六、附录(源码) (16)一、问题描述与需求分析1.1问题描述设计一个简单的学生成绩管理系统。
完成对学生成绩信息的建立、查找、插入、修改、删除等功能。
1.2需求分析系统设计要求:1、能录入任意条数据,以方便教室录入多条学生成绩,提高教室工作效率,输入的内容包括学号,姓名,数学,英语,c语言成绩。
2、能比较迅速的查询挂科学生信息,合格学生信息,方便老师统计教学结果,且可以通过名字查询学生的信息,并输出该学生是否挂科的信息。
3、能快速准确删除不需要的学生信息,在删除前给出现有数据,可让教师直观了解要删除的数据的学号,删除后,输出删除结果并询问教师是否保存,以免误删。
4、能准确的修改学生的信息,在修改前输出现有数据,让教师直观了解需要修改的数据的学号,修改后,输出修改信息并询问是否保存,以免误删。
5、能够保存输入的数据,下次进入系统时不需要重新输入数据。
6、能够快速准确插入学生信息,并在插入前后输出表格对照。
7、学生也可以查询自己的成绩,但不拥有修改数据的权限。
二、数据结构的设计2.1数据结构的选择课程设计题目要求完成对学生成绩信息的建立、查找、插入、修改、删除等功能,自然而然的,我想到可以用单链表的结构,通过编写相应的功能函数来实现建立,删除,修改,输出,查找,保存节点数据域的内容来满足课程设计题目的要求。
2.2单链表定义和创建先定义单链表节点的数据域,包括学号、姓名、数学、英语、c语言成绩等信息和链表结点,然后再创建表头以及新建链表数据。
学生成绩管理系统数据结构课程设计
学生成绩管理系统数据结构课程设计近年来,随着信息技术的快速发展,学生成绩管理系统在学校中得到了广泛应用。
学生成绩管理系统是一种基于数据结构的软件系统,旨在帮助学校更好地管理学生的学习成绩。
本文将介绍一个基于数据结构的学生成绩管理系统的设计。
首先,我们需要设计一个合适的数据结构来存储学生的学习成绩。
在这个系统中,我们可以使用一个二维数组来存储学生的成绩信息。
数组的行表示学生的学号,列表示不同科目的成绩。
这样,我们就可以方便地对学生成绩进行增删改查的操作。
接下来,我们需要设计一些基本的功能来实现学生成绩的管理。
首先是添加学生的成绩信息。
当学生入学时,管理员可以通过系统将学生的学号和成绩添加到数组中。
其次是删除学生的成绩信息。
当学生毕业或者转学时,管理员可以通过系统将学生的学号和成绩从数组中删除。
再次是修改学生的成绩信息。
当学生的成绩发生变化时,管理员可以通过系统修改学生的成绩。
最后是查询学生的成绩信息。
管理员可以通过系统查询学生的学号,然后系统会返回该学生的成绩信息。
除了基本的功能,我们还可以设计一些高级功能来提升学生成绩管理系统的实用性。
例如,我们可以设计一个成绩统计功能,用于统计学生的平均成绩、最高成绩和最低成绩。
这样,管理员可以更好地了解学生的学习情况。
另外,我们还可以设计一个成绩排名功能,用于按照成绩对学生进行排名。
这样,管理员可以更方便地找出成绩优秀的学生。
在实际应用中,我们还可以将学生成绩管理系统与其他系统进行集成。
例如,我们可以将学生成绩管理系统与学生信息管理系统进行集成,这样可以更方便地管理学生的学习情况。
另外,我们还可以将学生成绩管理系统与家长端进行集成,这样家长可以通过系统查看孩子的成绩情况,及时了解孩子的学习进展。
总之,学生成绩管理系统是一种基于数据结构的软件系统,可以帮助学校更好地管理学生的学习成绩。
通过合适的数据结构和功能设计,我们可以方便地对学生成绩进行增删改查的操作,并且可以提供一些高级功能来提升系统的实用性。
学生成绩管理系统数据结构课程设计
学生成绩管理系统数据结构课程设计1. 介绍学生成绩管理系统是一种用于管理学生学业成绩的应用软件。
该系统能够帮助教师和学生方便地录入、查询和统计学生的各科成绩,以便更好地进行教学和学习工作。
本文将针对该系统的数据结构进行设计和实现。
2. 系统需求学生成绩管理系统需要满足以下功能要求:•学生信息管理:包括学生姓名、学号、专业等信息。
•课程信息管理:包括课程名称、课程编号、学分等信息。
•成绩信息管理:包括学生的各科成绩。
•信息查询:能够查询学生的个人信息、课程信息和成绩信息。
•成绩统计:能够对学生的各科成绩进行统计和分析。
3. 数据结构设计基于上述需求,我们可以设计以下数据结构:3.1 学生信息数据结构struct Student {int studentId; // 学号string name; // 姓名string major; // 专业};3.2 课程信息数据结构struct Course {int courseId; // 课程编号string name; // 课程名称int credit; // 学分};3.3 成绩信息数据结构struct Score {int studentId; // 学生学号int courseId; // 课程编号float score; // 成绩};3.4 数据存储结构设计3.4.1 学生信息存储使用数组或链表存储学生信息,可以根据学号快速查找和修改学生信息。
struct StudentNode {Student stu;StudentNode* next;};3.4.2 课程信息存储使用数组或链表存储课程信息,可以根据课程编号快速查找和修改课程信息。
struct CourseNode {Course crs;CourseNode* next;};3.4.3 成绩信息存储使用数组或链表存储成绩信息,可根据学生学号和课程编号查找和修改成绩信息。
struct ScoreNode {Score scr;ScoreNode* next;};4. 系统实现4.1 添加学生信息通过输入学生的学号、姓名和专业信息,创建一个学生结构体,并将其插入学生信息存储数据结构中。
数据结构与算法课程设计 学生成绩管理系统
数据结构与算法课程设计学生成绩管理系统学生成绩管理系统是一种用于管理学生的课程成绩和相关信息的软件系统。
该系统旨在帮助学校、教师和学生更好地管理和了解学生的学术表现。
下面是一个标准格式的文本,详细描述了学生成绩管理系统的功能和特点。
一、系统概述学生成绩管理系统是基于数据结构与算法课程设计的一个软件系统。
该系统通过使用合适的数据结构和算法,实现了对学生课程成绩的管理和统计分析。
系统具有用户友好的界面和丰富的功能,能够满足学校、教师和学生的需求。
二、系统功能1. 学生信息管理:系统可以记录学生的基本信息,包括学号、姓名、性别、年级等。
教师和管理员可以通过系统添加、修改和删除学生信息。
2. 课程管理:系统可以管理学校开设的各门课程,包括课程名称、授课教师、学分等信息。
教师和管理员可以在系统中添加、修改和删除课程信息。
3. 成绩录入:教师可以通过系统录入学生的课程成绩。
系统会自动计算每门课程的平均成绩和总评成绩,并将成绩与学生的个人信息进行关联。
4. 成绩查询:学生和教师可以通过系统查询学生的课程成绩。
学生可以查看自己的成绩,教师可以查看所教授课程的学生成绩。
查询结果可以按照学生、课程、成绩等进行排序和筛选。
5. 统计分析:系统可以对学生的课程成绩进行统计分析。
教师和管理员可以查看学生的平均成绩、最高成绩、最低成绩等统计信息,并生成相应的报表。
6. 数据备份与恢复:系统支持对学生信息和成绩数据进行备份和恢复。
管理员可以定期备份数据,以防止数据丢失或损坏。
7. 用户权限管理:系统具有不同的用户角色,包括学生、教师和管理员。
每个用户角色有不同的权限,保证了系统的安全性和数据的保密性。
三、系统特点1. 高效性:系统使用了合适的数据结构和算法,能够快速处理大量的学生信息和成绩数据,提高了系统的响应速度和处理效率。
2. 可扩展性:系统具有良好的可扩展性,可以根据实际需求进行功能的扩展和定制。
例如,可以添加更多的统计分析功能,或者与其他系统进行集成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淮阴工学院数据结构课程设计报告选题名称:学生成绩管理系统系(院):数理学院专业:信息与计算科学班级:计科1102班姓名:徐连喜学号: 1104101233指导教师:周海岩学年学期:2011 ~ 2012 学年第 1 学期2012 年06 月06 日【摘要】21世纪,科学技术突飞猛进,经济知识和信息产业初见端倪,特别是信息技术和网络技术的讯速发展和广泛应用,对社会的政治,经济,军事,文化等领域产生越来越深刻。
学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要。
本论文叙述到的学生成绩管理系统是用IIS+ASP网页编程+ACCESS数据库+DREAMWEAVER MX 2004+SQL查询语言实现的。
重点介绍了学生成绩管理系统的实现过程:包括系统分析,系统调查,功能设计,数据库设计,系统实现,系统测试和调试等。
本系统主要功能有查询学生成绩、单个添加学生成绩、批量添加学生成绩、删除学生成绩、管理页面和修改管理员密码等内容。
【关键词】成绩管理;成绩查询;C++目录中文摘要。
1 1绪论。
4 1.1 选题背景。
5 1.2 需求分析。
6 2总体设计。
7 2.1程序设计组成框图。
8 2.2 模块功能说明。
9 2.3 程序流程图。
102.4 主要函数之间相互调用。
113 在设计过程中的感受。
12 致谢。
13 参考文献。
14附录:源程序清单。
151.绪论1.1 选题背景为了提高高校学生信息的管理效率,方便对学生信息进行管理、学校里面的学生和管理员方便去管理和查询学生信息,如再要进行查询,就得在众多的学生信息中查找自己的成绩信息,面对学院大量的学生信息,怎么可以即时而方便的管理,学生只要登录本系统就可以查找到自己的成绩信息,而管理员也方便去管理每学期的学生的成绩信息。
建立一个学生信息管理系统,使学生信息管理工作规范化,系统化,程序化,避免学生管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改学生信息是必须而且十分迫切的工作。
2.1 需求分析学生管理系统功能的信息量大,数据安全性和保密性要求最高。
本功能实现对专业信息、学生信息、教师信息情况信息的管理和统计、课程信息和成绩信息查看及维护。
系统管理员可以浏览、查询、学生的基本信息,能添加、删除和修改学生信息,这部分功能应该由系统管理员执行,但是,删除某条专业基本信息记录时,应实现对该专业的相关信息也级联删除。
并且还应具有查询,并打印输出的功能设计不同用户的操作权限和登陆方法、对所有用户开放的用户提供学生成绩信息查询、由于本系统功能实现方面并不太复杂,所以上面只是相关的学生信息管理查询的总体分析,具体实现就主要体现在学生管理,教师的管理和课程的管理这一块,也就是重点实现查询与添加学生信息,以及对成绩信息管理。
2.总体设计(1)程序设计组成框图(2)模块功能说明1 输出功能:完成全部学生记录的显示。
2 查询功能:输入姓名可以查询学生的详细信息。
3 增加功能:增加新学生的信息。
4 删除功能:删除学生信息。
5 修改功能:修改学生的错误信息。
6保存功能:保存已输入信息。
7读取功能:读取已输入信息。
8显示功能:按要求显示学生记录。
9 排序功能:按要求完成对学生信息的排序。
10 退出系统。
(3)程序流程图(4)主要函数之间相互调用如下:总结首先经过一周的编程实习,并在后一段的报告总结,我对数据结构这门科有新的认识,本人实在是获益不浅!要想编写一个准确、高效并有使用价值的程序,一定先要对课本知识熟悉,还要掌握必要的上机操作能力,写程序其实很容易而关键在于调试程序。
这次设计,让我重新掌握了数据结构,而且还得到了用数据结构解决实际问题的宝贵经验。
其次, 通过此次编程我也发现了自己在学习中的错误和不足,复习了以前学过的知识。
同时也学到了一些没学过的知识,让我从中收益非浅,也为期末考试准备了一下!更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法!致谢因为初次接触等原因此次设计遇到了许多问题,我深刻体会到老师发挥的重要作用, 数据结构程序对我们来说比较难,在匆忙的学习中更是难上加难,似乎觉得自己仅是个匆匆过客,但在老师的帮助下我学会了如何调试,如何查找系统没有提示的错误,最后终于排除万难把程序搞定,体会到原来编程也挺有意思的快感.我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。
参考文献[1] 李丽娟 . C语言程序设计教程(第二版). 北京:人民邮电出版社 2009[2] 刁成嘉 . C语言程序设计论文 [D].北京:清华大学出版社2004[3] 杨文军,杨柳 . C语言程序设计教程[M]. 北京:清华大学出版社 2010[4] 周启海 . C语言程序设计报告[R].北京:中国水利工程出版社 2005[5] 谭浩强 . C程序设计(第三版)[M].北京:清华大学出版社 2005附录源程序清单#include<stdio.h>#include<conio.h>#include<malloc.h>#include<string.h>typedef struct STUDENT{char studentNumber[10];/*学生学号*/ char studentName[20];/*学生姓名*/ char className[20];/*班级名称*/char yearName[20];/*学期名称*/float mark1;/*第1门成绩*/float mark2;/*第2门成绩*/float mark3;/*第3门成绩*/struct STUDENT *next;}STUDENT;STUDENT *headLink;/*链表表头指针*//*以下是函数声明*/void ReadInfoFormFile(void);void DesplayMenu(void);void CreateHeadLink(void);STUDENT *MallocNode(void);void GetInformation(STUDENT *t);void OutputInformation(void);void DesplayInfoBystudentName(void); void DesplayOneNode(STUDENT *t);void InsertOneNode(STUDENT *t);void DeleteNodeBystudentNumber(void); void ChangeMarkByName(void);void ChangeMarkByNumber(void);void SaveLinkToFile(void);void DesplayMarkSegment(void);void CompositorByTotalMark(void);int choose;/*用于接受用户的选择*//*主函数*/void main(){CreateHeadLink();ReadInfoFormFile();DesplayMenu();}/************************************函数功能:从文件中读学生信息到链表中************************************/void ReadInfoFormFile(void){FILE *fp;STUDENT *p;fp=fopen("student.txt","r");if(!fp){printf("文件不存在\n");return;}p=MallocNode();while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,p->cl assName,&(p->mark1),&(p->mark2),&(p->mark3))>0){InsertOneNode(p);p=MallocNode();}fclose(fp);}/************************************函数功能:显示菜单,根据用户的输入完成相应的功能************************************/void DesplayMenu(void){STUDENT *p;printf("-------请选择相应功能------------\n\n");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("| 10 退出 |\n\n");scanf("%d",&choose);/*取得用户的选择*/switch(choose){case 1:OutputInformation();/*显示所有学生的信息*/break;case 2:DesplayInfoBystudentName();break;case 3:p=MallocNode();/*先申请一个新结点*/GetInformation(p);/*要求用户输入信息到新结点中*/ InsertOneNode(p);/*将新结点加到链表中*/break;case 4:DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/ break;case 5:ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/ break;case 6:ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/ break;case 7:SaveLinkToFile();/*保存数据*/break;case 8:DesplayMarkSegment();/*显示不及格的学生成绩*/break;case 9:CompositorByTotalMark();/*按平均成绩排序*/break;case 10:SaveLinkToFile();/*保存数据后再退出*/free(headLink);break;default:break;}DesplayMenu();/*递归调用*/}/************************************函数功能:建立链表表头************************************/void CreateHeadLink(void){STUDENT *p;p=(STUDENT*)malloc(sizeof(STUDENT));headLink=p;p->next=NULL;}/************************************ 函数功能:申请一个新结点,并将其初始化************************************/ STUDENT *MallocNode(void){STUDENT *p;int i;p=(STUDENT*)malloc(sizeof(STUDENT)); if(p==NULL)return NULL;for(i=0;i<10;i++)p->studentNumber[i]='\0';for(i=0;i<20;i++)p->studentName[i]='\0';for(i=0;i<20;i++)p->className[i]='\0';p->mark1=0.0;p->mark2=0.0;p->mark3=0.0;p->next=NULL;return p;}/************************************ 函数功能:取得用户输入的学生信息************************************/ void GetInformation(STUDENT *t){printf("请输入学生学号:\n");scanf("%s",t->studentNumber);printf("请输入学生姓名:\n");scanf("%s",t->studentName);printf("请输入该生所在班级:\n"); scanf("%s",t->className);printf("请输入第1门成绩:\n");scanf("%f",&(t->mark1));printf("请输入第2门成绩:\n");scanf("%f",&(t->mark2));printf("请输入第3门成绩:\n");scanf("%f",&(t->mark3));}/************************************函数功能:在链表的结尾处增加一个结点************************************/void InsertOneNode(STUDENT *t){STUDENT *p;p=headLink;while(p->next){p=p->next;}p->next=t;}/************************************函数功能:根据用户输入的学生姓名显示该学生的信息************************************/void DesplayInfoBystudentName(void){STUDENT *p;char studentName[20];char flag=0;p=headLink->next;printf("请输入学生姓名:\n");scanf("%s",studentName);while(p){if(strcmp(p->studentName,studentName)==0){printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");DesplayOneNode(p);flag=1;break;}p=p->next;}if(!flag)printf("对不起,不存在姓名为 %s 的学生\n",studentName);}/************************************函数功能:输出一个结点的信息************************************/void DesplayOneNode(STUDENT *t){printf("%s\t",t->studentNumber);printf("%s\t",t->studentName);printf("%s\t",t->className);printf("%.2f\t",t->mark1);printf("%.2f\t",t->mark2);printf("%.2f\t",t->mark3);printf("%.2f\t",t->mark1+t->mark2+t->mark3);printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3); }/************************************函数功能:根据用户输入的学号删除该学生************************************/void DeleteNodeBystudentNumber(void){char studentNumber[10];STUDENT *p,*q;char flag=0;printf("请输入要删除的学生学号:");scanf("%s",studentNumber);p=headLink;q=headLink->next;while(q){if(strcmp(q->studentNumber,studentNumber)==0) {p->next=q->next;free(q);flag=1;break;}p=p->next;q=q->next;}if(!flag){printf("不存在该学号的学生\n");return;}printf("成功删除\n");}/************************************函数功能:显示所有学生的信息************************************/void OutputInformation(void){STUDENT *p;p=headLink->next;if(p==NULL){printf("现在没有学生信息,请先输入学生信息\n\n");return;}printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");while(p){DesplayOneNode(p);p=p->next;}}/************************************函数功能:根据输入的班级修改成绩************************************/void ChangeMarkByName(void){STUDENT *p;int a;char studentName[20];char flag=0;float mark1,mark2,mark3;p=headLink->next;printf("请输入学生班级:\n");scanf("%d",&a);printf("请输入学生姓名:\n");scanf("%s",studentName);while(p){if(strcmp(p->studentName,studentName)==0){printf("请输入新的第1门成绩:\n");scanf("%f",&mark1);printf("请输入新的第2门成绩:\n");scanf("%f",&mark2);printf("请输入新的第3门成绩:\n");scanf("%f",&mark3);p->mark1=mark1;p->mark2=mark2;p->mark3=mark3;flag=1;printf("修改成功\n");break;}p=p->next;}if(!flag)printf("对不起,不存在班级为 %s 的学生\n",studentName); }/************************************函数功能:根据输入的学期修改成绩************************************/void ChangeMarkByNumber(void){STUDENT *p;int b;char studentNumber[20];char flag=0;float mark1,mark2,mark3;p=headLink->next;printf("请输入学生所在学期:\n");scanf("%d",&b);printf("请输入学生学号:\n");scanf("%s",studentNumber);while(p){if(strcmp(p->studentNumber,studentNumber)==0){printf("请输入新的第1门成绩:\n");scanf("%f",&mark1);printf("请输入新的第2门成绩:\n");scanf("%f",&mark2);printf("请输入新的第3门成绩:\n");scanf("%f",&mark3);p->mark1=mark1;p->mark2=mark2;p->mark3=mark3;flag=1;printf("修改成功\n");break;}p=p->next;}if(!flag)printf("对不起,不存在学期为 %s 的学生\n",studentNumber);}/************************************函数功能:保存链表数据到文件中************************************/void SaveLinkToFile(void){STUDENT *p;FILE *fp;p=headLink->next;if(p==NULL){printf("现在没有学生信息,请先输入学生信息\n\n");return;}fp=fopen("student.txt","w+");if(!fp){printf("文件不存在\n");return;}while(p){fprintf(fp,"%s %s %s %f %f %f\n",p->studentNumber,p->studentName,p-> className,p->mark1,p->mark2,p->mark3);p=p->next;}fclose(fp);}/************************************函数功能:不及格学生成绩************************************/void DesplayMarkSegment(void){STUDENT *p;int count=0;p=headLink->next;printf("60分以下(不及格)的学生成绩如下:\n");printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");while(p){if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p-> mark3/10))))/*只要有一科不及格就认为该生不及格*/{count++;DesplayOneNode(p);}p=p->next;}printf("不及格的学生一共有%d人\n",count);}/************************************函数功能:按平均成绩排序************************************/void CompositorByTotalMark(void){STUDENT exchange,*r,*p,*q;r=headLink->next;if(r==NULL){printf("现在还没学生信息,请先输入学生信息\n");return;}while(r)/*两层while循环实现排序*/{p=r;q=r->next;while(q){if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3)){strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/strcpy(exchange.studentName,q->studentName);strcpy(exchange.className,q->className);exchange.mark1=q->mark1;exchange.mark2=q->mark2;exchange.mark3=q->mark3;strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/ strcpy(q->studentName,p->studentName);strcpy(q->className,p->className);q->mark1=p->mark1;q->mark2=p->mark3;q->mark3=p->mark3;strcpy(p->studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/strcpy(p->studentName,exchange.studentName);strcpy(p->className,exchange.className); p->mark1=exchange.mark1;p->mark2=exchange.mark2;p->mark3=exchange.mark3;}q=q->next;}r=r->next;}OutputInformation();}。