當前位置:編程學習大全網 - 源碼下載 - c語言學生管理系統源代碼

c語言學生管理系統源代碼

頭文件:::

#ifndef H_STUDENT_HH

#define H_STUDENT_HH

#include "stdio.h"

#include "string.h"

#include "malloc.h"

#define LEN sizeof(struct message_student) /*壹個結構體數組元素的長度*/

#define numsubs 5 /*學科數目*/

typedef struct message_student /*結構體定義*/

{

char number[6];

char name[20];

char sex[4];

float subject[numsubs];

float score;

float average;

int index;

}student;

extern int numstus; /*學生數目*/

extern student *pointer; /*指向結構體數組*/

extern int lens;

int menu_select(); /*函數聲明*/

int openfile(student stu[]);

int findrecord(student stud[]);

int writetotext(student stud[]);

void welcome();

void display1();

void showtable();

void sort(student stu[]);

void deleterecord(student stu[],int i);

void addrecord(student stud[]);

void display(student stud[],int n1,int n2);

void amendrecord(student stud[]);

void count(student stud[]);

void sortnum(student stud[]);

void sortnum2(student stud[]);

void sortname(student stud[]);

void sortname2(student stud[]);

void sortcount(student stud[]);

void sortcount2(student stud[]);

void statistic(student stud[]);

void display1();

#endif

#include "head.h"

int menu_select()

{

char c;

printf("\n\n");

printf(" | 1. 增加學生記錄 5.統計信息 |\n");

printf(" | 2. 查詢學生記錄 6.打開文件 |\n");

printf(" | 3. 修改學生記錄 7.保存文件 |\n");

printf(" | 4. 學生紀錄排序 8.顯示記錄 |\n");

printf(" | 0.退出系統 |\n");

printf("\n\n");

printf("請選擇(0-8):");

c=getchar();

getchar();

return (c-'0');

}

#include "head.h"

int findrecord(student stud[]) /*查找信息*/

{

char str[2];

int i,num;

if(numstus==0)

{

printf("沒有可被查找的記錄\n");

return -1;

}

else

{

printf("以何種方式查找?\n1.學號\t2.姓名\t3.名次\n");

gets(str);

if(str[0]=='1') /*按學號查找*/

{

printf("請輸入學號:");

gets(str);

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

if(strcmp(str,stud[i].number)==0)

{

display(stud,i,i);

break;

}

else continue;

}

else if(str[0]=='2') /*按姓名查找*/

{

printf("請輸入姓名:");

gets(str);

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

if(strcmp(str,stud[i].name)==0)

{

display(stud,i,i);

break;

}

else continue;

}

else if(str[0]=='3') /*按名次查找*/

{

printf("請輸入名次:");

scanf("%d",&num);

getchar();

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

if(num==stud[i].index)

{

display(stud,i,i);

break;

}

else continue;

}

if(i>numstus)

{

printf("沒有查找所要的信息。\n");

return -1;

}

return i;

}

}

#include"head.h"

int openfile(student stu[])

