数据结构与算法课程设计学生成绩管理系统
数据结构课程设计---学生成绩管理系统
编号:数据结构与算法课程设计说明书题目:学生成绩管理系统学院:计算机科学与工程学院专业:计算机科学与技术学生姓名:学号:指导教师:2012年09 月21 日摘要随着科学的发展和社会的进步,许多过去由人工处理的繁杂事务开始交付计算机来完成。
明显地加快了经济信息化和社会信息化的进程。
因此,计算机教育在各国备受重视,计算机知识与能力已成为21世纪人才素质的基本要素之一。
本说明书简单叙述了学生管理系统的现状,重点介绍了学生成绩管理系统的实现过程:包括系统分析、数据流程分析、功能设计、系统实现、系统测试和调试。
C语言是一种通用的程序设计语言,C语言在很多方面继承和发展了以往许多高级程序设计语言的成果经验与特色,具有适应性强、应用范围广、书写格式自由、数据类型丰富、数据结构系统化、运行程序质量高、可移植性好和运行效率高等优点。
而《数据结构与算法》则是对数据进行一定的结构化,通过运用各种算法使系统的实现更简便易行。
关键词:C语言;数据结构;学生成绩管理系统;目录1 系统概述 (1)2 需求分析 (2)2.1 数据需求分析 (2)2.2 功能需求分析 (2)2.3 界面需求 (3)2.4 输入输出形式 (3)2.5 开发环境 (3)3 详细设计 (3)3.1 系统结构 (3)3.2 各个模块的功能 (4)3.2.1 模块功能的设计 (5)3.3 数据结构设计 (19)3.3.1 学生成绩信息结构体 (19)3.3.2 单链表node结构体 (19)4 测试结果 (20)5 结论 (23)参考文献 (24)引言背景:21世纪,科学技术突飞猛进,特别是信息技术和网络技术的迅速发展,各个学校的规模也随之不断增大,有关学生成绩管理工作所涉及的数据量越来越大,如若进行的仍是手工的学生成绩管理,学校就不得不靠增加人力、物力来进行学生成绩管理。
即使如此,手工管理仍具有效率低、管理复杂和易出错等诸多问题。
所以在学校这样一个具有超大数据量的机构中,通过应用信息技术和网络技术对学生成绩信息进行系统化的管理是必须的。
数据结构课程设计-学生成绩管理系统
广东学院《数据结构课程设计》题目:学生成绩管理系统学号:姓名:年级:计算机科学与技术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. 安全性还需要更高的保障目前我们只是简单使用密码加密保护了教师和学生的账户信息,如果系统被攻击者入侵,那么所有的账户信息和成绩信息都会暴露,对学生隐私和数据安全造成极大威胁。
数据结构课程设计---成绩管理系统
《数据结构》课程设计报告(成绩管理系统)目录一.需求分析 (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章课程设计目的与要求5 1.1 课程设计目的51.2 课程设计的实验环境5 1.3 课程设计的预备知识5 1.4 课程设计要求6第2章课程设计容62.1题目的选择62.2 题目的具体实现62.3 思考题解析23总结:26参考文献错误!未定义书签。
第1章课程设计目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业、软件工程专业的专业技术实践课。
本实践课的主要目的是:使学生学会利用在课堂中学过的理论知识,解决相应的实际问题,深入理解和灵活掌握所学的容,培养学生理论和实践相结合的能力,培养学生分析问题解决问题的能力。
同时,在实验步骤规化、程序设计方法等方面受到比较系统和规的训练。
通过实践设计使学生进一步加深对程序设计的规化及对复杂程序设计步骤的理解。
通过课程设计,加深对《数据结构》这一课程所学容的进一步理解与巩固。
通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
通过课程设计,开发一个中小型系统,掌握系统研发全过程。
通话课程设计,培养分析问题、解决实际问题的能力。
1.2 课程设计的实验环境PC机,WindowsXP,C++。
1.3 课程设计的预备知识C语言程序设计、数据结构。
1.4 课程设计要求(1)认真查找资料,分析每个题目应选择的数据结构(逻辑结构和物理结构);(2)按时到实验室调试程序,遵守实验室的规章制度,爱护设备;(3)每个题目编写源程序时,每个子功能定义为相应的子函数,在主函数中调用各子函数,程序结构清晰,有必要的注释,可读性强。
(4)程序健壮性强,当数据输入错误时,要进行相应的处理;(5)分析算法的时间复杂度,要求算法的效率尽可能高;(6)对于排序算法,要验证排序算法的稳定性。
数据结构-学生成绩管理系统课程设计
“数据结构与算法”课程设计报告*课程设计题目;要求:完成学生成绩的录入、统计、查询、修改、删除、输出。
(一)需求和规格说明1、软件其本身应是一个大的分支系统,每个分支都对应系统的一项功能。
在数据通过系统主功能输入完成后,通过调用各个子功能对数据进行相应的处理,达到相应的目的。
2、系统中首相要解决的问题就是信息的存储,学生的信息包含多方面的内容,必须用类或结构体去存储。
原题目中要求学生学号num用int类型的变量来存储,但实际情况下此设计并不妥,所以在系统设计的过程中,我用了一个长度为10的char类型的数组来存储学号,基本满足了实际应用的基本要求。
实际设计时系统的数据表如下3、由于系统本身为一个管理系统,所以设计过程中应采用交互式的方式方便操作者的使用,由于没有采用图形界面,所以可以通过循环弹出功能菜单的方式实现。
4、在系统各项子功能实现的过程中,需要通过编写函数,调用库函数等方式以实现字符串操作、指针操作、文件操作等,以达到系统中各项功能的不同要求。
(二)设计1、设计思路(1)、结构体的定义代码如下:struct data{char Name[n]; //姓名char Class[n]; //班级char Number[n]; //学号float cprog,media,eng,math,sport; //各科成绩float sum; //总分float ave; //平均数int order; //名次};typedef data *Infor;通过以上定义,将单个学生的各项基本信息封装到了一个名为Infor的结构体变量中。
另外,为了在系统中方便实现排序、查询、删除等功能,在头文件func.h 中又定义了一个Infor类型的数组stu[maxnum](maxnum为宏变量,大小为999),该数组默认可以存储999名学生的信息,如此一来,便大大简化了排序等功能的实现难度。
(2)、系统框架此系统大体框架由三个层次构成,依次为系统主菜单,主功能下设的子菜单及最底层菜单下的功能实现。
数据结构课程设计-学生成绩管理系统(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.8 5)课程设计进度安排⑴准备阶段(4学时):选择设计题目、了解目的要求、查阅相关资料;⑵程序模块设计分析阶段(4学时):程序概要设计、详细设计;⑶代码编写调试阶段(8学时):程序模块代码编写、调试、测试;⑷撰写论文阶段(4学时):总结设计任务和设计内容,撰写设计论文。
学生成绩管理系统数据结构课程设计
算法与数据结构课程设计---学生成绩管理系统《算法与数据结构课程设计》综合实验课程设计名称:学生成绩管理系统专业:计算机科学与技术学生成绩管理系统一、问题的描述和分析1.1问题的描述随着社会的发展和经济时代的到来,管理信息系统在各行各业都越来越重要,特别是教育事业。
在经济发达的国家,许多教育机构(如公办、私立、培训机构等),都投入了大量的资金开发MIS系统,以求在将来激烈的竞争中立于不败之地。
在我国,民办教育是新兴的一个行业,是随着改革开放和市场经济的发展根据中国特有的国情发展起来的,特别是中国民办教育促进法的出台,从一定的程度上规范和促进了中国民办教育的发展,这是一个很有发展前途的新兴产业,但是同发达国家相比,我国的民办教育行业的信息技术的应用程度还很低,只有在大城- 0 -算法与数据结构课程设计---学生成绩管理系统市中发展较早、规模较大的民办院校中才使用计算机进行大规模操作,从各方面提高工作效率,取得良好的社会和经济效益,而一些新兴的、规模较小的民办机构还没有全部具备这种功能。
因此可见,随着我国民办教育的迅速发展,信息技术在其上的应用会更加地广泛和深入。
1.2现有系统存在问题的分析有的学校根本就没有系统,还是手工操作计算机日新月异的发展,但是有的领导只见眼前利益,不关心,甚至不敢尝试新兴的事物。
手工操作还十分落后,效率极低,成本很大,以后的社会是信息的社会,信息只有快,准,精才能发挥其价值。
所以机器代替人力是必然的历史发展趋势,只有领导的重视和支持才能从人工操作改为计算机的自动化系统。
人工操作必将被计算机代替。
有些学校虽使用了计算机,甚至管理系统,但是仍然存在很多问题,问题一日不解决,效率就一日提不上去。
还有,有的系统很不完善到处是漏洞,可以说是千疮百孔,这样极不完善的系统能有保障吗?所以制作一个完善的学生管理系统是必不可少的。
二、数据结构的设计struct person{char name[20];long num;float math;float English;float chinese;float average;float sum;}student;三、模块:- 1 -算法与数据结构课程设计---学生成绩管理系统学生成绩管理系统模块四、算法的设计在此成绩管理系统中,要求用户输入的只是有字符型和数值型数据,所以我设计了下面函数1.- 2 -算法与数据结构课程设计---学生成绩管理系统来处理并对输出的数据进行检验。
数据结构之学生成绩管理系统
学生成绩管理系统一、试验目旳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. 实现环节首先, 分析题目规定划分实现模块, 定义基本数据类型, 诸如构造体、链表等;另一方面, 针对上述旳基本操作实现详细需要进行旳操作, 详细实现每个环节需要进行旳基本操作, 即详细编写每个小函数实现功能;最终, 编写主函数对每个实现进行按需调用, 实现操作。
学生成绩管理系统数据结构课程设计
学生成绩管理系统数据结构课程设计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 系统需求说明书1.1系统软件界面介绍1.1系统界面介绍本系统的软件界卖弄是使用C语言编译生成的一个系统操作菜单。
操作菜单界面总共有七个选项可以供用户操作选择,分别为策划给你记录入、成绩查询、成绩删除、成绩修改、成绩统计、成绩查询、显示所有信息、退出系统。
菜单页面下方有可供用户选择操作项目的指令,当用户选择并输入0-6中的任意数字,系统便会进入相应的功能操作。
如果出现错误操作,系统会给出输入错误请从新输入等提示或者自动跳出回到主菜单界面。
1.2系统设计要求本系统设计要求使用C语言以及数据与结构的知识点对系统进行编译。
要求学生熟练掌握数据结构的线性表和链表,以及C怨言的文件读一些操作,结构体、指针等知识点,并且学以致用,熟练应用。
在处理数据时要求采用线性表存放成绩信息,结点的数据域可包括:班级、学号、姓名、课程名称、选课学期和成绩,程序退出时采用文件的形式永久保存成绩信息。
1.3系统设计要求系统的设计主要从以下几大块进行设计体现:头文件的定义,包括数据结构中的函数头、结构体的定义,进行一个总体的规划布局。
将与学生有关的个人信息如班级、学号、姓名等都定义为一个节点型的数据然后在创建链表和指向各个数据的节点。
利用抽象数据类型将不同类型的数据进行管理!其次是主函数的定义和设计,主函数申请并创建一个链表,然后将系统所有的函数功能通过Switch条件语句进行统筹,从而实现对各个子函数的调用。
并且通过文件读写将系统的数据保存到文件当中。
最后便是系统中各个函数块的功能实现。
在写子函数时必须统筹兼顾,考虑到各个方面。
入系统类存的合理分配,如果内存一旦出错系统就回崩溃,信息就有可能出错。
2 系统的分析与设计2.1系统分析系统的主要工作流程图如下,当进入操作主菜单界面时,会有相应的不同的操作选项供用户选择,但操作完成后就晚会到系统主菜单。
图2.1 系统操作流程图2.2系统功能分析系统主要石油几大函数块来实现整个系统的功能。
数据结构与算法(C语言) 毕业设计_学生成绩管理系统
目录引言1 系统概述1.1 系统功能1.2 系统作用和特点2 需求分析2.1 功能要求2.2 性能要求2.3 数据需求2.4 开发环境3 详细设计3.1 登陆界面与主界面的实现3.2 详细设计思想3.3 系统结构体的设计3.3 各种模块的实现4 所遇到的问题和分析4.1系统存在的不足4.2 制作过程中遇到的问题4.4 问题分析5系统特色及关键技术6结论及心得体会参考文献附录摘要随着计算机的普及,人们的生活和学习都离不开电脑,计算机是提高生产效率的主要工具及途径,所以教育也不例外。
现在基本每个大学都有自己的学生管理系统。
学生成绩管理系统不仅把广大教师从繁重的成绩管理工作中解脱出来、把学校从传统的成绩管理模式中解放出来,而且对学生成绩的判断和整理更合理、更公正,同时也给教师提供了一个准确、清晰、轻松的成绩管理环境。
本系统依据开发要求主要应用于教育系统,学生成绩管理系统借助于计算机强大的处理能力,大大减轻了管理人员的工作量,并提高了处理的准确性。
学生成绩管理系统的开发运用,实现了学生成绩管理的自动化。
主要完成对学生成绩的管理,包括添加、修改、删除,查询,查看信息以及保存入档等六个方面。
每一个表的修改都将联动的影响其它的表,当完成添加或删除操作时系统会自动地完成学生成绩的修改。
查询功能也是系统的核心之一,在系统中主要根据学生姓名和学号进行查询,其目的都是为了方便用户使用。
系统有完整的添加、删除和修改功能,并具备成绩表查询功能。
论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。
本文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。
重点说明了系统的设计思路、总体设计、各个功能模块的设计与实现。
关键词:学生成绩;成绩管理信息系统;C语言引言几年前,许多学校对于学生成绩的管理还是停留在运用手工操作,随着计算机的飞快发展以及各个学校的规模不断壮大,学生人数逐年增加。
关于学生成绩管理工作所涉及的数据量越来越大,有的学校不得不靠增加人力、物力来进行学生成绩管理。
数据结构与算法课程设计 学生成绩管理系统
数据结构与算法课程设计学生成绩管理系统学生成绩管理系统是一种用于管理学生的课程成绩和相关信息的软件系统。
该系统旨在帮助学校、教师和学生更好地管理和了解学生的学术表现。
下面是一个标准格式的文本,详细描述了学生成绩管理系统的功能和特点。
一、系统概述学生成绩管理系统是基于数据结构与算法课程设计的一个软件系统。
该系统通过使用合适的数据结构和算法,实现了对学生课程成绩的管理和统计分析。
系统具有用户友好的界面和丰富的功能,能够满足学校、教师和学生的需求。
二、系统功能1. 学生信息管理:系统可以记录学生的基本信息,包括学号、姓名、性别、年级等。
教师和管理员可以通过系统添加、修改和删除学生信息。
2. 课程管理:系统可以管理学校开设的各门课程,包括课程名称、授课教师、学分等信息。
教师和管理员可以在系统中添加、修改和删除课程信息。
3. 成绩录入:教师可以通过系统录入学生的课程成绩。
系统会自动计算每门课程的平均成绩和总评成绩,并将成绩与学生的个人信息进行关联。
4. 成绩查询:学生和教师可以通过系统查询学生的课程成绩。
学生可以查看自己的成绩,教师可以查看所教授课程的学生成绩。
查询结果可以按照学生、课程、成绩等进行排序和筛选。
5. 统计分析:系统可以对学生的课程成绩进行统计分析。
教师和管理员可以查看学生的平均成绩、最高成绩、最低成绩等统计信息,并生成相应的报表。
6. 数据备份与恢复:系统支持对学生信息和成绩数据进行备份和恢复。
管理员可以定期备份数据,以防止数据丢失或损坏。
7. 用户权限管理:系统具有不同的用户角色,包括学生、教师和管理员。
每个用户角色有不同的权限,保证了系统的安全性和数据的保密性。
三、系统特点1. 高效性:系统使用了合适的数据结构和算法,能够快速处理大量的学生信息和成绩数据,提高了系统的响应速度和处理效率。
2. 可扩展性:系统具有良好的可扩展性,可以根据实际需求进行功能的扩展和定制。
例如,可以添加更多的统计分析功能,或者与其他系统进行集成。
(完整word版)数据结构课程设计(学生成绩管理系统)(word文档良心出品)
目录一、运行环境 0一、运行环境 (1)二、设计目的和意义 (1)2.1设计目的 (1)2.2设计意义 (1)三、算法思想 (1)四、模块划分 (4)五、数据结构 (5)六、程序流程图 (6)七、程序源代码 (8)八、程序调试过程分析 (18)九、测试数据 (18)十、测试结果及分析 (19)十一、小结 (23)参考文献 (24)一、运行环境硬件环境:电脑软件环境:vc++6.0二、设计目的和意义2.1设计目的此次课程设计的目的是让学生在学习完C、数据结构等课程基础上,进一步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。
2.2设计意义此次设计意义在于让我们更好的去掌握C的基本语法、函数以及Visual C++集成编译环境。
掌握树、图、链表等基本数据结构及其应用。
掌握程序流程以及基本应用方法。
应用软件工程方面的知识,熟悉软件开发的流程。
通过本课程设计,培养学生进行软件设计能力。
首先进行需求分析,针对目标对象完成程序结构设计、对象设计、主要数据结构设计、输入输出设计、人机界面设计等。
三、算法思想整个系统除了主函数外,另外还有12个函数,实现十大功能:菜单选择、输入功能、显示功能、查找功能、删除功能、排序功能、插入功能、保存功能、读取功能、修改。
各个函数的详细设计说明分别如下:1、主函数 main()利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
2、初始化函数 STUDENT *init()这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。
比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!3、菜单选择函数 int menu_select();这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.课程设计说明书题目:数据结构与算法课程设计:学院(系)专业班级:号:学学生姓名:指导教师:教师职称:起止时间:'..课程设计(论文)任务及评语'..目录第章课程设计目的与要求_______________________________________________ 111.1 课程设计目的________________________________________________________ 1 1.2 课程设计的实验环境__________________________________________________ 11.3 课程设计的预备知识__________________________________________________ 11.4 课程设计要求________________________________________________________ 1第章课程设计内容_______________________________________________________ 22 2.1题目的选择_________________________________________________________ _ 22.2 题目的具体实现______________________________________________________ 2 2.3 思考题解析_________________________________________________________ 12总结:_________________________________________________________ ________ 14参考文献 _________________________________________________错误!未定义书签。
'..课程设计目的与要求1第章课程设计目的1.1本课程设计是计算机科学与技术专业、软件工程专业的专业技术实践课。
本实践课的主要目的是:使学生学会利用在课堂中学过的理论知识,解决相应的实际问题,深入理解和灵活掌握所学的内容,培养学生理论和实践相结合的能力,培养学生分析问题解决问题的能力。
同时,在实验步骤规范化、程序设计方法等方面受到比较系统和规范的训练。
通过实践设计使学生进一步加深对程序设计的规范化及对复杂程序设计步骤的理解。
通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。
通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
通过课程设计,开发一个中小型系统,掌握系统研发全过程。
通话课程设计,培养分析问题、解决实际问题的能力。
1.2 课程设计的实验环境PC机,WindowsXP,C++。
1.3 课程设计的预备知识C语言程序设计、数据结构。
1.4 课程设计要求(1)认真查找资料,分析每个题目应选择的数据结构(逻辑结构和物理结构);(2)按时到实验室调试程序,遵守实验室的规章制度,爱护设备;(3)每个题目编写源程序时,每个子功能定义为相应的子函数,在主函数中调用各子函数,程序结构清晰,有必要的注释,可读性强。
(4)程序健壮性强,当数据输入错误时,要进行相应的处理;(5)分析算法的时间复杂度,要求算法的效率尽可能高;(6)对于排序算法,要验证排序算法的稳定性。
'..课程设计内容2章第题目的选择2.16、学生成绩管理系统2.2 题目的具体实现(1)题目应实现的具体功能;1录入学生成绩信息并保存;○2可查询显示所有学生的个人信息;○3可查询显示所有学生的所学课程信息;○4按学号或姓名查询成绩信息; ○5能添加、删除和修改学生的成绩信息;○(2)题目所选择的数据结构及存储结构;采用线性数据结构及链式存储结构(3)完整的源程序#include<stdio.h>#include<stdlib.h>#include<string.h>struct stud{long num;char name[20];double score1,score2;};typedef struct stucode{struct stud student ;struct stucode *next;}L;void menu();void createlist(struct stucode **r);void out(struct stucode *r);void search1(struct stucode *r);void search2(struct stucode *r);void del(struct stucode **r);'..void insert(struct stucode **r);void change(struct stucode **r);void main(){char choose;int flag=1;struct stucode *r=NULL;while(flag){system(cls);menu();choose=getchar();switch(choose){case '1':createlist(&r);out(r);printf(Testing function 1\nPress any key to continue\n); getchar();getchar();break;case '2':search1(r);printf(Testing function 1\nPress any key to continue\n); getchar();getchar();break;case '3':search2(r);printf(Testing function 1\nPress any key to continue\n); getchar();getchar();break;case '4':del(&r);out(r);printf(Testing function 1\nPress any key to continue\n); getchar();getchar();break;case '5':insert(&r);out(r);printf(Testing function 1\nPress any key to continue\n); getchar();'..getchar();break;case '6':out(r);printf(Testing function 1\nPress any key to continue\n); getchar();getchar();break;case '7':change(&r);out(r);printf(Testing function 1\nPress any key to continue\n); getchar();getchar();break;case '0':flag=0;printf(The end.\n);break;default: printf(\Wrong Selection!(选择错误,请重选!)\n);getchar();getchar();}}}void createlist(struct stucode **r){struct stucode *p,*t;long n;char a[20];double s1,s2;if(*r) *r=NULL;printf( \n请输入:\n 学号姓名分数1 分数2(若要结束请输入四个为零)\n);scanf(%ld%s%lf%lf,&n,a,&s1,&s2);if(n==0) return;p=(L *)malloc(sizeof(L));p->student.num=n;strcpy(p->,a);p->student.score1=s1;p->student.score2=s2;p->next=NULL;*r=p;scanf(%ld%s%lf%lf,&n,a,&s1,&s2);while(n){'..t=p;p=(L *)malloc(sizeof(L));p->student.num=n;strcpy(p->,a);p->student.score1=s1;p->student.score2=s2;p->next=NULL;t->next=p;scanf(%ld%s%lf%lf,&n,a,&s1,&s2);}}void search1(struct stucode *r){long x; struct stucode *p=r;if(!r){牰湩晴尨没有学生信息可查询!\n);return ;}printf( 请输入要查询的学生信息的学生学号:\n);scanf(%ld,&x);while(p&&p->student.num!=x)p=p->next;if(p==NULL)printf(Error! No such student !\n);elseprintf(%ld%s%.2lf%.2lf\n,p->student.num,p->,p->student.score1,p->stu dent.score2);}void search2(struct stucode *r){char m[20];if(!r){牰湩晴尨没有学生信息可查询!\n);return ;}printf( 请输入要查询的学生信息的学生姓名:\n);scanf(%s,m);while(r&&strcmp(r->,m))r=r->next;if(r==NULL)printf(Error! No such student !\n);elseprintf(%ld%s%.2lf%.2lf\n,r->student.num,r->,r->student.score1,r->stude nt.sc'..ore2);}void del(struct stucode **r){long k;struct stucode *p=*r,*t;if(!(*r)){牰湩晴尨没有学生信息可删除!\n);return ;}printf( 请输入要删除的学生信息的学生学号:\n);scanf(%ld,&k);if(p->student.num==k)*r=(*r)->next,free(p);else{while(p->next&&p->next->student.num!=k)p=p->next;if(p->next==NULL)printf(Error! No such student !\n);else{t=p->next;p->next=p->next->next;free(t);}}}void insert(struct stucode **r){long n;char a[20];double s1,s2;L *p,*t,*k;printf( 请输入要插入的学生信息的学生学号姓名分数1 分数2 :\n); scanf(%ld%s%lf%lf,&n,a,&s1,&s2);p=(L *)malloc(sizeof(L));p->student.num=n;p->student.score1=s1;p->student.score2=s2;strcpy(p->,a);if(!(*r)){*r=p;'..(*r)->next=NULL;return ;}if(p->student.num<(*r)->student.num)p->next=(*r),(*r)=p;else{t=*r;k=t;while(t->next&&t->next->student.num<=p->student.num)t=t->next;p->next=t->next;t->next=p;*r=k;}}void out(struct stucode *r){printf(\\n);if(!r){牰湩晴尨没有学生信息可输出!\n);return ;}while(r){printf(%ld%s%.2lf%.2lf\n,r->student.num,r->,r->student.score1,r->stude nt.score2);r=r->next;}printf(\\n);}void change(struct stucode **r){struct stucode *p=*r;long x;long n;char a[20];double s1,s2;牰湩晴尨更改的学生的信息\n);printf( 请输入要查询的学生信息的学生学号:\n);scanf(%ld,&x);while(p&&p->student.num!=x)p=p->next;if(p==NULL)printf(Error! No such student !\n);elseprintf(%ld%s%.2lf%.2lf\n,p->student.num,p->,p->student.score1,p->stu dent.s'..core2);printf( 请输入要修改的学生信息:\n);scanf(%ld%s%lf%lf,&n,a,&s1,&s2);p->student.num=n;strcpy(p->,a);p->student.score1=s1;p->student.score2=s2;}void menu(){printf(\学生成绩管理系统\n);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(\0退出\n);printf(\请选择您要执行的选项:\n);}(4)程序的输入和输出'..图1按学生学号查找结果:图2'..按学生姓名查找:图3删除某学生的运行结果:图4'..插入某学生的运行结果:图5显示所有学生的信息:图6'..(5)调试程序中遇到的问题及解决方案在调试search1子函数由于在查找中移动了原指针,导致search1中不能查找,解决方法设一结构体类型的指针,将原指针赋给该指针,将该指针进行移动查找。