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

合集下载

数据结构在学生成绩管理系统设计中的应用

数据结构在学生成绩管理系统设计中的应用

数据结构在学生成绩管理系统设计中的应用学生成绩管理系统是现代教育管理系统的一个重要组成部分,其目的是为了高校教师和学生提供一个集中存储和管理学生课程信息的平台。

在这个平台上教师可以查询、更新学生的课程成绩,而学生可以查询自己的课程成绩、排名等信息。

在学生成绩管理系统的设计中,数据结构扮演了非常重要的角色。

数据结构建立在计算机中存储和处理数据的基础之上,它将数据结构化,使得数据能够被更加高效地处理和管理。

合理地运用数据结构,不仅能够提高系统的运行效率,还能够提高数据的处理和操作效率。

学生成绩管理系统中常用的数据结构有数组、链表、树、图等。

以下就分别简单介绍这些数据结构在学生成绩管理系统设计中的应用。

1. 数组在学生成绩管理系统中,一个非常基本的需求就是按照学生学号和课程号存储学生成绩信息。

这个时候,可以使用数组来存储数据。

例如,可以定义一个二维数组score来存储学生的课程成绩,其中score[i][j]表示第i个学生的第j门课程的成绩。

这种方式可以方便地进行查询和修改。

但是在数据量较大的情况下,数组的缺点就显现出来了,比如数组长度固定,无法动态地调整大小;同时,大数据量的数组处理时,耗费的时间和空间也会很大。

因此,在实际应用中,需要根据具体情况选择合适的数据结构。

2. 链表链表是数据结构中常用的一种,它可以实现动态添加和删除数据的操作,非常适用于动态增长的情况。

在学生成绩管理系统中,链表可以用来存储学生的课程成绩信息。

在学生选课时,可以将选课信息以链表的形式存储。

每当学生选一门新课程,就可以新增一个节点。

如果学生退选某门课程,则可以将相应的节点删除。

另外,在查询学生课程成绩时,也可以使用链表。

查询时,可以从链表头开始,遍历整个链表,查找指定学号和课程号的成绩信息。

链表的查询时间复杂度为O(n),但是它可以随时插入和删除数据,非常方便实用。

3. 树树是一种常用的数据结构,它可以快速地查找数据,并且支持快速地插入和删除数据。

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

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

数据结构之学绩管理系统【正文】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 成绩表- 设计成绩表,包括学生学号和各门课程成绩字段。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

开发工具为Eclipse和Navicat。

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

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

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

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

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

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

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

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

学生成绩管理系统(数据结构C语言版源代码)

学生成绩管理系统(数据结构C语言版源代码)

让结局不留遗憾,让过程更加完美。

