題目:
一個能實現錄入學生成績(學號輸入-1時結束錄入),輸出學生成績,通過學號查詢學生信息,通過學號修改學生信息,通過學號刪除學生信息,學生的總成績排序。
#include <stdio.h>
#include <string.h>
typedef struct StuScore{
int stuID;
char stuName[10];
int yuwen;
int shuxue;
int yingyu;
} STUSCORE;
typedef struct StuScoreNode{
STUSCORE stu;
struct StuScoreNode *NEXT;
} SSN,*SSNLINK;
//創建學生信息的結構體
STUSCORE createStuScore()
{
STUSCORE stu;
printf("請輸入學生的學號:\n");
scanf("%d",&stu.stuID);
if(stu.stuID==-1)
return stu;
printf("請輸入學生的姓名:\n");
scanf("%9s",stu.stuName);
printf("請輸入學生的語文成績:\n");
scanf("%d",&stu.yuwen);
printf("請輸入學生的數學成績:\n");
scanf("%d",&stu.shuxue);
printf("請輸入學生的英語成績:\n");
scanf("%d",&stu.yingyu);
return stu;
}
//創建一個學生信息節點
SSNLINK addStuScoreNode()
{
SSNLINK assn;
assn=(SSNLINK)malloc(sizeof(SSN));
assn->stu=createStuScore();
assn->NEXT=NULL;
return assn;
}
//將一個節點添加到列表中去,返回列表的頭指針
SSNLINK addToList(SSNLINK list,SSNLINK stunode)
{
stunode->NEXT=list;
list=stunode;
return list;
}
//顯示信息
void showOneInfo2(STUSCORE ss)
{
printf("%8d%8s%8d%8d%8d\n",ss.stuID,ss.stuName,ss.yuwen,ss.shuxue,ss.yingyu);
}
//顯示所有學生信息
void showAllInfo(SSNLINK list)
{
SSNLINK p;
p=list;
printf("%8s%8s%8s%8s%8s\n","學號","姓名","語文","數學","英語");
while(p!=NULL)
{
showOneInfo2((*p).stu);
p=p->NEXT;
}
}
//查詢成績函數
void chaxuncheng(SSNLINK head)
{
int i;
SSNLINK cha;
cha=head;
printf("請輸入要查詢成績學生的學號\n");
scanf("%d",&i);getchar();
while(cha!=NULL)
{
if(i==cha->stu.stuID)
{
printf("%8s%8s%8s%8s%8s\n","學號","姓名","語文","數學","英語");
showOneInfo2(cha->stu);
}
cha=cha->NEXT;
}
}
//修改程序函數
void xiugai(SSNLINK head)
{
int i;
SSNLINK gai=head;
printf("請輸入要修改成績學生的學號\n");
scanf("%d",&i);
while(gai!=NULL)
{
if(i==gai->stu.stuID)
{
gai->stu=createStuScore();
break;
}
gai=gai->NEXT;
}
printf("修改成功");getchar();getchar();
}
//刪除成績函數
SSNLINK shanchu(SSNLINK head)
{
int i;
SSNLINK gai=head->NEXT,man=head;
printf("請輸入要刪除成績學生的學號\n");
scanf("%d",&i);
if(i==man->stu.stuID)
{
head=head->NEXT;
return head;
}
else{
while(gai!=NULL)
{
if(i==gai->stu.stuID)
{
man->NEXT=gai->NEXT;
break;
}
else
gai=gai->NEXT;
}
}
printf("刪除成功");getchar();getchar();
}
//排序
void paixiu(SSNLINK head)
{
SSNLINK da,xiao;
STUSCORE zanshi;
int a,b;
da=head;
while(da!=NULL)
{
xiao=da;
a=xiao->stu.shuxue+xiao->stu.yingyu+xiao->stu.yuwen;
while(xiao!=NULL)
{
b=xiao->stu.shuxue+xiao->stu.yingyu+xiao->stu.yuwen;
if(b>a)
{
zanshi=xiao->stu;
xiao->stu=da->stu;
da->stu=zanshi;
a=b;
}
xiao=xiao->NEXT;
}
da=da->NEXT;
}
printf("成功排序");getchar();getchar();
}
int main()
{
SSNLINK list=NULL,node;//list是列表的頭指針,node爲單節點的指針
int choice;//choice是要選擇的服務數字
while(1)//讓程序一直循環
{
system("cls");
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",&choice);
switch(choice)
{
case 1://添加學生信息
while(1)
{
node=addStuScoreNode();
if(node->stu.stuID==-1)
break;
list=addToList(list,node);
}
break;
case 2:showAllInfo(list);getchar();getchar();break;
case 3:chaxuncheng(list);getchar();break;
case 4:xiugai(list);break;
case 5:list=shanchu(list);break;
case 6:paixiu(list);break;
case -1:exit(0);
}
}
}