学生信息管理系统(顺序表)实验1

合集下载

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

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

数据结构实验报告一.具体设计Ⅰ顺序表㈠存储结构定义采用了两个结构体,其中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有一个输入的缓冲区,所以在每次输入前都请空了缓冲区,防止读入缓冲区余下的内容。

实验1顺序表和链表基本操作(学生)

实验1顺序表和链表基本操作(学生)

实验一线性表运算的实现班级学号姓名一、实验预备知识1.复习C中函数的相关内容。

2.复习如何用主函数将多个函数连在一起构成一个C完整程序。

3.复习多文件结构。

二、实验目的1.掌握线性表的顺序和链式存储结构2.熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算3.熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算三、实验要求1.编写初始化并创建线性表和输出线性表的算法。

2.编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。

3.编写有序表的插入和删除运算算法。

4.编写一个主函数,将上面函数连在一起,构成一个完整的程序。

5.将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。

四、实验内容顺序表实验内容:1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。

2.初始化并建立顺序表。

(开辟的存储空间大小为8)3.编写顺序表输出算法。

4.依次插入3,21,15三个数,分别插入在第4,6和2位置,每插入一次都要输出一次顺序表。

5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次顺序表。

6.编写一个排序算法,对线性表中元素从小到大排列。

7.向有序表分别插入20和50,插入后表仍然有序。

(修改开辟的存储空间大小为15)单链表实验内容:1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。

2.建立一个带表头结点的单链表(前插入法和尾插入法都可以)。

3.编写单链表输出算法。

4.依次插入3,21,15三个数,分别插入在第4,6和12位置,每插入一次都要输出一次单链表。

5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。

6.编写一个排序算法,对线性表中元素从小到大排列。

7.分别删除值为25和42的元素,删除后表仍然有序。

五、实验结果给出程序清单及输入/输出结果六、总结1.实验过程中遇到的问题及解决方法2.收获北华航天工业学院《数据结构》课程实验报告实验题目:作者所在系部:作者所在专业:作者所在班级:作者学号:作者姓名:任课教师姓名:完成时间:北华航天工业学院教务处制一、实验目的1 掌握线性表的顺序和链式存储结构;2 熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算;3 熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算。

学生信息管理系统实验报告

学生信息管理系统实验报告

学生管理系统1、用例图(1)班级信息管理用例图说明:系统管理员直接参与的用例为“登录”、“找回密码”、“查看班级基本信息"、“删除班级基本信息”、“修改班级基本信息"和“录入班级基本信息”。

校领导、教师、学生直接参与的用例为“登录”、“找回密码"和“查看班级基本信息"。

若在登录过程中发生忘记密码的情况,就需要使用“找回密码"的功能来恢复密码,而在正常情况下用不到“找回密码"这个功能,所以用例“找回密码”和用例“登录"之间是扩展关系.(2)成绩管理用例图说明:教师直接参与的用例为“登录”、“查询成绩”、“删除成绩”、“录入成绩”、“修改成绩”和“保存成绩”。

学生直接参与的用例为“登录”和“查询成绩”.因为修改成绩和录入成绩的时候都要保存成绩,所以将保存成绩抽象出来作为单独的一个用例。

用例“录入成绩”、“修改成绩"和“保存成绩”之间是包含关系,用例“找回密码"和用例“登录"之间是扩展关系。

(3)网上选课用例图说明:学生直接参与的用例为“登录”、“找回密码"、“查看课程信息”、“按课程编号查看”、“按课程名查看”、“选择课程”和“删除已选课程。

系统管理员直接参与的用例为“登录”、“找回密码”和“维护课程信息”.其中查看课程信息有两种方式,一种是按课程编号查看,另一种是按课程名查看,所以“查看课程信息”是父用例,而“按课程编号查看"、“按课程名查看”是子用例,他们之间是泛化关系。

用例“找回密码"和用例“登录”之间是扩展关系。

(4)学生信息管理用例图说明:系统管理员直接参与的用例为“登录”、“找回密码”、“查询学生基本信息"、“删除学生基本信息”、“修改学生基本信息”和“录入学生基本信息”。

校领导、教师直接参与的用例为“登录”、“找回密码”和“查询学生基本信息”。

学生直接参与的用例为“登录”、“找回密码”、“查询学生基本信息"和“修改学生基本信息”。

实验一 顺序表操作实现

实验一 顺序表操作实现

实验一顺序表操作实现实验一顺序表操作实现实验日期:2022年3月6日实验目的及要求1.掌握线性表的基本操作和顺序存储的实现;2.以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点;3.掌握线性表的顺序存储结构的定义和基本操作的实现;4.加深本函数指针的使用(尤其是C的应用)。

实验内容已知程序文件seqlist CPP给出了学生身高信息序列表的类型定义和基本运算函数定义。

(1)顺序表类型定义typedefstruct{intxh;/*学号*/floatsg;/*身高*/intsex;/*性别:0为男性,1为女性*/}数据类型;typedefstruct{datatypedata[max];/*存放顺序表元素的数组*/intlast;/*表示data中实际存放元素个数*/}seqlist;(2)基本操作功能原型voidinitlist(seqlist*lp);/*置一个空表*/voidcreatelist(seqlist*lp);/*创建学生订单表*/voidsort_xh(seqlist*lp);/*按学生编号排序*/void error(char*s)/*用户定义的错误处理函数*/void pntlist (seqlist*LP)/*输出学生表*/voidsave(seqlist*lp,charstrname[]);/*保存学生顺序表到指定文件*/任务一创建程序文件seqlist.cpp,其代码如下所示,理解顺序表类型seqlist和基本运算函数后回答下列问题。

/*seqlist。

CPP程序文件代码*/#include#include#definemax50typedef{intxh;/*学号*/floatsg;/*身高*/intsex;/*性别:0为男性,1为女性*/}数据类型;typedefstruct{datatypedata[max];/*存放顺序表元素的数组*/intlast;/*表示data中实际存放元素个数*/}seqlist;voidinitlist(seqlist*lp);/*摆一张空桌子*/voidcreatelist(seqlist*lp);/*建一个学生顺序表*/voidsort_xh(seqlist*lp);/*按学号排序*/voiderror(char*s);/*自定义错误处理函数*/voidpntlist(seqlist*lp);/*输出学生表*/voidsave(seqlist*lp,charstrname[]);/*将学生序列表保存到指定文件*//*置一个空表*/voidinitlist(seqlist*lp){lp->last=0;}/*建一个学生顺序表*/voidcreatelist(seqlist*lp){file*fp;intxh,sex;floatsg;if((fp=fopen(\{error(\}而(!feof(fp)){fscanf(fp,\lp->data[lp->last].xh=xh;lp->data[lp->last].sg=sg;lp->data[lp->last].sex=sex;lp->last++;}fclose(fp);}/*按学生人数递增*/voidsort_xh(seqlist*lp){inti,j,k;datatypest;对于(i=0;ilast-1;i++){k=i;for(j=i+1;jlast;j++)if(lp->data[j].xhdata[k].xh)k=j;if(k!=i){st=lp->data[k];lp->data[k]=lp->data[i];lp->data[i]=st;}}}/*自定义错误处理函数*/void error(char*s){printf(\exit(1);/*返回os,该函数定义在stdlib.h中*/}/*输出学生序列表*/void pntlist(seqlist*LP){inti;for(i=0;ilast;i++)printf(\}/*保存学生顺序表到指定文件*/voidsave(seqlist*lp,charstrname[]){file*fp;inti;如果((fp=fopen(strname,\{error(\}for(i=0;ilast;i++){fprintf(fp,\}fclose(fp);}请回答以下问题:(1)由顺序表类型定义可知,该顺序表类型名为seqlist,其中存放的元素为学生信息,学生信息定义的类型名为datatype,包含xh、sg、sex三个成员(写出成员变量名),学生信息存储于data数组,顺序表的表长变量为max。

学生信息管理系统实验报告

学生信息管理系统实验报告

一、实验目的1. 熟悉学生信息管理系统的基本功能和操作流程。

2. 掌握数据库设计的基本方法,能够根据需求设计合理的数据库结构。

3. 熟悉编程语言和开发工具,能够编写简单的数据库应用程序。

4. 提高团队合作能力和沟通能力。

二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 数据库:MySQL 5.74. 编程语言:C#三、实验内容1. 需求分析学生信息管理系统主要用于对学生信息进行管理,包括学生基本信息、成绩、课程、班级等。

系统应具备以下功能:(1)学生信息管理:增加、删除、修改、查询学生信息。

