c语言编程,跪求!高手帮忙编程,急要要,在线等最佳答案·!

要求:根据学生信息发基本情况,构造一个结构体。要求该结构体能描述学生的基本情况,包括个人信息,成绩信息等。然后使用结构体构造一个学生的数组(是动态的数组),输入学生的各个属性,按学好排序并输出学生的各项基本信息。
实现以下情况:
1.构建结构体描述学生的基本信息。
2.使用内存自动回收器分配内存构造一个学生的数组。
3.从键盘接受用户输入的各项学生基本信息,并保存到数组中。
4.按学号排序各个学生的记录,并输出所有学生的基本情况。

上面说说到的情况一定要有··谢谢·大师级别的来观看·解答·小弟不胜感激·。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
void init(struct student * std);
void insert(struct student * std);
void del(struct student * std);
void sort(struct student * std);
void show(struct student * std);
void deal(int choose,struct student *std);
#define MAX 10 //学生数据最大个数,由于要插入数据,故一般输入要小于10个
static int n=0; //全局变量,记录学生的总数
struct student
{
char name[10]; //学生姓名
float score; //学生成绩
};

void init(struct student * std) //数据的初始化
{
char k;
struct student temp; //临时接受读入的数据
do
{
printf("请输入学生的信息:\n");
printf("姓名:");
fflush(stdin);
scanf("%s",&temp.name);
printf("成绩:");
scanf("%f",&temp.score); // (成绩的读入类型写错了,)
printf("请问是否继续:y 是,n否\n");
fflush(stdin);
scanf("%c",&k);
if(temp.score>=0) //输入成绩不小于0,则认为是正常数据,记录一下
{
strcpy(std[n].name,temp.name);
std[n].score=temp.score;
n++;
}
}while(k=='y'||k=='Y');
}

void insert(struct student * std) //插入一个学生数据,在最后
{
int i,j,num=n;
char k;
struct student temp; //临时,接受读入的数据

do{

printf("您想插入到什么位置:");
printf("\n请输入小于 %d的数字 :",num+1);
scanf("%d",&i); //记录所要插入的位数
if(i>num+1)
{//如果输入的数超过最后一位,那就将这个数放在最后一个
i=num+1;
}
printf("\n输入您想要插入的\n学生姓名:");
fflush(stdin);
scanf("%s",&temp.name);
printf("成绩:");

scanf("%f",&temp.score);
if(temp.score>=0) //同上,判断数据是否有效
{
for(j=num;j>=i;j--) //数据依次前移
{
strcpy(std[j].name,std[j-1].name);
std[j].score=std[j-1].score;
}
strcpy(std[i-1].name,temp.name); //拷贝姓名
std[i-1].score=temp.score; //拷贝成绩
num++;
}

printf("请问是否继续:y 是,n否\n");
fflush(stdin);
scanf("%c",&k);
}while(k=='y'||k=='Y');
n=num;
show(std);
}

void del(struct student * std)
{
int i,j;
char del_name[10];
printf("输入您想要删除的学生姓名\n");
scanf("%s",&del_name); //读入要删除的学生的姓名
for(i=0;i<n;i++)
{
if(!(strcmp(std[i].name,del_name))) //逐个比较是否有要删除的学生,strcmp函数满足条件时返回0,所以加非号
{
for(j=i;j<n;j++) //后面的数据逐个前移一个,覆盖要删除的数据
{
strcpy(std[j].name,std[j+1].name);
std[j].score=std[j+1].score;
}
--n; //学生的总人数减一
printf("%s 已经删除!\n",del_name);

}
}
show(std);
}

void sort(struct student * std)
{
int i,j;
struct student temp;
for(i=0;i<n;i++)
{ //学生的成绩按照降序排列
for(j=0;j<n-1;j++)
{
if(std[j].score<std[j+1].score)
{
strcpy(temp.name,std[j].name);temp.score=std[j].score;
strcpy(std[j].name,std[j+1].name);std[j].score=std[j+1].score;
strcpy(std[j+1].name,temp.name);std[j+1].score=temp.score;
}
}
}
}

void show(struct student * std) //输出全部的学生
{
int i;
char k;
do
{
printf(" 姓名 | 成绩 \n");
for(i=0;i<n;i++)
{
printf("%10s\t%10.2f\n",std[i].name,std[i].score);
}
//(一般来说 显示同样的成绩 不会在同一时刻显示 两次的 建议将while()改为system("pause");
printf("请问是否继续:y 是,n否\n");
fflush(stdin);
scanf("%c",&k);
}while(k=='y'||k=='Y');
}

void deal(int choose,struct student *std) //判断,所输入的选项
{

switch(choose)
{
case 1:
init(std);
break;
case 2:
insert(std);
break;
case 3:
del(std);
break;
case 4:
sort(std);
break;
case 5:
show(std);
break;
case 6:
break;
default:
printf("please enter a right number\n"); //不符合条件则,输出提示信息
}
}

int main()
{
struct student std[MAX];
int choose;
int i;
char code[10];
char usename[20];
printf("-------------------------------------------------\n");
printf("--- ---\n");
printf("--- 欢迎使用本系统 ---\n");
printf("--- ---\n");
printf("--- 用户名或密码输入错误3次系统将会自动退出 ---\n");
printf("--- ---\n");
printf("-------------------------------------------------\n");
for(i=0;i<3;i++)
{
printf("请输入您的用户名:\n");
scanf("%s",usename);
printf("请输入您的密码:\n");
scanf("%s",code);

if(strcmp(usename,"123") == 0 && strcmp(code,"123") == 0)
{
printf("恭喜你,登陆成功!\n");
break;
}
else
{
printf("您的用户名或密码错误,请核对!\n");
}
}
if(i==3)
{
printf("\n\t对不起,错误输入已达3次,程序将退出!\n");
}
else
{
do{
system("cls");//清屏 (显示菜单前最好先清一下屏)
printf("********************************************\n");
printf("* 欢迎使用本系统 *\n");
printf("* 1 输入 *\n");
printf("* 2 插入 *\n");
printf("* 3 删除 *\n");
printf("* 4 排序 *\n");
printf("* 5 显示 *\n");
printf("* 6 退出程序 *\n");
printf("********************************************\n");
printf("请输入您的选择:\n");
scanf("%d",&choose);
deal(choose,std);
}while(choose!=6);
return 0;
system("cls");//清屏 (程序已经运行结束,这句没有运行到,可以删除)
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-18
2004-2010找答案网苏ICP备09089090号
相似回答