#include<stdio.h>#include<string.h>#include<stdlib.h>struct students{char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *next; /*用与构建连表指向下一结点*/};FILE *fp; /*定义全局变量fp*/void Revisemenu();/*修改菜单*/void Sortmenu();/*排序菜单*/void menu();/*主菜单*/void secret();/*安全验证*/struct students * Input();/*新建学生信息*/void fprint(struct students *head);/*将信息导入文件可追加*/void fprint_(struct students *head);/*将信息导入文件并覆盖*/void Browse(struct students *head);/*浏览全部学生信息*/struct students * create(struct students *headint *n);/*从tushu_list中读取数据构建链表*/void FindofNum(struct students *head);/*按学号查询学生信息*/void FindofNname(struct students *head);/*按姓名查询学生信息*/void SortEnglish(struct students * head);/*按英语成绩排序*/void SortJava(struct students * head);/*按Java成绩排序*/void SortSjjg(struct students * head);/*按数据结构成绩排序*/void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/ void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/ struct students * Delete(struct students * headchar m[15]);/*按学号删除学生成绩信息*/struct students * Revise();/*修改学生信息(按编号修改)*//*主菜单*/void menu(){printf("\n\n");printf("***************************************************\n");printf(" 学生成绩管理系统 \n");printf("---------------------------------------------------\n");printf(" 1-添加新同学 2-浏览学生信息 \n");printf(" 3-按学号查询 4-按姓名查询 \n");printf(" 5-按成绩排序 6-修改学生信息 \n");printf(" 7-删除学生信息 0-退出系统 \n");printf("---------------------------------------------------\n");printf("___________________________________________________\n"); }/*排序菜单*/void Sortmenu(){printf("\n\n");printf("***************************************************\n");printf(" 按成绩排序 \n");printf(" 1-大学英语 2-JAVA编程 \n");printf(" 3-数据结构 4-数字逻辑电路 \n");printf(" 5-计算机组成原理 0-返回上级菜单 \n");printf("***************************************************\n"); }/*修改菜单*/void Revisemenu(){printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf(" 1--修改学生姓名 2--修改学生学号 \n"); printf(" 3--修改学生性别 4--修改英语成绩 \n"); printf(" 5--修改JAVA成绩 6--修改数据结构 \n"); printf(" 7--修改数字电路 8--修改计算计 \n");printf(" 0--返回上级菜单 \n"); printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); }/*安全验证*/void secret(){char a[20];printf("**欢迎来到学生信息管理系统进入系统前请先进行密码验证---");printf(" ");do{gets(a); /*输入密码*/system("cls"); /*调用库函数清屏*/printf("对不起!您输入的密码有误请重新输入---");}while(strcmp(a"0605")!=0); /*单一密码"0605"*/system("cls");}/*新建学生信息*/struct students * Input(){struct students *p1*p2*head; /*建立辅助结点及头结点*/char Name;int n=0x;printf("\n请按对应项输入学生信息以#结束:\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机组成原理\n");p1=(struct students *)malloc(sizeof(struct students));head=p2=p1;do{ /*使用do while语句输入学生信息*/scanf("%s"&p1->Name);if(strcmp(p1->Name"#")==0)break; /*判断结束符*/elsescanf("%s%s%lf%lf%lf%lf%lf"p1->Nump1->Sex&p1->English&p1->Java&p1->Sjjg&p1->Szdl&p1->Jsj);Name='#';p1=(struct students *)malloc(sizeof(struct students));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("学生信息输入结束!\n");getchar();printf("是否保存学生信息?(1.是/2.否):");scanf("%d"&x);if(x==1)fprint(head); /*调用函数保存至文件*/ elseprintf("\n文件没有被保存!\n");return head; /*返回头指针*/}/*将信息导入文件可追加*/void fprint(struct students *head){struct students *p1;if((fp=fopen("students_list.txt""a"))==NULL){printf("File open error!\n");exit(0);}for(p1=head;p1->next!=NULL;p1=p1->next) /*遍历*/fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/printf("\n学生信息已成功保存到文件 students_list.txt 中!\n");getchar();}/*将信息导入文件并覆盖*/void fprint_(struct students *head){struct students *p1;if((fp=fopen("students_list.txt""w"))==NULL)printf("File open error!\n");exit(0);}for(p1=head;p1!=NULL;p1=p1->next) /*遍历*/fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/;getchar();}/*浏览全部学生信息*/void Browse(struct students *head){char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/if((fp=fopen("students_list.txt""a+"))==NULL){printf("File open error!\n");exit(0);}printf("-------------------------------------------------------------\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(!feof(fp))/*读取并输出*/{fscanf(fp"%s%s%s%lf%lf%lf%lf%lf"NameNum&English&Java&Sjjg&Szdl&Jsj);printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"NameNumSexEnglishJavaSjjgSzdlJsj);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}/*从tushu_list中读取数据构建链表*/struct students * create(struct students * headint *n){FILE *fp;struct students*p*p1*p2;if((fp=fopen("students_list.txt""a+"))==NULL){printf("File open error!\n");exit(0);}while(!feof(fp)){(*n)++;p=(struct students *)malloc(sizeof(struct students));fscanf(fp"%s%s%s%lf%lf%lf%lf%lf"p->Namep->Nump->Sex&p->English&p->Java&p->Sjjg&p->Szdl&p->Jsj);if(head==NULL){head=p;p1=p;}else{p1->next=p;p2=p1;p1=p;}}p2->next=NULL;free(p);(*n)--;fclose(fp);return head;}/*按姓名查询学生信息*/void FindofName(struct students *head) {int i=0n=0;char b[20];struct students *p;head=create(head&n);p=head;printf("\n请输入要查询的学生姓名:");scanf("%s"b);while(p!=NULL){if(strcmp(p->Nameb)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到名为"%s"的学生信息!\n"b);}/*按学号查询学生信息*/void FindofNum(struct students *head){int i=0n;char b[20];struct students *p;head=create(head&n);p=head;printf("\n请输入要查询的学生学号:");scanf("%s"b);while(p!=NULL){if(strcmp(p->Numb)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到学号为"%s"学生信息!\n"b);}/*按英语成绩排序*/void SortEnglish(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double English;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;English=p->English; /*将链表中第一个成绩赋给English*/while(p!=NULL){if((p->English)>English)/*比较*/English=p->English;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->English==English){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->English==English){ /*分数相同时无需比较*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按英语成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按JAVA成绩排序*/void SortJava(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Java;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Java=p->Java; /*将链表中第一个成绩赋给Java*/while(p!=NULL){if((p->Java)>Java)/*比较*/Java=p->Java;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Java==Java){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Java==Java){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按Java成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数据结构排序*/void SortSjjg(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Sjjg;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Sjjg=p->Sjjg; /*将链表中第一个成绩赋给Sjjg*/while(p!=NULL){if((p->Sjjg)>Sjjg)/*比较*/Sjjg=p->Sjjg;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Sjjg==Sjjg){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Sjjg==Sjjg){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数字电路排序*/void SortSzdl(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Szdl;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Szdl=p->Szdl; /*将链表中第一个成绩赋给Szdl*/while(p!=NULL){if((p->Szdl)>Szdl)/*比较*/Szdl=p->Szdl;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Szdl==Szdl){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Szdl==Szdl){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按数字电路成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按计算机组成原理排序*/void SortJsj(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Jsj;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Jsj=p->Jsj; /*将链表中第一个成绩赋给Jsj*/while(p!=NULL){if((p->Jsj)>Jsj)/*比较*/Jsj=p->Jsj;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Jsj==Jsj){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Jsj==Jsj){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按学号删除学生成绩信息*/struct students * Delete(struct students * headchar m[15]){struct students *ptr1*ptr2;int n;printf("\n所有学生信息如下:\n");Browse(head);printf("\n请输入想要删除的学生学号:");scanf("%s"m);head=create(head&n);if(head==NULL){printf("无学生信息!\n");return head;}if((strcmp(head->Numm)==0)&&head!=NULL){ptr2=head;head=head->next;free(ptr2);}if(strcmp(head->Numm)!=0){ptr1=head;ptr2=head->next;while(ptr2!=NULL){if(strcmp(ptr2->Numm)==0){ptr1->next=ptr2->next;free(ptr2);}elseptr1=ptr2;ptr2=ptr1->next;}}fprint_(head);printf("\n学号为' %s '学生信息已被删除并保存至文件!\n"m);return head;}/*修改学生信息(按编号修改)*/struct students * Revise(){int n=0t;char num[10];char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *head=NULL;struct students *p;printf("\n所有学生信息如下:\n");Browse(head);head=create(head&n);printf("\n输入需要修改的学生的学号:");scanf("%s"num);p=head;while(head!=NULL){if(strcmp(p->Numnum)==0){system("cls");Revisemenu();printf("编号为%s的学生信息如下:\n"num);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);while(1){printf("请选择需要修改的信息:");scanf("%d"&t);switch(t){case 1:printf("请输入新姓名:");scanf("%s"Name);strcpy(p->NameName);break;case 2:printf("请输入新学号:");scanf("%s"&Num);strcpy(p->NumNum);break;case 3:printf("请输入新性别:");scanf("%s"Sex);strcpy(p->SexSex);break;case 4:printf("请输入新英语成绩:");scanf("%lf"&English);p->English=English;break;case 5:printf("请输入新Java成绩:");scanf("%lf"&Java);p->Java=Java;break;case 6:printf("请输入新数据结构成绩:");scanf("%lf"&Sjjg);p->Sjjg=Sjjg;break;case 7:printf("请输入新数字电路成绩:");scanf("%lf"&Szdl);p->Szdl=Szdl;break;case 8:printf("请输入新计算机组成原理成绩:");scanf("%lf"&Jsj);p->Jsj=Jsj;break;case 0:system("cls");menu();goto lab;break;default:printf("对不起输入有误!");break;}}}elsep=p->next;}lab:fprint_(head);printf("修改完成并储存至文件!\n");return head;}/*主函数*/void main(){int choicech;char m[15];struct students *head=NULL;secret();menu();while(1){printf("请输入选项:");scanf("%d"&choice);switch(choice){case 1:Input();break;case 2:system("cls");menu();Browse(head);break;case 3:system("cls");menu();FindofNum(head);break;case 4:system("cls");menu();FindofName(head);break;case 5:system("cls");Sortmenu();do{printf("请输入您的选择:");scanf("%d"&ch);switch(ch){case 1:system("cls");Sortmenu();SortEnglish(head);break;case 2:system("cls");Sortmenu();SortJava(head);break;case 3:system("cls");Sortmenu();SortSjjg(head);break;case 4:system("cls");Sortmenu();SortSzdl(head);break;case 5:system("cls");Sortmenu();SortJsj(head);break;}}while(ch!=0);system("cls");menu();break;case 6:system("cls");menu();Revise();break;case 7:system("cls");menu();head=Delete(headm);break;case 0:system("cls");printf("\t\t欢迎下次再来!");exit(0);default:printf("对不起输入有误!");break;}}return ;}。

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

