您的位置:首页 > 其它

学生成绩管理系统

2015-12-14 22:04 232 查看
#include <stdio.h>

#include <stdlib.h>

#include<string.h>

#include<conio.h>

struct sdu

{

char name[20];

char num[10];

float ke[6];

float zongfen;

float pingjun;

struct sdu *next;

};

struct sdu_head

{

struct sdu*head;

};

struct sdu_head*head_create()

{

struct sdu_head*singlelink;

singlelink=(struct sdu_head*)malloc(sizeof(struct sdu_head));

if(singlelink==NULL)

{

printf("分配空间失败\n");

exit(0);

}

if(singlelink!=NULL)

singlelink->head=NULL;

return singlelink;

}

struct sdu*node_create()

{

struct sdu*node;

node=(struct sdu*)malloc(sizeof(struct sdu));

if(node==NULL)

{

printf("分配空间失败\n");

exit(0);

}

if(node!=NULL)

{

node->next=NULL;

}

return node;

}

void nodeapp(struct sdu_head*singlelink)

{

struct sdu*node=NULL;

struct sdu*cur=NULL;

node=node_create();

if(singlelink->head==NULL)

{

singlelink->head=node;

}

else

{

cur=singlelink->head;

while(cur!=NULL&&cur->next!=NULL)

{

cur=cur->next;

}

cur->next=node;

}

return;

}

void node_print(struct sdu_head*singlelink,int a,char kemuleixing[6][10])//a为科目门数//

{

struct sdu*iter=singlelink->head;

int h,i;

h=a*10+a+33;

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

printf("_");

printf("\n");

printf("xingming |xuehao |");

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

printf("%-10s|",kemuleixing[i]);

printf("zongfen |");

printf("\n");

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

printf("_");

printf("\n");

while(iter!=NULL)

{

printf("%-10s|%-10s|",iter->name,iter->num);

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

printf("%-10.2f|",iter->ke[i]);

printf("%-10.2f|",iter->zongfen);

printf("\n");

iter=iter->next;

}

return;

}

void node_destroy(struct sdu*node)

{

if(node!=NULL)

{

node->next=NULL;

free(node);

}

return;

}

void singlelink_destroy(struct sdu_head*singlelink)

{

struct sdu*iter=singlelink->head;

struct sdu*next=NULL;

while(iter!=NULL)

{

next=iter->next;

node_destroy(iter);

iter=next;

}

singlelink->head=NULL;

free(singlelink);

return;

}

void print()

{ printf(" ___________________________________\n");

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("|10.按姓名查询学生排名及其考试成绩 |\n");

printf("|11.按优秀(100-90)良好(89-80)中等(79-70)及格(69-60)|\n");

printf("| 不及格(59-0)统计人数以及百分比 |\n");

printf("|12.将数据写入文件中 |\n");

printf("___________________________________________________________\n");

return;

}

int main()

