C语言编程:学生成绩管理系统设计 学生成绩信息包括:学号,姓名,语文成绩、数学成绩、英语成绩。
这是我以前参考书上代码写的,后来我写了个很完美的,有动画效果和颜色变化的,还没发表,日后想要可以给你!~
#include
#include
#include
#define MAXN 100 //一个班最多的人数
#define MAXM 10 //最多课程门数
char subject[MAXM][12]; //保存所有课程名称
char number[MAXN][10]; //保存全班学号
char name[MAXN][20]; //保存全班姓名
float score[MAXN][MAXM]; //保存全班所有课程成绩
float sum[MAXN]; //保存全班总成绩
int n,m; //n,m保存全班实际人数和课程数
void input();
void search();
void sort();
void save();
void load();
void print();
void main()
{
//欢迎首界面
char a,b;
printf("
");
printf("
");
printf("
");
printf("
");
printf(" \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3
");
printf(" \3 \3
");
printf(" \3 \3
");
printf(" \3 ¥欢迎进入电子科技大学成都学院学生管理系统¥ \3
");
printf(" \3 \3
");
printf(" \3 \2\2 welcome to uestc...\2\2 \3
");
printf(" \3 \3
");
printf(" \3 \3 \4 \5 \6 \6 \5 \4 \3 \3
");
printf(" \3 \3
");
printf(" \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3
");
printf("
");
printf("
");
printf(" 请按回车键进入下一界面
");
printf(" ------------------------
");
do
{
scanf("%c",&a);
if(a!=10)
{
printf(" 您输入有误,请重新输入,谢谢!!!
");
scanf("%c",&b);
}
b=a;
}
while(b!=10);
system("cls");
//功能选择界面
int select;
while(1)
{
system("cls");
printf(" ***********欢迎进入电子科技大学成都学院学生管理系统***********
");
printf("
");
printf("
");
printf(" 1.学生成绩新建
");
printf(" 2.学生成绩查询
");
printf(" 3.学生成绩插入
");
printf(" 4.学生成绩修改
");
printf(" 5.学生成绩删除
");
printf(" 6.学生成绩排名
");
printf(" 7.学生成绩保存
");
printf(" 8.学生成绩读取
");
printf(" 9.学生成绩报表打印
");
printf(" 0.退出系统
");
printf("
");
printf("
");
printf("
请输入您的选择编号,回车键确定:
");
printf(" ------------------------------------------------------------------
");
scanf("%d",&select);
switch(select)
{
case 1:input();break;
case 2:search();break;
case 6:sort();break;
case 7:save();break;
case 8:load();break;
case 9:print();break;
case 0:printf(" 谢谢您的使用。
");
}
}
}
//输入成绩模块
void input()
{
system("cls");
int i,j;
printf(" ***********新建学生成绩信息***********
");
printf("
");
printf("
");
printf("
请输入全班人数:");
scanf("%d",&n);
printf("
请输入课程门数:");
scanf("%d",&m);
printf("
请输入%d门课程名称
",m);
for(j=0;j<m;j++)
{
printf("
第%d门课程名称:",j+1);
scanf("%s",subject[j]);
}
printf("
第%d个学生数据
",n);
for(i=0;i<n;i++)
{
printf("
请输入第%d个人的数据
",i+1);
printf("
学号:");
scanf("%s",number[i]);
printf("
姓名:");
scanf("%s",name[i]);
printf("
%d门课程的成绩:
",m);
sum[i]=0;
//边输入边统计总成绩
for(j=0;j<m;j++)
{
printf(" %s成绩:",subject[j]);
scanf(" %f成绩",&score[i][j]);
sum[i]=sum[i]+score[i][j];
}
}
}
//查询成绩模块
void search()
{
system("cls");
int j;
int search1();
int search2();
int select,index;
printf("
***********查询学生成绩信息***********
");
while(1)
{
printf("
1.按学号查询
");
printf(" 2.按姓名查询
");
printf(" 0.返回
");
printf("
请输入您的选择编号:");
printf("
---------------------------------------
");
scanf("%d",&select);
switch(select)
{
case 1:index=search1(); break;
case 2:index=search2();break;
case 0:return;
}
if(index!=-1)
{
printf("
学号 :%s
",number[index]);
printf("
姓名 :%s
",name[index]);
for(j=0;j<m;j++)
{
printf("
%s成绩 :",subject[j]);
printf("%.2f
",score[index][j]);
}
printf("
总成绩 :%.2f
",sum[index]);
printf("
平均成绩:%.2f
",sum[index]/m);
printf("
您还可以继续查询其他学生成绩信息:
");
}
else printf("
没有这个同学。
");
}
}
//按学号查询模块
int search1()
{
system("cls");
int i;
char s_number[10];
printf(" 请输入要查询的学号:
");
scanf("%s",s_number);
printf(" 该同学的信息如下:
");
for(i=0;i<n;i++)
if(strcmp(number[i],s_number)==0)
break;
if(i<n)
return i;
else return -1;
}
//按姓名查询模块
int search2()
{
system("cls");
int i;
char s_name[10];
printf(" 请输入要查询的姓名:");
scanf("%s",s_name);
for(i=0;i<n;i++)
if(strcmp(name[i],s_name)==0)
break;
if(i<n)
return i;
else return -1;
}
//排名模块
void sort()
{
system("cls");
void sort1();
void sort2();
void sort3();
int select;
while(1)
{
printf(" ***********学生成绩排名信息***********
");
printf("
1.按学号排名
");
printf(" 2.按姓名排名
");
printf(" 3.按总成绩排名
");
printf(" 0.返回
");
printf("
请输入您的选择编号:
");
printf(" --------------------------------------
");
scanf("%d",&select);
switch(select)
{
case 1:sort1();break;
case 2:sort2();break;
case 3:sort();break;
case 0:return;
}
}
}
//按学号排名模块
void sort1()
{
system("cls");
int i,j,k;
char x_number[10];
char x_name[20];
float x;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(number[i],number[k])<0)
k=j;
if (k!=i)
{
strcpy(x_number,number[i]);
strcpy(number[i],number[k]);
strcpy(number[k],x_number);
strcpy(x_name,name[i]);
strcpy(name[i],name[k]);
strcpy(name[k],x_name);
for(j=0;j<m;j++)
{
x=score[i][j];
score[i][j]=score[k][j];
score[k][j]=x;
}
x=sum[i];sum[i]=sum[k];sum[k]=x;
}
}
printf("排序完毕.
");
}
//按姓名排名模块
void sort2()
{
system("cls");
int i,j,k;
char x_number[10];
char x_name[20];
float x;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[j],name[k])<0)
k=j;
if(k!=i)
{
strcpy(x_number,number[i]);
strcpy(number[i],number[k]);
strcpy(number[k],x_number);
strcpy(name[i],name[k]);
strcpy(name[k],x_name);
for(j=0;j<m;j++)
{
x=score[i][j];
score[i][j]=score[k][j];
score[k][j]=x;
}
x=sum[i];sum[i]=sum[k];sum[k]=x;
}
}
printf("排序完毕.
");
}
//按总成绩排名模块
void sort3()
{
system("cls");
int i,j,k;
char x_number[10];
char x_name[20];
float x;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(sum[j]<sum[k])
k=j;
if(k!=i)
{
strcpy(x_number,number[i]);
strcpy(number[i],number[k]);
strcpy(number[k],x_number);
strcpy(x_name,name[i]);
strcpy(name[i],name[k]);
strcpy(name[k],x_name);
for(j=0;j<m;j++)
{
x=score[i][j];
score[i][j]=score[k][j];
score[k][j]=x;
}
x=sum[i];sum[i]=sum[k];sum[k]=x;
}
}
printf("排序完毕.
");
}
//保存成绩模块
void save()
{
system("cls");
FILE *fp;
char filename[20];
int i,j;
printf(" 请输入文件名: ");
scanf("%s",filename);
if((fp=fopen(filename, "w"))==NULL)
{
printf(" 打开文件失败.
");
return;
}
fprintf(fp, "%d %d",n,m);
for(j=0;j<m;j++)
fprintf(fp, "%s",subject[j]);
for(i=0;i<n;i++)
{
fprintf(fp, "%s %s",number[i],name[i]);
for(j=0;j<m;j++)
fprintf(fp, "%5.1f",score[i][j]);
}
fclose(fp);
printf(" 保存完毕.
");
}
// 提取成绩模块
void load( )
{
system("cls");
FILE * fp;
char filename[20];
int i,j;
printf (" 请输入文件名:");
scanf("%s",filename);
if ((fp=fopen(filename,"r"))==NULL)
{
printf(" 文件不存在.
");
return;
}
fscanf(fp,"%d%d",&n,&m);
for(j=0;j<m;j++)
fscanf(fp,"%s",subject[j]);
for(i=0;i<n;i++)
{
fscanf(fp,"%s%s",number[i],name[i]);
sum[i]=0;
for(j=0;j<m;j++)
{
fscanf(fp,"%f",&score[i][j]);
sum[i]=sum[i]+score[i][j];
}
}
fclose(fp);
printf(" 提取完毕.
");
}
//打印成绩报表模块
void print()
{
system("cls");
void print1();
void print2();
int select;
printf(" ***********打印学生成绩信息***********
");
printf("
");
printf("
");
printf(" 1.屏幕显示报表
");
printf(" 2.打印机打印报表
");
printf(" 0.返回
");
printf("
请输入您的选择编号:");
printf("
--------------------------------------
");
scanf("%d",&select);
switch(select)
{
case 1:print1();break;
case 2:print2();break;
case 0:return;
}
}
// 屏幕显示报表模块
void print1()
{
system("cls");
int i,j;
printf(" 成绩总表
");
printf(" 学号姓名:");
for (j=0;j<m;j++)
printf("%10s",subject[j]);
printf(" 总成绩平均成绩
");
for (i=0;i<n;i++)
{
printf("%8s %8s",number[i],name[i]);
for (j=0;j<m;j++)
printf("%6.1f",score[i][j]);
printf("%6.1f %6.2f
",sum[i],sum[i]/m);
}
printf(" 显示完毕.
");
}
// 打印机打印报表模块
void print2( )
{
system("cls");
FILE * fp;
int i,j;
printf(" 请准备好打印机,按任意键继续…
");
scanf("% * c");
if ((fp=fopen("prn","w"))==NULL)
{
printf(" 打印机没有准备好.
");
return;
}
fprintf(fp," 成绩总表
");
fprintf(fp," 学号姓名
");
for (j=0;j<m;j++ )
fprintf(fp,"%10s",subject[j]);
fprintf(fp," 总成绩平均成绩
");
for(i=0;i<n;i++)
{
fprintf(fp,"%6.1f",score[i][j]);
fprintf(fp,"%8s %8s",number[i],name[i]);
for (j=0;j<m;j++)
fprintf(fp,"%6.1f %6.2f
",sum[i],sum[i]/m);
}
fclose(fp);
printf(" 打印完毕.
");
}
已调通,大致功能相当
#include
#include /*其它说明*/
#include /*字符串函数*/
#include
#define LEN sizeof(STUDENT)
typedef struct stu /*定义结构体数组用于缓存数据*/
{
char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;
/*初始化函数*/
STUDENT *Init()
{
return NULL; /*返回空指针*/
}
/*菜单选择函数*/
int Menu_Select()
{
int n;
struct tm *pt; /*定义时间结构体*/
time_t t;
t=time(NULL);
pt=localtime(&t); /*读取系统日期并把它放到结构体中*/
printf("
按任一键进入主菜单......
"); /*按任一键进入主菜单*/
//getch(); /*从键盘读取一个字符,但不显示于屏幕*/
system("pause");
system("cls"); /*清屏*/
printf("********************************************************************************
");
printf(" 欢迎 Welcome to
");
printf("
使用学生管理系统1.0
");
printf("*************************************MENU***************************************
");
printf("1. 输入学生成绩记录 Enter the record
"); /*输入学生成绩记录*/
printf("2. 显示 Print the record
"); /*显示*/
printf("3. 寻找 Search record on name
"); /*寻找*/
printf("4. 删除 Delete a record
"); /*删除*/
printf("5. 排序 Sort to make New a file
"); /*排序*/
printf("6. 插入 Insert record to list
"); /*插入*/
printf("7. 保存 Save the file
"); /*保存*/
printf("8. 读取 Load the file
"); /*读取*/
printf("9. 退出 Quit
"); /*退出*/
printf("
********************************************************************************
");
printf("当前系统日期:%d-%d-%d
",pt->tm_year+1900,pt->tm_mon+1,pt->tm_mday); /*显示当前系统日期*/
do
{
printf("
输入你的选择Enter your choice(1~9):");
fflush(stdin);
scanf("%d",&n);
}while(n9); /*如果选择项不在1~9之间则重输*/
return(n); /*返回选择项,主函数根据该数调用相应的函数*/
}
/*输入函数*/
STUDENT *Create()
{
int i,s;
STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/
system("cls");
for(;;)
{
p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/
if(!p) /*如果指针p为空*/
{
printf("
输出内存溢出. Out of memory."); /*输出内存溢出*/
return (head); /*返回头指针,下同*/
}
printf("输入学号Enter the num(0:list end):");
scanf("%s",p->num);
if(p->num[0]=='0') break; /*如果学号首字符为0则结束输入*/
printf("输入名字Enter the name:");
scanf("%s",p->name);
printf("请输入3门成绩Please enter the %d scores
",3); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<3;i++) /*3门课程循环3次*/
{
do
{
printf("成绩score%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]score[i]>100) /*确保成绩在0~100之间*/
printf("数据错误,请重新输入 Data error,please enter again.
");
}while(p->score[i]score[i]>100);
s=s+p->score[i]; /*累加各门成绩*/
}
p->sum=s; /*将总分保存*/
p->average=(float)s/3; /*先用强制类型转换将s转换成float型,再求平均值*/
p->order=0; /*未排序前此值为0*/
p->next=head; /*将头结点做为新输入结点的后继结点*/
head=p; /*新输入结点为新的头结点*/
}
return(head);
}
/* 显示全部记录函数*/
void Print(STUDENT *head)
{
int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
system("cls");
p=head; /*初值为头指针*/
printf("
************************************STUDENT************************************
");
printf("-------------------------------------------------------------------------------
");
printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |
");
printf("-------------------------------------------------------------------------------
");
while(p!=NULL)
{
i++;
printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|
",
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------
");
printf("**************************************END**************************************
");
}
/*查找记录函数*/
void Search(STUDENT *head)
{
STUDENT *p; /* 移动指针*/
char s[5]; /*存放姓名用的字符数组*/
system("cls");
printf("请输入个姓名来查找. Please enter name for searching.
");
scanf("%s",s);
p=head; /*将头指针赋给p*/
while(strcmp(p->name,s) && p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/
p=p->next; /*移动指针,指向下一结点*/
if(p!=NULL) /*如果指针不为空*/
{
printf("
*************************************FOUND************************************
");
printf("-------------------------------------------------------------------------------
");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |
");
printf("-------------------------------------------------------------------------------
");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|
",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------
");
printf("***************************************END**************************************
");
}
else
printf("
没有该学生 There is no num %s student on the list.
",s); /*显示没有该学生*/
}
/*删除记录函数*/
STUDENT *Delete(STUDENT *head)
{
//int n;
STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/
char c,s[6]; /*s[6]用来存放学号,c用来输入字母*/
system("cls");
printf("请输入要删除的学号 Please enter the Deleted num: ");
scanf("%s",s);
p1=p2=head; /*给p1和p2赋初值头指针*/
while(strcmp(p1->num,s) && p1 != NULL) /*当记录的学号不是要找的,或指针不为空时*/
{
p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/
p1=p1->next; /*将p1指针指向下一条记录*/
}
if(strcmp(p1->num,s)==0) /*学号找到了*/
{
printf("**************************************FOUND************************************
");
printf("-------------------------------------------------------------------------------
");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |
");
printf("-------------------------------------------------------------------------------
");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|
",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------
");
printf("***************************************END**************************************
");
printf("
是否要删除,输入Y删除,N则退出
Are you sure to Delete the student Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/
for(;;)
{
scanf("%c",&c);
if(c=='n'||c=='N') break; /*如果不删除,则跳出本循环*/
if(c=='y'||c=='Y')
{
if(p1==head) /*若p1==head,说明被删结点是首结点*/
head=p1->next; /*把第二个结点地址赋予head*/
else
p2->next=p1->next; /*否则将一下结点地址赋给前一结点地址*/
//n=n-1;
printf("
学号为(Num): %s 学生以被删除(student have been Deleted.)
",s);
printf("别忘了保存. Don't forget to Save.
");break; /*删除后就跳出循环*/
}
}
}
else
printf("
没有这个学生在表上
There is no num %s student on the list.
",s); /*找不到该结点*/
return(head);
}
/*排序函数*/
STUDENT *Sort(STUDENT *head)
{
int i=0; /*保存名次*/
STUDENT *p1,*p2,*t,*temp; /*定义临时指针*/
temp=head->next; /*将原表的头指针所指的下一个结点作头指针*/
head->next=NULL; /*第一个结点为新表的头结点*/
while(temp!=NULL) /*当原表不为空时,进行排序*/
{
t=temp; /*取原表的头结点*/
temp=temp->next; /*原表头结点指针后移*/
p1=head; /*设定移动指针p1,从头指针开始*/
p2=head; /*设定移动指针p2做为p1的前驱,初值为头指针*/
while(t->averageaverage&&p1!=NULL) /*作成绩平均分比较*/
{
p2=p1; /*待排序点值小,则新表指针后移*/
p1=p1->next;
}
if(p1==p2) /*p1==p2,说明待排序点值大,应排在首位*/
{
t->next=p1; /*待排序点的后继为p*/
head=t; /*新头结点为待排序点*/
}
else /*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/
{
t->next=p1; /*t的后继是p1*/
p2->next=t; /*p2的后继是t*/
}
}
p1=head; /*已排好序的头指针赋给p1,准备填写名次*/
while(p1!=NULL) /*当p1不为空时,进行下列操作*/
{
i++; /*结点序号*/
p1->order=i; /*将结点序号赋值给名次*/
p1=p1->next; /*指针后移*/
}
printf("排序成功 Sorting is sucessful.
"); /*排序成功*/
return (head);
}
/*插入记录函数*/
STUDENT *Insert(STUDENT *head,STUDENT *New)
{
STUDENT *p0,*p1,*p2;
//int n;
int sum1,i;
p1=head; /*使p1指向第一个结点*/
p0=New; /*p0指向要插入的结点*/
printf("
Please enter a New record.
"); /*提示输入记录信息*/
printf("输入学号Enter the num:");
scanf("%s",New->num);
printf("输入名字Enter the name:");
scanf("%s",New->name);
printf("Please enter the %d scores.
",3);
sum1=0; /*保存新记录的总分,初值为0*/
for(i=0;i<3;i++)
{
do
{
printf("成绩score%d:",i+1);
scanf("%d",&New->score[i]);
if(New->score[i]>100||New->score[i]<0)
printf("数据错误Data error,please enter again.
");
}while(New->score[i]>100||New->score[i]<0);
sum1=sum1+New->score[i]; /*累加各门成绩*/
}
New->sum=sum1; /*将总分存入新记录中*/
New->average=(float)sum1/3;
New->order=0;
if(head==NULL) /*原来的链表是空表*/
{
head=p0;
p0->next=NULL;
} /*使p0指向的结点作为头结点*/
else
{
while((p0->averageaverage)&&(p1->next!=NULL))
{
p2=p1; /*使p2指向刚才p1指向的结点*/
p1=p1->next; /*p1后移一个结点*/
}
if(p0->average>=p1->average)
{
if(head==p1)head=p0; /*插到原来第一个结点之前*/
else p2->next=p0; /*插到p2指向的结点之后*/
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
} /*插到最后的结点之后*/
}
//n=n+1; /*结点数加1*/
head=Sort(head); /*调用排序的函数,将学生成绩重新排序*/
printf("
学生Student %s 已被更新have been inserted.
",New->name);
printf("不要忘了保存Don't forget to Save the New file.
");
return(head);
}
/*保存数据到文件函数*/
void Save(STUDENT *head)
{
FILE *fp; /*定义指向文件的指针*/
STUDENT *p; /* 定义移动指针*/
char outfile[10];
printf("输出文件例如:c:\\score Enter outfile name,for example c:\\score
");
scanf("%s",outfile);
if((fp=fopen(outfile,"w"))==NULL) /*为输出打开一个二进制文件,为只写方式*/
{
printf("打不开文件Cannot open the file
");
return; /*若打不开则返回菜单*/
}
printf("
保存中...Saving the file......
");
p=head; /*移动指针从头指针开始*/
while(p!=NULL) /*如p不为空*/
{
fwrite(p,LEN,1,fp); /*写入一条记录*/
p=p->next; /*指针后移*/
}
fclose(fp); /*关闭文件*/
printf("保存成功....Save the file successfully!
");
}
/* 从文件读数据函数*/
STUDENT *Load()
{
STUDENT *p1,*p2,*head=NULL; /*定义记录指针变量*/
FILE *fp; /* 定义指向文件的指针*/
char infile[10];
printf("倒入文件例如:c:\\score Enter infile name,for example c:\\score
");
scanf("%s",infile);
if((fp=fopen(infile,"r"))==NULL) /*打开一个二进制文件,为只读方式*/
{
printf("打不开文件Can not open the file.
");
return(head);
}
printf("
寻找文件...Loading the file!
");
p1=(STUDENT *)malloc(LEN); /*开辟一个新单元*/
if(!p1)
{
printf("内存溢出!Out of memory!
");
return(head);
}
head=p1; /*申请到空间,将其作为头指针*/
while(!feof(fp)) /*循环读数据直到文件尾结束*/
{
if(fread(p1,LEN,1,fp)!=1) break; /*如果没读到数据,跳出循环*/
p1->next=(STUDENT *)malloc(LEN); /*为下一个结点开辟空间*/
if(!p1->next)
{
printf("Out of memory!
");
return (head);
}
p2=p1; /*使p2指向刚才p1指向的结点*/
p1=p1->next; /*指针后移,新读入数据链到当前表尾*/
}
p2->next=NULL; /*最后一个结点的后继指针为空*/
fclose(fp);
printf("
你成功的从文件中读取了数据!
You have success to read data from the file!
");
return (head);
}
/*主函数界面*/
int main()
{
STUDENT *head,New;
head=Init(); //链表初始化,使head的值为NULL
for(;;) //循环无限次
{
switch(Menu_Select())
{
case 1:head=Create();break;
case 2:Print(head);break;
case 3:Search(head);break;
case 4:head=Delete(head);break;
case 5:head=Sort(head);break;
case 6:head=Insert(head,&New);break; //&New表示返回地址
case 7:Save(head);break;
case 8:head=Load(); break;
case 9:exit(0); //如菜单返回值为9则程序结束
}
}
return 0;
}
#include<stdlib.h>
#include<string.h>
#define MAXN 100 //一个班最多的人数
#define MAXM 10 //最多课程门数
char subject[MAXM][12]; //保存所有课程名称
char number[MAXN][10]; //保存全班学号
char name[MAXN][20]; //保存全班姓名
float score[MAXN][MAXM]; //保存全班所有课程成绩
float sum[MAXN]; //保存全班总成绩
int n,m; //n,m保存全班实际人数和课程数
void input();
void search();
void sort();
void save();
void load();
void print();
void main()
{
//欢迎首界面
char a,b;
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3\n");
printf(" \3 \3\n");
printf(" \3 \3\n");
printf(" \3 ¥欢迎进入电子科技大学成都学院学生管理系统¥ \3\n");
printf(" \3 \3\n");
printf(" \3 \2\2 welcome to uestc...\2\2 \3\n");
printf(" \3 \3\n");
printf(" \3 \3 \4 \5 \6 \6 \5 \4 \3 \3\n");
printf(" \3 \3\n");
printf(" \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3\n");
printf("\n");
printf("\n");
printf(" 请按回车键进入下一界面\n");
printf(" ------------------------\n");
do
{
scanf("%c",&a);
if(a!=10)
{
printf(" 您输入有误,请重新输入,谢谢!!!\n");
scanf("%c",&b);
}
b=a;
}
while(b!=10);
system("cls");
//功能选择界面
int select;
while(1)
{
system("cls");
printf(" ***********欢迎进入电子科技大学成都学院学生管理系统***********\n");
printf("\n");
printf("\n");
printf(" 1.学生成绩新建\n");
printf(" 2.学生成绩查询\n");
printf(" 3.学生成绩插入\n");
printf(" 4.学生成绩修改\n");
printf(" 5.学生成绩删除\n");
printf(" 6.学生成绩排名\n");
printf(" 7.学生成绩保存\n");
printf(" 8.学生成绩读取\n");
printf(" 9.学生成绩报表打印\n");
printf(" 0.退出系统\n");
printf("\n");
printf("\n");
printf("\n 请输入您的选择编号,回车键确定:\n");
printf(" ------------------------------------------------------------------\n");
scanf("%d",&select);
switch(select)
{
case 1:input();break;
case 2:search();break;
case 6:sort();break;
case 7:save();break;
case 8:load();break;
case 9:print();break;
case 0:printf(" 谢谢您的使用。\n");
}
}
}
//输入成绩模块
void input()
{
system("cls");
int i,j;
printf(" ***********新建学生成绩信息***********\n");
printf("\n");
printf("\n");
printf("\n 请输入全班人数:");
scanf("%d",&n);
printf("\n 请输入课程门数:");
scanf("%d",&m);
printf("\n 请输入%d门课程名称\n",m);
for(j=0;j<m;j++)
{
printf("\n 第%d门课程名称:",j+1);
scanf("%s",subject[j]);
}
printf("\n 第%d个学生数据\n",n);
for(i=0;i<n;i++)
{
printf("\n 请输入第%d个人的数据\n",i+1);
printf("\n 学号:");
scanf("%s",number[i]);
printf("\n 姓名:");
scanf("%s",name[i]);
printf("\n %d门课程的成绩:\n",m);
sum[i]=0;
//边输入边统计总成绩
for(j=0;j<m;j++)
{
printf(" %s成绩:",subject[j]);
scanf(" %f成绩",&score[i][j]);
sum[i]=sum[i]+score[i][j];
}
}
}
//查询成绩模块
void search()
{
system("cls");
int j;
int search1();
int search2();
int select,index;
printf("\n ***********查询学生成绩信息***********\n");
while(1)
{
printf("\n 1.按学号查询\n");
printf(" 2.按姓名查询\n");
printf(" 0.返回\n");
printf("\n 请输入您的选择编号:");
printf("\n ---------------------------------------\n");
scanf("%d",&select);
switch(select)
{
case 1:index=search1(); break;
case 2:index=search2();break;
case 0:return;
}
if(index!=-1)
{
printf("\n 学号 :%s\n",number[index]);
printf("\n 姓名 :%s\n",name[index]);
for(j=0;j<m;j++)
{
printf("\n %s成绩 :",subject[j]);
printf("%.2f\n",score[index][j]);
}
printf("\n 总成绩 :%.2f\n",sum[index]);
printf("\n 平均成绩:%.2f\n",sum[index]/m);
printf("\n 您还可以继续查询其他学生成绩信息:\n");
}
else printf("\n 没有这个同学。\n");
}
}
//按学号查询模块
int search1()
{
system("cls");
int i;
char s_number[10];
printf(" 请输入要查询的学号:\n");
scanf("%s",s_number);
printf(" 该同学的信息如下:\n");
for(i=0;i<n;i++)
if(strcmp(number[i],s_number)==0)
break;
if(i<n)
return i;
else return -1;
}
//按姓名查询模块
int search2()
{
system("cls");
int i;
char s_name[10];
printf(" 请输入要查询的姓名:");
scanf("%s",s_name);
for(i=0;i<n;i++)
if(strcmp(name[i],s_name)==0)
break;
if(i<n)
return i;
else return -1;
}
//排名模块
void sort()
{
system("cls");
void sort1();
void sort2();
void sort3();
int select;
while(1)
{
printf(" ***********学生成绩排名信息***********\n");
printf("\n 1.按学号排名\n");
printf(" 2.按姓名排名\n");
printf(" 3.按总成绩排名\n");
printf(" 0.返回\n");
printf("\n 请输入您的选择编号:\n");
printf(" --------------------------------------\n");
scanf("%d",&select);
switch(select)
{
case 1:sort1();break;
case 2:sort2();break;
case 3:sort();break;
case 0:return;
}
}
}
//按学号排名模块
void sort1()
{
system("cls");
int i,j,k;
char x_number[10];
char x_name[20];
float x;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(number[i],number[k])<0)
k=j;
if (k!=i)
{
strcpy(x_number,number[i]);
strcpy(number[i],number[k]);
strcpy(number[k],x_number);
strcpy(x_name,name[i]);
strcpy(name[i],name[k]);
strcpy(name[k],x_name);
for(j=0;j<m;j++)
{
x=score[i][j];
score[i][j]=score[k][j];
score[k][j]=x;
}
x=sum[i];sum[i]=sum[k];sum[k]=x;
}
}
printf("排序完毕.\n");
}
//按姓名排名模块
void sort2()
{
system("cls");
int i,j,k;
char x_number[10];
char x_name[20];
float x;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[j],name[k])<0)
k=j;
if(k!=i)
{
strcpy(x_number,number[i]);
strcpy(number[i],number[k]);
strcpy(number[k],x_number);
strcpy(name[i],name[k]);
strcpy(name[k],x_name);
for(j=0;j<m;j++)
{
x=score[i][j];
score[i][j]=score[k][j];
score[k][j]=x;
}
x=sum[i];sum[i]=sum[k];sum[k]=x;
}
}
printf("排序完毕.\n");
}
//按总成绩排名模块
void sort3()
{
system("cls");
int i,j,k;
char x_number[10];
char x_name[20];
float x;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(sum[j]<sum[k])
k=j;
if(k!=i)
{
strcpy(x_number,number[i]);
strcpy(number[i],number[k]);
strcpy(number[k],x_number);
strcpy(x_name,name[i]);
strcpy(name[i],name[k]);
strcpy(name[k],x_name);
for(j=0;j<m;j++)
{
x=score[i][j];
score[i][j]=score[k][j];
score[k][j]=x;
}
x=sum[i];sum[i]=sum[k];sum[k]=x;
}
}
printf("排序完毕.\n");
}
//保存成绩模块
void save()
{
system("cls");
FILE *fp;
char filename[20];
int i,j;
printf(" 请输入文件名: ");
scanf("%s",filename);
if((fp=fopen(filename, "w"))==NULL)
{
printf(" 打开文件失败.\n");
return;
}
fprintf(fp, "%d %d",n,m);
for(j=0;j<m;j++)
fprintf(fp, "%s",subject[j]);
for(i=0;i<n;i++)
{
fprintf(fp, "%s %s",number[i],name[i]);
for(j=0;j<m;j++)
fprintf(fp, "%5.1f",score[i][j]);
}
fclose(fp);
printf(" 保存完毕.\n");
}
// 提取成绩模块
void load( )
{
system("cls");
FILE * fp;
char filename[20];
int i,j;
printf (" 请输入文件名:");
scanf("%s",filename);
if ((fp=fopen(filename,"r"))==NULL)
{
printf(" 文件不存在.\n");
return;
}
fscanf(fp,"%d%d",&n,&m);
for(j=0;j<m;j++)
fscanf(fp,"%s",subject[j]);
for(i=0;i<n;i++)
{
fscanf(fp,"%s%s",number[i],name[i]);
sum[i]=0;
for(j=0;j<m;j++)
{
fscanf(fp,"%f",&score[i][j]);
sum[i]=sum[i]+score[i][j];
}
}
fclose(fp);
printf(" 提取完毕.\n");
}
//打印成绩报表模块
void print()
{
system("cls");
void print1();
void print2();
int select;
printf(" ***********打印学生成绩信息***********\n");
printf("\n");
printf("\n");
printf(" 1.屏幕显示报表\n");
printf(" 2.打印机打印报表\n");
printf(" 0.返回\n");
printf("\n 请输入您的选择编号:");
printf("\n --------------------------------------\n");
scanf("%d",&select);
switch(select)
{
case 1:print1();break;
case 2:print2();break;
case 0:return;
}
}
// 屏幕显示报表模块
void print1()
{
system("cls");
int i,j;
printf(" 成绩总表\n");
printf(" 学号姓名:");
for (j=0;j<m;j++)
printf("%10s",subject[j]);
printf(" 总成绩平均成绩\n");
for (i=0;i<n;i++)
{
printf("%8s %8s",number[i],name[i]);
for (j=0;j<m;j++)
printf("%6.1f",score[i][j]);
printf("%6.1f %6.2f\n",sum[i],sum[i]/m);
}
printf(" 显示完毕.\n");
}
// 打印机打印报表模块
void print2( )
{
system("cls");
FILE * fp;
int i,j;
printf(" 请准备好打印机,按任意键继续…\n");
scanf("% * c");
if ((fp=fopen("prn","w"))==NULL)
{
printf(" 打印机没有准备好.\n");
return;
}
fprintf(fp," 成绩总表\n");
fprintf(fp," 学号姓名\n");
for (j=0;j<m;j++ )
fprintf(fp,"%10s",subject[j]);
fprintf(fp," 总成绩平均成绩\n");
for(i=0;i<n;i++)
{
fprintf(fp,"%6.1f",score[i][j]);
fprintf(fp,"%8s %8s",number[i],name[i]);
for (j=0;j<m;j++)
fprintf(fp,"%6.1f %6.2f\n",sum[i],sum[i]/m);
}
fclose(fp);
printf(" 打印完毕.\n");
}
用Java语言编程输入10位学生的语文成绩,数学成绩,英语成绩,求出每位...
import java.util.Arrays;import java.util.Scanner;public class StudentScore { public static void main(String[] args) { \/\/定义一个二维数组scores来存放10位学生的三门科目的成绩 int[][] scores = new int[10][3]; \/\/创建一个输入对象 Scanner input = new Scanner(System.in);...
编程实现:计算c语言期末成绩,平时成绩占比30%,期末成绩占比70%,成绩...
这个程序首先提示用户输入平时成绩和期末成绩,然后按照30%和70%的权重计算总成绩。最后,它检查总成绩是否大于等于60,以确定学生是否及格。注意,我们使用%.2f来格式化输出,这样输出的成绩就会保留两位小数。
用java语言怎么编程计算学生成绩?
\/*java编程:输入某个班学生的成绩,输入-1时,表示输入结束。计算该班的学生人数、最高分、最低分和平均分*\/ 分析:根据题目可知,①需要连续输入数据,并将连续输入的数据保存,②记录输入的数据个数③需要有输入数据内容判断,如果输入-1则停止输入,执行计算。2、代码如下 public static void main...
c语言计算学生的平均成绩
C语言:编写程序,输入10个学生的成绩数据,计算并输出平均分及低于平均分的学生的人数。&s[i]);sum+=s[i];if(s[i]=60)j++;}printf(总分:%d大于等于60的人数:%d\\n,sum,j);return0;}运行截图:这个程序的人数不仅限于10人。可以通过改变N的值来控制。
C语言编程,从键盘输入10个学生的成绩,试统计出他们的成绩总和及平均值...
1、请输入第7个学生的成绩:76请输入第8个学生的成绩:84请输入第9个学生的成绩:87请输入第10个学生的成绩:7910名学生的平均成绩为:830```希望这个代码可以帮助你实现你所需的功能。2、C语言:编写程序,输入10个学生的成绩数据,计算并输出平均分及低于平均分的学生的人数。
C语言编程:出10位学生的成绩求出平均分为并输出高于平均分的同学成绩...
int main(){ double marks[] = {11,22,33,44,55,66,77,88,99,100};double sum = 0;int i = 0;printf("\\n10个人的成绩分别是: ");for (; i < 10; i++){ printf("%.0f ",marks[i]);sum += marks[i];} printf("\\n");printf("\\n10个人的总成绩: %.2f\\n",sum);d...
用c语言编写程序,先输入一组学生成绩,用-1表示输入结束,然后输入某一...
即先对输入的数据进行排序,因为你无法保证输入的学生成绩都是有顺序的,所以先要排序,然后就是查找了,可以采用二分法查找,实现简单也比较快一些。当然如果学生数在10个以内,直接线性查找也是不错的,差别不会太大。 niluanxy | 发布于2012-05-08 举报| 评论 1 0 ...
如何用C++编程实现查看学生成绩的功能?
getJava():获得Java 课程成绩 (4)根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。*\/ class student{ String sNO,sName,sSex;int sAge;double sJava;public student(String a,String ...
c语言求n个学生的平均成绩
c语言求n个学生的平均成绩如下:在C语言编程中,求解n个学生的平均成绩是一项基本的任务。这不仅可以帮助我们更好地理解学生的表现,还可以为学校和教育机构提供决策依据。下面,我将详细介绍如何使用C语言来求解n个学生的平均成绩。首先,我们需要声明一些变量来存储学生的成绩。我们可以使用一个数组来存储...
C编程:输入一批学生的成绩(整数),输出最高分。
最后,输出最高成绩即可。C语言代码实现:include <stdio.h> int main() { int score; \/\/ 用于存储当前学生的成绩 int max_score = 0; \/\/ 用于存储当前最高成绩 while (1) { printf("请输入学生的成绩:");scanf("%d", &score);if (score < 0) { \/\/ 如果输入的成绩小于0,则...
宋先抗癌: 我们才做了这个作业... #include <malloc.h> #include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct scorenode) #define DEBUG #include <string.h> struct scorenode { int number;/*学号*/ char name[8];/*姓名*/ float cj1;/*成绩1*/ ...
庆安县13217904336: c语言 学生成绩管理系统设计学生成绩信息包括:学号,姓名,三门课程成绩(数学、英语和计算机)等.主要功能:(1) 计算各个学生的总分及平均分,... - ?
宋先抗癌:[答案] 希望对你有所帮助.#include"stdio.h"#include"stdlib.h"#include"string.h"#define N 3typedef struct z1{ char no[11]; char name[15]; int score[N]; float sum; float average; int order; ...
庆安县13217904336: c语言编写学生成绩管理系统 - ?
宋先抗癌: #include <stdio.h> void main() { /*输入资料*/ int student[5][4],i; for (i=0; i<=4; i++); scanf("%d,%d,%d \n",student[i][0],student[i][1],student[i][2],student[i][3]) /*平均分*/ for (i=0; i<=4; i++); printf("%f",(float)((student[i][1]+student[i][2]+student[i][3]...
庆安县13217904336: C语言设计学生成绩管理系统V1.0...急求啊..高手帮帮忙啦~~先谢谢咯~~O(∩ - ∩)O哈哈~ - ?
宋先抗癌: #include #define ARR_SIZE 30 void sort(float score[],long num[],int n); void SS(float score[],long num[],int n); int Sea(long num[],int n,long x); int main() { float a=0,b=0,c=0,d=0,e=0,score[ARR_SIZE]; int n,pos,i,temp,totalscore=0,averagescore; long ...
庆安县13217904336: 急!!!!!!!!学生成绩管理系统 C语言程序设计 - ?
宋先抗癌: #include<iostream.h> #include<string.h> #include<fstream.h> class stu { char name[20]; double math,chinese,english,average,sum; public: stu() { } stu(char n[20],double ma,double chin,double eng) { strcpy(name,n); math=ma; chinese=chin; english=...
庆安县13217904336: 学生成绩管理程序设计C语言设计 - ?
宋先抗癌: #include"stdio.h" #include"stdlib.h" #include"string.h" #define N 3 typedef struct z1 { char no[11]; char name[15]; int score[N]; float sum; float average; int order; struct z1 *next; }STUDENT; STUDENT *init(); STUDENT *create(); STUDENT *...
庆安县13217904336: C语言编程 学生成绩管理系统 - ?
宋先抗癌: 这是我们大一时候课程设计做的,学生成绩管理系统,功能比楼主需要的稍多一些,你看一下,不需要的函数删掉它好了.#include<stdio.h> #include<malloc.h> #include<string.h>struct stu {long num;char name[20];float score1,score2,score...
庆安县13217904336: C语言学生成绩管理系统的设计 - ?
宋先抗癌: #include<stdio.h>#define N 40#include<string.h> struct student{ long num; char name[10]; float score[5]; int number[6][6]; float sum; }; void menu() { printf(" ****************************************\n"); printf(" 1--------------查询\n"); printf(" 2--------------...