学生成绩管理系统+数据结构
3。3插入新信息 ....。....。..。。。.。。.。.。。。。.....。..。。。.。.。..。..。。.。.。.。.。。....。...。..。。.。。。..。.。。.。.。。。。。。.。。.。。。.。。..。。..。。。.。。。。。。。。。。... 6
3.4更新维护。.。。.。..。。。。.。.。....。.。.。......。。.。。...。.。......。。。。。...。。。。。.。。.。..。。。.。.。....。..。。.。。.。..。.。..。...。。....。。.。..。...。..。.。... 7
3。9统计。.。。.。。。。。.。。...。.。。。。。。..。...。.。.。。。。。。.。。。..。。。.。.。.。.。。。.。。..。。.。.。。.。。。。。.。。....。。。。.。。。。.。。。.。...。..。.。....。。.。.。。.。.。.。。....。.. 9
3.10图表.。.。。。...。。..。...。。。.。。.。。..。。..。。..。。..。.。。.。。.。。。。...。..。。。.。。....。.。.。。。.。。。。。。.。。.。。。.。。。.。。.....。。.。。.。.。...。。。。。。。.。....... 11 4 系统连编与运行 ..。。。。..。。。..。.....。。....。。.。.。。。。.。.。。..。。.。。...。。。.。..。...。..。。...。..。。。.。...。.。。。..。..。。。。...。..。.。。。。....。。..。。.. 13 5 总 结。.。。。。。.....。.....。。。。.。..。。。。。。..。。..。..。。.。...。.。。...。.。.。.。。。..。。....。.。..。..。...。。。。。.。.。。。.。。。....。.。.。.。..。.。。。。。.。..。.。.。。。。.。 14 6 参考文献。。。....。.。。...。。.。..。。........。.。......。。。...。。.。。.。。..。。..。。...。。.。..。。。....。.。...。。。。...。....。...。..。。.。....。。.。..。。。。。。。.。。。.. 15

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

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