{

int menshu;

char kemuleixing[6][10],chazhao[20],fanhui,k[1];

int n,i,stucount,d,s,flag=0,h;

struct sdu jiaohuan;

float sum[6]={0},pingjun[6]={0};

while(1)

{

printf("请输入您要读入的学生人数:\n");

scanf("%s",k);

if((k[0]<='9'&&k[0]>='0')&&(k[1]<='9'&&k[1]>='0'))

stucount=(k[0]-48)*10+(k[1]-48);

if((k[0]<='9'&&k[0]>='0')&&(k[1]=='\0'))

stucount=k[0]-48;

if((k[0]>'9'||k[0]<'0'))

{

printf("输入错误,请重新输入\n");

continue;

}

break;

}

struct sdu_head*singlehead=head_create();

struct sdu*node,*paixu,*regain;

for(i=1;i<=stucount;i++)

nodeapp(singlehead);

node=singlehead->head;

while(1)

{

printf("请输入学习门课数量\n");

scanf("%s",k);

if((k[0]<='9'&&k[0]>='0')&&(k[1]=='\0'))

menshu=k[0]-48;

if((k[0]>'9'||k[0]<'0'))

{

printf("输入错误,请重新输入\n");

continue;

}

break;

}

printf("请输入科目类型\n");

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

scanf("%s",kemuleixing[i]);

while(n!=0)

{

extern void print();

print();

while(1)

{

scanf("%s",k);

if((k[0]<='9'&&k[0]>='0')&&(k[1]<='9'&&k[1]>='0'))

n=(k[0]-48)*10+(k[1]-48);

if((k[0]<='9'&&k[0]>='0')&&(k[1]=='\0'))

n=k[0]-48;

if((k[0]>'9'||k[0]<'0'))

{

printf("输入错误,请重新输入\n");

continue;

}

break;

}

switch(n)

{

case 1:

{

system("cls");

char duru[20];

printf("请输入您要读取的文件名\n");

scanf("%s",duru);

FILE*fp;

fp=fopen(duru,"r");

if((fp=fopen(duru,"r"))==NULL)

{

printf("读取信息失败\n");

exit(0);

}

for(i=1;i<=stucount;i++)

{

fscanf(fp,"%s",node->name);

fscanf(fp,"%s",node->num);

for(d=0;d<menshu;d++)

fscanf(fp,"%f",&node->ke[d]);

regain=node;

node=node->next;

}

fclose(fp);

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 2:

{

system("cls");

printf("请输入要输入的学生人数\n");

scanf("%d",&d);

for(i=1;i<=d;i++)

nodeapp(singlehead);

regain=regain->next;

for(i=1;i<=d;i++)

{

scanf("%s",regain->name);

scanf("%s",regain->num);

for(s=0;s<menshu;s++)

scanf("%f",®ain->ke[s]);

regain=regain->next;

}

stucount=stucount+d;

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 3:

{

system("cls");

node=singlehead->head;

for(i=1;i<=stucount;i++)

{

for(d=0;d<menshu;d++)

{

sum[d]=sum[d]+node->ke[d];

}

}

int i;

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

printf("_");

printf("\n");

printf("kemuleixing |zongfen |pingjunfen|");

printf("\n");

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

{

printf("%-15s|",kemuleixing[i]);

printf("%-10.2f|",sum[i]);

printf("%-10.2f|\n",sum[i]/stucount);

}

node=NULL;

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 4:

{

system("cls");

node=singlehead->head;

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

printf("_");

printf("\n");

printf("xingming |zongfen |pingjun |");

printf("\n");

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

printf("_");

printf("\n");

for(i=1;i<=stucount;i++)

{

node->pingjun=0;

node->zongfen=0;

for(d=0;d<menshu;d++)

{

node->zongfen=node->zongfen+node->ke[d];

}

node->pingjun=node->zongfen/menshu;

printf("%-10s|%-10.2f|%-10.2f|\n",node->name,node->zongfen,node->pingjun);

node=node->next;

}

node=NULL;

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 5:

{

system("cls");

node=singlehead->head;

paixu=node->next;

for(i=1;i<stucount;i++)

{

d=i+1;

for(;d<=stucount;d++)

{

if(paixu->zongfen>node->zongfen)

{

jiaohuan.zongfen=paixu->zongfen;

paixu->zongfen=node->zongfen;

node->zongfen=jiaohuan.zongfen;

jiaohuan.pingjun=paixu->pingjun;

paixu->pingjun=node->pingjun;

node->pingjun=jiaohuan.pingjun;

strcpy(jiaohuan.name,paixu->name);

strcpy(paixu->name,node->name);

strcpy(node->name,jiaohuan.name);

strcpy(jiaohuan.num,paixu->num);

strcpy(paixu->num,node->num);

strcpy(node->num,jiaohuan.num);

for(s=0;s<menshu;s++)

{

jiaohuan.ke[s]=paixu->ke[s];

paixu->ke[s]=node->ke[s];

node->ke[s]=jiaohuan.ke[s];

}

}

paixu=paixu->next;

}

node=node->next;

paixu=node->next;

}

node_print(singlehead,menshu,kemuleixing);

node=NULL;

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 6:

{

system("cls");

node=singlehead->head;

paixu=node->next;

for(i=1;i<stucount;i++)

{

d=i+1;

for(;d<=stucount;d++)

{

if(paixu->zongfen<node->zongfen)

{

jiaohuan.zongfen=paixu->zongfen;

paixu->zongfen=node->zongfen;

node->zongfen=jiaohuan.zongfen;

jiaohuan.pingjun=paixu->pingjun;

paixu->pingjun=node->pingjun;

node->pingjun=jiaohuan.pingjun;

strcpy(jiaohuan.name,paixu->name);

strcpy(paixu->name,node->name);

strcpy(node->name,jiaohuan.name);

strcpy(jiaohuan.num,paixu->num);

strcpy(paixu->num,node->num);

strcpy(node->num,jiaohuan.num);

for(s=0;s<menshu;s++)

{

jiaohuan.ke[s]=paixu->ke[s];

paixu->ke[s]=node->ke[s];

node->ke[s]=jiaohuan.ke[s];

}

}

paixu=paixu->next;

}

node=node->next;

paixu=node->next;

}

node_print(singlehead,menshu,kemuleixing);

node=NULL;

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 7:

{

system("cls");

node=singlehead->head;

paixu=node->next;

for(i=1;i<stucount;i++)

{

d=i+1;

for(;d<=stucount;d++)

{

if(strcmp(paixu->num,node->num)<0)

{

jiaohuan.zongfen=paixu->zongfen;

paixu->zongfen=node->zongfen;

node->zongfen=jiaohuan.zongfen;

jiaohuan.pingjun=paixu->pingjun;

paixu->pingjun=node->pingjun;

node->pingjun=jiaohuan.pingjun;

strcpy(jiaohuan.name,paixu->name);

strcpy(paixu->name,node->name);

strcpy(node->name,jiaohuan.name);

strcpy(jiaohuan.num,paixu->num);

strcpy(paixu->num,node->num);

strcpy(node->num,jiaohuan.num);

for(s=0;s<menshu;s++)

{

jiaohuan.ke[s]=paixu->ke[s];

paixu->ke[s]=node->ke[s];

node->ke[s]=jiaohuan.ke[s];

}

}

paixu=paixu->next;

}

node=node->next;

paixu=node->next;

}

node_print(singlehead,menshu,kemuleixing);

node=NULL;

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 8:

{

system("cls");

node=singlehead->head;

paixu=node->next;

for(i=1;i<stucount;i++)

{

d=i+1;

for(;d<=stucount;d++)

{

if(strcmp(paixu->name,node->name)<0)

{

jiaohuan.zongfen=paixu->zongfen;

paixu->zongfen=node->zongfen;

node->zongfen=jiaohuan.zongfen;

jiaohuan.pingjun=paixu->pingjun;

paixu->pingjun=node->pingjun;

node->pingjun=jiaohuan.pingjun;

strcpy(jiaohuan.name,paixu->name);

strcpy(paixu->name,node->name);

strcpy(node->name,jiaohuan.name);

strcpy(jiaohuan.num,paixu->num);

strcpy(paixu->num,node->num);

strcpy(node->num,jiaohuan.num);

for(s=0;s<menshu;s++)

{

jiaohuan.ke[s]=paixu->ke[s];

paixu->ke[s]=node->ke[s];

node->ke[s]=jiaohuan.ke[s];

}

}

paixu=paixu->next;

}

node=node->next;

paixu=node->next;

}

node_print(singlehead,menshu,kemuleixing);

node=NULL;

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 9:

{

system("cls");

node=singlehead->head;

printf("请输入您要查找的学号");

printf("\n");

scanf("%s",chazhao);

printf("xingming \txuehao \t");

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

printf("%-10s\t",kemuleixing[i]);

printf("\n");

for(i=1;i<=stucount;i++)

{

if(strcmp(chazhao,node->num)==0)

{

printf("%-10s\t",node->name);

printf("%-10s\t",node->num);

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

printf("%-10.2f\t",node->ke[i]);

printf("\n");

flag=1;

}

node=node->next;

}

if(flag==0)

printf("查无此人");

node=NULL;

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 10:

{

system("cls");

node=singlehead->head;

printf("请输入您要查找学生的姓名");

printf("\n");

scanf("%s",chazhao);

printf("xingming xuehao ");

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

printf("%-10s",kemuleixing[i]);

printf("\n");

for(i=1;i<=stucount;i++)

{

if(strcmp(chazhao,node->name)==0)

{

printf("%-10s",node->name);

printf("%-10s",node->num);

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

printf("%-10.2f",node->ke[i]);

printf("\n");

flag=1;

}

node=node->next;

}

int a;

printf("是否重名?是输入1,不是输入0");

printf("\n");

scanf("%d",&a);

if(a==1)

{

node=singlehead->head;

printf("请输入学号具体查询");

printf("\n");

scanf("%s",chazhao);

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

{

if(strcmp(chazhao,node->num)==0)

{

printf("%-10s",node->name);

printf("%s",node->num);

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

printf("%.2f",node->ke[i]);

printf("\n");

}

node=node->next;

}

}

if(flag==0)

printf("查无此人");

node=NULL;

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 11:

{

system("cls");

node=singlehead->head;

int youxiu[6]={0},lianghao[6]={0},zhongdeng[6]={0},jige[6]={0},bujige[6]={0};

for(d=0;d<menshu;d++)

{

for(i=1;i<=stucount;i++)

{

if(node->ke[d]>=90&&node->ke[d]<=100)

youxiu[d]++;

if(node->ke[d]<90&&node->ke[d]>=80)

lianghao[d]++;

if(node->ke[d]>=70&&node->ke[d]<80)

zhongdeng[d]++;

if(node->ke[d]>=60&&node->ke[d]<70)

jige[d]++;

if(node->ke[d]<60)

bujige[d]++;

}

}

for(d=0;d<menshu;d++)

{

printf("%s \n",kemuleixing[d]);

printf("优秀人数 :%3d,百分比:%.2f%\n",youxiu[d],(float)(youxiu[d])/stucount*100);

printf("良好人数 :%3d,百分比:%.2f%\n",lianghao[d],(float)(lianghao[d])/stucount*100);

printf("中等人数 :%3d,百分比:%.2f%\n",zhongdeng[d],(float)(zhongdeng[d])/stucount*100);

printf("及格人数 :%3d,百分比:%.2f%\n",jige[d],(float)(jige[d])/stucount*100);

printf("不及格人数:%3d,百分比:%.2f%\n",bujige[d],(float)(bujige[d])/stucount*100);

}

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

break;

}

case 12:

{

system("cls");

node=singlehead->head;

for(i=1;i<=stucount;i++)

{

node->pingjun=0;

node->zongfen=0;

for(d=0;d<menshu;d++)

{

node->zongfen=node->zongfen+node->ke[d];

}

node->pingjun=node->zongfen/menshu;

node=node->next;

}

node=singlehead->head;

char duru[20];

printf("请输入您要读取的文件名\n");

scanf("%s",duru);

FILE*dp;

if((dp=fopen(duru,"w+"))==NULL)

{

printf("写入信息失败\n");

exit(0);

}

int p;

p=menshu*10+menshu+33;

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

fprintf(dp,"_");

fprintf(dp,"\n");

fprintf(dp,"xingming |xuehao |");

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

fprintf(dp,"%-10s|",kemuleixing[i]);

fprintf(dp,"zongfen |");

fprintf(dp,"\n");

for(i=1;i<=stucount;i++)

{

fprintf(dp,"%-10s|",node->name);

fprintf(dp,"%-10s|",node->num);

for(d=0;d<menshu;d++)

fprintf(dp,"%-10.2f|",node->ke[d]);

fprintf(dp,"%-10.2f|",node->zongfen);

fprintf(dp,"\n");

node=node->next;

}

fclose(dp);

node=NULL;

printf("按enter返回主菜单\n");

fanhui=getch();

system("cls");

}

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: