学生管理系统(顺序表)
题目
选择一种线性表实现方式(顺序表或单链表),实现如下线性表应用:
要求:输入n个学生的信息(姓名,性别,学号,成绩),实现功能:
功能1:查找某个学号为×××的学生;
功能2:添加一名学生的信息(姓名,性别,学号,成绩);
功能3:删除一名学号为×××的学生。
功能4:计算所有学生的平均成绩
功能5:修改学号为×××的学生的成绩。
代码
#include<stdio.h>
#include<stdlib.h>
#define pr printf("%s %s %d %d\n",L->p[i].name,L->p[i].sex,L->p[i].number,L->p[i].score)
#define sc scanf("%s %s %d %d",L->p[i].name,L->p[i].sex,&L->p[i].number,&L->p[i].score)
typedef struct Student
{
char name[20];
char sex[10];
int number;
int score;
}student;
typedef struct SqList
{
student *p;
int length;
}Node,*LinkList;
LinkList init();
void show(LinkList L);
int search(LinkList L);
void del(LinkList L);
void modify(LinkList L);
void average(LinkList L);
void add(LinkList L);
void choose();
void order(LinkList L);
int main()
{
LinkList L;
L=init();
show(L);
order(L);
}
LinkList init()
{
LinkList L;
int n,i=0;
L=(LinkList)malloc(sizeof(Node));
L->p=(student *)malloc(sizeof(student));
L->length=0;//长度为0
printf("初始化表格\n");
printf("请问你想添加多少条数据?\n");
scanf("%d",&n);
printf("开始添加数据\n");
printf("姓名,性别,学号,成绩\n");
while(i<n)
{
sc;
i++;
}
L->length=i;
printf("\n信息录入结束\n");
return L;
}
void show(LinkList L)
{
int i=0;
printf("\n展示表格信息\n");
printf("姓名,性别,学号,成绩\n");
while(i<L->length)
{
pr;
i++;
}
printf("\n展示结束\n");
}
int search(LinkList L)
{
int temp,i=0,f=0;
printf("\n开始调用查找\n");
printf("输入要操作的学号\n");
scanf("%d",&temp);
while(i<L->length)
{
if(L->p[i].number==temp)
{
f=1;
printf("\n成功找到\n");
pr;
break;
}
else i++;
}
if(!f)
{
printf("\n未找到该信息\n");
return -1;//表示出错
}
return i;//返回目标的位置
}
void del(LinkList L)
{
int temp,i=0,f=0,j;
printf("\n开始删除\n");
i=search(L);
for(j=i;j<L->length;j++)
{
L->p[j]=L->p[j+1];
}
L->length--;
printf("\n删除成功\n");
}
void modify(LinkList L)
{
int temp,i=0,f=0;
printf("开始修改");
i=search(L);
printf("\n输入你要修改的成绩\n");
scanf("%d",&temp);
L->p[i].score=temp;
}
void average(LinkList L)
{
int i=0,sum=0;
for(;i<L->length;i++)
sum+=L->p[i].score;
printf("所有学生的平均成绩为%d",sum/L->length);
}
void add(LinkList L)
{
int i=L->length,temp=0;
printf("\n开始添加\n");
printf("请输入你的数据\n");
printf("姓名,性别,学号,成绩\n");
sc;;
L->length++;
printf("添加完成\n");
}
void choose()
{
printf("\n功能1:查找某个学号为×××的学生\n");
printf("功能2:添加一名学生的信息(姓名,性别,学号,成绩)\n");
printf("功能3:删除一名学号为×××的学生\n");
printf("功能4:计算所有学生的平均成绩\n");
printf("功能5:修改学号为×××的学生的成绩\n");
printf("功能6:展示信息\n");
printf("功能7:正常退出\n");
}
void order(LinkList L)
{
int n;
choose();
printf("请问你想选择的功能\n");
scanf("%d",&n);
switch(n)
{
case 1: search(L);order(L);break;
case 2: add(L);order(L);break;
case 3: del(L);order(L);break;
case 4: average(L);order(L);break;
case 5: modify(L);order(L);break;
case 6: show(L);order(L);break;
case 7: exit(0);break;
default:order(L);
}
}
实现
数据
3
东仔 男 20171041 100
西西 男 20171061 90
谢西 女 20171068 132
小西 男 20171051 321
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)