数据结构之学生成绩管理系统在当今数字化的时代,学生成绩管理是学校教育教学工作中的重要组成部分。

一个高效、准确且易于使用的学生成绩管理系统对于学校的教学管理和学生的发展都具有重要意义。

接下来,让我们深入探讨一下这个系统的各个方面。

首先,我们来谈谈学生成绩管理系统的需求分析。

学校需要能够方便地录入学生的基本信息,如姓名、学号、班级等。

同时,对于每门课程的成绩,包括平时成绩、考试成绩、实验成绩等,都要有清晰准确的记录。

此外,系统还应支持不同的成绩计算方式,例如加权平均、算术平均等,以满足不同课程的要求。

老师能够快速查询和统计学生的成绩,了解学生的学习情况,为教学提供参考。

学生也应该能够查看自己的成绩,了解自己的学习进度和不足之处。

在设计学生成绩管理系统时,数据结构的选择至关重要。

对于学生的基本信息,我们可以使用线性表,如数组或链表来存储。

数组的优点是可以通过下标快速访问元素,但插入和删除操作较为复杂;链表则在插入和删除操作上具有优势,但访问速度相对较慢。

根据实际需求,如果学生信息的变动较少,我们可以选择数组;如果需要频繁地添加或删除学生信息,链表可能更为合适。

对于课程成绩的存储,我们可以使用树形结构,如二叉树或二叉搜索树。

二叉树可以方便地进行排序和查找操作,二叉搜索树则能够快速地查找特定的成绩信息。