(2)成绩管理:录入、修改、查询学生成绩。

(3)课程管理:增加、删除、修改、查询课程信息。

(4)班级管理:增加、删除、修改、查询班级信息。

(5)统计分析:对学生成绩、课程等进行统计分析。

2. 数据库设计根据需求分析,设计如下数据库表:(1)学生信息表(student)字段名 | 数据类型 | 说明--- | --- | ---id | int | 学生编号(主键)name | varchar(50) | 学生姓名gender | varchar(10) | 性别age | int | 年龄class_id | int | 班级编号(外键)(2)成绩表(score)字段名 | 数据类型 | 说明--- | --- | ---id | int | 成绩编号(主键)student_id | int | 学生编号(外键)course_id | int | 课程编号(外键)score | float | 成绩(3)课程表(course)字段名 | 数据类型 | 说明--- | --- | ---id | int | 课程编号(主键)name | varchar(50) | 课程名称credit | int | 学分(4)班级表(class)字段名 | 数据类型 | 说明--- | --- | ---id | int | 班级编号(主键)name | varchar(50) | 班级名称3. 系统设计(1)界面设计采用Windows窗体应用程序,界面包括以下部分:- 主界面:展示系统功能菜单。

实验一顺序表的基本操作实验报告

实验一顺序表的基本操作实验报告

元素之后的所有数据都前移一个位置,最将线性表长减1。

3.顺序表查找操作的基本步骤:要在顺序表中查找一个给定值的数据元素则可以采用顺序查找的方法,从表中第 1 个数据元素开始依次将值与给定值进行比较,若相等则返回该数据元素在顺序表中的位置,否则返回0 值。

线性表的动态分配顺序存储结构—C语言实现#define MaxSize 50//存储空间的分配量Typedef char ElemType;Typedef struct{ElemType data[MaxSize];int length; //表长度(表中有多少个元素)}SqList;动态创建一个空顺序表的算法:void InitList(SqList *&L) //初始化线性表{L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间L->length=0; //置空线性表长度为0}线性表的插入:status Sqlist_insert(Sqlist &L,int i,Elemtype x)/*在顺序表L中第i个元素前插入新元素x*/{ if (i<1||i>L.length+1) return ERROR; /*插入位置不正确则出错*/if (L.length>=MAXLEN)return OVERFLOW;/*顺序表L中已放满元素,再做插入操作则溢出*/for(j=L.length-1;j>=i-1;j--)L.elem[j+1]=L.elem[j]; /*将第i个元素及后续元素位置向后移一位*/L.elem[i-1]=x; /*在第i个元素位置处插入新元素x*/L.length++; /*顺序表L的长度加1*/return OK;}线性表的删除:status Sqlist_delete(Sqlist &L,int i,Elemtype &e)/*在顺序表L中删除第i个元素*{ if (i<1||i>L.length) return ERROR; /*删除位置不正确则出错*/for(j=i;j<=L.length-1;j++)L.elem[j-1]=L.elem[j]; /*将第i+1个元素及后继元素位置向前移一位*/L.length--;/*顺序表L的长度减1*/return OK;}线性表元素的查找:int LocateElem(SqList *L, ElemType e) //按元素值查找{int i=0;while (i<L->length && L->data[i]!=e)i++; //查找元素eif (i>=L->length) //未找到时返回0return 0;elsereturn i+1; //找到后返回其逻辑序号}输出线性表:void DispList(SqList *L) //输出线性表{int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c ",L->data[i]);printf("\n");}输出线性表第i个元素的值:bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值{if (i<1 || i>L->length)return false; //参数错误时返回falsee=L->data[i-1]; //取元素值return true; //成功找到元素时返回true}代码:#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef char ElemType;typedef struct{ElemType data[MaxSize];int length;} SqList;void InitList(SqList *&L);void DestroyList(SqList *L);bool ListEmpty(SqList *L);int ListLength(SqList *L);void DispList(SqList *L);bool GetElem(SqList *L,int i,ElemType &e);int LocateElem(SqList *L, ElemType e);bool ListInsert(SqList *&L,int i,ElemType e);bool ListDelete(SqList *&L,int i,ElemType &e);void InitList(SqList *&L)//初始化线性表{L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间L->length=0;//置空线性表长度为0 }void DestroyList(SqList *L)//销毁线性表{free(L);}bool ListEmpty(SqList *L)//判线性表是否为空表{return(L->length==0);}int ListLength(SqList *L)//求线性表的长度{return(L->length);}void DispList(SqList *L)//输出线性表{int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c ",L->data[i]);printf("\n");}bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值{if (i<1 || i>L->length)return false;//参数错误时返回falsee=L->data[i-1];//取元素值return true;//成功找到元素时返回true}int LocateElem(SqList *L, ElemType e)//按元素值查找{int i=0;while (i<L->length && L->data[i]!=e)i++;//查找元素eif (i>=L->length)//未找到时返回0return 0;elsereturn i+1;//找到后返回其逻辑序号}bool ListInsert(SqList *&L,int i,ElemType e)//插入数据元素{int j;if (i<1 || i>L->length+1)return false;//参数错误时返回falsei--;//将顺序表逻辑序号转化为物理序号for (j=L->length;j>i;j--)//将data[i]及后面元素后移一个位置L->data[j]=L->data[j-1];L->data[i]=e;//插入元素eL->length++;//顺序表长度增1return true;//成功插入返回true}bool ListDelete(SqList *&L,int i,ElemType &e)//删除数据元素{int j;if (i<1 || i>L->length)//参数错误时返回falsereturn false;i--;//将顺序表逻辑序号转化为物理序号e=L->data[i];for (j=i;j<L->length-1;j++)//将data[i]之后的元素前移一个位置L->data[j]=L->data[j+1];L->length--;//顺序表长度减1return true;//成功删除返回true}void main(){SqList *L;ElemType e;printf("顺序表的基本运算如下:\n");printf(" (1)初始化顺序表L\n");InitList(L);printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");ListInsert(L,1,'a');ListInsert(L,2,'b');ListInsert(L,3,'c');ListInsert(L,4,'d');ListInsert(L,5,'e');printf(" (3)输出顺序表L:");DispList(L);printf(" (4)顺序表L长度=%d\n",ListLength(L));printf(" (5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));GetElem(L,3,e);printf(" (6)顺序表L的第3个元素=%c\n",e);实验结果:心得体会:通过本次实验,实现了数据结构在程序设计上的作用,了解了数据结构语言,加深了对c语言的认识掌并掌握了线性表的顺序存储结构的表示和实现方法,掌握顺序表基本操作的算法实现,同时了解了顺序表的应用。

顺序表的基本操作和实现实验报告(一)

顺序表的基本操作和实现实验报告(一)

顺序表的基本操作和实现实验报告(一)顺序表的基本操作和实现实验报告1. 引言顺序表是计算机科学中一种常用的数据结构,用于存储一组元素并支持快速的随机访问。

本实验旨在探究顺序表的基本操作和实现方法。

2. 实验目的•理解顺序表的概念和特性。

•学习顺序表的基本操作,包括插入、删除、查找和修改等。

•掌握顺序表的实现方法,包括静态分配和动态分配两种方式。

•培养对数据结构的抽象思维和编程能力。

3. 实验内容1.了解顺序表的定义,及其与数组的关系。

2.掌握插入操作的实现方法,包括在表头、表中和表尾插入元素。

3.掌握删除操作的实现方法,包括按索引删除和按值删除。

4.掌握查找操作的实现方法,包括按索引查找和按值查找。

5.掌握修改操作的实现方法,包括按索引修改和按值修改。

6.实现顺序表的静态分配和动态分配两种方式。

4. 实验步骤1.定义顺序表的结构体,包括数据存储区和长度属性。

2.实现插入操作,根据需要选择插入位置和移动元素。

3.实现删除操作,根据需要选择删除方式和更新长度。

4.实现查找操作,根据需要选择查找方式和返回结果。

5.实现修改操作,根据需要选择修改方式和更新元素。

6.实现顺序表的静态分配和动态分配方法。

5. 实验结果经过多次实验和测试,顺序表的基本操作都能够正确实现。

在插入操作中,能够将元素正确插入指定位置,并保持顺序表的有序性。

在删除操作中,能够按需删除指定位置或值的元素,并正确更新顺序表的长度。

在查找操作中,能够根据索引或值查找到对应的元素,并返回正确的结果。

在修改操作中,能够按需修改指定位置或值的元素,并更新顺序表的内容。

6. 实验总结本实验通过对顺序表的基本操作和实现方法的学习和实践,进一步巩固了对数据结构的理解和编程能力的培养。

