数据结构课程设计学生成绩管理系统

合集下载

数据结构之学生成绩管理系统

数据结构之学生成绩管理系统

数据结构之学绩管理系统【正文】1:引言1.1 编写目的本文档旨在设计一个学绩管理系统,来有效管理学生的各门课程成绩。

1.2 范围本文档将详细描述学绩管理系统的各个模块、功能和操作流程,并提供必要的设计和实现细节。

1.3 定义、缩略词和缩写- 学绩管理系统:用于管理学生的各门课程成绩的软件系统。

- 学生:指在学校注册并接受教育的个体。

- 课程:学生所学习的各门课程科目。

2:需求分析2.1 功能需求2.1.1 学生信息管理- 添加学生信息:包括学生姓名、学号、班级等基本信息。

- 修改学生信息:对已存在的学生信息进行修改操作。

- 删除学生信息:从系统中删除学生的信息。

2.1.2 成绩管理- 添加成绩:录入学生的各门课程成绩。

- 修改成绩:对已录入的成绩进行修改操作。

- 查询成绩:根据学生学号或姓名查询学生的成绩信息。

- 统计成绩:统计每门课程成绩的平均值、最高分和最低分。

2.2 性能需求2.2.1 响应时间- 系统应能够在用户输入操作后即时响应,保证操作的实时性。

2.2.2 数据存储- 系统应能够快速、可靠地存储和检索学生信息和成绩数据。

2.3 安全需求2.3.1 访问控制- 系统应设定不同用户角色,具备不同的访问权限。

- 管理员用户可以对学生信息和成绩数据进行修改和删除,普通用户仅可以查询和统计成绩。

2.3.2 数据保密性- 系统应保护学生个人信息和成绩数据的隐私,仅允许授权用户访问。

3:系统设计与实现3.1 系统架构3.1.1 前端设计- 使用界面简洁直观的图形化界面,方便用户操作。

- 考虑到不同平台的兼容性,采用跨平台的前端技术。

3.1.2 后端设计- 使用面向对象的编程语言实现系统的后端逻辑。

- 设计合理的数据结构和算法,以满足系统的性能需求。

3.2 数据库设计3.2.1 学生信息表- 设计学生信息表,包括学生姓名、学号、班级等字段。

- 为学号字段设置主键,确保唯一性。

3.2.2 成绩表- 设计成绩表,包括学生学号和各门课程成绩字段。

数据结构课程设计-学生成绩管理系统

数据结构课程设计-学生成绩管理系统

广东学院《数据结构课程设计》题目:学生成绩管理系统学号:姓名:年级:计算机科学与技术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单链表的定义先定义单链表结点的数据域,数据域包括学生姓名、学生学号、学生成绩等学生信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。

(2023)数据结构课设报告学生成绩管理系统(一)

(2023)数据结构课设报告学生成绩管理系统(一)

(2023)数据结构课设报告学生成绩管理系统(一)数据结构课设报告学生成绩管理系统一、背景介绍为了方便教师管理学生的成绩,提高数据处理的效率和准确性,我们团队开发了一款可以管理学生成绩的系统。

二、需求分析•教师可以登录系统,并进行学生信息的录入、修改、查询和删除。

•教师可以录入、修改、查询和删除学生的成绩。

•学生也可以登录系统,并查看自己的成绩。

•教师和学生的密码需要进行加密存储,并能够找回密码。

三、设计方案1. 数据结构设计我们采用链表的数据结构,实现学生信息和成绩的存储。

- 学生信息:学号、姓名、密码。

- 学生成绩:科目、成绩。

2. 模块划分•登录模块:实现教师和学生的登录、密码加密和找回密码。

•学生信息管理模块:实现学生信息的录入、修改、查询和删除。

•成绩管理模块:实现成绩的录入、修改、查询和删除。

•学生成绩查询模块:实现学生查看自己成绩的功能。

3. 界面设计我们采用Java Swing库实现图形化界面,美观易用。

四、开发过程1. 环境配置我们使用Java语言进行开发,并采用MySQL数据库存储数据。

开发工具为Eclipse和Navicat。

2. 实现过程在开发过程中,我们分别完成了登录模块、学生信息管理模块、成绩管理模块和学生成绩查询模块。

