查詢計算機系成績最高的學生姓名
⑴ 有10名學生,每個學生的數據包括:學號、姓名成績,從鍵盤輸入10個學生的數據,輸出成績最高者的姓名和成
#include"stdio.h"
#include"stddef.h"
#include "stdlib.h"
#include"string.h"
#define MAX 10
typedef struct student{ /*定義結構體*/
char name[MAX]; /*姓名*/
int num[MAX]; /* 學號*/
char sex[MAX]; /*性別*/
int chinese; /*語文*/
int mathematic; /* 數學*/
int english; /*英語*/
int computer; /*計算機*/
struct student *next; /*結構體指針*/
}stu;
stu *head; /*頭指針*/
void print() /*顯示或列印函數*/
{
system("cls");
printf("\t\t\t成績管理系統\n"); /*成績管理系統*/
printf("<1>輸入數據\t"); /*輸入數據*/
printf("<2>顯示\t"); /*顯示*/
printf("<3>插入數據\t"); /*插入數據*/
printf("<4>訪問數據\t"); /*訪問數據*/
printf("<5>以前數據\t"); /*以前數據*/
printf("<6>保留數據\t"); /*保留數據*/
printf("<7>更新數據\t"); /*更新數據*/
printf("<8>語文平均成績\t"); /*語文平均成績*/
printf("<9>數學平均成績\t"); /*數學平均成績*/
printf("<10>英語平均成績\t"); /*英語平均成績*/
printf("<11>計算機平均成績\t"); /*計算機平均成績*/
printf("<12>退出\t\n"); /*退出*/
}
void cin(stu *p1) /*輸入相關數據的函數*/
{ printf("姓名:\n");
scanf("%s",&p1->name);
printf("年齡:\n");
scanf("%d",&p1->num);
printf("性別:\n");
scanf("%s",&p1->sex);
printf("語文:\n");
scanf("%d",&p1->chinese);
printf("數學:\n");
scanf("%d",&p1->mathematic);
printf("英語:\n");
scanf("%d",&p1->english);
printf("計算機:\n");
scanf("%d",&p1->computer);
}
stu *cindata() /*其他數據是否繼續輸入的函數*/
{ stu *p1,*p2;
int i=1;
char ch;
p1=(stu *)malloc(sizeof(stu));
head=p1;
while(i)
{
cin(p1);
printf("是否繼續輸入數據?y/n"); /*是否繼續輸入數據*/
ch=getchar();
ch=getchar();
if(ch=='n'||ch=='N')
{ i=0;
p1->next=NULL;
}
else
{ p2=p1;
p1=(stu *)malloc(sizeof(stu));
p2->next=p1;
}
}
return(p1->next);
}
stu *lookdata(stu *p1) /*查看數據的函數*/
{
while(p1!=NULL)
{ printf("年齡:%d\t",p1->num);
printf("姓名:%s\t",p1->name);
printf("性別:%s\t",p1->sex);
printf("\n");
printf("語文:%d\t",p1->chinese);
printf("數學:%d\t",p1->mathematic);
printf("英語:%d\t",p1->english);
printf("計算機:%d\t",p1->computer);
printf("\n");
p1=p1->next;
}
return p1;
}
void insert() /*通過比較學號來插入數據的函數*/
{ stu *p1,*p3,*p2;
char ch;
p1=head;
p3=(stu *)malloc(sizeof(stu));
p3->next=NULL;
if(head==NULL){ head=p3; return;}
cin(p3);
while(p1!=NULL&&(p1->num<p3->num)) /*通過學號的比較來插入*/
{ p2=p1;p1=p1->next;}
if(p2==head) {p3->next=head; head=p3; return;}
p3->next=p1;
p2->next=p3;
}
find(stu *p2) /*通過姓名查找查看數據的函數*/
{ char name[20];
int b=0;
printf("Enter the name of the student you want to find:"); /*通過姓名查看*/
scanf("%s",name);
while(p2!=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("The data you want has be found\n");
printf(" Name:%s\t",p2->name);
printf("Num:%d\t",p2->num);
printf("sex%s\t",p2->sex);
printf("\n");
printf("Chinese:%d\t",p2->chinese);
printf("Math:%d\t",p2->mathematic);
printf("English:%d\t",p2->english);
printf("Computer:%d\t",p2->computer);
printf("\n");
b=1;
}
else if(b==0)
printf("sorry not find data!");
p2=p2->next;
}
if(b==1)
{
print();
printf("Find one\n");}
else
{print();
printf("Not find\n");
}
}
void caverage() /*求各學生語文平均分、最高和最低分成績的函數*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->chinese;
aver=sum/i;
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->chinese)
max=p1->chinese;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->chinese)
min=p1->chinese;
}
printf("Chinese Average:%f",aver);
printf("Chinese Max:%f",max);
printf("Chinese Min:%f",min);
}
void maverage() /*求各學生數學平均分、最高和最低分成績的函數*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->mathematic;
aver=sum/i;
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->mathematic)
max=p1->mathematic;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->mathematic)
min=p1->mathematic;
}
printf("Mathe Average:%f",aver);
printf("Mathe Max:%f",max);
printf("Mathe Min:%f",min);
}
void eaverage() /*求各學生英語平均分、最高和最低分成績的函數*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->english;
aver=sum/i;
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->english)
max=p1->english;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->english)
min=p1->english;
}
printf("English Average:%f",aver);
printf("English Max:%f",max);
printf("English Min:%f",min);
}
void comaverage() /*求各學生計算機平均分、最高和最低分成績的函數*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->computer;
aver=sum/i;
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->computer)
max=p1->computer;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->computer)
min=p1->computer;
}
printf("Computer Average:%f",aver);
printf("Computer Max:%f",max);
printf("Computer Min:%f",min);
}
update(stu *p2) /*通過姓名查找來更新數據*/
{
char name[10]; /*p2為指向結構體struct student的指針*/
int b=0;
printf("Enter The Name"); /*輸入姓名*/
scanf("%s",name);
while(p2!=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("Find you data\n");
scanf("Name:%s",p2->name);
scanf("Num:%s",p2->num);
scanf("Sex:%s",p2->sex);
scanf("Chinese:%d",p2->chinese);
scanf("Math:%d",p2->mathematic);
scanf("english:%d",p2->english);
scanf("Computer:%d",p2->computer);
printf("Success!");
b=1;}
else if(b==0)
printf("Sorry not Find data!");
p2=p2->next;}
if(b==0)
{print();
printf("Sorry not Find data!");
}
else
{
print();
printf("Finish!");
}
}
save(stu *p2) /*保留數據函數*/
{
FILE *fp;
char file[10];
printf("Enter file name"); /*輸入文件名*/
scanf("%s",file);
fp=fopen(file,"w");
while(p2!=NULL)
{
fprintf(fp,"%s",p2->name);
fprintf(fp,"%s",p2->num);
fprintf(fp,"%s",p2->sex);
fprintf(fp,"%d",p2->chinese);
fprintf(fp,"%d",p2->mathematic);
fprintf(fp,"%d",p2->english);
fprintf(fp,"%d",p2->computer);
p2=p2->next;
}
fclose(fp);
}
char password[7]="123456"; /*定義初始密碼*/
void main() /*主函數*/
{ int choice;
stu *p2;
char s[8];
int flag=0,i; /*標志項*/
int n=3;
do{ printf("你請輸入密碼:\n");
scanf("%s",s);
if(!strcmp(s,password)) /*進行密碼匹配驗證*/
{ printf("PASS\n\n\n");
flag=1;
break;
}
else{
printf("Error Enter again:\n");
n--;
}
}
while(n>0);
if(!flag)
{printf("you have Enter 3 times!"); /*輸入密碼超過了3次!!*/
exit(0); /*自動退出*/
}
/*密碼驗證成功後進入的界面*/
printf("歡迎來到重慶航天職業技術學院\n");
printf(" 歡迎來到計算機工程系\n");
printf(" 班級:軟體技術\t班號:08051051\n"); /*班級和號碼*/
printf(" 是否進入系統\n"); /*問進入系統與否*/
scanf("%d",&choice);
if(choice=='n'||choice=='N')
exit(1);
print();
while(1)
{
printf("Enter choice:");
scanf("%d",&i);
if(i<1||i>13)
{
printf("再從1-13中進行選擇:\n"); /*再從1-13中進行選擇*/
exit(1);
}
switch(i)
{ case 1:
p2=cindata(); /*其他數據是否繼續輸入的函數*/
break;
case 2:
p2=lookdata(head); /*查看數據的函數*/
break;
case 3:
insert(); /*通過比較學號來插入數據的函數*/
break;
case 4:
find(head); /*通過姓名查找查看數據的函數*/
break;
case 5:
update(head); /*通過姓名查找來更新數據*/
break;
case 6:
save(head); /*保留數據函數*/
break;
case 7:
print(); /*顯示或列印函數*/
break;
case 8:
caverage(); /*求各學生語文平均分、最高和最低分成績的函數*/
break;
case 9:
maverage(); /*求各學生數學平均分、最高和最低分成績的函數*/
break;
case 10:
eaverage(); /*求各學生英語平均分、最高和最低分成績的函數*/
break;
case 11:
comaverage(); /*求各學生計算機平均分、最高和最低分成績的函數*/
break;
case 12:
; /*空操作*/
case 13:
exit(1); /*退出*/
break;
}
scanf("%d",&i);
}
}
密碼是123456
⑵ 用sql查詢出課程總分數最高的學生姓名
select top 1 Name
from 成績表
group by Name
order by sum(fengshu) desc
⑶ sqlserver查詢各系各科成績最高分的學生的學號,姓名,系名,課程名稱,成績
select
a.sno學號抄,a.sname姓名襲,a.sdept系名,c.cname課程名稱,b.maxgrade成績
from
studenta
innerjoin(selectcno,max(sno)sno,max(grade)maxgradefromscgroupbycno)bona.sno=b.sno
innerjoincourseconb.con=c.cno
⑷ SQL子查詢題目
select 姓名,院系 from 表名 where 課程='c001'
select 姓名,學號 from 表名 where 院系回='通信工程'and 成績答 > 80
select 姓名 from 表名 where 院系='計算機系' and 成績=(select top 1 成績 from 表名 order by 成績 desc )
select 姓名,年齡 from 表名 where 性別='男'and 年齡=(select top1年齡 from 表名)
select 學號,成績 from 表名 where 課程='c001'and 成績 >平均成績
⑸ sql sever 2008r2查詢各系各科成績最高分的學生的學號,姓名,系名,課程名稱,成績
select
a.sno學號,a.sname姓名,a.sdept系名,c.cname課程名稱版,b.maxgrade成績權
from
studenta
innerjoin(selectcno,max(sno)sno,max(grade)maxgradefromscgroupbycno)bona.sno=b.sno
innerjoincourseconb.con=c.cno
⑹ 31)查詢「計算機系」學生的學號、姓名、學生所選課程的課程名和成績,正確的命令是 A)SELECT s.學號,姓
c項在學號前註明了表的出處為s.而b項沒有註明,你看清楚,在s.和sc兩個表中,都有學號這一欄位。.
⑺ SQL查詢求每個同學的課程成績的最高分,查詢結果項包括:學生姓名、課程號及最高分
你好,你展示的第一種sql查詢方案,其意思是:
先根據score表中的sno分組求每個sno的最高分數。這求得的當然是每個同學的最高分啦,但是只是獲得了最高分,沒有指定是誰的最高分,導致在前面的【SELECT SNAME ,CNO,GRADE FROM Score Y,StudentWHERE (STUDENT.SNO=Y.SNO)】查詢結果集中的後面檢索條件【AND Y.GRANDE IN (所有人的最高分集合)】,這樣系統就會查詢分數在「所有人的最高分」里的結果集了。
而第二種方案,除了限定分數范圍(最高分),還限定了學生的編號(
SELECTMAX(GRADE)FROMSCOREWHERE
SNO=Y.SNO
GROUPBYSNO,sno=y.sno就是限定學生的編號。
),所以結果自然不同了。
根據你的要求,我給你提供一種查詢方式。其實原理是一樣的哦。
selectstu.sname,scr.cno,scr.gradefromstudentstu
leftjoinscorescronscr.sno=stu.sno
whereexists(select1from(selects.sno,max(s.grade)asmgfromscoresgroupbys.sno)twheret.sno=stu.sno
andt.mg=scr.grade)
希望能幫助你。