另外,我们还可以使用哈希表来存储学生的成绩,通过哈希函数将学生的学号或姓名映射到一个特定的存储位置,从而实现快速的查找和访问。

在实现学生成绩管理系统时,我们需要考虑系统的功能模块。

首先是用户登录模块,确保只有授权的用户能够访问系统。

然后是学生信息管理模块,用于添加、修改、删除和查询学生的基本信息。

成绩录入模块是核心之一,老师可以通过这个模块输入学生的各项成绩。

成绩查询模块则要满足老师和学生不同的查询需求,老师可以查看全班或整个年级的成绩统计情况,学生可以查看自己的个人成绩。

成绩统计分析模块能够对成绩进行各种统计计算,如平均分、最高分、最低分、成绩分布等,为教学评估提供数据支持。

数据结构在学生成绩管理系统设计中的应用

数据结构在学生成绩管理系统设计中的应用

数据结构在学生成绩管理系统设计中的应用学生成绩管理系统是一种用来管理和记录学生学习成绩的软件系统。

在设计学生成绩管理系统时,合理的数据结构设计是至关重要的。

数据结构可以帮助我们组织和管理大量的学生数据,提高系统的效率和性能。

下面将详细介绍数据结构在学生成绩管理系统设计中的应用。

最重要的数据结构是数组。

数组是一种线性数据结构,可以连续存储相同类型的数据。

在学生成绩管理系统中,我们可以使用数组存储学生的基本信息,如学号、姓名、班级等。

通过数组,我们可以方便地对学生进行排序、检索和修改等操作。

数组还可以用来存储学生的成绩信息,例如每门课程的成绩,通过数组的索引快速访问学生的成绩。

树是一种非常有用的数据结构,在学生成绩管理系统中也有广泛的应用。

树是一种分层的数据结构,可以用于组织和管理具有层次结构的数据。

在学生成绩管理系统中,我们可以使用树来组织和管理学生的班级和专业信息。

每个节点可以包含班级的名称、人数、平均成绩等信息。

通过树的层级关系,我们可以方便地查询班级和专业的平均成绩。

图也是学生成绩管理系统中常用的数据结构之一。

图是一种非线性的数据结构,可以用来表示不同实体之间的关系。

在学生成绩管理系统中,我们可以使用图来表示学生与课程之间的关系,例如学生选择了哪些课程。

通过图的节点和边,我们可以方便地查询学生选择的课程和相关成绩。

在学生成绩管理系统中,还可以使用其他数据结构如队列、堆等。

队列可以用来解决学生申请加入班级的管理问题,堆可以用来快速找到最高分或最低分的学生。

数据结构在学生成绩管理系统设计中起着至关重要的作用。

合理选择和设计数据结构,可以提高系统的效率和性能,使学生成绩管理更加方便和准确。

也需要根据具体系统需求和规模进行选择和设计,以满足学生成绩管理的功能和性能要求。

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

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

“数据结构与算法”课程设计报告*课程设计题目;要求:完成学生成绩的录入、统计、查询、修改、删除、输出。

(一)需求和规格说明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)、系统框架此系统大体框架由三个层次构成,依次为系统主菜单,主功能下设的子菜单及最底层菜单下的功能实现。

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

海南大学信息科学技术学院数据结构课程设计报告设计题目:______________________专业班级:________________________姓名:___________________________学号:___________________________指导教师:_________________________目录一、需求分析 2二、设计要求 3三、概要设计 4四、详细设计 6五、运行结果 16六、心得体会 21七、参考文献 21摘要:据结构”是计算机程序设计的重要理论技术基础,它是计算机学科的核心课程。

用数据结构中的知识、算法、思想解决一些实际问题可使的一些问题变得一目了然,易懂。

本论文设计一个简单程序,来实现学生管理系统的设计。

首先在设计的时候就想了一下,应该运用到那些知识点,不管是C语言还是数据结构的。

首先我们想到的是应该运用到线性链表表的相关知识,运用到单链表(数据域+指针域)的存取结构,方便存储和查找,以及简单的排序。

综合数据结构和c++语言相关知识,锻炼自己的编程能力和考察一下所学的数据结构只是,是自己在实践中发现自己的不足,找不自己的不足之处,在实践中提高。

理论中的数据结构知识只有运用到实践中,再能转变为使用价值,本课程我将用源代码和流程图来说明和设计我的论文。

