单链表的学生成绩管理系统设计与实现
学生成绩管理系统源代码 用单向链表实现
if((fp = fopen("成绩表.dat","rb")) == NULL) { //如果文件不存在,则不进行读取操作
system("pause");
return;
}
else {
fp = fopen("成绩表.dat","rb"); //成功返回一个文件指针
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
typedef struct score { //定义成绩信息结构体
char Number[20];//学号
char Name[20];//姓名
char Chinese[6];//语文成绩
pNodeScore = (p_node_score)malloc(sizeof(node_score));//为节点分配存储空间
if(fread(&pNodeScore->data,sizeof(struct score),1,fp) != 1) //将结构体中的数据以1个单位读入到pNodeScore->data
}
fclose(fp);
}
void View(){
p_node_score pNodeScore;
pNodeScore = headScore;
PrintTitle();//显示标题栏
while(pNodeScore != NULL) {
PrintScore(pNodeScore->data);//输出学生信息和成绩信息
以单链表为存储结构,对多个班级(以两个班为例)的学生成绩进行操作
用C语言编写程序,以单链表为存储结构,对多个班级(以两个班为例)的学生成绩进行管理,要求实现如下功能:(1)通过终端或文件输入若干学生的班级号、学号、成绩,将每个班的数据分别保存在不同的单链表中,数据元素按成绩由高到低的顺序存放;然后分别按顺序(由高到低)输出各班的成绩表。
(2)输入班级、学号和成绩变更(如+5,-3),对各班至少1人的成绩进行修正,修正后仍要保持数据按成绩由高到低有序;然后分别按顺序输出各班的成绩表。
(3)分别输出各班的总人数、最高分、最低分、平均分。
#include<stdio.h>#include<string.h>#include<malloc.h>struct student{char number[9];int score;struct student *next;};typedef struct student st;void load(st **);void insert(st **,st);void change(st **,char *,int);st * deleted(st **,st **,st **,char *);void print(st *head[3]);void analysis(st *head[3]);void main(){int i;char *l =(char *)malloc(10);st stu;st *h1 = NULL,*h2 = NULL,*h3 = NULL;st *head[3] = {NULL,NULL,NULL};printf("--------------------------------------------------------\n\nEnter 1 to insert a date.\nEnter 2 to change a date.\nEnter 3 to print the dates.\nEnter 4 to analysis scores.\nEnter 5 to input dates from a file.\nEnter others to end.\n\n--------------------------------------------------------\n\n");scanf("%d",&i);while(i > 0 && i <= 5){switch(i){case 1:printf("Please enter the date.\n");scanf("%s%d",stu.number,&stu.score);insert(head,stu);break;case 2:printf("Please enter the number of change date and the change score.\n");scanf("%s%d",l,&i);change(head,l,i);break;case 3:print(head);break;case 4:analysis(head);break;case 5:load(&head[0]);}printf("--------------------------------------------------------\n\nEnter 1 to insert a date.\nEnter 2 to change a date.\nEnter 3 to print the dates.\nEnter 4 to analysis scores.\nEnter 5 to input dates from a file.\nEnter others to end.\n\n--------------------------------------------------------\n\n");scanf("%d",&i);}}void load(st **head){FILE *fp;st a = {0},b;char *l;l = (char *)malloc(15);printf("Please enter the file name.\n");scanf("%s",l);if((fp = fopen(l,"rt")) == NULL){printf("File open error.\n");}else{fscanf(fp,"%s%d",a.number ,&a.score);do{insert(head,a);b = a;fscanf(fp,"%s%d",a.number,&a.score);}while(b.score != a.score);fclose(fp);printf("File open successful.\n");}}void insert(st **head,st stu){st *p,*c,*n;n = (st *)malloc(sizeof(st));if(n != NULL){strcpy(n -> number,stu.number);n -> score = stu.score;n -> next = NULL;}elseprintf("Not inserted. No menory available.\n");if(stu .number[5] < 52 && stu .number[5] > 48){p = NULL;c = *(head + stu .number[5] - 49);while(c != NULL&& n -> score < c -> score){p = c;c = c -> next;}if(p){p -> next = n;n -> next = c;}else{n -> next = *(head + stu .number[5] - 49);*(head + stu .number[5] - 49) = n;}}elseprintf("Data error.");}st * deleted(st **head,char * dnumber){st *p,*c = NULL;if(*(dnumber + 5) < 52 && *(dnumber + 5) > 48){for(p = *(head + *(dnumber + 5) - 49);strcmp(p -> number,dnumber) && p -> next;p = p -> next){c = p;}if(p){if(c){c -> next = p -> next;return p;}else{*(head + *(dnumber + 5) - 49) = p -> next;return p;}}else{printf("Did not find the number.\n");return NULL;}}else{printf("data error!");return NULL;}}void change(st **head,char * cnumber,int cscore){st * dst = deleted(head,cnumber);if(dst != NULL){dst -> score = dst -> score + cscore;insert(head,*dst);printf("Data changed successful.");}}void print(st *head[3]){int i = 1;for(int j = 0;j < 3;j ++){if(head[j]){printf("Class %d'scores:\n number score| number score| number score| number score| number score|\n",j);for(st *p = head[j];p != NULL;p = p -> next){if(i % 5 == 0)printf("\n");printf("%s%6d ",p ->number,p ->score);i ++;}printf("\n");i = 1;}}}void analysis(st *head[3]){int total[3] = {0,0,0},h[3] = {0,0,0},l[3] = {100,100,1000},h90[3] = {0,0,0},l60[3] = {0,0,0},th = 0,tl = 0,i;double ave[3] = {0,0,0};for(int i = 0;i < 3;i ++){if(head[i]){for(st *p = head[i];p != NULL;p = p -> next){total[i]++;ave[i] += p -> score;if(p -> score > h[i])h[i] = p -> score;if(p -> score < l[i])l[i] = p -> score;if(p -> score > 90)h90[i]++;if(p -> score < 60)l60[i]++;}}}th = h[0];if(th < h[1])th = h[1];if(th < h[2])th = h[2];tl = h[0];if(tl > h[1])tl = h[1];if(tl > h[2])tl = h[2];printf("class NOP highest lowest ave up90 down60\n");for(i = 0;i < 3;i ++){printf("class%d%3d%8d%7d%6.1f%5d%7d\n",i+1,total[i],h[i],l[i],ave[i] / total[i],h90[i],l60[i]);}printf("total %3d%8d%7d%6.1f%5d%7d\n",total[0] + total[1] + total[2],th,tl,(ave[0] + ave[1] + ave[2]) / (total[0] + total[1] + total[2]),h90[0] + h90[1] + h90[2],l60[0] + l60[1] + l60[2]);}--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------5Please enter the file name.stu.txtFile open successful.--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------3Class 0'scores:number score| number score| number score| number score| number score| 20072101 99 20072103 77Class 1'scores:number score| number score| number score| number score| number score| 20072222 101 20072203 100Class 2'scores:number score| number score| number score| number score| number score| 20072301 88 20072300 66--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------1Please enter the date.20072206102--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------3Class 0'scores:number score| number score| number score| number score| number score| 20072101 99 20072103 77Class 1'scores:number score| number score| number score| number score| number score|20072206 102 20072222 101 20072203 100Class 2'scores:number score| number score| number score| number score| number score| 20072301 88 20072300 66--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------2Please enter the number of change date and the change score.20072206 -5Data changed successful.--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------3Class 0'scores:number score| number score| number score| number score| number score| 20072101 99 20072103 77Class 1'scores:number score| number score| number score| number score| number score| 20072222 101 20072203 100 20072206 97Class 2'scores:number score| number score| number score| number score| number score| 20072301 88 20072300 66--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------4class NOP highest lowest ave up90 down60 class1 2 99 77 88.0 1 0 class2 3 101 97 99.3 3 0 class3 2 88 66 77.0 0 0 total 7 101 88 89.7 4 0 --------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------。
C课程设计单链表学生信息管理系统模板
C课程设计单链表学生信息管理系统学生信息管理系统设计文档一、设计任务描述为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了”学生信息管理系统”软件, 该软件适用于所有windows 操作系统, 面向广大用户, 界面简洁, 操作简单。
此软件主要是实现对学生学籍信息进行系统化的管理, 能够对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理, 主要是根据学生的学号及其姓名进行操作的。
该软件能够更加方便管理者管理学生学籍信息。
功能需求说明该系统所需要的功能有: 1、链表的建立2、学生信息的插入;3学生信息的查询;、4学生信息的输出;、5学生信息的修改;、6学生信息的删除;、7良好的欢迎选择界面。
、三、总体方案设计一、实现任务的方法1、在欢迎选择界面中, 使用Switch 这一选择结构来连接程序的执行和用户的命令;2、在从学生信息的建立直到删除, 都是使用链表的相关知识3、在定义学生信息时,建立一个Inform类;在定义学生课程成绩时,自定义了一个achieve结构体;总体结构ZJ建立链表三、模块划分(1) 链表的建立。
(2) 对链表信息的插入。
(3) 对链表信息的查找。
(4) 对链表信息的输出。
(5) 对链表信息的删除。
(6) 对链表信息的修改。
课程成绩信息作为附加信息,穿插于各个模块中三、数据结构说明」、自定义的数据结构资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。
1、achieve (课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分"谍稈数〃课程名(最參课程数为nn "学分 "总分"平均分 "默认枸匯雷数"计算该学生课程的加权平均分(总咸绩/总学分)2、inform (学生基本信息)用于存放学生基本信息,包括姓名、 学号、性别等。
"元素类型 "姓容 〃学号 “性别 "身份证号"出生年月曰 "家庭地址 "电话号码 "课程咸绩〃谍程咸绩输入 "遥程成缢输出3、结点结构-Nodetype,定义了数据域inform 和指针域next; structNodetype//结点结构{inform data; /7数据域Node type 切氏t; 〃指针域};Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针。
数据结构:运用单链表 制作 学生成绩管理系统
单链表操作的实现
int GetElem(Node* head, int i) // 取第i个数据元素 void Insert(Node *head, int i, int d) // 插入数据元素
void Delete(Node *head, int i)
void Clear(Node *head) Node * CreateList(int n)
学生成绩管理系统
Team Members
Content
单链表
1 2 3 4
介绍 操作实现 删除结点 插入结点
学生成绩管理系 运行结果
4
单链表
头指针
头结点
链表为空时, 头结点的指针域为空
空指针
a1
a2
… ... an ^
有时为了操作方便,在第一个结点之前虚 加一个“头结点”,以指向头结点的指针 为链表的头指针。
利用单链表实现四大功能:
(1)输入记录: (2)查询记录: (3)更新记录: (4)输出记录:
主控main()函数的执行流程
若选1 调用add_record()函数,增加学生记录; 若选2 调用delete_record()函数,进行删除操作; 若选3 调用search_record()函数,进行查询操作; 若选4 调用modify_record()函数,进行修改操作;
// 删除数据元素
// 清除链表 // 生成含 n 个数据元素的链表
单链表操作:
(1)单链表中删除节点的示意图如下:
算法表示:p1->next=p2->next;
(2)单链表中插入节点的示意图如下:
算法表示:s>next=p->next;p->next=s;
利用单项链表实现简单的学生信息管理
利用单项链表实现简单的学生信息管理一、题目:利用单项链表实现简单的学生信息治理(07)二、设计思路1、总体设计1)分析程序的功能创建单项链表储存学生的各项信息,学号、姓名、成绩。
并能够完成学生信息的插入、删除及信息的显示功能。
2)系统总体结构:按照程序要求的功能采纳结构化的设计思想,划分为五个功能模块,即创建链表、插入函数、删除函数、显示函数和主函数。
2、各功能模块的设计:讲明各功能模块的实现方法①头文件:对自己定义的函数进行函数声明。
②主函数:进行函数的调用,实现各函数的功能,达到预期的目的。
③函数定义部分:定义各个功能函数,创建链表函数、插入新信息函数、删除信息函数、显示信息函数。
3、设计中的要紧困难及解决方案1)在插入新信息时,有插入点在表头、中间、表尾三种情形,为此采纳讨论的方法,把三种情形进行讨论使其分开进行。
2)在删除信息时,有删除的为头结点和中间结点的情形,采纳讨论的方法,把两种情形分开来进行。
4、你所设计的程序最终完成的功能1)创建链表、插入新信息、删除信息、显示信息。
2)测试数据①输入的数据99812 LiuLifang 91学号姓名成绩96085 WangLiPing 7798120 ZhangLi 7599912 LiuHai 80 ③删除的数据学号姓名成绩99812 liulifang 91运行结果三、程序清单本程序包含creatlist.cpp、insert.cpp、del.cpp、output.cpp、main.cpp、头文件.h六个文件#include<iostream.h>#include"头文件.h"int n;student *creatlist(){student *head;student *p1;student *p2;n=0;head=NULL;p1=new(student); //创建一个新结点p2=p1;cin>>p1->num>>p1->name>>p1->score;while(p1->num!=0) //链表建立过程终止的判定条件{n++;head=p1;elsep2->next=p1; //原链表结点指向新建结点p2=p1;p1=new(student);cin>>p1->num>>p1->name>>p1->score;}delete(p1);p2->next=NULL;return head; //返回表头}2、insert.cpp文件清单#include<iostream.h>#include"头文件.h"student *insert(student *head,student *t){student *p0; //待插入点student *p1;student *p2; //p0插入p1之前,p2之后p1=head;p0=t;if(p1==NULL) //原链表是空表{head=p0;p0->next=NULL;}elsewhile((p0->num>p1->num)&&(p1->next!=NULL)) //查找待插入点{p2=p1;p1=p1->next;}if(p0->num<=p1->num){if(p1==head) //要插入的位置在表头{head=p0;p0->next=p1;}else //要插入的位置不是表头{p2->next=p0;p0->next=p1;}}else //插入表尾结点之后{p1->next=p0;p0->next=NULL;}}return head; //返回表头}3、del.cpp文件清单#include<iostream.h>#include"头文件.h"student *del(student *head,int num){student *p1;student *p2;if(head==NULL) //原链表是空表{cout<<"List is NULL\n";return head;}p1=head;while((num!=p1->num)&&(p1->next!=NULL)) //查找带要删除的结点{p2=p1;p1=p1->next;if(num==p1->num){if(p1==head) //要删除的是头结点head=p1->next;else //要删除的不是头结点p2->next=p1->next;delete(p1); //开释被删除结点所占的内存空间cout<<"delete: "<<num<<endl;}elsecout<<"not found"<<endl;return head; //返回表头}4、output.cpp文件清单#include<iostream.h>#include"头文件.h"void output(student *head){if(head==NULL) //原链表是空表cout<<"list is NULL\n";else{student *p1;p1=head;cout<<"学生的成绩信息"<<endl;cout<<"学号"<<"\t姓名"<<"\t成绩\n";do //输出链表中各个同学的信息{cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->score<<endl;p1=p1->next;}while(p1!=NULL);}}5、main.cpp文件清单#include<iostream.h>#include"头文件.h"void main(){student *headl;cout<<"输入学生的成绩信息"<<endl;cout<<"学号"<<"\t姓名"<<"\t成绩"<<endl;headl=creatlist();int k;{cout<<endl;cout<<"--------菜单选项---------"<<endl;cout<<"1.插入新信息 ,请选择:1"<<endl;cout<<"2.删除信息, 请选择:2"<<endl;cout<<"3.显示信息, 请选择:3"<<endl;cout<<"4.终止程序, 请选择:4"<<endl;cout<<" 选择";cin>>k;if(k==1) //插入新信息{int m;cout<<"输入插入学生人数"<<endl;cin>>m;cout<<"学号"<<"\t姓名"<<"\t成绩"<<endl;for(int i=0;i<m;i++){student *stu;stu=new(student);cin>>stu->num>>stu->name>>stu->score;headl=insert(headl,stu);}}else if(k==2) //删除信息{int num;cout<<"输入要删除学生的学号\n";cin>>num;headl=del(headl,num);}else if(k==3) //显示信息{output(headl);}else //终止程序break;};}6、头文件.h文件清单struct student //定义结构体类型{int num;char name[20];student *next;};student *creatlist(); //创建链表函数原型讲明student *insert(student * ,student * ); //插入函数原型讲明student *del(student * ,int ); //删除函数原型讲明void output(student * ); //显示函数原型讲明四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评判。
C程序设计基础课程设计设计报告_链表建立学生成绩管理系统
设计题目:班级:姓名:学号:完成日期:目录目录 (1)1. 课程设计目的和要求 (1)1.1课程设计《学生成绩管理系统》的题目要求 (1)2. 课程设计任务内容 (2)2.1《学生成绩管理系统》主要功能实现方式 (2)2.1.1链表处理数据 (2)2.1.2文件读写存储学生信息 (2)2.2创建数据库管理系统(DBMS) (2)3. 详细设计说明 (3)3.1题目设计分析 (3)3.1.1需求分析 (3)3.1.2解题思路分析 (3)3.2设计过程 (3)3.2.1链表(结构体)定义 (3)3.2.2函数编写 (3)3.2.3编译与调试 (5)4. 软件使用说明 (6)4.1主界面介绍 (6)4.2创建学生信息数据表 (6)4.3增加数据信息 (6)4.4删除数据信息 (6)4.5修改信息 (6)4.6查找信息 (6)4.7统计功能 (7)5. 课程设计心得与体会 (7)5.1概述 (7)5.2心得与体会 (7)5.2.1数据库管理系统——链表+文件读写 (7)5.2.2指针与内存 (7)6. 参考文献 (8)7. 附录:部分程序清单 (8)1.课程设计目的和要求1.1课程设计《学生成绩管理系统》的题目要求学生包含以下信息项:学号、姓名、学院、班级、高数成绩、英语成绩、C语言成绩、总分、平均分。
系统的主要功能包括:1. 创建学生成绩信息文件,根据提示输入学生的各项信息,计算出总分和平均分,然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件中。
2. 增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:增加后的学生信息仍按学号排序,并继续保存至原文件。
3. 删除学生信息,提示用户输入要进行删除操作的学号,如果在文件中有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。
4. 修改学生信息,提示用户输入要进行修改操作的学号,如果在文件中有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作。
C++课程设计 单链表——学生信息管理系统
学生信息管理系统设计文档一、设计任务描述为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了“学生信息管理系统”软件,该软件适用于所有windows操作系统,面向广大用户,界面简洁,操作简单。
此软件主要是实现对学生学籍信息进行系统化的管理,可以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。
该软件可以更加方便管理者管理学生学籍信息。
二、功能需求说明该系统所需要的功能有:1、链表的建立;2、学生信息的插入;3、学生信息的查询;4、学生信息的输出;5、学生信息的修改;6、学生信息的删除;7、良好的欢迎选择界面。
三、总体方案设计一、实现任务的方法1、在欢迎选择界面中,使用Switch 这一选择结构来连接程序的执行和用户的命令;2、在从学生信息的建立直到删除,都是使用链表的相关知识;3、在定义学生信息时,建立一个Inform 类;在定义学生课程成绩时,自定义了一个achieve 结构体;二、总体结构三、模块划分(1)链表的建立。
(2)对链表信息的插入。
(3)对链表信息的查找。
(4)对链表信息的输出。
(5)对链表信息的删除。
(6)对链表信息的修改。
课程成绩信息作为附加信息,穿插于各个模块中。
三、数据结构说明一、自定义的数据结构:1、achieve(课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分。
2、inform(学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。
3、结点结构-Nodetype,定义了数据域inform和指针域next;二、类Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针。
四、各模块设计说明一、建立:首先:建立一个空链表:Student::Student(){head=new Nodetype;head->next=NULL; 表明这是一个空链表cout<<"请建立链表\n";}然后建立链表:二、添加:按照学号从小到大的顺序插入:三、输出:将链表的数据输出,由于上述操作,输出时会按照学号从小到大的顺序输出。
单链表编写学生成绩统的课程设计报告 (修复的)
XXXX大学学xxx院数据结构课程设计1.题目利用单链表编写一个学生成绩系统。
(具有查询成绩、修改成绩、删除成绩、添加成绩、全班平均。
)2.系统功能(1)查询学生的各科成绩。
(2)修改学生的各科成绩。
(3)删除学生的各科成绩。
(4)添加学生的成绩。
(5)计算全班各科平均成绩。
3.系统设计4.源代码#include <stdlib.h>#include <stdio.h>#define Max 5struct Student{float s_num;float s_chinese;float s_english;float s_math;float s_total;float s_avg;char s_name[50];struct Student *Next;};typedef struct Student Node;typedef Node *Link;floatData[6][Max]={6,85,90,98,273,15,76,70,80,226,17,95,98,96,289,20,65,60,80,205,23,79,65 ,86,230,32,93,86,74,253};charstudent_list[6][20]={{'A','l','a','n'},{'D','a','n','i','e'},{'H','e','l','e','n'},{' B','i','l','l'},{'P','e','t','e','r'},{'A','m','y'}};float lastnum = 0;/*插入项*/Link Insert_List(Link Head,Link New,int key){Link Pointer;Link Tmp;Pointer=Head;while(1){if(Pointer == NULL){New->Next = Head;Head=New;break;}if(Pointer->s_num == lastnum) //根据学生坐位号插入{New->Next=Pointer->Next; //将Pointer后面的值赋给New后面Pointer->Next=New; //在Pointer的Pointer中间插入New值break;}Pointer=Pointer->Next; //循环变量处理}return Head;}Link Edit_List(Link Head,float s_num,float s_chinese,float s_english,float s_math) {Link Pointer;Link Tmp;Pointer=Head;while(1){if(Head == NULL){printf("无效的学生座号\r\n");break;}if(Pointer->s_num == s_num) //根据学生坐位号插入{Pointer->s_chinese = s_chinese;Pointer->s_english = s_english;Pointer->s_math = s_math;Pointer->s_total = s_chinese+s_english+s_math;break;}Pointer=Pointer->Next; //循环变量处理}return Head;}void Print_Avg(Link Head){Link Pointer;float total_chinese=0.00;float total_english=0.00;float total_math=0.00;float total=0.00;int count = 0;Pointer = Head;while(Pointer != NULL){total_chinese += Pointer->s_chinese;total_english += Pointer->s_english;total_math += Pointer->s_math;total += Pointer->s_total;count++;Pointer=Pointer->Next;}printf("班级平均成绩为:\r\n语文:%.2f\t英语:%.2f\t数学:%.2f\t总成绩:%.2f\r\n",total_chinese/count,total_english/count,total_math/count,total/count);}/*打印主前列表*/void Print_List(Link Head){Link Pointer;Pointer = Head;printf("学生信息表:\r\n");printf("------------------------------------------------------------------------------\r\n");while(Pointer != NULL){printf("座号:%4.0f\t姓名:%s\t语文:%.2f\t英语:%.2f\t数学:%.2f\r\n",Pointer->s_num,Pointer->s_name,Pointer->s_chinese,Pointer->s_english,Pointer->s_ math);lastnum = Pointer->s_num;Pointer=Pointer->Next;}printf("------------------------------------------------------------------------------\r\n");}/*清除项*/void Free_List(Link Head){Link Pointer;while(Head != NULL){Pointer = Head;Head=Head->Next;free(Pointer);}}/*删除列表里面指定的项(根据学生座位号或姓名)*/Link Delete_List(Link Head,int key){Link Pointer;Link Back;Pointer=Head;while(1){if(Pointer->Next == NULL){printf("无法查询到数据!\r\n");break;}if(Head->s_num == key){Head=Pointer->Next;free(Pointer);break;}Back = Pointer;Pointer=Pointer->Next;if(Pointer->s_num == key){Back->Next=Pointer->Next;free(Pointer);break;}}return Head;}/*查询列表里面指定的项(根据学生座位号或姓名)*/ void Search_List_By_Num(Link Head,int key) {Link Pointer;Link Back;int isexist = 0;Pointer=Head;while(Pointer != NULL){if(Pointer->Next == NULL){if(isexist > 0)break;else{printf("无法查询到数据\r\n");break;}}if(Head->s_num == key && isexist == 0){printf("座号:%4.0f\t姓名:%s\t语文:%.2f\t英语:%.2f\t数学:%.2f\r\n",Head->s_num,Head->s_name,Head->s_chinese,Head->s_english,Head->s_math);isexist ++;}Back = Pointer;Pointer=Pointer->Next;if(Pointer->s_num == key){printf("座号:%4.0f\t姓名:%s\t语文:%.2f\t英语:%.2f\t数学:%.2f\r\n",Pointer->s_num,Pointer->s_name,Pointer->s_chinese,Pointer->s_english,Pointer->s_ math);isexist++;}}}void Search_List_By_Name(Link Head,char* key){Link Pointer;Link Back;int isexist = 0;Pointer=Head;while(Pointer != NULL){if(Pointer->Next == NULL){if(isexist > 0)break;else{printf("无法查询到数据\r\n");break;}}if(strcmp(Head->s_name,key) == 0 && isexist == 0){printf("座号:%4.0f\t姓名:%s\t语文:%.2f\t英语:%.2f\t数学:%.2f\r\n",Head->s_num,Head->s_name,Head->s_chinese,Head->s_english,Head->s_math);isexist++;}Back = Pointer;Pointer=Pointer->Next;if(strcmp(Pointer->s_name,key) == 0){printf("座号:%4.0f\t姓名:%s\t语文:%.2f\t英语:%.2f\t数学:%.2f\r\n",Pointer->s_num,Pointer->s_name,Pointer->s_chinese,Pointer->s_english,Pointer->s_ math);isexist++;}}}/*创建列表项*/Link Create_List(Link Head){Link New;Link Pointer;int i;Head = (Link)malloc(sizeof(Node));if(Head == NULL)printf("Memory allocate Failure!\r\n");else{Head->s_num = Data[0][0];Head->s_chinese = Data[0][1];Head->s_english = Data[0][2];Head->s_total=Data[0][4];Head->s_math = Data[0][3];strcpy(Head->s_name,student_list[0]);Head->s_avg=0;Head->Next = NULL;Pointer = Head;for(i=1;i<6;i++){New = (Link)malloc(sizeof(Node));New->s_num = Data[i][0];New->s_chinese = Data[i][1];New->s_english = Data[i][2];New->s_total=Data[i][4];New->s_math = Data[i][3];New->s_avg=0;strcpy(New->s_name,student_list[i]);New->Next=NULL;Pointer->Next = New;Pointer=New;}}return Head;}void Print_Menu(){printf("/*************************主菜单*****************************/\r\n");printf(" 1 查询成绩(根据座位号)\r\n");printf(" 2 修改成绩\r\n");printf(" 3 删除成绩\r\n");printf(" 4 添加成绩\r\n");printf(" 5 查询全班平均成绩\r\n");printf(" 0 退出系统\r\n");printf("/***********************************************************/\r\n"); }/*主函数*/void main(){Link Head;Link New;int key;int m_select;char username[50] = {0};Head = (Link)malloc(sizeof(Node));Head=Create_List(Head);if(Head != NULL){ Print_Menu();Print_List(Head);while(1){m_select = 0;printf("请选择(0-5): ");scanf("%d",&m_select);if(m_select == 0)break;switch(m_select){case 1:printf("请输入座号:");scanf("%d",&key);Search_List_By_Num(Head,key);break;case 2:printf("请输入座号:");scanf("%d",&key);New = (Link)malloc(sizeof(Node));printf("请输入语文、英语、数学成绩:");scanf("%f,%f,%f",&New->s_chinese,&New->s_english,&New->s_math);Edit_List(Head,key,New->s_chinese,New->s_english,New->s_math);Print_List(Head);break;case 3:printf("请输入要删除学生的座号:");scanf("%d",&key);Head = Delete_List(Head,key);Print_List(Head);break;case 4:New = (Link)malloc(sizeof(Node));printf("请输入座号:");scanf("%f",&New->s_num);printf("请输入学生姓名:");scanf("%s",&New->s_name);printf("请输入语文成绩:");scanf("%f",&New->s_chinese);printf("请输入英语成绩:");scanf("%f",&New->s_english);printf("请输入数学成绩:");scanf("%f",&New->s_math);New->s_total = New->s_chinese+New->s_english+New->s_math;New->s_avg = 0;Head = Insert_List(Head,New,0);Print_List(Head);break;case 5:Print_Avg(Head);break;}}Free_List(Head);}}5.输出结果截图(1)查询成绩(2)修改成绩(3)删除成绩(4)添加成绩(5)全班平均6.小结数据结构是我们专业重要课程之一,通过这学期的学习,我对这门课程有了一定的了解。
数据结构单链表应用(简易学生信息管理系统)
数据结构单链表应用(简易学生信息管理系统)1这是主文件建立文件“student-main.cpp”粘贴保存#include#include#include#include#include"student-fun.cpp"#define PRINT "%6d %12s %5.2f\n",p->num,p->name,p->score //定义输出格式#define PRINTF " 学号姓名成绩\n"char cmd;int num;lklist L;void jiemian(){ system("cls");printf("\n***************************************************** ****************** *");printf("\n****** 欢迎使用简易班级学生信息系统********");printf("\n**************");printf("\n******i--增加学生d--删除学生q--退出系统********");printf("\n****** f--查询c--修改l--列出所有学生信息********");printf("\n***************************************************** ****************** *\n");}void ReadCommand(){do {printf("\n 请根据提示输入命令: ");fflush(stdin); //清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件scanf("%c",&cmd);} while (cmd!='i'&&cmd!='d'&&cmd!='l'&&cmd!='q'&&cmd!='f'&&c md!='c');}void Interpret()switch(cmd){case 'i': insert_lklist(L); break;case 'd': del_lklist(L);break;case 'l': list_lklist(L); break;case 'f': find_lklist(L);break;case 'c': cor_lklist(L);break;case 'q': exit(0);}}void main(){L=initial_lklist();do { jiemian();ReadCommand();Interpret();system("pause"); //暂停,按任意键继续。
链表实现学生学籍管理系统
#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 15 //学号位数#define M 15 //姓名字节数#define L 4 //成绩的科数int aa=0;//记录筛选时打开的文void printf_(struct stu *); //输出单个的学生数据struct stu * scanf1_(); //接收单个的学生数据,返回指针,struct stu * scanf_(); //得到学生的数据,并放入到链表中void print_(struct stu *); //输出链表中的学生信息struct stu *num_paixu(struct stu *); //用链表给学生排序void chaxun(struct stu *); //根据学生的学号查询学生的信息,并把学生的数据输出struct stu * charu(struct stu *); //将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。
struct stu * shanchu(struct stu *); //删除数据void xiugai(struct stu *); //修改学生的信息。
void fprint_(struct stu *); //把数据写入到文件int to_ji(struct stu *); //统计学生的总人数int t_ji_tj(struct stu *); //统计成绩在某一区间内的人数struct stu * ch_ji_paixu(struct stu *); //按成绩排序,默认的是按总成绩排序struct s *shaixuan(struct stu *); //筛选符合条件的数据,得到符合条件的结构体数据的指针。
void shuchu_shai(struct s *); //输出筛选出来的数据void fb_shu_shai(struct s *); //将筛选出来的数据输入到文件中void avrage(struct stu *head,float *); //计算平均成绩void fb_avrage(float *); //将平均成绩放在文件的最后面//建立学生结构体struct stu{char num[N];char name[M];int ch_ji[L];struct stu *next;};//建立一个链表,存放学生结构体的指针struct s{struct stu *p;struct s *ps;};void main(){int i,n,x=1,k=0;float a[L]={0};struct stu *head=NULL;struct s *shead=NULL;char ch;while(x){ system("cls");printf("********************************************************************* **********\n");printf(" 0---退出系统1---录入数据\n");printf(" 2---保存文件3---按成绩排序\n");printf(" 4---查看信息5---按学号排序\n");printf(" 6---统计人数7---按条件筛选\n");printf(" 8---查询信息9---显示筛选结果\n");printf(" 10---插入数据11---保存筛选结果\n");printf(" 12---删除数据13---计算平均成绩\n");printf(" 14---修改数据15---保存平均成绩\n");printf(" 16---按条件统计人数\n");printf("********************************************************************* **********\n");scanf("%d",&n);getchar();//有啥作用switch(n){case 0:x=0;break;case 1:head=scanf_();break;case 2:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsefprint_(head);break;case 3:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=ch_ji_paixu(head);break;}case 4:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elseprint_(head);break;case 5:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=num_paixu(head);printf("是否显示排序结果Y/N ?");ch=getchar();getchar();if(ch=='y'||ch=='Y'){printf("\n");print_(head);}}case 6:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=to_ji(head);printf("总共有%3d 名学生",k);getchar();break;}case 7:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{shead=shaixuan(head);if(shead!=NULL&&shead->ps!=NULL){printf("是否显示筛选结果Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n");shuchu_shai(shead);getchar();}}break;}case 8:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();}else{chaxun(head);getchar();break;}case 9:if(head==NULL||head->next==NULL) {printf("请先录入学生的数据!");getchar();break;}else{printf("\n");shuchu_shai(shead);getchar();break;}case 10:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsehead=charu(head);break;case 11:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_shu_shai(shead);getchar();break;}if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=shanchu(head);break;}case 13:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{avrage(head,a);printf("平均值计算成功!\n是否显示平均成绩Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n 语文数学英语总成绩\n");printf("%-8.2f%-8.2f%-8.2f%-8.2f",a[0],a[1],a[2],a[L-1]);getchar();}break;}case 14:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{xiugai(head);break;}case 15:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_avrage(a);printf("平均值保存成功!");getchar();break;}case 16:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=t_ji_tj(head);if(k>0){printf("符合条件的有%3d 名学生!",k);getchar();}else if(k==0){printf("没有符合条件的学生!");getchar();}else if(k==-2)getchar();break;}default :printf("输入有误,请重新输入!");getchar();break;}}}//输出单个的学生数据void printf_(struct stu *p0){int i;printf("学号:");puts(p0->num);printf("姓名:");puts(p0->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p0->ch_ji[i]);printf("\n");}//接收单个的学生数据,返回指针,struct stu * scanf1_(){int i,sum=0;struct stu *p0;p0=(struct stu *)malloc(sizeof(struct stu));printf("请输入学生的学号:");gets(p0->num);printf("请输入学生的姓名:");gets(p0->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p0->ch_ji[i]);sum+=p0->ch_ji[i];}getchar();p0->ch_ji[L-1]=sum;return p0;}//得到学生的数据,并放入到链表中struct stu * scanf_(){struct stu *p1,*p2,*head;int i,sum=0,n=0;printf("注意:当学生学号为0 时输入结束\n\n");p1=(struct stu *)malloc(sizeof(struct stu)); /*得到学生信息*/head=p2=p1;do{ printf("请输入学生的学号:");gets(p1->num);if(strcmp(p1->num,"0")==0)break;printf("请输入学生的姓名:");gets(p1->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p1->ch_ji[i]);sum+=p1->ch_ji[i];}getchar();printf("\n");p1->ch_ji[L-1]=sum;sum=0;p1=(struct stu *)malloc(sizeof(struct stu));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("成绩输入结束!\n");getchar();/*学生的数据被放在链表中*/return head;}/*输出链表中的学生信息*/void print_(struct stu *head){int i;struct stu *p1,*p2;p1=p2=head;while(p1->next!=NULL){printf("学号:");puts(p1->num);printf("姓名:");puts(p1->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p1->ch_ji[i]);printf("\n");p1=p2->next;p2=p1;}getchar();}/*用链表给学生排序*/struct stu *num_paixu(struct stu *head){struct stu *p1,*p2,*p3,*p4,*p5,*p6,*p7;int x=1;for(p1=head;p1->next!=NULL;p4=p1,p1=p1->next){p3=p1;for(p2=p1->next,p5=p7=p2;p2->next!=NULL;p7=p2,p2=p2->next){if(strcmp(p3->num,p2->num)>0){p3=p2;p5=p7;}}if(p3!=p1){if(x&&p1==head){p6=p1->next;p1->next=p3->next;p3->next=p6;p5->next=p1;head=p3;p1=p3;x=0;}else{p6=p1->next;p1->next=p3->next;p3->next=p6;p4->next=p3;p5->next=p1;p1=p3;}}printf("排序成功!\n");return head;}//根据学生的学号查询学生的信息,并把学生的数据输出void chaxun(struct stu *head){char a[N];struct stu *p1;printf("请输入要查询的学号:");gets(a);p1=head;while(p1->next!=NULL){if(strcmp(p1->num,a)==0)break;p1=p1->next;}if(p1->next==NULL)printf("没有找到学号为%s 的学生!\n",a);else{printf("要查询的学生信息如下:\n\n");printf_(p1);}}//将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。
数据结构 利用单链表实现学生基本信息管理 课程设计 实验报告
数据结构课程设计设计题目:利用单链表实现学生基本信息管理目录课题名称利用单链表实现学生基本信息管理院系年级专业学号姓名成绩课题设计目的与设计意义课题设计目的:(1)学会单链表结点的定义(2)掌握单链表的基本运算,熟悉对单链表的一些基本操作和具体函数的定义。
(3)加深对链表的理解,逐步培养解决实际问题的编程能力(4)创建一个初始链表,通过调用定义的基本操作函数来实现单链表上的插入、删除元素等操作。
调试程序并对相应的输出做出分析;修改输入数据,预期输出并验证输出的结果。
加深对有关意义:一般来讲,课程设计教学实验复杂一些,深度更广并且更加接近实用.通过课程设计的综合训练,培养学生实际分析问题,编程和动手能力,使学生对数据结构进行更深一层的了解,培养同学们对学习数据结构这门课程的兴趣, 让同学们学会如何去查找资料和整合处理这些资料的能力, 也为以后的大学毕业设计论文打下了一个初步的基础.这些课程设计都是比较难的,要分成几个小项目, 几个学生一组, 培养团队协作精神. 最终帮助学生系统掌握课程的主要内容, 更好地完成教学任务. 基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握数据结构的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题.指导教师:年月日一:课程设计目的和意义...................................................................................................... - 1 -1、课程设计目的:............................................................................................................ - 1 -2、课程设计意义:............................................................................................................ - 1 - 二:需求分析与要求:.......................................................................................................... - 1 -1、程序功能:.................................................................................................................... - 1 -2、基本要求:.................................................................................................................... - 2 -3、功能要求:.................................................................................................................... - 2 -(1)信息录入功能:................................................................................................ - 2 -(2)查询功能:........................................................................................................ - 2 -(3)插入功能:........................................................................................................ - 2 -(4)删除功能:........................................................................................................ - 2 -(5)输出功能:........................................................................................................ - 2 -4、说明:............................................................................................................................ - 2 -5、输入输出的形式:........................................................................................................ - 3 -6、开发环境:.................................................................................................................... - 3 -三、概要设计:.......................................................................................................................... - 3 -四、模块图:.............................................................................................................................. - 5 -五、详细设计:.......................................................................................................................... - 5 -六、运行结果与分析:.......................................................................................................... - 10 -1 、主界面........................................................................................................................ - 10 -2.建立学生信息表............................................................................................................ - 11 -3、查询某学生的所有信息。
学生成绩管理系统(链表版)
《C语言应用》实验报告题目学生成绩管理系统(链表版)(1)能完成学生成绩的插入、查询、修改、删除、输出等功能;(2)采用单链表存储结构实现;(3)所有数据以外部文件方式保存第2章第2章总体设计2。
1 系统的程序流程图绘制一个系统的总体程序流程图,主要展示系统从开始以后,可以经过哪些流程,最后结束。
按姓名修改某位同学的成绩按姓名修改某位同学的成绩输出链表内容输出链表内容2。
2系统的全局变量和常量系统全局变量int n;char a;头文件:#include "stdio.h"#include ”time。
h"#include "string。
h”#include ”stdlib.h"#include ”conio。
h"2。
3系统的函数介绍把系统中的每个函数的原型列出来,解释一下函数的返回值及形式参数的含义;最后,再介绍一下每个函数的功能。
void Create(int n)//创建链表void List()//输出链表内容void list()//输出链表所有内容void save()//文件保存void save1() //文件保存void read()//文件读取void read1()//文件读取void SA VE(){ //保存到可浏览文件void SA VE1() //保存到可浏览文件void sort_data_copy(Lstu *p,Lstu *s)//交换排序时的值void sort()//对初始成绩进行排序void sort1()//对所有数据进行排序void search_print(Lstu *p)//输出查找信息void search_choose()//选择按分数段查找方式void search()//查找void modify_choose(Lstu *p,int n)//选择修改方式void modify()//按姓名修改void Insert()//按序号插入void del() //按姓名删除void statistics()//成绩统计int menu() //菜单(主界面)第3章第3章详细设计按函数,写出函数的原型声明,并画出每个函数的程序流程图。
“基于链表学生成绩管理系统”实验报告
“基于链表学生成绩管理系统”实验报告1. 需求分析1.1.开发背景学生成绩管理是一个学校不可缺少的部分,它的内容对于学校的管理者和学生来说都至关重要,所以一个良好的学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。
学生成绩管理系统对学校加强学生成绩管理有着极其重要的作用.学生的数量日益庞大,对于如何管理如此庞大的学生成绩数据显得更为复杂,传统的手工成绩管理不仅工作量大而且容易出现问题。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。
这些优点能够极大地提高管理者管理的效率,也是学校走向科学化、正规化管理,与世界接轨的重要条件。
因此,开发设计这样一套学生成绩管理软件成为很有必要的事情。
1.2.数据需求该学生管理系统所需要的数据有学生学号,姓名,性别,出生日期,数学,语文,英语和平均分等数据。
1.3.功能需求该学生成绩管理系统必须基于delphi编译环境采用pascal语言开发研制,针对学生成绩及其数据特点,可以全面实现对学生成绩的插入、查询、修改、排序、删除和输出等功能。
此系统可以大大减轻了工作量,减少人为的工作失误,全面提高学生成绩管理的效率,从而使学校对于学生成绩的管理水平和技术术水平跃上一个新的台阶。
2. 概要分析2.1.功能概要2.1.1.主菜单主菜单包括学生管理系统的基本功能,主要功能如图2-1-1-1所示。
图2-1-1-1 主菜单模块图2.1.2.二级菜单修改的子菜单包括姓名,出生日期,数学,英语,语文,退出等选项,具体如图2-1-2-1所示。
图2-1-2-1 子菜单模块图2.2.子程序1.procedure Inputstuinfo(var head:pointer); 2.procedure Outputstuinfo(var head:pointer); 3.procedure Sortinfo(var head:pointer); 4.procedure Sortinfotwo(var head:pointer); 5.procedure Agesexsearch(var head:pointer); 6.procedure Agesexsearch(var head:pointer);信息录入保存文件读出文件排 序查 找增加信息删除信息修改信息主菜单退 出 系 统出生日期数 学语 文英 语退 出子菜单姓 名7.procedure Modifyinfo(var head:pointer); 8.procedure Changefig;9.procedure Deleteinfo(var head:pointer); 10.procedure Increaseinfo(var head:pointer); 11.procedure Savetofile(var stuFile:text;var head:pointer); 12.procedure Outfromfile(var stuFile:text;var head:pointer);2.3.主界面和子菜单截图主菜单如图2-3-1所示。
汇编语言综合实验 --- 学生成绩排序(单链表实现)
这一部分任务是按学生总成绩由高到低进行排序。采用单链表方式,给数据元素的链指针LINK字段装填数据,使LINK字段指向它的后继数据元素。步骤如下:
Ⅰ.初始时,数组元素的每个LINK字段值为0,表示数组元素没有被选中。扫描数组元素的SUM字段,从中找到第一个最大的数,将这个数组元素设置为链表的头,保存这个数组元素的位移量,并将其LINK字段设置为1,标记这个数组元素已被选中但尚未装填链指针。
重复上述步骤直到该结构体类型数组中的最后一个节点LINK字段置为1,该节点即为单链表的链尾。
③遍历单链表,即对学生成绩信息按总成绩由高到低输出。
首先将单链表的头指针赋值给BX,依次循环COUNT(学生人数)次输出每一个数组元素的值,每次输出结束后,将BX的值加上TYPE S_ARRAY(即加16字节),BX指向下一个数组元素的首地址。
②建立单链表,即完成对学生成绩信息的降序排列。
首先从所有数组元素中找出总成绩最大的一项,将该数组元素作为单链表的头指针,保存在DX中,同时将LINK字段赋值为1;
其次,从LINK字段为0的数组元素中找到总成绩最大的一项,将该数组元素的偏移地址作为前一节点的LINK字段值,同时将该节点的LINK字段值置为1;
图1-1程序主界面:
图1-2程序二级菜单界面:
2.排序功能的实现:
图1-2输入学生成绩界面:
图1-4按总分排序输出学生成绩信息:
3.设计思路:
(1)数据定义:
一个数据元素(一个学生的数据项)应该为一个结构类型,定义如下:
STUDENT STRUC;定义学生结构体
LINK DW 0;单链表指针,指向下一个节点偏移地址
Ⅰ.将链表的头元素的位移量送到BX寄存器。
基于单链表的教务管理系统设计与实现
基于单链表的教务管理系统设计与实现随着信息化时代的到来,各个行业都开始迎合信息化的潮流,教育行业自然也不例外。
教务管理系统的出现,极大地方便了学校的管理和教育工作者的工作,提高了工作效率。
在本篇文章中,将介绍一种基于单链表的教务管理系统的设计与实现。
一、系统需求分析首先,为了能够设计一套完整的教务管理系统,必须对教务管理的各个方面进行系统地分析和了解,明确各个方面的需求点,才能够更好地满足用户的需求。
主要需求点分为以下几方面:1. 学生管理:包括学生个人信息的录入、修改、查看、删除等功能;生成学生花名册、班级名单、学生汇总表等;考试成绩的录入和查看。
2. 教师管理:包括教师个人信息的录入、修改、查看、删除等功能;生成教师工作表、教师汇总表等。
3. 课程管理:包括课程信息的录入、修改、查看、删除等功能;生成课程表等。
4. 班级管理:包括班级信息的录入、修改、查看、删除等功能;生成班级花名册、学生名单等。
5. 系统权限管理:指的是管理员对教务系统的权限进行设置和管理。
二、系统设计与实现1. 数据结构选择经过对需求分析的研究,我们发现单链表是一种很好的数据结构。
它可以方便地对学生、教师、课程、班级等各种信息进行存储和管理。
因此,我们选择使用C 语言来设计和实现这个教务管理系统,并使用单链表作为主要的数据结构。
2. 系统模块划分针对以上的需求点,我们将教务管理系统划分为学生管理模块、教师管理模块、课程管理模块、班级管理模块和系统权限管理模块。
每个模块都应该有相应的程序来进行数据的录入、修改、删除、查询、输出等操作,同时需要将不同模块中的数据进行关联,实现教务管理系统的完整功能。
3. 系统功能实现每个模块的功能实现都较为简单,但是需要注意的是,数据之间的联系与关联比较复杂。
举个例子,考试成绩记录需要与学生、课程、教师等信息进行关联,班级名单需要与学生信息、班级信息等多个数据进行关联。
在实现过程中,需要将这些数据进行适当的封装,将其关系建立在单链表节点之间,实现数据的关联和查询。
单链表的学生成绩管理系统设计实现分析
- -建筑学院?数据构造?课程设计〔论文〕基于单链表的学生成绩管理系统设计与实现Design and implementation of the system of student performance management based on single table年级: 12级学号: 121500103姓名: 徐文辉专业:计算机科学与技术指导教师: 常大俊.. -二零一三年十二月- -摘要学生成绩管理系统是典型的信息管理系统,是学校教务管理的重要组成局部,其处理信息量很大。
本课程设计是用C++实现对学生的成绩管理作一个简单的模拟,实质是建立学生成绩单链表,每条记录由XX、学号与成绩组成,即链表中每个结点由4个域组成,分别为:学号、XX、成绩、存放下一个结点地址的next域。
用菜单项选择择操作方式完成五项功能分别写成五个函数,插入学生成绩对应建立学生单链表的功能,输出全部学生成绩记录,后三个功能分别对应单链表的查询、修改与删除三大根本操作。
该系统中的数据采用线性表中的链式存储构造即单链表来存储,用构造体类型和类类型定义每个学生记录并采用外部文件方式记录数据简便数据的读取与保存。
关键词:数据构造,单链表,C语言,学生成绩管理AbstractStudent achievement management system is a typical management information system, is an important part of the school educational administration management, the large amount of information. The curriculum design is used to achieve C++ performance management for the students to make a simplesimulation, the essence is to establish students report list, each recordconsists of name,and grade, namely the linked list in each node isposed of 4 domains, respectively: next domain name, student number,grade, put down a node address the. plete the five functions were written in five function menu to select the mode of operation, into the student achievement established a single list of the output function of students, allstudents record, after the three functions corresponding to single table query,modify and delete the three basic operations. The system data in the linked storage structure of linear table is a single linked list to store, use the structure types and class types define each student records and the use of an external file to read and save data and simple data record.目录摘要IIABSTRACTIII第1章引言- 1 -1.1设计容-1-1.2设计目的-2-1.3设计目标-3-第2章系统需求与功能分析- 4 -2.1系统需求分析-4-2.2系统功能分析-5-2.3系统性能分析-6-第3章总体构造分析- 7 -3.1系统的构造分析:-7-3.2系统管理流程图:-7-第4章概要设计- 13 -第5章详细设计- 15 -第6章调试分析- 24 -第7章测试结果- 25 -第8章完毕语- 29 -参考文献- 30 -第1章引言1.1设计容在程序设计中,可以用许多种数据构造来处理数据存储,对于该学生管理系统而言线形表无疑是最好的选择,考虑到学生成绩管理系统一经建立不仅进展查询而且需要频繁的进展插入和删除,所以采用单链表存储构造实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长春建筑学院《数据结构》课程设计(论文)基于单链表的学生成绩管理系统设计与实现Design and implementation of the system of student performance management based on single table年级: 12级学号: 121500103姓名: 徐文辉专业:计算机科学与技术指导老师: 常大俊二零一三年十二月摘要学生成绩管理系统是典型的信息管理系统,是学校教务管理的重要组成部分,其处理信息量很大。
本课程设计是用C++实现对学生的成绩管理作一个简单的模拟,实质是建立学生成绩单链表,每条记录由姓名、学号与成绩组成,即链表中每个结点由4个域组成,分别为:学号、、成绩、存放下一个结点地址的next域。
用菜单选择操作方式完成五项功能分别写成五个函数,插入学生成绩对应建立学生单链表的功能,输出全部学生成绩记录,后三个功能分别对应单链表的查询、修改与删除三大基本操作。
该系统中的数据采用线性表中的链式存储结构即单链表来存储,用结构体类型和类类型定义每个学生记录并采用外部文件方式记录数据简便数据的读取与保存。
关键词:数据结构,单链表,C语言,学生成绩管理AbstractStudent achievement management system is a typical management information system, is an important part of the school educational administration management, the large amount of information. The curriculum design is used to achieve C++ performance management for the students to make a simplesimulation, the essence is to establish students report list, each recordconsists of name,and grade, namely the linked list in each node iscomposed of 4 domains, respectively: next domain name, student number,grade, put down a node address the. Complete the five functions were written in five function menu to select the mode of operation, into the student achievement established a single list of the output function of students, allstudents record, after the three functions corresponding to single table query,modify and delete the three basic operations. The system data in the linked storage structure of linear table is a single linked list to store, use the structure types and class types define each student records and the use of an external file to read and save data and simple data record.目录摘要................................................................................................................................................. II ABSTRACT ............................................................................................................................................. III 第1章引言................................................................................................................................. - 1 -1.1设计内容 (1)1.2设计目的 (2)1.3设计目标 (3)第2章系统需求与功能分析................................................................................................... - 4 -2.1系统需求分析 (4)2.2系统功能分析 (5)2.3系统性能分析 (6)第3章总体结构分析................................................................................................................. - 7 -3.1系统的结构分析: (7)3.2系统管理流程图: (7)第4章概要设计........................................................................................................................ - 13 - 第5章详细设计........................................................................................................................ - 15 - 第6章调试分析........................................................................................................................ - 24 - 第7章测试结果........................................................................................................................ - 25 - 第8章结束语 ............................................................................................................................ - 29 - 参考文献........................................................................................................................................ - 30 -第1章引言1.1设计内容在程序设计中,可以用许多种数据结构来处理数据存储,对于该学生管理系统而言线形表无疑是最好的选择,考虑到学生成绩管理系统一经建立不仅进行查询而且需要频繁的进行插入和删除,所以采用单链表存储结构实现。
这种内存的动态分配策略使我们在编写算法是无需考虑有多少空间资源可用于实现数据结构,算法在需要内存的时候向内存申请,当不需要的时候释放它。
为了简便起见,成绩管理系统记录中只包括学号、、语文成绩、数学成绩、英语成和成绩存放下一个结点地址的next域等数据项。
为学生成绩设计一个类,内中包含存储学生成绩信息的单链表以及对单链表进行各种操作的成员函数。
为各个成绩如语文成绩、数学成绩和英语成绩等数据项建立一个结构体类型,并用此结构类型对学生成绩类进行实例化。
对学生成绩信息要求完成如下功能:(1) 插入:将学生的成绩信息插入;(2) 查询:查询满足条件的学生;(3) 修改:对成绩信息的数据项进行修改;(4) 删除:将满足条件的学生信息删除;(5) 输出:将全部的学生成绩信息输出。
为了方便数据的读取与保存,我们采用外部文件来进行数据保存能实现学生信息数据的维护。
学生成绩管理是一个学校不可缺少的部分,它的内容对于学校的管理者和学生以及学生家长来说都至关重要,所以一个良好的学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。
学生成绩管理系统对学校加强学生成绩管理有着极其重要的作用.由于各个大学都在持续扩招,学生的数量日益庞大,对于如何管理如此庞大的学生成绩数据显得更为复杂,传统的手工成绩管理不仅工作量大,而且容易出现问题,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
已不能适应时代的发展。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。
例:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高管理者管理的效率,也是学校走向科学化、正规化管理,与世界接轨的重要条件。
因此,开发设计这样一套学生成绩管理软件成为很有必要的事情。
该学生成绩管理系统采用C++语言开发研制,针对学生成绩及其数据特点,可以全面实现对学生成绩的插入、查询、修改、删除和输出等功能的计算机管理。
它能使学生成绩数据的工作人员从繁重的工作中解脱出来,大大减轻了工作量,减少人为的工作失误,全面提高学生成绩管理的效率,从而使学校对于学生成绩的管理水平和技术水平跃上一个新的台阶。
此建立学生成绩信息管理系统,采用计算机对学生成绩信息进行管理,进一步提高学校现代化水平。
帮助广大成绩信息管理者提高工作效率、减少工作时间,实现学生及其家长信息查询工作流程的系统化、公平化、规范化和自动化,也为广大在教师提供便利快捷的成绩录入功能。