顺序表作为一种常用的数据结构,对于解决实际问题具有重要的作用。

通过本次实验,我对顺序表的插入、删除、查找和修改等操作有了更深入的了解,并学会了如何实现这些操作。

通过本次实验,我还学会了顺序表的静态分配和动态分配方法,了解了它们的区别和适用场景。

学生管理系统实验报告

学生管理系统实验报告

学生管理系统实验报告实验目的本次实验的目的是设计并实现一个学生管理系统,以便管理教师对学生的基本信息、课程成绩等重要数据进行记录、查询和修改。

通过该实验,我们可以学习和掌握数据库的设计与应用,以及如何利用编程语言实现对数据库的操作。

实验环境本次实验使用的开发环境为Windows操作系统,数据库管理系统采用MySQL,编程语言为Java。

实验内容与步骤1. 数据库设计首先,我们需要进行数据库的设计。

根据实际需求,设计了以下几个表:- 学生表(Student):包含学生的学号、姓名、性别、出生日期等基本信息。

- 课程表(Course):包含课程的课程号、课程名、学分等信息。

- 成绩表(Score):包含学生的学号、课程号和成绩等信息。

2. 数据库连接使用Java编程语言,我们需要编写代码来连接MySQL数据库。

首先引入相关的数据库连接库,在代码中设置数据库的连接信息,如数据库URL、用户名和密码。

3. 数据库操作接下来,我们需要编写代码来实现对数据库的操作,包括插入、查询和修改等功能。

- 插入数据:通过执行SQL语句,将学生的基本信息、课程信息和成绩信息插入到相应的表中。

- 查询数据:根据学生学号或课程号,执行查询语句,并将结果以表格的形式展示出来。

- 修改数据:对于某个学生或某门课程的成绩,可以根据学号或课程号来修改其对应的成绩。

4. 用户界面设计为了方便教师使用学生管理系统,我们设计了一个简洁美观的用户界面。

通过该界面,教师可以方便地进行数据库的操作。

实验结果与分析经过运行实验代码,成功地实现了学生管理系统的设计与实现。

教师可以通过该系统对学生的信息进行录入、查询和修改,从而实现了对学生的有效管理。

界面设计方便了教师的操作,使其能够直观地进行各项功能的实现。

实验总结通过本次学生管理系统实验,我对数据库的设计与应用有了更深入的理解。

实验中,我掌握了数据库的基本操作和编程语言对数据库的操作方法,同时也提高了编程能力和逻辑思维能力。

学生管理系统_实验报告

学生管理系统_实验报告

一、实验目的1. 熟悉并掌握数据库的基本操作,包括创建数据库、创建表、插入数据、查询数据等。

2. 熟悉并掌握Java编程语言的基本语法和面向对象编程思想。

3. 通过实际编程,提高学生的编程能力和问题解决能力。

二、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 开发工具:Eclipse4. 编程语言:Java三、实验内容1. 数据库设计2. 系统功能设计3. 系统实现四、实验步骤1. 数据库设计(1)创建数据库```sqlCREATE DATABASE StudentManagementSystem;```(2)创建表```sql-- 创建学生信息表CREATE TABLE student_info (student_id INT PRIMARY KEY AUTO_INCREMENT, student_name VARCHAR(50) NOT NULL,gender CHAR(1) NOT NULL,class_id INT NOT NULL,age INT NOT NULL,phone VARCHAR(20));-- 创建班级信息表CREATE TABLE class_info (class_id INT PRIMARY KEY AUTO_INCREMENT, class_name VARCHAR(50) NOT NULL);```2. 系统功能设计(1)学生信息管理- 添加学生信息- 删除学生信息- 修改学生信息- 查询学生信息(2)班级信息管理- 添加班级信息- 删除班级信息- 修改班级信息- 查询班级信息3. 系统实现(1)创建Java项目- 使用Eclipse创建一个名为“StudentManagementSystem”的Java项目。

(2)创建实体类- 创建Student类,包含学生信息字段,如:student_id、student_name、gender、class_id、age、phone等。

顺序表实现学生信息管理

顺序表实现学生信息管理

实验1 利用顺序表实现学生信息管理1.实验目的·掌握顺序表结构的实现方式;·掌握顺序表常用算法的实现;·熟悉利用顺序表解决问题的一般思路;领会顺序表结构的优点与不足。

2.实验内容与要求以学生信息为数据元素建立顺序表。

一个学生的信息包括学号、姓名、性别、班级和联系电话。

程序用户可通过数字键选择信息浏览、插入信息、删除信息等功能。

对程序的具体要求如下:(1)程序启动后,显示下列选项信息:1—信息浏览2—插入信息3—删除信息4-修改信息0—退出程序(2)输入数字“1”显示所有学生信息列表。

(3)输入数字“2”进入插入信息功能模块。

程序依次提示并由用户输入学号、姓名、性别、班级和联系电话,最终实现在线性表头部插入一个学生信息。

(4)输入数字“3”进入删除信息功能模块。

程序提示并由用户输入学号,最终实现按照学号删除某个学生信息。

(5)输入数字“4”进入修改信息功能模块。

程序提示并由用户输入学号,最终实现按照学号修改某个学生信息。

(6)通过输入数字“0”使得程序结束。

(7)当用户执行浏览、插入、删除功能后,程序应继续提示用户通过数字键选择相应功能,直到用户输入数字“0”程序才结束。

3.实验编程指导(1)可仿照本章顺序表的定义形式,建立学生信息结点数据,并进一步建立一个长度为5的顺序表。

(2)参考本章中顺序表的算法描述和算法的实现,在本程序中增加顺序表的插入、删除等算法实现函数。

(3)编写主函数,可通过在while循环结构中嵌入switch分支结构实现操作选择功能。

(4)完善插入、删除功能。

实现插入信息的录入、删除记录的定位等细节。

(5)完善用户操作界面,给出详细的操作提示。

4.实验报告要求实验报告要求以word文件形式发到老师邮箱。

内容包括:(1)报告封面包括实验名称、班级、姓名、学号以及实验完成日期。

(2)各程序模块名称及功能说明。

并绘制出主要功能函数的程序流程图。

(3)个人小结。

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

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

学⽣信息管理系统-顺序表链表(数据结构第⼀次作业)实验⽬的: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. 使用SQL语句创建数据库表,并插入测试数据;3. 利用编程语言(如Python、Java等)实现学生信息管理系统的增删改查功能;4. 进行系统功能测试,验证系统的稳定性和准确性。

三、实验步骤。

1. 数据库设计。

根据学生信息管理系统的需求,设计数据库结构,包括学生表(学号、姓名、性别、年龄等字段)、课程表(课程号、课程名称、学分等字段)、成绩表(学号、课程号、成绩等字段)等。

2. 数据库创建与数据插入。

使用SQL语句创建数据库表,并插入测试数据,以验证数据库结构的正确性和完整性。

3. 系统实现。

利用编程语言实现学生信息管理系统的增删改查功能,包括学生信息的录入、修改、删除,成绩的查询和统计等。

4. 系统测试。

对系统进行功能测试,验证系统的稳定性和准确性,包括对数据的增删改查操作进行测试,确保系统能够正确地处理各种情况。

四、实验结果与分析。

经过实验,我们成功设计并实现了学生信息管理系统,系统能够准确地记录学生信息、课程信息和成绩信息,能够进行各种操作,并且在测试中表现稳定可靠。

五、实验总结。

通过本次实验,我们深入理解了数据库设计与编程的重要性,掌握了数据库表的设计与创建、SQL语句的使用、编程语言的应用等技能。

同时,也提高了对学生信息管理系统的整体把握能力,为今后的数据库管理与系统开发打下了坚实的基础。

六、实验心得。

通过本次实验,我们不仅学到了知识,更重要的是提高了动手能力和解决问题的能力,这对我们未来的学习和工作都有着重要的意义。

七、参考文献。

[1] 《数据库系统概论》。

[2] 《Python编程从入门到实践》。

[3] 《Java程序设计》。

以上就是学生信息管理系统实验报告的全部内容,希望能对大家有所帮助。

学生信息管理系统实验内容以及步骤

学生信息管理系统实验内容以及步骤

学生信息管理系统实验内容以及步骤学生信息管理系统实验内容以及步骤如下:一、实验内容1.设计并实现一个学生信息管理系统,能够对学生信息进行有效的管理。

2.系统功能要求:•学生信息录入:能录入学生的基本信息,如姓名、学号、性别、专业、联系电话等。