同时,我们进行了严格的测试和优化,保证了系统的稳定性和用户体验。

五、总结通过本次课设,我们学习到了如何设计、实现一款简单的大型软件。

同时,我们也深入理解了数据结构的应用和开发过程中需要注意的问题。

未来,我们将继续学习和提升自己的技术水平,为社会创造更多有用的产品。

六、存在的问题和改进计划1. 学生信息和成绩输入需要更为便捷目前的输入方式需要逐一输入每个学生的信息以及成绩,如果要录入多个学生的信息,效率不高。

我们计划实现批量导入的功能,可以通过Excel表格导入学生信息和成绩。

2. 安全性还需要更高的保障目前我们只是简单使用密码加密保护了教师和学生的账户信息,如果系统被攻击者入侵,那么所有的账户信息和成绩信息都会暴露,对学生隐私和数据安全造成极大威胁。

数据结构课程设计学生成绩管理系统

数据结构课程设计学生成绩管理系统

辽宁科技大学课程设计报告设计题目:学生成绩管理学院、系:电子与信息工程学院专业班级:计算机 11-2 班学生姓名:赵月指导教师:龙艳彬成绩:2013年 1 月 8 日目录一、需求分析------------------------------------------------3二、概要设计------------------------------------------------3三、详细设计------------------------------------------------53.1系统流程图-----------------------------------------------------5 3.2界面设计-------------------------------------------------------63.3各功能模块的设计----------------------------------------------7四、测试与分析---------------------------------------------9五、总结-----------------------------------------------------15六、附录(源代码)--------------------------------------161.需求分析1.1问题描述本系统实现了学生成绩管理的功能,具有学生成绩的输入、读取、查询、修改、插入、删除、排序,统计等功能。

1.2基本要求(1)?输入的形式和输入值的范围;首先输入学生个数,按回车键。

按照提示选择,将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。

数据结构课程设计---成绩管理系统

数据结构课程设计---成绩管理系统

