当前位置: 代码迷 >> C语言 >> [求助] 学员信息管理!
  详细解决方案

[求助] 学员信息管理!

热度:298   发布时间:2007-10-21 19:31:48.0
[求助] 学员信息管理!

哪位大哥帮我改一下,效果是只要不输入0程序可以一直选择执行,

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define getch()
#define clrscr()
#define N 100
int i; //i表示共录入多少位学生,j表示课程数目

struct student
{
int num;
char name[20];
float cj1;
float cj2;
float cj3;
float pcj;
}stu[N];
void print(); //定义各函数:显示,输入,插入,删除,排序
void input();
void insert();
void del();
void sort();
void input() //输入信息
{
char k;
do
{
printf("请输入学号:");
scanf("%d",&stu[i].num);
printf("请输入姓名:");
fflush(stdin);
scanf("%s",&stu[i].name);
printf("C语言:");
scanf("%f",&stu[i].cj1);
printf("Java :");
scanf("%f",&stu[i].cj2);
printf("SQL :");
scanf("%f",&stu[i].cj3);
stu[i].pcj=(stu[i].cj1+stu[i].cj2+stu[i].cj3)/3;

printf("\n");
i++;
printf("\n是否继续?(Y/N)-->"); //判断是否继续录入
fflush(stdin);
k=getchar();
}while(getchar()=='y'||getchar()=='Y');

}

void print()
{
int p; //显示信息
printf("学号\t姓名\tC语言\tJava\tSQL\t平均成绩\n");
for(p=0;p<i;p++) //p为变量从0到i-1,j表示共有几门课程
{
printf("----------------------------------------------------\n"); //i表示共录入多少位学生
printf("%-8d%-8s%-8.1f%-8.1f%-8.1f%-8.1f",stu[p].num,stu[p].name,stu[p].cj1,stu[p].cj2,stu[p].cj3,stu[p].pcj);
printf("\n");
}
}

void insert() //插入学生信息
{
printf("\n\n输入插入学生信息\n");
input(stu);
}

void del() //删除学生信息
{
int stunum;
int t,q;
printf("\n请输入您要删除的学生学号:");
scanf("%d",&stunum);
for(q=0;q<i-1;q++)
{
if(stunum==stu[q].num)
{
break;
}
}
printf("\n\n您要删除的学生信息为:\n");
printf("----------------------------------------------------\n");
printf("\n学号\t姓名\tC语言\tJava\tSQL库\t平均成绩\n");
printf("----------------------------------------------------\n");
printf("%-8d%-8s%-8.1f%-8.1f%-8.1f%-8.1f",stu[q].num,stu[q].name,stu[q].cj1,stu[q].cj2,stu[q].cj3,stu[q].pcj); //此处q表示找到了相同学号的那行数组信息

for(t=q;t<i-1;t++)
{
stu[t]=stu[t+1];
}
i--;

getchar();

printf("\n\n是否继续删除?(Y/N)-->");
if(getchar()=='y'||getchar()=='Y')
del(stu);
}

void sort() //信息按平均成绩进行从小到大排序
{
int x,y;
float temp;
for(x=0;x<i;x++)
{
for(y=0;y<i;y++)
{
if(stu[x].pcj<stu[y].pcj)
{
temp=stu[x].pcj;
stu[x].pcj=stu[y].pcj;
stu[y].pcj=temp;
}
}
}
}

void main()
{
int a;
printf("\t\t学员信息管理\n");
printf(" 0:退出\n 1:请输入学生信息\n 2:按平均成绩排序\n 3:插入新生\n");
printf("4:删除学生记录\n ");
printf("请选择(0~4):");
scanf("%d",&a);
switch(a)
{
case 0:
exit(0);
case 1:
printf("请输入学生信息\n");
input(stu);
break;

case 2:
printf("按平均成绩排序如下:\n");
sort();
print();
break;
case 3:
printf("插入新学员\n");
insert();
printf("插入后学生信息如下:\n\n");
sort(stu);
print(stu);
break;
case 4:
printf("\n是否删除某个学生记录?(Y/N)");
fflush(stdin);
if(getchar()=='y'||getchar()=='Y')
{
del(stu);
}
printf("\n\n删除后学生信息如下:\n\n");
sort(stu);
print(stu);
break;
}
}

搜索更多相关的解决方案: 信息管理  学员  

----------------解决方案--------------------------------------------------------
void main()
{
int a;
do{
printf("\t\t学员信息管理\n");
printf(" 0:退出\n 1:请输入学生信息\n 2:按平均成绩排序\n 3:插入新生\n");
printf("4:删除学生记录\n ");
printf("请选择(0~4):");
scanf("%d",&a);
switch(a)
{
case 0:
exit(0);
case 1:
printf("请输入学生信息\n");
input(stu);
break;

case 2:
printf("按平均成绩排序如下:\n");
sort();
print();
break;
case 3:
printf("插入新学员\n");
insert();
printf("插入后学生信息如下:\n\n");
sort(stu);
print(stu);
break;
case 4:
printf("\n是否删除某个学生记录?(Y/N)");
fflush(stdin);
if(getchar()=='y'||getchar()=='Y')
{
del(stu);
}
printf("\n\n删除后学生信息如下:\n\n");
sort(stu);
print(stu);
break;
}
}
while(1);
return 0;
}

----------------解决方案--------------------------------------------------------

最好把 排序和打印部分拿出来.不要全部放在case里做重复的语句.


----------------解决方案--------------------------------------------------------

void input() //输入信息
{
char k;
do
{
printf("请输入学号:");
scanf("%d",&stu[i].num);
printf("请输入姓名:");
fflush(stdin);
scanf("%s",&stu[i].name);
printf("C语言:");
scanf("%f",&stu[i].cj1);
printf("Java :");
scanf("%f",&stu[i].cj2);
printf("SQL :");
scanf("%f",&stu[i].cj3);
stu[i].pcj=(stu[i].cj1+stu[i].cj2+stu[i].cj3)/3;

printf("\n");
i++;
printf("\n是否继续?(Y/N)-->"); //判断是否继续录入
fflush(stdin);
k=getchar();
}while(getchar()=='y'||getchar()=='Y'); //这里直接判断k就行了.

}


----------------解决方案--------------------------------------------------------
k=getchar();
}while(k=='y'||k=='Y'); //这里直接判断k就行了.
----------------解决方案--------------------------------------------------------
插入也要找个好位置
----------------解决方案--------------------------------------------------------

插在哪里应该是一样的吧,是看调用函数的时候在前面就先用哪个吧,
我这个是先插入了在排序的


----------------解决方案--------------------------------------------------------
你插入函数的i是个全局变量
i没有初始化
----------------解决方案--------------------------------------------------------
最好还是每个功能模块自定义一个函数!!!比如说显示、插入、排序、删除等等都是一样,最后都在main函数中调用就是了,那样程序出错还容易查找一些。
----------------解决方案--------------------------------------------------------
真厉害,不错!
----------------解决方案--------------------------------------------------------