admin 管理员组文章数量: 887021
2024年2月7日发(作者:matlab随机数rand)
实验项目
实验地点
一、实验目的
线性表存储结构及实现
参与人员
个人
实验次序
实验日期
1、掌握线性表的概念及实现方式
2、熟悉线性表的存储结构及运算
二、实验环境
VS2010
三、实验内容
1、内容描述
定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 给定一个学生信息,插入到表中指定的位置;
(5) 删除指定位置的学生记录;
(6) 统计表中学生个数。
2、实现代码
1
#include
#include
#include
#define MAXSIZE 100
typedef struct{
char no[50];
char name[50];
int price;
}Student;
typedef struct{
Student elem[MAXSIZE];
int length;
}SqList;
int Locate(SqList L);
int InsList(SqList &L,int i,Student e);
int DelList(SqList L,int i);
int main()
2
{
int i,x,a,temp,select,sum=0,c;
SqList L;
Student m,e;
printf("********************************************************************n");
printf("* 1. 逐个显示学生表中所有学生的相关信息;
*n");
printf("* 2. 根据姓名进行查找,返回此学生的学号和成绩; *n");
printf("* 3. 给定一个学生信息,插入到表中指定的位置;
*n");
printf("* 4. 删除指定位置的学生记录;
*n");
printf("* 5. 统计表中学生个数;
*n");
printf("*
*n");
printf("********************************************************************n");
printf("n");
printf("录入学生信息n");
3
6. 退出。
printf("请输入学生的数量:");
scanf("%d",&x);
printf("n");
sum=x;
for(i=0;i { printf("第%d位学生信息n",i+1); printf("n"); printf("学号:"); scanf("%s",[i].no); printf("-----------------------------n"); printf("姓名:"); scanf("%s",[i].name); printf("-----------------------------n"); printf("成绩:"); scanf("%d",&[i].price); printf("-----------------------------n"); } =x; printf("n"); while(true) { 4 printf("请选择你要操作的选项:"); scanf("%d",&select); printf("n"); switch(select) { case 1: printf("所有学生的相关信息为:nn"); for(i=0;i<;i++) { printf("学号:%s 姓名:%s 成绩:%dnn",[i].no,[i].name,[i].price); } printf("n"); break; case 2: printf("请输入你要查找的姓名:"); scanf("%s",); temp=Locate(L); 5 if(temp!=0) printf("学号:%s 成绩:%dnn",[temp-1].no,[temp-1].price); else printf("查找失败!nn"); break; case 3: printf("请输入你要插入的位置:"); scanf("%d",&a); printf("请输入插入学生信息:n"); printf("学号:"); scanf("%s",); printf("姓名:"); scanf("%s",); printf("成绩:"); scanf("%d",&); if(InsList(L,a,m)) { 6 sum++; printf("插入成功!nn"); } else printf("插入失败!nn"); break; case 4: printf("请输入要删除学生的位置:"); scanf("%d",&c); if(DelList(L,c)) { sum--; printf("删除成功!nn"); } else printf("删除失败!nn"); break; case 5: 7 { printf("总学生个数为:%dnn",sum); } break; case 6: { printf("n退出系统成功!请按任意键结束!n"); exit(0); } break; } } return 0; } int Locate(SqList L) //按照姓名查找 { Student e; int i; for(i=0;i<+1;i++) { if(!strcmp([i].name,)) //比较两个字符串是否相同 8 return i+1; } return 0; } int InsList(SqList &L,int i,Student e) //插入学生信息 { /*在L中第i个位置之前插入新的数据元素e,L的长度加1*/ int k; if(i<1||(i>+2)) { return 0; } for(k=;k>=i-1;k--) //元素向后移动位置 [k+1]=[k]; [i-1]=e; ++; return 1; } int DelList(SqList L,int i) //删除指定位置学生记录 { int k; 9 if(i<1||i>+1) return 0; for(k=i;k<=;k++) { [k-1]=[k]; //将后面元素依次前移 } --; return 1; } 四、实验体会 1、存在问题 1. 起初未将变量名启用数组的形式,通过调试发现姓名无法储存,学号只能储存一位数字,深刻体会存储字节的问题。 2. 10 关于结构体的嵌套,如何引用其中变量问题有了深刻体会。 3. 观察到老师给的代码中sqlist &L,而我均未使用&引用符号,依然可以运行。于是查找资料编写 11 此时的Head(地址)的值与L相同! 若将引用符号&删去,则L不将改变Head的值,故&有种将传进去的参数“带出来”的作用。 于是发现即便插入了数据,再次输出时未显示插入的数据,于是进行改进加上& 12 果然插入的信息可以输出。 2、心得体会 1. 复习了switch case 以及strcmp比较函数的用法; 2. 学会增删操作中元素前后移的实现; 3. 这次实验让我真正的明白了sqList &L的使用:在函数调用中引用变量一定要初始化才可以使用。要返回到main里面进行操作、改变的顺序表需要带上&,如果只在对应函数操作的顺序表则不用。 13
版权声明:本文标题:学生管理系统C语言附代码 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1707235607h512834.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论