公司三校学生成绩管理
❶ 学生成绩管理
(c) Copyright 2003,Hu Wenjin
* All Right Reserved
*
* WRITE USE ANSI c
*
* File: datadef.h
* Auther: Hu Wenjin
* Data: 11.4.2003
*********************************************************
*/
/*
*********************************************************
* DATA TYPES DEFINE
*********************************************************
*/
#if !defined( _DATADEF_H )
#define _DATADEF_H
❷ 学生成绩管理系统 统计一个班(最多30人)的成绩,实现以下补充功能
下午5点给你 ,已发送,请查收
学生成绩管理系统源代码.rar
❸ 学生成绩管理系统(要求很少,看下面详细要求!)
技术活,帮顶
❹ 学生成绩管理
有一个程序差不多的,但是要你自己去改一下
这个给你参考一下吧
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>
typedef struct STUDENT
{
char studentNumber[10];/*学生学号*/
char studentName[20];/*学生姓名*/
char className[20];/*班级名称*/
float mark1;/*第1门成绩*/
float mark2;/*第2门成绩*/
float mark3;/*第3门成绩*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink;/*链表表头指针*/
/*以下是函数声明*/
void ReadInfoFormFile(void);
void DesplayMenu(void);
void CreateHeadLink(void);
STUDENT *MallocNode(void);
void GetInformation(STUDENT *t);
void OutputInformation(void);
void DesplayInfoBystudentName(void);
void DesplayInfoBystudentNumber(void);
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber(void);
void ChangeMarkByName(void);
void ChangeMarkByNumber(void);
void SaveLinkToFile(void);
void DesplayMarkSegment(void);
void CompositorByTotalMark(void);
int choose;/*用于接受用户的选择*/
/*主函数*/
main()
{
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
}
/************************************
函数功能:从文件中读学生信息到链表中
************************************/
void ReadInfoFormFile(void)
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("文件不存在\n");
return;
}
p=MallocNode();
while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3))>0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/************************************
函数功能:显示菜单,根据用户的输入
完成相应的功能
************************************/
void DesplayMenu(void)
{
STUDENT *p;
printf("-------请选择相应功能------------\n\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 退出 |\n\n");
scanf("%d",&choose);/*取得用户的选择*/
switch(choose)
{
case 1:
OutputInformation();/*显示所有学生的信息*/
break;
case 2:
DesplayInfoBystudentName();
break;
case 3:
DesplayInfoBystudentNumber();/*根据用户输入的学号显示该学生的信息*/
break;
case 4:
p=MallocNode();/*先申请一个新结点*/
GetInformation(p);/*要求用户输入信息到新结点中*/
InsertOneNode(p);/*将新结点加到链表中*/
break;
case 5:
DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/
break;
case 6:
ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/
break;
case 7:
ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/
break;
case 8:
SaveLinkToFile();/*保存数据*/
break;
case 9:
DesplayMarkSegment();/*显示各分数段的学生成绩*/
break;
case 10:
CompositorByTotalMark();
break;
case 11:
SaveLinkToFile();/*保存数据后再退出*/
free(headLink);
exit(1);
break;
default:
break;
}
DesplayMenu();/*递归调用*/
}
/************************************
函数功能:建立链表表头
************************************/
void CreateHeadLink(void)
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;
}
/************************************
函数功能:申请一个新结点,并将其初始化
************************************/
STUDENT *MallocNode(void)
{
STUDENT *p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
p->studentNumber[i]='\0';
for(i=0;i<20;i++)
p->studentName[i]='\0';
for(i=0;i<20;i++)
p->className[i]='\0';
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->next=NULL;
return p;
}
/************************************
函数功能:取得用户输入的学生信息
************************************/
void GetInformation(STUDENT *t)
{
printf("请输入学生学号:\n");
scanf("%s",t->studentNumber);
printf("请输入学生姓名:\n");
scanf("%s",t->studentName);
printf("请输入该生所在班级:\n");
scanf("%s",t->className);
printf("请输入第1门成绩:\n");
scanf("%f",&(t->mark1));
printf("请输入第2门成绩:\n");
scanf("%f",&(t->mark2));
printf("请输入第3门成绩:\n");
scanf("%f",&(t->mark3));
}
/************************************
函数功能:在链表的结尾处增加一个结点
************************************/
void InsertOneNode(STUDENT *t)
{
STUDENT *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/************************************
函数功能:根据用户输入的学生姓名显示该学生的信息
************************************/
void DesplayInfoBystudentName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
p=headLink->next;
printf("请输入学生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在姓名为 %s 的学生\n",studentName);
}
/************************************
函数功能:根据用户输入的学号显示该学生的信息
************************************/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[10];
char flag=0;
p=headLink->next;
printf("请输入学生学号:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在学号为 %s 的学生\n",studentNumber);
}
/************************************
函数功能:输出一个结点的信息
************************************/
void DesplayOneNode(STUDENT *t)
{
printf("%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%s\t",t->className);
printf("%.2f\t",t->mark1);
printf("%.2f\t",t->mark2);
printf("%.2f\t",t->mark3);
printf("%.2f\t",t->mark1+t->mark2+t->mark3);
printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3);
}
/************************************
函数功能:根据用户输入的学号删除该学生
************************************/
void DeleteNodeBystudentNumber(void)
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("请输入要删除的学生学号:");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("不存在该学号的学生\n");
return;
}
printf("成功删除\n");
}
/************************************
函数功能:显示所有学生的信息
************************************/
void OutputInformation(void)
{
STUDENT *p;
p=headLink->next;
if(p==NULL)
{
printf("现在没有学生信息,请先输入学生信息\n\n");
return;
}
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
/************************************
函数功能:根据输入的姓名修改成绩
************************************/
void ChangeMarkByName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("请输入学生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在姓名为 %s 的学生\n",studentName);
}
/************************************
函数功能:根据输入的学号修改成绩
************************************/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("请输入学生学号:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在学号为 %s 的学生\n",studentNumber);
}
/************************************
函数功能:保存链表数据到文件中
************************************/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("现在没有学生信息,请先输入学生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %f %f %f\n",p->studentNumber,p->studentName,p->className,p->mark1,p->mark2,p->mark3);
p=p->next;
}
fclose(fp);
}
/************************************
函数功能:显示优秀和不及格学生成绩
************************************/
void DesplayMarkSegment(void)
{
STUDENT *p;
int count=0;
p=headLink->next;
printf("60分以下(不及格)的学生成绩如下:\n");
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
while(p)
{
if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10))))/*只要有一科不及格就认为该生不及格*/
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("不及格的学生一共有%d人\n",count);
p=headLink->next;
printf("成绩优秀的学生成绩如下:\n");
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
count=0;
while(p)
{
if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10))))
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("成绩优秀的学生一共有%d人\n",count);
}
/************************************
函数功能:按总成绩排序
************************************/
void CompositorByTotalMark(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("现在还没学生信息,请先输入学生信息\n");
return;
}
while(r)/*两层while循环实现排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3))
{
strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/
strcpy(exchange.studentName,q->studentName);
strcpy(exchange.className,q->className);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;
strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/
strcpy(q->studentName,p->studentName);
strcpy(q->className,p->className);
q->mark1=p->mark1;
q->mark2=p->mark3;
q->mark3=p->mark3;
strcpy(p->studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/
strcpy(p->studentName,exchange.studentName);
strcpy(p->className,exchange.className);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}
❺ 学生成绩管理程序
学生成绩管理程序设计 难度系数1.5 (1)选项菜单集成各功能函数模块(2)这个是C语言的编程 程序代码 #include
❻ 求学生成绩管理系统
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#include<conio.h>
#include<ctype.h>
#define LEN1 sizeof(struct student)
#define NULL 0
struct student
{
char num[15]; //记录学号。
char name[15];//记录姓名。
char sex[6]; //记录性别。
struct student *next;
};
int toint(char string[4]) //定义一个函数,把数字字符串转化为整数。
{
int length,sum=0;
length=strlen(string);
for(int i=0;i<length;i++)
sum=(sum+string[i]-48)*10;
return sum/10;
}
int subject(FILE *fp) //定义一个函数,来通过文件找出科目数。
{
int n=0;
char str[40];
rewind(fp);//把文件指针返回到文件的开头。
do
{
fscanf(fp,"%s",str);
n++;
}while(strcmp(str,"total")!=0);
return n-6;
}
int judgefile(FILE *fp)//判断文件是否是上次录入的文件。
{
char str[40];
int i=0;
char c;
while(!feof(fp))
if(isprint(c=fgetc(fp))&&(c!=32))
i=1;
rewind(fp);
do
{
fscanf(fp,"%s",str);
if(strcmp("total",str)==0)
i=2;
}while(!feof(fp));
switch(i)
{
case 0:printf("\n此文件是空的!\n\n");return 0;
case 1:printf("\n此文件不是成绩记录文件!\n\n");return 0;
}
return 1;
}
int main(void)
{
void record(void); //成绩录入
void research(void); //成绩查询
void putchievement(void); //成绩输出
void statistic(void); //成绩统计
char a,a1;
printf("\n\t\t ********欢迎使用本系统******** \n");
printf("\t\t\t 作者:永久指针\n");
while(1)
{
printf("\n\t1.成绩录入 ");
printf("\t\t\t\t 2.成绩查询\n");
printf("\t3.成绩统计");
printf("\t\t\t\t 4.成绩输出\n");
printf("\t5.清理屏幕");
printf("\t\t\t\t 6.系统退出\n");
printf("\t\t\t 请您输入:");
while(1)
{
while((a=getch())!='\r')
{
if(isprint(a))
{
putchar(a);
putchar('\b');
}
a1=a;
}
if(a1=='1'||a1=='2'||a1=='3'||a1=='4'||a1=='5'||a1=='6')
{
putchar('\n');
break;
}
else printf("\n\t\t\t 输入错误,请重新输入:");
}
switch(a1)
{
case '1':record(); while(getchar()!='\n');break;
case '2':research(); break;
case '3':statistic();break;
case '4':putchievement();break;
case '5':system("cls");break;
case '6':exit(0);
}
}
return 0;
}
void record(void)
{
int subjects=0,total=0;
char a,a1;
printf("1.重新录入。2.继续录入。\n请输入:");
while(1)
{
while((a=getch())!='\r')
{
if(isprint(a))
{
putchar(a);
putchar('\b');
}
a1=a;
}
if(a1=='1'||a1=='2')
{
putchar('\n');
break;
}
else printf("\n\t\t\t 输入错误,请重新输入:");
}
char file[30];
FILE *fp;
if('1'==a1)
{
printf("请您输入文件名和路径(如输入错误或1则默认d:\\chengji.txt):");
scanf("%s",file);
if((fp=fopen(file,"w"))==NULL||strcmp(file,"1")==0) //这里要大括号!
{
printf("文件名和路径已经默认。\n\n");
fp=fopen("d:\\chengji.txt","w");
}
fprintf(fp,"\t\t\t ***********成绩统计表***********\n");
fprintf(fp,"NUMBER NAME SEX");
char discipline[25];//用来记录科目。
printf("请您依次输入要录入的成绩科目(如C_language Chinese,当输入“-”时表输入结束。):\n");
while(1)
{
scanf("%24s",discipline);
if(strcmp(discipline,"-")!=0) //判断科目输入是否结束。
fprintf(fp,"%16s",discipline);//在文件中相应的打印出来。
else
{
fprintf(fp," average total\n");//再在科目后面加上平均分和总分。
printf("您已经输入完毕!\n");
break;
}
}
}
else
{
while(1)
{
printf("请您输入文件名和路径(如输入错误或1则默认d:\\chengji.txt):");
scanf("%s",file);
if((fp=fopen(file,"r+"))==NULL||strcmp(file,"1")==0)
{
printf("文件名和路径已经默认。\n\n");
fp=fopen("d:\\chengji.txt","r+");
}
if(judgefile(fp))//调用函数判断文件是否是上次录入的文件。
break;
}
}
subjects=subject(fp); //调用函数得到文件中的科目数。
fseek(fp,0L,2); //把文件指针移动到文件开头。
struct student *head1;
struct student *p1,*p2;
head1=p1=(struct student *)malloc(LEN1);
int score;//用来记录分数。
printf("请您依次输入学生的学号,姓名,性别(m或w)和各科的成绩(当学号为“-”时表输入结束。):\n");
while(1)
{
total=0;
scanf("%s",p1->num); //输入学号。
if(strcmp(p1->num,"-")!=0) //判断是否输入结束。
{
scanf("%s%s",p1->name,p1->sex); //输入姓名和性别。
fprintf(fp,"%-12s%-12s%-7s ",p1->num,p1->name,p1->sex);
int i=subjects;
while(1)
{
if(i>0)
{
i--;
scanf("%d",&score); //录入该生分数。
total+=score; //求该生的总分。
fprintf(fp,"%-12d",score);
}
else
{
fprintf(fp,"%-12.2f%-12d\n",(float)total/subjects,total); //求平均分,再在文件中打印平均分和总分。
break;
}
}
p2=(struct student *)malloc(LEN1);
p1->next=p2;
p1=p2;
}
else
{
p1->next=NULL;
free(head1);
printf("您已经输入完毕!\n");
fclose(fp);
break;
}
}
}
void research(void)
{
int subjects,stringnum=0,flag,flag1=0;
char p='0',p1,file[50];//用于记录路径和文件名。
FILE *fp;
while(1)
{
printf("请您输入上次保存的文件路径和文件名(如输入错误或1则表示默认d:\\chengji.txt):");
scanf("%50s",file);
while(getchar()!='\n');//过滤多余的字符流。
if((fp=fopen(file,"r"))==NULL||strcmp(file,"1")==0)
{
printf("文件名和路径已经默认。\n");
fp=fopen("d:\\chengji.txt","r");
}
if(judgefile(fp))//调用函数判断文件是否是上次录入的文件。
break;
}
subjects=subject(fp);
rewind(fp);
char filestring[20],getnumorname[20];
printf("\n请您选择查询方式:\n");
printf("按学号查找请输入1,按姓名查找请输入2,退出请输入其他键.\n");
printf("请输入:");
p=getch();
do
{
p1=p;
if(isprint(p))
{
putchar(p);
putchar('\b');
}
}while((p=getch())!='\r');
int flag2;//用于控制下面输出.
if('1'==p1)
{
putchar('\n');
flag2=0;
while(1)
{
int q=-1;//下面有用。
flag=0;//通过它的值来判断在文件中是否有此人。
stringnum=0;//记录在文件中已经查询了的字符串数。
flag2++;
if(1==flag2)
printf("请您输入要查询的学号(退出请输入“-”):\n");//输入要查询的学号。
while(q<20)
{
q++;
if((getnumorname[q]=getch())!='\r')
{
if(0==q) // 把"请您输入要查询的学号(退出请输入“-”):"或"查无此人,请继续或输入'-'退出:"覆盖掉。
{
putchar('\r');
printf(" ");
putchar('\r');
}
putchar(getnumorname[q]);
if(getnumorname[q]==8)
{
putchar(' ');
putchar(8);
q-=2;
if(q<-1)
q=-1;
}
}
else break;
}
getnumorname[q]='\0';
putchar('\r');
if(strcmp(getnumorname,"-")==0)//判断是否查询结束。
return;
fseek(fp,43L,0);//滤过字符串***********成绩统计表***********,以免filestring定得太大。
while(!feof(fp))
{
fscanf(fp,"%s",filestring);
stringnum++;
if(1==flag2&&stringnum>0&&stringnum<subjects+6)//用于一开始就总是输入错误而导致的过多输出文件中读的项目。
{
printf("%-12s",filestring);
if(stringnum==subjects+5) printf("\n");
}
if(stringnum>0&&stringnum<subjects+6&&flag1%30==0&&flag1>29) //把从文件中读的项目输出到屏幕上。
{
printf("%-12s",filestring);
if(stringnum==subjects+5) printf("\n");
}
if((stringnum-1)%(subjects+5)==0&&strcmp(filestring,getnumorname)==0) //找到该生的条件。
{
flag=1;//使值为1,表明存在该生。
flag1++;//记录使用者查询成功的次数。
for(int b=subjects+5;b>0;b--) //若找到则输出该生的信息。
{
printf("%-12s ",filestring);
if(b!=1)
{
fscanf(fp,"%s",filestring);
stringnum++;
}
}
printf("\n");
break;
}
else continue; //找不到则继续。
}
if(flag==0)
printf("查无此人,请继续或退出:");
}
}
else if(p1=='2')
{
char getnum[26];//用于记录文件中的学号。
putchar('\n');
flag=0;
flag2=0;
while(1)
{
int q=-1;//下面有用。
flag=0;//通过它的值来判断在文件中是否有此人。
stringnum=0;//记录在文件中已经查询了的字符串数。
flag2++;
if(1==flag2)
printf("请您输入要查询的姓名(退出请输入“-”):\n");
while(q<20)
{
q++;
if((getnumorname[q]=getch())!='\r')
{
if(0==q) // 把"请您输入要查询的学号(退出请输入“-”):"或"查无此人,请继续或输入'-'退出:"覆盖掉。
{
putchar('\r');
printf(" ");
putchar('\r');
}
putchar(getnumorname[q]);
if(getnumorname[q]==8)
{
putchar(' ');
putchar(8);
q-=2;
if(q<-1)
q=-1;
}
}
else break;
}
getnumorname[q]='\0';
putchar('\r');
if(strcmp(getnumorname,"-")==0)//判断是否查询结束。
return;
fseek(fp,43L,0); //滤过字符串***********成绩统计表***********,以免num定的太大。
while(!feof(fp))
{
fscanf(fp,"%s",filestring);
stringnum++;
if(1==flag2&&stringnum>0&&stringnum<subjects+6)//用于一开始就总是输入错误而导致的过多输出文件中读的项目。
{
printf("%-15s",filestring);
if(stringnum==subjects+5) printf("\n");
}
if(stringnum>0&&stringnum<subjects+6&&flag1%30==0&&flag1>29)
{
printf("%-15s",filestring);
if(stringnum==subjects+5)
printf("\n");
}
if(stringnum%(subjects+5)==1&&stringnum>(subjects+5))
strcpy(getnum,filestring);
if((stringnum-2)%(subjects+5)==0&&strcmp(filestring,getnumorname)==0)//有此人的条件。
{
flag=1;//使值为1,表明存在该生。
flag1++;//记录使用者查询成功的次数。
for(int b=subjects+4;b>0;b--)
{
if(b==subjects+4)
printf("%-15s",getnum);
printf("%-15s",filestring);
if(b!=1)
{
fscanf(fp,"%s",filestring);
stringnum++;
}
}
printf("\n");
}
else continue;
}
if(flag==0)
printf("查无此人,请继续或退出:");
}
}
else return;
}
void statistic(void)
{
char file[30];
char subjectnum[4],a;
int b;
FILE *fp;
while(1)
{
printf("请您输入上次保存的文件路径和文件名(如输入错误或1则表示默认d:\\chengji.txt):");
scanf("%s",file);
while(getchar()!='\n');
if((fp=fopen(file,"r"))==NULL||strcmp(file,"1")==0)
{
printf("文件名和路径已经默认。\n");
fp=fopen("d:\\chengji.txt","r");
}
if(judgefile(fp))//调用函数判断文件是否是上次录入的文件。
break;
}
char filestring[25],*p; //num不能小于"***********成绩统计表***********"的长度,否则输出"***********成绩统计表**********************成绩统计表***********".
int num1[3][20]={0};
int i,stringnum=0,q,j,num2,excellentmark,passmark;
p=filestring;
i=subject(fp); //统计文件的科目书数。
rewind(fp);
printf("请您输入优秀分数线:");
while(1)
{
b=0;
while((a=getch())!='\r')
{
if(isdigit(a)&&(b<3))
{
putchar(a);
subjectnum[b]=a;
b++;
}
if(8==a)
{
if(--b>=0)
{putchar('\b');putchar(' ');putchar('\b');}
else b++;
}
}
subjectnum[b]='\0';
if((excellentmark=toint(subjectnum))<=0)
printf("\n输入错误,请重新输入:");
else {putchar('\n'); break;}
}
printf("请您输入及格分数线:");
while(1)
{
b=0;
while((a=getch())!='\r')
{
if(isdigit(a)&&(b<3))
{
putchar(a);
subjectnum[b]=a;
b++;
}
if(8==a)
{
if(--b>=0)
{putchar('\b');putchar(' ');putchar('\b');}
else b++;
}
}
subjectnum[b]='\0';
if((passmark=toint(subjectnum))<=0||passmark>excellentmark)
printf("\n输入错误,请重新输入:");
else {putchar('\n'); break;}
}
fseek(fp,43L,0);//滤过字符串***********成绩统计表***********,以免num定的太大。
while(!feof(fp))
{
stringnum++;
if(stringnum>3&&stringnum<4+i)
{
fscanf(fp,"%s",filestring);
if(stringnum==4)
printf("\t ");
printf("%15s",filestring);
if(stringnum==i+3)
printf("\n");
}
else if(stringnum%(i+5)>3&&stringnum%(i+5)<(i+4))
{
fscanf(fp,"%d",&num2);
if(num2>=excellentmark)
num1[0][(stringnum%(5+i))-4]++;
else if(num2>=passmark)
num1[1][(stringnum%(5+i))-4]++;
else
num1[2][(stringnum%(5+i))-4]++;
}
else fscanf(fp,"%s",filestring);
}
for(j=0;j<3;j++)
{
switch(j)
{
case 0: printf("优秀段 (%d~ ) ",excellentmark);break;
case 1: printf("及格段 (%d~%d) ",excellentmark,passmark);break;
case 2: printf("不及格段(0 ~%d) ",passmark);break;
}
for(q=0;q<i;q++)
printf(" %-12d",num1[j][q]);
printf("\n");
}
for(j=0;j<2;j++)
{
switch(j)
{
case 0:printf("优秀率 ");break;
case 1:printf("及格率 ");break;
}
if(j==0)
for(q=0;q<i;q++)
{
printf(" %-4.2f%% ",100*(float)(i+5)*num1[j][q]/(stringnum-6-i));
if(q==i-1)
printf("\n");
}
if(j==1)
for(q=0;q<i;q++)
printf(" %-4.2f%% ",100*(float)(i+5)*(num1[j][q]+num1[0][q])/(stringnum-6-i));
}
}
void putchievement(void)
{
char choice,a;
char file[60],filestr[26];
int subjectnum,flag=0,totalstudent=0;
FILE *fp;
while(1)
{
printf("请您输入上次保存的文件路径和文件名(如输入错误或1则表示默认d:\\chengji.txt):");
scanf("%60s",file);
while(getchar()!='\n');
if((fp=fopen(file,"r"))==NULL||strcmp(file,"1")==0)
{
printf("文件名和路径已经默认。\n\n");
fp=fopen("d:\\chengji.txt","r");
}
if(judgefile(fp))//调用函数判断文件是否是上次录入的文件。
break;
}
subjectnum=subject(fp);
rewind(fp);
printf("1.按学号输出\t\t 2.按总分输出\t\t 3.退出\n");
printf("请输入:");
while(1) //防一下漏洞!
{
choice='\r';
while((a=getch())!='\r')
{
if(a>48&&a<52)
{
putchar(a);
putchar('\b');
}
choice=a;
}
if(choice!='\r')
{
putchar('\n');
break;
}
}
if('3'==choice)
exit(0);
fseek(fp,43L,0); //滤过字符串***********成绩统计表***********,以免filestr定的太大。
flag=subjectnum;
while(flag-->-5) //输出“NUMBER NAME...”等项。
{
fscanf(fp,"%s",filestr);
printf("%-15s",filestr);
}
if('1'==choice)
{
flag=0;
struct row_preface
{
char studentnum[20];
long position; //用来记录读取该学号后文件指针的位置,以便到时候输出该学号后面的项。
struct row_preface *next;
};
struct row_preface *head,*p1,*p2;
int len=sizeof(struct row_preface);
head=p1=(struct row_preface *)malloc(len);
while(!feof(fp))
{
fscanf(fp,"%s",filestr);
flag++;
if(flag%(subjectnum+5)==1)
{
totalstudent++;//用于记录学生的人数。
strcpy(p1->studentnum,filestr);
p1->position=ftell(fp);
p2=(struct row_preface *)malloc(len);
p1->next=p2;
p1=p2;
}
}
p2->next=NULL;
long transition;
char storge[20];
totalstudent=totalstudent-2; //计算出统计的人数。
for(int i=totalstudent;i>1;i--)
{
p1=head;
for(int j=i;j>0;j--)
{
p2=p1->next;
if(strcmp(p1->studentnum,p2->studentnum)>0)
{
strcpy(storge,p1->studentnum);
strcpy(p1->studentnum,p2->studentnum);
strcpy(p2->studentnum,storge);
transition=p1->position;
p1->position=p2->position;
p2->position=transition;
}
p1=p2;
}
}
p1=head;
while(p1->next->next!=NULL)
{
flag=subjectnum;
p2=p1->next;
printf("\n%-15s",p1->studentnum);
fseek(fp,p1->position,0);//使指针指到文件中的该学号后面。
while((flag--)>-4) //输出学号后面的项。
{
fscanf(fp,"%s",filestr);
printf("%-15s",filestr);
}
p1=p2;
}
free(head);
}
if('2'==choice)
{
flag=0;
struct row_preface
{
int totalnum; //用来记录总分。
long position; //用来记录读取该学号前文件指针的位置,以便到时候输出该学号和后面的项。
struct row_preface *next;
};
struct row_preface *head,*p1,*p2;
int len=sizeof(struct row_preface);
head=p1=(struct row_preface *)malloc(len);
p1->position=ftell(fp);
while(!feof(fp))
{
flag++;
if(flag%(subjectnum+5)!=0)
fscanf(fp,"%s",filestr);
if(flag%(subjectnum+5)==0)
{
totalstudent++;//用于记录学生的人数。
fscanf(fp,"%d",&p1->totalnum);
p2=(struct row_preface *)malloc(len);
p1->next=p2;
p2->position=ftell(fp);
p1=p2;
}
}
p2->next=NULL;
long transition;
totalstudent=totalstudent-2; //计算出统计的人数。
for(int i=totalstudent;i>1;i--)
{
p1=head;
for(int j=i;j>0;j--)
{
p2=p1->next;
if(p1->totalnum<p2->totalnum)
{
transition=p1->totalnum; //交换总分。
p1->totalnum=p2->totalnum;
p2->totalnum=transition;
transition=p1->position; //交换指针位置。
p1->position=p2->position;
p2->position=transition;
}
p1=p2;
}
}
flag=subjectnum;
putchar('\n');
p1=head;
while(p1->next->next!=NULL)
{
p2=p1->next;
fseek(fp,p1->position,0);//使指针指到文件中的该学号前面。
flag=subjectnum+5;
while(flag--)
{
fscanf(fp,"%s",filestr);
printf("%-15s",filestr);
}
putchar('\n');
p1=p2;
}
free(head);
}
}
❼ 学生成绩管理系统
哦 很好很强大
❽ 金川公司三校的成绩怎么查
把这个网址打开,然后上面有一个学生成绩管理,把鼠标放在上面,下面有一个查询回成绩,然后按提答示输入科目或考试查询 http://www.sxjnmc.com/sxxxgl/
❾ 学生成绩管理(限最多1人完成)
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>/*文件包含*/
struct STUDENT
{
int id,age,chinese,math,english;
char name[21];
}students[32];
void return_confirm(void)
{
printf("\n an ren yi jian fan hui ......\n");
getch();
}
void fun1(),fun2(),fun3(),fun4(),fun5(),fun6();/*函数声明*/
main()/*主函数*/
{ char ch;
while(1)
{clrscr();
printf(">>>xue sheng guan li xi tong<<<\n\n");
printf("-cao zuo xuan dan-\n\n");
printf("qing yong shu zi jian xuan ze cao zuo\n\n");
printf("1 lu ru xue sheng ji ben xin xi\n");
printf("2 xiu gai xue sheng ji ben xin xi\n");
printf("3 zhu xiao xue sheng jiben xin xi\n\n");
printf("4 lu ru cheng ji\n");
printf("5 xiu gai cheng ji\n");
printf("6 liu lan.....\n");
printf("0 tui chu\n");
ch=getch();
switch(ch)
{
case '1':fun1();break;
case '2':fun2();break;
case '3':fun3();break;
case '4':fun4();break;
case '5':fun5();break;
case '6':fun6();break;
case '0':exit(0);
}
}
}
❿ 编写一个学生成绩管理系统程序
structstudent{
charnum[20];
charname[20];
floatscore[3];
floatsum;
floatavg;
}stu[5];