•学生信息查询:能根据学号、姓名等条件查询学生信息。

•学生信息修改:能对学生信息进行修改。

•学生信息删除:能删除学生信息。

•学生信息统计:能统计学生的总数、男生数、女生数等信息。

3.实验中需要注意的问题:•数据的一致性和完整性:确保录入的学生信息是准确和完整的。

•系统的可扩展性和可维护性:设计时需要考虑未来的需求变化和技术更新。

二、实验步骤1.系统需求分析:明确系统的功能需求和非功能需求,进行详细的需求调研和分析。

2.系统设计:根据需求分析结果,设计系统的整体架构、数据库结构、界面设计等。

3.系统开发:编写代码实现系统的各项功能。

4.系统测试:对系统进行全面测试,确保各项功能都能正常运行,并修复可能存在的问题。

5.系统部署与维护:将系统部署到实际使用环境中,并进行持续的维护和升级。

6.实验总结与报告撰写:对实验过程进行总结,并撰写详细的实验报告。

具体实验步骤可能因不同的实验环境和要求而有所不同,以上步骤仅供参考。

在实验过程中,需要注意安全问题,如保护学生隐私、防止数据泄露等。

同时,也需要遵守相关的法律法规和伦理规范,确保实验的合法性和道德性。

此外,对于学生信息管理系统来说,系统的安全性和稳定性是非常重要的。

在实验过程中,需要注意对系统的安全防护措施进行测试和验证,确保系统能够抵御常见的网络攻击和恶意行为。

同时,也需要对系统的稳定性和可靠性进行测试,确保系统在实际使用中能够正常运行,并保证数据的准确性和完整性。

总之,学生信息管理系统实验是一个综合性、实践性的实验项目,需要学生在实践中掌握系统的设计、开发、测试和维护等技能,同时也需要学生对相关的理论知识和技术规范进行深入学习和理解。

实验一报告利用顺序表实现学生信息管理

实验一报告利用顺序表实现学生信息管理

实验一报告利用顺序表实现学生信息管理实验一利用顺序表实现学生信息管理[文档副标题]2013-7-2目录(1)(3)编程小感想:......................................................................................... 错误!未定义书签。

程序实现以下功能: (3)程序存在的问题(BUG): (3)难点分析及进一步工作: (4)(4)程序流图1、学生E-R图2、程序主要功能函数的程序流程图3、各程序模块名称及功能说明void main()————主函数,主要调用其他函数及初始化链表功能;由switch语句选择操作内容;struct student *SeqList(void);————初始化链表;struct student *ListCorrect(struct student *head);————更改函数,根据用户输入的学生信息,自动检索学号,对应修改该学生的信息;struct student *ListDelete(struct student *head);————删除函数,根据用户输入的学生学号,对应删除该学生信息;struct student *ListInsert(struct student *head);————插入函数,根据用户输入的学生信息,自动检索学号,并按学号由小到大顺序,将新信息插入到链表中;void ShowAll(struct student *head);————显示函数,显示当前链表内的所有学生信息;void Exit(struct student *head);————退出函数,退出程序并清空链表空间;个人小结程序实现以下功能:1、以链表的形式存储学生信息;2、struct student * SeqList 链表初始化:输入学生信息;将学生信息存入链表;3、struct student *ListDelete删除学生信息;输入学生学号,删除对应的学生信息;4、struct student *ListInsert 插入学生信息:输入要插入的学生对应各项信息,可实现按学号顺序对插入信息进行按从小到大排序;5、void ShowAll(struct student *head) 显示函数:动态显示链表内学生信息;6、void Exit(struct student *head) 退出函数:退出主函数中switch语句循环并释放相应链表空间;7、while—scanf—switch结构保持选择界面:可实现一次输入后程序不退出,可以多次选择程序对应功能,提高程序的实用性与可操作性;程序存在的问题(BUG):1、由于是链表形式实现初始化,每次运行都需重新输入学生信息;可考虑在链表定义部分用{}手动添加学生信息,如:struct student{int id;char name[10];char sex[10];char classnumber[10];struct student *next;}{{41105249,”***”,”女”,”数创二班”,”*******”}};2、输入学生信息除学号外四项可选择性填写,但是未填项在进行删除插入或者修改操作后,ShowAll显示链表信息中未填的项会出现乱码,但不影响输入的信息及以后该信息的删除插入修改;3、IMPORTANT!由于是用while—scanf—switch结构实现程序的多次选择,如在输入信息时,输入空格键超过两个,将会导致程序无限循环;暂没想到解决方法,所以输入时避免输入空格键难点分析及进一步工作:1、主函数保持程序的多次选择;已解决;2、链表指针域及数据域在函数间的传递问题;已解决;3、未填项的乱码问题;进一步完善设想:新增函数判别输入内容是否为空,为空则输入00来避免出现乱码问题;4、空格键的无限循环问题;进一步完善设想:加入判断输入内容是否为空,为空则重新输入;5、每次进入程序需重新输入信息;进一步完善设想:引进文件,程序退出时,将链表中的学生信息存入文件中,再次打开时再读取该信息;6、进一步完善程序:增加按姓名查找或按班级检索功能;增加成绩输入修改删除功能,并在成绩属性下增加子项,实现多层次信息管理;编程内容#include#include#include#include#include#define NULL 0#define dd sizeof(struct student)struct student{int id;char name[10];char sex[10];char classnumber[10];struct student *next;};int n=0;struct student *SeqList(void) ************输入学生信息************** {struct student *p1,*p2,*head=NULL;p1=p2=(struct student *)malloc(dd);printf("请依次输入学生数据:学号,姓名,性别,班级,电话\n");scanf("%d,%s,%s,%s,%s",&p1->id,&p1->name,&p1->sex,& p1->classnumber,&p1->tel);head=p1;for(n=0;n<3;n++){p2->next=p1;p2=p1;if(n==2);elsep1=(struct student *)malloc(dd);printf("请依次输入学生数据:学号,姓名,性别,班级,电话\n");scanf("%d,%s,%s,%s,%s",&p1->id,&p1->name,&p1->sex,& p1->classnumber,&p1->tel);}}p2->next=NULL;return(head);}struct student *ListDelete(struct student *head) **********删除学生信息************** {struct student *p1,*p2;int j;printf("请输入要删除信息的学生学号:\n");scanf("%d",&j);p1=head;p2=p1->next;n=0;if (j==p1->id)head=p2;else{for(n=1;n<=3;n++){if (j==p2->id)p1->next=p2->next;p1=p2;p2=p2->next;}return(head);}struct student *ListInsert(struct student *head)**********插入学生信息************** {struct student *p1,*p2,*p3;p2=(struct student *)malloc(dd);printf("请依次输入要插入的学生数据:学号,姓名,性别,班级,电话\n");scanf("%d,%s,%s,%s,%s",&p2->id,&p2->name,&p2->sex,&p2->classnumber,&p2->tel);p1=head;n=0;if (p2->idid){head=p2;head->next=p1;}else{for(n=1;n<3;n++){p3=p1;p1=p1->next;if (p2->idid){p3->next=p2;p2->next=p1;}}}if(p1->idid)p1->next=p2;p2->next=NULL;}return(head);}struct student *ListCorrect(struct student *head) **********修改学生信息************** {struct student *p1;int m;printf("输入修改的学号:\n");scanf("%d",&m);p1=head;for(n=0;n<3;n++){if (m==p1->id){printf("依次输入修改内容:学号,姓名,性别,班级,电话号码\n");scanf("%d,%s,%s,%s,%s",&p1->id,&p1->name,&p1->sex,& p1->classnumber,&p1->tel);break;}p1=p1->next;}return(head);}void Exit(struct student *head) ************退出函数************** {struct student *p1,*p2;p1=head->next;p2=head;while(p1!=NULL){free(p2);p2=p1;p1=p1->next;}free(p2);exit(1);}void ShowAll(struct student *head) ************显示函数**************{struct student *p;printf("\nNow,these %d records are:\n",n);p=head;while(p!=NULL){n++;printf("%d,%s,%s,%s,%s\n",p->id,p->name,p->sex,p->class number,p->tel);p=p->next;}void main() ************主函数**************{struct student *SeqList(void);struct student *ListCorrect(struct student *head);struct student *ListDelete(struct student *head);struct student *ListInsert(struct student *head);void ShowAll(struct student *head);void Exit(struct student *head);struct student *head;int m;printf("——————————————————————————————\n");printf("————学号:41105249—姓名:***—班级:数创二班————\n");printf("——————————————————————————————\n\n\n");head=SeqList();printf("请选择1——信息浏览,2——插入学生信息,3——删除学生信息,4——更改学生信息,0--退出程序\n");m=4;while(m!=0){scanf("%d",&m);switch(m){case 1:ShowAll(head);break;case 2:head=ListInsert(head);ShowAll(head);break;case 3:head=ListDelete(head);ShowAll(head);break;case 4:head=ListCorrect(head);ShowAll(head);break;case 0:{char s;printf("确定要退出吗?(Y/N)");scanf("%s",&s);if(s=='Y'||s=='y')Exit(head);break;default:{printf("喵呜伦家听不懂...\n"); break;}}}}。

