学生成绩管理数据结构课程设计报告
学生成绩管理系统课程设计报告c++
学生成绩管理系统课程设计报告前言一、系统的设计需求1、整个系统均用C语言实现;2、利用指针、链表来实现学生成绩的数据结构设计;3、系统具有输入、显示、删除、排序、退出基本功能;4、系统的各个功能模块都用函数的形式来实现;5、可以将学生信息全部显示出来出来。
二、系统的功能模块划分每一条记录包括一个学生的姓名、成绩。
同时1、输入功能:一次可以完成一个学生成绩记录的输入。
2、显示功能:完成全部学生记录的显示。
3、删除功能:对指定学生的成绩进行删除.4、排序功能:按学生从大到小进行排序。
5、修改功能:对学生的成绩进行修改。
三、系统的整体设计1。
数据结构设计:A、输入功能的设计:void insert_func(void){char s_temp[4];ptr=(struct student *) malloc(sizeof(struct student));printf(” Student name :");gets(ptr—〉name);// gets从标准输入设备读取字符串// printf(” Student score:");gets(s_temp);ptr->score = atoi(s_temp);//把字符串转化为整数//B、删除功能的设计:void delete_func(void)//现在进入删除操作//{char del_name[20];printf(" Delete student name:");gets(del_name);prev = head;current = head-〉next;while ((current != NULL)&& (strcmp(current-〉name , del_name)!=0))//用到了strcmp 比较字符串{prev = current;current = current->next;}if (current != NULL){prev—〉next = current—〉next;free(current);//释放当前位置//printf(" %s student record deleted\n”,del_name);//输出被删除的姓名//}elseprintf(” Student %s not found\n",del_name);//否则此学生不存在//C、排序功能的设计:void sort_func(void)//插入数据//{prev = head;//把头指针所指的值付给prev//current = head—〉next;//把头指针的下一个指针值付给当前指针所指的位置// while ((current != NULL)&&(current—〉score 〉ptr—〉score)){prev = current;current = current->next;}ptr-〉next = current;prev—〉next = ptr;D、修改功能的设计:void modify_func(void){char n_temp[20],s_temp[4];//定义字符类型//printf(” Modify student name:”);gets(n_temp);//这样输入姓名current=head—>next;while ((current != NULL)&& (strcmp(current->name , n_temp)!=0)){prev = current;current = current-〉next;}if (current != NULL){printf(” **************************\n");printf(” Student name :%s\n”,current-〉name);printf(” Student score:%d\n”,current—>score);printf(” **************************\n");printf(" Please enter new score:”);gets(s_temp);current—〉score = atoi(s_temp);printf(" %s student record modified\n”,n_temp);}//输出被修改的成绩//elseprintf(” Student %s not found\n”,n_temp);//否则此学生不存在//anykey_func();E、显示功能的设计:void display_func(void)//定义显示//{int count=0;system(”cls”);if(head—〉next == NULL)//如果头指针所指数为空//{printf(” No student record\n”);//则输出学生记录为空//}else//否则输出学生姓名和成绩//{printf(” NAME SCORE\n”);printf(” —--——--—————-—-—-——-—-——-——\n”);current=head->next;while(current != NULL){printf(” %-20s %3d\n", current—〉name, current—〉score);count++;current=current—〉next;if(count % 20 == 0)getch();}printf(” --——————-—————————--—-—-—--\n”);printf(" Total %d record(s) found\n”, count);2.功能模块的具体设计整个系统除了主函数外,另外还有8个函数,实现5大功能:输入功能、显示功能、排序功能、删除功能、修改功能。
(2023)数据结构课设报告学生成绩管理系统(一)
(2023)数据结构课设报告学生成绩管理系统(一)数据结构课设报告学生成绩管理系统一、背景介绍为了方便教师管理学生的成绩,提高数据处理的效率和准确性,我们团队开发了一款可以管理学生成绩的系统。
二、需求分析•教师可以登录系统,并进行学生信息的录入、修改、查询和删除。
•教师可以录入、修改、查询和删除学生的成绩。
•学生也可以登录系统,并查看自己的成绩。
•教师和学生的密码需要进行加密存储,并能够找回密码。
三、设计方案1. 数据结构设计我们采用链表的数据结构,实现学生信息和成绩的存储。
- 学生信息:学号、姓名、密码。
- 学生成绩:科目、成绩。
2. 模块划分•登录模块:实现教师和学生的登录、密码加密和找回密码。
•学生信息管理模块:实现学生信息的录入、修改、查询和删除。
•成绩管理模块:实现成绩的录入、修改、查询和删除。
•学生成绩查询模块:实现学生查看自己成绩的功能。
3. 界面设计我们采用Java Swing库实现图形化界面,美观易用。
四、开发过程1. 环境配置我们使用Java语言进行开发,并采用MySQL数据库存储数据。
开发工具为Eclipse和Navicat。
2. 实现过程在开发过程中,我们分别完成了登录模块、学生信息管理模块、成绩管理模块和学生成绩查询模块。
同时,我们进行了严格的测试和优化,保证了系统的稳定性和用户体验。
五、总结通过本次课设,我们学习到了如何设计、实现一款简单的大型软件。
同时,我们也深入理解了数据结构的应用和开发过程中需要注意的问题。
未来,我们将继续学习和提升自己的技术水平,为社会创造更多有用的产品。
六、存在的问题和改进计划1. 学生信息和成绩输入需要更为便捷目前的输入方式需要逐一输入每个学生的信息以及成绩,如果要录入多个学生的信息,效率不高。
我们计划实现批量导入的功能,可以通过Excel表格导入学生信息和成绩。
2. 安全性还需要更高的保障目前我们只是简单使用密码加密保护了教师和学生的账户信息,如果系统被攻击者入侵,那么所有的账户信息和成绩信息都会暴露,对学生隐私和数据安全造成极大威胁。
数据结构课设报告--学生成绩管理系统
课程设计(论文)说明书题目:学生成绩管理系统学院:计算机科学与工程学院专业:姓名:学号:指导教师:2012年月日摘要随着科学的发展和社会的进步,许多过去由人工处理的繁杂事务开始交付计算机来完成。
明显地加快了经济信息化和社会信息化的进程。
因此,计算机教育在各国备受重视,计算机知识与能力已成为21世纪人才素质的基本要素之一。
本报告简单叙述了学生管理系统的现状,重点介绍了学生成绩管理系统的实现过程:包括系统分析、数据流程分析、功能设计、系统实现、系统测试和调试。
C语言是一种通用的程序设计语言,c语言在很多方面继承和发展了以往许多高级程序设计语言的成果经验与特色,具有适应性强、应用范围广、书写格式自由、数据类型丰富、数据结构系统化、运行程序质量高、可移植性好和运行效率高等优点。
而《数据结构与算法》则是对数据进行一定的结构化,通过运用各种算法使系统的实现更简便易行。
关键词:管理;需求;模块目录引言 (3)1 系统概述 (3)2 需求分析 (3)2.1安全需求分析 (3)2.2 数据需求分析 (4)2.3 功能需求分析 (4)2.4 界面需求分析 (4)2.5 开发环境 (4)3 详细设计 (4)3.1 系统结构 (4)3.2 各模块功能 (5)3.3 功能模块的设计 (6)3.4 数据结构设计 (8)4 所遇到的问题和分析解决 (9)5 测试结果 (9)6 系统特色和关键技术 (12)7 结论 (12)参考文献 (13)引言背景:21世纪,科学技术突飞猛进,特别是信息技术和网络技术的迅速发展,各个学校的规模也随之不断增大,有关学生成绩管理工作所涉及的数据量越来越大,如若进行的仍是手工的学生成绩管理,学校就不得不靠增加人力、物力来进行学生成绩管理。
即使如此,手工管理仍具有效率低、管理复杂和易出错等诸多问题。
所以在学校这样一个具有超大数据量的机构中,通过应用信息技术和网络技术对学生成绩信息进行系统化的管理是必须的。
学生成绩管理数据结构课程设计报告书
计算机工程学院实践报告课程名称:数据结构课程设计设计题目:学生成绩管理设计任务书指导教师:周海岩年月日摘要:学生成绩管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性和完整性强,数据安全性强,数据安全性好的库。
而对于后者则要求应用程序功能完备易使用等特点。
该系统主要实现,添加、修改、删除、读出、写入、查找、排序、计算总分、平均分、分类汇总等功能。
系统的核心是添加、修改和删除三者之间的联系,每个表的修改都将联动的影响其他的表,当完成添加或删除操作时系统会自动地完成学生成绩的修改。
查询功能也是系统的核心之一,在系统中主要根据学生姓名和学号进行查询,其目的就是为了方便用户使用。
系统有完整的用户添加、修改、删除和密码修改功能,并具备报表打印功能。
关键词:添加;修改;删除;查找;排序;总分;平均分目录1 需求分析:.............................................................. 错误!未定义书签。
1.1任务及要求 ..................................................................... 错误!未定义书签。
1.2程序设计思想 (1)1.3实现功能 (1)2 概要设计:.............................................................. 错误!未定义书签。
2.1线性顺序表的抽象数据定义: (3)2.2程序框图 (3)2.3程序模块 (3)3 详细设计: (5)3.1声明一个student的结构体类型并且定义变量 (5)3.2声明类system且构造函数 (6)3.3调用添加函数 (6)3.4调用查询函数 (7)3.5调用显示函数.................................................................. 错误!未定义书签。
数据结构课程设计报告--学生成绩管理系统
淮海工学院计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:学生成绩管理系统姓名:白文吉学号:2011122453 专业班级:计算机科学与技术计算机111系(院):计算机工程学院设计时间:2012.12.24~2013.1.4设计地点:软件工程实验室、教室是否继续删除,根据用户需要选择,删除完毕后显示所有学生信息,点击任意键返回功能选择界面。
(6)修改学生成绩:输入一个学生的学号,提示选择修改的科目,选择后输入新的成绩,输入新成绩后按回车确定,询问是否修改其它科目的成绩,在修改完一个人的成绩后,提示是否修改其他人的成绩,所有修改都已完成后显示所有学生信息,点击任意键返回功能选择界面。
(7)按姓名升序排序:直接显示排好顺序的学生信息,同时会向程序所在文件中输出一个名为“newstudentfile”的txt文件。
(8)退出:返回欢迎界面六测试成果欢迎界面功能选择界面显示已有学生成绩信息添加一位学生的信息及询问成功添加后显示所有学生信息删除一个学生及询问删除后显示所有学生信息只修改一个人的一门成绩修改后的所有学生信息(学号为10015的成绩一已经修改为100)按姓名升序排序后的学生信息八课程设计心得此程序运行需要一个“student.txt”文件,文件内容为:10011 卓洛 90 75 8810012 娜美 80 80 9210013 乌索普 85 77 8010014 路飞 82 85 8510015 布鲁克 68 84 8610016 梅利 59 81 7610017 山治 92 93 9410018 罗宾 85 90 7410019 弗兰奇 79 90 8410020 乔巴 84 87 88。
数据结构课程设计报告学生成绩管理系统
《数据结构》课程设计报告课题名称:学生成绩管理系统专业班级: 2015221学号: 201522122姓名:赵敏指导老师:杨彬一、课题名称学生成绩管理系统二、课题设计的基本思想,原理和算法描述1,、基本思想:建立一个学生成绩管理系统,能够实现每位学生的成绩的录入、删除、修改、查找、排序(按成绩降序排序)等功能。
2、原理:首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,然后完成主函数以验证各个函数功能并得出运行结果,最后调试改进。
/3、算法描述定义项目的数据结构void display(){cout<<setw(6)<<name<<" "<<setw(3)<<num<<" "<<setw(3)<<score<<endl;//setw()设置输出宽度输出项目占6个字符的位置,它由头文件iomanip定义}friend void insert();// 定义插入(用友元函数方便调用类中成员)friend void del();// 定义删除friend void search();// 定义查找friend void change();// 定义修改friend void sort();////定义每个学生数据private:char name[15]; //姓名int num; //学号int score; //成绩};#include<iostream> //使用标注命名空间调用函数,需要名空间的支持#include<iomanip> //I/O流控制头文件#include<fstream> //文件操作的类和方法头文件using namespace std; //申请内存空间class student{public: //定义为公共成员函数void setdata(){cin>>name>>num>>score;}三、源程序及注释#include <iostream>#include <fstream>#include <string>#include <iomanip>using namespace std;string str[5] ; //定义一个str字符串来吸收文件2.txt中重复的标题int aNum=0; //使用全局变量定义学生的人数struct adent //构建结构体{char name[10]; //姓名int id;int chinese;int math;int english;int sum;}a[50],temp;//实现对文件1.txt和文件2.txt数据的合并,生成文件3.txtvoid Merge(){char* f1 = "d:\\1.txt";char* f2 = "d:\\2.txt";char* f3 = "d:\\3.txt";ifstream inFile1( f1 ); //从磁盘读取文件1.txtifstream inFile2( f2 ); //从磁盘读取文件2.txtofstream outFile( f3 ); //写入信息到文件3.xtxoutFile << inFile1.rdbuf(); //把文件1.txt中的数据写入到outfilefor(int i=0;!inFile2.eof()==true;i++) //遍历文件2.txt的所有数据{string str;getline(inFile2,str); //读取第一行信息放到str中if(i==0)continue; //跳过第一行outFile<<str<<endl; //把后面的信息放入到文件3.txt}inFile1.close(); //关闭文件f1inFile2.close();outFile.close();ifstream f ( f3 );cout <<"**文件已生成,合并后数据如下**"<<endl;cout << f.rdbuf(); //输出文件3.txt};//把文件3.txt中的数据读出到结构体中,便于对数据的操作void FillStruct(adent *p){int i=aNum, j=0; //这里让i = aNum,假如先添加数据,后合并,则结构体下标中人数i不是从0开始计,而是从先输入的数据的个数aNum开始的ifstream infile("D:\\3.txt",ios::in); //以读的方式打开文件3.txtif(!infile) //测试是否成功打开{cerr<<"open error!"<<endl;exit(1);}while(!infile.eof()) //遍历infile,只把数据写入进去,过滤掉第一行的头标题{while(j<5) //用一个str数组把文件3.txt中的头标题给吸收进去{infile>>str[j];j++;}//把磁盘中的文件读出来写入到结构体中infile >> p[i].name >> p[i].id >> p[i].chinese >> p[i].math >> p[i].english;aNum++;i++;}aNum=aNum-1; //数据读完后因光标移到下一行,等于是多读了一行,所以真实的人数要比计数减一(不知道理解的对不?)infile.close(); //关闭文件};//抽取出三科成绩中有补考的学生并保存在一个新文件4.txtint FailList(adent *p){/*如果先开始进行的操作不是合并或者添加数据,那么其他的操作将无法进行,因为结构体中没有学生数据,返回主菜单*/if(aNum==0){cout<<"请先合并或者输入数据"<<endl;return 0;}ofstream in;in.open("d:\\4.txt",ios::trunc); //如不空则清空in<<"补考名单"<<endl; //用插入器(<<)向文件输出;用析取器(>>)从文件输入for(int i=0;i<aNum;i++){if(p[i].chinese<60||p[i].english<60||p[i].math<60){in<<p[i].name<<"\t";}}};void sum(adent *p) //求总和{for(int i=0;i<aNum;i++){p[i].sum=p[i].chinese+p[i].english+p[i].math;}}void traversal(adent *p) //遍历输出学生数据{cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"语文"<<'\t'<<"数学"<<'\t'<<"英语"<<'\t'<<"总分"<<endl;for(int i=0;i<aNum;i++){cout<<p[i].name<<'\t'<<p[i].id<<'\t'<<p[i].chinese<<'\t'<<p[i].math<<'\t'<<p[i].english<<'\t'<<p[i] .sum<<endl;}}//对学生总分按照从高到低的顺序排列int Sort(adent *p){if(aNum==0){cout<<"请先合并或者输入数据"<<endl;return 3;}sum(p);int flag=0; //设标识位do{cout<<"请输入排序方式,输入“1”冒泡排序, 输入“2”直接插入排序"<<endl;cin>>flag;if(flag==1)//冒泡{for(int i=0;i<aNum-1;++i) //外层循环{for(int k=i;k<aNum-1;++k) //内层循环{if(p[k].sum <p[k+1].sum) //按照从大到小的顺序进行排列{temp = p[k];p[k] = p[k+1];p[k+1] = temp;}}}traversal(p); //输出排序后的结果return 1;}if(flag==2)//直接插入{for(int i=1;i<aNum;i++){temp=p[i]; //将要比较的关键数赋给哨兵tempint j=i-1;while(j>=0 && temp.sum>p[j].sum) //直到越界或者把哨兵的值和j的值进行比较{p[j+1]=p[j]; //如果J的值比哨兵的值小,则把j的值向后移动j--; //j向前移,循环进行比较}p[j+1]=temp; //直到找到temp的值比j的值小,就把哨兵里的值放在j得后面}traversal(p);return 1;}if(flag!=1 && flag!=2){cout<<"输入错误,请重新输入";flag=3;}}while(flag=3);}//输入一个学生姓名后,能查找到此学生的信息并输出结果int Select(adent *p){if(aNum==0){cout<<"请先合并或者输入数据"<<endl;return 3;}int i=0;cout<<"请输入查询的姓名:";char sname[10];cin>>sname;while(i<aNum){if(strcmp(sname,p[i].name)==0) //通过字符串的比较来搜索要查找的姓名{cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"语文"<<'\t'<<"数学"<<'\t'<<"英语"<<endl;cout<<p[i].name<<'\t'<<p[i].id<<'\t'<<p[i].chinese<<'\t'<<p[i].math<<'\t'<<p[i].english<<end l;return 1;}else{i++;if(i==aNum){cout<<"无此学生返回主菜单"<<endl;return 0;}}//while}//统计输出各门课程的平均分,最高分、最低分//统计各门课程优秀、良好、中等、及格、不及格的人数及百分比int Statistics(adent *p){ if(aNum==0){cout<<"请先合并或者输入数据"<<endl;return 0;}int flag=0;cout<<"请输入您想进行统计的科目,语文输入“1”,数学输入“2”,英语输入“3”"<<endl;cin>>flag;if(flag==1){float tempmax=0,tempmin=100,tempsum=0,tempgood=0,tempnormal=0,tempbad=0;for(int i=0;i<aNum;i++){if(p[i].chinese>tempmax)tempmax=p[i].chinese; //找到最高分if(p[i].chinese<tempmin)tempmin=p[i].chinese; //找到最低分if(p[i].chinese>=85)tempgood++; //找到优秀的人数if(p[i].chinese>=60 &&p[i].chinese<85)tempnormal++; //中等的人数if(p[i].chinese<60)tempbad++; //不及格的人数tempsum=tempsum+p[i].chinese; //语文的总分}cout<<"语文成绩平均分为:"<<setprecision(4)<<tempsum/aNum<<'\t'<<"最高分为:"<<tempmax<<'\t'<<"最低分为:"<<tempmin<<endl;cout<<"优秀的人数:"<<tempgood<<" 普通的人数:"<<tempnormal<<" 不及格的人数:"<<tempbad<<endl;cout<<"优秀(大于等于85)百分比为:"<<setprecision(4)<<tempgood/aNum*100<<'\t'<<"中等(60到85之间)百分比为:"<<tempnormal/aNum*100<<'\t'<<"不及格(小于60)百分比为:"<<tempbad/aNum*100<<endl;}if(flag==2){float tempmax=0,tempmin=100,tempsum=0,tempgood=0,tempnormal=0,tempbad=0;for(int i=0;i<aNum;i++)if(p[i].math>tempmax)tempmax=p[i].math;if(p[i].math<tempmin)tempmin=p[i].math;if(p[i].math>=85)tempgood++;if(p[i].math>=60 && p[i].math<85)tempnormal++;if(p[i].math<60)tempbad++;tempsum=tempsum+p[i].math;}cout<<"数学成绩平均分为:"<<setprecision(4)<<tempsum/aNum<<'\t'<<"最高分为:"<<tempmax<<'\t'<<"最低分为:"<<tempmin<<endl;cout<<"优秀的人数:"<<tempgood<<" 普通的人数:"<<tempnormal<<" 不及格的人数:"<<tempbad<<endl;cout<<"优秀(大于等于85)百分比为:"<<setprecision(4)<<tempgood/aNum*100<<'\t'<<"中等(60到85之间)百分比为:"<<tempnormal/aNum*100<<'\t'<<"不及格(小于60)百分比为:"<<tempbad/aNum*100<<endl;}if(flag==3){float tempmax=0,tempmin=100,tempsum=0,tempgood=0,tempnormal=0,tempbad=0;for(int i=0;i<aNum;i++){if(p[i].english>tempmax)tempmax=p[i].english;if(p[i].english<tempmin)tempmin=p[i].english;if(p[i].english>=85)tempgood++;if(p[i].english>=60 &&p[i].english<85)tempnormal++;if(p[i].english<60)tempbad++;tempsum=tempsum+p[i].english;}cout<<"英语成绩平均分为:"<<setprecision(4)<<tempsum/aNum<<'\t'<<"最高分为:"<<tempmax<<'\t'<<"最低分为:"<<tempmin<<endl;cout<<"优秀的人数:"<<tempgood<<" 普通的人数:"<<tempnormal<<" 不及格的人数:"<<tempbad<<endl;cout<<"优秀(大于等于85)百分比为:"<<setprecision(4)<<tempgood/aNum*100<<'\t'<<"中等(60到85之间)百分比为:"<<tempnormal/aNum*100<<'\t'<<"不及格(小于60)百分比为:"<<tempbad/aNum*100<<endl;}};void adda(adent *p){int aid=0,ac=0,am=0,ae=0;char aname[10];cout<<"请输入学号:"<<endl;cin>>aid;p[aNum].id=aid;cout<<"请输入姓名:"<<endl;cin>>aname;strcpy(p[aNum].name,aname);cout<<"请输入语文成绩:"<<endl;cin>>ac;p[aNum].chinese=ac;cout<<"请输入数学成绩:"<<endl;cin>>am;p[aNum].math=am;cout<<"请输入英语成绩:"<<endl;cin>>ae;p[aNum].english=ae;cout<<"录入成功"<<endl;aNum++; //学生人数}//删除数据int dela(adent *p){if(aNum==0){cout<<"请先合并或者输入数据"<<endl;return 3;}int i=0,aid=0;cout<<"请输入要删除学生的学号"<<endl; cin>>aid;while(i<aNum){if(p[i].id==aid) //找到要删除的id{for(int j=i;j<aNum-1;j++)p[i]=p[i+1]; //向前移动一位aNum--; //人数减一cout<<"删除成功"<<endl;return 1;else{i++;if(i==aNum){cout<<"无此学生返回主菜单"<<endl;return 0;}}}//while}//修改数据int altera(adent *p){if(aNum==0){cout<<"请先合并或者输入数据"<<endl;return 3;}int aid=0,ac=0,am=0,ae=0,i=0;char aname[10];cout<<"请输入要修改学生的学号"<<endl;cin>>aid;while(i<aNum){if(p[i].id==aid){cout<<"请输入新姓名:"<<endl;cin>>aname;strcpy(p[aNum].name,aname);cout<<"请输入新语文成绩:"<<endl;cin>>ac;p[aNum].chinese=ac;cout<<"请输入新数学成绩:"<<endl;cin>>am;p[aNum].math=am;cout<<"请输入新英语成绩:"<<endl;cin>>ae;p[aNum].english=ae;cout<<"修改成功"<<endl;return 1;}elsei++;if(i==aNum){cout<<"无此学生返回主菜单"<<endl;return 0;}}}//while}//菜单void menu(){cout<<"-------------------------------学生成绩管理系统---------------------------------"<<endl;cout<<" 1:对文件进行合并生成3.txt(在D盘下)"<<endl;cout<<" 2:添加数据"<<endl;cout<<" 3:修改数据"<<endl;cout<<" 4:删除数据"<<endl;cout<<" 5:按姓名查找某一学生成绩"<<endl;cout<<" 6:生成需补考学生名单4.txt(在D盘下)"<<endl;cout<<" 7:对学生成绩进行排序"<<endl;cout<<" 8:进行各科成绩的统计(平均分,最高分,最低分,成绩层次分布)"<<endl; cout<<" 9:退出"<<endl;cout<<"--------------------------------------------------------------------------------"<<endl;}//主函数void main(){system("color 79"); //系统颜色int choice;do{menu();cout<<"请输入您需要操作对应阿拉伯数字(1~9)"<<endl;cin>>choice;switch(choice){case 1:Merge();FillStruct(a);break;case 2:adda(a);break;case 3:altera(a);break;case 4:dela(a);break;case 5:Select(a);break;case 6:FailList(a);break;case 7:Sort(a);break;case 8:Statistics(a);break;case 9:exit(0);break;}//switch}while(1);}四、运行示例及结果分析结果分析:实现功能主要有:1) 要求使用链表或数组等实现上述要求2) 实现对两个文件数据进行合并,生成新文件3.txt3) 可实现学生成绩信息的输入、修改、删除功能4) 抽取出三科成绩中有补考的学生并保存在一个新文件4.txt5) 对合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)6)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)7)统计输出各门课程的平均分,最高分、最低分8)统计各门课程优秀、良好、中等、及格、不及格的人数及百分比五、调试和运行程序过程中产生的问题及采取的措施在做的时候,我把统计功能改成了排序,即对学生成绩进行降序排序。
c语言学生成绩管理系统-数据结构课程设计报告-课程设计
c语言学生成绩管理系统-数据结构课程设计报告-课程设计c语言学生成绩管理系统-数据结构课程设计报告|数据结构课程设计要求是这样的1、用c语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
2、具体要求:建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,例如:(1):信息输入(INPUT)(2):总分统计(COUNT)(3):总分排序(SORT)(4):查询(QUERY)其中:(1):对4个学生的信息进行输入;(2):对每个学生的3门课程统计总分;(3):对4个学生的总分按降序排序并显示出来;(4):查询输入一个学号后,显示出该学生的有关信息;............偶先写了个...#i nclude<iostream.h>#i nclude<stdlib.h>struct student{int num;char name[20];int foxscore;int cscore;int englishscore;struct student *next;};void menu(){cout<<" welecome to my student grade management system"<<endl;cout<<" please follow everyone step in the menu"<<endl;cout<<" 1.input information"<<endl;cout<<" 2.total scores"<<endl;cout<<" 3.sort"<<endl;cout<<" 4.query"<<endl;cout<<" ***************************************************"< <endl;}struct student *creat(struct student *head) // 函数返回的是与节点相同类型的指针{struct student *p1,*p2;p1=p2=(struct student*) malloc(sizeof(struct student)); // 申请新节点cin>>p1->num>>p1->name>>p1->foxscore>>p1->cscore>>p1->englishscore; // 输入节点的值p1-> next = NULL; // 将新节点的指针置为空while(p1->num>0){if (head==NULL) head=p1; //空表,接入表头else p2->next=p1; // 非空表,接到表尾p2 = p1;p1=(struct student *)malloc(sizeof(struct student));//申请下一个新节点cin>>p1->num>>p1->name>>p1->foxscore>>p1->cscore>>p1->englishscore; //输入节点的值}return head; //返回链表的头指针}void count(struct student *head){struct student *temp;temp=head; //取得链表的头指针while(temp!==NULL){int m;m=temp->foxscore+temp->cscore+temp->englishscore;cout<<m<<endl;//输出链表节点的值temp=temp->next; //跟踪链表增长}}void sort(struct student *head){struct student *tp;tp=head;int a;//定义总分数组int i,j,k;while(temp!==NULL){a[i]=tp->foxscore+tp->cscore+tp->englishscore;tp=tp->next;i=i+1;}for(j=1;j<=3;j++)//冒泡法排序for(k=1;k<=4-j;k++)if(a[k]<a[k+1]){int t=a[k];a[k]=a[k+1];a[k+1]=t;}for(i=1;i<5;i++)cout<<a[i]<<endl;}void query(struct student *head){struct student *temper;temper=head;int number;cin>>number;for(int i=1;i<=4;i++){if(number==temper->num){cout<<" name is:"<<temper->name<<endl;cout<<" fox score is:"<<temper->foxscore<<endl;cout<<" c score is:"<<temper->cscore<<endl;cout<<" English score is:"<<temper->englishscore<<endl;cout<<" congratulation,syetem have found what you want to search"<<endl;}temper=temper->next;}}void main(){menu();cout<<" firstly,please input information:"<<endl;struct student *head;head=NULL; /* 建一个空表*/head=creat(head); /* 创建单链表*/cout<<" secondly,count the total score each student:"<<endl; count(head);cout<<" thirdly,sorting the total score:"<<endl;sort(head);cout<<" enter num that you can search each shtudent''s information"<<endl;query(head);cout<<" thanks you for use my student grade management system"<<endl;}编译时候都没有错....debug输入时候出现了错误....调试运行后发现原来是while循环出了问题啊修改后.........#i nclude<iostream.h>#i nclude<stdlib.h>struct student{int num;char name[20];int foxscore;int cscore;int englishscore;struct student *next;};void menu(){cout<<" welecome to my student grade management system"<<endl;cout<<" please follow everyone step in the menu"<<endl;cout<<" 1.input information"<<endl;cout<<" 2.total scores"<<endl;cout<<" 3.sort"<<endl;cout<<" 4.query"<<endl;cout<<" ***************************************************"< <endl;}struct student *creat(struct student *head) // 函数返回的是与节点相同类型的指针{struct student *p1,*p2;p1=p2=(struct student*) malloc(sizeof(struct student)); // 申请新节点cin>>p1->num>>p1->name>>p1->foxscore>>p1->cscore>>p1->englishscore; // 输入节点的值p1-> next = NULL; // 将新节点的指针置为空for(int i=1;i<=4;i++){if (head==NULL) head=p1; //空表,接入表头else p2->next=p1; // 非空表,接到表尾p2 = p1;p1=(struct student *)malloc(sizeof(struct student)); //申请下一个新节点if(i<=3){cin>>p1->num>>p1->name>>p1->foxscore>>p1->cscore>>p1->englishscore;}//输入节点的值}return head; //返回链表的头指针}void count(struct student *head){struct student *temp;temp=head; //取得链表的头指针for(int i=1;i<=4;i++){int m;m=temp->foxscore+temp->cscore+temp->englishscore;cout<<m<<endl;//输出链表节点的值temp=temp->next; //跟踪链表增长}}void sort(struct student *head){struct student *tp;tp=head;int a;//定义总分数组int i,j,k;a=tp->foxscore+tp->cscore+tp->englishscore;tp=tp->next;a=tp->foxscore+tp->cscore+tp->englishscore;tp=tp->next;a=tp->foxscore+tp->cscore+tp->englishscore;tp=tp->next;a=tp->foxscore+tp->cscore+tp->englishscore;for(j=1;j<=3;j++)//冒泡法排序for(k=1;k<=4-j;k++)if(a[k]<a[k+1]){int t=a[k];a[k]=a[k+1];a[k+1]=t;}for(i=1;i<5;i++)cout<<a[i]<<endl;}void query(struct student *head){struct student *temper;temper=head;int number;cin>>number;for(int i=1;i<=4;i++){if(number==temper->num){cout<<" name is:"<<temper->name<<endl;cout<<" fox score is:"<<temper->foxscore<<endl;cout<<" c score is:"<<temper->cscore<<endl;cout<<" English score is:"<<temper->englishscore<<endl;cout<<" congratulation,syetem have found what you want to search"<<endl;}temper=temper->next;}}void main(){menu();cout<<" firstly,please input information:"<<endl;struct student *head;head=NULL; /* 建一个空表*/head=creat(head); /* 创建单链表*/cout<<" secondly,count the total score each student:"<<endl; count(head);cout<<" thirdly,sorting the total score:"<<endl;sort(head);cout<<" enter num that you can search each shtudent''s information"<<endl;query(head);cout<<" thanks you for use my student grade management system"<<endl;}可以在vc6.0上面编译通过............在vc++.net同样可以...。
学生成绩管理系统数据结构-课程设计报告
课程设计课程名称________数据结构__________题目名称_____学生成绩管理系统_____学生学院__________________________专业班级___________________学号_____________学生姓名_________ ___________指导教师__ __ ___ ________________2011年 7月 2日目录1 系统问题与功能分析31.1 课程设计内容31.2 系统功能需求分析31.3 数据结构设计32 系统设计42.1 总体设计42.2 详细设计52.2.1 界面设计52.2.2 各功能模块地设计53 系统编码设计73.1 预处理命令及结构体类型地声明73.2调用用户验证地函数83.3 调用menu函数83.4调用input函数103.5调用display函数113.6调用排序函数(Sort函数,heapsort函数和sift函数)123.6.1 调用Sort函数123.6.2调用sift函数(调整堆)133.6.3 调用heapsort函数143.7调用add_a_record函数153.8调用search_a_record函数173.9调用tongji函数194.0调用open_the_text函数224.1调用WritetoText函数234.2 调用end函数234.3 Main函数244系统运行285 简单总结386 附录391 系统问题与功能分析1.1 课程设计内容学生成绩管理系统注:此系统是在visual C++6.0环境下设计1.2 系统功能需求分析本系统应实现以下需求:功能需求:1、提供身份验证,和使用系统地权限设置、判定.2、(教师用户)能实现本班同学各学期各科成绩地录入、编辑,数据必须保存在文件中,以便反复使用.3、(学生用户或游客)提供对学号或姓名,各学期、各学科成绩地查询.4、(学生和教师用户)能按各学期、各学科分数排序输出(每一科都要能排序输出).5、(教师用户)能统计各科成绩分数段地分布(60以下、60~70、70~80、80~90、90~100)情况,并输出.性能需求:1、操作界面美观、友好,有必要地容错处理(如:能判定学号位数和只能由0~9数字字符组成、能判定合理地成绩0~100等);2、查询应根据查询条件合理选择先进地查询方法(其中必须保证至少有一种查找采用了散列查找);3、排序算法要求采用堆排序实现;4、分数段统计结果要求保存在单独地文件中;1.3 数据结构设计本系统需要处理地数据主要有:姓名、成绩等,相关数据地类型及说明如下:2 系统设计2.1 总体设计按系统分析地功能要求将系统划分为以下几个主要功能模块与结构:教师用户:(1)本模块功能是输入学生地各类信息(2)本模块地功能是显示学生地各类信息和规定输出格式(3)本模块地功能是实现学生信息地添加与修改.(4)本模块地功能是按姓名、学号、学科查询学生成绩情况,名单中包含学期、学号、姓名、课程名及成绩.(5)本模块地功能是统计学生成绩分段情况,统计结果可输出到文件.(6)本模块地功能是对学生信息按不同学科分数从高到低进行排序.(7)本模块地功能是打开、保存、关闭数据文件.学生用户:(1)本模块地功能是按姓名、学号、学科查询学生成绩情况,名单中包含学期、学号、姓名、课程名及成绩.(2)本模块地功能是对学生信息按不同学科分数从高到低进行排序.(3)本模块地功能是打开数据文件.游客用户:(1)本模块地功能是按姓名、学号、学科查询学生成绩情况,名单中包含学期、学号、姓名、课程名及成绩.(2)本模块地功能是打开数据文件.2.2 详细设计2.2.1 界面设计1、用户验证界面设计设计风格简洁明了,显示明白.2、菜单设计主菜单设计:主要运用一些简单符号,数字和文字清晰地表达出系统地主要功能,让使用者可以一目了然地了解系统功能,既美观又实用.子菜单设计:主要运用一些简单符号构成,将主菜单地功能细分化,让功能实现更加清晰简单,让使用者更好地使用系统.2、输入界面地设计以简单地风格设计输入界面,运用一些星星图形和直线,构成美观地输入界面,如3、信息显示界面地设计为把信息清晰地显示出来,采用对齐方式,运用直线把信息排列得整整齐齐.2.2.2 各功能模块地设计根据划分地功能模块,定义以下主要函数实现各功能:1、主函数main()主函数主要作用是控制调用其它函数协调工作,主要用switch语句来实现其功能.其流程图如下:2、memu函数本函数地功能是出现一个菜单界面,主要通过printf()函数实现菜单地设计,通过循环语句实现读入选择地功能.3、input函数本函数地功能是输入学生地各类信息,主要通过while,for地循环语句和repeat函数实现,主要运用strcmp函数实现对输入重复学号和重复姓名地错误提示,以及对输入不合理成绩地错误提示.4、display函数本函数地功能是显示学生地各类信息和规定输出格式,主要通过for地循环语句和printf()函数实现.5、sort函数本函数地功能是对学生地成绩进行排序,主要通过for地循环语句和指针实现,通过堆排序按各学科进行排序.6、add-a-record函数本函数地功能是添加一个学生地信息,主要通过while,for地循环语句和repeat函数实现,主要运用strcmp函数实现对添加重复学号和重复姓名地错误提示,以及对输入不合理成绩地错误提示.7、Modify函数本函数地功能是修改学生信息,主要通过while,for地循环语句和repeat函数实现,主要运用strcmp函数实现对输入重复学号和重复姓名地错误提示,以及对输入不合理成绩地错误提示.8、统计函数本函数地功能是统计学生个分数段地信息,信息中包含学期、学号、姓名、课程名及成绩,主要通过for及if地循环语句实现.9、search-a-record函数本函数地功能是查找需要了解地学生地信息,主要通过循环语句实现,包括for语句,while语句和if语句.10、open-the-text函数本函数地功能是打开需要导入地文件,主要通过“rb”,fopen,fscanf,fprintf和fclose 函数实现打开文件地功能11、write-to-text函数本函数地功能是保存信息输出到文件,主要通过“w”,fopen,fscanf,fprintf和fclose 函数实现保存文件地功能3 系统编码设计3.1 预处理命令及结构体类型地声明#include<stdio.h> /*引用库函数*/#include<string.h>#include <windows.h>#define N 1000struct user{int user_id。
学生成绩管理系统数据结构课程设计
学生成绩管理系统数据结构课程设计学生成绩管理系统是一个用于管理学生学习成绩的软件系统。
它通常用于学校、教育机构或教师们来跟踪和记录学生的学习进展,并生成报告和分析数据。
在数据结构课程设计中,学生成绩管理系统需要设计合适的数据结构来存储和操作学生成绩数据。
在设计学生成绩管理系统时,可以使用以下数据结构:1. 数组:可以使用数组来存储学生成绩数据。
每个学生的成绩可以用一个数组元素表示,可以将学生按照学号或者其他标识符按顺序存储在数组中。
这样可以方便地通过索引来访问和修改学生成绩。
2. 链表:链表是另一种常用的数据结构,可以用于存储学生成绩数据。
每个学生的成绩可以用一个节点表示,节点可以包含学生的信息和成绩,同时包含指向下一个节点的指针。
这样可以方便地插入、删除和查找学生成绩。
3. 树:树可以用于组织学生成绩数据。
可以使用二叉搜索树或平衡二叉树来存储学生成绩,其中学生的学号或者姓名可以作为关键字。
这样可以方便地进行查找、插入和删除操作,并可支持对学生成绩进行排序。
以上是一些常用的数据结构,用于存储学生成绩管理系统的数据。
在具体的设计中,还可以根据实际需求选择其他合适的数据结构。
除了数据结构,学生成绩管理系统还可能包括其他功能,例如:1. 添加学生:可以通过输入学生的基本信息和成绩,将学生添加到系统中。
2. 删除学生:可以通过学生的学号或其他标识符,从系统中删除某个学生的信息和成绩。
3. 修改成绩:可以根据学生的学号或其他标识符,修改学生的成绩信息。
4. 查询成绩:可以根据学号、姓名或其他条件,查询学生的成绩信息。
5. 成绩统计和分析:可以对学生的成绩进行统计和分析,生成报告和图表,帮助教师或学校了解学生的学习情况。
以上只是学生成绩管理系统可能包含的一些基本功能,具体的设计和实现还需要根据实际需求和要求进行进一步的扩展和深入分析。
通过合适的数据结构和功能设计,可以实现一个高效、易用和功能完善的学生成绩管理系统。
学生成绩管理系统课程设计报告
学生成绩管理系统课程设计报告一、课程设计题目基本要求本次课程设计的题目是学生成绩管理系统,要求实现以下功能: 1. 学生成绩录入:学生成绩管理系统应允许用户输入学生的学号、姓名、三门课的成绩以及平均成绩。
2. 学生成绩查询:学生成绩管理系统应允许用户按学号、姓名、以及单科成绩查询学生的成绩记录。
3. 学生成绩统计:学生成绩管理系统应允许用户按学号、姓名、以及平均成绩进行统计,并输出统计结果。
4. 学生成绩排序:学生成绩管理系统应允许用户按三科平均成绩、单科成绩、学号进行排序,并输出排序结果。
5. 退出系统:学生成绩管理系统应提供退出系统的选项,用户选择退出后,应退出系统。
二、设计要求1. 使用结构体数组实现学生成绩管理系统的数据结构。
2. 使用函数、指针、算法、流程结构及文件等综合应用实现学生成绩管理系统的各项功能。
3. 实现学生成绩管理系统的界面设计,包括菜单、表格、单选框、复选框、下拉框等控件的使用。
4. 使用数据库技术实现学生成绩管理系统的数据存储功能。
5. 实现学生成绩管理系统的测试流程,包括测试用例的设计和测试。
三、数据结构设计描述1. 数据字典数据字典是学生成绩管理系统的数据结构描述,包括以下数据流条目和数据存储条目:数据流条目:- 全部记录:最新更新后所有关于学生成绩的记录。
- 学生成绩记录:存放学生所有可供查询的信息。
数据存储条目:- 学生成绩记录:存放学生所有可供查询的信息,以索引文件的形式组织。
2. 数据结构学生成绩管理系统的数据结构包括以下结构体:- struct student:定义学生结构体,包括学号、姓名、三门课的成绩以及平均成绩。
- struct record:定义成绩记录结构体,包括学号、姓名、三门课的成绩以及平均成绩。
- struct database:定义数据库结构体,包括学生成绩记录数组,以及查询、统计、排序等函数。
四、系统功能描述1. 菜单设计学生成绩管理系统应提供以下菜单:- 成绩录入- 成绩查询- 成绩统计- 成绩排序- 退出系统2. 功能实现学生成绩管理系统的各项功能应分别实现如下:- 成绩录入:实现学生成绩的录入功能。
数据结构课程设计报告-学生成绩管理系统设计
广东某某学院《数据结构课程设计》题目:学生成绩管理系统设计学号:姓名:年级:学院:专业:指导教师:目录一、问题描述与需求分析 (3)1.1问题描述 (3)1.2需求分析 (3)二、数据结构的设计 (3)2.1数据结构的选择 (3)2.2单链表定义和创建 (3)三、软件模块结构图及程序流程图 (4)3.1大体模块关系图 (4)3.2程序流程图 (5)四、运行界面及用户使用手册 (10)4.1运行界面 (10)4.2测试数据 (15)4.3用户使用手册 (15)五、心得体会 (16)六、附录(源码) (16)一、问题描述与需求分析1.1问题描述设计一个简单的学生成绩管理系统。
完成对学生成绩信息的建立、查找、插入、修改、删除等功能。
1.2需求分析系统设计要求:1、能录入任意条数据,以方便教室录入多条学生成绩,提高教室工作效率,输入的内容包括学号,姓名,数学,英语,c语言成绩。
2、能比较迅速的查询挂科学生信息,合格学生信息,方便老师统计教学结果,且可以通过名字查询学生的信息,并输出该学生是否挂科的信息。
3、能快速准确删除不需要的学生信息,在删除前给出现有数据,可让教师直观了解要删除的数据的学号,删除后,输出删除结果并询问教师是否保存,以免误删。
4、能准确的修改学生的信息,在修改前输出现有数据,让教师直观了解需要修改的数据的学号,修改后,输出修改信息并询问是否保存,以免误删。
5、能够保存输入的数据,下次进入系统时不需要重新输入数据。
6、能够快速准确插入学生信息,并在插入前后输出表格对照。
7、学生也可以查询自己的成绩,但不拥有修改数据的权限。
二、数据结构的设计2.1数据结构的选择课程设计题目要求完成对学生成绩信息的建立、查找、插入、修改、删除等功能,自然而然的,我想到可以用单链表的结构,通过编写相应的功能函数来实现建立,删除,修改,输出,查找,保存节点数据域的内容来满足课程设计题目的要求。
2.2单链表定义和创建先定义单链表节点的数据域,包括学号、姓名、数学、英语、c语言成绩等信息和链表结点,然后再创建表头以及新建链表数据。
数据结构课设报告学生成绩管理系统-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)
学院:职业技术学院专业:计算机科学与技术姓名:学号: 1 班级:计科061班实习性质:课程设计实习地点:蔡家关校区国合楼二楼计算机房指导教师:曾劼成绩:学生成绩管理系统设计一、需求分析随着社会的发展,学校的规模不断的扩大,日常教学活动中提取相关信息,以反映教学情况。
传统的手工操作方式,易发生数据丢失,统计错误,劳动强度高,且速度慢。
使用计算机可以高速,快捷地完成以上工作。
在计算机联网后,数据在网上传递,可以实现数据共享,避免重复劳动,规范教学管理行为,从而提高了管理效率和水平。
学生成绩管理系统以计算机为工具,通过对学生成绩管理所需的信息管理,把管理人员和老师从繁琐的数据计算处理中解脱出来,使其有更多的精力从事教务管理政策的研究实施,教学计划的制定执行和教学质量的监督检查,从而全面提高教学质量。
信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。
计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。
为了适应现代社会人们高度强烈的时间观念,学生成绩管理系统软件为教学办公室带来了极大的方便。
该软件是以C语言为实现语言,其功能在系统内部有源代码直接完成。
通过操作目录,管理者和老师可以了解本软件的基本工作原理。
管理者和老师只需输入一些简单的汉字、数字,即可达到自己管理学生成绩的目标。
在学生成绩管理系统中,需要从大量的日常教学活动中提取相关信息,以反映教学情况。
传统的手工操作方式,易发生数据丢失,统计错误,劳动强度高,且速度慢。
使用计算机可以高速,快捷地完成以上工作。
在计算机联网后,数据在网上传递,可以实现数据共享,避免重复劳动,规范教学管理行为,从而提高了管理效率和水平。
通过本学生成绩管理系统,可以从一下几个方面减少老师的工作负担和提高学校的管理效率,实现学校的信息化和自动化。
1.应用学生成绩管理系统,把老师从繁杂的学生成绩了登记分数、统计分数、学生排名等等的工作职工解脱出来,把更多的时间和精力用来提高教学质量和学生的辅导工作上,提高学生的学生效率和成绩。
学生成绩管理系统数据结构课程设计报告
学生成绩管理系统数据结构课程设计报告一、背景学生成绩管理系统是学校教务处常用的软件之一,旨在方便学校管理学生成绩信息。
数据结构是计算机科学中的基础课程,对于学生成绩管理系统的设计和实现有着重要意义。
本课程设计报告将针对学生成绩管理系统的数据结构设计展开讨论。
二、需求分析学生成绩管理系统需要存储学生的基本信息和成绩信息,可以进行成绩录入、查询、统计等操作。
系统需要能够高效地处理大量学生信息,并提供快速、准确的查询功能。
三、数据结构设计1. 学生信息存储为了高效地存储学生信息,可以使用链表数据结构。
每个学生信息包括学号、姓名、性别、班级等字段,可以设计一个学生结构体来存储这些信息。
链表节点可以包含一个学生结构体和指向下一个节点的指针,从而构成一个链表来存储所有学生信息。
typedef struct Student {int studentID;char name[50];char gender;char className[50];float score;struct Student* next;} Student;Student* head = NULL;2. 成绩信息存储成绩信息可以存储在一个数组中,数组的每个元素对应一个学生的成绩,可以通过学号索引到对应的成绩信息。
为了方便查询和统计,可以对成绩数组进行排序,例如按学号或成绩值排序。
float scores[1000];四、功能实现1. 成绩录入在管理系统中,可以提供成绩录入功能,输入学生的学号和成绩信息后,将成绩信息存储到成绩数组中。
2. 查询功能查询功能可以根据学生的学号或姓名查询学生的基本信息和成绩信息,可以使用链表和数组的结合来实现高效的查询功能。
3. 成绩统计系统可以根据输入的条件,如班级、科目等进行成绩统计,计算平均成绩、最高分、最低分等统计信息。
五、总结本设计报告对学生成绩管理系统的数据结构设计进行了详细讨论,包括学生信息和成绩信息的存储方式、功能实现等方面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生成绩管理系统数据结构课程设计一、课程设计的内容与目的利用所学数据结构理论知识完成“学生成绩管理系统”的设计。
通过课程设计提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。
具体包括:了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
二、课程设计的要求与数据1.系统功能需求分析:1、输入功能:可以输入40位同学信息2、增加功能,能增加学生的信息3、浏览功能:完成对全部学生记录浏览4、查询功能:采用散列查找完成按学号查找学生记录5、排序功能:采用直接选择排序,将学生平均成绩从低到高排序输出6、删除功能:可以删除学生信息7、修改功能:可以对学生信息的各项信息进行修改8、插入功能:完成数据的插入9、统计功能:统计出各分数段学生人数(60分以下,60~70,71~80,...)2.存储结构设计分析:3.学生的信息:学生的信息采用结构体类型定义,每个元素表示一个学生的信息,包括学号,姓名及数据结构平均成绩4个数据项:(1) struct student{char num[11];char name[20];int score[8];float ave;}stu[N];(2)散列表的结点类型定义:typedef struct node {unsigned long int key;struct node * link;}HNode;3.源程序如下:#include<string.h>#include<stdio.h>#include<malloc.h>/*控制学生记录的容量*/#define N 40#define PR printf("\n\r%s %s %s %s %s %s %s %s %s %s %s",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i ].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],stu[i].score[7],stu [i].score[8],stu[i].ave)struct student{char num[11];char name[20];int score[8];float ave;}stu[N];typedef struct node {unsigned long int key;struct node * link;}HNode;typedef struct{int key; /*排序码*/float data;/*其他数据项*/}RecNode;/*全新保存函数*/save(int n) /*保存函数,保存n个记录*/{FILE *fp;int i;if((fp=fopen("sc.txt","wb"))==NULL) /*以输出打开方式,在此前的记录被覆盖*/ {printf("\n不能打开文件\n");getch();return NULL;}for(i=0;i<n;i++)if(stu[i].ave!=0) /*stu[i].ave=0表此记录已删除*/if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("文件输入错误\n");fclose(fp);}/*加载记录或可以计算记录个数的函数*/load() /*加载记录或可以计算记录个数的函数*/{FILE *fp;int i;if((fp=fopen("sc.txt","rb"))==NULL) /*以输出打开方式,在此前的记录被覆盖*/ {printf("\n不能打开文件\n");getch();return NULL;}for(i=0;!feof(fp);i++)fread(&stu[i],sizeof(struct student),1,fp);fclose(fp);return(i-1); /*返回记录个数*/}/*一个任务结束时的选择浏览还是返回的函数*/void printf_back() /*一个任务结束时的选择浏览还是返回*/{int k,w;printf("\n\n\t^-^★成功★ ^-^\n\n");printf("请选择:\n\n\t1).现在浏览全部\t2).返回: [ ]\b\b");scanf("%d",&w);if(w==1) browse();else teacher();}/*显示数据结构项目函数*/void printf_face() /*显示数据结构项目*/{printf("\n\t学号姓名\t英语数学 C语言管理学信检体育近代史线数平均分\t\n");}average(int i) /*对第i个记录的分数求平均值*/{int j,sum;for(sum=0,j=0;j<8;j++)sum+=stu[i].score[j];stu[i].ave=sum/8.0;}/*学号输入函数*/no_input(int i,int n) /*i表示第i个的学生信息,n表示比较到第n个学生*/{int j,k,w1;do{w1=0;printf("学号:");scanf("%s",stu[i].num);for(j=0;stu[i].num[j]!='\0';j++) /*学号输入函数,作了严格规定*/ if(stu[i].num[j]<'0'||stu[i].num[j]>'9') /*判断学号是否为数字*/ {puts("Input error! Only be made up of (0-9).Please reinput!\n");w1=1;break;}if(w1!=1)for(k=0;k<n;k++) /*比较到第n个学生*//*排除第i个学生记录即你要修改的*/if(k!=i&&strcmp(stu[k].num,stu[i].num)==0) /*判断学号是否有雷同*/{puts("该记录已存在. 请重新输入!\n");w1=1;break;}}while(w1==1);}/*对分数输入*/score_input(int i){int j;printf(" 1.英语 2.数学 3.C语言 4.管理学 5.信检 6.体育 7.近代史 8.线性代数\n");for(j=0;j<8;j++){printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);}}/*输入一个记录函数*/input(int i) /*输入一个记录函数*/{no_input(i,i); /*调用学号输入函数*/printf("姓名:");scanf("%s",stu[i].name);score_input(i); /*调用分数输入函数*/average(i); /*调用求平均值函数*/}/*显示一个记录的函数*/printf_one(int i) /*显示一个记录的函数*/{int j;printf("%11s %-10s",stu[i].num,stu[i].name);for(j=0;j<8;j++)printf("%-6d",stu[i].score[j]);printf("%-7.2f\n",stu[i].ave);}void puts___() /*显出---函数*/{puts("\n--------------------------------------------------------------------" );}/*修改记录函数*/modify_data(int i,int n) /*修改数据函数,修改第i个记录*/{int c,w1;do/*输入选择作个判断*/{puts("\nmodify by =>\n\n 1).学号 2.姓名 3).英语 4).数学\n 5).C语言 6).管理学 7).信检 8).体育 9).近代史\n 10).线性代数 11).all score 12).all data 13).cancel and back");printf("请选择: [ ]\b\b");scanf("%d",&c);if(c>13||c<1){puts("\n选择错误! 重新选择!"); /*判断选择是否错误,若是则重新选择性*/getchar(); /*当输入是字符时可以防止死循环*/}}while(c>13||c<1);do{switch(c) /*选择要修改的项目*/{case 1:no_input(i,n);break; /*调用学号输入函数*/case 2:printf("姓名:");scanf("%s",stu[i].name);break;case 3:printf("英语:");scanf("%d",&stu[i].score[0]);break;case 4:printf("数学:");scanf("%d",&stu[i].score[1]);break;case 5:printf("C语言:");scanf("%d",&stu[i].score[2]);break;case 6:printf("管理学:");scanf("%d",&stu[i].score[3]);break;case 7:printf(":信检");scanf("%d",&stu[i].score[4]);break;case 8:printf("体育:");scanf("%d",&stu[i].score[5]);break;case 9:printf("近代史:");scanf("%d",&stu[i].score[6]);break;case 10:printf("线性代数:");scanf("%d",&stu[i].score[7]);break;case 11:score_input(i);break; /*调用分数输入函数*/case 12:input(i);break; /*调用输入整条学生记录*/case 13:teacher(); /*直接返回教师介面*/}if(c>2&&c<10)average(i); /*调用求平均值函数*/puts("\nNow:\n");printf_face(); /*调用显示数据结构项目函数*/printf_one(i); /*修改后的记录让用户确认*/printf("\n是否确定?\n\n\t1).确定 2).重新修改 3).不保存返回 [ ]\b\b"); /*是否确定*/scanf("%d",&w1); /*选择2则表示这次修改错误要重新修改*/}while(w1==2);return(w1); /*返回控制值*/}/****************输入模块****************/enter() /*输入模块*/{int i,n;printf("输入学生总数(0-%d)?:",N);scanf("%d",&n); /*要输入的记录个数*/printf("\n现在输入数据\n\n");for(i=0;i<n;i++){printf("\nInput %dth student record.\n",i+1);input(i); /*调用输入函数*/}if(i!=0) save(n); /*调用保存函数*/printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/}/****************追加模块****************/add() /*追加模块*/{int i,n,m,k;FILE *fp;n=load();printf("增加的学生总数(0-%d)?:",N-n);scanf("%d",&m); /*输入要追加的记录个数*/k=m+n;for(i=n;i<k;i++){printf("\nInput %dth student record.\n",i-n+1);input(i); /*调用输入函数*/}if((fp=fopen("sc.txt","ab"))==NULL) /*以ab方式打开文件,追加保存*/{printf("不能打开文件\n");return;}for(i=n;i<k;i++) /*输入出到文件*/if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("文件输入错误\n");fclose(fp);printf_back(); /*一个任务结束时的选择浏览还是返回*/}/****************修改模块****************/modify() /*修改模块*/{struct student s;FILE *fp;int i,n,k,w0=1,w1,w2=0;n=load();do{system("cls");k=-1;/*给用户看全部记录以便确认要修改的记录*/puts___(); /*显示-----*/printf_face(); /*调用显示数据结构项目函数*/for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) /*目的是分屏显示*/{printf("\n\nRemember NO.which needed modify. pass any key tocontiune . . .");getch();puts("\n\n");}printf_one(i); /*调用显示一个记录的函数*/ }puts___();do{printf("\n\n输入修改学号! NO.:");scanf("%s",s.num); /*输入要修改的数据的学号*/ for(i=0;i<n;i++) /*查找要修改的数据*/if(strcmp(s.num,stu[i].num)==0){k=i; /*找到要修改的记录*/s=stu[i]; /*把stu[i](即当次修改的学生记录)备份给s,以便用户反悔时恢复名誉*/}if(k==-1) printf("\n\n不存在! 重新输入");}while(k==-1); /*当K=-1表示没有找到*/printf_face(); /*调用显示数据结构项目函数*/printf_one(k); /*调用显示一个记录的函数*/w1=modify_data(k,n); /*修改学生记录并且返回保存控制值w1,w1=1则表示用户已确认修改*/if(w1==1) /*W1等于1时则表示用户确定这次修改*/{printf("\n ^-^ ★成功★ ^-^.\n\n是否修改其他?\n\n\t1).是 2).保存返回\t[ ]\b\b");scanf("%d",&w0);w2=1; /*来控制保存,使w2=1是标记已有过修改*/}else{w0=0;if(w2==1)stu[k]=s;}/*走到这里是由于用户没有确认这次修改(在调用修改函数w1=modify_data(k,n);时没有确认). 使W0=0,为了让终止循环,stu[k]=s,则把备份的s恢复给stu[k](即当次修改的),这样的好处是确保在此之前修改过的成功保存,而本次(用户没有确认的)不修改*/if(w0!=1&&w2==1) /*W0不等于1则表示正常返回,w2=1表示在此之前有过修改,这时就保存用户已确认修改的并返回*/save(n); /*w2不等于1表示在此次之前没有修改过(即:第一次),而又反悔这次修改,则不保存返回*/}while(w0==1);teacher();}/****************删除模块****************/del() /*删除模块*/{struct student s;FILE *fp;int i,j,n,k,c,w0=1;n=load();do{system("cls");k=-1;/*给用户看全部记录以便确认要删除的记录*/puts___();printf_face(); /*调用显示数据结构项目函数*/for(i=0;i<n;i++)if(stu[i].ave!=0){if((i!=0)&&(i%10==0)) /*目的是分屏显示,每10个一屏*/{printf("\n\nRemember NO. which needed del. pass any key tocontiune . . .");getch();puts("\n\n");}printf_one(i); /*调用显示一个记录的函数*/ }puts___();do{printf("\n\n输入删除学号! NO.:");scanf("%s",s.num); /*输入要修改的数据的学号*/ for(i=0;i<n;i++) /*查找要修改的数据*/if(strcmp(s.num,stu[i].num)==0){k=i; /*找到要修改的记录的下标赋给K*/s=stu[i];}if(k==-1) printf("\n\n不存在! 重新输入"); /*K=-1,表示没有找到相同之的*/ }while(k==-1);puts("\n");printf_face(); /*调用显示数据结构项目函数*/printf_one(k); /*调用显示一个记录的函数*/printf("\n是否确定?\n\t1).是 2).否且删除其他 3).保存全部返回 [ ]\b\b"); scanf("%d",&c);if(c==1){stu[k].ave=0; /*stu[k].ave=0用来标识这个记录是要删除的.保存时则不保存stu[k].ave=0的数据*/printf("\n\n ^-^ ★成功★ ^-^.\n\n是否重输?\n\t1).是 2).返回菜单\t[ ]\b\b"); /*问是否继续*/scanf("%d",&w0);}if(c==3) w0=0; /*w0=0不删除直接返回*/if(w0!=1&&c!=3) /*只有当确认删除后返回才保存,不删除直接返回则不保存,且不保存在此之前删除过的记录*/save(n);}while(w0==1);teacher(); /*返回教师介面*/}/****************浏览(全部)模块****************/browse() /*浏览(全部)模块*/{int i,j,n;n=load(); /*加载记录*/system("cls");puts___();printf_face(); /*调用显示数据结构项目函数*/for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) /*目的是分屏显示*/{printf("\n\nPass any key to contiune . . .");getch();puts("\n\n");}printf_one(i); /*调用显示一个记录的函数*/ }puts___();printf("\tThere are %d record.\n",n);printf("\nPass any key to back . . .");getch(); /*按任意健*/teacher();}/****************查找模块****************/int h(char k){return(k%5);}int linkinsert(HNode *t[],char k){/*向用拉链法处理冲突的散列表t中插入关键字为k的记录*/int i;HNode *p;i=h(k);if(t[i]==NULL){p=(HNode*)malloc(sizeof(HNode));p->key=k;p->link=NULL;t[i]=p;printf("\n inserted %lu\n ",k);return(1);}else{p=t[i];while(p!=NULL)if(p->key==k){printf("\n retrieval %lu\n ",k);return(0);}else if(p->link!=NULL) p=p->link;else{p->link=(HNode*)malloc(sizeof(HNode));p=p->link;p->key=k;p->link=NULL;printf("\n inserted %lu\n ",k);return(1);getch();}}}HNode *linksearch(HNode *t[],char k){/*在用拉链法处理冲突的散列表t中查找关键字为给定值k的记录*/ HNode *p;int i;i=h(k);if(t[i]==NULL)return(NULL);p=t[i];while(p!=NULL)if(p->key==k){printf("%lu\n",p->key);return(p);}else p=p->link;return(NULL);}search() /*查找模块*/{int i,n,k,w1=1,w2,w3,w4;struct student s;n=load();do{do{k=-1;printf("\n\n输入查找学号! NO.:");scanf("%s",s.num); /*输入要修改的数据的学号*/ printf_face(); /*调用显示数据结构项目函数*/ for(i=0;i<n;i++) /*查找要修改的数据*/ if(strcmp(s.num,stu[i].num)==0){k=i; /*找到要修改的记录*/printf_one(k);break; /*调用显示一个记录的函数*/ }if(k==-1){printf("\n\n不存在! 请重新输入");printf("\n\n是否确定?\n\t1).是 2).否且返回 [ ]\b\b");scanf("%d",&w1);}}while(k==-1&&w1==1); /*如果w1不等于1则直接返回*/w4=0;w3=0;if(k!=-1) /*k不等于-1表示找到,如果找到则选择操作*/{printf("\n\n请选择:\n\t1).查找另一个数据 2).修改 3).删除 4).返回目录 [ ]\b\b");scanf("%d",&w2);switch(w2){case 2:w3=modify_data(k,n);break; /*调用修改数据函数*/case 3:{printf("\n是否确定?\n\t1).是 2).否且返回 [ ]\b\b");scanf("%d",&w4);if(w4==1)stu[k].ave=0; /*表示删除*/break;}}if(w3==1||w4==1){save(n);printf("\n\n ^-^ ★成功★ ^-^.");printf("\n\n请选择:\n\t1).查找另一个数据 2).返回 [ ]\b\b"); scanf("%d",&w2);}}}while(w2==1);teacher();}/****************插入模块****************/insert() /*插入模块*/{int i,j,n,c;struct student s;n=load();puts("\n输入一个数据.\n");do{input(n); /*输入到第n个记录,即插入到最后*/printf_face();printf_one(n);printf("\n\n是否确定?\n\n\t1).是\t2).取消重输\t3).不保存返回 [ ]\b\b"); scanf("%d",&c);if(c==1){for(j=0;j<n;j++) /*用起泡法排序*/for(i=n;i>j;i--)if(stu[i].ave>stu[i-1].ave){s=stu[i-1];stu[i-1]=stu[i];stu[i]=s;}save(n+1);printf_back();}else if(c!=2) teacher();}while(c==2);}/****************排序模块(按平均成绩)****************/void sift(RecNode r[],int t,int w) /*用筛选法调整堆*/{int i,j;RecNode x;i=t;x=r[i];j=2*i+1;while(j<=w){if((j<w)&&(r[j].key>r[j+1].key))j++;if(x.key>r[j].key){r[i]=r[j];i=j;j=2*j+1;}else break;}r[i]=x;}void heapsort(RecNode r[],int n) /*堆排序*/{int i;RecNode x;for(i=n/2-1;i>=0;i--)sift(r,i,n-1);for(i=n-1;i>0;i--){x=r[0];r[0]=r[i];r[i]=x;sift(r,0,i-1);}}/****************排序模块(按平均成绩)****************/order() /*排序模块(按平均成绩)*/{int i,j,k,n;struct student s;n=load();for(i=0;i<n-1;i++) /*选择法排序*/{k=i;for(j=i+1;j<n;j++)if(stu[j].ave<stu[k].ave) k=j;s=stu[i];stu[i]=stu[k];stu[k]=s;}save(n);puts("\n\n");printf_back();}/*****************统计模块*******************/void fenduantongji(){int k,u,n,i,j,w1=1,w2;int a,b,c,d,e;a=0;b=0;c=0;d=0;e=0;printf(" 1.英语 2.数学 3.C语言 4.管理学 5.信检 6.体育 7.近代史 8.线性代数 9.平均分\n");printf("请输入要统计的科目:");scanf("%d",&u);if(u<=8){n=u;for(i=0;i<N;i++){k=stu[i].score[n-1];{if(k>=90)a=a+1;else if(k<90&&k>=80)b=b+1;else if(k<80&&k>=70)c=c+1;else if(k<70&&k>=60)d=d+1;else if(k<60)e=e+1;}}}else{n=u;for(i=0;i<N;i++){k=stu[i].ave;{if(k>=90)a=a+1;else if(k<90&&k>=80)b=b+1;else if(k<80&&k>=70)c=c+1;else if(k<70&&k>=60)d=d+1;else if(k<60)e=e+1;}}}printf("学生成绩在 90~100 间有:\n %d\n",a);printf("学生成绩在 80~89 间有 :\n %d\n",b);printf("学生成绩在 70~79 间有 :\n %d\n",c);printf("学生成绩在 60~69 间有 :\n %d\n",d);printf("低于60的有:\n %d\n",e);printf("\n是否继续?\n\n\t1).是 2).否 [ ]\b\b");scanf("%d",&w1);if(w1==1) fenduantongji(w1);elseteacher();}/****************教师界面****************/teacher() /*教师界面*/{int n,w1;do{system("cls"); /*清屏*/puts("\t\t*********************MENU*********************\n\n"); puts("\t\t\t\t1.输入新数据");puts("\t\t\t\t2.添加数据");puts("\t\t\t\t3.修改数据");puts("\t\t\t\t4.删除数据");puts("\t\t\t\t5.浏览全部");puts("\t\t\t\t6.学号查询");puts("\t\t\t\t7.插入数据");puts("\t\t\t\t8.按平均分排序");puts("\t\t\t\t9.分段统计");puts("\t\t\t\t10.退出");puts("\t\t\t\t11.返回主界面");puts("\n\n\t\t**********************************************\n"); printf("请选择序号:(1-11): [ ]\b\b");scanf("%d",&n);if(n<1||n>11) /*对选择的数字作判断*/ {w1=1;getchar();}else w1=0;}while(w1==1);/*选择功能*/switch(n){case 1:enter();break; /*输入模块*/case 2:add();break; /*追加模块*/case 3:modify();break; /*修改模块*/case 4:del();break; /*删除模块*/case 5:browse();break; /*浏览模块*/case 6:search();break; /*查找模块*/case 7:insert();break; /*插入模块*/case 8:order();break; /*排序模块*/case 9:fenduantongji();break;/*统计模块*/case 10:exit(0); /*退出*/case 11:menu(); /*返回主界面*/getch();}}/****************密码函数****************/distin() /*密码函数*/{int f;char mima[]={"gdut09"};char mi[6];printf("输入密码:");scanf("%s",mi);if(strcmp(mima,mi)==0){teacher();}else{printf("密码错误!\n");printf("\n\n请选择:\n\t1).目录 2).退出 [ ]\b\b");scanf("%d",&f);switch(f){case 1:menu();break;case 2:exit(0);break;}}}/****************学生界面****************/st() /*学生界面*/{int i,n,k,w1=1,w2,w3,w4;struct student s;n=load();do{system("cls");do{k=-1;printf("\n\n请输入学号 NO.:");scanf("%s",s.num);printf_face();for(i=0;i<n;i++)if(strcmp(s.num,stu[i].num)==0){k=i;printf_one(k);break;}if(k==-1){printf("\n\n不存在! 重输入");printf("\n\n是否重新输入?\n\t1).是 [ ]\b\b");scanf("%d",&w1);}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n请选择:\n\t1).返回目录 [ ]\b\b");scanf("%d",&w2);switch(w2){case 1:menu();break;case 3:{printf("\n是否确定?\n\t1).否且返回 [ ]\b\b"); scanf("%d",&w4);if(w4==1)stu[k].ave=0;break;}}if(w3==1||w4==1){save(n);printf("\n\n ^-^ ★成功★ ^-^.");printf("\n\n请选择:\n\t1).返回 [ ]\b\b");scanf("%d",&w2);}}}while(w2==1);menu();}/****************主界面****************/menu() /*主界面*/{int c;{system("cls"); /*清屏*/printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ "); printf("\n ●●■■■■■▲▲■■■■■ "); printf("\n 〓〓■〓〓■■"); printf("\n ■■■■■■■ "); printf("\n ■■■■■■■■■■■■■ "); printf("\n ■■■■■■■ "); printf("\n ■■■■■■■ "); printf("\n ■■■■■■■■■■■■■■■■■■■■ "); printf("\n ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ "); getch();system("cls");/*清屏*/printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n\t\t\t 欢迎使用学生成绩管理系统\n\n");puts("\t\t★★★★★★★★★★★目录★★★★★★★★★★★\n\n");printf("\t\t 1.教师登陆\n");printf("\t\t 2.学生登录\n");printf("\t\t 3.退出");puts("\n\n\t\t★★★★★★★★★★★★★★★★★★★★★★★★\n");scanf("%d",&c);switch(c){case 1:distin();break;case 2:st();break;case 3:exit(0);break;}}}/*****************主函数****************/ main(){menu();getch();}三、实验结果和数据处理:1.、运行该程序,初始界面为欢迎界面:2、输入数字1,按enter后,然后输入密码gdut09,进入教师菜单:3、教师界面:4、输入1,选择输入功能,再输入3个学生信息:5、输入1,浏览全部数据:6、返回教师界面,输入3,进行修改:7、返回教师界面,输入2,进行追加数据8、返回教师界面,输入4,进行删除数据:9、返回教师界面,输入5,进行浏览:10、返回教师界面,输入6,进行查找:11、返回教师界面,输入7,进行插入数据:12、进入教师界面后,输入进行按平均成绩(从小到大)排序:13、在教师界面输入9,完成分段统计功能:14、返回主界面,输入2,进入学生界面,按学号进行查找学生成绩:四、参考文献:《数据结构C语言》严蔚敏清华大学出版社《c语言程序设计》谭浩强清华大学出版社《数据结构》高教出版社《数据结构习题》李春保清华大学出版社《数据结构习题》严蔚敏清华大学出版社《c语言与数据结构》王立柱清华大学出版社《数据结构(C语言篇)习题与解析)李春葆清华大学出版社五、总结:通过这次的课程设计,做一个程序设计,真的不容易。