公司三校學生成績管理
❶ 學生成績管理
(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];