C语言程序设计学生成绩查询系统

根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。通过课程设计,加深对《C语言程序设计》和《数据结构》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本的数据结构(线性结构、树形结构、图形结构)的逻辑结构、存储结构以及相关运算和应用。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。
具体要求如下:
1、 采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。学生也可根据自己对题目的理解增加新的功能模块(视情况可另外加分)。
2、 系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行。
3、 程序算法说明清晰,理论分析与计算正确,运行情况良好,实验测试数据无误,容错性强(能对错误输入进行判断控制)。
4、 编程风格良好(包括缩进、空行、适当注释、变量名和函数名见名知意,程序容易阅读等);
二、 课程设计的主要内容
【问题描述】
学生成绩查询系统包括以下模块:
学生成绩的录入;
学生成绩的修改;
学生成绩的删除;
学生成绩的查询;
成绩查询:按学号或姓名查询某学生成绩并输出。
学生成绩的保存;
学生成绩的读取;
学生成绩的排序;
成绩排序:给出n个学生的考试成绩表,设每个学生信息由姓名与分数组成。设计一个算法,按分数的高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次,并按名次列出每个学生的姓名与分数。
【基本要求】
学生信息里包含学号、姓名和两门课程的成绩。要求数据结构采用双向链表的形式。

#include"stdio.h"
#include"string.h"
#define N 1000
void menu();
int password();
int dedao();

int uninque(struct STUDENT shu[],int len,int xuehao);
void shuchu(struct STUDENT shu[],int len);
void send(struct STUDENT shu[],int len);
int readFromFile(struct STUDENT shu[]);
void chaxun(struct STUDENT shu[],int len);
void paixu(struct STUDENT shu[],int len);

struct STUDENT
{
int num;
char name[10];
int score;
} shu[N];
main()
{ int len=0,key,choice;

do {
key=password();

}while(key==0);

while(1)

{ menu();
printf("请输入选项<1,2,3,4,5,6,7>\n");
scanf("%d",&choice);
switch(choice)
{
case 1:printf("输入信息函数\n"); len=dedao(shu,len); break;
case 2:printf("输出函数被调用\n"); shuchu(shu,len); break;
case 3:printf("保存到文件函数被调用\n"); send(shu,len); break;
case 4:printf("从文件读函数被调用\n"); len=readFromFile( shu); break;
case 5:printf("按学号查询函数被调用\n"); chaxun(shu,len); break;
case 6:printf("按成绩排序函数被调用\n"); paixu(shu,len); break ;
case 7:exit(0);break;
}

}

}

void menu()
{
printf("\n");
printf(" *******************************************\n");
printf(" * 学生成绩管理系统2.0 *\n");
printf(" * 1.输入信息 *\n");
printf(" * 2.输出信息 *\n");
printf(" * 3.保存到文件 *\n");
printf(" * 4.从文件读 *\n");
printf(" * 5.按学号查询 *\n");
printf(" * 6.按成绩排序(由大到小) *\n");
printf(" * 7.程序结束 *\n");
printf(" *******************************************\n");

}
int password()
{
char a[100];
char key[]="asd";
printf("请输入密码\n");
scanf("%s",&a);
if(strcmp(a,key)==0)
return 1;
else
return 0;

}

int dedao(struct STUDENT shu[],int len)
{ int i=len;
int flag=0;
int xuehao,bank,chengji;
while(i<N)
{
while(1)
{
printf("学号");
scanf("%d",&xuehao);
if(xuehao==0)
{ flag=1;
break;
}

bank=uninque(shu,i,xuehao);
if(bank==0)
{ shu[i].num=xuehao;
break;}

}
if(flag==1)
break;

printf("姓名");
scanf("%s",&shu[i].name);

while (1)
{
printf("成绩");

if(scanf("%d",&chengji)==1)
{break;}
printf("输入格式错误,请重新输入!");
while(getchar()!='\n')
continue;

}
while(getchar()!='\n')
continue;
shu[i].score=chengji;
i++;

}
return i;
}
int uninque(struct STUDENT shu[],int len,int xuehao)
{ int i;
int bank=0;
for (i=0;i<len;i++)
{
if(xuehao==shu[i].num)
bank=1;

}

return bank;

}

