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

广东学院《数据结构课程设计》题目:学生成绩管理系统学号:姓名:年级:计算机科学与技术6班学院:智能制造学院专业:指导教师:目录一、问题描述与基本要求 (3)1.1问题描述 (3)1.2基本要求 (3)二、数据结构的设计 (3)2.1数据结构的选择 (3)2.2单链表的定义 (3)2.3重要函数的定义及说明 (4)三、软件模块结构图....................... 错误!未定义书签。
3.1大体模块关系图 (13)3.2各模块具体分析..................... 错误!未定义书签。
四、程序流程图 (15)五、源程序 (17)六、调试分析............................. 错误!未定义书签。
6.1程序错误修改及完善的过程 (37)6.2最终程序所有功能运行结果........... 错误!未定义书签。
6.3测试数据 (39)七、用户使用手册 (40)八、心得体会............................. 错误!未定义书签。
一、问题描述与基本要求1.1问题描述设计一个学生管理系统,建立初始学生成绩,添加/插入,查找,修改,删除学生成绩。
1.2基本要求系统设计要求:1、能比较迅速地实现添加学生的学号,姓名和成绩2、能比较迅速地通过学生的学号或姓名查询、修改或删除学生成绩3、当有学生时,输出所有学生的成绩信息,包括语文,数学,英语的成绩二、数据结构的设计2.1数据结构的选择课程设计题目的要求是,要较简单迅速地实现添加、查询、修改、删除学生成绩的的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。
2.2单链表的定义先定义单链表结点的数据域,数据域包括学生姓名、学生学号、学生成绩等学生信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
数据结构课程设计__学生成绩管理系统

数据结构课程设计报告学生成绩管理系统学院:信息与工程学院专业:计算机科学与技术班级:090412姓名:邓军学号:09041220指导老师:谢老师日期:2011-06-22目录第一章需求分析1.1课程设计题目及要求1.2课程设计思想及开发环境第二章概要设计2.1总体方案2.2 模板功能分析及其外部设计2.3主要数据结构第三章详细设计第四章调试与操作说明4.1主要模板调试4.2 系统缺陷及原因第五章课程设计总结与体会第六章参考文献第一章 需求分析1.1课程设计题目及要求 题目:学生成绩管理系统 学生成绩表:要求如下:1) 实现对两个文件数据进行合并,生成新文件3.txt2) 抽取出三科成绩中有补考的学生并保存在一个新文件4.txt 3) 对合并后的文件3.txt 中的数据按总分降序排序(至少采用两种排序方法实现)4) 输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5) 要求使用结构体,链或数组等实现上述要求.1.2课程设计思想及开发环境设计思想:本课题的实质是完成对学生成绩表的合并、提取、排序、查询等功能,可以首先定义项目的数据结构,然后将每个功能写学生成绩信息文件1(1.txt ),内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47…. .. .. ..学生成绩信息文件2(2.txt ),内容如下:姓名 学号 语文 数学 英语 陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 47 58 77…. .. .. ..成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。
可将此系统分为如下模块,合并两个信息表、从表中提取信息、降序排序模块、按条件进行查询、退出系统。
数据结构-学生成绩管理系统课程设计

“数据结构与算法”课程设计报告*课程设计题目;要求:完成学生成绩的录入、统计、查询、修改、删除、输出。
(一)需求和规格说明1、软件其本身应是一个大的分支系统,每个分支都对应系统的一项功能。
在数据通过系统主功能输入完成后,通过调用各个子功能对数据进行相应的处理,达到相应的目的。
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)、系统框架此系统大体框架由三个层次构成,依次为系统主菜单,主功能下设的子菜单及最底层菜单下的功能实现。
数据结构课程设计报告--学生成绩管理系统