实验一顺序表的基本操作实验报告

实验一顺序表的基本操作实验报告

元素之后的所有数据都前移一个位置,最将线性表长减1。

3.顺序表查找操作的基本步骤:要在顺序表中查找一个给定值的数据元素则可以采用顺序查找的方法,从表中第 1 个数据元素开始依次将值与给定值进行比较,若相等则返回该数据元素在顺序表中的位置,否则返回0 值。

线性表的动态分配顺序存储结构—C语言实现#define MaxSize 50//存储空间的分配量Typedef char ElemType;Typedef struct{ElemType data[MaxSize];int length; //表长度(表中有多少个元素)}SqList;动态创建一个空顺序表的算法:void InitList(SqList *&L) //初始化线性表{L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间L->length=0; //置空线性表长度为0}线性表的插入:status Sqlist_insert(Sqlist &L,int i,Elemtype x)/*在顺序表L中第i个元素前插入新元素x*/{ if (i<1||i>L.length+1) return ERROR; /*插入位置不正确则出错*/if (L.length>=MAXLEN)return OVERFLOW;/*顺序表L中已放满元素,再做插入操作则溢出*/for(j=L.length-1;j>=i-1;j--)L.elem[j+1]=L.elem[j]; /*将第i个元素及后续元素位置向后移一位*/L.elem[i-1]=x; /*在第i个元素位置处插入新元素x*/L.length++; /*顺序表L的长度加1*/return OK;}线性表的删除:status Sqlist_delete(Sqlist &L,int i,Elemtype &e)/*在顺序表L中删除第i个元素*{ if (i<1||i>L.length) return ERROR; /*删除位置不正确则出错*/for(j=i;j<=L.length-1;j++)L.elem[j-1]=L.elem[j]; /*将第i+1个元素及后继元素位置向前移一位*/L.length--;/*顺序表L的长度减1*/return OK;}线性表元素的查找:int LocateElem(SqList *L, ElemType e) //按元素值查找{int i=0;while (i<L->length && L->data[i]!=e)i++; //查找元素eif (i>=L->length) //未找到时返回0return 0;elsereturn i+1; //找到后返回其逻辑序号}输出线性表:void DispList(SqList *L) //输出线性表{int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c ",L->data[i]);printf("\n");}输出线性表第i个元素的值:bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值{if (i<1 || i>L->length)return false; //参数错误时返回falsee=L->data[i-1]; //取元素值return true; //成功找到元素时返回true}代码:#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef char ElemType;typedef struct{ElemType data[MaxSize];int length;} SqList;void InitList(SqList *&L);void DestroyList(SqList *L);bool ListEmpty(SqList *L);int ListLength(SqList *L);void DispList(SqList *L);bool GetElem(SqList *L,int i,ElemType &e);int LocateElem(SqList *L, ElemType e);bool ListInsert(SqList *&L,int i,ElemType e);bool ListDelete(SqList *&L,int i,ElemType &e);void InitList(SqList *&L)//初始化线性表{L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间L->length=0;//置空线性表长度为0 }void DestroyList(SqList *L)//销毁线性表{free(L);}bool ListEmpty(SqList *L)//判线性表是否为空表{return(L->length==0);}int ListLength(SqList *L)//求线性表的长度{return(L->length);}void DispList(SqList *L)//输出线性表{int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c ",L->data[i]);printf("\n");}bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值{if (i<1 || i>L->length)return false;//参数错误时返回falsee=L->data[i-1];//取元素值return true;//成功找到元素时返回true}int LocateElem(SqList *L, ElemType e)//按元素值查找{int i=0;while (i<L->length && L->data[i]!=e)i++;//查找元素eif (i>=L->length)//未找到时返回0return 0;elsereturn i+1;//找到后返回其逻辑序号}bool ListInsert(SqList *&L,int i,ElemType e)//插入数据元素{int j;if (i<1 || i>L->length+1)return false;//参数错误时返回falsei--;//将顺序表逻辑序号转化为物理序号for (j=L->length;j>i;j--)//将data[i]及后面元素后移一个位置L->data[j]=L->data[j-1];L->data[i]=e;//插入元素eL->length++;//顺序表长度增1return true;//成功插入返回true}bool ListDelete(SqList *&L,int i,ElemType &e)//删除数据元素{int j;if (i<1 || i>L->length)//参数错误时返回falsereturn false;i--;//将顺序表逻辑序号转化为物理序号e=L->data[i];for (j=i;j<L->length-1;j++)//将data[i]之后的元素前移一个位置L->data[j]=L->data[j+1];L->length--;//顺序表长度减1return true;//成功删除返回true}void main(){SqList *L;ElemType e;printf("顺序表的基本运算如下:\n");printf(" (1)初始化顺序表L\n");InitList(L);printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");ListInsert(L,1,'a');ListInsert(L,2,'b');ListInsert(L,3,'c');ListInsert(L,4,'d');ListInsert(L,5,'e');printf(" (3)输出顺序表L:");DispList(L);printf(" (4)顺序表L长度=%d\n",ListLength(L));printf(" (5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));GetElem(L,3,e);printf(" (6)顺序表L的第3个元素=%c\n",e);实验结果:心得体会:通过本次实验,实现了数据结构在程序设计上的作用,了解了数据结构语言,加深了对c语言的认识掌并掌握了线性表的顺序存储结构的表示和实现方法,掌握顺序表基本操作的算法实现,同时了解了顺序表的应用。

实验一顺序表实验报告参考模板

实验一顺序表实验报告参考模板

顺序表实验报告一、实验内容和目的实验目的:掌握顺序表的建立、查找、插入和删除操作。

掌握有序表的建立、合并、插入操作。

实验内容:1. 顺序表的建立2. 顺序表的遍历3. 顺序表的元素查找4. 顺序表的元素插入5. 顺序表的元素删除6. 有序表的建立7. 有序表的遍历8. 有序表的元素插入9. 有序表的合并二、实验原理基本原理:通过连续的地址空间实现逻辑上和物理上连续的储存的一系列元素。

并在此基础上进行元素的添加,查找,删除操作。

有序表的插入算法:元素插入之前的,先跟有序表中的逐个元素进行对比,以找到合适的插入位置。

例如,已有有序表L,要向L 中插入元素18L={13,15,17,19,20,35,40}第一步:将18与L1进行比较,18 > L1,不是合适的插入位置。

第二步:将18与L2进行比较,18>L2,仍然不是不是的插入位置。

重复上述步骤,知道找到18≤Ln,然后在(n-1) 和n之间插入元素。

(如果元素比有序表中的所有元素都要大,则把该元素放到有序表的最后)此例子中,L n-1 = 17,L n = 19插入元素之后的有序表L为:L′={13,15,17,18,19,20,35,40}仍然保持有序。

重置光标的位置:程序接受两种方式的输入。

一种是输入数字后按回车,一种是利用空格间隔的连续几个数字。

然而,在使用后者输入数字的时候,会出现提示输出不正确的问题。

(如图)这个问题的原因简单如下:当程序输出“请输入第2个数字:”的时候,应该等待用户输入;然而,在程序等待输入第一个数字的时候,用户输入了五个数字。

因此,程序输出“输入第2个提示以后”,程序发现仍然有数据没有进行处理,因此把上次输入但未处理的字符当成是用户的输入。

所以没让用户输入数据就自动继续执行。

解决这个问题的思路:每次输出提示时,将光标移动到行首,因此,输出提示的时候会自动覆盖已经输出的提示信息。

效果如下:具体的解决方法:#include<windows.h>// 将光标移动到行首void ResetCursor(){HANDLE hOut;COORD cTarget;CONSOLE_SCREEN_BUFFER_INFO info;int y = 0;hOut = GetStdHandle(STD_OUTPUT_HANDLE);GetConsoleScreenBufferInfo(hOut, &info);y = info.dwCursorPosition.Y;cTarget.X = 0;cTarget.Y = y;SetConsoleCursorPosition(hOut, cTarget);}三、程序流程图四、实现步骤4.1 创建顺序表的实现①通过scanf 函数从键盘中读入数据,并通过scanf函数的返回值判断用户输入的是数字还是非数字,作为判断输入结束的判断。

