单链表的学生成绩管理系统设计与实现
学生成绩管理系统源代码 用单向链表实现

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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 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++语言开发研制,针对学生成绩及其数据特点,可以全面实现对学生成绩的插入、查询、修改、删除和输出等功能的计算机管理。
它能使学生成绩数据的工作人员从繁重的工作中解脱出来,大大减轻了工作量,减少人为的工作失误,全面提高学生成绩管理的效率,从而使学校对于学生成绩的管理水平和技术水平跃上一个新的台阶。
此建立学生成绩信息管理系统,采用计算机对学生成绩信息进行管理,进一步提高学校现代化水平。
帮助广大成绩信息管理者提高工作效率、减少工作时间,实现学生及其家长信息查询工作流程的系统化、公平化、规范化和自动化,也为广大在教师提供便利快捷的成绩录入功能。