淮海工学院计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:学生成绩管理系统姓名:白文吉学号:2011122453 专业班级:计算机科学与技术计算机111系(院):计算机工程学院设计时间:2012.12.24~2013.1.4设计地点:软件工程实验室、教室(6)修改学生成绩:输入一个学生的学号,提示选择修改的科目,选择后输入新的成绩,输入新成绩后按回车确定,询问是否修改其它科目的成绩,在修改完一个人的成绩后,提示是否修改其他人的成绩,所有修改都已完成后显示所有学生信息,点击任意键返回功能选择界面。
(7)按姓名升序排序:直接显示排好顺序的学生信息,同时会向程序所在文件中输出一个名为“newstudentfile”的txt文件。
(8)退出:返回欢迎界面六测试成果欢迎界面功能选择界面显示已有学生成绩信息添加一位学生的信息及询问成功添加后显示所有学生信息删除一个学生及询问删除后显示所有学生信息只修改一个人的一门成绩修改后的所有学生信息(学号为10015的成绩一已经修改为100)按姓名升序排序后的学生信息七附录(源程序清单)#include<stdio.h>#include<conio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>//清屏typedef struct STUDENT//{char studentNumber[10];/*学生学号*/char studentName[20];/*学生姓名*/float mark1;/*第1门成绩*/float mark2;/*第2门成绩*/float mark3;/*第3门成绩*/struct STUDENT *next;}STUDENT;STUDENT *headLink;/*链表表头指针,适用于全局*/ /************************************。
学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计学生成绩管理系统是一个用于管理学生学习成绩的软件系统。
它通常用于学校、教育机构或教师们来跟踪和记录学生的学习进展,并生成报告和分析数据。
在数据结构课程设计中,学生成绩管理系统需要设计合适的数据结构来存储和操作学生成绩数据。
在设计学生成绩管理系统时,可以使用以下数据结构:1. 数组:可以使用数组来存储学生成绩数据。
每个学生的成绩可以用一个数组元素表示,可以将学生按照学号或者其他标识符按顺序存储在数组中。
这样可以方便地通过索引来访问和修改学生成绩。
2. 链表:链表是另一种常用的数据结构,可以用于存储学生成绩数据。
每个学生的成绩可以用一个节点表示,节点可以包含学生的信息和成绩,同时包含指向下一个节点的指针。
这样可以方便地插入、删除和查找学生成绩。
3. 树:树可以用于组织学生成绩数据。
可以使用二叉搜索树或平衡二叉树来存储学生成绩,其中学生的学号或者姓名可以作为关键字。
这样可以方便地进行查找、插入和删除操作,并可支持对学生成绩进行排序。
以上是一些常用的数据结构,用于存储学生成绩管理系统的数据。
在具体的设计中,还可以根据实际需求选择其他合适的数据结构。
除了数据结构,学生成绩管理系统还可能包括其他功能,例如:1. 添加学生:可以通过输入学生的基本信息和成绩,将学生添加到系统中。
2. 删除学生:可以通过学生的学号或其他标识符,从系统中删除某个学生的信息和成绩。
3. 修改成绩:可以根据学生的学号或其他标识符,修改学生的成绩信息。
4. 查询成绩:可以根据学号、姓名或其他条件,查询学生的成绩信息。
5. 成绩统计和分析:可以对学生的成绩进行统计和分析,生成报告和图表,帮助教师或学校了解学生的学习情况。
以上只是学生成绩管理系统可能包含的一些基本功能,具体的设计和实现还需要根据实际需求和要求进行进一步的扩展和深入分析。
通过合适的数据结构和功能设计,可以实现一个高效、易用和功能完善的学生成绩管理系统。
学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计近年来,随着信息技术的快速发展,学生成绩管理系统在学校中得到了广泛应用。
学生成绩管理系统是一种基于数据结构的软件系统,旨在帮助学校更好地管理学生的学习成绩。
本文将介绍一个基于数据结构的学生成绩管理系统的设计。
首先,我们需要设计一个合适的数据结构来存储学生的学习成绩。
在这个系统中,我们可以使用一个二维数组来存储学生的成绩信息。
数组的行表示学生的学号,列表示不同科目的成绩。
这样,我们就可以方便地对学生成绩进行增删改查的操作。
接下来,我们需要设计一些基本的功能来实现学生成绩的管理。
首先是添加学生的成绩信息。
当学生入学时,管理员可以通过系统将学生的学号和成绩添加到数组中。
其次是删除学生的成绩信息。
当学生毕业或者转学时,管理员可以通过系统将学生的学号和成绩从数组中删除。
再次是修改学生的成绩信息。
当学生的成绩发生变化时,管理员可以通过系统修改学生的成绩。
最后是查询学生的成绩信息。
管理员可以通过系统查询学生的学号,然后系统会返回该学生的成绩信息。
除了基本的功能,我们还可以设计一些高级功能来提升学生成绩管理系统的实用性。
例如,我们可以设计一个成绩统计功能,用于统计学生的平均成绩、最高成绩和最低成绩。
这样,管理员可以更好地了解学生的学习情况。
另外,我们还可以设计一个成绩排名功能,用于按照成绩对学生进行排名。
这样,管理员可以更方便地找出成绩优秀的学生。
在实际应用中,我们还可以将学生成绩管理系统与其他系统进行集成。
例如,我们可以将学生成绩管理系统与学生信息管理系统进行集成,这样可以更方便地管理学生的学习情况。
另外,我们还可以将学生成绩管理系统与家长端进行集成,这样家长可以通过系统查看孩子的成绩情况,及时了解孩子的学习进展。
总之,学生成绩管理系统是一种基于数据结构的软件系统,可以帮助学校更好地管理学生的学习成绩。
通过合适的数据结构和功能设计,我们可以方便地对学生成绩进行增删改查的操作,并且可以提供一些高级功能来提升系统的实用性。
学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计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系统功能分析系统主要石油几大函数块来实现整个系统的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
要用的请复制,要转载的请注明,要问的免了题目如下25.学生成绩管理系统现有学生成绩信息文件1.txt,内容如下姓名学号语文数学英语张明明 01 67 78 82李成友 02 78 91 88张辉灿 03 68 82 56王露 04 56 45 77陈东明 05 67 38 47学生成绩信息文件2.txt,内容如下:姓名学号语文数学英语陈果 31 57 68 82李华明 32 88 90 68张明东 33 48 42 56李明国 34 50 45 87陈道亮 35 47 58 77试编写一管理系统,要求如下:1)实现对两个文件数据进行合并,生成新文件3.txt2)抽取出三科成绩中有补考的学生并保存在一个新文件4.txt3)合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)4)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5)要求使用结构体,链或数组等实现上述要求.6)采用多种方法且算法正确者,可适当加分.源代码如下#include<stdio.h>#include<stdlib.h>#include<string.h>char top[50]; //成绩文件顶部的标题用top保存typedef struct student //单个学生成绩的记录{char name[10]; //姓名int number; //学号int chinese; //语文int math; //数学int english; //英语struct student *next;}student,*gradelist;gradelist fileread(char *adress) //读取成绩文件{FILE * fp;if((fp=fopen(adress,"r"))==NULL) //打开文件{printf("文件打开出错");exit(0);}gradelist file=(student *)malloc(sizeof(student)); //申请空间file->next=NULL;student * p=file; //操作指针int n=0; //循环标记,具体作用是在第一次循环时方便处理标题while(!feof(fp)){if(n==0){fgets(top,50,fp); //处理标题,并且文件指针移到第二行}if(n==1) //申请空间{(p->next)=(student *)malloc(sizeof(student));p=p->next;p->next=NULL;}fscanf(fp,"%s%d%d%d%d",p->name,&p->number,&p->chinese,&p->math,&p->en glish); //将文件的数据输入到链表中n=1;}if(fclose(fp)) //关闭文件{printf("文件关闭失败");exit(0);}return file;}void FilePrint(gradelist file) //将成绩文件打印到屏幕上{student *p=file;printf("%s\n",top); //打印标题while(p->next!=NULL){printf("%6s %2d %d %d %d\n",p->name,p->number,p->chinese,p->math,p->e nglish); //循环打印p=p->next;}}void merger() //合并文件{char * address1="1.txt",*address2="2.txt",*address3="3.txt"; gradelist file1=fileread(address1),file2=fileread(address2);FILE *fp;if((fp=fopen("3.txt","w+"))==NULL) //先新建一个3.txt,然后将1.txt和2.txt的内容输入到里面{printf("合并成绩文档失败,原因:建立文档出错");exit(0);}student *p1=file1,*p2=file2;fprintf(fp,"%s",top); //先输入标题while(p1->next!=NULL){fprintf(fp,"%6s %2d %d %d %d\n",p1->name,p1->number,p1->chinese,p1->m ath,p1->english); //输入1.txtp1=p1->next;}while(p2->next!=NULL){fprintf(fp,"%6s %2d %d %d %d\n",p2->name,p2->number,p2->chinese,p2->m ath,p2->english); //输入2.txtp2=p2->next;}if(fclose(fp)){printf("文件关闭失败");exit(0);}}void extract() //抽取补考的成绩记录{char * address4="4.txt",*address3="3.txt";FILE *fp;if((fp=fopen("4.txt","w+"))==NULL) //新建文件4.txt{printf("抽取补考学生成绩记录建立新文件失败");exit(0);}gradelist file3=fileread(address3);student *p=file3;fprintf(fp,"%s",top); //先输入标题while(p->next!=NULL){if((p->chinese)<60||(p->math)<60||(p->english)<60) //补考条件{fprintf(fp,"%6s %2d %d %d %d\n",p->name,p->number,p->chinese,p->math, p->english);}p=p->next;}if(fclose(fp)){printf("文件关闭失败");exit(0);}}void sort(int i){char * address3="3.txt";gradelist file3=fileread(address3); //先将3.txt读入链表student *p=file3;if(remove("3.txt")) //由于排序后的内容也要保存到3.txt,故删除3.txt {printf("删除文件出错");exit(0);}int n=0; //学生个数FILE *fp;if((fp=fopen("3.txt","w+"))==NULL) //新建一个空的3.txt{printf("新建文件出错");exit(0);}fprintf(fp,"%s",top); //标题先输入while(p->next!=NULL){n++;p=p->next;}typedef struct //链表不容易操作,故而新建一个结构数组{int totalgrade;char name[10];int number;int chinese;int math;int english;}gradenote; //成绩记录typedef struct{gradenote r[100]; //只初始化了100了空间,学生人数超过100就不能了,懒得动态分配了}grade_list; //待排序成绩表grade_list L;p=file3;for(int t=1;t<=n;t++,p=p->next) //将链表的内容复制到结构数组里{strcpy(L.r[t].name,p->name);L.r[t].number=p->number;L.r[t].chinese=p->chinese;L.r[t].math=p->math;L.r[t].english=p->english;L.r[t].totalgrade=p->chinese+p->math+p->english;}if(i==1) //直接插入排序,具体思想参考《数据结构》,严蔚敏主编{for(int k=2;k<=n;++k)if(L.r[k].totalgrade<L.r[k-1].totalgrade){L.r[0]=L.r[k];L.r[k]=L.r[k-1];for(int j=k-2;L.r[0].totalgrade<L.r[j].totalgrade;--j){L.r[j+1]=L.r[j];}L.r[j+1]=L.r[0];}}}if(i==2) //折半插入排序,参考同上{int m;for(int k=2;k<=n;++k){L.r[0]=L.r[k];int low=1,high=k-1;while(low<=high){m=(low+high)/2;if(L.r[0].totalgrade<L.r[m].totalgrade)high=m-1;elselow=m+1;}for(int j=k-1;j>=high+1;--j)L.r[j+1]=L.r[j];L.r[high+1]=L.r[0];}}for(int q=n;q>=1;q--) //将排序好的内容输入到3.txt{fprintf(fp,"%6s %2d %d %d %d\n",L.r[q].name,L.r[q].number,L.r[q].chin ese,L.r[q].math,L.r[q].english);}if(fclose(fp)){printf("文件关闭失败");exit(0);}void search(char *name) //按姓名查找{gradelist file=fileread("3.txt");student * p=file;while(p->next!=NULL){if(strcmp(name,p->name)==0){printf("%6s %2d %d %d %d\n",p->name,p->number,p->chinese,p->math,p->e nglish);return;}p=p->next;}printf("查无此人,请确定名字输入正确\n");exit(0);}void main(void) {int chioce;gradelist file1=fileread("1.txt"),file2=fileread("2.txt");printf("现有成绩记录文件1\n");printf("*********************************************************\n"); FilePrint(file1);printf("*********************************************************\n"); printf("现有成绩记录文件2\n");printf("*********************************************************\n"); FilePrint(file2);printf("*********************************************************\n"); printf("第一步,合并成绩记录文件\n");merger();printf("合并成功\n");system("PAUSE");printf("现有合并后的成绩记录文件3\n");printf("*********************************************************\n"); gradelist file3=fileread("3.txt");FilePrint(file3);printf("*********************************************************\n"); printf("第二步,抽取补考成绩记录\n");extract();system("PAUSE");printf("现有补考成绩记录文件4\n");printf("*********************************************************\n"); gradelist file4=fileread("4.txt");FilePrint(file4);printf("*********************************************************\n"); printf("第三步,对文件3进行排序\n");printf("请输入排序方式(1/2)\n1:直接插入排序\n2:折半插入排序\n");scanf("%d",&chioce);if(chioce==1)sort(1);else if(chioce==2)sort(2);else{printf("输入不合理,程序默认采用1方式\n");sort(1);}file3=fileread("3.txt");printf("现有按总分降序的成绩记录3\n");printf("*********************************************************\n"); FilePrint(file3);printf("*********************************************************\n"); printf("第四步,查找学生信息\n");char name[100];printf("请输入学生姓名\n");scanf("%s",name);search(name);printf("按任意键结束程序\n");getchar();}。