#include<conio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
long class_1; /*班級*/
long number; /*學號*/
char name[20]; /*姓名*/
float tall; /*身高*/
float math; /*數學*/
float c_program; /*C語言*/
float physics; /*大學物理*/
float english; /*大學英語*/
float sum; /*總分*/
float average; /*平均分*/
}Student;
Student stud[100];
int i=0;
int menu() /*菜單函數*/
{
int a;
system("graftabl 936");
printf("***********************學生信息管理系統************************\n\n\n");
printf("\t\t\t.(1)輸入學生信息\n");
printf("\t\t\t.(2)顯示所有學生信息\n");
printf("\t\t\t.(3)按平均分升降排序\n");
printf("\t\t\t.(4)根據學號查找學生信息\n");
printf("\t\t\t.(5)插入學生信息\n");
printf("\t\t\t.(6)刪除學生信息\n");
printf("\t\t\t.(7)修改學生信息\n");
printf("\t\t\t.(8)從文件中讀入數據\n");
printf("\t\t\t.(9)將所有記錄寫入文件\n");
printf("\t\t\t.(0)退出本系統\n\n\n");
printf("***********************學生信息管理系統************************\n");
printf("請選擇妳要的操作(0~9):");
scanf("%d",&a); /*讀入壹個數*/
while(a<0||a>9)
{
printf("輸入錯誤!請重新輸入:\n");
scanf("%d",&a); /*輸入錯誤就壹直循環*/
}
system("cls"); /*清屏*/
return(a); /*返回a的值*/
}
int input(Student stud[])
{
char flag='Y';
while(flag=='Y'||flag=='y')
{
printf("請輸入該學生的班級:");
scanf("%ld",&stud[i].class_1);
printf("請輸入該學生的學號:");
scanf("%ld",&stud[i].number);
printf("請輸入該學生的姓名:");
scanf("%s",stud[i].name);
printf("請輸入學生的身高:");
scanf("%f",&stud[i].tall);
printf("請輸入該學生的“數學”分數:");
scanf("%f",&stud[i].math);
printf("請輸入該學生的“C語言”分數:");
scanf("%f",&stud[i].c_program);
printf("請輸入該學生的“大學物理”分數:");
scanf("%f",&stud[i].physics);
printf("請輸入該學生的“大學英語”分數:");
scanf("%f",&stud[i].english);
getchar();
stud[i].sum=stud[i].math+stud[i].c_program+stud[i].physics+stud[i].english;
stud[i].average=stud[i].sum/4;
printf("該學生的總分為:%6.2f\t平均分為:%6.2f\n",stud[i].sum,stud[i].average);
i++;
printf("繼續輸入學生信息請按:Y or y,退出請按:N or n.\n");
scanf("%c",&flag); /*判斷是否繼續輸入*/
}
printf("按任意鍵回主菜單\n");
getchar();
system("cls");
return(i);
}
void Display(Student stud[],int n) /*顯示所有記錄*/
{
int k;
if(n==0)
printf("暫無學生記錄!\n");
else
{
printf(" 班別 學號 姓名 身高 數學 C語言 物理 英語 總分 平均分\n");
for(k=0;k<n;k++) /*循環輸出*/
{
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.1f",stud[k].tall);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sum);
printf("%8.2f\n",stud[k].average);
}
}
system("pause");
system("cls");
}
void Sort(Student stud[],int i) /*按平均分排序*/
{
int m,n,k; /*m,n為循環變量*/
Student t;
for(m=0;m<i-1;m++) /*排序*/
for(n=m+1;n<i;n++)
if(stud[m].average<stud[n].average)
{
t=stud[m];
stud[m]=stud[n];
stud[n]=t;
}
printf("排序後的順序為:\n");
printf(" 班別 學號 姓名 身高 數學 C語言 物理 英語 總分 平均分\n");
for(k=0;k<n;k++) /*循環輸出*/
{
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.1f",stud[k].tall);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sum);
printf("%8.2f\n",stud[k].average);
}
system("pause");
system("cls");
}
void Search(Student stud[],int i) /*查找並顯示壹個記錄*/
{
int p,k; /*p為要查找的學生學號*/
char flag='y';
while(flag=='y'||flag=='Y')
{
printf("請輸入要查找的學生學號:");
scanf("%d",&p);
getchar();
for(k=0;p!=stud[k].number&&k<i;k++)
if(k==i)
printf("該學號不存在!\n");
else
{
printf("該學生的信息為:\n");
printf(" 班別 學號 姓名 身高 數學 C語言 物理 英語 總分 平均分\n");
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.1f",stud[k].tall);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sum);
printf("%8.2f\n",stud[k].average);
}
printf("繼續查找學生信息請輸入:Y or y,退出輸入:N or n.\n");
scanf("%c",&flag);
}
system("cls");
}
int Insert(Student stud[],int i) /*插入學生信息*/
{
char flag='Y';
while(flag=='y'||flag=='Y')
{
printf("請輸入要插入學生的班別:");
scanf("%ld",&stud[i].class_1);
printf("請輸入要插入學生的學號:");
scanf("%ld",&stud[i].number);
printf("請輸入要插入學生的姓名:");
scanf("%s",&stud[i].name);
printf("請輸入要插入學生的身高:");
scanf("%f",&stud[i].tall);
printf("請輸入要插入學生的“數學”分數:");
scanf("%f",&stud[i].math);
printf("請輸入要插入學生的“C語言”分數:");
scanf("%f",&stud[i].c_program);
printf("請輸入要插入學生的“大學物理”分數:");
scanf("%f",&stud[i].physics);
printf("請輸入要插入學生的“大學英語”分數:");
scanf("%f",&stud[i].english);
getchar();
stud[i].sum=stud[i].math+stud[i].c_program+stud[i].physics+stud[i].english;
stud[i].average=stud[i].sum/4;
printf("該學生的總分為:%6.2f\n",stud[i].sum);
printf("該學生的平均分為:%6.3f\n",stud[i].average);
i++;
printf("繼續插入學生信息請輸入:Y or y,退出輸入:N or n.\n");
scanf("%c",&flag); /*判斷是否繼續輸入*/
}
getchar();
printf("是否需要排序,需要請按'Y' or 'y';不需要請按'N' or 'n'.\n");
flag=getchar();
if(flag=='y'||flag=='Y')
Sort(stud,i);
system("cls");
return(i);
}
int Delete(Student stud[],int i) /*根據學號刪除學生信息*/
{
long s;
int t,p;
char a='Y'; /*判斷是否繼續*/
while(a=='Y'||a=='y')
{
printf("請輸入需要刪除學生的學號:\n");
scanf("%ld",&s);
getchar();
for(t = 0; t < i && s!=stud[i].number; t++)
if(s==stud[t].number)
{
for(p=t;p<i;p++)
stud[p]=stud[p+1];
i=i-1;
printf("刪除成功!\n");
}
else printf("沒有找到要刪除的學號!\n");
printf("是否繼續刪除,繼續請按'Y' or 'y',退出請按'N' or 'n'.\n");
a=getchar(); /*判斷是否繼續*/
getchar(); /*消除回車鍵的影響*/
}
system("cls");
return(i);
}
void change(Student stud[],int i) /*修改學生信息*/
{
long p=0; /*p用來表示要修改的學生學號*/
int k; /*k為循環變量*/
char a='y';
while(a=='y'||a=='Y')
{
printf("\t\t學生信息修改:\n");
printf("請輸入要修改的學生的學號:\n");
scanf("%ld",&p);
for(k=0;p!=stud[k].number && k<i;k++)
if(k==i)
printf("無法找到該學生的信息:\n");
else
{
printf("該學生的信息為:\n");
printf(" 班別 學號 姓名 身高 數學 C語言 物理 英語 總分 平均分\n");
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.1f",stud[k].tall);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sum);
printf("%8.2f\n",stud[k].average);
printf("請輸入該學生的新信息:\n");
printf("請輸入該學生的班級:");
scanf("%d",&stud[k].class_1);
printf("請輸入該學生的學號:");
scanf("%d",&stud[k].number);
printf("請輸入該學生的姓名:");
scanf("%s",stud[k].name);
printf("請輸入該學生的身高:");
scanf("%f",&stud[k].tall);
printf("請輸入該學生的“數學”分數:");
scanf("%f",&stud[k].math);
printf("請輸入該學生的“C語言”分數:");
scanf("%f",&stud[k].c_program);
printf("請輸入該學生的“大學物理”分數:");
scanf("%f",&stud[k].physics);
printf("請輸入該學生的“大學英語”分數:");
scanf("%f",&stud[k].english);
getchar();
stud[k].sum=stud[k].math+stud[k].c_program+stud[k].physics+stud[k].english;
stud[k].average=stud[k].sum/4;
printf("修改成功!\n");
}
printf("是否繼續修改,繼續請按'y'或'Y',退出請按'N'或'n'.\n");
a=getchar();
}
system("pause");
system("cls");
}
int Read(Student stud[],int i) /*從文件中讀入學生信息*/
{
int k=i;
FILE *fp; /*定義壹個文件類型的指針*/
char filename[20]; /*定義文件名*/
printf("請輸入文件名:\n");
scanf("%s",&filename);
if((fp=fopen(filename,"rb"))==NULL) /*打開文件*/
{
printf("無法打開文件!\n"); /*打開失敗信息*/
return 0;
}
printf("從文件%s中讀入的數據為:\n",filename);
fread(&stud[k],sizeof(Student),1,fp);
printf(" 班別 學號 姓名 身高 數學 C語言 物理 英語 總分 平均分\n");
while(!feof(fp))
{
printf("%7ld",stud[k].class_1);
printf("%7ld",stud[k].number);
printf("%9s",stud[k].name);
printf("%7.1f",stud[k].tall);
printf("%7.2f",stud[k].math);
printf("%7.2f",stud[k].c_program);
printf("%7.2f",stud[k].physics);
printf("%7.2f",stud[k].english);
printf("%7.2f",stud[k].sum);
printf("%8.2f\n",stud[k].average);
k++;
fread(&stud[k],sizeof(Student),1,fp);
}
fclose(fp);
printf("讀入成功!\n");
system("pause");
system("cls");
return(k);
}
void Save(Student stud[],int i) /*將所有記錄寫入文件*/
{
int k=0;
FILE *fp; /*定義文件指針*/
char filename[80]; /*定義文件名*/
printf("請輸入您要儲存學生信息的文件名"); /*輸入文件名*/
scanf("%s",&filename);
if( (fp=fopen(filename,"wt"))==NULL) /*打開文件*/
{
printf("無法打開該文件!\n");
return;
}
while(k<i)
{
fwrite(&(stud[k]), sizeof(Student), 1, fp);
k++;
}
printf("信息保存成功!\n");
fclose(fp);
}
int main(void)
{
int n=0;
while(1) /*選擇判斷要執行的語句*/
{
switch(menu())
{
case 1:printf("\n***********輸入學生信息**********\n"); /*輸入學生信息*/
n=input(stud);break;
case 2:printf("\n***********顯示所有學生的信息*******\n");
Display(stud,n);break;
case 3:printf("\n***********按平均分升降排序*******\n");
Sort(stud,n);break;
case 4:printf("\n***********根據學號查找學生的信息*******\n");
Search(stud,n);break;
case 5:printf("\n***********插入學生的信息*******\n");
n=Insert(stud,n);break;
case 6:printf("\n***********刪除學生信息*******\n");
n=Delete(stud,n);
case 7:printf("\n***********修改學生的信息*******\n");
change(stud,n);break;
case 8:printf("\n***********從文件中讀入數據*******\n");
n=Read(stud,n);break;
case 9:printf("\n***********將所有記錄寫入文件*******\n");
Save(stud,n);break;
case 0:printf("\n***********感謝您的使用!*******\n");
exit(0);
}
}
return 0;
}
學生管理系統,,,這個可以不