《数据结构》课程设计报告(成绩管理系统)目录一.需求分析 (3)二.概要设计 (3)三.详细设计 (5)四.调试分析 (17)五.用户使用说明 (17)六.测试结果 (19)七.附录 (19)一、需求分析1.实现功能:该程序有非常清晰的所以能够方便用户的使用,该成绩系统能够添加多科成绩,并能够统计总成绩,能够按照学号,姓名两种方式查看,修改,删除数据. 同时可以按照学号的升序排序成绩表,已经按照单科成绩,总成绩降序排序成绩表,统计学生成绩的情况,成绩有容量查询功能,保存成绩表到磁盘,以及打开磁盘成绩表的功能,且存储位置就在程序运行文件夹内,存储文件名可以自定.2.测试数据:输入一组成绩学号12,姓名:zengyao,数学:75,语文:67学号14,姓名:taokai, 数学:84,语文:72学号27,姓名:xucheng,数学:92,语文:95能够在程序中正确运行达到要求中的所有功能二、概要设计1.成绩管理系统:struct st{long num;char c[21];float grade;float chinese;float total;}std[NUM];基本操作:int empty();操作结果:判断成绩表是否为空.void done();操作结果:从键盘上输入所选择的功能.void creat();操作结果:从键盘输入新的成绩.void print();初始条件:成绩表已存在.操作结果:输出已有的成绩表.void fix_number()初始条件:成绩表已存在.操作结果:按照学号修改成绩.void fix_name()初始条件:成绩表已存在.操作结果:按照姓名修改成绩.void fix()初始条件:成绩表已存在.操作结果:选择修改成绩方式.void del_number()初始条件:成绩表已存在.操作结果:按照学号删除成绩. void del_name()初始条件:成绩表已存在.操作结果:按照姓名删除成绩. void del()初始条件:成绩表已存在.操作结果:选择删除方式.void search_number()初始条件:成绩表已存在.操作结果:按照学号查找.void search_name()初始条件:成绩表已存在.操作结果:按照姓名查找.void search()初始条件:成绩表已存在.操作结果:选择查找方式.void line_number(int m)初始条件:成绩表已存在.操作结果:按照学号排序.void line_grade(int m)初始条件:成绩表已存在.操作结果:按照数学成绩排序. void line_chinese(int m)初始条件:成绩表已存在.操作结果:按照语文成绩排序.void line_total(int m)初始条件:成绩表已存在.操作结果:按照总成绩排序.void line()初始条件:成绩表已存在.操作结果:选择排序方式.void save()初始条件:成绩表已存在.操作结果:保存成绩表到磁盘.void load()初始条件:磁盘中存在此名称的成绩表.操作结果:从磁盘打开成绩表.2.主程序:void main(){初始化:do{接受命令;处理命令;}while(“命令”=“退出”);}三、详细设计struct st//定义结构体{long num;//定义学号char c[21];// 定义姓名字符数组float grade;//定义浮点型变量gradefloat chinese;// 定义浮点型变量chinesefloat total;// 定义浮点型变量total}std[NUM];//定义结构体数组int n=0;//定义表单容量记录变量1.成绩表为空判断函数int empty()int flag=1;if (n==0)printf("\n%c 成绩表为空!回车键返回!",19);flag=0;while(1)//如果不输入回车则继续进行循环getchar();if (getchar()=='\n') break;return(flag);//将flag的值返回进行接下来操作//判断成绩表为空函数是许多子函数调用之前if语句的判断条件,而返回值flag将赋为0,1用于之后的函数判断.2.操作完成格式输出函数void done()printf("\n%c 操作完成!回车键结束!\n",19);while(1)//不是回车则不断循环getchar();if (getchar()=='\n')//判断输入的是否是回车system("cls");break;//进行系统清屏//设计操作完成函数在整个程序运行中都将起到非常重要的作用,其中调用了系统清屏函数,同时while(1)的使用比较巧妙,简单确有非常好的操作效果;3.查看表单容量函数void capacity()printf("\n%c 成绩表最大容量:%d条",16,NUM-1);printf("\n%c 已用容量:%d条",16,n);printf("\n%c 剩余容量:%d条",16,NUM-n-1);done();//本身设计程序时,开始开辟了100个容量为最大空间,所以设计了表单容量查询.4.添加数据函数void creat()int i,j,flag;printf("\n-------添加数据-------\n\n");for(i=n+1;i<=NUM;i++)flag=0;printf("请输入要添加的学号:");scanf("%ld",&std[i].num);if (i>=1)//当成绩表中已经存在成绩,进行循环查找若存在相同的学号则跳出循环,不输入成绩for(j=1;j<i;j++)if (std[i].num==std[j].num)printf("%c该学号已存在!请输入新的学号!\n\n",19);flag=1;i--;break;//将i++减回去if (flag!=0) continue;printf(" 姓名:");scanf("%s",std[i].c);printf(" 数学成绩:");scanf("%f",&std[i].grade);printf(" 语文成绩:");scanf("%f",&std[i].chinese);std[i].total=std[i].chinese+std[i].grade;n+=1;printf("\n%c 是否继续添加数据(1、退出;任意键继续!):\n",19);getchar();if (getchar()=='1') break;else continue;system("cls");//添加成绩首先将所有成绩查询,看是否存在相同的学号,若存在还要将循环时i的计数减1,添加时直接将各项数据循环存储与结构体数组中,利用continue 语句和getchar()函数结合做条件判断实现了选择性的继续添加或者退出,也区别开了存在相同学号成绩的情况5.查看数据函数void print()if (empty()==0) system("cls");//判断成绩表是否为空,不为空就执行下面程序输出成绩表elseint i;for(i=1;i<=n;i++)printf("\n%ld\t\t%s\t\t%5.2f\t\t%5.2f\t\t%5.2f\n",std[i].num,std[i].c,std[i].gr ade,std[i].chineses,std[i].total);done();//查看函数简单的利用数组的循环输出数据,但是在开头必须判断成绩表是否为空,\t%s\t\t%5.2f不断改变间距使得输出的数据整齐好看.6.按学号修改数据函数void fix_number()long num;int i,flag=0;printf("%c 请输入学生的学号:",16);scanf("%ld",&num);//输入学号for(i=1;i<=n;i++)//循环查找到这个学号if (std[i].num==num)flag=1;break;//做标记if (flag==1)printf("%c 变更%ld的姓名为:",16,num);scanf("%s",std[i].c);printf("%c 变更%ld的数学成绩为:",16,num);scanf("%f",&std[i].grade);printf("%c 变更%ld的语文成绩为:",16,num);scanf("%f",&std[i].chinese);std[i].total=std[i].chinese+std[i].grade;done();else {printf("%c 此学号不存在!!!",19);done();}//修改函数与添加成绩思路比较接近,只是在开始查找是否存在需要修改的数据.7.按姓名修改数据函数void fix_name()printf("%c 请输入学生的姓名:",16);scanf("%s",&c);for(i=1;i<=n;i++)if (strcmp(std[i].c,c)==0)//判断是否存在此姓名的学生flag=1;break;//如果没有则跳出操作if (flag==1)printf("%c 变更%s的学号为:",16,c);scanf("%ld",&std[i].num);printf("%c 变更%s的数学成绩为:",16,c);scanf("%f",&std[i].grade);printf("%c 变更%s的语文成绩为:",16,c);scanf("%f",&std[i].chinese);std[i].total=std[i].chinese+std[i].grade;//将总成绩修改done();else {printf("\n%c 此姓名不存在!!!",19);done();//该函数与按学号修改函数思路完全一致.8.修改数据函数void fix()if (empty()==0) system("cls");elseint s;scanf("%d",&s);switch(s)case 1:fix_number();break; //按学号修改成绩case 2:fix_name();break; //按姓名修改成绩default :system("cls");9.按学号删除数据函数void del_number()long num;int i,j,flag=0;printf("\n%c 请输入学生的学号:",16);scanf("%ld",&num);for(i=1;i<=n;i++)//循环搜索需要删除的成绩if (std[i].num==num)flag=1;break;if (flag==1)for(j=i;j<=n;j++)std[j].num=std[j+1].num; //将删除数据之后的学号前移一位strcpy(std[j].c,std[j+1].c);// 将删除数据之后的姓名前移一位std[j].grade=std[j+1].grade; //分别将数学,语文,总成绩前移一位std[j].chinese=std[j+1].chinese;std[j].total=std[j+1].total;n-=1;done();else {printf("\n%c 此学号不存在!!!",19);done()//删除算法的思路,经典在于删除数据后将之后所有数据提前的循环量的控制首先还是简单的查找删除数据的位置,n-=1改变表单数据量10.按姓名删除数据函数void del_name()char c[21];int i,j,flag=0;printf("\n%c 请输入学生的姓名:",16);scanf("%s",c);for(i=1;i<=n;i++)if (strcmp(std[i].c,c)==0)flag=1;break;if (flag==1)for(j=i;j<=n;j++)std[j].num=std[j+1].num; //将删除数据之后的学号前移一位strcpy(std[j].c,std[j+1].c); // 将删除数据之后的姓名前移一位std[j].grade=std[j+1].grade; //分别将数学,语文,总成绩前移一位std[j].chinese=std[j+1].chinese;n-=1;done();else {printf("\n%c 此姓名不存在!!!\n",19);done();按照姓名删除与按照学号删除思路一致11.删除数据函数void del()if (empty()==0) system("cls");elseint s;scanf("%d",&s);switch(s)case 1:del_number();break;//按照学号删除成绩case 2:del_name();break; //按照姓名删除成绩default :system("cls");11.按学号查找函数void search_number()long num;int i,flag=0;scanf("%ld",&num);for(i=1;i<=n;i++) //循环查找若找到了该学号则进行输出,没有找到则跳出查找if (std[i].num==num)flag=1;break;if (flag==1)printf("\n%ld\t\t%s\t\t%5.2f\t\t%5.2f\n",std[i].num,std[i].c,std[i].grade,std[i ].chinese);done();else {printf("\n%c 此学号不存在!!!",19);done();}12.按姓名查找函数void search_name()char c[21];int i,flag=0;printf("%c 请输入学生的姓名:",16);scanf("%s",c);for(i=1;i<=n;i++)if (strcmp(std[i].c,c)==0)//循环查找该姓名,没有找到则跳出操作flag=1;break;if (flag==1)printf("\n%ld\t\t%s\t\t%5.2f\t\t%5.2f\n",std[i].num,std[i].c,std[i].grade,std[i ].chinese);done();else {printf("\n%c 此姓名不存在!!!",19);done();}13.查找数据函数void search()if (empty()==0) system("cls");elseint s;printf("\n-------查找数据-------\n\n");printf("请选择查找方式(1、按学号查找;2、按姓名查找;任意键返回!):");scanf("%d",&s);switch(s)case 1:search_number();break;// 按学号查找case 2:search_name();break;// 按姓名查找default :system("cls");//进行系统清屏14.按学号排序函数void line_number(int m)struct st temp;//定义结构体变量tempfor(i=1;i<m;i++)for(j=i+1;j<=m;j++)if (std[i].num>std[j].num)//比较学号大小按从小到大排序temp.num=std[i].num; //利用中间变量排序学号std[i].num=std[j].num;std[j].num=temp.num;strcpy(temp.c,std[i].c);//利用中间变量按学号排序调整姓名strcpy(std[i].c,std[j].c);strcpy(std[j].c,temp.c);temp.chinese=std[i].chinese;//利用中间变量按学号排序调整语文成绩std[i].chinese=std[j].chinese;std[j].chinese=temp.chinese;temp.grade=std[i].grade; //利用中间变量按学号排序调整数学成绩std[i].grade=std[j].grade;std[j].grade=temp.grade;temp.total=std[i].total;//利用中间变量按学号排序调整总成绩std[i].total=std[j].total;std[j].total=temp.total;done();//排序函数简单的利用中间变量来交换位置排序,只是for循环中j=i+1;j<=m这些变量的的选择比较关键.15.按数学成绩排序函数void line_grade(int m)struct st temp;//定义结构体变量tempfor(i=1;i<m;i++)for(j=i+1;j<=m;j++)if (std[i].grade<std[j].grade)//比较数学成绩大小按从大到小排序temp.num=std[i].num; //利用中间变量按数学成绩排序调整学号std[i].num=std[j].num;std[j].num=temp.num;strcpy(temp.c,std[i].c);//利用中间变量按数学成绩排序调整姓名strcpy(std[i].c,std[j].c);strcpy(std[j].c,temp.c);temp.chinese=std[i].chinese;//利用中间变量按数学成绩排序调整语文成绩std[i].chinese=std[j].chinese;std[j].chinese=temp.chinese;temp.grade=std[i].grade; //利用中间变量排序数学成绩std[i].grade=std[j].grade;std[j].grade=temp.grade;temp.total=std[i].total;//利用中间变量按数学成绩排序调整总成绩std[i].total=std[j].total;std[j].total=temp.total;done();//调用操作完成函数//按其他方式排序思想与数学成绩排序完全一致16.表单数据排序函数void line()if (empty()==0) system("cls");elsescanf("%d",&s);switch(s)case 1:line_number(n);break;// 按学号排序case 2:line_grade(n);break//;按数学成绩排序case 3:line_chinese(n);break;//按语文成绩排序case 4:line_total(n);break;//按总成绩排序default :system("cls");17.保存成绩表文件函数void save()if (empty()==0) system("cls");//成绩表如果为空,就不进行保存elseprintf("\n-------保存成绩表-------\n\n");FILE *fp; //定义文件指针int i;char c[21];printf("%c 输入文件名:",1);scanf("%s",c);if ((fp=fopen(c,"wb"))==NULL)//此文件不存在,无法保存.printf("%c 成绩表保存失败!\n",19);done();return;for(i=1;i<=n;i++)fwrite(&std[i],sizeof(struct st),1,fp);//进行文件保存fclose(fp);// 函数fclose()关闭给出的文件流, 释放已关联到流的所有缓冲区done();18.打开成绩表文件函数void load()FILE *fp; //定义文件指针printf("%c 输入文件名:",1);scanf("%s",c);if ((fp=fopen(c,"rb+"))==NULL)//没有找到此文件,打开失败printf("\n%c 无此文件!\n",19);done();return;for(i=1;i<NUM;i++)循环读取数据fread(&std[i],sizeof(struct st),1,fp);//读取成绩表if (feof(fp)) break;n+=1;fclose(fp);//保存和打开成绩表的函数都是基本的文件存储方式,利用数组保存到磁盘,储存的位置就在运行该程序的文件夹所以方便找到,同时n+=1;非常重要否则将出现打开文件成功但是查看成绩表依旧为空的情况,19.主程序void main(){char c;while(1){printf("\n\t\t ——学生成绩管理工具——\n");printf("\t\t <<A Production By archer21>>\n\n");printf("\t\t\t 1、查看已有的成绩表\n");printf("\t\t\t 2、修改一个已有的数据\n");printf("\t\t\t 3、添加一个新的数据\n");printf("\t\t\t 4、删除一个已有的数据\n");printf("\t\t\t 5、查找一个已有的数据\n");printf("\t\t\t 6、排列成绩表中的数据\n");printf("\t\t\t 7、保存已有的成绩表到磁盘\n");printf("\t\t\t 8、打开磁盘上的成绩表\n");printf("\t\t\t 9、查看成绩表容量\n");printf("\t\t\t 0、退出程序\n");printf("\n%c 选择操作:",16);scanf("%c",&c);switch(c){case '1':print();break;//输出查看case '2':fix();break; //修改成绩case '3':creat();break; //添加成绩case '4':del();break; //删除成绩case '5':search();break; // 查找成绩case '6':line();break; //排序成绩case '7':save();break; //保存成绩表case '8':load();break; //打开成绩表case '9':capacity();break//查看成绩表容量;case '0':printf("\n\t\t\t\t信息工程2班,许城\n\t\t\t<<A Production By archer21>>\n\t\t\t Produced On 15/12/2009\n\n");exit(7);break;//主函数仅仅是用来选择操作选项以及其中的16,19,如箭头,感叹等符号使程序界面更加清晰default :system("cls"); /*默认清屏*/4.函数的调用关系图四、 调试分析1. 由于在程序中要求输出整齐美观,所以在格式上遇到了一些问题/t 的用法,查看操作中由于在添加函数中经常不注意多加了个n+=1,改变了循环次数,使得查看操作造成输出了很多0的无数据情况.2. 在读写成绩表文件时少了个n+=1造成读取出来的成绩表为空,empty(),done(),default :system("cls")这几个函数在多处需要用到,一但不用都会使得程序运行受阻,经过不断调试该进才完善了程序的功能. 3. 时空复杂度的分析由于程序思想,以及算法比较简单所以时间复杂度仅取决于循环的层数多是O(n),O(n*(n+1)),O(n 2),由于开始就开辟了结构体数组,也定义了容量,所以空间复杂度控制在O(n),以内,在creatsavesearch_namesearch_numbe rfix_namefix_numberdel_namedel_numberline_numberline_chineseline_gradeline_totalmain:printsearch load line fix del排序算法时可能会达到O(n+1).五、用户使用说明1.本程序的运行环境为DOS操作系统,成绩管理系统的执行文件为:XCgrade.exe2.本程序有清晰的索引列表,能够让用户轻松的使用,输入1至9可选择不同的功能,其中又有更加具体的功能实现,选择后,按回车即可。

