学生管理系统的排序函数该怎么做呀?家人可以直接把代码拉到最后看下!万分感谢!!!
#include <stdio.h>#include <stdlib.h>
#include <string.h>
void menu();
void add();
void showall();
void modify();
void dlt();
void search();
void sort();
int n=0;
struct student
{
char num;
char name;
float Cscore;
float Mscore;
float sum;
}stu;
void main()
{
int x=0,z,p=1;
menu();
while(p)
{
printf("请输入你要选择的服务:\n");
scanf("%d",&z);
switch (z)
{
case 1:add();break;
case 2:showall();break;
case 3:modify();break;
case 4:;dlt();break;
case 5:search();break;
case 6:sort();break;
case 7:p=0;break;
}
}
}
void menu()
{
system("cls");//清空屏幕
printf("\n");
printf("\t\t --------------学生成绩管理系统--------------\n");
printf("\t\t︱\t\t 1 添加记录 ︱\n");
printf("\t\t︱\t\t 2 显示记录 ︱\n");
printf("\t\t︱\t\t 3 修改记录 ︱\n");
printf("\t\t︱\t\t 4 删除记录 ︱\n");
printf("\t\t︱\t\t 5 查找记录 ︱\n");
printf("\t\t︱\t\t 6 排序记录 ︱\n");
printf("\t\t︱\t\t 0 退出系统 ︱\n");
printf("\t\t --------------------------------------------\n");
printf("\t\t请选择(0-6):\n");
}
void add() //增加学生信息
{
int m, flag, i = n, j;
char c;
printf("请输入待添加的学生人数:\n");
scanf("%d", &m);
if (m > 0)
{
do
{
flag = 1;
while (flag != 0)
{
flag = 0;
printf("请输入第%d位学生的学号:\n", i + 1);
scanf("%s",&stu.num);
for (j =0; j < i; j++)
{
if(stu.num==stu.num)
{
printf("该学号已存在,请重新输入!\n");
flag = 1;
break;
}
}
}
printf("请输入第%d位学生姓名:\n", i + 1);
scanf("%s",&stu.name);
printf("请输入第%d位学生语文成绩:\n", i + 1);
scanf("%f", &stu.Cscore);
printf("请输入第%d位学生数学成绩:\n", i + 1);
scanf("%f", &stu.Mscore);
printf("请输入第%d位学生总成绩:\n", i + 1);
scanf("%f", &stu.sum);
i++;
} while (i < m + n);
n += m;
printf("添加完成!");
system("pause");
}
printf("继续添加按Y,否则按任意键\n");
c=getchar();
if(c=='Y')
add();
}
void showall()
{ //显示当前信息
int i;
if (n == 0)
printf("您好,现在暂无学生信息,请先添加学生信息!\n");
else
{
printf("现在共有%d名学生\n", n);
printf("学号\t\t姓名\t\t语文\t\t高数\t\t总成绩\n");
for (i = 0; i < n; i++)
{
printf("%.2s\t\t%s\t\t%.2f\t\t%.2f\t\t%.2f\n", stu.num, stu.name,stu.Cscore, stu.Mscore, stu.sum);
}
}
system("pause");
}
void modify() //修改学生信息
{
int flag,num,i,m=0;
char xm;
float s1,s2,s3;
printf("请输入需要修改的学生姓名:\n");
/* do{
for(m=0;m<=100;m++)
scanf("%c",&xm);
}while(xm!='#');*/
gets(xm);
while (1)
{
flag = 0;
//m=1;
for (i=0; i < n; i++)
{
//if ("xm"==stu.name)
if(strcmp(xm,stu.name)==0)
{
flag = 1;
printf("***************************************************\n");
printf("*--- ------1.修改语文成绩-------*\n");
printf("*----2.修改数学成绩--------------3.修改总成绩--*\n");
printf("*-------------------4.退出本菜单------------------*\n");
printf("***************************************************\n\n");
printf("请输入菜单编号:\n");
scanf("%d", &num);
switch (num)
{
case 1:
printf("请输入新的语文成绩\n");
scanf("%f",&s1);
stu.Cscore=s1;
break;
case 2:
printf("请输入新的数学成绩:\n");
scanf("%f", &s2);
stu.Mscore =s2;
break;
case 3:
printf("请输入新的总成绩:\n");
scanf("%f", &s3);
stu.sum =s3;
break;
case 4:return;
default:printf("请输入1--5之间的数字!\n");
}
if (num > 0 && num < 5)
printf("修改成功!\n");
break;
}
/* else
flag=0;*/
}
if (flag == 0)
{
printf("未找到该学生,请重新输入学生姓名:\n");
gets(xm);
}
}
system("pause");
}
void dlt() //删除信息
{
int flag, i, j;
char s1;
printf("请输入要删除学生的学号:\n");
gets(s1);
flag = 0;
for (i = 0; i < n; i++)
{
if (strcmp(s1,stu.num) == 0)
{
flag = 1;
for (j = i; j < n - 1; j++)
{
stu = stu;
}
}
if (flag == 1) break;
}
if (flag == 0) printf("未找到该学生!\n");
if (flag == 1)
{
printf("删除成功!\n");
n--;
}
system("pause");
}
void search() //查询学生信息
{
char s1;
int j,i;
printf("请输入你要查找的学生姓名:\n");
scanf("%s",&s1);
while(1)
{
j=0;
for(i=0;i<n;i++)
{
if(strcmp(s1,stu.name)==0)
{
j=1;
printf("学号:\t\t姓名:\t\t数学成绩:\t\t语文成绩:\t\t总成绩:\n");
printf("%s\t\t%s\t\t%.2f\t\t%13.2f\t\t%13.2f\n",stu.num,stu.name,stu.Cscore,stu.Mscore,stu.sum);
}
}
if(j==0)
printf("没有找到该生的信息:\n");break;
}
}
void sort() //函数意义:通过先使用选项一输入学生信息后然后选择选项6进行排序,函数里的'n'是人数。我下面这个是错误的。
{
int i=0,j=0;
float score=0,s;
if(n>0)
for(j;j<n;j++){
for(i;i<n;i++)
{
if(stu.sum>score)
{
s=score;
score=stu.sum;
stu.sum=s;
s=stu.sum;
stu.sum=score;
score=s;
}
printf("%.2f\n",score);
}
}
else
printf("没有学生信息\n");
}
是按照成绩从高到底依次向下排序的
sort函数帮你修改成这样了,利用冒泡算法来进行排序:
void sort()// 排序函数,利用冒泡排序算法实现成绩由高到低排序
{
for (int i = 0; i < n; i++)
{
for(int j = 0;j < n-1;j++){
if(stu.sum < stu.sum){
stu = stu; //由于80这一位数据基本用不到,因此用以临时存储数据,即本系统一次最多能存储79位学生
stu = stu;
stu = stu;
}
}
}
for(int i = 0; i < n;i++){
printf("学生姓名:%s,总成绩:%.0f\n",stu.name,stu.sum);
}
}
还有就是输入总成绩那里没必要再输入一次总成绩,总成绩可以通过数学成绩+语文成绩得到,我修改的代码如下:
// printf("请输入第%d位学生总成绩:\n", i + 1);
// scanf("%f", &stu.sum);
stu.sum = stu.Cscore + stu.Mscore; //总成绩等于数学成绩加语文成绩
大致看了同学你好像不是很会用指针{:10_277:},你声明的结构体我在下面都用不了(可能是我太久没用C语言的缘故吧),所以借了一个最尾端的结构体元素作为临时存储单元,其他的还有挺多bug的我就先不说了,你可以再改改,期望你能够用起C语言的指针,只有学了指针你才能用C做很多事。 当初约定 发表于 2022-5-21 10:31
sort函数帮你修改成这样了,利用冒泡算法来进行排序:
还有就是输入总成绩那里没必要再输入一次总成绩, ...
好的,谢谢你的指导和意见。
页:
[1]