void shuchu(struct STUDENT shu[],int len)
{

int i;

printf("%-4s %-10s %-3s","学号","姓名","成绩\n\n");
for(i=0;i<len;i++)
{
printf("%-4d %-10s %-3d",shu[i].num,shu[i].name,shu[i].score);
printf("\n");
}
printf("\n\n");

}

void send(struct STUDENT shu[],int len)
{
int i;

FILE *fp;
fp=fopen("d:\\chegnji.txt","wb");
if(fp==NULL)
{
printf("打开文件出错!\n");
exit(0);
}

for(i=0;i<len;i++)

fwrite(shu+i,sizeof(struct STUDENT),1,fp);

fclose(fp);
}

int readFromFile(struct STUDENT shu[])
{
FILE *fp=NULL;
int i=0;

fp=fopen("d:\\chegnji.txt","rb");

if(fp!=NULL)
{
printf("%-4s %-10s %-3s","学号","姓名","成绩\n\n");

while(!feof(fp))
{

if(i>=N)
break;
if(fread(shu+i,sizeof(struct STUDENT),1,fp))

printf("%-4d %-10s %-3d",shu[i].num,shu[i].name,shu[i].score);
printf("\n");
i++;
}

fclose(fp);
}
i=i-1;
return i;
}

void chaxun(struct STUDENT shu[],int len)

{
int i,nue,b=0;

while(1)

{printf("input the student number (input'0' close) ");
scanf("%d",&nue);
b=0;
if(nue==0)
break;
for (i=0;i<len;i++)
{
if(nue==shu[i].num)
{ printf("%-4s %-10s %-3s","学号","姓名","成绩\n\n");
printf("%-4d %-10s %-3d\n",shu[i].num,shu[i].name,shu[i].score);
b=1;

}

}
if(b==0)
printf("The number is not exist!\n");
}

}

