数据结构课程设计学生成绩管理系统
数据结构之学生成绩管理系统
数据结构之学绩管理系统【正文】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)数据结构课设报告学生成绩管理系统(一)数据结构课设报告学生成绩管理系统一、背景介绍为了方便教师管理学生的成绩,提高数据处理的效率和准确性,我们团队开发了一款可以管理学生成绩的系统。
二、需求分析•教师可以登录系统,并进行学生信息的录入、修改、查询和删除。
•教师可以录入、修改、查询和删除学生的成绩。
•学生也可以登录系统,并查看自己的成绩。
•教师和学生的密码需要进行加密存储,并能够找回密码。
三、设计方案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. 介绍学生成绩管理系统是一种用于管理学生学业成绩的应用软件。
该系统能够帮助教师和学生方便地录入、查询和统计学生的各科成绩,以便更好地进行教学和学习工作。
本文将针对该系统的数据结构进行设计和实现。
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)。
2020/3/27淮阴工学院数据结构课程设计报告选题名称: 学生成绩管理系统系(院): 数理学院专业:信息与计算科学班级: 计科1102班姓名: 徐连喜学号: 33指导教师: 周海岩学年学期: 2011 ~ 2012 学年第 1 学期2012 年 06 月 06 日12020/3/27【摘要】21世纪,科学技术突飞猛进,经济知识和信息产业初见端倪,特别是信息技术和网络技术的讯速发展和广泛应用,对社会的政治,经济,军事,文化等领域产生越来越深刻。
学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要。
本论文叙述到的学生成绩管理系统是用IIS+ASP网页编程+ACCESS数据库+DREAMWEAVER MX 2004+SQL查询语言实现的。
重点介绍了学生成绩管理系统的实现过程:包括系统分析,系统调查,功能设计,数据库设计,系统实现,系统测试和调试等。
本系统主要功能有查询学生成绩、单个添加学生成绩、批量添加学生成绩、删除学生成绩、管理页面和修改管理员密码等内容。
【关键词】成绩管理;成绩查询; C++22020/3/27目录中文摘要。
1。
1绪论。
4。
5选题背景。
6需求分析2总体设计。
7。
8程序设计组成框图。
9模块功能说明。
10程序流程图。
11主要函数之间相互调用3 在设计过程中的感受。
12致谢。
13参考文献 14。
附录:源程序清单。
151.绪论选题背景为了提高高校学生信息的管理效率,方便对学生信息进行管理、学校里面的3 2020/3/27学生和管理员方便去管理和查询学生信息,如再要进行查询,就得在众多的学生信息中查找自己的成绩信息,面对学院大量的学生信息,怎么可以即时而方便的管理,学生只要登录本系统就可以查找到自己的成绩信息,而管理员也方便去管理每学期的学生的成绩信息。
建立一个学生信息管理系统,使学生信息管理工作规范化,系统化,程序化,避免学生管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改学生信息是必须而且十分迫切的工作。
需求分析学生管理系统功能的信息量大,数据安全性和保密性要求最高。
本功能实现对专业信息、学生信息、教师信息情况信息的管理和统计、课程信息和成绩信息查看及维护。
系统管理员可以浏览、查询、学生的基本信息,能添加、删除和修改学生信息,这部分功能应该由系统管理员执行,但是,删除某条专业基本信息记录时,应实现对该专业的相关信息也级联删除。
并且还应具有查询,并打印输出的功能设计不同用户的操作权限和登陆方法、对所有用户开放的用户提供学生成绩信息查询、由于本系统功能实现方面并不太复杂,所以上面只是相关的学生信息管理查询的总体分析,具体实现就主要体现在学生管理,教师的管理和课程的管理这一块,也就是重点实现查询与添加学生信息,以及对成绩信息管理。
2.总体设计(1)程序设计组成框图42020/3/27按班级输出学生成绩单1.按姓名查询2增加学3删除学45按班级修改学生成6按班学期改学生成7保存所有学生信显示不及格学生成89按平均成绩排序并输出成退10.)模块功能说明(2输出功能:完成全部学生记录的显示。
1查询功能:输入姓名可以查询学生的详细信息。
2增加功能:增加新学生的信息。
34 删除功能:删除学生信息。
5 修改功能:修改学生的错误信息。
保存功能:保存已输入信息。
6读取功能:读取已输入信息。
7显示功能:按要求显示学生记录。
8排序功能:按要求完成对学生信息的排序。
9退出系统。
10)程序流程图(3 52020/3/27开始)(1~10输入指令1结束(主函数main ()的调用switch(choice){case 1:OutputInformation();break;case 2:DesplayInfoBystudentName();break;case 3:p=MallocNode();GetInformation(p); InsertOneNode(p); break;case4:DeleteNodeBystudentNumber();break;case 5:ChangeMarkByName();break;case 6:ChangeMarkByNumber();break;case 7:SaveLinkToFile();break;case8:DesplayMarkSegment();break;case 9:CompositorByTotalMark();break;case 10:SaveLinkToFile();}总结首先经过一周的编程实习,并在后一段的报告总结,我对数据结6 2020/3/27构这门科有新的认识,本人实在是获益不浅!要想编写一个准确、高效并有使用价值的程序,一定先要对课本知识熟悉,还要掌握必要的上机操作能力,写程序其实很容易而关键在于调试程序。
这次设计,让我重新掌握了数据结构,而且还得到了用数据结构解决实际问题的宝贵经验。
其次, 通过此次编程我也发现了自己在学习中的错误和不足,复习了以前学过的知识。
同时也学到了一些没学过的知识,让我从中收益非浅,也为期末考试准备了一下!更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法!致谢因为初次接触等原因此次设计遇到了许多问题,我深刻体会到老7 2020/3/27师发挥的重要作用, 数据结构程序对我们来说比较难,在匆忙的学习中更是难上加难,似乎觉得自己仅是个匆匆过客,但在老师的帮助下我学会了如何调试,如何查找系统没有提示的错误,最后终于排除万难把程序搞定,体会到原来编程也挺有意思的快感.我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。
参考文献82020/3/27[1] 李丽娟 . C语言程序设计教程(第二版). 北京:人民邮电出版社 2009[2] 刁成嘉 . C语言程序设计论文 [D].北京:清华大学出版社2004[3] 杨文军,杨柳 . C语言程序设计教程[M]. 北京:清华大学出版社 2010[4] 周启海 . C语言程序设计报告[R].北京:中国水利工程出2005版社北京:清华大学出版[M].[5] 谭浩强 . C程序设计(第三版)社 2005附录92020/3/27源程序清单#include<>#include<>#include<>#include<>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();}/************************************ 函数功能:从文件中读学生信息到链表中102020/3/27************************************/ void ReadInfoFormFile(void){FILE *fp;STUDENT *p;fp=fopen(\,);if(!fp){牰湩晴尨文件不存在\n);return;}p=MallocNode();while(fscanf(fp,%s%s%s%f%f%f,p->studentNumber,p->studentName,p->class Name,&(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;112020/3/27case 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;122020/3/27}/************************************函数功能:申请一个新结点,并将其初始化************************************/ 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=;p->mark2=;p->mark3=;p->next=NULL;return p;}/************************************ 函数功能:取得用户输入的学生信息************************************/ void GetInformation(STUDENT *t){牰湩晴尨请输入学生学号:\n);scanf(%s,t->studentNumber);牰湩晴尨请输入学生姓名:\n);scanf(%s,t->studentName);牰湩晴尨请输入该生所在班级:\n); scanf(%s,t->className);牰湩晴尨请输入第1门成绩:\n);scanf(%f,&(t->mark1));牰湩晴尨请输入第2门成绩:\n);scanf(%f,&(t->mark2));牰湩晴尨请输入第3门成绩:\n);scanf(%f,&(t->mark3));}/************************************ 函数功能:在链表的结尾处增加一个结点************************************/ 132020/3/27void 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;牰湩晴尨请输入学生姓名:\n);scanf(%s,studentName);while(p){if(strcmp(p->studentName,studentName)==0){牰湩晴尨学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n);DesplayOneNode(p);flag=1;break;}p=p->next;}if(!flag)牰湩晴尨对不起,不存在姓名为 %s 的学生\n,studentName);}/************************************函数功能:输出一个结点的信息************************************/void DesplayOneNode(STUDENT *t){printf(%s\t,t->studentNumber);printf(%s\t,t->studentName);printf(%s\t,t->className);142020/3/27printf(%.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;牰湩晴尨请输入要删除的学生学号:);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){牰湩晴尨不存在该学号的学生\n);return;}牰湩晴尨成功删除\n);}/************************************函数功能:显示所有学生的信息************************************/void OutputInformation(void){STUDENT *p;p=headLink->next;152020/3/27if(p==NULL){牰湩晴尨现在没有学生信息,请先输入学生信息\n\n);return;}牰湩晴尨学号\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;牰湩晴尨请输入学生班级:\n);scanf(%d,&a);牰湩晴尨请输入学生姓名:\n);scanf(%s,studentName);while(p){if(strcmp(p->studentName,studentName)==0){牰湩晴尨请输入新的第1门成绩:\n);scanf(%f,&mark1);牰湩晴尨请输入新的第2门成绩:\n);scanf(%f,&mark2);牰湩晴尨请输入新的第3门成绩:\n);scanf(%f,&mark3);p->mark1=mark1;p->mark2=mark2;p->mark3=mark3;flag=1;牰湩晴尨修改成功\n);break;162020/3/27}p=p->next;}if(!flag)牰湩晴尨对不起,不存在班级为 %s 的学生\n,studentName); }/************************************函数功能:根据输入的学期修改成绩************************************/void ChangeMarkByNumber(void){STUDENT *p;int b;char studentNumber[20];char flag=0;float mark1,mark2,mark3;p=headLink->next;牰湩晴尨请输入学生所在学期:\n);scanf(%d,&b);牰湩晴尨请输入学生学号:\n);scanf(%s,studentNumber);while(p){if(strcmp(p->studentNumber,studentNumber)==0){牰湩晴尨请输入新的第1门成绩:\n);scanf(%f,&mark1);牰湩晴尨请输入新的第2门成绩:\n);scanf(%f,&mark2);牰湩晴尨请输入新的第3门成绩:\n);scanf(%f,&mark3);p->mark1=mark1;p->mark2=mark2;p->mark3=mark3;flag=1;牰湩晴尨修改成功\n);break;}p=p->next;}if(!flag)牰湩晴尨对不起,不存在学期为 %s 的学生\n,studentNumber);}/************************************172020/3/27函数功能:保存链表数据到文件中************************************/void SaveLinkToFile(void){STUDENT *p;FILE *fp;p=headLink->next;if(p==NULL){牰湩晴尨现在没有学生信息,请先输入学生信息\n\n);return;}fp=fopen(\,w+);if(!fp){牰湩晴尨文件不存在\n);return;}while(p){fprintf(fp,%s %s %s %f %f %f\n,p->studentNumber,p->studentName,p->cla ssName,p->mark1,p->mark2,p->mark3);p=p->next;}fclose(fp);}/************************************函数功能:不及格学生成绩************************************/void DesplayMarkSegment(void){STUDENT *p;int count=0;p=headLink->next;printf(0分以下(不及格)的学生成绩如下:\n);牰湩晴尨学号\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->m ark3/10))))/*只要有一科不及格就认为该生不及格*/{count++;DesplayOneNode(p);182020/3/27}p=p->next;}牰湩晴尨不及格的学生一共有%d人\n,count);}/************************************函数功能:按平均成绩排序************************************/void CompositorByTotalMark(void){STUDENT exchange,*r,*p,*q;r=headLink->next;if(r==NULL){牰湩晴尨现在还没学生信息,请先输入学生信息\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,q->studentNumber);/*先复制q结点信息到exchange*/strcpy,q->studentName);strcpy,q->className);=q->mark1;=q->mark2;=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结点信息到p*/strcpy(p->studentName,;strcpy(p->className,;p->mark1=;p->mark2=;p->mark3=;192020/3/27}q=q->next;}r=r->next;}OutputInformation();}精心搜集整理,请按实际需求再行修改编辑,因文档各种差异排版需调整字体属性及大小20。