学生信息管理系统(顺序表)实验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. 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.收获及体会:通过这次实训,增加了我们学习软件技术的兴趣,加强了小组成员之间的协作能力。

相关文档
最新文档