学生信息管理系统顺序表实验1

学生信息管理系统顺序表实验1

学生信息管理系统(顺序表)实验1计设程课数据结构设计题目:学生信息管理系统(顺序)姓名及学号:专业班级: 09计算机科学与技术指导教师:完成时间:学生信息管理系统(顺序表)实验1系计算机科学院信息工程学学生信息管理系统(顺序表)实验1学生信息管理系统(顺序表)实验1)(本科安徽新华学院课程设计成绩评定表录目一、实验目的 (1)二、实验内容 (1)三、基本要求 (1)四、算法设计思想 (1)五、算法流程图 (1)六、算法源代码 (6)学生信息管理系统(顺序表)实验1七、运行结果 (22)八、收获和体会 (25)九、致谢 (25)1实验顺序表)学生信息管理系统(实验目的:1.通过制作学生信息管理系统基本掌握面向过程程序设计的的基本思路和方法;(1)C语言的基本知识和技能;达到熟练掌握(2)够利用所学的基本知识和技能,解决简单的程序设计问题。

)能(3 .实验内容:2编程插入学生信息,成绩。

姓名,性别,输入一个班学生的学号,设计查找每个学生的信息,删除学生信息,输出学生信息,修改学生信息,报表和显示学生信息,及退出学生信息管理系统。

3.基本要求:)硬件:微机,打印机各一台1(Visual C++,windows7 )软件:(2 算法设计思想4.(1).分析程序的功能要求,划分程序功能模块。

(2). 画出系统流程图。

(3). 代码的编写。

定义数据结构和各个功能子函数。

1实验)学生信息管理系统(顺序表(4). 程序的功能调试。

算法的流程图5.学生信息管理系统(顺序表)实验1数主函Main开print函数输出的提示信息选择相关操根whil根0~数语句实Switc具体操16退05432系根据相关调用函数输出相应生信程序结学生信息管理系统(顺序表)实验16. 算法源代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define OK 1#define ERROR 0#define OVERFLOW -2#define MAXSIZE 10#define List_INIT_SPACE 10 #define List_INC_SPACE 1typedef struct{学生信息管理系统(顺序表)实验1char number[15];char name[10];char sex[10];int score;}Elemtype;typedef struct{Elemtype *elem;int length;int listsize;}sqlist;/*1创建空顺序表并初始化*/void creatList(sqlist *L)学生信息管理系统(顺序表)实验1{int i=0,n;Elemtype *newbase;L->elem=(Elemtype*)malloc(List_INIT_SPACE*(sizeof(Elemtype) ));if(!L->elem) exit(OVERFLOW);L->length=0;L->listsize=List_INIT_SPACE;牰湩晴尨有几位同学:\n);scanf(%d,&n);for(i=0;i<n;i++){if(L->length==L->listsize){学生信息管理系统(顺序表)实验1newbase=(Elemtype*)realloc(L->elem,(List_INIT_SPACE+List_IN C_SPACE)*sizeof(Elemtype));if(newbase){L->elem=newbase;L->listsize+=List_INC_SPACE;}else exit(OVERFLOW);}牰湩晴尨请输入第%d名同学的信息:\n,i+1);牰湩晴尨学号(15)\n);scanf(_x0016_s,L->elem[L->length].number);牰湩晴尨姓名(15)\n);scanf(_x0016_s,L->elem[L->length].name);牰湩晴尨性别(男:M女:F)\n);scanf(_x0016_s,L->elem[L->length].sex);学生信息管理系统(顺序表)实验1牰湩晴尨成绩\n);scanf(_x0010_d,&L->elem[L->length].score);L->length++;printf(%d名学生信息如下:\n,L->length);牰湩晴尨学号(15) 姓名(15) 性别(男:M女:F) 成绩\n);for(i=0;i<L->length;i++)printf(%-16s%-16s%-16s%-10d\n,L->elem[i].number,L->elem[i]. name,L->elem[i].sex,L->elem[i].score);}/*2向顺序表中插入元素*/void insertlist(sqlist*L){int i,j,k;char sign='y';学生信息管理系统(顺序表)实验1Elemtype *newbase;Elemtype newelem;while(sign!='n'){if(L->length==L->listsize){newbase=(Elemtype*)realloc(L->elem,(List_INIT_SPACE+List_INC_SPACE)*sizeof(Elemtype));if(newbase){L->elem=newbase;L->listsize+=List_INC_SPACE;}else exit(OVERFLOW);}牰湩晴尨请输入要插入的同学的信息:\n); 学生信息管理系统(顺序表)实验1牰湩晴尨学号(15)\n);scanf(_x0016_s,newelem.number);牰湩晴尨姓名(15)\n);scanf(_x0016_s,);牰湩晴尨性别(男:M女:F)\n);scanf(_x0016_s,newelem.sex);牰湩晴尨成绩\n);scanf(_x0010_d,&newelem.score);牰湩晴尨要插入到第几个位置:);scanf(%d,&i);while(i<1||i>L->length+1){牰湩晴尨不能插入到第%d个位置!\n只能插入第1到第%d个位置上!\n请重新输入要插入的位置:,L->length+1);scanf(%d,&i);}学生信息管理系统(顺序表)实验1L->length++;for(j=L->length-1;j>i-2;j--){for(k=0;k<16;k++){L->elem[j].name[k]=L->elem[j-1].name[k];L->elem[j].number[k]=L->elem[j-1].number[k];L->elem[j].sex[k]=L->elem[j-1].sex[k];}L->elem[j].score=L->elem[j-1].score;}j++;for(k=0;k<16;k++){L->elem[j].name[k]=[k];学生信息管理系统(顺序表)实验1L->elem[j].number[k]=newelem.number[k];L->elem[j].sex[k]=newelem.sex[k];}L->elem[j].score=newelem.score;牰湩晴尨是否还要输入?(Y or N));getchar();scanf(%c,&sign);if(sign=='n'||sign=='N')sign='n';}printf(%d名学生信息如下:\n,L->length);牰湩晴尨学号(15) 姓名(15) 性别(男:M女:F) 成绩\n);for(i=0;i<L->length;i++)printf(%-16s%-16s%-16s%-10d\n,L->elem[i].number,L->elem[i]. name,L->elem[i].sex,L->elem[i].score);学生信息管理系统(顺序表)实验1}/*3查找学生信息*/int findlist(sqlist *L){int j;char i[16];printf(.按学号查找\n2.按姓名查找\n请选择:);scanf(%d,&j);if(j==1){牰湩晴尨请输入学号:);scanf(%s,i);for(j=0;j<L->length;j++)if(!strcmp(i,L->elem[j].number))//i==L->elem[j].number用数组函数学生信息管理系统(顺序表)实验1return j+1;return 0;}else{牰湩晴尨请输入姓名:);scanf(%s,i);for(j=0;j<L->length;j++)if(!strcmp(i,L->elem[j].name))//用数组函数return j+1;return 0;}}/*4删除学生信息*/学生信息管理系统(顺序表)实验1int delnode(sqlist *L){int j;char i[10];printf(.按学号删除\n2.按姓名删除\n请选择:); scanf(%d,&j);if(j==1){牰湩晴尨请输入学号:);scanf(%s,i);for(j=0;j<L->length;j++)if(!strcmp(i,L->elem[j].number))//i==L->elem[j].number用数组函数{for(;j<L->length;j++)L->elem[j]=L->elem[j+1];L->length--;学生信息管理系统(顺序表)实验1return 1;}return 0;}else{牰湩晴尨请输入姓名:);scanf(%s,i);for(j=0;j<L->length;j++)if(!strcmp(i,L->elem[j].name))//用数组函数{for(;j<L->length;j++)L->elem[j]=L->elem[j+1]; //L->elem[j]以后的向前挪L->length--;return 1;学生信息管理系统(顺序表)实验1}return 0;}}/*5输出学生信息*/void printlist(sqlist *L){int i;printf(%d名学生信息如下:\n,L->length);牰湩晴尨学号(15) 姓名(15) 性别(男:M女:F) 成绩\n);for(i=0;i<L->length;i++)printf(%-16s%-16s%-16s%-10d\n,L->elem[i].number,L->elem[i]. name,L->elem[i].sex,L->elem[i].score);}学生信息管理系统(顺序表)实验1/*6修改功能*/void reviselist(sqlist *L){int i,x,a=0;char name[16];char sex[16];char number[16];int score;牰湩晴尨请选择你要改的同学的姓名);scanf(_x0016_s,name);牰湩晴尨请选择你要改的同学的信息\n);printf(.修改学生的姓名\n);printf(.修改学生的学号\n);printf( .修改学生的性别\n);printf(.修改学生的成绩\n);学生信息管理系统(顺序表)实验1scanf(%d,&x);switch(x){case 1:for(i=0;i<L->length;i++){if(strcmp(name,L->elem[i].name)==0) {牰湩晴尨请输入新名字);scanf(_x0016_s,name);strcpy(L->elem[i].name,name);a=1;}}学生信息管理系统(顺序表)实验1if(a==0)牰湩晴尨对不起你要改的名字不存在\n); break;case 2:for(i=0;i<L->length;i++){if(strcmp(name,L->elem[i].name)==0) {牰湩晴尨请输入新学号);scanf(_x0016_s,number);strcpy(L->elem[i].number,number);a=1;}}if(a==0)学生信息管理系统(顺序表)实验1牰湩晴尨对不起你要改的名字不存在\n); break;case 3:for(i=0;i<L->length;i++){if(strcmp(name,L->elem[i].name)==0) {牰湩晴尨请输入新性别);scanf(_x0016_s,sex);strcpy(L->elem[i].sex,sex);a=1;}}if(a==0)牰湩晴尨对不起你要改的名字不存在\n); 学生信息管理系统(顺序表)实验1break;case 4:for(i=0;i<L->length;i++){if(strcmp(name,L->elem[i].name)==0) {牰湩晴尨请输入新成绩);scanf(%d,score);L->elem[i].score=score;a=1;}}if(a==0)牰湩晴尨对不起你要改的名字不存在\n); break;学生信息管理系统(顺序表)实验1}}/*0退出学生信息管理系统*/void tuichu(sqlist *L){if(!L->elem)free(L->elem);printf(\\n再见,欢迎下次使用);exit(-2);}void main(){sqlist a,*L=&a;学生信息管理系统(顺序表)实验1int i;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(******************************************************************\n);while(1)学生信息管理系统(顺序表)实验1{printf(\\n请选择(0-6):);scanf(%d,&i);while(i<0||i>6){牰湩晴尨只能选择0到6!请重新选择:);scanf(%d,&i);}switch(i){case 1:creatList(L);牰湩晴尨初始化完毕!);break;case 2:学生信息管理系统(顺序表)实验1insertlist(L);break;case 3:i=findlist(L);if(!i)牰湩晴尨没有该学生\n);else{i--;牰湩晴尨要查找的学生:\n);牰湩晴尨学号姓名性别成绩\n);printf(%-10s%-10s%-10s%-d\n,L->elem[i].number,L->elem[i].na me,L->elem[i].sex,L->elem[i].score);}break;case 4:i=delnode(L);学生信息管理系统(顺序表)实验1if(!i)牰湩晴尨没有该学生\n);else灻楲瑮?该学生已删除);} break;case 5:printlist(L);break; case 6:reviselist(L);break; case 0:tuichu(L);}}}7.运行结果:(1)初始化学生信息管理系统(顺序表)实验1)信息录入(2)信息插入(3学生信息管理系统(顺序表)实验1 (4)信息查询(5)删除信息学生信息管理系统(顺序表)实验1)修改学生信息(6)退出系统(71实验(顺序表)学生信息管理系统8.收获及体会:加强了小组成通过这次实训,增加了我们学习软件技术的兴趣,但通员之间的协作能力。

学生系统实验报告

学生系统实验报告

实验名称:学生信息管理系统实验日期:2021年10月15日实验地点:计算机实验室一、实验目的1. 了解学生信息管理系统的基本功能和操作流程。

2. 掌握数据库设计、数据录入、查询、修改和删除等基本操作。

3. 提高数据库应用能力,培养实际操作技能。

二、实验内容1. 系统功能模块设计2. 数据库设计3. 系统实现4. 系统测试三、实验步骤1. 系统功能模块设计(1)用户登录模块:实现用户身份验证,确保系统安全。

(2)学生信息管理模块:实现学生信息的录入、查询、修改和删除等功能。

(3)成绩管理模块:实现学生成绩的录入、查询、修改和删除等功能。

(4)系统设置模块:实现系统参数的设置和修改。

2. 数据库设计(1)学生信息表(student):包含学号、姓名、性别、年龄、班级、联系电话等字段。

(2)成绩表(score):包含学号、课程名称、分数等字段。

3. 系统实现(1)用户登录模块实现:- 用户输入用户名和密码;- 系统验证用户名和密码是否正确;- 若正确,则进入系统;若错误,则提示用户重新输入。

(2)学生信息管理模块实现:- 添加学生信息:输入学生信息,保存到数据库;- 查询学生信息:根据学号或姓名查询学生信息;- 修改学生信息:根据学号修改学生信息;- 删除学生信息:根据学号删除学生信息。

(3)成绩管理模块实现:- 添加成绩:输入学生学号、课程名称、分数,保存到数据库;- 查询成绩:根据学号或课程名称查询成绩;- 修改成绩:根据学号和课程名称修改成绩;- 删除成绩:根据学号和课程名称删除成绩。

(4)系统设置模块实现:- 设置系统参数:如系统标题、默认密码等;- 修改系统参数:对已设置的参数进行修改。

4. 系统测试(1)功能测试:测试系统各个功能模块是否正常运行;(2)性能测试:测试系统在处理大量数据时的响应速度和稳定性;(3)安全性测试:测试系统在用户登录、数据录入、修改和删除等操作过程中的安全性。

四、实验结果与分析1. 实验结果(1)系统功能模块设计合理,实现了预期的功能;(2)数据库设计符合实际需求,数据结构清晰;(3)系统实现过程中,遵循了良好的编程规范,代码质量较高;(4)系统测试结果显示,系统性能稳定,安全性良好。

学生信息管理系统实验报告

学生信息管理系统实验报告

数据库系统概论实验报告代码:publicpartialclass Form1 : Form{public Form1(){InitializeComponent();}privatevoid button1_Click(object sender, EventArgs e) {SearchForm searchfrm = new SearchForm();searchfrm .ShowDialog ();}privatevoid button2_Click(object sender, EventArgs e) {ModifyForm modifyfrm = new ModifyForm();modifyfrm.ShowDialog();}privatevoid button3_Click(object sender, EventArgs e) {ScoreForm scorefrm = new ScoreForm();scorefrm.ShowDialog();}4.创建数据库和主程序的连接。

5.学生信息查询窗体创建。

主要功能:可以满足简单的查询的需要。

不输入任何条件,可以显示所有记录;输入条件可以进行简单的查询,各条件之间为“与”的关系。

在查询结果中选择一行双击可以查看这个学生的具体选课信息及成绩。

(1)学生信息界面创建过程:窗体上放入DataGridView命名为stuDGV。

再放入两个文本框,一个下拉列表和一个“查询”命令按钮。

代码:public SearchForm()_sql = "insert into XSBvalues('"+stuXH.Text+"','"+stuXM.Text+"','"+sex+"','"+stuCSSJ.Text+"','"+stuZY.Text+"',"+ int.Parse(stuZXF.Text)+",'"+stuBZ.Text+"',null)";}cmd = new SqlCommand(_sql,conn);cmd.ExecuteNonQuery();ModifyForm_Load(null,null);}finally{conn.Close();}}}7.学生成绩录入窗体创建。

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