关键字:单链表、条件、循环、排序。

一、需求分析本文是运用数据结构和C++语言知识实现一个简单的学生成绩管理系统,方便教师对学生成绩的录入、查询、删除、排序等操作。

学生给您记录所用的存储结构是数据结构这门课中所学到的单链表只是。

单链表要有数据域和指针域。

课程设计中药涉及到单链表的初始化、创建、查询、插入、删除、排序等一些基本操作。

程序中要大量用用到指针操作数据,指针是c语言中的精髓,熟悉指针的操作可以极大提高编程能力和减少大量代码。

录入给出多名学生的3门考试的成绩表,每个学生的信息由学号、姓名、以及各科成绩,名次组成。

对学生的考试成绩进行有关统计:按总数高低次序,打印出名次表,分数相同的为同一名次;按名次打印出每个学生的学号、姓名、总分以及各科成绩,并打印统计表。

系统存储的各种数据均保存在数据结构单链表内,各种操作都是对链表结构的操作。

二、设计要求首先使用人员需要进行密码验证才能登录系统。

在这里密码默认为:123456,登录之后是系统的主菜单,第一行是“欢迎进入学生成绩管理系统”欢迎语。

菜单包括:1. 请输入学生的成绩记录2. 显示学生的成绩记录3. 搜索某个学生的成绩记录4. 删除一个学生的成绩记录5. 排序形成一个新的文件6. 插入一个记录7. 保存这个文件8. 读取这个文件9. 退出九项选择。

并通过键入菜单项前的序号进行菜单选择。

如果输入序号不正确将提示:序号不对!要求重新键入选择项。

选择菜单之后就会进入不同的程序分支,调用各自的函数进行操作。

同时本程序系统还提高记录文件导出和记录功能,以方便文件的保存和读取。

默认保存文件路径问源程序文件件内。

程序运行当中,对输入的数据要有事先的分析,如果用户输入的数据与实际不相符如输入成绩的数值为负,则程序应输出相应的提示:“成绩超出范围,请重新输入”。

再者就是,当再输入完相应的数据后,程序作出相应的提示,询问用户是否要保存数据。

在排列学生成绩时候,如果出现成绩相同的情况,程序自动作出处理。

最后,在程序可以正确运行的基础上,再增加一些功能,如在排列的时候,自动输出最高分与最低分等信息。

三、概要设计程序伊始要定义链表结构以保存成绩记录typedef struct stu //定义结构体数组用于缓存数据//{char num[13];//用来保存学号char name[5];//用来保存姓名int score[3];//保存分数,三个科目int sum;//总成绩float average;//平均分int order;//名次struct stu *next;//指向下一个数据记录指针地址}STUDENT;STUDENT *init(); //初始化函数// STUDENT *create(); //创建链表//void print(STUDENT *head); // 显示全部记录//void search(STUDENT *head); //查找记录// STUDENT *Delete(STUDENT *head); //删除记录// STUDENT *sort(STUDENT *head); //排序// STUDENT *insert(STUDENT *head); //插入记录//void save(STUDENT *head); //保存文件//void main(){};//主函数作为下同的菜单选择系统流程图如下四、详细设计1.成绩录入功能教师进入此功能后,根据提示录入学生成绩,在录入过程中,遇到不合适的的成绩系统会自动识别,进行提示。