数据结构课程设计学生成绩管理系统

数据结构课程设计学生成绩管理系统

课程设计报告课程设计题目: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[],然后对结构体数组进行从大到小排序(选择排序)然后对结构体一一查找相应的信息。

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计学生成绩管理系统是一个用于管理学生学习成绩的软件系统。

它通常用于学校、教育机构或教师们来跟踪和记录学生的学习进展,并生成报告和分析数据。

在数据结构课程设计中,学生成绩管理系统需要设计合适的数据结构来存储和操作学生成绩数据。

在设计学生成绩管理系统时,可以使用以下数据结构: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. 实现环节首先, 分析题目规定划分实现模块, 定义基本数据类型, 诸如构造体、链表等;另一方面, 针对上述旳基本操作实现详细需要进行旳操作, 详细实现每个环节需要进行旳基本操作, 即详细编写每个小函数实现功能;最终, 编写主函数对每个实现进行按需调用, 实现操作。

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计近年来,随着信息技术的快速发展,学生成绩管理系统在学校中得到了广泛应用。

学生成绩管理系统是一种基于数据结构的软件系统,旨在帮助学校更好地管理学生的学习成绩。

本文将介绍一个基于数据结构的学生成绩管理系统的设计。

首先,我们需要设计一个合适的数据结构来存储学生的学习成绩。

