超好的学生成绩管理系统实验报告顺序表链表

合集下载

学生管理系统(链表版)

学生管理系统(链表版)

福建工程学院计算机与信息科学系实验报告代码:#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include<conio.h>#define Null 0struct student{int num;char name[20];float chinese,math,english,ave,sum;struct student *next;};void print (){printf(" |------------------------------------------------|\n");printf(" | 欢迎光临学生成绩管理系统|\n");printf(" |------------------------------------------------|\n");printf(" | 1 ==> 创建学生数据|\n");printf(" | 2 ==> 载入学生数据|\n");printf(" | 3 ==> 添加学生数据|\n");printf(" | 4 ==> 查询学生数据|\n");printf(" | 5 ==> 删除学生数据|\n");printf(" | 6 ==> 统计班级人数|\n");printf(" | 7 ==> 排序|\n");printf(" | 0 ==> 退出学生管理系统|\n");printf(" |------------------------------------------------|\n");}struct student *init (int n){int i;struct student *head,*p,*s;for (i=1;i<=n;i++){if (i==1){printf("请输入第%d个学生信息:\n",i);p=(struct student *)malloc (sizeof(struct student));printf("学号\n");scanf("%d",&p->num);printf("姓名\n");scanf("%s",&p->name);printf("语文\n");scanf("%f",&p->chinese);printf("数学\n");scanf("%f",&p->math);printf("英语\n");scanf("%f",&p->english);p->sum=p->chinese+p->math+p->english;p->ave=p->sum/3;head=p;if (n==1) p->next=Null;}else{printf("请输入第%d个学生信息:\n",i);s=(struct student *)malloc (sizeof(struct student));printf("学号\n");scanf("%d",&s->num);printf("姓名\n");scanf("%s",&s->name);printf("语文\n");scanf("%f",&s->chinese);printf("数学\n");scanf("%f",&s->math);printf("英语\n");scanf("%f",&s->english);s->sum=s->chinese+s->math+s->english;s->ave=s->sum/3;p->next=s;p=s;s->next=Null;}}return head;}void insert (struct student *head){struct student *p,*pi;int xuehao;printf ("请问要在哪个学生后面插入数据(输入学号):");scanf("%d",&xuehao);pi=(struct student *)malloc (sizeof(struct student));p=head;printf("学号\n");scanf("%d",&pi->num);printf("姓名\n");scanf("%s",&pi->name);printf("语文\n");scanf("%f",&pi->chinese);printf("数学\n");scanf("%f",&pi->math);printf("英语\n");scanf("%f",&pi->english);pi->sum=pi->chinese+pi->math+pi->english;pi->ave=pi->sum/3;if (head==Null){head=pi;pi->next=Null;}else{while ((p->num!=xuehao)&&(p->next!=Null)){p=p->next;}if (p->next!=Null){pi->next=p->next;p->next=pi;}else{p->next=pi;pi->next=Null;}}}void search (struct student *head){int no;struct student *p;p=head;int n=0;printf("1 按学号查找\n");printf("2 按分数段查找\n");scanf("%d",&n);switch(n){case 1:printf("请输入要查找同学的学号:");scanf("%d",&no);while(p!=Null){if(p->num==no){printf("------------------学生成绩表-----------------------\n");printf("===================================================\n");printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");printf("===================================================\n"); printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);printf("===================================================\n");break;}p=p->next;}break;case 2:{float a,b;int choose;char c;for(;;){printf("\t|---------------------------------------|\n");printf("\t| 分数段查询|\n");printf("\t|---------------------------------------|\n");printf("\t| 1 ==> 按总分成绩查询|\n");printf("\t| 2 ==> 按语文成绩查询|\n");printf("\t| 3 ==> 按数学成绩查询|\n");printf("\t| 4 ==> 按英语成绩查询|\n");printf("\t| 0 ==> 返回上一级菜单|\n");printf("\t|---------------------------------------|\n");printf("请输入你要执行的操作:");scanf("%d",&choose);while(getchar()!='\n');switch(choose){case 1:{p=head;printf("请输入所要查找的分数段:\n");printf("请输入第一个分数:\n");scanf("%f",&a);printf("请输入第二个分数:\n");scanf("%f",&b);printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");while(p!=Null){if (p->sum>=a&&p->sum<=b){printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);}p=p->next;}}break;case 2:{p=head;printf("请输入所要查找的分数段:\n");printf("请输入第一个分数:\n");scanf("%f",&a);printf("请输入第二个分数:\n");scanf("%f",&b);printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");while(p!=Null){if (p->chinese>=a&&p->chinese<=b){printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);}p=p->next;}}break;case 3:{p=head;printf("请输入所要查找的分数段:\n");printf("请输入第一个分数:\n");scanf("%f",&a);printf("请输入第二个分数:\n");scanf("%f",&b);printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");while(p!=Null){if (p->math>=a&&p->math<=b){printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);}p=p->next;}}break;case 4:{p=head;printf("请输入所要查找的分数段:\n");printf("请输入第一个分数:\n");scanf("%f",&a);printf("请输入第二个分数:\n");scanf("%f",&b);printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");while(p!=Null){if (p->english>=a&&p->english<=b){printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);}p=p->next;}}break;case 0: return ;default: printf("\n\n您的输入有误!请重新输入:\n\n");break;}}}}}struct student *del (struct student *head,int n){struct student *p,*q;p=head;if (head==Null){printf("没有学生的资料要删除!\n");return head;}while (p->num!=n&&p->next!=Null){q=p;p=p->next;}if (p->num==n){if (p==head)head=p->next;elseq->next=p->next;free (p);}elseprintf("找不到相应的学生资料!\n");return head;}void list(struct student *head){int i=0;struct student *p;p=head;printf("------------------学生成绩表-----------------------\n");printf("===================================================\n");printf("%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n","学号","姓名","语文","数学","英语","总分","平均分");printf("===================================================\n");while (p!=Null){printf("%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",p->num,p->name,p->chinese,p->ma th,p->english,p->sum,p->ave);p=p->next;}printf("===================================================\n");printf("\n\n");}void tongji (struct student *head){int i=0;struct student *p;float chinese1=0,math1=0,english1=0;p=head;while(p!=Null){i=i+1;chinese1=chinese1+p->chinese;math1=math1+p->math;english1=english1+p->english;p=p->next;}printf("班级总人数为:%d\n",i);printf("班级语文平均分为:%4.1f\n",chinese1/i);printf("班级数学平均分为:%4.1f\n",math1/i);printf("班级英语平均分为:%4.1f\n",english1/i);printf("\n");}student *sort(student *head,int choose){student *p1,*p2=head,*pm,*px;student mid;if (!p2) return head;for(p1=p2;p1->next!=NULL;p1=p1->next){pm=p1;for(p2=p1->next;p2!=NULL;p2=p2->next)switch(choose){case 1:if (pm->num>p2->num) pm=p2;break;case 2:if (pm->sum<p2->sum) pm=p2;break;case 3:if (pm->chinese<p2->chinese) pm=p2;break;case 4:if (pm->math<p2->math) pm=p2;break;case 5:if (pm->english<p2->english) pm=p2;break;}if (pm!=p1){mid=*pm;*pm=*p1;*p1=mid;px=pm->next;pm->next=p1->next;p1->next=px;}}printf("\n排序后的成绩表为:\n");list(head);return head;}student *sort_all(student *head){int choose;for(;;){printf("\t|---------------------------------------|\n");printf("\t| 学生成绩统计排序|\n");printf("\t|---------------------------------------|\n");printf("\t| 1 ==> 按学生学号排序|\n");printf("\t| 2 ==> 按学生总分排序|\n");printf("\t| 3 ==> 按学生语文成绩排序|\n");printf("\t| 4 ==> 按学生数学成绩排序|\n");printf("\t| 5 ==> 按学生英语成绩排序|\n");printf("\t| 0 ==> 返回上一级菜单|\n");printf("\t|---------------------------------------|\n");printf("请输入你要执行的操作:");scanf("%d",&choose);while(getchar()!='\n');switch(choose){case 1:head=sort(head,choose);break;case 2:head=sort(head,choose);break;case 3:head=sort(head,choose);break;case 4:head=sort(head,choose);break;case 5:head=sort(head,choose);break;case 0:return head;default: printf("\n\n您的输入有误!请重新输入:\n\n");break;}}}void save(struct student *head){int i,j;FILE *fp;student *p;p=head;char c; //head 头指针if((fp=fopen("c:\\stu_list","wb"))==NULL){printf("Cannot open file strike any key exit!");getch();exit(0);}while(p){fwrite(p,sizeof(student),1,fp);p=p->next;}fclose(fp);}struct student* read(){int i=0,j;FILE *fp;struct student *p; //工作指针student *last,*head; //最后一项的指针head=(student*)malloc(sizeof(student));last=head;if((fp=fopen("c:\\stu_list","rb"))==NULL){printf("Cannot open file strike any key exit!");getch();exit(0);}while(!feof(fp)){p=(student*)malloc(sizeof(student));if(fread(p,sizeof(student),1,fp)==1){last->next=p;last=last->next;}}fclose(fp);return head=head->next;}int main(){FILE *fp;char ch,c;int n=0;struct student *head,*r;print();while((ch=tolower(getchar()))!='0'){switch(ch){case '1':{printf("请问有多少个学生的资料要输入?\n");scanf("%d",&n);head=init(n);list(head);save(head);break;}case '2':{head=read();list(head);break;}case '3':{insert(head);list (head);save(head);break;}case '4':{search(head);break;}case '5':{int num;printf("请输入要删除学生的学号:\n");scanf("%d",&num);head=del(head,num);list (head);save(head);break;}case '6':{tongji(head);break;}case '7':{head=read();sort_all(head);break;}default:break;}printf("\n\n\t======>按Enter键返回主菜单\n");fflush(stdin);c=getchar();system("cls");print();}}。

