这里是我做的只有单科成绩的可以按几种排序方式进行的,你可以自己改看看……
帮不到你的话就对不起了,太晚了,该休息了……
#include
#include
#include
#include
#include
#define OrderLen 11
#define NameLen 16
typedef struct ScoreManager
{
char StudyOrder[OrderLen];
char StudentName[NameLen];
int StudentScore;
}SMR;
int main(void);
void InfoInput(SMR *Info, int n);
SMR *OrderSort(const SMR *Info,int n);
SMR *ScoreSort(const SMR *Info,int n);
void PutOrder(const SMR *Info,char *In,int n);
void InfoOutput(const SMR *Info,int n);
void StartInterface(void);
void DrawAStarLine(void);
void DrawAStrLine(void);
int main(void)
{
StartInterface();
return 0;
}
void StartInterface(void)
{
SMR *StuInfo;
SMR *OrSoInfo;
SMR *ScSoInfo;
int n;
char SearchOrder;
int CtrlExit=0;
char AskExit;
char In[11];
printf("\t\3\3欢迎使用学生MCG成绩管理系统\3\3");
printf("\7\n");
DrawAStarLine();
printf("\17\t\t");
printf("请输入学生总数:\t\t\t\t\t\t\17\n");
printf("\t\t\t\t\t\t\t\t\t\17");
printf("\r\17\t\t\t\t");
scanf("%d",&n);
StuInfo=(SMR *)malloc(n*sizeof(SMR));
InfoInput(StuInfo,n);
OrSoInfo=(SMR *)malloc(n*sizeof(SMR));
ScSoInfo=(SMR *)malloc(n*sizeof(SMR));
while(!CtrlExit){
printf("\17\t\t请输入您想查询的方式:有以下四种可供选择:\t\t\17\n");
printf("\17\t\t\t按学号查询,请按\"O\"键\t\t\t\t\17 \n");
printf("\17\t\t\t按成绩查询,请按\"S\"健 \t\t\t\t\17\n");
printf("\17\t\t\t显示输入学号的学生成绩,请按\"I\"键\t\t\17\n");
printf("\17\t\t\t察看原始数据,请按 \"R\"键\t\t\t\17\n");
SearchOrder=getch();
if( SearchOrder == 'o' || SearchOrder == 'O' ){
DrawAStarLine();
printf("\17\t\t\t按学号排列以下学生成绩\t\t\t\t\17\n");
OrSoInfo=OrderSort(StuInfo,n);
DrawAStarLine();
InfoOutput(OrSoInfo,n);
}
else if( SearchOrder == 's' || SearchOrder == 'S' ){
DrawAStarLine();
printf("\17\t\t\t按成绩排列以下学生成绩\t\t\t\t\17\n");
ScSoInfo=ScoreSort(StuInfo,n);
DrawAStarLine();
InfoOutput(ScSoInfo,n);
}
else if( SearchOrder == 'r' || SearchOrder == 'R' ){
DrawAStarLine();
printf("\17\t\t\t原始数据\t\t\t\t\t\17\n");
DrawAStarLine();
InfoOutput(StuInfo,n);
}
else if(SearchOrder == 'i' || SearchOrder == 'I' )
{
DrawAStarLine();
printf("\17\t\t\t请输入要查询的学生的学号:\t\t\t\17\n");
flushall();
printf("\t\t\t\t\t\t\t\t\t\17");
printf("\r\17\t\t\t\t\t\t\t");
gets(In);
DrawAStarLine();
PutOrder(StuInfo,In,n);
}
else {
printf("\17\t\t输入格式有错,无法查询\t\t\t\t\t\17\n");
}
DrawAStarLine();
printf("\17\t\t 您是否希望以别的方式进行查询? \t\t\t\17\n");
flushall();
do{
flushall();
printf("\17\t\t\t\t按'Y'继续查询 按'N'退出\t\t\17\n");
DrawAStarLine();
AskExit=getch();
}while( AskExit!='Y' && AskExit!='y' && AskExit!='N' && AskExit!='n' );
if( AskExit == 'Y' || AskExit == 'y' ){
continue;
}
else {
CtrlExit=1;
continue;
}
}
DrawAStarLine();
printf("\17\t\t\3\3感谢使用学生成绩管理系统!\3\3\t\t\t\t\17\n");
printf("\17 (C) copyright 1989-2008 MCG corporation,All rights reserved \17\n");
DrawAStarLine();
}
void InfoInput(SMR *Info, int n)
{
int i;
for(i=0;i
printf("\17\t请输入第%d个学生的学生的信息\t\t\t\t\t\17\n",i+1);
printf("\17\t学号:\t\t\t\t\t\t\t\t\17\n");
flushall();
printf("\t\t\t\t\t\t\t\t\t\17");
printf("\r\17\t");
gets(Info[i].StudyOrder);
printf("\17\t姓名:\t\t\t\t\t\t\t\t\17\n\17\t");
flushall();
printf("\t\t\t\t\t\t\t\t\17");
printf("\r\17\t");
gets(Info[i].StudentName);
printf("\17\t得分:\t\t\t\t\t\t\t\t\17\n\17\t");
printf("\t\t\t\t\t\t\t\t\17");
printf("\r\17\t");
scanf("%d",&Info[i].StudentScore);
DrawAStarLine();
}
}
SMR *OrderSort(const SMR *Info,int n)
{
int i,j;
SMR Temp;
SMR *OUT;
OUT=(SMR *)malloc(n*sizeof(SMR));
for(i=0;i
OUT[i]=Info[i];
}
for(i=0;i
for(j=i;j
if(strcmp(OUT[i].StudyOrder,OUT[j].StudyOrder)>0)
{
Temp=OUT[i];
OUT[i]=OUT[j];
OUT[j]=Temp;
}
}
}
return OUT;
}
SMR *ScoreSort(const SMR *Info,int n){
int i,j;
SMR Temp;
SMR *OUT;
OUT=(SMR *)malloc(n*sizeof(SMR));
for(i=0;i
}
for(i=0;i
OUT[i]=OUT[j];
OUT[j]=Temp;
}
}
}
return OUT;
}
void PutOrder(const SMR *Info,char *In, int n){
int i;
for(i=0;i
if( strcmp( Info[i].StudyOrder , In ) == 0 )
break;
}
if(i>=n)
{
printf("\t\t\t\t\t\t\t\t\t\17");
printf("\r\17\t\t\t没有找到学号为%s的学生\n",In);
}
else
{
DrawAStrLine();
printf("\17\t| \bStudyOrder\t|\tName\t\t|\tScore\t|\t\17\n");
DrawAStrLine();
printf("\17\t| %-8s\t\t\b|\t%-8s\t|\t%-8d|\t\17\n",Info[i].StudyOrder,Info[i].StudentName,Info[i].StudentScore);
DrawAStrLine();
}
}
void InfoOutput(const SMR *Info,int n){
int i;
DrawAStrLine();
printf("\17\t| \bStudyOrder\t|\tName\t\t|\tScore\t|\t\17\n");
DrawAStrLine();
for (i=0;i
}
DrawAStrLine();
}
void DrawAStrLine(void)
{
printf("\17\t=-------------------------------------------------------=\t\17\n");
}
void DrawAStarLine(void)
{
printf("\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\n");
}