void paixu(struct STUDENT shu[],int len)
{
int i,j;
struct STUDENT temp;
printf("%-4s %-10s %-3s","学号","姓名","成绩\n\n");
for(i=0;i<len;i++)
{
for(j=i;j<len;j++)
{
if(shu[j].score>shu[i].score)
{
temp=shu[j];
shu[j]=shu[i];
shu[i]=temp;
}

}

printf("%-4d %-10s %-3d\n",shu[i].num,shu[i].name,shu[i].score);

}

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-22
#include"stdio.h"
#include"string.h"
#define
N
1000
void
menu();
int
password();
int
dedao();
int
uninque(struct
STUDENT
shu[],int
len,int
xuehao);
void
shuchu(struct
STUDENT
shu[],int
len);
void
send(struct
STUDENT
shu[],int
len);
int
readFromFile(struct
STUDENT
shu[]);
void
chaxun(struct
STUDENT
shu[],int
len);
void
paixu(struct
STUDENT
shu[],int
len);
struct
STUDENT
{
int
num;
char
name[10];
int
score;
}
shu[N];
main()
{
int
len=0,key,choice;
do
{
key=password();
}while(key==0);
while(1)
{
menu();
printf("请输入选项<1,2,3,4,5,6,7>\n");
scanf("%d",&choice);
switch(choice)
{
case
1:printf("输入信息函数\n");
len=dedao(shu,len);
break;
case
2:printf("输出函数被调用\n");
shuchu(shu,len);
break;
case
3:printf("保存到文件函数被调用\n");
send(shu,len);
break;
case
4:printf("从文件读函数被调用\n");
len=readFromFile(
shu);
break;
case
5:printf("按学号查询函数被调用\n");
chaxun(shu,len);
break;
case
6:printf("按成绩排序函数被调用\n");
paixu(shu,len);
break
;
case
7:exit(0);break;
}
}
}
void
menu()
{
printf("\n");
printf("
*******************************************\n");
printf("
*
学生成绩管理系统2.0
*\n");
printf("
*
1.输入信息
*\n");
printf("
*
2.输出信息
*\n");
printf("
*
3.保存到文件
*\n");
printf("
*
4.从文件读
*\n");
printf("
*
5.按学号查询
*\n");
printf("
*
6.按成绩排序(由大到小)
*\n");
printf("
*
7.程序结束
*\n");
printf("
*******************************************\n");
}
int
password()
{
char
a[100];
char
key[]="asd";
printf("请输入密码\n");
scanf("%s",&a);
if(strcmp(a,key)==0)
return
1;
else
return
0;
}
int
dedao(struct
STUDENT
shu[],int
len)
{
int
i=len;
int
flag=0;
int
xuehao,bank,chengji;
while(i<N)
{
while(1)
{
printf("学号");
scanf("%d",&xuehao);
if(xuehao==0)
{
flag=1;
break;
}
bank=uninque(shu,i,xuehao);
if(bank==0)
{
shu[i].num=xuehao;
break;}
}
if(flag==1)
break;
printf("姓名");
scanf("%s",&shu[i].name);
while
(1)
{
printf("成绩");
if(scanf("%d",&chengji)==1)
{break;}
printf("输入格式错误,请重新输入!");
while(getchar()!='\n')
continue;
}
while(getchar()!='\n')
continue;
shu[i].score=chengji;
i++;
}
return
i;
}
int
uninque(struct
STUDENT
shu[],int
len,int
xuehao)
{
int
i;
int
bank=0;
for
(i=0;i<len;i++)
{
if(xuehao==shu[i].num)
bank=1;
}
return
bank;
}
void
shuchu(struct
STUDENT
shu[],int
len)
{
int
i;
printf("%-4s
%-10s
%-3s","学号","姓名","成绩\n\n");
for(i=0;i<len;i++)
{
printf("%-4d
%-10s
%-3d",shu[i].num,shu[i].name,shu[i].score);
printf("\n");
}
printf("\n\n");
}
void
send(struct
STUDENT
shu[],int
len)
{
int
i;
FILE
*fp;
fp=fopen("d:\\chegnji.txt","wb");
if(fp==NULL)
{
printf("打开文件出错!\n");
exit(0);
}
for(i=0;i<len;i++)
fwrite(shu+i,sizeof(struct
STUDENT),1,fp);
fclose(fp);
}
int
readFromFile(struct
STUDENT
shu[])
{
FILE
*fp=NULL;
int
i=0;
fp=fopen("d:\\chegnji.txt","rb");
if(fp!=NULL)
{
printf("%-4s
%-10s
%-3s","学号","姓名","成绩\n\n");
while(!feof(fp))
{
if(i>=N)
break;
if(fread(shu+i,sizeof(struct
STUDENT),1,fp))
printf("%-4d
%-10s
%-3d",shu[i].num,shu[i].name,shu[i].score);
printf("\n");
i++;
}
fclose(fp);
}
i=i-1;
return
i;
}
void
chaxun(struct
STUDENT
shu[],int
len)
{
int
i,nue,b=0;
while(1)
{printf("input
the
student
number
(input'0'
close)
");
scanf("%d",&nue);
b=0;
if(nue==0)
break;
for
(i=0;i<len;i++)
{
if(nue==shu[i].num)
{
printf("%-4s
%-10s
%-3s","学号","姓名","成绩\n\n");
printf("%-4d
%-10s
%-3d\n",shu[i].num,shu[i].name,shu[i].score);
b=1;
}
}
if(b==0)
printf("The
number
is
not
exist!\n");
}
}
void
paixu(struct
STUDENT
shu[],int
len)
{
int
i,j;
struct
STUDENT
temp;
printf("%-4s
%-10s
%-3s","学号","姓名","成绩\n\n");
for(i=0;i<len;i++)
{
for(j=i;j<len;j++)
{
if(shu[j].score>shu[i].score)
{
temp=shu[j];
shu[j]=shu[i];
shu[i]=temp;
}
}
printf("%-4d
%-10s
%-3d\n",shu[i].num,shu[i].name,shu[i].score);
}
}
第2个回答  2009-08-25
#defanie N 5
main()
{
int i,sum=0,high,score[N];
float average;
printf("input everyone's score.\n");
for(i=0;i<N;i++)
scanf("%d",&score[i]);
for(high=score[0],i=0;i<N;i++)
{
sum+=score[i];
if(score[i]>high)high=score[i];
}
average=(float)sum/N;
printf("average=%f\n",average);
printf("highest=%d\n",high);

}
第3个回答  2021-03-12
使用易查分三分钟就可以满足你的要求哦。
第4个回答  2009-08-25
发消息给你了
相似回答