班级成绩管理系统
学生成绩管理系统数据流程图及数据字典

学生成绩管理系统数据流程图及数据字典引言概述:学生成绩管理系统是一种用于管理学生各科成绩的软件系统。
通过数据流程图和数据字典,可以清晰地了解学生成绩管理系统的工作流程和数据定义。
本文将详细介绍学生成绩管理系统的数据流程图和数据字典,以便更好地理解该系统的功能和数据结构。
一、数据流程图1.1 学生信息录入流程1.2 成绩录入流程1.3 成绩查询流程1.1 学生信息录入流程学生信息录入是学生成绩管理系统的第一步,其流程如下:1.1.1 教师登录系统1.1.2 选择学生信息录入功能1.1.3 输入学生基本信息,如学号、姓名、性别、班级等1.1.4 系统保存学生信息1.2 成绩录入流程成绩录入是学生成绩管理系统的核心功能,其流程如下:1.2.1 教师登录系统1.2.2 选择成绩录入功能1.2.3 选择要录入成绩的科目和班级1.2.4 输入学生学号和对应科目的成绩1.2.5 系统保存成绩信息1.3 成绩查询流程成绩查询是学生成绩管理系统的常用功能,其流程如下:1.3.1 教师登录系统1.3.2 选择成绩查询功能1.3.3 输入要查询的学生学号或姓名1.3.4 系统显示该学生的各科成绩信息二、数据字典2.1 学生信息数据字典2.1.1 学号:学生的唯一标识符,通常由系统自动生成2.1.2 姓名:学生的姓名,由教师或管理员输入2.1.3 性别:学生的性别,可选项为男或女2.1.4 班级:学生所在的班级,由教师或管理员输入2.2 成绩信息数据字典2.2.1 学号:学生的唯一标识符,用于关联学生信息2.2.2 科目:学生所修科目的名称,如数学、语文、英语等2.2.3 成绩:学生在对应科目的成绩,由教师输入2.2.4 班级:学生所在的班级,用于关联班级信息2.3 教师信息数据字典2.3.1 教师编号:教师的唯一标识符,通常由系统自动生成2.3.2 姓名:教师的姓名,由管理员输入2.3.3 职称:教师的职称,如讲师、副教授、教授等2.3.4 所在学院:教师所在的学院,由管理员输入三、系统功能说明3.1 学生信息管理功能3.1.1 学生信息录入:教师或管理员可以录入学生的基本信息3.1.2 学生信息查询:教师或管理员可以查询学生的基本信息3.2 成绩管理功能3.2.1 成绩录入:教师可以录入学生的各科成绩3.2.2 成绩查询:教师或学生可以查询学生的各科成绩3.3 教师信息管理功能3.3.1 教师信息录入:管理员可以录入教师的基本信息3.3.2 教师信息查询:管理员可以查询教师的基本信息四、系统数据流说明4.1 输入流4.1.1 学生基本信息:由教师或管理员输入4.1.2 成绩信息:由教师输入4.2 输出流4.2.1 学生基本信息:显示学生的基本信息4.2.2 成绩信息:显示学生的各科成绩信息五、数据存储说明5.1 学生信息存储:包含学生的学号、姓名、性别、班级等信息5.2 成绩信息存储:包含学生的学号、科目、成绩、班级等信息5.3 教师信息存储:包含教师的教师编号、姓名、职称、所在学院等信息通过以上的数据流程图和数据字典,我们可以清晰地了解学生成绩管理系统的工作流程和数据结构。
C语言课程设计---班级成绩管理系统

