| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 671 人关注过本帖
标题:[求助] 学员信息管理!
只看楼主 加入收藏
liuming2008
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-10-6
收藏
 问题点数:0 回复次数:9 
[求助] 学员信息管理!

哪位大哥帮我改一下,效果是只要不输入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;
}
}

搜索更多相关主题的帖子: 信息管理 学员 
2007-10-21 19:31
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
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;
}

倚天照海花无数,流水高山心自知。
2007-10-21 20:55
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

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


倚天照海花无数,流水高山心自知。
2007-10-21 20:56
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

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就行了.

}


倚天照海花无数,流水高山心自知。
2007-10-21 21:08
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
k=getchar();
}while(k=='y'||k=='Y'); //这里直接判断k就行了.

倚天照海花无数,流水高山心自知。
2007-10-21 21:10
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
插入也要找个好位置

倚天照海花无数,流水高山心自知。
2007-10-21 21:15
liuming2008
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-10-6
收藏
得分:0 

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


2007-10-21 21:32
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
你插入函数的i是个全局变量
i没有初始化

倚天照海花无数,流水高山心自知。
2007-10-21 21:34
xxvv
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-10-19
收藏
得分:0 
最好还是每个功能模块自定义一个函数!!!比如说显示、插入、排序、删除等等都是一样,最后都在main函数中调用就是了,那样程序出错还容易查找一些。

人為什麼這麼賤,有的時候不曾珍惜;等事過境遷才追悔莫及。
2007-10-22 11:40
酒浪子
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2007-9-25
收藏
得分:0 
真厉害,不错!
2007-10-24 21:00
快速回复:[求助] 学员信息管理!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017827 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved