您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 理学 > 学生成绩管理系统的设计与实现
一.概述1.1设计目的及要求实验目的:通过该系统的设计,加深对数据结构链表的建立、添加、查询等的掌握,加深对排序算法的掌握等。实验要求:在顺序存储结构基础上进行的插入、删除、查找等算法的思想和实现。掌握线性表的链式存储结构的建立。在链表中插入、删除和查找算法的思想和算法实现。1.2实验环境Windowsxp系统VC++6.0二.设计思路及内容2.1设计思路程序设计由两部分组成:算法和数据结构,合理地选择和实现一个数据结构与处理这些数据结构具有同样的重要性。2.2设计内容1、记录包括一个学生的学号、姓名、性别、各门课成绩、综合成绩。2、输入功能:可以一次完成若干条记录的输入。3、显示功能:完成全部学生记录的显示。4、查找功能:完成按姓名或学号查找学生记录,并显示。5、排序功能:按学生成绩或学号进行排序。6、插入功能:插入一条新的学生记录。7、将学生记录存在文件学生中。8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!-2-Main函数Menu函数查询模块删除模块添加模块排序模块三.程序设计3.1程序模块可以将这个系统分为以下模块:查询模块、排序模块、添加模块、删除模块。3.2程序流图图3-1主函数流程图查询选择查询方式输入学号查询输入姓名查询输入成绩查询找到学号?找到姓名?找到成绩?32Y没有找到,退出NNN输出查找结果YY1图3-2查询模块流程图-3-图3-3排序模块流程图图3-4添加模块流程图添加输入学生信息保存排序选择排序方式按学号排序按成绩排序输出-4-图3-5删除模块流程图3.3结构体typedefstructstudent//定义学生{charname[10];intnumber;charsex[2];intmath;integlish;intclanguge;intaverage;}student;typedefstructunit//定义接点{studentdate;structunit*next;}unit;3.4主函数功能介绍主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式菜单选用switch-case来选择。3.5源代码#includestdio.h#includestdlib.h#includestring.htypedefstructstudent//定义学生{charname[10];intnumber;charsex[2];intmath;integlish;intclanguge;intaverage;}student;typedefstructunit//定义接点{删除删除成功输入删除学生名字-5-studentdate;structunit*next;}unit;unit*build()//建立链表并返回指针{unit*p;if((p=(unit*)malloc(sizeof(unit)))==NULL){printf(=初始化失败!);return0;}else{p-next=NULL;p-date.number=0;//头结点存放学生人数printf(初始化成功!\n);returnp;}}voidadd(unit*head)//增加学生{unit*p,*q;intm,n=0;q=head-next;p=(unit*)malloc(sizeof(unit));printf(=请输入新生姓名!\n);gets(p-date.name);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;-6-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;p-next=q;head-date.number++;}voiddeletion(unit*head)//删除一名学生{unit*p=head-next,*q=head;charN[10];printf(=请输入你想删除的学生姓名!\n);gets(N);fflush(stdin);if(p==NULL)printf(=系统无学生可删除!\n);while(p){if(strcmp(p-date.name,N)==0){q-next=p-next;head-date.number--;printf(=删除%s成功!\n,p-date.name);free(p);break;}else{p=p-next;q=q-next;if(p==NULL)printf(=你要删除的学生不存在,删除失败!\n);}}}intdisplay(unit*head)//显示学生信息{unit*p=head-next;intm,n=0;charN[10];if(p==NULL){printf(=系统无学生!\n);return0;}while(n==0){printf(******************************************************************************\n);printf(=请选择你的操-7-作!\n);printf(=\t\t\t1.显示所有\t2.按姓名查找\n\t\t\t3.按学号查找\t4.返回主菜单\n);scanf(%d,&m);fflush(stdin);switch(m){case1:printf(\n=该系统拥有%d名学生!\n\n,head-date.number);p=head-next;printf(\t姓名\t学号\t\t性别\t数学\t英语\tc语言\t综合\n\n);while(p){printf(\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n,p-date.name,p-date.number,p-date.sex,p-date.math,p-date.eglish,p-date.clanguge,p-date.average);p=p-next;}break;case2:printf(=请输入查找姓名!\n);gets(N);fflush(stdin);p=head-next;while(p){if(strcmp(p-date.name,N)==0){printf(\t姓名\t学号\t性别\t数学\t英语\tc语言\t综合\n);printf(\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n,p-date.name,p-date.number,p-date.sex,p-date.math,p-date.eglish,p-date.clanguge,p-date.average);break;}else{p=p-next;if(p==NULL)printf(=你要查的学生不存在!);}}break;case3:printf(=请输入查找学号!\n);scanf(%d,&m);fflush(stdin);p=head-next;while(p)-8-{if(p-date.number==m){printf(\t姓名\t学号\t性别\t数学\t英语\tc语言\t综合\n);printf(\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n,p-date.name,p-date.number,p-date.sex,p-date.math,p-date.eglish,p-date.clanguge,p-date.average);break;}else{p=p-next;if(p==NULL)printf(=你要查的学生不存在!\n);}}break;case4:n=1;break;}}return1;}intrange(unit*head)//排序{unit*p=head,*q=head-next;intn,i,m=head-date.number;printf(*******************************************************************************\n);printf(\t\t\t1.按学号\t2.按成绩\n\n);printf(=请选择操作!\n》);scanf(%d,&n);fflush(stdin);if(q==NULL){printf(=无学生可排序!\n);return0;}switch(n){case2:for(i=0;im;i++)//按总分排序{p=head;q=head-next;while(q-next){if((q-date.average)(q-next-date.average)){-9-p-next=q-next;p=p-next;q-next=p-next;p-next=q;}else{p=p-next;q=q-next;}}}break;case1:for(i=0;i=m;i++)//按学号排序{p=head;q=head-next;while(q-next){if((q-date.number)(q-next-date.number)){p-next=q-next;p=p-next;q-next=p-next;p-next=q;}else{p=p-next;q=q-next;}}}break;}printf(=排序成功!\n);return1;}voidmenu(){printf(\n*********************************主菜单***************************************\n);printf(\t\t\t1.新建系统\t2.添加学生\n\t\t\t3.删除学生\t4.查看信息\n\t\t\t5.排列顺序\t6.读取信息\n\t\t\t7.保存信息\t8.退出系统\n);printf(=请选择你的操作!\n);}-10-intsave(unit*head)//保存{FILE*fp;unit*p;p=head;if((fp=fopen(d:\\学生,wb+))==NULL){printf(=保存失败!);return0;}while(p){fwrite(&(p-date),sizeof(student),1,fp);p=p-next;}printf(=保存成功!);fclose(fp);return1;}unit*read()//读入系统学生信息{inti;unit*p,*q,*head;FILE*fp;if((head=(unit*)malloc(sizeof(unit)))==NULL){printf(=开辟空间失败!);exit(1);}else{head-next=NULL;head-d
本文标题:学生成绩管理系统的设计与实现
链接地址:https://www.777doc.com/doc-4944588 .html