在这个系统中,我们可以使用一个二维数组来存储学生的成绩信息。

数组的行表示学生的学号,列表示不同科目的成绩。

这样,我们就可以方便地对学生成绩进行增删改查的操作。

接下来,我们需要设计一些基本的功能来实现学生成绩的管理。

首先是添加学生的成绩信息。

当学生入学时,管理员可以通过系统将学生的学号和成绩添加到数组中。

其次是删除学生的成绩信息。

当学生毕业或者转学时,管理员可以通过系统将学生的学号和成绩从数组中删除。

再次是修改学生的成绩信息。

当学生的成绩发生变化时,管理员可以通过系统修改学生的成绩。

最后是查询学生的成绩信息。

管理员可以通过系统查询学生的学号,然后系统会返回该学生的成绩信息。

除了基本的功能,我们还可以设计一些高级功能来提升学生成绩管理系统的实用性。

例如,我们可以设计一个成绩统计功能,用于统计学生的平均成绩、最高成绩和最低成绩。

这样,管理员可以更好地了解学生的学习情况。

另外,我们还可以设计一个成绩排名功能,用于按照成绩对学生进行排名。

这样,管理员可以更方便地找出成绩优秀的学生。

在实际应用中,我们还可以将学生成绩管理系统与其他系统进行集成。