{

int i=0,j;

FILE *fp;

char filename[20],str[2];

if(numstus!=0)

{

printf("已經有記錄存在,是否保存?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

writetotext(stu);

}

printf("請輸入文件名:");

gets(filename);

numstus=0;

if((fp=fopen(filename,"rb+"))==NULL)

{

printf("無法打開該文件\n");

return(-1);

}

fscanf(fp,"%d",&numstus);

fgetc(fp);

while(i<numstus)

{

fscanf(fp,"%s",stu[i].number);

fscanf(fp,"%s",stu[i].name);

fscanf(fp,"%s",stu[i].sex);

for(j=0;j<numsubs;j++)

fscanf(fp,"%f",&stu[i].subject[j]);

fscanf(fp,"%f",&stu[i].score);

fscanf(fp,"%f",&stu[i].average);

fscanf(fp,"%d",&stu[i].index);

i++;

}

fclose(fp);

printf("文件讀取成功\n");

printf("是否顯示紀錄?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

display(stu,0,numstus-1);

return(0);

}

#include "head.h"

void sort(student stud[])

{

int i,j=0;

char str[5];

student *p;

p=stud;

if(numstus==0)

{

printf("沒有可供查詢的記錄!");

}

while(1)

{

for(i=0;;i++)

{

printf(" 請輸入查詢方式:");

printf("(直接輸入回車則結束查詢操作)\n");

printf("1.按照學號\t");

printf("2.按照姓名\t");

printf("3.按照名次\n");

gets(str);

if(strlen(str)==0) break;

if(str[0]=='1')

{

printf("請輸入排序次序:\n");

printf("1.升序排列\t");

printf("2.降序排列\n");

gets(str);

if(str[0]=='1')

sortnum2(p);

else

sortnum(p);

display(stud,0,numstus-1);

}

else if(str[0]=='2')

{

printf("請輸入排序次序:\n");

printf("1.升序排列\t");

printf("2.降序排列\n");

gets(str);

if(str[0]=='1')

sortname2(p);

else

sortname(p);

display(stud,0,numstus-1);

}

else if(str[0]=='3')

{

printf("請輸入排序次序:\n");

printf("1.升序排列\t");

printf("2.降序排列\n");

gets(str);

if(str[0]=='1')

sortcount2(p);

else

sortcount(p);

display(stud,0,numstus-1);

}

else printf("請輸入1~3");

printf("是否退出排序?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y') break;

}

return;

}

}

void sortnum(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

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

for(j=0;j<numstus-i-1;j++)

{

if(strcmp(stud[j+1].number,stud[j].number)>0)

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

void sortnum2(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

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

for(j=0;j<numstus-i-1;j++)

{

if(strcmp(stud[j].number,stud[j+1].number)>0)

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

void sortname(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

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

for(j=0;j<numstus-i-1;j++)

{

if(strcmp(stud[j+1].name,stud[j].name)>0)

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

void sortname2(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

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

for(j=0;j<numstus-i-1;j++)

{

if(strcmp(stud[j].name,stud[j+1].name)>0)

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

void sortcount(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

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

for(j=0;j<numstus-i-1;j++)

{

if(stud[j+1].index>stud[j].index)

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

void sortcount2(student stud[])

{

int i,j;

student temp;

student *p;

p=stud;

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

for(j=0;j<numstus-i-1;j++)

{

if(stud[j].index>stud[j+1].index)

{

temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

}

}

}

#include"head.h"

void statistic(student stud[]) /*新增功能,輸出統計信息*/

{

int i,j=0,k=0;

char c1,str[2];

float average[numsubs],sum=0;

if(numstus==0)

printf("沒有可被查找的記錄\n");

else

{

while(1)

{

printf("下面將統計考試成績\n");

printf("請選擇妳要統計哪科的成績 1.A\t2.B\t3.C\t4.D\t5.E\n");

c1=getchar();

printf("\t壹***有個%d記錄\n",numstus); /*總***記錄數*/

switch(c1)

{

case '1':

for(i=0;i<numstus;i++) /*循環輸入判斷*/

{

sum+=stud[i].subject[0];

if(stud[k].subject[0]>stud[i].subject[0]) k=i;

if(stud[j].subject[0]<stud[i].subject[0]) j=i;

}

average[0]=sum/numstus;

printf("\t科目A的最高分:\n"); /*最高分*/

printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);

printf("\t科目A的最低分是:\n"); /*最低分*/

printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);

printf("\t科目A的平均分是 %5.2f\n",average[0]); /*平均分*/

break;

case '2':

for(i=0;i<numstus;i++) /*循環輸入判斷*/

{

sum+=stud[i].subject[1];

if(stud[k].subject[1]>stud[i].subject[1]) k=i;

if(stud[j].subject[1]<stud[i].subject[1]) j=i;

}

average[1]=sum/numstus;

printf("\t科目B的最高分:\n"); /*最高分*/

printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);

printf("\t科目B的最低分是:\n"); /*最低分*/

printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);

printf("\t科目B的平均分是 %5.2f\n",average[1]); /*平均分*/

break;

case '3':

for(i=0;i<numstus;i++) /*循環輸入判斷*/

{

sum+=stud[i].subject[2];

if(stud[k].subject[2]>stud[i].subject[2]) k=i;

if(stud[j].subject[2]<stud[i].subject[2]) j=i;

}

average[2]=sum/numstus;

printf("\t科目C的最高分:\n"); /*最高分*/

printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);

printf("\t科目C的最低分是:\n"); /*最低分*/

printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);

printf("\t科目C的平均分是 %5.2f\n",average[2]); /*平均分*/

break;

case '4':

for(i=0;i<numstus;i++) /*循環輸入判斷*/

{

sum+=stud[i].subject[3];

if(stud[k].subject[3]>stud[i].subject[3]) k=i;

if(stud[j].subject[3]<stud[i].subject[3]) j=i;

}

average[3]=sum/numstus;

printf("\t科目D的最高分:\n"); /*最高分*/

printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);

printf("\t科目D的最低分是:\n"); /*最低分*/

printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);

printf("\t科目D的平均分是 %5.2f\n",average[3]); /*平均分*/

break;

case '5':

for(i=0;i<numstus;i++) /*循環輸入判斷*/

{

sum+=stud[i].subject[4];

if(stud[k].subject[4]>stud[i].subject[4]) k=i;

if(stud[j].subject[4]<stud[i].subject[4]) j=i;

}

average[4]=sum/numstus;

printf("\t科目E的最高分:\n"); /*最高分*/

printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);

printf("\t科目E的最低分是:\n"); /*最低分*/

printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);

printf("\t科目E的平均分是 %5.2f\n",average[4]); /*平均分*/

break;

default:printf("輸入錯誤!請輸入1~5之間的數\n");

}

sum=0;

getchar();

printf("是否繼續進行統計?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y') ;

else break;

}

}

}

#include"head.h"

int writetotext(student stud[]) /*將所有記錄寫入文件*/

{

int i=0,j;

FILE *fp;

char filename[20];

printf("輸入文件名稱:");

gets(filename);

fp=fopen(filename,"w");

fprintf(fp,"%d\n",numstus);

while(i<numstus)

{

fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex);

for(j=0;j<numsubs;j++)

fprintf(fp,"%f ",stud[i].subject[j]);

fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index);

i++;

}

fclose(fp);

printf("已成功存儲!\n");

display(stud,0,numstus-1);

numstus=0;

return 0;

}

#include"head.h"

void welcome()

{

printf("\t*************************************************************\n");

printf("\t\t\t\t這是壹個學生成績管理系統\n\t\t\t\t 傾情奉獻 歡迎使用!\n");

printf("\t*************************************************************\n");

}

void showtable()

{

printf("---------------------------------------------------------------------------------------\n");

printf("學號\t姓名\t性別\tA\tB\tC\tD\tE\t總分\t平均分\t名次\n");

printf("---------------------------------------------------------------------------------------\n");

}

void display(student stud[],int n1,int n2)

{

int i;

showtable(); /*顯示表頭*/

for(i=n1;i<=n2;i++)

printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);

/*通過循環輸出數據*/

}

void display1()

{

printf("\t\t本系統由計應精英壹組親情制作\n\n");

printf("\t\t制作人員列表: (按比劃)\n");

printf("\t\t王慶斌\t\t\t張威\n\t\t李智\t\t\t周在峰\n\t\t楊凱\t\t\t胡楊\n");

printf("\n\n");

getchar();

}

#include"head.h"

#include<string.h>

void amendrecord(student stud[])

{

char str[5]; /*供用戶輸入*/

int i=-1,j;

if(numstus==0) /*沒有記錄返回*/

printf("沒有可供修改的記錄!");

while(i<0)

{

i=findrecord(stud);

if(i>=0)

{

printf("要刪除這個學生的信息嗎?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

{

deleterecord(stud,i);

count(stud);

}

else

{

printf("確定要修改這個學生的信息嗎?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

{

printf("下面請重新輸入學生的信息:\n");

printf("請輸入學號:");

gets(stud[i].number);

printf("請輸入姓名:");

gets(stud[i].name);

printf("請輸入性別(男/女 1/0):");

gets(str);

if(str[0]=='0')

strcpy(stud[i].sex,"女");

else

strcpy(stud[i].sex,"男");

stud[i].score=0;

printf("請按順序輸入成績:");

for(j=0;j<numsubs;j++)

{

scanf("%f",&stud[i].subject[j]);

stud[i].score+=stud[i].subject[j];

}

getchar();

stud[i].average=stud[i].score/numsubs;

}

count(stud);

}

display(stud,0,numstus-1);

}

printf("是否繼續進行其他修改?(y/n)\n");

gets(str);

if(str[0]=='y'||str[0]=='Y')

i=-1;

else i=1;

}

}

void deleterecord(student stu[],int i) /*刪除信息*/

{

int j;

while(i>=0)

{

for(j=i;j<numstus;j++)

stu[j]=stu[j+1];

numstus--;

printf("刪除成功!\n");

}

}

void count(student stud[])

{

int i,j;

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

{

stud[i].index=1;

for(j=0;j<numstus;j++)

if(stud[j].score>stud[i].score)

stud[i].index++;

}

}

#include "head.h"

void addrecord(student stud[])

{

int i=0,j,num;

char str[5];

if(numstus!=0)

{

printf("已有記錄存在是否覆蓋?(y/n)\n");

gets(str);

if(str[0]=='Y'||str[0]=='y')

i=0;

else i=numstus;

}

printf("請輸入增加的學生信息條目數:");

scanf("%d",&num);

if(i==0)

numstus=num;

else numstus+=num;

if(numstus>lens)

{

lens+=50;

pointer=(student *)realloc(pointer,lens*LEN);

}

printf("請輸入學生信息:\n");

for(;i<numstus;i++)

{

getchar();

printf("請輸入學號:");

gets(pointer[i].number);

printf("請輸入姓名:");

gets(pointer[i].name);

printf("請輸入性別(男/女 1/0):");

gets(pointer[i].sex);

if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");

else strcpy(pointer[i].sex,"男");

printf("請輸入各科成績:(按ABCDE的順序):");

stud[i].score=0;

for(j=0;j<numsubs;j++)

{

scanf("%f",&stud[i].subject[j]); /*計算總分*/

stud[i].score+=stud[i].subject[j];

}

stud[i].average=stud[i].score/numsubs; /*計算平均分*/

}

count(stud); /*附名次*/

display(stud,0,numstus-1);

getchar();

}#include "head.h"

int numstus;

int lens;

student *pointer;

void main()

{

int i=1;

char str[2];

lens=100;

pointer=(student *)malloc(lens*LEN); /*分配內存*/

numstus=0;

welcome(); /*歡迎界面*/

while(i>0)

{

i=menu_select(); /*控制菜單*/

switch(i)

{

case 1:addrecord(pointer);break; /*增加學生信息*/

case 2:findrecord(pointer);break; /*查詢學生信息*/

case 3:amendrecord(pointer);break; /*修改學生信息*/

case 4:sort(pointer);break; /*學生信息排序*/

case 5:statistic(pointer);break; /*統計信息*/

case 6:openfile(pointer);break; /*打開文件*/

case 7:writetotext(pointer);break; /*保存文件*/

case 8:display(pointer,0,numstus-1);break; /*顯示記錄*/

case 0:

if(numstus!=0) printf("是否保存當前記錄?(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

writetotext(pointer);

i=-1;break; /*退出系統*/

default:printf("請輸入數字0~8:\n");i=1; /*輸入錯誤*/

}

}

printf("\t\t歡迎再次使用本系統。\n\n");

display1();

}

自己壹改就能用,給我加分哈!

打字不易,如滿意,望采納。

  • 上一篇:Github源代碼項目類型
  • 下一篇:中國青年旅舍有會員卡的麽怎麽辦?怎麽訂房?
  • copyright 2024編程學習大全網