课程设计报告课程名称C语言程序设计课题名称班级成绩管理系统专业班级学号姓名指导教师年月日湖南工程学院课程设计任务书课程名称C语言程序设计课题班级成绩管理系统专业班级学生姓名学号指导老师审批任务书下达日期年月日任务完成日期年月日目录一、引言 (1)二、总体设计 (2)三、详细设计 (4)四、问题分析及总结 (13)五、参考文献 (15)六、附件 (15)一、设计内容与设计要求1. 设计内容:班级成绩管理系统设计涉及的知识点:①掌握并熟练运用C语言的基本数据类型与各种表达式,程序的流程控制语句;②掌握数组的基本概念。
熟练掌握一维数组、二维数组的应用、掌握字符数组与字符串的关系以及字符串的简单处理。
③掌握函数的定义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解函数的作用域。
④掌握结构体的概念,结构体类型的定义,结构体变量的定义和初始化,结构体成员的表示,结构体变量的赋值含义,结构体与指针、函数的关系。
⑤掌握文件、文件类型指针的基本概念,熟练掌握文件的打开与关闭以及文件的建立、读写等有关操作。
2.设计要求:1)用C语言实现系统;利用结构体数组实现班级成绩的数据结构设计;系统的各个功能模块要求用函数的形式实现;应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观;各项显示数据均要求以表格的形式输出;在各功能子模块中应设计相应的二级菜单。
2) 建立一个班级学生成绩数据库,文件名为bjcjk.txt,并从该文件中读取数据;3) 班级成绩管理系统应能提供以下功能:(1)主菜单界面设计。
通过提示用户输入一个数字选项,调用相应的功能函数。
(2)学生成绩显示:完成班级全部学生成绩的显示,显示时按表格的形式,且应有表头;(3)学生成绩追加:完成新增一个(或多个)学生的成绩记录,要求在追加过程中有相应的提示信息,完成追加后能重新计算学生平均成绩并显示;(4)学生成绩修改:要求能按学号和按姓名两种定位方式,且可以按用户要求修改记录中除学号和姓名以外的指定内容,并重新计算学生的平均成绩;(5)学生成绩信息的查询;要示系统能按学号、按姓名查询以及能查总分在某一指定范围内的学生信息,且能显示符合条件的所的记录,若所需查询的信息不存在时应有相应的提示信息。
班级成绩管理系统

