當前位置:首頁 » 考試成績 » 公司三校學生成績管理

公司三校學生成績管理

發布時間: 2021-03-08 11:25:40

學生成績管理

(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];

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919