顺序表实现简单学生信息管理
来源:互联网 发布:淘宝最畅销类目排行榜 编辑:程序博客网 时间:2024/05/20 14:20
#include <stdio.h>#include <stdlib.h>#include <string.h>#define maxsize 3000 //定义顺序表的最大长度 typedef long long ll;typedef struct {ll num;char name[50];double score;}student; //学生的信息包括学号,姓名,成绩三个部分 typedef struct {student *elem;int length;int listsize;}sqlist; //定义顺序表的结构体,其包含学生信息的子项和当前长度以及最大长度三个信息 int initlist(sqlist *l){l->elem=(student *)malloc(sizeof(student)*maxsize);if(!l->elem) //建立顺序表的函数,建立一个长度为maxsize个学生信息子项的连续存储空间 { printf("内存分配出错\n");exit(1);}l->length=0; l->listsize=maxsize; return 1;}void listlast(sqlist *l, ll num, char name[50], double score){ if(l->length==l->listsize) //后插法插入学生信息,如果学生个数溢出时输出错误信息 { printf("线性表已满,请重新定义长度\n");exit(1); }l->elem[l->length].num=num;l->elem[l->length].score=score;strcpy(l->elem[l->length].name,name);l->length++;return ;}void show(sqlist *l,int length) //显示学生信息的函数,遍历顺序表中的每个子项 {printf("学号:\t姓名:\t成绩:\n");for(int i=0; i<length; i++){printf("%lld\t%s\t%5.1lf\n",l->elem[i].num,l->elem[i].name,l->elem[i].score);}return ;}void query(sqlist *l,int length) //按名字查询学生信息的函数 {char a[50];printf("请输入要查询学生的名字:");scanf("%s",a);for(int i=0; i<length; i++){if(strcmp(a,l->elem[i].name)==0){printf("学号:\t姓名:\t成绩:\n"); printf("%lld\t%s\t%5.1lf\n",l->elem[i].num,l->elem[i].name,l->elem[i].score); }}return ;}void delet(sqlist *l,int length) //删除学生信息的函数 {char a[50]; int i;printf("请输入要删除的学生的名字:"); scanf("%s",a);for(i=0; i<length; i++) //当学生名字符合时,删除此学生的信息,并将其后每一个学生信息拷贝到前一个节点中 {if(strcmp(a,l->elem[i].name)==0){for(int j=i; j<length; j++){l->elem[j].num=l->elem[j+1].num;l->elem[j].score=l->elem[j+1].score;strcpy(l->elem[j].name,l->elem[j+1].name);}l->length--; break; }}if( i==length ) //没有找到时输出相应的错误信息 printf("没有找到此人\n");return ;}void add1(sqlist *l,int length) //按学号添加学生信息的函数 {int num1,i,j; char a[50]; double score;printf("请输入要添加学生的信息:\n学号:\t名字:\t成绩:\n");scanf("%lld",&num1); getchar();scanf("%s",a); scanf("%lf",&score);if(num1<l->elem[0].num) //当此学号小于第一个学生的学号时,将此顺序表中的每一个学生信息向后移一位并使顺序表长度加一 {for(int j=length; j>=1; j--){l->elem[j].num=l->elem[j-1].num;l->elem[j].score=l->elem[j-1].score;strcpy(l->elem[j].name,l->elem[j-1].name);}l->elem[0].num=num1; l->elem[0].score=score; strcpy(l->elem[0].name,a);l->length++;}else if(num1>l->elem[length-1].num) //当此学生的学号大于最后一个学生的学号时,将其添加到最后并使顺序表长度加一 {l->elem[length].num=num1;l->elem[length].score=score;strcpy(l->elem[length].name,a);l->length++;}else if((num1>l->elem[0].num)&&(num1<l->elem[length-1].num)){ //当其学号位于表中某两个学生学号之间时,将其添加到顺序表中并使其后每一个学生信息后移一位 for(i=0; i<length; i++ ){if(num1>l->elem[i].num&&num1<l->elem[i+1].num){for( j=length; j>i+1; j--){l->elem[j].num=l->elem[j-1].num;l->elem[j].score=l->elem[j-1].score;strcpy(l->elem[j].name,l->elem[j-1].name);}l->elem[j].num=num1; l->elem[j].score=score;strcpy(l->elem[j].name,a); }}l->length++; }else //其他情况下输出错误信息:即没有两个相同学号的学生 printf("输入学号有误\n");return ;}void add2(sqlist *l,int length) //按位置添加学生信息 {int pos,i; ll num1;char a[50]; double score;printf("请输入要学生插入到的位置:");scanf("%d",&pos);printf("请输入要添加学生的信息:\n学号:\t名字:\t成绩:\n");scanf("%lld",&num1); getchar();scanf("%s",a); scanf("%lf",&score); if(pos==1) //如果位置为1则添加到第一位并使学生信息全部后移一位 {for(i=length; i>=1; i--){l->elem[i].num=l->elem[i-1].num; l->elem[i].score=l->elem[i-1].score;strcpy(l->elem[i].name,l->elem[i-1].name);}l->elem[0].num=num1; l->elem[0].score=score; strcpy(l->elem[0].name,a);l->length++;} else if(pos<1||pos>length+1) //如果位置信息错误则输出错误信息 { printf("位置错误\n");}else if(pos==length+1) //当位置在最后一位时则添加到表尾 {l->elem[length].num=num1;l->elem[length].score=score;strcpy(l->elem[length].name,a);l->length++;} else //其他情况下插入到表中并使其后学生信息后移一位 { for(i=length; i>=pos; i--) { l->elem[i].num=l->elem[i-1].num; l->elem[i].score=l->elem[i-1].score; strcpy(l->elem[i].name,l->elem[i-1].name); } l->elem[pos-1].num=num1; l->elem[pos-1].score=score; strcpy(l->elem[pos-1].name,a); l->length++;}return ;} void query1(sqlist *l,int length) //按位置查询学生信息的函数 {int pos,i;printf("请输入要查询学生的位置:");scanf("%d",&pos);if(pos>0&&pos<=length){ printf("学号:\t姓名:\t成绩:\n"); printf("%lld\t%s\t%5.2lf\n",l->elem[pos-1].num,l->elem[pos-1].name,l->elem[pos-1].score); } else printf("位置错误"); //位置错误时输出错误信息 return ;}void query2(sqlist *l, int length) //查询学生个数的函数 {printf("学生数量为:");printf("%d\n",length);return ;}int main(){printf("\t\t\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\n");printf("\n\n\t\t\t\t学生成绩管理系统\n\n\n");printf("\t\t\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\1\2\n");printf("\n\n\n\t\t\t\t1:输入学生信息\n") ;printf("\n\t\t\t\t2:显示学生信息\n");printf("\n\t\t\t\t3:根据姓名查询学生信息\n");printf("\n\t\t\t\t4:根据姓名删除学生信息\n");printf("\n\t\t\t\t5:根据学号添加学生信息\n");printf("\n\t\t\t\t6:输入位置添加学生信息\n");printf("\n\t\t\t\t7:输入位置查询学生信息\n"); printf("\n\t\t\t\t8:查询学生数量\n");printf("\n\t\t\t\t0:退出系统\n");printf("\n\t\t\t\t请按0-4选择菜单项:\n");sqlist list1;int n,m=0; while(scanf("%d",&n)){if(n==0) break;if(n!=1&&m==0){printf("请先输入学生信息后才能操作\n");continue; }m=1;switch(n){case 1:initlist(&list1); int length; printf("请输入要添加的学生信息的个数:"); scanf("%d",&length); ll num; char name[50]; double score; printf("请依次按照学号从小到大的顺序输入要添加学生的信息:\n学号:\t姓名:\t成绩:\n"); for(int i=0; i<length; i++) { scanf("%lld",&num); getchar(); scanf("%s",name); scanf("%lf",&score); listlast(&list1,num,name,score); if(i==length-1) printf("输入完成,可以进行下一步操作\n"); } break; case 2: show(&list1,list1.length); break; case 3: query(&list1,list1.length); break; case 4: delet(&list1,list1.length); break; case 5: add1(&list1,list1.length); break; case 6: add2(&list1,list1.length); break; case 7: query1(&list1,list1.length); break; case 8: query2(&list1,list1.length); break;}}return 0;}
阅读全文
0 0
- 顺序表实现简单学生信息管理
- 链表实现简单学生信息管理
- 顺序表-【学生信息管理系统】
- 学生信息管理系统--Sqlist-顺序表
- 顺序表应用--学生信息管理系统
- java实现简单的学生信息管理系统
- 简单学生信息管理系统
- 学生信息管理汇编实现
- 数据结构第一次上机(学生信息管理&线性表&顺序表)
- 课程设计——学生信息管理系统(顺序表 链表)
- 数据结构第一次作业(学生信息管理系统-顺序表&&链表)
- 顺序表构建学生信息管理系统(C++)
- 学生信息管理系统简单模拟(C语言实现)
- c++ stl list实现简单的学生信息管理系统
- 简单实现了一个学生成绩信息管理系统
- 一个简单的学生信息管理系统-python实现
- QT-实现简单的学生信息管理_初识QT
- 使用python实现一个简单的学生信息管理系统
- GIT 的使用方法详解
- Apriori 算法实现--结合FP树
- thymeleaf基础教程
- 7-函数参数的扩展
- Java的初步使用
- 顺序表实现简单学生信息管理
- 如何给打开 PHPStudy 的 ldap 模块
- php使用redis-数据类型为字符串类型(String)
- 解决Hibernate的session.save/update/delete操作无效问题(事务管理)
- 浅谈C/C++数组取地址
- BZOJ3884 上帝与集合的正确用法
- thymeleaf中的fragment使用
- 周志华机器学习读后总结 第14、15、16章
- ajax异步上传文件