#include <stdio.h>#include<string.h>#include<stdlib.h>/*定义学生结构体*/struct Student{char ID[20];char Name[20];float yuwen;float shuxue;float yingyu;float Average;};/*声明学生数组及学生数量*/struct Student students[1000];int num=0;/*求平均值*/float Avg(struct Student stu){return (stu.yuwen+stu.shuxue+stu.yingyu)/3; }/*通过学号返回数组下标*/int Student_SearchByIndex(char id[]){int i;for (i=0;i<num;i++){if (strcmp(students[i].ID,id)==0){return i;}}return-1;}/*显示单条学生记录*/void Student_DisplaySingle(int index){printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");printf("-------------------------------------------------------------\n");printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[ index].Name,students[index].yuwen,students[index].shuxue,students[index].yingyu,s tudents[index].Average);}/*学生成绩录入*/void Student_add(){while(1){printf("请输入学号:");scanf("%s",&students[num].ID);printf("请输入姓名:");scanf("%s",&students[num].Name);printf("请输入语文成绩:");scanf("%f",&students[num].yuwen);printf("请输入数学成绩:");scanf("%f",&students[num].shuxue);printf("请输入英语成绩:");scanf("%f",&students[num].yingyu);students[num].Average=Avg(students[num]);num++;getchar();printf("是否继续?(y/n)");if (getchar()=='n'){break;}}}/*显示学生信息*/void Student_Display(){int i;printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");printf("-------------------------------------------------------------\n");for (i=0;i<num;i++){printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].N ame,students[i].yuwen,students[i].shuxue,students[i].yingyu,students[i].A verage);}}/*按平均值排序*/void Student_SortByAverage(){int i,j;struct Student tmp;for (i=0;i<num;i++){for (j=1;j<num-i;j++){if (students[j-1].Average<students[j].Average){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}/*修改学生信息*/void Student_Modify(){int i;char str1[15],str2[15];printf("\t\t\t 管理员登陆\n");for (i=0;i<100000000;i++){printf("\t\t\t请输入用户名:");gets(str1);printf("\t\t\t请输入密码:");gets(str2);if ((strcmp(str1,"123")==0&&strcmp(str2,"123")==0)) {printf("\t\t\t正确!\n");break;}elseprintf("\t\t\t用户名密码错误,请重试!\n");continue;}while(1){char id[20];int index;printf("请输入要修改的学生的学号:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if (index==-1){printf("学生不存在!\n");}else{printf("你要修改的学生信息为:\n");Student_DisplaySingle(index);printf("-- 请输入新值--\n");printf("请输入学号:");scanf("%s",&students[index].ID);getchar();printf("请输入姓名:");scanf("%s",&students[index].Name);getchar();printf("请输入语文成绩:");scanf("%f",&students[index].yuwen);getchar();printf("请输入数学成绩:");scanf("%f",&students[index].shuxue);getchar();printf("请输入英语成绩:");scanf("%f",&students[index].yingyu);getchar();students[index].Average=Avg(students[index]); }printf("是否继续?(y/n)");if (getchar()=='n'){break;}}}/*成绩统计*/void student_statistics(){int i;struct Student tmp;for (i=1;i<num;i++){if (students[i-1].yuwen>students[i].yuwen){tmp=students[i-1];students[i-1]=students[i];students[i]=tmp;}}printf("语文成绩最高的是:\n");printf("%10s%10s%10s%10s%10s%10s\n","学号","姓名","语文成绩","数学成绩","英语成绩","平均成绩");printf("-------------------------------------------------------------\n");printf("%10s%10s%10.2f%10.2f%10.2f%10.2f\n",students[num-1].ID,studen ts[num-1].Name,students[num-1].yuwen,students[num-1].shuxue,students[num-1].yingyu,s tudents[num-1].Average);printf("-------------------------------------------------------------\n");for (i=1;i<num;i++){if (students[i-1].shuxue>students[i].shuxue){tmp=students[i-1];students[i-1]=students[i];students[i]=tmp;}}printf("数学成绩最高的是:\n");printf("%10s%10s%10s%10s%10s%10s\n","学号","姓名","语文成绩","数学成绩","英语成绩","平均成绩");printf("-------------------------------------------------------------\n");printf("%10s%10s%10.2f%10.2f%10.2f%10.2f\n",students[num-1].ID,studen ts[num-1].Name,students[num-1].yuwen,students[num-1].shuxue,students[num-1].yingyu,s tudents[num-1].Average);printf("-------------------------------------------------------------\n");for (i=1;i<num;i++){if (students[i-1].yingyu>students[i].yingyu){tmp=students[i-1];students[i-1]=students[i];students[i]=tmp;}}printf("英语成绩最高的是:\n");printf("%10s%10s%10s%10s%10s%10s\n","学号","姓名","语文成绩","数学成绩","英语成绩","平均成绩");printf("-------------------------------------------------------------\n");printf("%10s%10s%10.2f%10.2f%10.2f%10.2f\n",students[num-1].ID,studen ts[num-1].Name,students[num-1].yuwen,students[num-1].shuxue,students[num-1].yingyu,s tudents[num-1].Average);printf("-------------------------------------------------------------\n");}/*主程序*/main(){int choice;while(1){/*主菜单*/printf("\n\t\t\t------ 班级成绩管理系统------\t\t\t\n"); printf("\t\t\t1. 学生成绩录入\t\t\t\n");printf("\t\t\t2. 学生成绩显示\t\t\t\n");printf("\t\t\t3. 按学生平均成绩排序\t\t\t\n");printf("\t\t\t4. 学生成绩修改\t\t\t\n");printf("\t\t\t5. 学生成绩统计\t\t\t\n");printf("\t\t\t6.退出系统\t\t\t\n");printf("\t\t\t请选择(1-6):");scanf("%d",&choice);getchar();switch(choice){case 1:Student_add();break;case 2:Student_Display();break;case 3:Student_SortByAverage();Student_Display();break;case 4:Student_Modify(); break;case 5:student_statistics();break;case 6:exit(0);break;}}}。
班级成绩管理系统