创作编号:GB8878185555334563BT9125XW创作者:凤呜大王*数据结构课程设计设计题目:学生信息管理系统(顺序)姓名及学号:专业班级:09计算机科学与技术指导教师:完成时间:信息工程学院计算机科学系安徽新华学院课程设计成绩评定表(本科)目录一、实验目的 (1)二、实验内容 (1)三、基本要求 (1)四、算法设计思想 (1)五、算法流程图 (1)六、算法源代码 (6)七、运行结果 (22)八、收获和体会 (25)九、致谢 (25)1. 实验目的:通过制作学生信息管理系统(1)基本掌握面向过程程序设计的的基本思路和方法;(2)达到熟练掌握C语言的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题。

2.实验内容:输入一个班学生的学号,姓名,性别,成绩。

编程插入学生信息,设计查找每个学生的信息,删除学生信息,输出学生信息,修改学生信息,报表和显示学生信息,及退出学生信息管理系统。

3.基本要求:(1)硬件:微机,打印机各一台(2)软件:Visual C++,windows74.算法设计思想(1).分析程序的功能要求,划分程序功能模块。

(2). 画出系统流程图。

(3). 代码的编写。

定义数据结构和各个功能子函数。

(4). 程序的功能调试。

5. 算法的流程图6. 算法源代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define OK 1#define ERROR 0#define OVERFLOW -2#define MAXSIZE 10#define List_INIT_SPACE 10 #define List_INC_SPACE 1typedef struct{char number[15];char name[10];char sex[10];int score;}Elemtype;typedef struct{Elemtype *elem;int length;int listsize;}sqlist;/*1创建空顺序表并初始化*/void creatList(sqlist *L){int i=0,n;Elemtype *newbase;L->elem=(Elemtype*)malloc(List_INIT_SPACE*(sizeof(Elemty pe)));if(!L->elem) exit(OVERFLOW);L->length=0;L->listsize=List_INIT_SPACE;printf("有几位同学:\n");scanf("%d",&n);for(i=0;i<n;i++){if(L->length==L->listsize){newbase=(Elemtype*)realloc(L->elem,(List_INIT_SPACE+List _INC_SPACE)*sizeof(Elemtype));if(newbase){L->elem=newbase;L->listsize+=List_INC_SPACE;}else exit(OVERFLOW);}printf("请输入第%d名同学的信息:\n",i+1);printf("学号(15)\n");scanf("%16s",L->elem[L->length].number);printf("姓名(15)\n");scanf("%16s",L->elem[L->length].name);printf("性别(男:M女:F)\n");scanf("%16s",L->elem[L->length].sex);printf("成绩\n");scanf("%10d",&L->elem[L->length].score);L->length++;}printf("%d名学生信息如下:\n",L->length);printf("学号(15) 姓名(15) 性别(男:M女:F) 成绩\n");for(i=0;i<L->length;i++)printf("%-16s%-16s%-16s%-10d\n",L->elem[i].number,L->elem [i].name,L->elem[i].sex,L->elem[i].score);}/*2向顺序表中插入元素*/void insertlist(sqlist*L){int i,j,k;char sign='y';Elemtype *newbase;Elemtype newelem;while(sign!='n'){if(L->length==L->listsize){newbase=(Elemtype*)realloc(L->elem,(List_INIT_SPACE+List _INC_SPACE)*sizeof(Elemtype));if(newbase){L->elem=newbase;L->listsize+=List_INC_SPACE;}else exit(OVERFLOW);}printf("请输入要插入的同学的信息:\n");printf("学号(15)\n");scanf("%16s",newelem.number);printf("姓名(15)\n");scanf("%16s",);printf("性别(男:M女:F)\n");scanf("%16s",newelem.sex);printf("成绩\n");scanf("%10d",&newelem.score);printf("要插入到第几个位置:");scanf("%d",&i);while(i<1||i>L->length+1){printf("不能插入到第%d个位置!\n只能插入第1到第%d个位置上!\n请重新输入要插入的位置:",L->length+1);scanf("%d",&i);}L->length++;for(j=L->length-1;j>i-2;j--){for(k=0;k<16;k++){L->elem[j].name[k]=L->elem[j-1].name[k];L->elem[j].number[k]=L->elem[j-1].number[k];L->elem[j].sex[k]=L->elem[j-1].sex[k];}L->elem[j].score=L->elem[j-1].score;}j++;for(k=0;k<16;k++){L->elem[j].name[k]=[k];L->elem[j].number[k]=newelem.number[k];L->elem[j].sex[k]=newelem.sex[k];}L->elem[j].score=newelem.score;printf("是否还要输入?(Y or N)");getchar();scanf("%c",&sign);if(sign=='n'||sign=='N')sign='n';}printf("%d名学生信息如下:\n",L->length);printf("学号(15) 姓名(15) 性别(男:M女:F) 成绩\n");for(i=0;i<L->length;i++)printf("%-16s%-16s%-16s%-10d\n",L->elem[i].number,L->elem [i].name,L->elem[i].sex,L->elem[i].score);}/*3查找学生信息*/int findlist(sqlist *L){int j;char i[16];printf("1.按学号查找\n2.按姓名查找\n请选择:");scanf("%d",&j);if(j==1){printf("请输入学号:");scanf("%s",i);for(j=0;j<L->length;j++)if(!strcmp(i,L->elem[j].number))//i==L->elem[j].number 用数组函数return j+1;return 0;}else{printf("请输入姓名:");scanf("%s",i);for(j=0;j<L->length;j++)if(!strcmp(i,L->elem[j].name))//用数组函数return j+1;return 0;}}/*4删除学生信息*/int delnode(sqlist *L){int j;char i[10];printf("1.按学号删除\n2.按姓名删除\n请选择:");scanf("%d",&j);if(j==1){printf("请输入学号:");scanf("%s",i);for(j=0;j<L->length;j++)if(!strcmp(i,L->elem[j].number))//i==L->elem[j].number 用数组函数{for(;j<L->length;j++)L->elem[j]=L->elem[j+1];L->length--;return 1;}return 0;}else{printf("请输入姓名:");scanf("%s",i);for(j=0;j<L->length;j++)if(!strcmp(i,L->elem[j].name))//用数组函数{for(;j<L->length;j++)L->elem[j]=L->elem[j+1]; //L->elem[j]以后的向前挪L->length--;return 1;}return 0;}}/*5输出学生信息*/void printlist(sqlist *L){int i;printf("%d名学生信息如下:\n",L->length);printf("学号(15) 姓名(15) 性别(男:M女:F) 成绩\n");for(i=0;i<L->length;i++)printf("%-16s%-16s%-16s%-10d\n",L->elem[i].number,L->elem [i].name,L->elem[i].sex,L->elem[i].score);}/*6修改功能*/void reviselist(sqlist *L){int i,x,a=0;char name[16];char sex[16];char number[16];int score;printf("请选择你要改的同学的姓名");scanf("%16s",name);printf("请选择你要改的同学的信息\n");printf("1.修改学生的姓名\n");printf("2.修改学生的学号\n");printf("3.修改学生的性别\n");printf("4.修改学生的成绩\n");scanf("%d",&x);switch(x){case 1:for(i=0;i<L->length;i++){if(strcmp(name,L->elem[i].name)==0){printf("请输入新名字");scanf("%16s",name);strcpy(L->elem[i].name,name);a=1;}}if(a==0)printf("对不起你要改的名字不存在\n"); break;case 2:for(i=0;i<L->length;i++){if(strcmp(name,L->elem[i].name)==0){printf("请输入新学号");scanf("%16s",number);strcpy(L->elem[i].number,number);a=1;}}if(a==0)printf("对不起你要改的名字不存在\n");break;case 3:for(i=0;i<L->length;i++){if(strcmp(name,L->elem[i].name)==0){printf("请输入新性别");scanf("%16s",sex);strcpy(L->elem[i].sex,sex);a=1;}}if(a==0)printf("对不起你要改的名字不存在\n");break;case 4:for(i=0;i<L->length;i++){if(strcmp(name,L->elem[i].name)==0) {printf("请输入新成绩");scanf("%d",score);L->elem[i].score=score;a=1;}}if(a==0)printf("对不起你要改的名字不存在\n");break;}}/*0退出学生信息管理系统*/void tuichu(sqlist *L){if(!L->elem)free(L->elem);printf("\n\n再见,欢迎下次使用");exit(-2);}void main(){sqlist a,*L=&a;int i;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("*======================================== \n");printf("******************************************************************\n");while(1){printf("\n\n请选择(0-6):");scanf("%d",&i);while(i<0||i>6){printf("只能选择0到6!请重新选择:");scanf("%d",&i);}switch(i){case 1:creatList(L);printf("初始化完毕!");break;case 2:insertlist(L);break;case 3:i=findlist(L);if(!i)printf("没有该学生\n");else{i--;printf("要查找的学生:\n");printf("学号姓名性别成绩\n");printf("%-10s%-10s%-10s%-d\n",L->elem[i].number,L->elem[i] .name,L->elem[i].sex,L->elem[i].score);}break;case 4:i=delnode(L);if(!i)printf("没有该学生\n");else{printf("该学生已删除");}break;case 5:printlist(L);break;case 6:reviselist(L);break;case 0:tuichu(L);}}}7.运行结果:(1)初始化(2)信息录入(3)信息插入(4)信息查询(5)删除信息(6)修改学生信息(7)退出系统8.收获及体会:通过这次实训,增加了我们学习软件技术的兴趣,加强了小组成员之间的协作能力。

相关文档
最新文档