STUDENT *create(){system("cls"); //清屏//int i,s;STUDENT *head=NULL,*p; // 定义函数.此函数带回一个指向链表头的指针////clrscr();for(;;){p=(STUDENT *)malloc(LEN); //开辟一个新的单元//if(!p) //如果指针p为空//{printf("\n内存溢出"); //输出内存溢出//return (head); //返回头指针,下同//}printf("输入学号(输入0结束):");scanf("%s",&p->num);if(p->num[0]=='0') break; //如果学号为0则结束输入//printf("输入姓名:");scanf("%s",&p->name);printf("开始输入成绩%d科\n",3); //提示开始输入成绩//s=0; //计算每个学生的总分,初值为0//for(i=0;i<3;i++) //3门课程循环3次//{do{printf("成绩%d:",i+1);scanf("%d",&p->score[i]);if(p->score[i]<0 || p->score[i]>100) //成绩一定要在0~100之间//printf("成绩超出范围,请重新输入\n");}while(p->score[i]<0 || p->score[i]>100);s=s+p->score[i]; //将各门成绩累加起来// }p->sum=s; //将总分保存//p->average=(float)s/3; //先用强制类型转换将s转换成float型,再求平均值//p->order=0; //没有排序时,此值为0//p->next=head; //将头结点做为新输入结点的后继结点//head=p; //新输入结点为新的头结点// }return(head);}2.显示记录功能系统中如已有记录,执行此功能之后将显示出所有的记录,如系统无记录,将不予显示,并显示提示信息void print(STUDENT *head){system("color A");int i=0; //统计记录的数目// STUDENT *p; //将指针移动//system("cls"); //清屏//p=head; //初值为头指针// printf("\n************************************STUDENT************************** **********\n");printf("-------------------------------------------------------------------------------\n");printf("| 排名| 学号| 姓名| 成绩1 | 成绩2 | 成绩3 | 总分| 平均分| 次序|\n");printf("-------------------------------------------------------------------------------\n");while(p!=NULL){i++;printf("| %3d |%12s |%6s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",i,p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p-> order);p=p->next;}printf("-------------------------------------------------------------------------------\n");printf("**************************************END********************************* *****\n");}3.搜索记录功能此功能可根据输入的学生姓名显示出存在学生的成绩记录void search(STUDENT *head){system("cls"); //清屏//STUDENT *p; // 移动指针//char s[13]; //存放姓名用的字符数组//p=head;//clrscr();printf("请输入要寻找的学生的姓名:\n");scanf("%s",s);while(strcmp(p->name,s) && p->next!= NULL) //当记录的姓名不是所想要找的,或者指针不是为空的时候//p=p->next; //将指针移动,使之指向下一结点// if(!strcmp(p->name,s)){printf("\n*************************************FOUND**************************** ********\n");printf("-------------------------------------------------------------------------------\n");printf("| 学号| 姓名| 成绩1 | 成绩2 | 成绩3 | 总分| 平均分| 次序|\n");printf("-------------------------------------------------------------------------------\n");printf("|%12s |%-6s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average ,p->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END******************************** ******\n");}elseprintf("\n不存在姓名为%s的学生记录!\n",s); //显示没有这个学生//}4.删除记录功能此功能能可根据输入的学生学号显示出存在的记录,并提示是否删除此记录,键入确定’Y’之后,将删除系统中此记录STUDENT *Delete(STUDENT *head){int n;STUDENT *p1,*p2; //p1为查找到要删除的结点指针,p2为其前驱指针//char c,s[13]; //s[6]用来存放学号,c用来输入字母// system("cls"); //清屏//printf("请输入要删除的记录学号: ");scanf("%s",s);p1=p2=head; //给p1和p2赋初值头指针//while(strcmp(p1->num,s)&&p1->next!= NULL) //当记录的学号不是所想要找的,或指针不为空时//{p2=p1; //将p1指针值赋给p2作为p1的前驱指针//p1=p1->next; //将p1指针指向下一条记录// }if(strcmp(p1->num,s)==0) //找到学号//{printf("**************************************FOUND***************************** *******\n");printf("-------------------------------------------------------------------------------\n");printf("| 学号| 姓名| 成绩1 | 成绩2 | 成绩3 | 总分| 平均分| 次序|\n");printf("-------------------------------------------------------------------------------\n");printf("|%12s |%-6s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);printf("-------------------------------------------------------------------------------\n");printf("***************************************END******************************** ******\n");printf("你确定删除这个学生吗(Y/N)?");//提示是否确定要删除,如果输入Y删除,N就不删除//for(;;){scanf("%c",&c);if(c=='n'||c=='N') break; //如果不删除,则跳出这个循环//if(c=='y'||c=='Y'){if(p1==head) //如果p1==head,说明被删结点是首结点//head=p1->next; //把第二个结点地址赋予head//elsep2->next=p1->next; //否则将一下结点地址赋给前一结点地址//n=n-1;printf("\n学号%s的学生已经被删除!\n",s);printf("请注意保存新文件!\n");break; //删除后,跳出本循环//}}}elseprintf("\n不存在学号为%s 的学生成绩记录!\n",s); //找不到该结点//return(head);}5.记录排序功能执行此功能可以将系统记录进行排名操作,按名次高低进行排序,执行此操作后,再执行显示记录功能,就可以看到排序后的记录结果了。

相关文档
最新文档