例如,我们可以将学生成绩管理系统与学生信息管理系统进行集成,这样可以更方便地管理学生的学习情况。

另外,我们还可以将学生成绩管理系统与家长端进行集成,这样家长可以通过系统查看孩子的成绩情况,及时了解孩子的学习进展。

总之,学生成绩管理系统是一种基于数据结构的软件系统,可以帮助学校更好地管理学生的学习成绩。

通过合适的数据结构和功能设计,我们可以方便地对学生成绩进行增删改查的操作,并且可以提供一些高级功能来提升系统的实用性。

数据结构课设报告学生成绩管理系统-V1

数据结构课设报告学生成绩管理系统-V1数据结构课设报告——学生成绩管理系统一、前言学生成绩管理系统是一种方便学校和老师管理学生成绩的软件,可以提高教学效率,减轻教师工作负担,使学校管理更加科学化,并且有利于提高学生的成绩。

本篇报告将重点介绍数据结构课设——学生成绩管理系统的设计与实现。

二、系统功能1.学生信息的录入、修改、删除和查询。

2.成绩信息的录入、修改、删除和查询。

3.根据学号、姓名、班级等条件进行成绩查询和统计。

4.可以查询某个学生的所有科目的成绩。

5.可以查询某个科目的所有学生成绩。

