求助:数据结构实验报告(c语言版)

实验题目:学生成绩管理【实验内容与要求】学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本实验是对学生的成绩管理作一个简单的模拟,用菜单选择操作方式完成下列功... 实验题目:学生成绩管理
【实验内容与要求】

学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本实验是对学生的成绩管理作一个简单的模拟,用菜单选择操作方式完成下列功能:

(1)学生成绩;

(2)查询学生成绩;

(3)插入学生成绩;

(4)删除学生成绩。

【知识要点】

本实验涉及单链表的各种操作,包括单链表的建立、结点的查找、插入、删除等基本运算。链表中插入结点的指针变化,删除p所指结点的指针变化。

【实现提示】

本题实质是建立学生成绩单链表,每条信息由学号、姓名与成绩组成,即链表中每个结点由4个域组成,分别为:学号、姓名、成绩、存放下一个结点地址的next域。要求完成的四项功能可写成四个函数,登记学生成绩对应建立学生单链表的功能,后三个功能分别对应单链表的查询、插入与删除三大基本操作。
展开
 我来答
府羽tU
2007-10-25 · TA获得超过2852个赞
知道大有可为答主
回答量:1737
采纳率:0%
帮助的人:1521万
展开全部
/* 标准文档模板 */

#include "Stdio.h"
#include "Conio.h"
#define SIZE 50
struct student
{
int ID;
char name[20];
int score[3];//三门课的成绩
float avg;
};
int count=4; //用来记录总条数 因为已有四条记录所以初始化为4,再录入记录时从第四条开始记录
void input(struct student stu[]) /*实现信息录入功能*/
{
int i;
int sum; //总分
char ch;
do
{
sum=0;
printf("请输入学生ID:\n");
scanf("%d",&stu[count].ID);
printf("请输入学生name:\n");
scanf("%s",&stu[count].name);
for(i=0;i<3;i++)
{
printf("请输入第%d门成绩",i+1);
scanf("%d",&stu[count].score[i]);
sum=sum+stu[count].score[i];//计算总分
}
stu[count].avg=sum/3.0f; //计算平均分
count++; //累计总记录条数
printf("是否继续录入信息?(y/n)");
fflush(stdin);
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');
}
void view(struct student stu[]) /*实现信息浏览功能*/
{
int i;
printf("\nID \tNAME \t\tSTB\tC语言\tSQL\tAVG\n");
for(i=0;i<count;i++)
{
printf("%d\t%-15.7s %d\t%d\t%d\t%-.2f\n",stu[i].ID,stu[i].name,stu[i].score[0],
stu[i].score[1],stu[i].score[2],stu[i].avg);
}
}

void sort_ID(struct student stu[]) //按学号进行排序
{
int i,j;
struct student temp;//定义结构体变量来实现整条记录交换
for(i=0;i<count-1;i++) //选择排序法进行排序
{
for(j=i+1;j<count;j++)
{
if(stu[i].ID<stu[j].ID)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
view(stu);
}
void sort_Name(struct student stu[]) //按姓名进行排序
{
int i,j;
struct student temp;
for(i=0;i<count-1;i++)//选择排序法进行排序
{
for(j=i+1;j<count;j++)
{
if(strcmp(stu[i].name,stu[j].name)>0) //用strcmp比较名字的大小
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
view(stu);
}
void sort_Avg(struct student stu[]) //按平均分大小进行排序
{
int i,j;
struct student temp;//定义结构体变量来实现整条记录交换
for(i=0;i<count-1;i++) //选择排序法进行排序
{
for(j=i+1;j<count;j++)
{
if(stu[i].avg<stu[j].avg)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
view(stu);
}
void sort(struct student stu[])
{
int option;
do
{
printf("\n========1.按学号排序==========2.按姓名排序=======\n");
printf("\n========3.按平均分排序========0.退出=============\n");
printf("请选择:\n");
scanf("%d",&option);
switch(option)
{
case 0:printf("谢谢!");break;
case 1:sort_ID(stu);break;
case 2:sort_Name(stu);break;
case 3:sort_Avg(stu);break;
default:printf("请重新选择!"); break;
}
}while(option!=0);
}
/* 按学号查询*/
void findID(struct student stu[])
{
int tempID;//要查找的临时学号
char flag='n'; //默认没有找到状态
int i;
printf("请输入要查询的学号:");
scanf("%d",&tempID);
printf("\n\t 学号 \t姓名\tSTB \tC成绩\tSQL成绩 平均分\n");
for(i=0;i<count;i++)
{
if(tempID==stu[i].ID) //找到
{
printf("\t%d\t%s\t%d\t%d\t%df\t%-.2f\n",stu[i].ID,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avg);
flag='y'; //找到的状态

}

}
if(flag!='y')
printf("找不到学号是%d的记录\n",tempID);

}
/* 按姓名查询*/
void findName(struct student stu[])
{
char tempName[15]; //要查找的临时姓名
int flag=0; //默认没有找到状态
int i;
printf("请输入要查询的姓名:");
fflush(stdin);
scanf("%s",tempName);
printf("\n\t 学号 \t姓名\tSTB \tC成绩\tSQL成绩 平均分\n");
for(i=0;i<count;i++)
{
if(strcmp(tempName,stu[i].name)==0) //找到
{
printf("\t%d\t%s\t%d\t%df\t%df\t%-.2f\n",stu[i].ID,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avg);
flag=1; //找到的状态

}

}
if(flag!=1)
printf("找不到姓名是%s的记录\n",tempName);

}
/* 按学号,姓名,平均分查询 */
void find(struct student stu[])
{
int option;
printf("\n********************************************************\n");
printf("\n****** 1. 退出 2.按学号 3.按姓名 ****************\n");
printf("\n********************************************************\n");
printf("请选择: ");
scanf("%d",&option);
switch(option)
{
case 1: break;
case 2: findID(stu);break;
case 3: findName(stu);break;
default: printf("选项无效!! \n");break;
}
}
int main(void)
{
/* 此处添加你自己的代码 */
struct student stu[SIZE]={{1002,"LiLan",70,80,90,80},{1004,"WangHai",75,85,95,85},
{1003,"LiYang",60,80,73,81},{1001,"JackChen",95,90,100,95}}; //初始化四条信息
int option;
do
{
printf("\n======0.退出===========1.信息录入==========2.信息浏览=====\n");
printf("\n======3.信息排序========4.信息查询========================\n");
printf("请选择:\n");
scanf("%d",&option);
switch(option)
{
case 0:printf("欢迎下次再使用!");break;
case 1:input(stu);break;
case 2:view(stu);break;
case 3:sort(stu);break;
case 4:find(stu);break;
default:printf("请重新选择!");
}
}while(option!=0);
getch();
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式