基于链表的学生信息管理系统实验报告

基于链表的学生信息管理系统实验报告

《C语言程序设计实训2》报告设计题目:基于链表的学生信息管理系统学院名称:信息科学技术学院专业:软件工程班级:x班姓名:xxx 学号xxx提交日期:2014年6月一、实验内容编写并调试程序,实现学校各专业班级学生信息的管理。

定义学生信息的链表结点类型,包括:学号、姓名、班级、专业、3门成绩。

二、实验要求(1)main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。

(2)定义函数CreateList:按学号由小到大,建立有序的链表。

逆序输入n 个学生信息(调用n次input),学号大的先输入,建立带头结点的单链表。

(3)定义函数Output:以指向某个学生结点的指针为参数,将学生信息表格化输出。

(4)定义函数Save:将某个学生信息存入文件。

(5)定义函数Fetch:从文件中随机读取某个学生的信息。

(6)定义函数Search_num:查找指定学号的学生,返回指向该学生结点的指针。

(7)定义函数InsertList:在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。

(8)定义函数Delete_num:从链表中删除指定学号的学生。

(9)定义函数Search_major _subject_score:查找某个专业的、某门课程的成绩小于某个分数的学生,返回指向该学生结点的指针。

(10)定义函数Delete_ major _subject:从链表中删除某个专业的、某门课程的成绩小于某个分数的学生。

三、算法流程图四、程序清单(关键语句和变量加注释)#include<>// 预编译命令#include<>#include<>struct student{int num;//学号char name[15];//姓名char major[10];//专业(computer,software,network)int classNo;//班级(1-2)int score[3];//3门课的成绩(0-2)struct student *next;};typedef struct student STU;//--------------------------------输入-------------------------------- STU *Input(){STU *p;if( (p=(STU*)malloc(sizeof(STU)))==NULL){ printf("头结点建立错误!\n");return p;}printf("请输入学生的学号:");scanf("%d",&p->num);printf("请输入学生的姓名:");scanf("%s",p->name);printf("请输入学生的专业:");scanf("%s",p->major);printf("请输入学生的班级:");scanf("%d",&p->classNo);printf("请输入学生的成绩0:");scanf("%d",&p->score[0]);printf("请输入学生的成绩1:");scanf("%d",&p->score[1]);printf("请输入学生的成绩2:");scanf("%d",&p->score[2]);return p;}//--------------------------------建立链表------------------------------ STU*CreateList(int n){struct student*head,*p,*w;int i=0;printf("\n请输入第%d个学生信息\n",n);p=Input();while(i<n){i++;if(i==1){head=p;//头结点有值p->next=NULL;}else{printf("\n请输入第%d个学生信息\n",n-i+1);w=Input();head=w;w->next=p;p=w;}}return head;}//-------------------------------输出------------------------------void Output(STU *p){printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",p->num,p->name,p->major,p->classNo,p->score[0],p->score[1],p->score[2]);}//-------------------------------输出所有---------------------------void print(STU *head){STU *p;p=head;if(head!=NULL)printf("学号\t姓名\t专业\t班级\t成绩0\t成绩1\t成绩2\t\n");while(p!=NULL){Output(p);p=p->next;}}//--------------------------------储存--------------------------------void Save(STU*p){FILE*fp;char filename[20];printf("\n请输入保存文件名:\n");gets(filename);if((fp=fopen(filename,"wb"))==NULL){printf("cannot open file\n");return;}if(p==NULL)printf("链表为空");while(p!=NULL){if((fwrite(p,sizeof(STU),1,fp))!=1)printf("\nwrite file error\n");p=p->next;}fclose(fp);}//----------------------------------文件查找--------------------------------- STU Fetch(int n){FILE*fp;struct student tem;char filename[20];printf("\n请输入打开文件名:\n");gets(filename);fp=fopen(filename,"rb");fseek(fp,(long)(n*sizeof(STU)),0);fread(&tem,sizeof(STU),1,fp);//读取fclose(fp);return tem;}//-----------------------------------查找学号------------------------------- STU *Search_num(STU *head,int number){if (head==NULL)return NULL;while(head->num!=number)//跳过不符合条件的学号{if (head->next==NULL)return NULL;head=head->next;}return head;//返回的指针名为head}//---------------------------------插入链表---------------------------------------STU*InsertList(STU*head){STU*p1,*p2,*stu;p1=p2=head;stu=(STU*)malloc(sizeof(STU));//待插入的结点printf("\n请输入要插入的学生信息\n");stu=Input();if(head==NULL)//头结点为空{head=stu;stu->next=NULL;}else{while(p1->num<stu->num&&p1->next!=NULL)//跳过不符合的结点{p2=p1;p1=p2->next;}if(p1->num>stu->num)if(p1==head)//插最前面{stu->next=head;head=stu;}else{stu->next=p1;p2->next=stu;}else{p1->next=stu;//插最后面stu->next=NULL;}}return head;}//---------------------------------------学号删除-----------------------------STU *Delete_num (STU *head,int number){STU *p1,*p2;if ( head==NULL) //头结点为空return NULL;p1=head;while(p1->num!=number)//跳过不符合的点{if (p1->next==NULL)return NULL;p2=p1;p1=p1->next;}if (p1==head) //删除学号是第一个的情况head=p1->next;elsep2->next=p1->next;free(p1);return head;}//-------------------------------------查找专业课程成绩------------------------------------ STU *Search_major_subject_score(STU *head,char *major,int number,int score) {if (head==NULL)return NULL;while(head!=NULL)if ((strcmp(major,head->major)==0) && head->score[number]<score)break;elsehead=head->next;return head;}//--------------------------------------删除专业课程成绩--------------------------------------STU *Delete_major_subject(STU *head,char *major,int number,int score){STU *p=NULL;p=Search_major_subject_score(head,major,number,score);//先查找if (p==NULL)return p;elsep=Delete_num(head,p->num);//再删除return p;}//---------------------------------------------主函数------------------------------------------void main (){STU *Head = NULL;int id,num,sco;char filename[10];STU *p = NULL;STU stu;while(1){printf("***********************************************************************\n");printf("* 欢迎使用学生成绩管理系统*\n");printf("***********************************************************************\n");printf("1-建立有序的链表2-信息存盘\n");printf("3-从文件中随机读取某个学生的信息4-查找学号学生,返回该学生结点指针\n");printf("5-输入一个学生信息插入相应位置6-从链表中删除指定学号的学生\n");printf("7-查找某专业某课程成绩小于某分数的学生,返回指向该学生结点的指针\n");printf("8-删除某个专业的、某门课程的成绩小于某个分数的学生\n");printf("9-将学生信息表格化输出\n\n");printf("**********************输入相应编号运行系统*****************************\n");scanf(" %d",&id);if((id<1)||(id>9))break;switch (id){case 1:{printf("请输入学生数:");scanf(" %d",&num);Head = CreateList(num);break;}case 2:{if (Head==NULL){printf("链表未建立!\n");break;}getchar();Save(Head);break;}case 3:{printf("\n请问要读取第几位学生信息\n");scanf("%d",&id);getchar();stu=Fetch(id);printf("学号\t姓名\t专业\t班级\t成绩0\t成绩1\t成绩2\t\n");Output(&stu);break;}case 4:{if (Head==NULL){printf("链表未建立!\n");break;}printf("请输入要查找的学生的学号:");scanf(" %d",&num);p = Search_num(Head,num);if (p==NULL)printf("查找失败!\n");else{printf("学号\t姓名\t专业\t班级\t成绩0\t成绩1\t成绩2\t\n");Output(p);}break;}case 5:{Head=InsertList(Head);break;}case 6:{if ( Head == NULL){printf("链表未建立!\n");break;}printf("请输入要删除的学生的学号:");scanf(" %d",&num);p = Delete_num(Head,num);if ( p==NULL)printf("删除成员失败!\n");else Head = p;break;}case 7:{if (Head==NULL){printf("链表未建立!\n");break;}printf("请输入学生的专业:");scanf("%s",filename);printf("请输入成绩序号(0 <= n <=2):");scanf(" %d",&num);if (num<0||num>2){printf("成绩序号输入错误");break;}printf("请输入分数:");scanf(" %d",&sco);p=Search_major_subject_score(Head,filename,num,sco);if ( p == NULL)printf("查找失败\n");else{ printf("学号\t姓名\t专业\t班级\t成绩0\t成绩1\t成绩2\t\n");Output(p);}break;}case 8:{if (Head==NULL){printf("链表未建立!\n");break;}printf("请输入学生的专业:");scanf("%s",filename);printf("请输入成绩序号(0 <= n <=2):");scanf(" %d",&num);if (num <0 || num > 2){printf("成绩序号输入错误");break;}printf("请输入分数:");scanf(" %d",&sco);p=Delete_major_subject(Head,filename,num,sco);if (p==NULL)printf("删除失败\n");elseHead = p;break;}case 9:{if (Head==NULL){printf("链表未建立!\n");break;}print(Head);break;}default:{break;}}}}五、程序测试(输入、输出的截图及文件的内容)六、实验总结(实验过程中遇到的具体问题,如何解决,不要说空话、套话,雷同扣分)。