6.可以进行成绩的按科目排名和按班级排名。

7.可以导入和导出学生成绩信息。

三、主要数据结构本系统的主要数据结构采用了链表和树结构。

1.链表结构:用来存储学生信息和成绩信息,每个节点包含了学号、姓名、班级、科目、成绩等信息。

2.树结构:用来存储学生成绩信息,每个节点表示一个学生的成绩信息,包含了学号、姓名、班级、所有科目的成绩等信息。

四、系统设计1.采用了MVC思想,把视图、控制器和模型分开管理,提高了系统的安全性、可维护性和可扩展性。

2.系统采用了图形界面,用户友好,易于操作。

3.实现了学生信息的录入、修改、删除和查询、成绩的录入、修改、删除和查询等重要功能。

4.使用了数据结构中的排序算法,可以按照科目成绩和班级成绩进行排序展示。

五、实现效果本系统的实现效果良好,满足了学校和教师的各种需求。

系统可以快速查询和统计学生成绩,提高了学校管理水平和教学质量。

同时,系统也减轻了教师工作负担,提高了教学效率。

六、总结学生成绩管理系统是一种非常实用的软件,在现代教育管理中扮演着重要的角色。

本次数据结构课设——学生成绩管理系统的设计与实现,深入运用了数据结构的知识,使得系统运行更加快捷高效。

在未来的学校管理中,我们会进一步优化和完善这个系统,为广大教师和学生服务。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计学生成绩管理系统
课程设计报告
课程设计题目:1:学生成绩管理系统
2:joseph环
3:猴子选大王
姓名洪军
学号 0706
班级1421807
指导教师邹国华
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.h
typedef int status;
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define N 10
typedef struct student{ //学生结构体(链表)
char num[9];
char name[15];
char sex[2];
int score[4];
student *next;
}student,*stu;
struct shu{ //辅助结构体数组存储学生总成绩和学号便于排序。

相关文档
最新文档