班级成绩管理系统班级成绩管理系统文档⒈引言⑴目的在教育领域,班级成绩管理是一个重要的任务。
它可以帮助教师和学校管理学生的成绩情况,提供数据分析和报告,监控学绩并进行干预措施。
本文档旨在向开发人员、教师和学校管理者提供一个详细的班级成绩管理系统文档。
⑵范围本文档涵盖了班级成绩管理系统的各个方面,包括系统的功能、用户角色、数据结构、界面设计和安全策略等。
⑶参考文献[参考文献1] 班级成绩管理系统需求文档[参考文献2] 班级成绩管理系统设计文档⒉系统概述⑴目标班级成绩管理系统的目标是提供一个方便、高效和安全的方式来管理班级的学绩信息。
⑵系统功能班级成绩管理系统将包括以下功能:●学生管理:包括学生信息录入、查询和统计功能。
●成绩录入:教师可以录入学绩,并计算出总分和平均分。
●成绩查询:教师和学生可以根据不同的条件查询学绩。
●数据报告:系统将各种学绩的报告,供教师和学校管理者参考。
●安全管理:系统将保证学绩信息的安全性,只有授权人员可以访问和修改数据。
⒊用户角色⑴教师教师是系统的主要用户,他们可以使用系统进行学生管理、成绩录入、成绩查询和报告等操作。
⑵学生学生可以使用系统查询和查看自己的成绩。
⑶管理员管理员拥有最高权限,可以管理用户角色、系统设置和安全策略等。
⒋数据结构⑴学生信息表学生信息表包含了学生的基本信息,如学生ID、姓名、性别、年级等。
⑵成绩表成绩表包含了学生的各个科目的成绩信息,包括科目、成绩、考试时间等。
⒌界面设计⑴登录界面登录界面提供用户名和密码输入框,用于用户验证身份。
⑵学生管理界面学生管理界面提供学生信息录入、查询和统计功能。
⑶成绩录入界面成绩录入界面提供成绩录入表格,教师可以根据学生和科目输入成绩。
⑷成绩查询界面成绩查询界面提供根据学生、科目和时间等条件进行查询的功能。
⒍安全策略⑴用户身份验证用户在登录时需要提供正确的用户名和密码进行身份验证。
⑵数据加密系统将使用加密算法对用户的密码和敏感数据进行加密保存,提高数据的安全性。
学生成绩管理系统

学生成绩管理系统简介学生成绩管理系统是一种用于管理学生的学业成绩和相关信息的软件系统。
它可以帮助学校、教师和学生有效地管理和查询学生的成绩,提供全面的成绩分析和统计功能,促进教学质量的提高。
功能学生成绩管理系统通常具有以下核心功能:1.学生信息管理:包括学生的基本信息、课程注册、班级信息等。
2.成绩录入:教师可以登录系统,录入学生成绩,并进行相应的成绩审核和修改。
3.成绩查询:学生、教师和学校管理者均可通过系统查询学生成绩,可以按照学生、班级、课程等维度进行灵活查询。
4.成绩统计与分析:系统可以对成绩数据进行统计和分析,生成各类成绩报告和分析图表,为教师和学校提供决策依据。
5.成绩排名:系统可以根据学生成绩进行排名,可以按照总分、班级、课程等维度进行排名。
6.数据导入导出:系统可以支持将学生成绩数据导入导出到Excel、CSV等格式,方便学校的数据管理。
优势学生成绩管理系统的应用带来诸多优势:1.提高工作效率:通过系统自动化处理和统计成绩数据,节省了大量的人力和时间成本。
2.提供准确的数据:系统可以准确地计算和记录学生成绩,避免了人工计算和录入带来的错误。
3.提供个性化服务:学生成绩管理系统可以根据学生的不同需求提供个性化的信息查询和分析功能,满足学生个性化的学习需求。
4.提供全面的分析和决策支持:系统可以生成各类成绩报告和分析图表,帮助教师和学校进行成绩分析和决策。
5.提高教学质量:通过系统对学生成绩进行全方位的管理和分析,有助于教师了解学生的学习状况,及时调整教学方法,提高教学质量。
使用场景学生成绩管理系统适用于各类学校、教育机构以及在线教育平台的学生成绩管理需求。
以下是几个典型的使用场景:1.学校管理者可以通过系统了解学校整体的学生成绩情况,进行综合分析和决策。
2.教师可以通过系统录入学生成绩、排名、查询历史成绩等,方便管理学生成绩和进行个性化教学。
3.学生可以通过系统查询自己的成绩、查看排名等,及时了解自己的学习状况。
成绩管理系统流程图