基于链表的学生信息管理系统实验报告

基于链表的学生信息管理系统实验报告
printf("**********************输入相应编号运行系统*****************************\n");
scanf("%d",&id);
if((id<1)||(id>9))
break;
break;
else
head=head->next;
returnhead;
}
//--------------------------------------删除专业课程成绩--------------------------------------
STU*Delete_major_subject(STU*head,char*major,intnumber,intscore)
printf("请输入学生的专业:");
scanf("%s",p->major);
printf("请输入学生的班级:");
scanf("%d",&p->classNo);
printf("请输入学生的成绩0:");
scanf("%d",&p->score[0]);
printf("请输入学生的成绩1:");
{
structstudent*head,*p,*w;
inti=0;
printf("\n请输入第%d个学生信息\n",n);
p=Input();
while(i<n)
{
i++;
if(i==1)
{
head=p;//头结点有值

顺序表的操作实验报告

顺序表的操作实验报告

顺序表的操作实验报告顺序表的操作实验报告一、引言顺序表是一种常见的数据结构,它在计算机科学中被广泛应用。

本实验旨在通过实际操作顺序表,探索其基本操作和性能。

二、实验目的1. 理解顺序表的基本原理和数据结构;2. 掌握顺序表的插入、删除、查找等操作;3. 分析顺序表操作的时间复杂度。

三、实验过程1. 初始化顺序表:首先,我们创建一个空的顺序表,并设定其初始长度为10。

2. 插入元素:在顺序表中插入若干个元素,观察插入操作的效果。

我们可以通过在表尾插入元素,或者在表中间插入元素来测试插入操作的性能。

3. 删除元素:从顺序表中删除指定位置的元素,并观察删除操作的效果。

我们可以选择删除表尾元素或者表中间元素来测试删除操作的性能。

4. 查找元素:在顺序表中查找指定元素,并返回其位置。

我们可以选择查找表头元素、表尾元素或者表中间元素来测试查找操作的性能。

5. 扩容操作:当顺序表的长度不足以容纳更多元素时,我们需要进行扩容操作。

在实验中,我们可以在插入元素时观察到扩容操作的效果。

四、实验结果与分析1. 初始化顺序表:成功创建了一个长度为10的空顺序表。

2. 插入元素:通过在表尾插入10个元素,我们观察到插入操作的时间复杂度为O(1)。

然而,当我们在表中间插入元素时,需要将插入位置之后的所有元素后移,时间复杂度为O(n)。

3. 删除元素:从表尾删除元素的时间复杂度为O(1),而从表中间删除元素需要将删除位置之后的所有元素前移,时间复杂度为O(n)。

4. 查找元素:在顺序表中查找元素的时间复杂度为O(n),因为需要逐个比较每个元素。

5. 扩容操作:当顺序表的长度不足以容纳更多元素时,我们需要进行扩容操作。

在实验中,我们观察到扩容操作的时间复杂度为O(n),因为需要将原有元素复制到新的更大的空间中。

五、实验总结通过本次实验,我们深入了解了顺序表的基本操作和性能。

顺序表的插入、删除和查找操作的时间复杂度与操作位置有关,需要注意选择合适的操作位置以提高效率。

学生成绩管理系统(链表版)

学生成绩管理系统(链表版)

《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章详细设计按函数,写出函数的原型声明,并画出每个函数的程序流程图。

(顺序表)学生成绩管理系统

(顺序表)学生成绩管理系统
如下图2-0所示
图2-0
(9)SaveFile()保存函数,对所有操作产生的变化进行文件保存
图2-1
六、调试与测试
(1)在主函数调用各个功能模块函数,对各个函数进行测试。
(2)OpenList()
在主函数中对线性表初始化并用malloc函数分配空间,随后调用文件读取函数,进行读取,若有错误操作则会显示退出程序。在此系统操作中于我而言的难点首先是如果给线性表分配空间的问题,在起初未分配完空间,连读取文本文件都是十分困难,更何谈后面的步骤,但是经过我多方面专研,并不断尝试使用malloc函数,最终完善此功能并予以实现
④删除操作:在此操作中,首先输入需要删除的学生数据,然后进行位置i的定位,选择删除,然后选择是否继续操作,并显示所有信息。
⑤更新操作:根据第二步的查找操作选择,共有5种查找方式,随后找到该条学生记录,随后任选所要更改的学生9类数据中的数据,并选择是否继续或退出程序
⑥排序操作:根据总分采用直接插入排序、选择排序、冒泡排序和编号顺序排序等排序算法对学生进行排序。
《算法与数据结构课程设计》报告
课 设题 目
学生成绩管理系统
学院
班 级
学 生 姓 名
学 号
序 号
指 导 教 师
时 间
2019.1.12
一、课程设计的目的
(1)进一步熟悉VC++或其他开发环境,熟悉用C或其他语言完成一个应用程序的设计过程,掌握有关编辑、调试和整合程序的方法和技巧。
(2)通过此设计,了解《算法与数据结构》课程中线性表、图的逻辑结构和物理结构,各种排序算法的过程和算法的实现;掌握有关线性表、图在不同存储形式下各种操作的实现,以及各种排序算法的实现;体会数据结构在解决现实问题中的作用和重要性。

数据结构顺序表链表试验报告

数据结构顺序表链表试验报告

数据结构顺序表链表试验报告数据结构试验报告一、引言数据结构是计算机科学中非常重要的一个概念,它用于组织和存储数据,以便能够高效地进行检索和操作。

顺序表和链表是两种常见的数据结构,它们在实际应用中都有各自的优势和局限性。

本报告将对顺序表和链表进行试验比较,以评估它们在不同场景下的性能和适合性。

二、实验目的本次试验的目的是比较顺序表和链表在插入、删除和查找操作上的性能差异,并分析其时间复杂度和空间复杂度。

通过实验结果,可以对不同场景下选择合适的数据结构提供参考。

三、实验内容1. 顺序表实验a. 创建一个包含100个元素的顺序表;b. 在表尾插入一个元素;c. 在表头插入一个元素;d. 在表的中间位置插入一个元素;e. 删除表尾的一个元素;f. 删除表头的一个元素;g. 删除表的中间位置的一个元素;h. 查找一个元素;i. 遍历整个顺序表。

2. 链表实验a. 创建一个包含100个节点的链表;b. 在链表尾部插入一个节点;c. 在链表头部插入一个节点;d. 在链表的中间位置插入一个节点;e. 删除链表尾部的一个节点;f. 删除链表头部的一个节点;g. 删除链表的中间位置的一个节点;h. 查找一个节点;i. 遍历整个链表。

四、实验结果与分析1. 顺序表实验结果a. 在表尾插入一个元素的平均时间为0.1ms;b. 在表头插入一个元素的平均时间为0.2ms;c. 在表的中间位置插入一个元素的平均时间为0.5ms;d. 删除表尾的一个元素的平均时间为0.1ms;e. 删除表头的一个元素的平均时间为0.2ms;f. 删除表的中间位置的一个元素的平均时间为0.5ms;g. 查找一个元素的平均时间为1ms;h. 遍历整个顺序表的平均时间为10ms。

2. 链表实验结果a. 在链表尾部插入一个节点的平均时间为0.2ms;b. 在链表头部插入一个节点的平均时间为0.1ms;c. 在链表的中间位置插入一个节点的平均时间为0.5ms;d. 删除链表尾部的一个节点的平均时间为0.2ms;e. 删除链表头部的一个节点的平均时间为0.1ms;f. 删除链表的中间位置的一个节点的平均时间为0.5ms;g. 查找一个节点的平均时间为2ms;h. 遍历整个链表的平均时间为5ms。

顺序表,链表实验报告.总结

顺序表,链表实验报告.总结

顺序表,链表实验报告.总结实验报告实验目的:学生管理系统(顺序表)实验要求:1.建表2.求表长3.插入4.查找5.删除6.列表7.退出源程序:#include#include#include#define MaxSize 1000typedef struct{char xh[40];char xm[40];int cj;}DataType; //学生的结构typedef struct {DataType data[MaxSize]; //定义表的数据类型int length; //数据元素分别放置在data[0]到data[length-1]当中} SqList; //表的结构void liebiao(SqList *L) //建立表格{int k,n;char q;printf("请输入,输入学生的个数:\n");fflush(stdin);scanf("%d",&n);for(k=0;k<=n-1;k++){printf("请输入学生学号\n");scanf("%s",L->data[k].xh);printf("请输入学生名字\n");scanf("%s",L->data[k].xm);printf("请输入学生成绩\n");scanf("%d",&L->data[k].cj);}L->length=n;}void qb(SqList *L) //全部输出{int k,w;for(k=0;klength;k++){w=k+1;printf("第%d位学生:",w);printf("%s %s %d\n",L->data[k].xh,L->data[k].xm,L->da ta[k].cj);}}int cr(SqList *L,DataType *xs,int i) //插入信息{int j;if(L->length==MaxSize){printf("没有!");return 0;}else if((i<0)||(i>L->length)){printf("程序溢出,不符合");return 0;}else{for(j=L->length-1;j>=i;j--){strcpy(L->data[j+1].xh,L->data[j].xh); strcpy(L->data[j+1].xm,L->data[j].xm); L->data[j+1].cj=L->data[j].cj;}strcpy(L->data[i].xh,xs->xh);strcpy(L->data[i].xm,xs->xm);L->data[i].cj=xs->cj;L->length=L->length+1;}return 0;}int cz(SqList *L) //查找信息{char xh[40];char xm[40];int cj;int i=0,u;printf(" 1、按学号查询 \n");printf(" 1、按姓名查询 \n");printf(" 1、按成绩查询 \n");printf("请选择:");fflush(stdin);scanf("%d",&u);if (u==1){printf("请输入要查找学生的学号:"); scanf("%s",xh);for(i=0;ilength;i++){if(strcmp(L->data[i].xh,xh)==0) return i;}}if (u==2){printf("请输入要查找学生的姓名:"); scanf("%s",xm);for(i=0;ilength;i++){if(strcmp(L->data[i].xm,xm)==0) return i;}}if (u==3){printf("请输入要查找学生的成绩:"); scanf("%s",cj);for(i=0;ilength;i++){if(L->data[i].cj,&cj)return i;}}return -1;//*如果没找到,返回-1}int cz2(SqList *L) //删除查找的函数{char xh[40];char xm[40];int i=0,h;printf(" 1、按学号删除 \n");printf(" 2、按姓名删除 \n");printf("请选择:");fflush(stdin);scanf("%d",&h);if (h==1){printf("请输入要删除学生的学号:");scanf("%s",xh);for(i=0;ilength;i++){if(strcmp(L->data[i].xh,xh)==0) //判断输入和已知学号一样不return i;}}else if (h==2){printf("请输入要删除学生的姓名:");scanf("%s",xm);for(i=0;ilength;i++){if(strcmp(L->data[i].xm,xm)==0) //判断输入姓名和已知姓名一样不return i;}}return -1;}void sc(SqList *L) //删除函数{int i,j;printf("请先选择您要删除的学生信息的方式:\n");scanf("%d",&j);i=cz2(L);if(i==-1){printf("没有查到要删除的学生信息");return;}for(j=i;jlength;j++) // 要删除学生以后的学生整体上调一位{L->data[j].cj=L->data[j+1].cj; //就是后一个覆盖了前一个strcpy(L->data[j].xh,L->data[j+1].xh);strcpy(L->data[j].xm,L->data[j+1].xm);}L->length--;printf("该学生信息已被删除!\n");}int bc(SqList *L){return (L->length);}int main() //主体大函数{int i,k;SqList *L; //定义顺序表的指针DataType *xs;L=(SqList *)malloc(sizeof(SqList)*MaxSize); char q;ee:rewind(stdin);{printf(" 学生管理系统 \n"); //函数的各个结构printf(" \n");printf(" \n");printf(" \n");printf(" 建立表格请输入1 \n");printf(" 求表长请输入2 \n");printf(" 插入请输入3 \n");printf(" 查找请输入4 \n");printf(" 删除请输入5 \n");printf(" 列表请输入6 \n");printf(" 退出请按0 \n");printf(" 请输入");scanf("%c",&q);}if(q=='1'){rewind(stdin);liebiao(L);goto ee;}if(q=='2'){rewind(stdin);bc(L);printf("共%d个学生\n",L->length);goto ee;}if(q=='3'){rewind(stdin);printf(" 插入 \n");printf("\t\t 请输入要添加的学生信息: \n"); xs=(DataType *)malloc(sizeof(DataType)); printf("请输入学生学号\n");scanf("%s",xs->xh);printf("请输入学生名字\n");scanf("%s",xs->xm);printf("请输入学生成绩\n");scanf("%d",&xs->cj);printf("请输入要插入的位置:\n"); rewind(stdin);scanf("%d",&i);cr(L,xs,i);goto ee;}if(q=='4'){rewind(stdin);printf(" 查找 \n");printf(" 查询学生信息 \n");i=cz(L);if(i!=-1){printf("%s %s %d\n",L->data[i].xh,L->data[i].x m,L->data[i].cj);}else{printf("信息不存");}goto ee;}if(q=='5'){rewind(stdin);printf(" 删除 \n"); printf(" 删除学生信息 \n");sc(L);goto ee;}if(q=='6'){rewind(stdin);printf(" 列表 \n");qb(L);goto ee;}if(q=='0') {printf("谢谢使用\n");}if(!(q=='1'||q=='2'||q=='3'||q=='4'||q=='5'||q=='5'||q=='0 ')) {goto ee;}system ("pause"); return 0;}主程序:输入1--6n=1 n=2n=3n=4n=5n=6退出建表求表长插入查找删除列表建表:是否输入学生个数n ,变量k k=0; k<=n-1;输入学号,姓名,成绩k=k+1 结束输入查找学号n,变量k k=0n=k是否k=k+1输出是否是否输入插入位置n 表长L 变量kn<=Lk=0n=kk=k+1strcpy(L->data[j+1].xh,L->data[j].xh);strcpy(L->data[j+1].xm,L->data[j].xm);L->data[j+1].cj=L->data[j].cj输入错误结束是否否是输入删除的位置n 变量k 表长Ln<=Lk=0n=k k=k+1strcpy(L->data[j].xh,L->data[j-1].xh);strcpy(L->data[j].xm,L->data[j-1].xm); L->data[j].cj=L->data[j-1].cj输入错误结束。

学生信息管理系统-顺序表链表(数据结构第一次作业)

学生信息管理系统-顺序表链表(数据结构第一次作业)

学⽣信息管理系统-顺序表链表(数据结构第⼀次作业)实验⽬的:1 、掌握线性表的定义;2 、掌握线性表的基本操作,如建⽴、查找、插⼊和删除等。

实验内容:定义⼀个包含学⽣信息(学号,姓名,成绩)的的顺序表和链表,使其具有如下功能:(1) 根据指定学⽣个数,逐个输⼊学⽣信息;(2) 逐个显⽰学⽣表中所有学⽣的相关信息;(3) 根据姓名进⾏查找,返回此学⽣的学号和成绩;(4) 根据指定的位置可返回相应的学⽣信息(学号,姓名,成绩);(5) 给定⼀个学⽣信息,插⼊到表中指定的位置;(6) 删除指定位置的学⽣记录;(7) 统计表中学⽣个数。

参考信息:Definition of structure student :typedef struct {char no[8]; //8 位学号char name[20]; // 姓名int price; // 成绩}Student;Definition of sequential list:typedef struct {Student *elem; // 指向数据元素的基地址int length; // 线性表的当前长度}SqList ;Definition of linked list :typedef struct LNode{Student data; // 数据域struct LNode *next; // 指针域}LNode,*LinkList;实验要求:(1) 程序要添加适当的注释,程序的书写要采⽤缩进格式。

(2) 程序要具在⼀定的健壮性,即当输⼊数据⾮法时,程序也能适当地做出反应,如插⼊删除时指定的位置不对等等。

(3) 程序要做到界⾯友好,在程序运⾏时⽤户可以根据相应的提⽰信息进⾏操作。

(4) 上传源程序到课堂派。

顺序表的源程序保存为SqList.cpp,链表的源程序保存为LinkList.cpp。

顺序表的源程序:#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#define OK 1#define ERROR 0#define OVERFLOW -2#define MAXSIZE 100typedef int Status; // 定义函数返回值类型typedef struct{char no[10]; // 学号char name[20]; // 姓名int score; // 成绩}student;typedef student ElemType;typedef struct{ElemType *elem; // 存储空间的基地址int length; // 当前长度}SqList;Status InitList(SqList *L) // 构造空的顺序表 Lif(!L->elem) exit(OVERFLOW);L->length=0;return OK;}ElemType GetElem(SqList &L,int i) // 访问顺序表,找到 i位置,返回给 e{return L.elem[i];}int Search(SqList &L,char str[]) // 根据名字查找,返回该同学在顺序表中的编号{for(int i=1;i<=L.length;i++){if(strcmp(L.elem[i].name,str)==0)return i;}return0;}Status ListInsert(SqList &L,int i,ElemType e) // 在 i位置插⼊某个学⽣的信息{if((i<1)||(i>L.length+1)) return ERROR;if(L.length==MAXSIZE) return ERROR;for(int j=L.length;j>=i;j--){L.elem[j+1]=L.elem[j];}L.elem[i]=e;++L.length;return OK;}Status ListDelete(SqList &L,int i) // 在顺序表中删除 i位置的学⽣信息{if((i<1)||(i>L.length)) return ERROR;for(int j=i;j<=L.length;j++){L.elem[j]=L.elem[j+1];}--L.length;return OK;}void Input(ElemType *e){printf("姓名:"); scanf("%s",e->name);printf("学号:"); scanf("%s",e->no);printf("成绩:"); scanf("%d",&e->score);printf("输⼊完成\n\n");}void Output(ElemType *e){printf("姓名:%-20s\n学号:%-10s\n成绩:%-10.2d\n\n",e->name,e->no,e->score); }int main(){SqList L;ElemType a,b,c,d;printf("------------10.2.34版-----------\n");puts("1. 构造顺序表");puts("2. 录⼊指定⼈数的学⽣信息");puts("3. 显⽰学⽣表中的所有信息");puts("4. 根据姓名查找该学⽣,并返回学号和成绩");puts("5. 根据某指定位置显⽰该学⽣信息");puts("6. 在指定位置插⼊学⽣信息");puts("7. 在指定位置删除学⽣信息");puts("8. 统计学⽣个数");puts("0. 退出");printf("------------------------\n");int x,choose;while(1){puts("请输⼊你要选择的功能前的序号:");scanf("%d",&choose);if(choose==0) break;switch(choose){case1:if(InitList(&L))printf("成功建⽴顺序表\n\n");printf("顺序表建⽴失败\n\n");break;case2:printf("请输⼊要录⼊学⽣的⼈数(⼩于100):"); scanf("%d",&x);for(int i=1;i<=x;i++){printf("第%d个学⽣:\n",i);Input(&L.elem[i]);}L.length=x;puts("");break;case3:for(int i=1;i<=x;i++){a=GetElem(L,i);Output(&a);}break;case4:char s[20];printf("请输⼊要查找的学⽣姓名:");scanf("%s",s);if(Search(L,s))Output(&L.elem[Search(L,s)]);elseputs("对不起,查⽆此⼈");puts("");break;case5:printf("请输⼊要查询的位置:");int id1;scanf("%d",&id1);b=GetElem(L,id1);Output(&b);break;case6:printf ("请输⼊要插⼊的位置:");int id2;scanf("%d",&id2);printf("请输⼊学⽣信息:\n");Input(&c);if(ListInsert(L,id2,c)){x++;puts("插⼊成功");puts("");}else{puts("插⼊失败");puts("");}break;case7:printf("请输⼊要删除的位置:");int id3;scanf("%d",&id3);if(ListDelete(L,id3)){x--;puts("删除成功");puts("");}else{puts("删除失败");puts("");}break;case8:printf("已录⼊的学⽣个数为:%d\n\n",L.length);break;}}printf("\n\n谢谢您的使⽤,请按任意键退出\n\n\n");system("pause");return0;}#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#define OK 1#define ERROR 0#define OVERFLOW -2#include<iostream>using namespace std;typedef int Status; // 定义函数返回值类型typedef struct{char no[10]; // 学号char name[20]; // 姓名double score; // 成绩}student;typedef student ElemType;typedef struct LNode{ElemType data; // 数据域struct LNode *next; //指针域}LNode,*LinkList;Status InitList(LinkList &L) // 构造空链表 L{L=(struct LNode*)malloc(sizeof(struct LNode));L->next=NULL;return OK;}Status GetElem(LinkList L,int i,ElemType &e) // 访问链表,找到 i位置的数据域,返回给 e {LinkList p;p=L->next;int j=1;while(p&&j<i){p=p->next;++j;}if(!p||j>i) return ERROR;e=p->data;return OK;}Status Search(LNode L,char str[],LinkList &p) // 根据名字查找{p=L.next;while(p){if(strcmp(p->,str)==0)return OK;p=p->next;}return ERROR;}Status ListInsert(LinkList L,int i,ElemType e) // 在 i个位置插⼊某个学⽣的信息{LinkList p,s;p=L;int j=0;while(p&&j<i-1){p=p->next;++j;}if(!p||j>i-1) return ERROR;s=(struct LNode*)malloc(sizeof(LNode));s->data=e;s->next=p->next;p->next=s;return OK;}Status ListDelete(LinkList p,int i) // 删除 i位置的学⽣信息{int j=0;while((p->next)&&(j<i-1))++j;}if(!(p->next)||(j>i-1)) return ERROR;LinkList q;q=p->next;p->next=q->next;delete q;return OK;}void Input(ElemType *e){cout<<"姓名:";cin>>e->name;cout<<"学号:";cin>>e->no;cout<<"成绩:";cin>>e->score;cout<<"完成输⼊\n\n";}void Output(ElemType *e){printf("姓名:%-20s\n学号:%-10s\n成绩:%-10.2lf\n\n",e->name,e->no,e->score); }int main(){LNode L;LinkList p;ElemType a,b,c,d;cout<<"------------10.2.34版 -----------\n";cout<<"1. 构造顺序表\n";cout<<"2. 录⼊指定⼈数的学⽣信息\n";cout<<"3. 显⽰学⽣表中的所有信息\n";cout<<"4. 根据姓名查找该学⽣,并返回学号和成绩\n";cout<<"5. 根据某指定位置显⽰该学⽣信息\n";cout<<"6. 在指定位置插⼊学⽣信息\n";cout<<"7. 在指定位置删除学⽣信息\n";cout<<"8. 统计学⽣个数\n";cout<<"0. 退出\n";cout<<"------------------------\n";int n,choose=-1;while(choose!=0){puts("请输⼊你要选择的功能前的序号:");cin>>choose ;if(choose==0)break;else if (choose==1){if(InitList(p))cout<<"建⽴顺序表成功\n";elsecout<<"建⽴顺序表失败\n";}else if (choose==2){cout<<"将要输⼊学⽣的⼈数:";cin>>n;for(int i=1;i<=n;i++){printf("第%d个学⽣:\n",i);Input(&a);ListInsert(&L,i,a);}}else if (choose==3){for(int i=1;i<=n;i++){GetElem(&L,i,b);Output(&b);}}else if (choose==4)cout<<"请输⼊要查找的学⽣姓名:";cin>>s;if(Search(L,s,p))Output(&(p->data));elsecout<<"对不起,查⽆此⼈";puts("");}else if (choose==5){cout<<"请输⼊要查询的位置:";int id1;cin>>id1;GetElem(&L,id1,c);Output(&c);}else if (choose==6){cout<<"请输⼊要插⼊的位置:";int id2;cin>>id2;cout<<"请输⼊学⽣信息:\n";Input(&d);if(ListInsert(&L,id2,d)){n++;cout<<"插⼊成功"; ;puts("");}else{cout<<"插⼊失败";puts("");}}else if (choose==7){cout<<"请输⼊要删除的位置:";int id3;cin>>id3;if(ListDelete(&L,id3)){n--;cout<<"删除成功";puts("");}else{cout<<"删除失败";puts("");}}else if (choose==8){cout<<"已录⼊的学⽣个数为:"<<n<<endl;break;}}cout<<"\n\n谢谢您的使⽤,请按任意键退出\n\n\n"; system("pause");return0;}。

顺序表的实验报告

顺序表的实验报告

顺序表的实验报告顺序表的实验报告一、引言顺序表是一种常见的数据结构,它能够以连续的存储空间来存储数据,并且能够快速地进行插入、删除和查找操作。

在本次实验中,我们将通过实际操作和观察,深入了解顺序表的特点和使用方法。

二、实验目的1. 掌握顺序表的定义和基本操作;2. 熟悉顺序表的插入、删除和查找操作;3. 比较不同操作在顺序表中的时间复杂度。

三、实验内容本次实验主要包括以下几个方面的内容:1. 顺序表的初始化:通过调用初始化函数,创建一个空的顺序表;2. 顺序表的插入操作:向顺序表中插入若干个元素,并观察插入后的顺序表状态;3. 顺序表的删除操作:从顺序表中删除指定位置的元素,并观察删除后的顺序表状态;4. 顺序表的查找操作:查找指定元素在顺序表中的位置,并观察查找结果。

四、实验步骤1. 初始化顺序表:调用初始化函数,创建一个空的顺序表;2. 插入操作:依次向顺序表中插入元素,观察插入后的顺序表状态;3. 删除操作:从顺序表中删除指定位置的元素,观察删除后的顺序表状态;4. 查找操作:查找指定元素在顺序表中的位置,观察查找结果。

五、实验结果与分析通过实验操作和观察,我们得到了以下实验结果:1. 初始化顺序表后,顺序表为空,长度为0;2. 在插入操作中,我们成功向顺序表中插入了若干个元素,并且顺序表的长度随之增加;3. 在删除操作中,我们成功删除了指定位置的元素,并且顺序表的长度随之减少;4. 在查找操作中,我们成功找到了指定元素在顺序表中的位置,并且返回了正确的结果。

根据实验结果,我们可以得出以下结论:1. 顺序表的插入和删除操作都能够在常数时间内完成,时间复杂度为O(1);2. 顺序表的查找操作的时间复杂度为O(n),其中n为顺序表的长度。

六、实验总结通过本次实验,我们深入了解了顺序表的定义、基本操作以及时间复杂度。

顺序表作为一种常见的数据结构,在实际应用中具有广泛的用途。

掌握了顺序表的使用方法,我们能够更加高效地处理各种数据操作。

c学生信息管理系统(链表文件)实验报告

c学生信息管理系统(链表文件)实验报告

学生信息管理系统XX大学二○一二~二○一三学年第二学期xxxxxxx学院面向对象C++语言课程设计报告课程名称:面向对象C++语言课程设计班级:____学号:____________________姓名:_________指导教师:______________________二○一三年六月目录一、系统需求与功能分析 (3)1.1 系统需求分析 (3)1.2系统功能分析 (3)1.3系统性能分析 (4)二、总体结构设计 (5)2.1系统的结构设计 (5)2.2系统管理流程图 (5)三、系统详细设计和系统实现 (7)四、系统测试 (13)五、测试结果 (14)六、心得体会 (19)七、附录 (20)附录一:源程序清单 (20)附录二:运行结果 (32)一、系统需求与功能分析1.1 系统需求分析(1)能完成学生信息的录入,插入、修改、删除、输出、查询等功能;(2)采用单链表存储结构实现;(3) 所有数据以外部文件方式保存。

1.2系统功能分析(1)要设计一个学生信息管理系统,其功能包括:①录入函数Add():将学生信息按尾插法插入到链表中;②插入函数Insert():根据所给学号作为插入位置,在其后插入信息;③修改函数Modify():修改指定的学生信息;④删除函数Delete():当需要删除的学号和姓名一致时则删除对应的学生记录;⑤输出函数Show():显示全部学生信息;⑥查询函数Search():分别可以按学号和按姓名进行学生信息查询;⑦菜单函数Menu():为程序的菜单函数为实现各种功能提供便捷;⑧读取数据函数Read():从外部文件读取学生信息信息;⑨保存数据函数Save():将数据保存到外部文件中。

(2)线性表的链接存储结构称为单链表,单链表使用一组任意的存储单元存放线性表的元素,这组存储单元可以连续也可以不连续,甚至可以零散分布在内存中的任意位置。

为了正确表示元素之间逻辑关系,每个存储单元在存储数据元素的同时,还必须存储其后继元素所在地址信息,这个地址信息称为指针,这两部分组成了数据元素的存储映像,称为结点,结点结构如图 1.1所示。

链表的基本操作实验报告

链表的基本操作实验报告

链表的基本操作实验报告链表的基本操作实验报告引言:链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

链表相较于数组拥有更灵活的操作,能够动态地增删节点。

本实验旨在通过实际操作链表,加深对链表基本操作的理解和掌握。

实验目的:1. 理解链表的基本概念和结构;2. 学会链表的插入、删除和遍历操作;3. 掌握链表的相关算法。

实验过程:1. 创建链表首先,我们需要创建一个链表。

链表可以是单链表、双链表或循环链表,本次实验我们选择创建一个单链表。

创建链表的过程如下:(1)定义一个链表的节点结构,包含数据和指向下一个节点的指针;(2)创建头节点,并将头节点的指针指向NULL,表示链表为空。

2. 插入节点链表的插入操作可以在链表的任意位置插入节点。

我们可以选择在链表的头部、尾部或指定位置插入节点。

下面以在链表头部插入节点为例,介绍插入节点的过程:(1)创建一个新节点,设置新节点的数据;(2)将新节点的指针指向原头节点;(3)将头节点的指针指向新节点,完成插入操作。

3. 删除节点链表的删除操作可以删除链表中的任意节点。

同样,我们可以选择删除链表的头部、尾部或指定位置的节点。

以下是删除链表头部节点的步骤:(1)将头节点的指针指向下一个节点,跳过原头节点;(2)释放原头节点的内存空间。

4. 遍历链表链表的遍历操作用于访问链表中的每个节点。

通过遍历链表,我们可以获取链表中的所有数据或执行特定的操作。

链表的遍历操作如下:(1)从链表的头节点开始,依次访问每个节点;(2)对每个节点执行相应的操作,如打印节点的数据。

实验结果:通过以上实验过程,我们成功地创建了一个链表,并实现了链表的插入、删除和遍历操作。

链表的基本操作能够灵活地处理数据,适用于各种场景。

链表的插入和删除操作可以在O(1)时间内完成,相较于数组的插入和删除操作具有更高的效率。

实验总结:链表作为一种常见的数据结构,具有灵活性和高效性的特点。

学生成绩管理系统实验报告

学生成绩管理系统实验报告

软件工程实验报告学校:渤海大学班级:11-6学号:*********姓名:***一.需求分析1 系统需求成绩管理成为学校教学管理中十分重要又相当复杂的管理工作之一,单纯的采用传统的手工处理已经不符合教育和管理的要求,而计算机具有运算速度快,处理能力强等特点,很自然地进入到这一应用领域中。

因此为了保证学校的信息流畅,工作高效,有必要设计一个学生成绩管理系统。

这不但能使教务人员从复杂的成绩管理中解脱出来,而且对于推动教学的发展也起到非常重要的作用。

学校学生成绩管理工作都是采用传统的手工管理,这各传统人工的管理方式存在着许多缺点,如:效率低,保密性差,一方面导致教师,学生成绩情况不了解,教师对成绩管理工作倍感头痛,因为时间一长,将产生大量的文件和数据,这对于查找,更新和维护都带来了不少的困难,耗费大量劳动力,难于避免错误的产生。

选择Eclipse来开发学生成绩管理系统,由于以上的优点,帮助广大教师提高工作效率,实现学生成绩信息管理工作流程的系统化、规范化和自动化,所以选择Eclipse来开发学生成绩管理系统。

需求的收集及分析:学生成绩管理系统应该完成以下两个方面的内容:学生档案资料的管理、学生成绩的管理(包括必修课和选修课),每个内容均需要提供添加、修改和查询的功能。

学生成绩管理系统在开发过程中收集到的客户需求文档记录的关键部分可概括为以下几个部分:1、可能会使用到该系统的用户:系统管理员、教师、学生;2、各类用户的权限不一样。

例如系统管理员可以添加、修改、查询学生档案资料和学生的成绩,学生只能查询自己的档案、成绩以及一些公共的信息,教师可以发布学生的成绩信息,而且只能查询自己所授课程的信息以及一些公共信息。

3、要有系统备份功能,系统出故障时,因该有相应的应急措施或者系统恢复功能。

由此可见,学生成绩管理系统需要满足3个方面的需求:管理员使用系统对全部数据进行维护操作;教师对于自己相关的部分数据实体进行操作;学生作为查询者对数据实体进行查询操作。

学生成绩管理系统实验报告(附C语言源码)

学生成绩管理系统实验报告(附C语言源码)

学⽣成绩管理系统实验报告(附C语⾔源码)程序设计训练报告(附源码)题⽬学⽣成绩管理系统学⽣姓名学⽣学号专业班级指导⽼师2012年7 ⽉⽬录⼀、设计⽬的要求 (1)⼆、设计功能简介 (1)三、本⼈⼯作 (2)四、详细设计⽅案 (2)1.需求分析 (2)2.模块详细设计 (2)(1)模块功能 (2)(2)定义函数功能说明 (4)(3)模块算法流程图 (6)3.核⼼模块源程序 (10)4.实验结果 (16)五、使⽤说明 (21)六、程序设计⼼得体会 (21)七、附录 (22)附录1:参考⽂献 (22)附录2:主要变量及⾃定义函数说明 (22)附录3:源程序代码 (22)⼀、设计⽬的要求通过C语⾔程序设计这门课程,我想,我们应该达到的⽬的与要求应该有以下内容:1.在编辑应⽤程序过程中,逐步加深对C语⾔编程的理解,掌握结构化程序设计的基本思路和⽅法;2.加强实践的能⼒,动⼿能⼒,同时进⼀步对所学的知识进⾏巩固,为以后的学习奠定基础;3.增强学⽣我们利⽤⾃⼰所学知识解决实际问题的能⼒4.掌握书写程序设计说明⽂档的能⼒⼆、设计功能简介本程序针对登录系统的不同⾝份(有管理员、学⽣两个⾝份)有不同的功能。

管理员的功能有以下⼏个:1.管理⽤户:其中包括浏览⽤户、增添⽤户、修改⽤户、删除⽤户四个功能;2.管理成绩:其中包括浏览成绩、增添成绩、修改成绩、删除成绩、成绩排序五个功能;3.个⼈密码修改。

学⽣的功能有:1.查看成绩:其中可直接查看各科成绩,也可查看单科、总分成绩的排名;2.查看个⼈信息:3.修改个⼈密码。

三、本⼈⼯作虽然编程本⾝是⼀件⾟苦的事,但作为⼀个爱好电脑学科的我来说,并不在意。

我在这个系统上,花了两天时间。

为了这个系统,我反复查资料,调试,纠错……最终完成了这整个系统。

四、详细设计⽅案1.需求分析为了管理员能⽅便了解、管理班上学⽣的成绩与其他信息,也同时为了学⽣能够⾃主查询⾃⼰的成绩的具体情况与其他信息且不能查看别⼈的私密信息,设计了这个学⽣成绩管理系统。

顺序表的操作实验报告

顺序表的操作实验报告

顺序表的操作实验报告一、实验目的。

1. 了解顺序表的基本概念和操作方法;2. 掌握顺序表的插入、删除、查找等操作;3. 熟悉顺序表的存储结构和实现方式。

二、实验内容。

1. 实现顺序表的基本操作,包括插入、删除、查找等;2. 对比顺序表和链表的优缺点;3. 分析顺序表的存储结构和实现方式。

三、实验原理。

顺序表是一种线性表的存储结构,它的特点是元素之间的逻辑顺序和物理顺序一致,即在内存中连续存储。

顺序表的基本操作包括插入、删除、查找等。

1. 插入操作,在顺序表的某个位置插入一个元素,需要将插入位置后的所有元素向后移动一个位置,然后将新元素插入到指定位置。

2. 删除操作,删除顺序表中的某个元素,需要将删除位置后的所有元素向前移动一个位置,然后将最后一个元素删除。

3. 查找操作,在顺序表中查找某个元素,需要遍历整个顺序表,逐个比较元素的值,直到找到目标元素或者遍历完整个表。

四、实验步骤。

1. 实现顺序表的基本操作,包括插入、删除、查找等;2. 编写测试用例,验证顺序表的功能和正确性;3. 对比顺序表和链表的优缺点,分析其适用场景;4. 分析顺序表的存储结构和实现方式,总结其特点和应用场景。

五、实验结果与分析。

1. 实现了顺序表的基本操作,包括插入、删除、查找等,功能正常;2. 经过测试用例验证,顺序表的功能和正确性得到了验证;3. 对比顺序表和链表的优缺点,发现顺序表的插入、删除操作效率较低,但查找操作效率较高,适合静态查找;4. 分析顺序表的存储结构和实现方式,发现其适用于元素数量较少且频繁查找的场景。

六、实验总结。

通过本次实验,我们深入了解了顺序表的基本概念和操作方法,掌握了顺序表的插入、删除、查找等操作。

同时,我们对比了顺序表和链表的优缺点,分析了顺序表的存储结构和实现方式,加深了对顺序表的理解和应用。

在今后的学习和工作中,我们将根据实验结果的分析,合理选择顺序表或链表作为数据结构,以满足不同场景下的需求。

“基于链表学生成绩管理系统”实验报告

“基于链表学生成绩管理系统”实验报告

“基于链表学生成绩管理系统”实验报告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.系统设计基于需求分析的结果,我们设计了一个学生成绩管理系统的原型。

系统采用了B/S架构,即浏览器/服务器架构,用户通过浏览器访问系统,服务器进行数据处理和存储。

前端采用了HTML、CSS和JavaScript等技术,后端采用了Java语言和MySQL数据库。

3.系统实现在系统实现过程中,我们按照需求分析和系统设计的结果,逐步完成了系统的各个功能模块。

首先,我们实现了学生信息管理模块,包括学生基本信息的录入、修改和查询功能。

然后,我们实现了课程管理模块,包括课程信息的录入、修改和查询功能。

接着,我们实现了成绩录入与查询模块,教师可以录入学生的成绩,学生和家长可以查询学生成绩。

最后,我们实现了成绩分析与统计模块,系统能够对学生成绩进行分析和统计,并生成相应的报表。

三、实验结果与讨论通过对学生成绩管理系统的设计与实现,我们得到了一个功能完善、操作简便的学生成绩管理工具。

在实验过程中,我们邀请了教师、学生和家长来测试系统,并收集了他们的反馈意见。

1.用户反馈教师们表示,学生成绩管理系统大大减轻了他们的工作负担,提高了工作效率。

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

数据结构实验报告一.具体设计Ⅰ顺序表㈠存储结构定义采用了两个结构体,其中Student结构体用于存储学生的各项信息,包括学号int num;姓名char name[20];英语成绩float english;数学成绩float math;数据结构成绩float database;总分float sum;平均分float average; 顺序表的结构体sqlist中包含的数据项是Student结构体,还有存储当前长度的int length;及当前分配的存储容量的int listsize;㈡函数功能定义及具体功能介绍⑴录入信息int Input(sqlist *L)每次输入学生的所有信息,输入完后提示是否继续输入⑵显示所有学生信息int Display(sqlist *L)⑶插入一条记录到表尾void Insert(sqlist *L)⑷删除一条记录int Delete(sqlist *L)包括1.按姓名删除2.按学号删除⑸统计成绩int Statistic(sqlist *L)包括全班平均成绩,各科平均成绩,总分最高分,总分最低分,各科最高分,各科最低分以及各科及格率⑹查找int Search(sqlist *L)查找方法包括1.顺序查找2.二分查找按查找内容又包括1.按学号查找2.按姓名查找,若查找成功则显示查找到的学生信息,若查找失败则提示“查找失败!”⑺排序int Sort(sqlist *L)排序方法包括1.直接插入排序2.折半插入排序3.冒泡排序4.直接选择排序,排序内容包括1.按学号排序2.按英语成绩排序3.按高数成绩排序4.按数据结构成绩排序5.按总分排序(0)退出程序void tuichu(sqlist *L)释放占用的内存空间,显示"谢谢使用!",然后关闭所有文件,终止正在进行的程序(9) 主菜单int menu(),每次进行完一次功能实现后再次弹出,方便用户使用(10) 主函数int main(),用switch语句根据用户的选择进行相应的操作㈢具体设计思路及过程⑴录入信息int Input(sqlist *L),初始length为0,每录入一个学生length加一,然后显示提示信息是否继续,若继续则要再录入,所以要把这个整体的外面再套一层while循环,但是在写的过程中也遇到了一个困难,还没有输入继续y,就让输入学生信息,通过百度,知道了C有一个输入的缓冲区,所以在每次输入前都请空了缓冲区,防止读入缓冲区余下的内容。

运行截图如下:⑵显示所有学生信息int Display(sqlist *L)把存储在顺序表中的内容全部读出即可,但是当用户还没有输入数据的时候就选择了显示所有学生信息,就显示一个提示信息"请先输入数据!",然后回到主界面运行截图如下:⑶插入一条记录到表尾void Insert(sqlist *L)即输入学生信息保存到数组下标为L->length,然后让L->length加一即可运行截图如下:⑷删除一条记录int Delete(sqlist *L)包括1.按姓名删除2.按学号删除,所以要用一个int型变量存储学生的选项。

当用户还没有输入数据的时候如果选择了删除一条记录,就显示一个提示信息"请先输入数据!",然后回到主界面。

若顺序表中存在数据就先用顺序查找法查找是否存在这个学生,如果存在那么把后面的学生信息前移一位,然后L->length--,如果没有找到这个学生的信息就显示"要删除记录不存在!",然后返回主界面。

运行截图如下:⑸统计成绩int Statistic(sqlist *L),因为要统计的信息包含总分和3门课程,所以要设置多个计数器,而且计算及格率的计数器应设为float,否则两个整数相除是整数,结果会有误。

实现时从第一个学生信息开始依次加到最后一个即可,运行截图如下:⑹查找int Search(sqlist *L) 当用户还没有输入数据的时候如果选择了查找,就显示一个提示信息"请先输入数据!",然后回到主界面。

如果顺序表中存在数据就开始查找,找方法包括1.顺序查找2.二分查找按查找内容又包括1.按学号查找2.按姓名查找,所以要设置两个int 型的变量ch1,ch2来读入选择的内容,然后再通过switch语句进入选择的查找方法或查找的内容。

按学号查找的比较语句要用”==”,按姓名查找的比较语句就要用strcmp()函数,顺序查找法当计数器大于等于L->length时,输出"查找失败!",然后回到主界面,二分查找法当low>high时就输出"查找失败!",然后回到主界面。

运行截图如下:⑺排序int Sort(sqlist *L)排序方法包括1.直接插入排序2.折半插入排序3.冒泡排序4.直接选择排序,排序内容包括1.按学号排序2.按英语成绩排序3.按高数成绩排序4.按数据结构成绩排序5.按总分排序,所以要设置两个int 型的变量ch1,ch2来读入选择的内容,然后再通过switch语句进入选择的排序方法然后进入要排序的内容再进行相应的排序。

自己一开始写的时候复制记录是把结构体中的所有内容按照相应的复制方法依次复制过去,后来意识到结构体是可以直接复制的,所以又进行了改进,而且把数组中的第一个空闲,当作监视哨。

(0)退出程序void tuichu(sqlist *L),最初自己只是显示出谢谢使用!,然后用exit(0)终止程序,后来意识到还应释放存储学生信息的结构体,所以又增加了if(!L->stu)free(L->stu);(9)主菜单int menu(),显示标题,和大致功能,用户根据功能前的编号选择进入相应的函数,执行相应的功能,所以用一个int型的变量来录入用户的选择,并且这个函数的返回值类型为int ,以供main函数使用,为了防止用户的输入错误,加了一个while语句,当输入错误时,提示"输入错误!请重新输入:",直到用户输入正确为止。

(10)main函数,先定义顺序表,然后初始化,并且为了查找、排序方便将第一个当哨兵,所以LL->length初值为1,用一个while(1)和switch(menu())执行用户的选择操作,直到选择了退出。

Ⅱ单链表㈠存储结构定义采用了一个结构体表示单链表里面包含保存学生学号的int stuid,姓名的char name[20],英语成绩的float english,数学成绩的float math,数据结构成绩的float database,总分的float sum,平均分的float average;指示结点地址的指针struct LNode *next 。

㈡函数功能定义及具体功能介绍⑴录入信息LinkList Input()每次输入学生的所有信息,先输入要输入的学生人数然后逆序建表、完后提示是否继续输入⑵显示所有学生信息void Display(LinkList L)⑶插入一条记录到表尾void Insert(LinkList L)⑷删除一条记录void Delete(LinkList L)包括1.按姓名删除2.按学号删除⑸顺序查找某个学生void Search(LinkList L)按查找内容包括1.按学号查找2.按姓名查找,若查找成功则显示查找到的学生信息,若查找失败则提示“没有该学生的信息”⑹显示各科最高分void Max(LinkList L))⑺各科平均分void Average(LinkList L)(8)排序void Sort(LinkList L)排序方法包括1.直接插入排序2.冒泡排序3.直接选择排序,排序内容包括1.按学号排序2.按英语成绩排序3.按高数成绩排序4.按数据结构成绩排序5.按总分排序(1)退出程序void tuichu()显示"谢谢使用!",然后关闭所有文件,终止正在进行的程序(9) 主菜单void Menu(),每次进行完一次功能实现后再次弹出,方便用户使用(10) 主函数int main(),用switch语句根据用户的选择进行相应的操作㈢具体设计思路及过程⑴录入信息LinkList Input(),先建立一带头结点的空单链表,然后逆序建立存储学生信息的单链表,录入时,因为当时设计时想了两种录入方法,一种是顺序表中的每次输入一个学生信息然后输出提示让用户判断是否还要输入,另一种是先确定了输入人数再建立,所以在单链表中采用了第二中。

先输入要输入的人数,所以要把这个整体的外面再套一层for循环,依次用malloc生成新结点,再把把新结点插入到链表头部。

运行截图如下:⑵显示所有学生信息int Display(sqlist *L)把存储在顺序表中的内容全部读出即可,但是当用户还没有输入数据的时候就选择了显示所有学生信息,就显示一个提示信息"请先输入数据!",然后回到主界面,所以先判断链表是否为空,在外层要嵌套一层if......else语句,然后内层用一个for循环把存储在顺序表中的内容全部读出。

运行截图如下:⑶插入插入单个学生到表头void Insert(LinkList L),因为是采用逆序建表,所以是插入到表头。

先用malloc申请一个新的结点空间,然后录入各项信息插入到表头修改指针即可。

运行截图如下:⑷删除一条记录void Delete(LinkList L)包括1.按姓名删除2.按学号删除。

所以要设置两个int 型变量,一个存储存储用户的选项,然后用if...else语句进入相应的功能区;另一个存储要删除的,用户输入的学号信息;还要设一个char型数组,存储用户输入的要删除的姓名信息。

当用户还没有输入数据的时候如果选择了删除一条记录,就显示一个提示信息"请先输入数据!",然后回到主界面。

若单链表中存在数据就先用顺序查找法查找是否存在这个学生,如果存在因为单链表删除结点要知道要删除的这个结点的前一个结点的位置,所以要用一个指针记录,一共有3个指针,L是头结点的头指针,,最后p指向要删除的结点的前一个位置,q指向p的下一个结点,即最后指向要删除的结点。

找到后修改p,q这个两个指针的指向即可,最后输出要删除的学生信息后释放要删除的结点。

如果没有找到这个学生的信息就显示"要删除记录不存在!",然后返回主界面。

运行截图如下:⑸顺序查找某个学生void Search(LinkList L)单链表只能采用顺序查找法,不能采用折半查找。

按查找内容包括1.按学号查找2.按姓名查找,若查找成功则显示查找到的学生信息,若查找失败则提示“没有该学生的信息”。

相关文档
最新文档