成绩管理系统流程图成绩管理系统是学校教务管理中非常重要的一部分,它涉及到学生成绩的录入、查询、统计等多个环节。
下面我们将通过流程图的方式来展示成绩管理系统的运行流程。
首先,整个系统的核心是成绩录入。
教师在系统中输入学生成绩时,首先需要登录系统,验证身份。
然后,进入成绩录入界面,选择对应的班级和科目,输入学生的成绩,确认无误后保存。
接着,系统会自动进行成绩的存储和更新。
其次,学生和家长可以通过系统进行成绩查询。
他们需要登录系统,选择对应的班级和科目,然后系统会显示相应学生的成绩信息。
如果有需要,还可以打印成绩单或者导出成绩报告。
另外,系统还可以进行成绩统计和分析。
教师可以根据需要,选择不同的统计方式,比如按班级、按科目、按学期等,系统会自动生成相应的统计图表和报告。
这些统计数据可以帮助学校和教师更好地了解学生的学习情况,及时进行教学调整和干预。
此外,成绩管理系统还具有权限管理功能。
不同的用户拥有不同的权限,比如教师可以录入成绩、家长和学生可以查询成绩,管理员可以对系统进行维护和管理。
系统会根据用户的权限进行相应的操作限制,确保信息安全和管理的有效性。
最后,系统还会定期进行数据备份和维护。
这样可以保证学生成绩数据的安全性和完整性,一旦系统出现故障或者数据丢失,可以及时进行恢复。
通过以上流程图的展示,我们可以清晰地了解成绩管理系统的运行流程,从成绩录入到查询统计再到权限管理和数据备份,每个环节都有着清晰的逻辑和操作步骤。
这样的系统设计可以有效地提高学校的教务管理效率,保障学生成绩数据的准确性和安全性,为学校的教学工作提供有力的支持。
学生成绩管理系统数据流程图及数据字典

学生成绩管理系统数据流程图及数据字典随着教育信息化的发展,学生成绩管理系统在学校中得到了广泛应用。
学生成绩管理系统是一种利用计算机技术对学生成绩进行管理和分析的系统。
本文将介绍学生成绩管理系统的数据流程图及数据字典,以帮助读者更好地理解该系统的数据处理流程和数据结构。
一、数据流程图1.1 学生成绩录入流程- 学生成绩管理员登录系统- 选择录入成绩功能- 输入学生学号和成绩信息- 确认提交1.2 学生成绩查询流程- 学生/教师登录系统- 选择查询成绩功能- 输入学生学号或姓名- 系统显示学生成绩信息1.3 学生成绩统计流程- 教师登录系统- 选择统计功能- 选择统计范围(班级/科目等)- 系统生成成绩统计报表二、数据字典2.1 学生信息表(Student)- 字段:学号(ID)、姓名(Name)、性别(Gender)、班级(Class)- 主键:学号(ID)2.2 成绩信息表(Score)- 字段:学号(ID)、科目(Subject)、成绩(Grade)- 主键:学号(ID)、科目(Subject)- 外键:学号(ID)参考学生信息表2.3 教师信息表(Teacher)- 字段:工号(ID)、姓名(Name)、科目(Subject)- 主键:工号(ID)三、数据处理流程3.1 学生成绩录入流程- 学生成绩管理员登录系统后,通过录入成绩功能将学生成绩信息存储到成绩信息表中。
- 系统会进行数据验证,确保输入的学号和科目存在且成绩符合规定范围。
- 成绩信息成功录入后,系统会生成相应的操作日志记录。
3.2 学生成绩查询流程- 学生/教师登录系统后,通过查询成绩功能可以根据学号或姓名查看学生成绩信息。
- 系统会根据输入的条件在成绩信息表中进行查询,并将查询结果显示给用户。
- 查询结果包括学号、姓名、科目、成绩等信息,方便用户了解学生成绩情况。
3.3 学生成绩统计流程- 教师登录系统后,通过统计功能可以选择不同的统计范围进行成绩统计。
学生成绩管理系统

4 可以引入更多的教学和管理功能:如在 线学习、教学评估等,更好地服务于教 育教学
-
THANK YOU
ENGLISH
可爱/简约/卡通
学生成绩管理系统
-
1
系统功能2系统流程来自3系统要求4
系统实现
5
系统未来发展
学生成绩管理系统
1
学生成绩管理系统是一个用于管理学生成绩的 计算机程序,通常用于学校或教育机构
2
这个系统可以记录每个学生的个人信息和成绩,
包括学生姓名、学号、班级、各科成绩等
3
以下是一个简单的学生成绩管理系统的示例
系统功能
系统流程
系统流程
2.1 学生信息流程
打开系统:进入学生信息管理界面
系统流程
选择添加学生信息:输入学生姓名、学 号、班级等信息
选择编辑学生信息:输入要修改的学生 学号,修改相关信息
选择删除学生信息:输入要删除的学生 学号,删除该学生信息
退出系统
系统流程
2.2 成绩管理流程
打开系统:进入成绩管理界面 选择添加成绩:输入学生学号及各科成 绩 选择编辑成绩:输入要修改的学生学号 及要修改的科目和成绩 选择删除成绩:输入要删除的学生学号 及科目,删除该科目成绩 退出系统
坏
系统实现
系统实现
系统实现
为了实现学生成绩管理系统的各项功能,以下步骤需要被完成 确定系统的需求和功能:制定详细的需求说明书 设计系统的数据库结构和数据模型:包括学生信息、成绩信息等 开发系统的各项功能模块:包括学生信息管理、成绩管理、查询和统计等 进行系统的测试和调试:确保系统的稳定性和正确性 进行系统的用户培训和文档编写:确保用户能够正确使用系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
武汉轻工大学数计学院C语言课程设计报告班级:计算机类1307班学号: **********姓名:**指导教师:***日期:2014年6月18日一、实验目的1.在编辑应用程序过程中,逐步加深对C语言编程的理解;2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;3.培养初步编程的能力,为以后的学习奠定基础。
二、实验内容运用所学的C语言知识编辑应用程序:班级成绩管理系统以及运动的时钟三.系统软件环境:本程序主要运行在: Visual C++ 6.0Turbo C/C++ 3.0四.课程设计题目:1.必做题:班级成绩管理系统对一个有N个学生的班级,每个学生有M门课程。
该系统实现对班级成绩的录入、显示、修改、排序、保存、查询等操作的管理。
功能要求:(1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。
(2)本系统显示这样的菜单:请选择系统功能项:a、成绩录入b、成绩显示c、成绩保存d、成绩排序e、成绩修改(要求先输入密码)f、成绩统计1)显示每门课程成绩最高的学生的基本信息。
2)显示每门课程的平均成绩,柱状图显示。
3)显示超过某门课程平均成绩的学生人数。
4)显示某门课程每个分数段区间的人数,用饼状图显示。
g、退出系统(3)执行一个具体的功能之后,程序将重新显示菜单。
(4)将学生成绩保存到文件中。
五.数据结构设计描述:(一)班级成绩管理系统↓↓六.源程序(一)班级成绩管理系统#include <string.h>#include <stdio.h>#include <stdlib.h>#include<graphics.h>#include<conio.h>#define _COURSES 3//定义科目数#define _LEN sizeof(student)//定义结构体大小//枚举返回值情况enum status{OVERFLOW = -1, //内存(溢出)问题DONE = 0, //成功NOFOUND = 1, //不存在OPENFAIL = 2, //打开(文件)失败BACK = 3 //返回};//end//定义学生信息结构体typedefstructStudentInfo{//数据域unsigned intnum;//学号char name[11];//姓名float scores[_COURSES];//各科成绩//指针域structStudentInfo *next;//存放下一节点的地址}student;//endstudent *head=NULL;//声明链表头结点student *curr=NULL;//声明指向当前节点的指针int total = 0;//声明当前节点个数intinit();//初始化链表intadd_stu();//添加新节点intshow_all();//显示所有学生信息intfind_stu();//查找指定信息节点intmodify_stu();//修改指定信息节点intremove_stu();//删除指定信息节点intsort_list();//对链表排序intsave_to_file();//将所有信息保存至文件intread_from_file();//从文件中读取信息int picture();//画分布图int quit();//释放所有节点空间int entering(student *input);//录入学生信息void menu();void show_stu(student *show, int serial);//显示指定学生信息void start();//程序开始界面void change(student *former, student *latter, student *temp);//交换两个节点的数据域void main(){int h,flag1,flag2;char name[20]="hyw",password[10]="hyw";char person[20],password1[10];printf ("\t\t ******** 欢迎进入学生成绩管理系统!********\n\n");printf ("\t\t\t 用户登录\n\n");for(h=0;h!=5;){printf("\t\t\t\t 用户名:");gets(person);flag1=strcmp(person,name);printf("\t\t\t\t 密码:");gets(password1);flag2=strcmp(password,password1);if(flag1==0 && flag2==0){printf("\t\t\t\t 登陆成功!\n\n");menu();break;}else{printf ("\t\t\t 用户名或密码错误!\n\n");printf ("\t\t\t 请注意:您还剩%d次机会!\n\n",4-h);}}if (h=5)printf ("对不起,您输入的用户名或密码有误,已被强制退出。
\n"); }void menu(){int choice=0;init();while(1){system("cls");//清屏start();printf("请选择:");scanf("%d",&choice);fflush(stdin);//清空缓冲区switch (choice){case 1: add_stu(); break;case 2: show_all(); break;case 3: find_stu(); break;case 4: modify_stu(); break;case 5: remove_stu(); break;case 6: sort_list(); break;case 7: save_to_file(); break;case 8: read_from_file(); break;case 9: picture(); break;case 0: quit();exit(0); break;default: break;}system("pause");//暂停批文件的处理并显示消息}intinit(){head = (student *)malloc(_LEN);//为头结点申请空间if (!head){//如果申请空间失败,返回return OVERFLOW;}head->next = NULL;//指向下一节点(空)curr = head->next;//当前节点指针指向第一个结点total = 0;//当前节点个数初始化为0(头结点不计算在内) return DONE;}/*功能:头插法添加新节点,并刷新学生人数 */ intadd_stu(){student *add = (student *)malloc(_LEN);curr = head->next;//当前节点指针指向第一个节点printf("\t====当前已存入 %d 个同学\n",total);printf("请输入第 %d 个学生的信息\n",total+1);if (BACK == entering(add)){free(add);return BACK;}head->next = add;//头结点指针域指向新建的节点add->next = curr;//新建节点指针域指向第一个节点curr = add; //当前节点指向新建的节点total += 1; //更新学生总人数return DONE;}/*功能:显示所有学生信息 */intshow_all(){if ( 0 == total ){printf("\t====没有可供显示的学生信息!\n");return NOFOUND;}curr = head->next;//当前节点指针指向第一个节点printf("\t%4s%12s%12s","序号","学号","姓名");for (int m=0; m<_COURSES; m++){printf("%7s","科目");}printf("\n");printf("\t-------------------------------------------------------------\n");for (inti=1; i<=total; i++){show_stu(curr,i);curr = curr->next;//当前节点指针后移}printf("\t-------------------------------------------------------------\n");return DONE;}/*功能:查找指定学生信息 */intfind_stu(){charstu_name[11];int flag=1;printf("请输入要查找的学生姓名:");scanf("%s",stu_name);curr = head->next;//指向第一个节点while (curr != NULL){if (strcmp(stu_name,curr->name) == 0){printf("\t%4s%12s%12s","序号","学号","姓名");for (int m=0; m<_COURSES; m++){printf("%7s","科目");}printf("\n");printf("\t-------------------------------------------------------------\n");show_stu(curr,flag);return DONE;}curr = curr->next;++flag;}printf("\t====没有找到 %s !请仔细核对姓名再查找\n",stu_name);return NOFOUND;}/*功能:修改指定学生的所有信息 */intmodify_stu(){charstu_name[11];int flag=1;curr = head->next;//指向第一个节点printf("请输入要修改的学生的姓名:");scanf("%s",stu_name);while (curr != NULL){if (strcmp(stu_name,curr->name) == 0){printf("\t%4s%12s%12s","序号","学号","姓名");for (int m=0; m<_COURSES; m++){printf("%7s","科目");}printf("\n");printf("\t-------------------------------------------------------------\n");show_stu(curr,flag);entering(curr);printf("\t====成功修改了 %s 的所有信息!\n",stu_name);return DONE;}curr = curr->next;++flag;}printf("\t====没有找到 %s !请仔细核对姓名\n",stu_name);return NOFOUND;}/*功能:删除指定学生 */intremove_stu(){student *pre=head;charstu_name[11];curr = head->next;//指向第一个节点printf("请输入要删除的学生的姓名:");scanf("%s",stu_name);while (curr != NULL){if (strcmp(stu_name,curr->name) == 0){pre->next = curr->next;free(curr);--total;printf("\t====已成功删除\"%s\"\n",stu_name);return DONE;}pre = pre->next;curr = curr->next;}printf("\t====没有找到 %s !请仔细核对姓名\n",stu_name);return NOFOUND;}/*功能:对所有学生排序 */intsort_list(){student *temp = (student *)malloc(_LEN);student *curr_i = head->next;student *curr_j = NULL;char choice='0';printf("\t \t1----按学号排序 .\t2----按姓名排序 . \n");printf("\t \t3----按科目排序 .\t0----退出排序. \n");printf("请选择:");scanf("%c",&choice);fflush(stdin);switch (choice){case '1':{while(curr_i->next != NULL){curr_j = curr_i->next;while (curr_j != NULL){if (curr_i->num>curr_j->num){change(curr_i,curr_j,temp);}curr_j = curr_j->next;}curr_i = curr_i->next;}printf("\t====排序成功!\n");break;}case '2':{while(curr_i->next != NULL){curr_j = curr_i->next;while (curr_j != NULL){if (strcmp(curr_i->name , curr_j->name) > 0){change(curr_i,curr_j,temp);}curr_j = curr_j->next;}curr_i = curr_i->next;}printf("\t====排序成功!\n");break;}case '3':{while(curr_i->next != NULL){curr_j = curr_i->next;while (curr_j != NULL){if (curr_i->scores[0] <curr_j->scores[0]){change(curr_i,curr_j,temp);}curr_j = curr_j->next;}curr_i = curr_i->next;}printf("\t====排序成功!\n");break;}case '0':{free(temp);return BACK;}default:{printf("\t====输入有误!\n");break;}}free(temp);return DONE;}/*功能:保存数据到文件 */ intsave_to_file(){curr=head->next;if (total == 0){printf("\t====目前还没有任何信息,不用保存!\n");return BACK;}FILE *fp;if((fp=fopen("record.dat","wb"))==NULL){printf("\t====文件打开失败!\n");return OPENFAIL;}while (curr != NULL){//将数据成块写入文件fwrite((char *)curr, _LEN, 1, fp);curr=curr->next;}fclose(fp);printf("\t====信息已成功保存至文件\"record.dat\"文件中\n");return DONE;}/*功能:从文件中读取数据 */ intread_from_file(){char judge='y';FILE *fp;if((fp=fopen("record.dat","r"))==NULL){printf("文件不存在或者打开失败!\n");return OPENFAIL;}printf("\t====读取文件会覆盖当前信息!是否确定载入文件?(y/n):");scanf("%c",&judge);if (judge=='n' || judge=='N'){return BACK;}quit();//释放以前所有信息的空间init();//重新初始化链表curr = head;//当前节点指针指向头结点student *add=(student *)malloc(_LEN);//申请空间存放读取的信息while (fread((char *)add, _LEN, 1, fp)){//由于存储的信息是最新的信息在前,所以读取的时候将其添加在链表尾add->next=curr->next;curr->next=add;curr=add;add=(student *)malloc(_LEN);++total;}fclose(fp);printf("\t====文件载入成功!当前已有%d个学生。